summaryrefslogtreecommitdiff
path: root/macros/texinfo/contrib
diff options
context:
space:
mode:
authorNorbert Preining <norbert@preining.info>2019-09-02 13:46:59 +0900
committerNorbert Preining <norbert@preining.info>2019-09-02 13:46:59 +0900
commite0c6872cf40896c7be36b11dcc744620f10adf1d (patch)
tree60335e10d2f4354b0674ec22d7b53f0f8abee672 /macros/texinfo/contrib
Initial commit
Diffstat (limited to 'macros/texinfo/contrib')
-rw-r--r--macros/texinfo/contrib/texinfo-hu/texinfo.tex8369
-rw-r--r--macros/texinfo/contrib/texinfo-hu/texinfo/ABOUT-NLS768
-rw-r--r--macros/texinfo/contrib/texinfo-hu/texinfo/AUTHORS31
-rw-r--r--macros/texinfo/contrib/texinfo-hu/texinfo/COPYING340
-rw-r--r--macros/texinfo/contrib/texinfo-hu/texinfo/ChangeLog5008
-rw-r--r--macros/texinfo/contrib/texinfo-hu/texinfo/ChangeLog.4612516
-rw-r--r--macros/texinfo/contrib/texinfo-hu/texinfo/INSTALL45
-rw-r--r--macros/texinfo/contrib/texinfo-hu/texinfo/INSTALL.generic231
-rw-r--r--macros/texinfo/contrib/texinfo-hu/texinfo/INTRODUCTION108
-rw-r--r--macros/texinfo/contrib/texinfo-hu/texinfo/Makefile.am55
-rw-r--r--macros/texinfo/contrib/texinfo-hu/texinfo/Makefile.in679
-rw-r--r--macros/texinfo/contrib/texinfo-hu/texinfo/NEWS728
-rw-r--r--macros/texinfo/contrib/texinfo-hu/texinfo/README112
-rw-r--r--macros/texinfo/contrib/texinfo-hu/texinfo/README.dev44
-rw-r--r--macros/texinfo/contrib/texinfo-hu/texinfo/TODO181
-rw-r--r--macros/texinfo/contrib/texinfo-hu/texinfo/aclocal.m41090
-rw-r--r--macros/texinfo/contrib/texinfo-hu/texinfo/config.guess1453
-rw-r--r--macros/texinfo/contrib/texinfo-hu/texinfo/config.in420
-rw-r--r--macros/texinfo/contrib/texinfo-hu/texinfo/config.rpath548
-rw-r--r--macros/texinfo/contrib/texinfo-hu/texinfo/config.sub1566
-rw-r--r--macros/texinfo/contrib/texinfo-hu/texinfo/configure14795
-rw-r--r--macros/texinfo/contrib/texinfo-hu/texinfo/configure.ac224
-rw-r--r--macros/texinfo/contrib/texinfo-hu/texinfo/depcomp522
-rw-r--r--macros/texinfo/contrib/texinfo-hu/texinfo/djgpp/README431
-rw-r--r--macros/texinfo/contrib/texinfo-hu/texinfo/djgpp/config.bat240
-rw-r--r--macros/texinfo/contrib/texinfo-hu/texinfo/djgpp/config.sed67
-rw-r--r--macros/texinfo/contrib/texinfo-hu/texinfo/djgpp/config.site53
-rw-r--r--macros/texinfo/contrib/texinfo-hu/texinfo/doc/Makefile.am80
-rw-r--r--macros/texinfo/contrib/texinfo-hu/texinfo/doc/Makefile.in772
-rw-r--r--macros/texinfo/contrib/texinfo-hu/texinfo/doc/README44
-rw-r--r--macros/texinfo/contrib/texinfo-hu/texinfo/doc/epsf.tex547
-rw-r--r--macros/texinfo/contrib/texinfo-hu/texinfo/doc/fdl.texi452
-rw-r--r--macros/texinfo/contrib/texinfo-hu/texinfo/doc/huhyp.tex67
-rw-r--r--macros/texinfo/contrib/texinfo-hu/texinfo/doc/info-stnd.texi2203
-rw-r--r--macros/texinfo/contrib/texinfo-hu/texinfo/doc/info.189
-rw-r--r--macros/texinfo/contrib/texinfo-hu/texinfo/doc/info.562
-rw-r--r--macros/texinfo/contrib/texinfo-hu/texinfo/doc/info.texi1498
-rw-r--r--macros/texinfo/contrib/texinfo-hu/texinfo/doc/infokey.141
-rw-r--r--macros/texinfo/contrib/texinfo-hu/texinfo/doc/install-info.178
-rw-r--r--macros/texinfo/contrib/texinfo-hu/texinfo/doc/makeinfo.1205
-rw-r--r--macros/texinfo/contrib/texinfo-hu/texinfo/doc/mdate-sh170
-rw-r--r--macros/texinfo/contrib/texinfo-hu/texinfo/doc/pdfcolor.tex158
-rw-r--r--macros/texinfo/contrib/texinfo-hu/texinfo/doc/stamp-14
-rw-r--r--macros/texinfo/contrib/texinfo-hu/texinfo/doc/stamp-vti4
-rw-r--r--macros/texinfo/contrib/texinfo-hu/texinfo/doc/texi2dvi.195
-rw-r--r--macros/texinfo/contrib/texinfo-hu/texinfo/doc/texindex.147
-rw-r--r--macros/texinfo/contrib/texinfo-hu/texinfo/doc/texinfo.551
-rw-r--r--macros/texinfo/contrib/texinfo-hu/texinfo/doc/texinfo.tex7086
-rw-r--r--macros/texinfo/contrib/texinfo-hu/texinfo/doc/texinfo.txi20513
-rw-r--r--macros/texinfo/contrib/texinfo-hu/texinfo/doc/txi-cs.tex74
-rw-r--r--macros/texinfo/contrib/texinfo-hu/texinfo/doc/txi-de.tex79
-rw-r--r--macros/texinfo/contrib/texinfo-hu/texinfo/doc/txi-en.tex69
-rw-r--r--macros/texinfo/contrib/texinfo-hu/texinfo/doc/txi-es.tex58
-rw-r--r--macros/texinfo/contrib/texinfo-hu/texinfo/doc/txi-fr.tex73
-rw-r--r--macros/texinfo/contrib/texinfo-hu/texinfo/doc/txi-hu.tex454
-rw-r--r--macros/texinfo/contrib/texinfo-hu/texinfo/doc/txi-it.tex69
-rw-r--r--macros/texinfo/contrib/texinfo-hu/texinfo/doc/txi-nl.tex68
-rw-r--r--macros/texinfo/contrib/texinfo-hu/texinfo/doc/txi-no.tex69
-rw-r--r--macros/texinfo/contrib/texinfo-hu/texinfo/doc/txi-pl.tex73
-rw-r--r--macros/texinfo/contrib/texinfo-hu/texinfo/doc/txi-pt.tex69
-rw-r--r--macros/texinfo/contrib/texinfo-hu/texinfo/doc/txi-tr.tex82
-rw-r--r--macros/texinfo/contrib/texinfo-hu/texinfo/doc/version-stnd.texi4
-rw-r--r--macros/texinfo/contrib/texinfo-hu/texinfo/doc/version.texi4
-rw-r--r--macros/texinfo/contrib/texinfo-hu/texinfo/info/Makefile.am74
-rw-r--r--macros/texinfo/contrib/texinfo-hu/texinfo/info/Makefile.in584
-rw-r--r--macros/texinfo/contrib/texinfo-hu/texinfo/info/README30
-rw-r--r--macros/texinfo/contrib/texinfo-hu/texinfo/info/dir.c290
-rw-r--r--macros/texinfo/contrib/texinfo-hu/texinfo/info/display.c646
-rw-r--r--macros/texinfo/contrib/texinfo-hu/texinfo/info/display.h78
-rw-r--r--macros/texinfo/contrib/texinfo-hu/texinfo/info/doc.h103
-rw-r--r--macros/texinfo/contrib/texinfo-hu/texinfo/info/dribble.c68
-rw-r--r--macros/texinfo/contrib/texinfo-hu/texinfo/info/dribble.h41
-rw-r--r--macros/texinfo/contrib/texinfo-hu/texinfo/info/echo-area.c1524
-rw-r--r--macros/texinfo/contrib/texinfo-hu/texinfo/info/echo-area.h85
-rw-r--r--macros/texinfo/contrib/texinfo-hu/texinfo/info/filesys.c711
-rw-r--r--macros/texinfo/contrib/texinfo-hu/texinfo/info/filesys.h92
-rw-r--r--macros/texinfo/contrib/texinfo-hu/texinfo/info/footnotes.c268
-rw-r--r--macros/texinfo/contrib/texinfo-hu/texinfo/info/footnotes.h43
-rw-r--r--macros/texinfo/contrib/texinfo-hu/texinfo/info/gc.c92
-rw-r--r--macros/texinfo/contrib/texinfo-hu/texinfo/info/gc.h37
-rw-r--r--macros/texinfo/contrib/texinfo-hu/texinfo/info/indices.c735
-rw-r--r--macros/texinfo/contrib/texinfo-hu/texinfo/info/indices.h45
-rw-r--r--macros/texinfo/contrib/texinfo-hu/texinfo/info/info-utils.c701
-rw-r--r--macros/texinfo/contrib/texinfo-hu/texinfo/info/info-utils.h136
-rw-r--r--macros/texinfo/contrib/texinfo-hu/texinfo/info/info.c685
-rw-r--r--macros/texinfo/contrib/texinfo-hu/texinfo/info/info.h160
-rw-r--r--macros/texinfo/contrib/texinfo-hu/texinfo/info/infodoc.c1200
-rw-r--r--macros/texinfo/contrib/texinfo-hu/texinfo/info/infokey.c924
-rw-r--r--macros/texinfo/contrib/texinfo-hu/texinfo/info/infokey.h128
-rw-r--r--macros/texinfo/contrib/texinfo-hu/texinfo/info/infomap.c1831
-rw-r--r--macros/texinfo/contrib/texinfo-hu/texinfo/info/infomap.h82
-rw-r--r--macros/texinfo/contrib/texinfo-hu/texinfo/info/key.h35
-rw-r--r--macros/texinfo/contrib/texinfo-hu/texinfo/info/m-x.c214
-rw-r--r--macros/texinfo/contrib/texinfo-hu/texinfo/info/makedoc.c578
-rw-r--r--macros/texinfo/contrib/texinfo-hu/texinfo/info/man.c734
-rw-r--r--macros/texinfo/contrib/texinfo-hu/texinfo/info/man.h39
-rw-r--r--macros/texinfo/contrib/texinfo-hu/texinfo/info/nodemenu.c347
-rw-r--r--macros/texinfo/contrib/texinfo-hu/texinfo/info/nodes.c1263
-rw-r--r--macros/texinfo/contrib/texinfo-hu/texinfo/info/nodes.h156
-rw-r--r--macros/texinfo/contrib/texinfo-hu/texinfo/info/pcterm.c759
-rw-r--r--macros/texinfo/contrib/texinfo-hu/texinfo/info/search.c497
-rw-r--r--macros/texinfo/contrib/texinfo-hu/texinfo/info/search.h75
-rw-r--r--macros/texinfo/contrib/texinfo-hu/texinfo/info/session.c5039
-rw-r--r--macros/texinfo/contrib/texinfo-hu/texinfo/info/session.h237
-rw-r--r--macros/texinfo/contrib/texinfo-hu/texinfo/info/signals.c295
-rw-r--r--macros/texinfo/contrib/texinfo-hu/texinfo/info/signals.h96
-rw-r--r--macros/texinfo/contrib/texinfo-hu/texinfo/info/termdep.h59
-rw-r--r--macros/texinfo/contrib/texinfo-hu/texinfo/info/terminal.c873
-rw-r--r--macros/texinfo/contrib/texinfo-hu/texinfo/info/terminal.h130
-rw-r--r--macros/texinfo/contrib/texinfo-hu/texinfo/info/tilde.c342
-rw-r--r--macros/texinfo/contrib/texinfo-hu/texinfo/info/tilde.h54
-rw-r--r--macros/texinfo/contrib/texinfo-hu/texinfo/info/variables.c305
-rw-r--r--macros/texinfo/contrib/texinfo-hu/texinfo/info/variables.h66
-rw-r--r--macros/texinfo/contrib/texinfo-hu/texinfo/info/window.c1554
-rw-r--r--macros/texinfo/contrib/texinfo-hu/texinfo/info/window.h241
-rw-r--r--macros/texinfo/contrib/texinfo-hu/texinfo/install-sh323
-rw-r--r--macros/texinfo/contrib/texinfo-hu/texinfo/intl/ChangeLog4
-rw-r--r--macros/texinfo/contrib/texinfo-hu/texinfo/intl/Makefile.in493
-rw-r--r--macros/texinfo/contrib/texinfo-hu/texinfo/intl/VERSION1
-rw-r--r--macros/texinfo/contrib/texinfo-hu/texinfo/intl/bindtextdom.c363
-rw-r--r--macros/texinfo/contrib/texinfo-hu/texinfo/intl/config.charset608
-rw-r--r--macros/texinfo/contrib/texinfo-hu/texinfo/intl/dcgettext.c56
-rw-r--r--macros/texinfo/contrib/texinfo-hu/texinfo/intl/dcigettext.c1219
-rw-r--r--macros/texinfo/contrib/texinfo-hu/texinfo/intl/dcngettext.c57
-rw-r--r--macros/texinfo/contrib/texinfo-hu/texinfo/intl/dgettext.c58
-rw-r--r--macros/texinfo/contrib/texinfo-hu/texinfo/intl/dngettext.c59
-rw-r--r--macros/texinfo/contrib/texinfo-hu/texinfo/intl/eval-plural.h108
-rw-r--r--macros/texinfo/contrib/texinfo-hu/texinfo/intl/explodename.c185
-rw-r--r--macros/texinfo/contrib/texinfo-hu/texinfo/intl/finddomain.c192
-rw-r--r--macros/texinfo/contrib/texinfo-hu/texinfo/intl/gettext.c63
-rw-r--r--macros/texinfo/contrib/texinfo-hu/texinfo/intl/gettextP.h215
-rw-r--r--macros/texinfo/contrib/texinfo-hu/texinfo/intl/gmo.h149
-rw-r--r--macros/texinfo/contrib/texinfo-hu/texinfo/intl/hash-string.h48
-rw-r--r--macros/texinfo/contrib/texinfo-hu/texinfo/intl/intl-compat.c131
-rw-r--r--macros/texinfo/contrib/texinfo-hu/texinfo/intl/l10nflist.c421
-rw-r--r--macros/texinfo/contrib/texinfo-hu/texinfo/intl/libgnuintl.h.in383
-rw-r--r--macros/texinfo/contrib/texinfo-hu/texinfo/intl/loadinfo.h145
-rw-r--r--macros/texinfo/contrib/texinfo-hu/texinfo/intl/loadmsgcat.c1420
-rw-r--r--macros/texinfo/contrib/texinfo-hu/texinfo/intl/localcharset.c398
-rw-r--r--macros/texinfo/contrib/texinfo-hu/texinfo/intl/localcharset.h42
-rw-r--r--macros/texinfo/contrib/texinfo-hu/texinfo/intl/locale.alias78
-rw-r--r--macros/texinfo/contrib/texinfo-hu/texinfo/intl/localealias.c414
-rw-r--r--macros/texinfo/contrib/texinfo-hu/texinfo/intl/localename.c1142
-rw-r--r--macros/texinfo/contrib/texinfo-hu/texinfo/intl/log.c98
-rw-r--r--macros/texinfo/contrib/texinfo-hu/texinfo/intl/ngettext.c65
-rw-r--r--macros/texinfo/contrib/texinfo-hu/texinfo/intl/os2compat.c98
-rw-r--r--macros/texinfo/contrib/texinfo-hu/texinfo/intl/os2compat.h46
-rw-r--r--macros/texinfo/contrib/texinfo-hu/texinfo/intl/osdep.c24
-rw-r--r--macros/texinfo/contrib/texinfo-hu/texinfo/intl/plural-exp.c154
-rw-r--r--macros/texinfo/contrib/texinfo-hu/texinfo/intl/plural-exp.h118
-rw-r--r--macros/texinfo/contrib/texinfo-hu/texinfo/intl/plural.c1490
-rw-r--r--macros/texinfo/contrib/texinfo-hu/texinfo/intl/plural.y381
-rw-r--r--macros/texinfo/contrib/texinfo-hu/texinfo/intl/printf-args.c119
-rw-r--r--macros/texinfo/contrib/texinfo-hu/texinfo/intl/printf-args.h137
-rw-r--r--macros/texinfo/contrib/texinfo-hu/texinfo/intl/printf-parse.c537
-rw-r--r--macros/texinfo/contrib/texinfo-hu/texinfo/intl/printf-parse.h75
-rw-r--r--macros/texinfo/contrib/texinfo-hu/texinfo/intl/printf.c371
-rw-r--r--macros/texinfo/contrib/texinfo-hu/texinfo/intl/ref-add.sin31
-rw-r--r--macros/texinfo/contrib/texinfo-hu/texinfo/intl/ref-del.sin26
-rw-r--r--macros/texinfo/contrib/texinfo-hu/texinfo/intl/relocatable.c449
-rw-r--r--macros/texinfo/contrib/texinfo-hu/texinfo/intl/relocatable.h77
-rw-r--r--macros/texinfo/contrib/texinfo-hu/texinfo/intl/textdomain.c141
-rw-r--r--macros/texinfo/contrib/texinfo-hu/texinfo/intl/vasnprintf.c887
-rw-r--r--macros/texinfo/contrib/texinfo-hu/texinfo/intl/vasnprintf.h61
-rw-r--r--macros/texinfo/contrib/texinfo-hu/texinfo/intl/vasnwprintf.h46
-rw-r--r--macros/texinfo/contrib/texinfo-hu/texinfo/intl/wprintf-parse.h75
-rw-r--r--macros/texinfo/contrib/texinfo-hu/texinfo/intl/xsize.h109
-rw-r--r--macros/texinfo/contrib/texinfo-hu/texinfo/lib/Makefile.am26
-rw-r--r--macros/texinfo/contrib/texinfo-hu/texinfo/lib/Makefile.in474
-rw-r--r--macros/texinfo/contrib/texinfo-hu/texinfo/lib/README13
-rw-r--r--macros/texinfo/contrib/texinfo-hu/texinfo/lib/alloca.c491
-rw-r--r--macros/texinfo/contrib/texinfo-hu/texinfo/lib/getopt.c1234
-rw-r--r--macros/texinfo/contrib/texinfo-hu/texinfo/lib/getopt.h10
-rw-r--r--macros/texinfo/contrib/texinfo-hu/texinfo/lib/getopt1.c171
-rw-r--r--macros/texinfo/contrib/texinfo-hu/texinfo/lib/getopt_.h176
-rw-r--r--macros/texinfo/contrib/texinfo-hu/texinfo/lib/getopt_int.h129
-rw-r--r--macros/texinfo/contrib/texinfo-hu/texinfo/lib/gettext.h68
-rw-r--r--macros/texinfo/contrib/texinfo-hu/texinfo/lib/memcpy.c38
-rw-r--r--macros/texinfo/contrib/texinfo-hu/texinfo/lib/memmove.c28
-rw-r--r--macros/texinfo/contrib/texinfo-hu/texinfo/lib/mkstemp.c42
-rw-r--r--macros/texinfo/contrib/texinfo-hu/texinfo/lib/strcase.h35
-rw-r--r--macros/texinfo/contrib/texinfo-hu/texinfo/lib/strcasecmp.c66
-rw-r--r--macros/texinfo/contrib/texinfo-hu/texinfo/lib/strdup.c56
-rw-r--r--macros/texinfo/contrib/texinfo-hu/texinfo/lib/strdup.h29
-rw-r--r--macros/texinfo/contrib/texinfo-hu/texinfo/lib/strerror.c49
-rw-r--r--macros/texinfo/contrib/texinfo-hu/texinfo/lib/strncasecmp.c2
-rw-r--r--macros/texinfo/contrib/texinfo-hu/texinfo/lib/substring.c35
-rw-r--r--macros/texinfo/contrib/texinfo-hu/texinfo/lib/system.h291
-rw-r--r--macros/texinfo/contrib/texinfo-hu/texinfo/lib/tempname.c344
-rw-r--r--macros/texinfo/contrib/texinfo-hu/texinfo/lib/xalloc.h90
-rw-r--r--macros/texinfo/contrib/texinfo-hu/texinfo/lib/xexit.c87
-rw-r--r--macros/texinfo/contrib/texinfo-hu/texinfo/lib/xmalloc.c61
-rw-r--r--macros/texinfo/contrib/texinfo-hu/texinfo/lib/xstrdup.c33
-rw-r--r--macros/texinfo/contrib/texinfo-hu/texinfo/m4/ChangeLog51
-rw-r--r--macros/texinfo/contrib/texinfo-hu/texinfo/m4/Makefile.am24
-rw-r--r--macros/texinfo/contrib/texinfo-hu/texinfo/m4/Makefile.in360
-rw-r--r--macros/texinfo/contrib/texinfo-hu/texinfo/m4/check-decl.m475
-rw-r--r--macros/texinfo/contrib/texinfo-hu/texinfo/m4/codeset.m423
-rw-r--r--macros/texinfo/contrib/texinfo-hu/texinfo/m4/gettext.m4487
-rw-r--r--macros/texinfo/contrib/texinfo-hu/texinfo/m4/glibc21.m432
-rw-r--r--macros/texinfo/contrib/texinfo-hu/texinfo/m4/iconv.m4103
-rw-r--r--macros/texinfo/contrib/texinfo-hu/texinfo/m4/intdiv0.m472
-rw-r--r--macros/texinfo/contrib/texinfo-hu/texinfo/m4/intmax.m432
-rw-r--r--macros/texinfo/contrib/texinfo-hu/texinfo/m4/inttypes-pri.m432
-rw-r--r--macros/texinfo/contrib/texinfo-hu/texinfo/m4/inttypes.m427
-rw-r--r--macros/texinfo/contrib/texinfo-hu/texinfo/m4/inttypes_h.m428
-rw-r--r--macros/texinfo/contrib/texinfo-hu/texinfo/m4/isc-posix.m426
-rw-r--r--macros/texinfo/contrib/texinfo-hu/texinfo/m4/lcmessage.m432
-rw-r--r--macros/texinfo/contrib/texinfo-hu/texinfo/m4/lib-ld.m4112
-rw-r--r--macros/texinfo/contrib/texinfo-hu/texinfo/m4/lib-link.m4551
-rw-r--r--macros/texinfo/contrib/texinfo-hu/texinfo/m4/lib-prefix.m4155
-rw-r--r--macros/texinfo/contrib/texinfo-hu/texinfo/m4/longdouble.m430
-rw-r--r--macros/texinfo/contrib/texinfo-hu/texinfo/m4/longlong.m425
-rw-r--r--macros/texinfo/contrib/texinfo-hu/texinfo/m4/mkstemp.m466
-rw-r--r--macros/texinfo/contrib/texinfo-hu/texinfo/m4/nls.m449
-rw-r--r--macros/texinfo/contrib/texinfo-hu/texinfo/m4/onceonly.m463
-rw-r--r--macros/texinfo/contrib/texinfo-hu/texinfo/m4/onceonly_2_57.m486
-rw-r--r--macros/texinfo/contrib/texinfo-hu/texinfo/m4/po.m4426
-rw-r--r--macros/texinfo/contrib/texinfo-hu/texinfo/m4/prereq.m4129
-rw-r--r--macros/texinfo/contrib/texinfo-hu/texinfo/m4/printf-posix.m446
-rw-r--r--macros/texinfo/contrib/texinfo-hu/texinfo/m4/progtest.m491
-rw-r--r--macros/texinfo/contrib/texinfo-hu/texinfo/m4/signed.m419
-rw-r--r--macros/texinfo/contrib/texinfo-hu/texinfo/m4/size_max.m461
-rw-r--r--macros/texinfo/contrib/texinfo-hu/texinfo/m4/stdint_h.m428
-rw-r--r--macros/texinfo/contrib/texinfo-hu/texinfo/m4/strcase.m439
-rw-r--r--macros/texinfo/contrib/texinfo-hu/texinfo/m4/uintmax_t.m432
-rw-r--r--macros/texinfo/contrib/texinfo-hu/texinfo/m4/ulonglong.m425
-rw-r--r--macros/texinfo/contrib/texinfo-hu/texinfo/m4/wchar_t.m422
-rw-r--r--macros/texinfo/contrib/texinfo-hu/texinfo/m4/wint_t.m422
-rw-r--r--macros/texinfo/contrib/texinfo-hu/texinfo/m4/xsize.m414
-rw-r--r--macros/texinfo/contrib/texinfo-hu/texinfo/makeinfo/Makefile.am28
-rw-r--r--macros/texinfo/contrib/texinfo-hu/texinfo/makeinfo/Makefile.in600
-rw-r--r--macros/texinfo/contrib/texinfo-hu/texinfo/makeinfo/README17
-rw-r--r--macros/texinfo/contrib/texinfo-hu/texinfo/makeinfo/cmds.c1883
-rw-r--r--macros/texinfo/contrib/texinfo-hu/texinfo/makeinfo/cmds.h213
-rw-r--r--macros/texinfo/contrib/texinfo-hu/texinfo/makeinfo/defun.c720
-rw-r--r--macros/texinfo/contrib/texinfo-hu/texinfo/makeinfo/defun.h31
-rw-r--r--macros/texinfo/contrib/texinfo-hu/texinfo/makeinfo/files.c784
-rw-r--r--macros/texinfo/contrib/texinfo-hu/texinfo/makeinfo/files.h70
-rw-r--r--macros/texinfo/contrib/texinfo-hu/texinfo/makeinfo/float.c430
-rw-r--r--macros/texinfo/contrib/texinfo-hu/texinfo/makeinfo/float.h56
-rw-r--r--macros/texinfo/contrib/texinfo-hu/texinfo/makeinfo/footnote.c391
-rw-r--r--macros/texinfo/contrib/texinfo-hu/texinfo/makeinfo/footnote.h38
-rw-r--r--macros/texinfo/contrib/texinfo-hu/texinfo/makeinfo/html.c822
-rw-r--r--macros/texinfo/contrib/texinfo-hu/texinfo/makeinfo/html.h65
-rw-r--r--macros/texinfo/contrib/texinfo-hu/texinfo/makeinfo/index.c964
-rw-r--r--macros/texinfo/contrib/texinfo-hu/texinfo/makeinfo/index.h93
-rw-r--r--macros/texinfo/contrib/texinfo-hu/texinfo/makeinfo/insertion.c2376
-rw-r--r--macros/texinfo/contrib/texinfo-hu/texinfo/makeinfo/insertion.h78
-rw-r--r--macros/texinfo/contrib/texinfo-hu/texinfo/makeinfo/lang.c1020
-rw-r--r--macros/texinfo/contrib/texinfo-hu/texinfo/makeinfo/lang.h148
-rw-r--r--macros/texinfo/contrib/texinfo-hu/texinfo/makeinfo/macro.c1108
-rw-r--r--macros/texinfo/contrib/texinfo-hu/texinfo/makeinfo/macro.h77
-rw-r--r--macros/texinfo/contrib/texinfo-hu/texinfo/makeinfo/makeinfo.c4157
-rw-r--r--macros/texinfo/contrib/texinfo-hu/texinfo/makeinfo/makeinfo.h386
-rw-r--r--macros/texinfo/contrib/texinfo-hu/texinfo/makeinfo/multi.c638
-rw-r--r--macros/texinfo/contrib/texinfo-hu/texinfo/makeinfo/multi.h28
-rw-r--r--macros/texinfo/contrib/texinfo-hu/texinfo/makeinfo/node.c1943
-rw-r--r--macros/texinfo/contrib/texinfo-hu/texinfo/makeinfo/node.h129
-rw-r--r--macros/texinfo/contrib/texinfo-hu/texinfo/makeinfo/sectioning.c831
-rw-r--r--macros/texinfo/contrib/texinfo-hu/texinfo/makeinfo/sectioning.h103
-rw-r--r--macros/texinfo/contrib/texinfo-hu/texinfo/makeinfo/tests/Makefile.am36
-rw-r--r--macros/texinfo/contrib/texinfo-hu/texinfo/makeinfo/tests/Makefile.in447
-rw-r--r--macros/texinfo/contrib/texinfo-hu/texinfo/makeinfo/tests/accent34
-rw-r--r--macros/texinfo/contrib/texinfo-hu/texinfo/makeinfo/tests/accent-text.txi73
-rw-r--r--macros/texinfo/contrib/texinfo-hu/texinfo/makeinfo/tests/accent.txi10
-rw-r--r--macros/texinfo/contrib/texinfo-hu/texinfo/makeinfo/tests/accentenc24
-rw-r--r--macros/texinfo/contrib/texinfo-hu/texinfo/makeinfo/tests/accentenc.txi11
-rw-r--r--macros/texinfo/contrib/texinfo-hu/texinfo/makeinfo/tests/cond33
-rw-r--r--macros/texinfo/contrib/texinfo-hu/texinfo/makeinfo/tests/cond.txi40
-rw-r--r--macros/texinfo/contrib/texinfo-hu/texinfo/makeinfo/tests/copying13
-rw-r--r--macros/texinfo/contrib/texinfo-hu/texinfo/makeinfo/tests/copying.txi4
-rw-r--r--macros/texinfo/contrib/texinfo-hu/texinfo/makeinfo/tests/defxcond16
-rw-r--r--macros/texinfo/contrib/texinfo-hu/texinfo/makeinfo/tests/defxcond.txi18
-rw-r--r--macros/texinfo/contrib/texinfo-hu/texinfo/makeinfo/tests/html-docdesc12
-rw-r--r--macros/texinfo/contrib/texinfo-hu/texinfo/makeinfo/tests/html-docdesc.txi14
-rw-r--r--macros/texinfo/contrib/texinfo-hu/texinfo/makeinfo/tests/html-extrali15
-rw-r--r--macros/texinfo/contrib/texinfo-hu/texinfo/makeinfo/tests/html-extrali.txi11
-rw-r--r--macros/texinfo/contrib/texinfo-hu/texinfo/makeinfo/tests/html-manuals13
-rw-r--r--macros/texinfo/contrib/texinfo-hu/texinfo/makeinfo/tests/html-min8
-rw-r--r--macros/texinfo/contrib/texinfo-hu/texinfo/makeinfo/tests/html-min.txi12
-rw-r--r--macros/texinfo/contrib/texinfo-hu/texinfo/makeinfo/tests/html-para8
-rw-r--r--macros/texinfo/contrib/texinfo-hu/texinfo/makeinfo/tests/html-para.txi24
-rw-r--r--macros/texinfo/contrib/texinfo-hu/texinfo/makeinfo/tests/html-title13
-rw-r--r--macros/texinfo/contrib/texinfo-hu/texinfo/makeinfo/tests/html-title.txi12
-rw-r--r--macros/texinfo/contrib/texinfo-hu/texinfo/makeinfo/tests/html-top13
-rw-r--r--macros/texinfo/contrib/texinfo-hu/texinfo/makeinfo/tests/html-top.txi7
-rw-r--r--macros/texinfo/contrib/texinfo-hu/texinfo/makeinfo/tests/incl-incl.txi1
-rw-r--r--macros/texinfo/contrib/texinfo-hu/texinfo/makeinfo/tests/include-value22
-rw-r--r--macros/texinfo/contrib/texinfo-hu/texinfo/makeinfo/tests/include-value.txi32
-rw-r--r--macros/texinfo/contrib/texinfo-hu/texinfo/makeinfo/tests/macro-at8
-rw-r--r--macros/texinfo/contrib/texinfo-hu/texinfo/makeinfo/tests/macro-at.txi38
-rw-r--r--macros/texinfo/contrib/texinfo-hu/texinfo/makeinfo/tests/menu-whitespace72
-rw-r--r--macros/texinfo/contrib/texinfo-hu/texinfo/makeinfo/tests/menu-whitespace.txi18
-rw-r--r--macros/texinfo/contrib/texinfo-hu/texinfo/makeinfo/tests/no-headers9
-rw-r--r--macros/texinfo/contrib/texinfo-hu/texinfo/makeinfo/tests/node-expand12
-rw-r--r--macros/texinfo/contrib/texinfo-hu/texinfo/makeinfo/tests/node-expand.txi64
-rw-r--r--macros/texinfo/contrib/texinfo-hu/texinfo/makeinfo/tests/node-value12
-rw-r--r--macros/texinfo/contrib/texinfo-hu/texinfo/makeinfo/tests/node-value.txi15
-rw-r--r--macros/texinfo/contrib/texinfo-hu/texinfo/makeinfo/tests/node-whitespace12
-rw-r--r--macros/texinfo/contrib/texinfo-hu/texinfo/makeinfo/tests/node-whitespace.txi30
-rw-r--r--macros/texinfo/contrib/texinfo-hu/texinfo/makeinfo/tests/top11
-rw-r--r--macros/texinfo/contrib/texinfo-hu/texinfo/makeinfo/tests/top.txi25
-rw-r--r--macros/texinfo/contrib/texinfo-hu/texinfo/makeinfo/tests/twofiles23
-rw-r--r--macros/texinfo/contrib/texinfo-hu/texinfo/makeinfo/toc.c388
-rw-r--r--macros/texinfo/contrib/texinfo-hu/texinfo/makeinfo/toc.h45
-rw-r--r--macros/texinfo/contrib/texinfo-hu/texinfo/makeinfo/xml.c2328
-rw-r--r--macros/texinfo/contrib/texinfo-hu/texinfo/makeinfo/xml.h159
-rw-r--r--macros/texinfo/contrib/texinfo-hu/texinfo/makeinfo/xref.c620
-rw-r--r--macros/texinfo/contrib/texinfo-hu/texinfo/makeinfo/xref.h30
-rw-r--r--macros/texinfo/contrib/texinfo-hu/texinfo/missing353
-rw-r--r--macros/texinfo/contrib/texinfo-hu/texinfo/mkinstalldirs150
-rw-r--r--macros/texinfo/contrib/texinfo-hu/texinfo/new/README.txt46
-rw-r--r--macros/texinfo/contrib/texinfo-hu/texinfo/new/ct.bat8
-rw-r--r--macros/texinfo/contrib/texinfo-hu/texinfo/new/file_id.diz9
-rw-r--r--macros/texinfo/contrib/texinfo-hu/texinfo/new/hdr0.mac37
-rw-r--r--macros/texinfo/contrib/texinfo-hu/texinfo/new/huhyp.tex67
-rw-r--r--macros/texinfo/contrib/texinfo-hu/texinfo/new/info.tcpbin0 -> 1108 bytes
-rw-r--r--macros/texinfo/contrib/texinfo-hu/texinfo/new/info.txt68
-rw-r--r--macros/texinfo/contrib/texinfo-hu/texinfo/new/txi-hu.tex396
-rw-r--r--macros/texinfo/contrib/texinfo-hu/texinfo/new/txi_hu.pdfbin0 -> 96578 bytes
-rw-r--r--macros/texinfo/contrib/texinfo-hu/texinfo/new/txi_hu.txt513
-rw-r--r--macros/texinfo/contrib/texinfo-hu/texinfo/po/ChangeLog14
-rw-r--r--macros/texinfo/contrib/texinfo-hu/texinfo/po/LINGUAS19
-rw-r--r--macros/texinfo/contrib/texinfo-hu/texinfo/po/Makefile.in.in366
-rw-r--r--macros/texinfo/contrib/texinfo-hu/texinfo/po/Makevars41
-rw-r--r--macros/texinfo/contrib/texinfo-hu/texinfo/po/POTFILES.in47
-rw-r--r--macros/texinfo/contrib/texinfo-hu/texinfo/po/Rules-quot47
-rw-r--r--macros/texinfo/contrib/texinfo-hu/texinfo/po/boldquot.sed10
-rw-r--r--macros/texinfo/contrib/texinfo-hu/texinfo/po/cs.gmobin0 -> 38319 bytes
-rw-r--r--macros/texinfo/contrib/texinfo-hu/texinfo/po/cs.po3206
-rw-r--r--macros/texinfo/contrib/texinfo-hu/texinfo/po/da.gmobin0 -> 58319 bytes
-rw-r--r--macros/texinfo/contrib/texinfo-hu/texinfo/po/da.po3101
-rw-r--r--macros/texinfo/contrib/texinfo-hu/texinfo/po/de.gmobin0 -> 79236 bytes
-rw-r--r--macros/texinfo/contrib/texinfo-hu/texinfo/po/de.po3267
-rw-r--r--macros/texinfo/contrib/texinfo-hu/texinfo/po/de_AT.gmobin0 -> 431 bytes
-rw-r--r--macros/texinfo/contrib/texinfo-hu/texinfo/po/de_AT.po2788
-rw-r--r--macros/texinfo/contrib/texinfo-hu/texinfo/po/en@boldquot.header25
-rw-r--r--macros/texinfo/contrib/texinfo-hu/texinfo/po/en@quot.header22
-rw-r--r--macros/texinfo/contrib/texinfo-hu/texinfo/po/eo.gmobin0 -> 61416 bytes
-rw-r--r--macros/texinfo/contrib/texinfo-hu/texinfo/po/eo.po3115
-rw-r--r--macros/texinfo/contrib/texinfo-hu/texinfo/po/fr.gmobin0 -> 78442 bytes
-rw-r--r--macros/texinfo/contrib/texinfo-hu/texinfo/po/fr.po3524
-rw-r--r--macros/texinfo/contrib/texinfo-hu/texinfo/po/he.gmobin0 -> 54894 bytes
-rw-r--r--macros/texinfo/contrib/texinfo-hu/texinfo/po/he.po3074
-rw-r--r--macros/texinfo/contrib/texinfo-hu/texinfo/po/hr.gmobin0 -> 35667 bytes
-rw-r--r--macros/texinfo/contrib/texinfo-hu/texinfo/po/hr.po3092
-rw-r--r--macros/texinfo/contrib/texinfo-hu/texinfo/po/insert-header.sin23
-rw-r--r--macros/texinfo/contrib/texinfo-hu/texinfo/po/ja.gmobin0 -> 46062 bytes
-rw-r--r--macros/texinfo/contrib/texinfo-hu/texinfo/po/ja.po3355
-rw-r--r--macros/texinfo/contrib/texinfo-hu/texinfo/po/nb.gmobin0 -> 73021 bytes
-rw-r--r--macros/texinfo/contrib/texinfo-hu/texinfo/po/nb.po3108
-rw-r--r--macros/texinfo/contrib/texinfo-hu/texinfo/po/nl.gmobin0 -> 25393 bytes
-rw-r--r--macros/texinfo/contrib/texinfo-hu/texinfo/po/nl.po3273
-rw-r--r--macros/texinfo/contrib/texinfo-hu/texinfo/po/no.gmobin0 -> 63334 bytes
-rw-r--r--macros/texinfo/contrib/texinfo-hu/texinfo/po/no.po3123
-rw-r--r--macros/texinfo/contrib/texinfo-hu/texinfo/po/pl.gmobin0 -> 75698 bytes
-rw-r--r--macros/texinfo/contrib/texinfo-hu/texinfo/po/pl.po3111
-rw-r--r--macros/texinfo/contrib/texinfo-hu/texinfo/po/quot.sed6
-rw-r--r--macros/texinfo/contrib/texinfo-hu/texinfo/po/remove-potcdate.sin19
-rw-r--r--macros/texinfo/contrib/texinfo-hu/texinfo/po/ro.gmobin0 -> 75177 bytes
-rw-r--r--macros/texinfo/contrib/texinfo-hu/texinfo/po/ro.po3125
-rw-r--r--macros/texinfo/contrib/texinfo-hu/texinfo/po/ru.gmobin0 -> 75348 bytes
-rw-r--r--macros/texinfo/contrib/texinfo-hu/texinfo/po/ru.po3115
-rw-r--r--macros/texinfo/contrib/texinfo-hu/texinfo/po/stamp-po1
-rw-r--r--macros/texinfo/contrib/texinfo-hu/texinfo/po/sv.gmobin0 -> 73730 bytes
-rw-r--r--macros/texinfo/contrib/texinfo-hu/texinfo/po/sv.po3369
-rw-r--r--macros/texinfo/contrib/texinfo-hu/texinfo/po/texinfo.pot2787
-rw-r--r--macros/texinfo/contrib/texinfo-hu/texinfo/po/tr.gmobin0 -> 73295 bytes
-rw-r--r--macros/texinfo/contrib/texinfo-hu/texinfo/po/tr.po3123
-rw-r--r--macros/texinfo/contrib/texinfo-hu/texinfo/po/zh_CN.gmobin0 -> 50487 bytes
-rw-r--r--macros/texinfo/contrib/texinfo-hu/texinfo/po/zh_CN.po3050
-rw-r--r--macros/texinfo/contrib/texinfo-hu/texinfo/po/zh_TW.gmobin0 -> 31062 bytes
-rw-r--r--macros/texinfo/contrib/texinfo-hu/texinfo/po/zh_TW.po3111
-rw-r--r--macros/texinfo/contrib/texinfo-hu/texinfo/updated9
-rw-r--r--macros/texinfo/contrib/texinfo-hu/texinfo/util/Makefile.am45
-rw-r--r--macros/texinfo/contrib/texinfo-hu/texinfo/util/Makefile.in579
-rw-r--r--macros/texinfo/contrib/texinfo-hu/texinfo/util/README14
-rw-r--r--macros/texinfo/contrib/texinfo-hu/texinfo/util/deref.c209
-rw-r--r--macros/texinfo/contrib/texinfo-hu/texinfo/util/dir-example482
-rw-r--r--macros/texinfo/contrib/texinfo-hu/texinfo/util/fix-info-dir317
-rw-r--r--macros/texinfo/contrib/texinfo-hu/texinfo/util/fixfonts84
-rw-r--r--macros/texinfo/contrib/texinfo-hu/texinfo/util/fixref.gawk145
-rw-r--r--macros/texinfo/contrib/texinfo-hu/texinfo/util/gdoc914
-rw-r--r--macros/texinfo/contrib/texinfo-hu/texinfo/util/gen-dir-node212
-rw-r--r--macros/texinfo/contrib/texinfo-hu/texinfo/util/gendocs.sh285
-rw-r--r--macros/texinfo/contrib/texinfo-hu/texinfo/util/gendocs_template100
-rw-r--r--macros/texinfo/contrib/texinfo-hu/texinfo/util/infosrch104
-rw-r--r--macros/texinfo/contrib/texinfo-hu/texinfo/util/install-info-html157
-rw-r--r--macros/texinfo/contrib/texinfo-hu/texinfo/util/install-info.c1590
-rw-r--r--macros/texinfo/contrib/texinfo-hu/texinfo/util/outline.gawk145
-rw-r--r--macros/texinfo/contrib/texinfo-hu/texinfo/util/prepinfo.awk356
-rw-r--r--macros/texinfo/contrib/texinfo-hu/texinfo/util/tex3patch70
-rw-r--r--macros/texinfo/contrib/texinfo-hu/texinfo/util/texi-docstring-magic.el347
-rw-r--r--macros/texinfo/contrib/texinfo-hu/texinfo/util/texi2dvi795
-rw-r--r--macros/texinfo/contrib/texinfo-hu/texinfo/util/texi2pdf19
-rw-r--r--macros/texinfo/contrib/texinfo-hu/texinfo/util/texindex.c1628
-rw-r--r--macros/texinfo/contrib/texinfo-hu/texinfo/util/texinfo-cat.in3
-rw-r--r--macros/texinfo/contrib/texinfo-hu/texinfo/util/texinfo.dtd484
-rw-r--r--macros/texinfo/contrib/texinfo-hu/texinfo/util/texinfo.xsl242
-rw-r--r--macros/texinfo/contrib/texinfo-hu/texinfo/util/txitextest77
401 files changed, 233117 insertions, 0 deletions
diff --git a/macros/texinfo/contrib/texinfo-hu/texinfo.tex b/macros/texinfo/contrib/texinfo-hu/texinfo.tex
new file mode 100644
index 0000000000..331986b2f3
--- /dev/null
+++ b/macros/texinfo/contrib/texinfo-hu/texinfo.tex
@@ -0,0 +1,8369 @@
+% 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{2007-04-07.08}
+%
+% Copyright (C) 1985, 1986, 1988, 1990, 1991, 1992, 1993, 1994, 1995,
+% 1996, 1997, 1998, 1999, 2000, 2001, 2002, 2003, 2004, 2005, 2006,
+% 2007 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 2, 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 texinfo.tex file; see the file COPYING. If not, write
+% to the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor,
+% Boston, MA 02110-1301, USA.
+%
+% 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
+
+% 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
+
+% 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).
+ \setbox\headlinebox = \vbox{\let\hsize=\pagewidth \makeheadline}%
+ \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 \unvbox#1
+\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 occurence 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.
+% (Similarily, 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 enviroments; they don't open a group. (The
+% implementation of @end takes care not to call \endgroup in this
+% special case.)
+
+
+% At runtime, 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
+}
+
+% Evironment 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 \ptexi
+ \else\ifx\temp\jmacro \j
+ \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 insert text of that file as input.
+%
+\def\include{\parseargusing\filenamecatcodes\includezzz}
+\def\includezzz#1{%
+ \pushthisfilestack
+ \def\thisfile{#1}%
+ {%
+ \makevalueexpandable
+ \def\temp{\input #1 }%
+ \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
+ $\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
+ }
+}
+
+% @bullet and @minus need the same treatment as @math, just above.
+\def\bullet{$\ptexbullet$}
+\def\minus{$-$}
+
+% @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
+ \input pdfcolor
+ \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
+ \errhelp = \nopdfimagehelp
+ \errmessage{Could not find image file #1 for pdf}%
+ \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, 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}
+ %
+ \let\linkcolor = \Blue % was Cyan, but that seems light?
+ \def\endlink{\Black\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 \jobname.toc
+ \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\Red
+ \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}}
+ \linkcolor #1\endlink}
+ \def\done{\edef\st{\global\noexpand\toksA={\the\toksB}}\st}
+\else
+ \let\pdfmkdest = \gobble
+ \let\pdfurl = \gobble
+ \let\endlink = \relax
+ \let\linkcolor = \relax
+ \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}
+%
+\def\setleading#1{%
+ \normalbaselineskip = #1\relax
+ \normallineskip = \lineskipfactor\normalbaselineskip
+ \normalbaselines
+ \setbox\strutbox =\hbox{%
+ \vrule width0pt height\strutheightpercent\baselineskip
+ depth \strutdepthpercent \baselineskip
+ }%
+}
+
+
+% 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
+\def\setfont#1#2#3#4{\font#1=\fontprefix#2#3 scaled #4}
+
+
+% 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}
+\setfont\texttt\ttshape{10}{\mainmagstep}
+\setfont\textbf\bfshape{10}{\mainmagstep}
+\setfont\textit\itshape{10}{\mainmagstep}
+\setfont\textsl\slshape{10}{\mainmagstep}
+\setfont\textsf\sfshape{10}{\mainmagstep}
+\setfont\textsc\scshape{10}{\mainmagstep}
+\setfont\textttsl\ttslshape{10}{\mainmagstep}
+\font\texti=cmmi10 scaled \mainmagstep
+\font\textsy=cmsy10 scaled \mainmagstep
+
+% A few fonts for @defun names and args.
+\setfont\defbf\bfshape{10}{\magstep1}
+\setfont\deftt\ttshape{10}{\magstep1}
+\setfont\defttsl\ttslshape{10}{\magstep1}
+\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}
+\setfont\smalltt\ttshape{9}{1000}
+\setfont\smallbf\bfshape{10}{900}
+\setfont\smallit\itshape{9}{1000}
+\setfont\smallsl\slshape{9}{1000}
+\setfont\smallsf\sfshape{9}{1000}
+\setfont\smallsc\scshape{10}{900}
+\setfont\smallttsl\ttslshape{10}{900}
+\font\smalli=cmmi9
+\font\smallsy=cmsy9
+
+% Fonts for small examples (8pt).
+\def\smallernominalsize{8pt}
+\setfont\smallerrm\rmshape{8}{1000}
+\setfont\smallertt\ttshape{8}{1000}
+\setfont\smallerbf\bfshape{10}{800}
+\setfont\smallerit\itshape{8}{1000}
+\setfont\smallersl\slshape{8}{1000}
+\setfont\smallersf\sfshape{8}{1000}
+\setfont\smallersc\scshape{10}{800}
+\setfont\smallerttsl\ttslshape{10}{800}
+\font\smalleri=cmmi8
+\font\smallersy=cmsy8
+
+% Fonts for title page (20.4pt):
+\def\titlenominalsize{20pt}
+\setfont\titlerm\rmbshape{12}{\magstep3}
+\setfont\titleit\itbshape{10}{\magstep4}
+\setfont\titlesl\slbshape{10}{\magstep4}
+\setfont\titlett\ttbshape{12}{\magstep3}
+\setfont\titlettsl\ttslshape{10}{\magstep4}
+\setfont\titlesf\sfbshape{17}{\magstep1}
+\let\titlebf=\titlerm
+\setfont\titlesc\scbshape{10}{\magstep4}
+\font\titlei=cmmi12 scaled \magstep3
+\font\titlesy=cmsy10 scaled \magstep4
+\def\authorrm{\secrm}
+\def\authortt{\sectt}
+
+% Chapter (and unnumbered) fonts (17.28pt).
+\def\chapnominalsize{17pt}
+\setfont\chaprm\rmbshape{12}{\magstep2}
+\setfont\chapit\itbshape{10}{\magstep3}
+\setfont\chapsl\slbshape{10}{\magstep3}
+\setfont\chaptt\ttbshape{12}{\magstep2}
+\setfont\chapttsl\ttslshape{10}{\magstep3}
+\setfont\chapsf\sfbshape{17}{1000}
+\let\chapbf=\chaprm
+\setfont\chapsc\scbshape{10}{\magstep3}
+\font\chapi=cmmi12 scaled \magstep2
+\font\chapsy=cmsy10 scaled \magstep3
+
+% Section fonts (14.4pt).
+\def\secnominalsize{14pt}
+\setfont\secrm\rmbshape{12}{\magstep1}
+\setfont\secit\itbshape{10}{\magstep2}
+\setfont\secsl\slbshape{10}{\magstep2}
+\setfont\sectt\ttbshape{12}{\magstep1}
+\setfont\secttsl\ttslshape{10}{\magstep2}
+\setfont\secsf\sfbshape{12}{\magstep1}
+\let\secbf\secrm
+\setfont\secsc\scbshape{10}{\magstep2}
+\font\seci=cmmi12 scaled \magstep1
+\font\secsy=cmsy10 scaled \magstep2
+
+% Subsection fonts (13.15pt).
+\def\ssecnominalsize{13pt}
+\setfont\ssecrm\rmbshape{12}{\magstephalf}
+\setfont\ssecit\itbshape{10}{1315}
+\setfont\ssecsl\slbshape{10}{1315}
+\setfont\ssectt\ttbshape{12}{\magstephalf}
+\setfont\ssecttsl\ttslshape{10}{1315}
+\setfont\ssecsf\sfbshape{12}{\magstephalf}
+\let\ssecbf\ssecrm
+\setfont\ssecsc\scbshape{10}{1315}
+\font\sseci=cmmi12 scaled \magstephalf
+\font\ssecsy=cmsy10 scaled 1315
+
+% Reduced fonts for @acro in text (10pt).
+\def\reducednominalsize{10pt}
+\setfont\reducedrm\rmshape{10}{1000}
+\setfont\reducedtt\ttshape{10}{1000}
+\setfont\reducedbf\bfshape{10}{1000}
+\setfont\reducedit\itshape{10}{1000}
+\setfont\reducedsl\slshape{10}{1000}
+\setfont\reducedsf\sfshape{10}{1000}
+\setfont\reducedsc\scshape{10}{1000}
+\setfont\reducedttsl\ttslshape{10}{1000}
+\font\reducedi=cmmi10
+\font\reducedsy=cmsy10
+
+% 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}
+\setfont\texttt\ttshape{10}{\mainmagstep}
+\setfont\textbf\bfshape{10}{\mainmagstep}
+\setfont\textit\itshape{10}{\mainmagstep}
+\setfont\textsl\slshape{10}{\mainmagstep}
+\setfont\textsf\sfshape{10}{\mainmagstep}
+\setfont\textsc\scshape{10}{\mainmagstep}
+\setfont\textttsl\ttslshape{10}{\mainmagstep}
+\font\texti=cmmi10 scaled \mainmagstep
+\font\textsy=cmsy10 scaled \mainmagstep
+
+% A few fonts for @defun names and args.
+\setfont\defbf\bfshape{10}{\magstephalf}
+\setfont\deftt\ttshape{10}{\magstephalf}
+\setfont\defttsl\ttslshape{10}{\magstephalf}
+\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}
+\setfont\smalltt\ttshape{9}{1000}
+\setfont\smallbf\bfshape{10}{900}
+\setfont\smallit\itshape{9}{1000}
+\setfont\smallsl\slshape{9}{1000}
+\setfont\smallsf\sfshape{9}{1000}
+\setfont\smallsc\scshape{10}{900}
+\setfont\smallttsl\ttslshape{10}{900}
+\font\smalli=cmmi9
+\font\smallsy=cmsy9
+
+% Fonts for small examples (8pt).
+\def\smallernominalsize{8pt}
+\setfont\smallerrm\rmshape{8}{1000}
+\setfont\smallertt\ttshape{8}{1000}
+\setfont\smallerbf\bfshape{10}{800}
+\setfont\smallerit\itshape{8}{1000}
+\setfont\smallersl\slshape{8}{1000}
+\setfont\smallersf\sfshape{8}{1000}
+\setfont\smallersc\scshape{10}{800}
+\setfont\smallerttsl\ttslshape{10}{800}
+\font\smalleri=cmmi8
+\font\smallersy=cmsy8
+
+% Fonts for title page (20.4pt):
+\def\titlenominalsize{20pt}
+\setfont\titlerm\rmbshape{12}{\magstep3}
+\setfont\titleit\itbshape{10}{\magstep4}
+\setfont\titlesl\slbshape{10}{\magstep4}
+\setfont\titlett\ttbshape{12}{\magstep3}
+\setfont\titlettsl\ttslshape{10}{\magstep4}
+\setfont\titlesf\sfbshape{17}{\magstep1}
+\let\titlebf=\titlerm
+\setfont\titlesc\scbshape{10}{\magstep4}
+\font\titlei=cmmi12 scaled \magstep3
+\font\titlesy=cmsy10 scaled \magstep4
+\def\authorrm{\secrm}
+\def\authortt{\sectt}
+
+% Chapter fonts (14.4pt).
+\def\chapnominalsize{14pt}
+\setfont\chaprm\rmbshape{12}{\magstep1}
+\setfont\chapit\itbshape{10}{\magstep2}
+\setfont\chapsl\slbshape{10}{\magstep2}
+\setfont\chaptt\ttbshape{12}{\magstep1}
+\setfont\chapttsl\ttslshape{10}{\magstep2}
+\setfont\chapsf\sfbshape{12}{\magstep1}
+\let\chapbf\chaprm
+\setfont\chapsc\scbshape{10}{\magstep2}
+\font\chapi=cmmi12 scaled \magstep1
+\font\chapsy=cmsy10 scaled \magstep2
+
+% Section fonts (12pt).
+\def\secnominalsize{12pt}
+\setfont\secrm\rmbshape{12}{1000}
+\setfont\secit\itbshape{10}{\magstep1}
+\setfont\secsl\slbshape{10}{\magstep1}
+\setfont\sectt\ttbshape{12}{1000}
+\setfont\secttsl\ttslshape{10}{\magstep1}
+\setfont\secsf\sfbshape{12}{1000}
+\let\secbf\secrm
+\setfont\secsc\scbshape{10}{\magstep1}
+\font\seci=cmmi12
+\font\secsy=cmsy10 scaled \magstep1
+
+% Subsection fonts (10pt).
+\def\ssecnominalsize{10pt}
+\setfont\ssecrm\rmbshape{10}{1000}
+\setfont\ssecit\itbshape{10}{1000}
+\setfont\ssecsl\slbshape{10}{1000}
+\setfont\ssectt\ttbshape{10}{1000}
+\setfont\ssecttsl\ttslshape{10}{1000}
+\setfont\ssecsf\sfbshape{10}{1000}
+\let\ssecbf\ssecrm
+\setfont\ssecsc\scbshape{10}{1000}
+\font\sseci=cmmi10
+\font\ssecsy=cmsy10
+
+% Reduced fonts for @acro in text (9pt).
+\def\reducednominalsize{9pt}
+\setfont\reducedrm\rmshape{9}{1000}
+\setfont\reducedtt\ttshape{9}{1000}
+\setfont\reducedbf\bfshape{10}{900}
+\setfont\reducedit\itshape{9}{1000}
+\setfont\reducedsl\slshape{9}{1000}
+\setfont\reducedsf\sfshape{9}{1000}
+\setfont\reducedsc\scshape{10}{900}
+\setfont\reducedttsl\ttslshape{10}{900}
+\font\reducedi=cmmi9
+\font\reducedsy=cmsy9
+
+% 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}
+\setfont\shortcontbf\bfshape{10}{\magstep1} % no cmb12
+\setfont\shortcontsl\slshape{12}{1000}
+\setfont\shortconttt\ttshape{12}{1000}
+
+%% 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}
+\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
+
+% @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
+}
+
+% @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
+
+
+\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}}
+
+
+% @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\expansion
+ \definedummyword\minus
+ \definedummyword\pounds
+ \definedummyword\point
+ \definedummyword\print
+ \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\expansion{==>}%
+ \def\minus{-}%
+ \def\pounds{pounds}%
+ \def\point{.}%
+ \def\print{-|}%
+ \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
+ % -\skip0 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
+ \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 frozes 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.
+ \def\tempa{{\rm }}%
+ \def\tempb{#1}%
+ \edef\tempc{\tempa}%
+ \edef\tempd{\tempb}%
+ \ifx\tempc\tempd
+ \ %
+ \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 this as the name of the chapter.
+% page headings and footings can use it. @section does likewise.
+% However, they are not reliable, because we don't use marks.
+\def\thischapter{}
+\def\thissection{}
+
+\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}
+\def\chapoddpage{\chappager \ifodd\pageno \else \hbox to 0pt{} \chappager\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{%
+ \pchapsepmacro
+ {%
+ \chapfonts \rm
+ %
+ % Have to define \thissection 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\thissection{#1}%
+ \gdef\thischaptername{#1}%
+ %
+ % Only insert the separating space if we have a chapter/appendix
+ % number, and don't print the unnumbered ``number''.
+ \def\temptype{#2}%
+ \ifx\temptype\Ynothingkeyword
+ \setbox0 = \hbox{}%
+ \def\toctype{unnchap}%
+ \gdef\thischapternum{}%
+ \gdef\thischapter{#1}%
+ \else\ifx\temptype\Yomitfromtockeyword
+ \setbox0 = \hbox{}% contents like unnumbered, but no toc entry
+ \def\toctype{omit}%
+ \gdef\thischapternum{}%
+ \gdef\thischapter{}%
+ \else\ifx\temptype\Yappendixkeyword
+ \setbox0 = \hbox{\putwordAppendix{} #3\enspace}%
+ \def\toctype{app}%
+ \xdef\thischapternum{\appendixletter}%
+ % We don't substitute the actual chapter name into \thischapter
+ % because we don't want its macros evaluated now. And we don't
+ % use \thissection because that changes with each section.
+ %
+ \xdef\thischapter{\putwordAppendix{} \appendixletter:
+ \noexpand\thischaptername}%
+ \else
+ \setbox0 = \hbox{#3\enspace}%
+ \def\toctype{numchap}%
+ \xdef\thischapternum{\the\chapno}%
+ \xdef\thischapter{\putwordChapter{} \the\chapno:
+ \noexpand\thischaptername}%
+ \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.
+ \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\sectionheading#1#2#3#4{%
+ {%
+ % Switch to the right set of fonts.
+ \csname #2fonts\endcsname \rm
+ %
+ % Insert space above the heading.
+ \csname #2headingbreak\endcsname
+ %
+ % Only insert the space after the number if we have a section number.
+ \def\sectionlevel{#2}%
+ \def\temptype{#3}%
+ %
+ \ifx\temptype\Ynothingkeyword
+ \setbox0 = \hbox{}%
+ \def\toctype{unn}%
+ \gdef\thissection{#1}%
+ \else\ifx\temptype\Yomitfromtockeyword
+ % for @headings -- no section number, don't include in toc,
+ % and don't redefine \thissection.
+ \setbox0 = \hbox{}%
+ \def\toctype{omit}%
+ \let\sectionlevel=\empty
+ \else\ifx\temptype\Yappendixkeyword
+ \setbox0 = \hbox{#4\enspace}%
+ \def\toctype{app}%
+ \gdef\thissection{#1}%
+ \else
+ \setbox0 = \hbox{#4\enspace}%
+ \def\toctype{num}%
+ \gdef\thissection{#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 \jobname.toc
+}
+
+\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.
+ \def\thischapter{}%
+ \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
+}
+
+
+% Normal (long) toc.
+\def\contents{%
+ \startcontents{\putwordTOC}%
+ \openin 1 \jobname.toc
+ \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 \jobname.toc
+ \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, 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}}
+\def\equiv{\leavevmode\lower.1ex\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
+ \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 SETcodequoteundirected\endcsname\relax
+ '%
+ \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 SETcodequotebacktick\endcsname\relax
+ `%
+ \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 remainnig 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
+}
+\def\badparencount{%
+ \errmessage{Unbalanced parentheses in @def}%
+ \global\parencount=0
+}
+\def\badbrackcount{%
+ \errmessage{Unbalanced square braces 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 \.
+
+% 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
+}
+
+\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 \thissection,
+% 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{\thissection}%
+ \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
+ \leavevmode
+ \getfilename{#4}%
+ {\indexnofonts
+ \turnoffactive
+ % See comments at \activebackslashdouble.
+ {\activebackslashdouble \xdef\pdfxrefdest{#1}%
+ \backslashparens\pdfxrefdest}%
+ %
+ \ifnum\filenamelength>0
+ \startlink attr{/Border [0 0 0]}%
+ goto file{\the\filename.pdf} name{\pdfxrefdest}%
+ \else
+ \startlink attr{/Border [0 0 0]}%
+ goto name{\pdfmkpgn{\pdfxrefdest}}%
+ \fi
+ }%
+ \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.
+% Similarily, 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\bigskip
+ % 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
+ \line\bgroup
+ \fi
+ %
+ % Output the image.
+ \ifpdf
+ \dopdfimage{#1}{#2}{#3}%
+ \else
+ % \epsfbox itself resets \epsf?size at each figure.
+ \setbox0 = \hbox{\ignorespaces #2}\ifdim\wd0 > 0pt \epsfxsize=#2\relax \fi
+ \setbox0 = \hbox{\ignorespaces #3}\ifdim\wd0 > 0pt \epsfysize=#3\relax \fi
+ \epsfbox{#1.eps}%
+ \fi
+ %
+ \ifimagevmode \egroup \bigbreak \fi % space after the 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 \thissection 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\thissection{\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
+% \thissection 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 abbreviation.
+% It would be nice if we could set up a hyphenation file here.
+%
+\parseargdef\documentlanguage{%
+ \tex % read txi-??.tex file in plain TeX.
+ % Read the file if it exists.
+ \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
+ \endgroup
+}
+\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
+ \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{00AD}{\-}
+ \DeclareUnicodeCharacter{00AE}{\registeredsymbol}
+ \DeclareUnicodeCharacter{00AF}{\={ }}
+
+ \DeclareUnicodeCharacter{00B0}{\ringaccent{ }}
+ \DeclareUnicodeCharacter{00B4}{\'{ }}
+ \DeclareUnicodeCharacter{00B8}{\cedilla{ }}
+ \DeclareUnicodeCharacter{00BA}{\ordm}
+ \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{2022}{\bullet}
+ \DeclareUnicodeCharacter{2026}{\dots}
+ \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, just 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
+ \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{46\baselineskip}{6in}%
+ {\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}%
+ {\voffset}{.25in}%
+ {\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{51\baselineskip}{160mm}
+ {\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
+ \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/macros/texinfo/contrib/texinfo-hu/texinfo/ABOUT-NLS b/macros/texinfo/contrib/texinfo-hu/texinfo/ABOUT-NLS
new file mode 100644
index 0000000000..2f50c6693e
--- /dev/null
+++ b/macros/texinfo/contrib/texinfo-hu/texinfo/ABOUT-NLS
@@ -0,0 +1,768 @@
+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 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 at translations should 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.
+
+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'.
+
+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 GNU `gettext' own
+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 be not what is 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 have usually 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.
+
+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. 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 country 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.
+
+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://www.iro.umontreal.ca/contrib/po/HTML/', in the "National 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 `translation@iro.umontreal.ca' 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 skill are praised more than
+programming skill, here.
+
+Available Packages
+==================
+
+Languages are not equally supported in all packages. The following
+matrix shows the current state of internationalization, as of January
+2004. 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 da de el en en_GB eo es
+ +----------------------------------------------------+
+ a2ps | [] [] [] [] |
+ aegis | () |
+ ant-phone | () |
+ anubis | |
+ ap-utils | |
+ aspell | [] |
+ bash | [] [] [] [] |
+ batchelor | |
+ bfd | [] [] |
+ binutils | [] [] |
+ bison | [] [] [] |
+ bluez-pin | [] [] [] |
+ clisp | |
+ clisp | [] [] [] |
+ console-tools | [] [] |
+ coreutils | [] [] [] [] |
+ cpio | [] [] [] |
+ darkstat | [] () [] |
+ diffutils | [] [] [] [] [] [] [] |
+ e2fsprogs | [] [] [] |
+ enscript | [] [] [] [] |
+ error | [] [] [] [] [] |
+ fetchmail | [] () [] [] [] [] |
+ fileutils | [] [] [] |
+ findutils | [] [] [] [] [] [] [] |
+ flex | [] [] [] [] |
+ fslint | |
+ gas | [] |
+ gawk | [] [] [] [] |
+ gbiff | [] |
+ gcal | [] |
+ gcc | [] [] |
+ gettext | [] [] [] [] [] |
+ gettext-examples | [] [] [] [] |
+ gettext-runtime | [] [] [] [] [] |
+ gettext-tools | [] [] [] |
+ gimp-print | [] [] [] [] [] |
+ gliv | |
+ glunarclock | [] [] |
+ gnubiff | [] |
+ gnucash | [] () [] [] |
+ gnucash-glossary | [] () [] |
+ gnupg | [] () [] [] [] [] |
+ gpe-aerial | [] |
+ gpe-beam | [] [] |
+ gpe-calendar | [] [] |
+ gpe-clock | [] [] |
+ gpe-conf | [] [] |
+ gpe-contacts | [] [] |
+ gpe-edit | [] |
+ gpe-go | [] |
+ gpe-login | [] [] |
+ gpe-ownerinfo | [] [] |
+ gpe-sketchbook | [] [] |
+ gpe-su | [] [] |
+ gpe-taskmanager | [] [] |
+ gpe-timesheet | [] |
+ gpe-today | [] [] |
+ gpe-todo | [] [] |
+ gphoto2 | [] [] [] [] |
+ gprof | [] [] [] |
+ gpsdrive | () () () |
+ gramadoir | [] |
+ grep | [] [] [] [] [] [] |
+ gretl | [] |
+ gtick | [] () |
+ hello | [] [] [] [] [] [] |
+ id-utils | [] [] |
+ indent | [] [] [] [] |
+ iso_3166 | [] [] [] [] [] [] [] [] [] [] |
+ iso_3166_1 | [] [] [] [] [] [] |
+ iso_3166_2 | |
+ iso_3166_3 | [] |
+ iso_4217 | [] [] [] [] |
+ iso_639 | |
+ jpilot | [] [] [] |
+ jtag | |
+ jwhois | [] |
+ kbd | [] [] [] [] [] |
+ latrine | () |
+ ld | [] [] |
+ libc | [] [] [] [] [] [] |
+ libgpewidget | [] [] |
+ libiconv | [] [] [] [] [] |
+ lifelines | [] () |
+ lilypond | [] |
+ lingoteach | |
+ lingoteach_lessons | () () |
+ lynx | [] [] [] [] |
+ m4 | [] [] [] [] |
+ mailutils | [] [] |
+ make | [] [] [] |
+ man-db | [] () [] [] () |
+ minicom | [] [] [] |
+ mysecretdiary | [] [] [] |
+ nano | [] () [] [] [] |
+ nano_1_0 | [] () [] [] [] |
+ opcodes | [] |
+ parted | [] [] [] [] [] |
+ ptx | [] [] [] [] [] |
+ python | |
+ radius | [] |
+ recode | [] [] [] [] [] [] [] |
+ rpm | [] [] |
+ screem | |
+ scrollkeeper | [] [] [] [] [] [] |
+ sed | [] [] [] [] [] [] |
+ sh-utils | [] [] [] |
+ shared-mime-info | |
+ sharutils | [] [] [] [] [] [] |
+ silky | () |
+ skencil | [] () [] |
+ sketch | [] () [] |
+ soundtracker | [] [] [] |
+ sp | [] |
+ tar | [] [] [] [] |
+ texinfo | [] [] [] |
+ textutils | [] [] [] [] |
+ tin | () () |
+ tp-robot | |
+ tuxpaint | [] [] [] [] [] [] [] |
+ unicode-han-tra... | |
+ unicode-transla... | |
+ util-linux | [] [] [] [] [] |
+ vorbis-tools | [] [] [] [] |
+ wastesedge | () |
+ wdiff | [] [] [] [] |
+ wget | [] [] [] [] [] [] |
+ xchat | [] [] [] [] |
+ xfree86_xkb_xml | [] [] |
+ xpad | [] |
+ +----------------------------------------------------+
+ af am ar az be bg bs ca cs da de el en en_GB eo es
+ 4 0 0 1 9 4 1 40 41 60 78 17 1 5 13 68
+
+ et eu fa fi fr ga gl he hr hu id is it ja ko lg
+ +-------------------------------------------------+
+ a2ps | [] [] [] () () |
+ aegis | |
+ ant-phone | [] |
+ anubis | [] |
+ ap-utils | [] |
+ aspell | [] [] |
+ bash | [] [] |
+ batchelor | [] [] |
+ bfd | [] |
+ binutils | [] [] |
+ bison | [] [] [] [] |
+ bluez-pin | [] [] [] [] [] |
+ clisp | |
+ clisp | [] |
+ console-tools | |
+ coreutils | [] [] [] [] [] [] |
+ cpio | [] [] [] [] |
+ darkstat | () [] [] [] |
+ diffutils | [] [] [] [] [] [] [] |
+ e2fsprogs | |
+ enscript | [] [] |
+ error | [] [] [] [] |
+ fetchmail | [] |
+ fileutils | [] [] [] [] [] [] |
+ findutils | [] [] [] [] [] [] [] [] [] [] [] |
+ flex | [] [] [] |
+ fslint | [] |
+ gas | [] |
+ gawk | [] [] [] |
+ gbiff | [] |
+ gcal | [] |
+ gcc | [] |
+ gettext | [] [] [] |
+ gettext-examples | [] [] |
+ gettext-runtime | [] [] [] [] [] |
+ gettext-tools | [] [] [] |
+ gimp-print | [] [] |
+ gliv | () |
+ glunarclock | [] [] [] [] |
+ gnubiff | [] |
+ gnucash | () [] |
+ gnucash-glossary | [] |
+ gnupg | [] [] [] [] [] [] [] |
+ gpe-aerial | [] |
+ gpe-beam | [] |
+ gpe-calendar | [] [] [] |
+ gpe-clock | [] |
+ gpe-conf | [] |
+ gpe-contacts | [] [] |
+ gpe-edit | [] [] |
+ gpe-go | [] |
+ gpe-login | [] [] |
+ gpe-ownerinfo | [] [] [] |
+ gpe-sketchbook | [] |
+ gpe-su | [] |
+ gpe-taskmanager | [] |
+ gpe-timesheet | [] [] [] |
+ gpe-today | [] [] |
+ gpe-todo | [] [] |
+ gphoto2 | [] [] [] |
+ gprof | [] [] |
+ gpsdrive | () () () |
+ gramadoir | [] [] |
+ grep | [] [] [] [] [] [] [] [] [] [] [] |
+ gretl | [] [] |
+ gtick | [] [] [] |
+ hello | [] [] [] [] [] [] [] [] [] [] [] [] [] |
+ id-utils | [] [] [] [] |
+ indent | [] [] [] [] [] [] [] [] [] |
+ iso_3166 | [] [] [] [] [] [] [] |
+ iso_3166_1 | [] [] [] [] [] |
+ iso_3166_2 | |
+ iso_3166_3 | |
+ iso_4217 | [] [] [] [] [] [] |
+ iso_639 | |
+ jpilot | [] () |
+ jtag | [] |
+ jwhois | [] [] [] [] |
+ kbd | [] |
+ latrine | [] |
+ ld | [] |
+ libc | [] [] [] [] [] [] |
+ libgpewidget | [] [] [] [] |
+ libiconv | [] [] [] [] [] [] [] [] [] |
+ lifelines | () |
+ lilypond | [] |
+ lingoteach | [] [] |
+ lingoteach_lessons | |
+ lynx | [] [] [] [] |
+ m4 | [] [] [] [] |
+ mailutils | |
+ make | [] [] [] [] [] [] |
+ man-db | () () |
+ minicom | [] [] [] [] |
+ mysecretdiary | [] [] |
+ nano | [] [] [] [] |
+ nano_1_0 | [] [] [] [] |
+ opcodes | [] |
+ parted | [] [] [] |
+ ptx | [] [] [] [] [] [] [] |
+ python | |
+ radius | [] |
+ recode | [] [] [] [] [] [] |
+ rpm | [] [] |
+ screem | |
+ scrollkeeper | [] |
+ sed | [] [] [] [] [] [] [] [] [] |
+ sh-utils | [] [] [] [] [] [] [] |
+ shared-mime-info | [] [] [] |
+ sharutils | [] [] [] [] [] |
+ silky | () [] () () |
+ skencil | [] |
+ sketch | [] |
+ soundtracker | [] [] |
+ sp | [] () |
+ tar | [] [] [] [] [] [] [] [] [] |
+ texinfo | [] [] [] [] |
+ textutils | [] [] [] [] [] [] |
+ tin | [] () |
+ tp-robot | [] |
+ tuxpaint | [] [] [] [] [] [] [] [] [] |
+ unicode-han-tra... | |
+ unicode-transla... | [] [] |
+ util-linux | [] [] [] [] () [] |
+ vorbis-tools | [] |
+ wastesedge | () |
+ wdiff | [] [] [] [] [] [] |
+ wget | [] [] [] [] [] [] [] |
+ xchat | [] [] [] |
+ xfree86_xkb_xml | [] [] |
+ xpad | [] [] |
+ +-------------------------------------------------+
+ et eu fa fi fr ga gl he hr hu id is it ja ko lg
+ 22 2 1 26 106 28 24 8 10 41 33 1 26 33 12 0
+
+ lt lv mk mn ms mt nb nl nn no nso pl pt pt_BR ro ru
+ +-----------------------------------------------------+
+ a2ps | [] [] () () [] [] [] |
+ aegis | () () () |
+ ant-phone | [] [] |
+ anubis | [] [] [] [] [] [] |
+ ap-utils | [] () [] |
+ aspell | [] |
+ bash | [] [] [] |
+ batchelor | [] |
+ bfd | [] |
+ binutils | [] |
+ bison | [] [] [] [] [] |
+ bluez-pin | [] [] [] |
+ clisp | |
+ clisp | [] |
+ console-tools | [] |
+ coreutils | [] [] |
+ cpio | [] [] [] [] [] |
+ darkstat | [] [] [] [] |
+ diffutils | [] [] [] [] [] [] |
+ e2fsprogs | [] |
+ enscript | [] [] [] [] |
+ error | [] [] [] |
+ fetchmail | [] [] () [] |
+ fileutils | [] [] [] |
+ findutils | [] [] [] [] [] |
+ flex | [] [] [] [] |
+ fslint | [] [] |
+ gas | |
+ gawk | [] [] [] |
+ gbiff | [] [] |
+ gcal | |
+ gcc | |
+ gettext | [] [] [] |
+ gettext-examples | [] [] [] |
+ gettext-runtime | [] [] [] [] |
+ gettext-tools | [] [] |
+ gimp-print | [] |
+ gliv | [] [] [] |
+ glunarclock | [] [] [] [] |
+ gnubiff | [] |
+ gnucash | [] [] () [] |
+ gnucash-glossary | [] [] |
+ gnupg | [] |
+ gpe-aerial | [] [] [] [] |
+ gpe-beam | [] [] [] [] |
+ gpe-calendar | [] [] [] [] |
+ gpe-clock | [] [] [] [] |
+ gpe-conf | [] [] [] [] |
+ gpe-contacts | [] [] [] [] |
+ gpe-edit | [] [] [] [] |
+ gpe-go | [] [] [] |
+ gpe-login | [] [] [] [] |
+ gpe-ownerinfo | [] [] [] [] |
+ gpe-sketchbook | [] [] [] [] |
+ gpe-su | [] [] [] [] |
+ gpe-taskmanager | [] [] [] [] |
+ gpe-timesheet | [] [] [] [] |
+ gpe-today | [] [] [] [] |
+ gpe-todo | [] [] [] [] |
+ gphoto2 | [] |
+ gprof | [] [] |
+ gpsdrive | () () [] |
+ gramadoir | () [] |
+ grep | [] [] [] [] [] |
+ gretl | |
+ gtick | [] [] [] |
+ hello | [] [] [] [] [] [] [] [] [] [] |
+ id-utils | [] [] [] [] |
+ indent | [] [] [] [] |
+ iso_3166 | [] [] [] |
+ iso_3166_1 | [] [] |
+ iso_3166_2 | |
+ iso_3166_3 | [] |
+ iso_4217 | [] [] [] [] [] [] [] [] |
+ iso_639 | [] |
+ jpilot | () () |
+ jtag | |
+ jwhois | [] [] [] [] () |
+ kbd | [] [] [] |
+ latrine | [] |
+ ld | |
+ libc | [] [] [] [] |
+ libgpewidget | [] [] [] |
+ libiconv | [] [] [] [] [] |
+ lifelines | |
+ lilypond | |
+ lingoteach | |
+ lingoteach_lessons | |
+ lynx | [] [] [] |
+ m4 | [] [] [] [] [] |
+ mailutils | [] [] [] |
+ make | [] [] [] [] |
+ man-db | [] |
+ minicom | [] [] [] [] |
+ mysecretdiary | [] [] [] |
+ nano | [] [] [] [] [] |
+ nano_1_0 | [] [] [] [] [] [] |
+ opcodes | [] [] |
+ parted | [] [] [] [] |
+ ptx | [] [] [] [] [] [] [] [] |
+ python | |
+ radius | [] [] |
+ recode | [] [] [] [] |
+ rpm | [] [] [] |
+ screem | |
+ scrollkeeper | [] [] [] [] [] |
+ sed | [] [] [] |
+ sh-utils | [] [] |
+ shared-mime-info | [] [] |
+ sharutils | [] [] |
+ silky | () |
+ skencil | [] [] |
+ sketch | [] [] |
+ soundtracker | |
+ sp | |
+ tar | [] [] [] [] [] [] |
+ texinfo | [] [] [] [] |
+ textutils | [] [] |
+ tin | |
+ tp-robot | [] |
+ tuxpaint | [] [] [] [] [] [] [] [] |
+ unicode-han-tra... | |
+ unicode-transla... | |
+ util-linux | [] [] [] |
+ vorbis-tools | [] [] [] |
+ wastesedge | |
+ wdiff | [] [] [] [] [] |
+ wget | [] [] [] |
+ xchat | [] [] [] |
+ xfree86_xkb_xml | [] [] |
+ xpad | [] [] |
+ +-----------------------------------------------------+
+ lt lv mk mn ms mt nb nl nn no nso pl pt pt_BR ro ru
+ 1 2 0 3 12 0 10 69 6 7 1 40 26 36 76 63
+
+ sk sl sr sv ta th tr uk ven vi wa xh zh_CN zh_TW zu
+ +-----------------------------------------------------+
+ a2ps | [] [] [] [] | 16
+ aegis | | 0
+ ant-phone | | 3
+ anubis | [] [] | 9
+ ap-utils | () | 3
+ aspell | | 4
+ bash | | 9
+ batchelor | | 3
+ bfd | [] [] | 6
+ binutils | [] [] [] | 8
+ bison | [] [] | 14
+ bluez-pin | [] [] [] | 14
+ clisp | | 0
+ clisp | | 5
+ console-tools | | 3
+ coreutils | [] [] [] [] | 16
+ cpio | [] [] | 14
+ darkstat | [] [] [] () () | 12
+ diffutils | [] [] [] | 23
+ e2fsprogs | [] [] | 6
+ enscript | [] [] | 12
+ error | [] [] [] | 15
+ fetchmail | [] [] | 11
+ fileutils | [] [] [] [] [] | 17
+ findutils | [] [] [] [] [] [] | 29
+ flex | [] [] | 13
+ fslint | | 3
+ gas | [] | 3
+ gawk | [] [] | 12
+ gbiff | | 4
+ gcal | [] [] | 4
+ gcc | [] | 4
+ gettext | [] [] [] [] [] | 16
+ gettext-examples | [] [] [] [] [] | 14
+ gettext-runtime | [] [] [] [] [] [] [] [] | 22
+ gettext-tools | [] [] [] [] [] [] | 14
+ gimp-print | [] [] | 10
+ gliv | | 3
+ glunarclock | [] [] [] | 13
+ gnubiff | | 3
+ gnucash | [] [] | 9
+ gnucash-glossary | [] [] [] | 8
+ gnupg | [] [] [] [] | 17
+ gpe-aerial | [] | 7
+ gpe-beam | [] | 8
+ gpe-calendar | [] [] [] [] | 13
+ gpe-clock | [] [] [] | 10
+ gpe-conf | [] [] | 9
+ gpe-contacts | [] [] [] | 11
+ gpe-edit | [] [] [] [] [] | 12
+ gpe-go | | 5
+ gpe-login | [] [] [] [] [] | 13
+ gpe-ownerinfo | [] [] [] [] | 13
+ gpe-sketchbook | [] [] | 9
+ gpe-su | [] [] [] | 10
+ gpe-taskmanager | [] [] [] | 10
+ gpe-timesheet | [] [] [] [] | 12
+ gpe-today | [] [] [] [] [] | 13
+ gpe-todo | [] [] [] [] | 12
+ gphoto2 | [] [] [] | 11
+ gprof | [] [] | 9
+ gpsdrive | [] [] | 3
+ gramadoir | [] | 5
+ grep | [] [] [] [] | 26
+ gretl | | 3
+ gtick | | 7
+ hello | [] [] [] [] [] | 34
+ id-utils | [] [] | 12
+ indent | [] [] [] [] | 21
+ iso_3166 | [] [] [] [] [] [] [] | 27
+ iso_3166_1 | [] [] [] | 16
+ iso_3166_2 | | 0
+ iso_3166_3 | | 2
+ iso_4217 | [] [] [] [] [] [] | 24
+ iso_639 | | 1
+ jpilot | [] [] [] [] [] | 9
+ jtag | [] | 2
+ jwhois | () [] [] | 11
+ kbd | [] [] | 11
+ latrine | | 2
+ ld | [] [] | 5
+ libc | [] [] [] [] | 20
+ libgpewidget | [] [] [] [] | 13
+ libiconv | [] [] [] [] [] [] [] [] | 27
+ lifelines | [] | 2
+ lilypond | [] | 3
+ lingoteach | | 2
+ lingoteach_lessons | () | 0
+ lynx | [] [] [] | 14
+ m4 | [] [] | 15
+ mailutils | | 5
+ make | [] [] [] | 16
+ man-db | [] | 5
+ minicom | | 11
+ mysecretdiary | [] [] | 10
+ nano | [] [] [] [] | 17
+ nano_1_0 | [] [] [] | 17
+ opcodes | [] [] | 6
+ parted | [] [] [] | 15
+ ptx | [] [] | 22
+ python | | 0
+ radius | | 4
+ recode | [] [] [] | 20
+ rpm | [] [] | 9
+ screem | [] [] | 2
+ scrollkeeper | [] [] [] | 15
+ sed | [] [] [] [] [] [] | 24
+ sh-utils | [] [] | 14
+ shared-mime-info | [] [] | 7
+ sharutils | [] [] [] [] | 17
+ silky | () | 3
+ skencil | [] | 6
+ sketch | [] | 6
+ soundtracker | [] [] | 7
+ sp | [] | 3
+ tar | [] [] [] [] [] | 24
+ texinfo | [] [] [] | 14
+ textutils | [] [] [] [] | 16
+ tin | | 1
+ tp-robot | | 2
+ tuxpaint | [] [] [] [] [] | 29
+ unicode-han-tra... | | 0
+ unicode-transla... | | 2
+ util-linux | [] [] | 15
+ vorbis-tools | | 8
+ wastesedge | | 0
+ wdiff | [] [] [] | 18
+ wget | [] [] [] [] [] [] [] [] | 24
+ xchat | [] [] [] [] [] | 15
+ xfree86_xkb_xml | [] [] [] [] [] | 11
+ xpad | | 5
+ +-----------------------------------------------------+
+ 63 teams sk sl sr sv ta th tr uk ven vi wa xh zh_CN zh_TW zu
+ 131 domains 47 19 28 83 0 0 59 13 1 1 11 0 22 22 0 1373
+
+ 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 January 2004 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://www.iro.umontreal.ca/contrib/po/HTML/matrix.html'.
+
+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
+`translation@iro.umontreal.ca' to make the `.pot' files available to
+the translation teams.
+
diff --git a/macros/texinfo/contrib/texinfo-hu/texinfo/AUTHORS b/macros/texinfo/contrib/texinfo-hu/texinfo/AUTHORS
new file mode 100644
index 0000000000..ce8ee85e6d
--- /dev/null
+++ b/macros/texinfo/contrib/texinfo-hu/texinfo/AUTHORS
@@ -0,0 +1,31 @@
+$Id: AUTHORS,v 1.10 2004/04/11 17:56:45 karl Exp $
+Texinfo authors.
+
+ Copyright (C) 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.
+
+Akim Demaille texi2dvi.
+Alper Ersoy makeinfo: enhancements in all files, especially
+ html-, xml-, and docbook-related.
+Andreas Schwab texinfo.tex, configure.ac, most makeinfo files.
+Bob Chassell texinfo.tex, original texinfo.txi.
+Brian Fox all makeinfo/* and info/* files, info-stnd.texi.
+Dave Love original makeinfo/html.[ch].
+Eli Zaretskii all files.
+Karl Berry all files.
+Karl Heinz Marbaise original makeinfo language support, most files.
+Noah Friedman original texi2dvi.
+Paul Rubin original makeinfo/multi.c.
+Philippe Martin original makeinfo xml/docbook output.
+Richard Stallman original texinfo.tex, install-info.c,
+ texindex.c, texinfo.txi.
+Zack Weinberg texinfo.tex: @macro implementation.
+
+See http://www.iro.umontreal.ca/contrib/po/HTML/team-LL.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/macros/texinfo/contrib/texinfo-hu/texinfo/COPYING b/macros/texinfo/contrib/texinfo-hu/texinfo/COPYING
new file mode 100644
index 0000000000..d60c31a97a
--- /dev/null
+++ b/macros/texinfo/contrib/texinfo-hu/texinfo/COPYING
@@ -0,0 +1,340 @@
+ GNU GENERAL PUBLIC LICENSE
+ Version 2, June 1991
+
+ Copyright (C) 1989, 1991 Free Software Foundation, Inc.
+ 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
+ Everyone is permitted to copy and distribute verbatim copies
+ of this license document, but changing it is not allowed.
+
+ Preamble
+
+ The licenses for most software are designed to take away your
+freedom to share and change it. By contrast, the GNU General Public
+License is intended to guarantee your freedom to share and change free
+software--to make sure the software is free for all its users. This
+General Public License applies to most of the Free Software
+Foundation's software and to any other program whose authors commit to
+using it. (Some other Free Software Foundation software is covered by
+the GNU Library General Public License instead.) You can apply it to
+your programs, too.
+
+ When we speak of free software, we are referring to freedom, not
+price. Our General Public Licenses are designed to make sure that you
+have the freedom to distribute copies of free software (and charge for
+this service if you wish), that you receive source code or can get it
+if you want it, that you can change the software or use pieces of it
+in new free programs; and that you know you can do these things.
+
+ To protect your rights, we need to make restrictions that forbid
+anyone to deny you these rights or to ask you to surrender the rights.
+These restrictions translate to certain responsibilities for you if you
+distribute copies of the software, or if you modify it.
+
+ For example, if you distribute copies of such a program, whether
+gratis or for a fee, you must give the recipients all the rights that
+you have. You must make sure that they, too, receive or can get the
+source code. And you must show them these terms so they know their
+rights.
+
+ We protect your rights with two steps: (1) copyright the software, and
+(2) offer you this license which gives you legal permission to copy,
+distribute and/or modify the software.
+
+ Also, for each author's protection and ours, we want to make certain
+that everyone understands that there is no warranty for this free
+software. If the software is modified by someone else and passed on, we
+want its recipients to know that what they have is not the original, so
+that any problems introduced by others will not reflect on the original
+authors' reputations.
+
+ Finally, any free program is threatened constantly by software
+patents. We wish to avoid the danger that redistributors of a free
+program will individually obtain patent licenses, in effect making the
+program proprietary. To prevent this, we have made it clear that any
+patent must be licensed for everyone's free use or not licensed at all.
+
+ The precise terms and conditions for copying, distribution and
+modification follow.
+
+ GNU GENERAL PUBLIC LICENSE
+ TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION AND MODIFICATION
+
+ 0. This License applies to any program or other work which contains
+a notice placed by the copyright holder saying it may be distributed
+under the terms of this General Public License. The "Program", below,
+refers to any such program or work, and a "work based on the Program"
+means either the Program or any derivative work under copyright law:
+that is to say, a work containing the Program or a portion of it,
+either verbatim or with modifications and/or translated into another
+language. (Hereinafter, translation is included without limitation in
+the term "modification".) Each licensee is addressed as "you".
+
+Activities other than copying, distribution and modification are not
+covered by this License; they are outside its scope. The act of
+running the Program is not restricted, and the output from the Program
+is covered only if its contents constitute a work based on the
+Program (independent of having been made by running the Program).
+Whether that is true depends on what the Program does.
+
+ 1. You may copy and distribute verbatim copies of the Program's
+source code as you receive it, in any medium, provided that you
+conspicuously and appropriately publish on each copy an appropriate
+copyright notice and disclaimer of warranty; keep intact all the
+notices that refer to this License and to the absence of any warranty;
+and give any other recipients of the Program a copy of this License
+along with the Program.
+
+You may charge a fee for the physical act of transferring a copy, and
+you may at your option offer warranty protection in exchange for a fee.
+
+ 2. You may modify your copy or copies of the Program or any portion
+of it, thus forming a work based on the Program, and copy and
+distribute such modifications or work under the terms of Section 1
+above, provided that you also meet all of these conditions:
+
+ a) You must cause the modified files to carry prominent notices
+ stating that you changed the files and the date of any change.
+
+ b) You must cause any work that you distribute or publish, that in
+ whole or in part contains or is derived from the Program or any
+ part thereof, to be licensed as a whole at no charge to all third
+ parties under the terms of this License.
+
+ c) If the modified program normally reads commands interactively
+ when run, you must cause it, when started running for such
+ interactive use in the most ordinary way, to print or display an
+ announcement including an appropriate copyright notice and a
+ notice that there is no warranty (or else, saying that you provide
+ a warranty) and that users may redistribute the program under
+ these conditions, and telling the user how to view a copy of this
+ License. (Exception: if the Program itself is interactive but
+ does not normally print such an announcement, your work based on
+ the Program is not required to print an announcement.)
+
+These requirements apply to the modified work as a whole. If
+identifiable sections of that work are not derived from the Program,
+and can be reasonably considered independent and separate works in
+themselves, then this License, and its terms, do not apply to those
+sections when you distribute them as separate works. But when you
+distribute the same sections as part of a whole which is a work based
+on the Program, the distribution of the whole must be on the terms of
+this License, whose permissions for other licensees extend to the
+entire whole, and thus to each and every part regardless of who wrote it.
+
+Thus, it is not the intent of this section to claim rights or contest
+your rights to work written entirely by you; rather, the intent is to
+exercise the right to control the distribution of derivative or
+collective works based on the Program.
+
+In addition, mere aggregation of another work not based on the Program
+with the Program (or with a work based on the Program) on a volume of
+a storage or distribution medium does not bring the other work under
+the scope of this License.
+
+ 3. You may copy and distribute the Program (or a work based on it,
+under Section 2) in object code or executable form under the terms of
+Sections 1 and 2 above provided that you also do one of the following:
+
+ a) Accompany it with the complete corresponding machine-readable
+ source code, which must be distributed under the terms of Sections
+ 1 and 2 above on a medium customarily used for software interchange; or,
+
+ b) Accompany it with a written offer, valid for at least three
+ years, to give any third party, for a charge no more than your
+ cost of physically performing source distribution, a complete
+ machine-readable copy of the corresponding source code, to be
+ distributed under the terms of Sections 1 and 2 above on a medium
+ customarily used for software interchange; or,
+
+ c) Accompany it with the information you received as to the offer
+ to distribute corresponding source code. (This alternative is
+ allowed only for noncommercial distribution and only if you
+ received the program in object code or executable form with such
+ an offer, in accord with Subsection b above.)
+
+The source code for a work means the preferred form of the work for
+making modifications to it. For an executable work, complete source
+code means all the source code for all modules it contains, plus any
+associated interface definition files, plus the scripts used to
+control compilation and installation of the executable. However, as a
+special exception, the source code distributed need not include
+anything that is normally distributed (in either source or binary
+form) with the major components (compiler, kernel, and so on) of the
+operating system on which the executable runs, unless that component
+itself accompanies the executable.
+
+If distribution of executable or object code is made by offering
+access to copy from a designated place, then offering equivalent
+access to copy the source code from the same place counts as
+distribution of the source code, even though third parties are not
+compelled to copy the source along with the object code.
+
+ 4. You may not copy, modify, sublicense, or distribute the Program
+except as expressly provided under this License. Any attempt
+otherwise to copy, modify, sublicense or distribute the Program is
+void, and will automatically terminate your rights under this License.
+However, parties who have received copies, or rights, from you under
+this License will not have their licenses terminated so long as such
+parties remain in full compliance.
+
+ 5. You are not required to accept this License, since you have not
+signed it. However, nothing else grants you permission to modify or
+distribute the Program or its derivative works. These actions are
+prohibited by law if you do not accept this License. Therefore, by
+modifying or distributing the Program (or any work based on the
+Program), you indicate your acceptance of this License to do so, and
+all its terms and conditions for copying, distributing or modifying
+the Program or works based on it.
+
+ 6. Each time you redistribute the Program (or any work based on the
+Program), the recipient automatically receives a license from the
+original licensor to copy, distribute or modify the Program subject to
+these terms and conditions. You may not impose any further
+restrictions on the recipients' exercise of the rights granted herein.
+You are not responsible for enforcing compliance by third parties to
+this License.
+
+ 7. If, as a consequence of a court judgment or allegation of patent
+infringement or for any other reason (not limited to patent issues),
+conditions are imposed on you (whether by court order, agreement or
+otherwise) that contradict the conditions of this License, they do not
+excuse you from the conditions of this License. If you cannot
+distribute so as to satisfy simultaneously your obligations under this
+License and any other pertinent obligations, then as a consequence you
+may not distribute the Program at all. For example, if a patent
+license would not permit royalty-free redistribution of the Program by
+all those who receive copies directly or indirectly through you, then
+the only way you could satisfy both it and this License would be to
+refrain entirely from distribution of the Program.
+
+If any portion of this section is held invalid or unenforceable under
+any particular circumstance, the balance of the section is intended to
+apply and the section as a whole is intended to apply in other
+circumstances.
+
+It is not the purpose of this section to induce you to infringe any
+patents or other property right claims or to contest validity of any
+such claims; this section has the sole purpose of protecting the
+integrity of the free software distribution system, which is
+implemented by public license practices. Many people have made
+generous contributions to the wide range of software distributed
+through that system in reliance on consistent application of that
+system; it is up to the author/donor to decide if he or she is willing
+to distribute software through any other system and a licensee cannot
+impose that choice.
+
+This section is intended to make thoroughly clear what is believed to
+be a consequence of the rest of this License.
+
+ 8. If the distribution and/or use of the Program is restricted in
+certain countries either by patents or by copyrighted interfaces, the
+original copyright holder who places the Program under this License
+may add an explicit geographical distribution limitation excluding
+those countries, so that distribution is permitted only in or among
+countries not thus excluded. In such case, this License incorporates
+the limitation as if written in the body of this License.
+
+ 9. The Free Software Foundation may publish revised and/or new versions
+of the General Public License from time to time. Such new versions will
+be similar in spirit to the present version, but may differ in detail to
+address new problems or concerns.
+
+Each version is given a distinguishing version number. If the Program
+specifies a version number of this License which applies to it and "any
+later version", you have the option of following the terms and conditions
+either of that version or of any later version published by the Free
+Software Foundation. If the Program does not specify a version number of
+this License, you may choose any version ever published by the Free Software
+Foundation.
+
+ 10. If you wish to incorporate parts of the Program into other free
+programs whose distribution conditions are different, write to the author
+to ask for permission. For software which is copyrighted by the Free
+Software Foundation, write to the Free Software Foundation; we sometimes
+make exceptions for this. Our decision will be guided by the two goals
+of preserving the free status of all derivatives of our free software and
+of promoting the sharing and reuse of software generally.
+
+ NO WARRANTY
+
+ 11. BECAUSE THE PROGRAM IS LICENSED FREE OF CHARGE, THERE IS NO WARRANTY
+FOR THE PROGRAM, TO THE EXTENT PERMITTED BY APPLICABLE LAW. EXCEPT WHEN
+OTHERWISE STATED IN WRITING THE COPYRIGHT HOLDERS AND/OR OTHER PARTIES
+PROVIDE THE PROGRAM "AS IS" WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESSED
+OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
+MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. THE ENTIRE RISK AS
+TO THE QUALITY AND PERFORMANCE OF THE PROGRAM IS WITH YOU. SHOULD THE
+PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF ALL NECESSARY SERVICING,
+REPAIR OR CORRECTION.
+
+ 12. IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING
+WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MAY MODIFY AND/OR
+REDISTRIBUTE THE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES,
+INCLUDING ANY GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING
+OUT OF THE USE OR INABILITY TO USE THE PROGRAM (INCLUDING BUT NOT LIMITED
+TO LOSS OF DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY
+YOU OR THIRD PARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER
+PROGRAMS), EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE
+POSSIBILITY OF SUCH DAMAGES.
+
+ END OF TERMS AND CONDITIONS
+
+ How to Apply These Terms to Your New Programs
+
+ If you develop a new program, and you want it to be of the greatest
+possible use to the public, the best way to achieve this is to make it
+free software which everyone can redistribute and change under these terms.
+
+ To do so, attach the following notices to the program. It is safest
+to attach them to the start of each source file to most effectively
+convey the exclusion of warranty; and each file should have at least
+the "copyright" line and a pointer to where the full notice is found.
+
+ <one line to give the program's name and a brief idea of what it does.>
+ Copyright (C) <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 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., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
+
+
+Also add information on how to contact you by electronic and paper mail.
+
+If the program is interactive, make it output a short notice like this
+when it starts in an interactive mode:
+
+ Gnomovision version 69, Copyright (C) year name of author
+ Gnomovision comes with ABSOLUTELY NO WARRANTY; for details type `show w'.
+ This is free software, and you are welcome to redistribute it
+ under certain conditions; type `show c' for details.
+
+The hypothetical commands `show w' and `show c' should show the appropriate
+parts of the General Public License. Of course, the commands you use may
+be called something other than `show w' and `show c'; they could even be
+mouse-clicks or menu items--whatever suits your program.
+
+You should also get your employer (if you work as a programmer) or your
+school, if any, to sign a "copyright disclaimer" for the program, if
+necessary. Here is a sample; alter the names:
+
+ Yoyodyne, Inc., hereby disclaims all copyright interest in the program
+ `Gnomovision' (which makes passes at compilers) written by James Hacker.
+
+ <signature of Ty Coon>, 1 April 1989
+ Ty Coon, President of Vice
+
+This General Public License does not permit incorporating your program into
+proprietary programs. If your program is a subroutine library, you may
+consider it more useful to permit linking proprietary applications with the
+library. If this is what you want to do, use the GNU Library General
+Public License instead of this License.
diff --git a/macros/texinfo/contrib/texinfo-hu/texinfo/ChangeLog b/macros/texinfo/contrib/texinfo-hu/texinfo/ChangeLog
new file mode 100644
index 0000000000..7c53a09118
--- /dev/null
+++ b/macros/texinfo/contrib/texinfo-hu/texinfo/ChangeLog
@@ -0,0 +1,5008 @@
+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 (C) 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.
+
+
+Local Variables:
+mode: indented-text
+left-margin: 8
+fill-column: 76
+version-control: never
+End:
diff --git a/macros/texinfo/contrib/texinfo-hu/texinfo/ChangeLog.46 b/macros/texinfo/contrib/texinfo-hu/texinfo/ChangeLog.46
new file mode 100644
index 0000000000..c495abfeda
--- /dev/null
+++ b/macros/texinfo/contrib/texinfo-hu/texinfo/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/macros/texinfo/contrib/texinfo-hu/texinfo/INSTALL b/macros/texinfo/contrib/texinfo-hu/texinfo/INSTALL
new file mode 100644
index 0000000000..5834628520
--- /dev/null
+++ b/macros/texinfo/contrib/texinfo-hu/texinfo/INSTALL
@@ -0,0 +1,45 @@
+$Id: INSTALL,v 1.5 2004/11/19 13:08:47 karl Exp $
+
+ 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/macros/texinfo/contrib/texinfo-hu/texinfo/INSTALL.generic b/macros/texinfo/contrib/texinfo-hu/texinfo/INSTALL.generic
new file mode 100644
index 0000000000..095b1eb406
--- /dev/null
+++ b/macros/texinfo/contrib/texinfo-hu/texinfo/INSTALL.generic
@@ -0,0 +1,231 @@
+Installation Instructions
+*************************
+
+Copyright (C) 1994, 1995, 1996, 1999, 2000, 2001, 2002, 2004 Free
+Software Foundation, Inc.
+
+This file is free documentation; the Free Software Foundation gives
+unlimited permission to copy, distribute and modify it.
+
+Basic Installation
+==================
+
+These are generic installation instructions.
+
+ 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 only 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. If you're
+ using `csh' on an old version of System V, you might need to type
+ `sh ./configure' instead to prevent `csh' from trying to execute
+ `configure' itself.
+
+ Running `configure' takes awhile. While running, it prints some
+ messages telling which features it is checking for.
+
+ 2. Type `make' to compile 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=c89 CFLAGS=-O2 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 must use a version of `make' that
+supports the `VPATH' variable, such as 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 `..'.
+
+ If you have to use a `make' that does not support the `VPATH'
+variable, you have 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' will install the package's files in
+`/usr/local/bin', `/usr/local/man', 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
+give `configure' the option `--exec-prefix=PREFIX', the package will
+use PREFIX as the prefix for installing programs and libraries.
+Documentation and other data files will 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 `--target=TYPE' option 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
+
+will cause the specified gcc to be used as the C compiler (unless it is
+overridden in the site shell script).
+
+`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/macros/texinfo/contrib/texinfo-hu/texinfo/INTRODUCTION b/macros/texinfo/contrib/texinfo-hu/texinfo/INTRODUCTION
new file mode 100644
index 0000000000..718c1c525d
--- /dev/null
+++ b/macros/texinfo/contrib/texinfo-hu/texinfo/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/macros/texinfo/contrib/texinfo-hu/texinfo/Makefile.am b/macros/texinfo/contrib/texinfo-hu/texinfo/Makefile.am
new file mode 100644
index 0000000000..9e5ffc02f2
--- /dev/null
+++ b/macros/texinfo/contrib/texinfo-hu/texinfo/Makefile.am
@@ -0,0 +1,55 @@
+# Makefile.am for texinfo.
+# $Id: Makefile.am,v 1.13 2004/12/15 16:53:59 kasal 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.
+
+# Be sure we're using the right version of Automake.
+AUTOMAKE_OPTIONS = 1.8 readme-alpha
+
+# Additional files to distribute.
+EXTRA_DIST = ChangeLog.46 INSTALL.generic INTRODUCTION README.dev \
+ config.rpath \
+ djgpp/README djgpp/config.bat djgpp/config.sed djgpp/config.site
+
+# 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 makeinfo util
+else
+ # All subdirectories.
+ # Do intl, m4, and lib first since the C programs depend on them.
+ # Do doc last so makeinfo will be built when we get there.
+ # Others are alphabetical.
+ SUBDIRS = $(native_tools) intl m4 lib info makeinfo po util doc
+endif
+
+# for gettext.
+ACLOCAL_AMFLAGS = -I m4
+
+# In case TEXINFO_MAINT is set during make distcheck; in this case, the
+# simple doc-related files generated in info/ make distcleancheck fail.
+distcleancheck_listfiles = \
+ find -type f -exec sh -c 'test -f $(srcdir)/{} || echo {}' ';'
+
+# 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
diff --git a/macros/texinfo/contrib/texinfo-hu/texinfo/Makefile.in b/macros/texinfo/contrib/texinfo-hu/texinfo/Makefile.in
new file mode 100644
index 0000000000..fc803966d4
--- /dev/null
+++ b/macros/texinfo/contrib/texinfo-hu/texinfo/Makefile.in
@@ -0,0 +1,679 @@
+# Makefile.in generated by automake 1.9.4 from Makefile.am.
+# @configure_input@
+
+# Copyright (C) 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002,
+# 2003, 2004 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.13 2004/12/15 16:53:59 kasal 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.
+srcdir = @srcdir@
+top_srcdir = @top_srcdir@
+VPATH = @srcdir@
+pkgdatadir = $(datadir)/@PACKAGE@
+pkglibdir = $(libdir)/@PACKAGE@
+pkgincludedir = $(includedir)/@PACKAGE@
+top_builddir = .
+am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd
+INSTALL = @INSTALL@
+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@
+DIST_COMMON = README $(am__configure_deps) $(srcdir)/Makefile.am \
+ $(srcdir)/Makefile.in $(srcdir)/config.in \
+ $(top_srcdir)/configure $(top_srcdir)/intl/Makefile.in \
+ ABOUT-NLS AUTHORS COPYING ChangeLog INSTALL NEWS TODO \
+ config.guess config.rpath config.sub depcomp install-sh \
+ missing mkinstalldirs
+subdir = .
+ACLOCAL_M4 = $(top_srcdir)/aclocal.m4
+am__aclocal_m4_deps = $(top_srcdir)/m4/codeset.m4 \
+ $(top_srcdir)/m4/gettext.m4 $(top_srcdir)/m4/glibc21.m4 \
+ $(top_srcdir)/m4/iconv.m4 $(top_srcdir)/m4/intdiv0.m4 \
+ $(top_srcdir)/m4/intmax.m4 $(top_srcdir)/m4/inttypes-pri.m4 \
+ $(top_srcdir)/m4/inttypes.m4 $(top_srcdir)/m4/inttypes_h.m4 \
+ $(top_srcdir)/m4/lcmessage.m4 $(top_srcdir)/m4/lib-ld.m4 \
+ $(top_srcdir)/m4/lib-link.m4 $(top_srcdir)/m4/lib-prefix.m4 \
+ $(top_srcdir)/m4/longdouble.m4 $(top_srcdir)/m4/longlong.m4 \
+ $(top_srcdir)/m4/mkstemp.m4 $(top_srcdir)/m4/nls.m4 \
+ $(top_srcdir)/m4/onceonly_2_57.m4 $(top_srcdir)/m4/po.m4 \
+ $(top_srcdir)/m4/printf-posix.m4 $(top_srcdir)/m4/progtest.m4 \
+ $(top_srcdir)/m4/signed.m4 $(top_srcdir)/m4/size_max.m4 \
+ $(top_srcdir)/m4/stdint_h.m4 $(top_srcdir)/m4/strcase.m4 \
+ $(top_srcdir)/m4/uintmax_t.m4 $(top_srcdir)/m4/ulonglong.m4 \
+ $(top_srcdir)/m4/wchar_t.m4 $(top_srcdir)/m4/wint_t.m4 \
+ $(top_srcdir)/m4/xsize.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 configure.status.lineno
+mkinstalldirs = $(SHELL) $(top_srcdir)/mkinstalldirs
+CONFIG_HEADER = config.h
+CONFIG_CLEAN_FILES = intl/Makefile
+SOURCES =
+DIST_SOURCES =
+RECURSIVE_TARGETS = all-recursive check-recursive dvi-recursive \
+ html-recursive info-recursive install-data-recursive \
+ install-exec-recursive install-info-recursive \
+ install-recursive installcheck-recursive installdirs-recursive \
+ pdf-recursive ps-recursive uninstall-info-recursive \
+ uninstall-recursive
+ETAGS = etags
+CTAGS = ctags
+DIST_SUBDIRS = @native_tools@ intl m4 lib 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.bz2
+GZIP_ENV = --best
+distuninstallcheck_listfiles = find . -type f -print
+ACLOCAL = @ACLOCAL@
+ALLOCA = @ALLOCA@
+AMDEP_FALSE = @AMDEP_FALSE@
+AMDEP_TRUE = @AMDEP_TRUE@
+AMTAR = @AMTAR@
+AUTOCONF = @AUTOCONF@
+AUTOHEADER = @AUTOHEADER@
+AUTOMAKE = @AUTOMAKE@
+AWK = @AWK@
+BUILD_INCLUDED_LIBINTL = @BUILD_INCLUDED_LIBINTL@
+CATOBJEXT = @CATOBJEXT@
+CC = @CC@
+CCDEPMODE = @CCDEPMODE@
+CFLAGS = @CFLAGS@
+CPP = @CPP@
+CPPFLAGS = @CPPFLAGS@
+CYGPATH_W = @CYGPATH_W@
+DATADIRNAME = @DATADIRNAME@
+DEFS = @DEFS@
+DEPDIR = @DEPDIR@
+ECHO_C = @ECHO_C@
+ECHO_N = @ECHO_N@
+ECHO_T = @ECHO_T@
+EGREP = @EGREP@
+EXEEXT = @EXEEXT@
+GENCAT = @GENCAT@
+GLIBC21 = @GLIBC21@
+GMSGFMT = @GMSGFMT@
+HAVE_ASPRINTF = @HAVE_ASPRINTF@
+HAVE_POSIX_PRINTF = @HAVE_POSIX_PRINTF@
+HAVE_SNPRINTF = @HAVE_SNPRINTF@
+HAVE_WPRINTF = @HAVE_WPRINTF@
+HELP2MAN = @HELP2MAN@
+INSTALL_DATA = @INSTALL_DATA@
+INSTALL_PROGRAM = @INSTALL_PROGRAM@
+INSTALL_SCRIPT = @INSTALL_SCRIPT@
+INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@
+INSTALL_WARNINGS_FALSE = @INSTALL_WARNINGS_FALSE@
+INSTALL_WARNINGS_TRUE = @INSTALL_WARNINGS_TRUE@
+INSTOBJEXT = @INSTOBJEXT@
+INTLBISON = @INTLBISON@
+INTLLIBS = @INTLLIBS@
+INTLOBJS = @INTLOBJS@
+INTL_LIBTOOL_SUFFIX_PREFIX = @INTL_LIBTOOL_SUFFIX_PREFIX@
+LDFLAGS = @LDFLAGS@
+LIBICONV = @LIBICONV@
+LIBINTL = @LIBINTL@
+LIBOBJS = @LIBOBJS@
+LIBS = @LIBS@
+LTLIBICONV = @LTLIBICONV@
+LTLIBINTL = @LTLIBINTL@
+LTLIBOBJS = @LTLIBOBJS@
+MAINT = @MAINT@
+MAINTAINER_MODE_FALSE = @MAINTAINER_MODE_FALSE@
+MAINTAINER_MODE_TRUE = @MAINTAINER_MODE_TRUE@
+MAKEINFO = @MAKEINFO@
+MKINSTALLDIRS = @MKINSTALLDIRS@
+MSGFMT = @MSGFMT@
+MSGMERGE = @MSGMERGE@
+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@
+RANLIB = @RANLIB@
+SET_MAKE = @SET_MAKE@
+SHELL = @SHELL@
+STRIP = @STRIP@
+TERMLIBS = @TERMLIBS@
+TOOLS_ONLY_FALSE = @TOOLS_ONLY_FALSE@
+TOOLS_ONLY_TRUE = @TOOLS_ONLY_TRUE@
+USE_INCLUDED_LIBINTL = @USE_INCLUDED_LIBINTL@
+USE_NLS = @USE_NLS@
+VERSION = @VERSION@
+XGETTEXT = @XGETTEXT@
+ac_ct_CC = @ac_ct_CC@
+ac_ct_RANLIB = @ac_ct_RANLIB@
+ac_ct_STRIP = @ac_ct_STRIP@
+am__fastdepCC_FALSE = @am__fastdepCC_FALSE@
+am__fastdepCC_TRUE = @am__fastdepCC_TRUE@
+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@
+datadir = @datadir@
+exec_prefix = @exec_prefix@
+host = @host@
+host_alias = @host_alias@
+host_cpu = @host_cpu@
+host_os = @host_os@
+host_vendor = @host_vendor@
+includedir = @includedir@
+infodir = @infodir@
+install_sh = @install_sh@
+libdir = @libdir@
+libexecdir = @libexecdir@
+localstatedir = @localstatedir@
+mandir = @mandir@
+mkdir_p = @mkdir_p@
+native_tools = @native_tools@
+oldincludedir = @oldincludedir@
+prefix = @prefix@
+program_transform_name = @program_transform_name@
+sbindir = @sbindir@
+sharedstatedir = @sharedstatedir@
+sysconfdir = @sysconfdir@
+target_alias = @target_alias@
+
+# Be sure we're using the right version of Automake.
+AUTOMAKE_OPTIONS = 1.8 readme-alpha
+
+# Additional files to distribute.
+EXTRA_DIST = ChangeLog.46 INSTALL.generic INTRODUCTION README.dev \
+ config.rpath \
+ djgpp/README djgpp/config.bat djgpp/config.sed djgpp/config.site
+
+
+# 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) intl m4 lib info makeinfo po util doc
+@TOOLS_ONLY_TRUE@SUBDIRS = lib info makeinfo util
+
+# for gettext.
+ACLOCAL_AMFLAGS = -I m4
+
+# In case TEXINFO_MAINT is set during make distcheck; in this case, the
+# simple doc-related files generated in info/ make distcleancheck fail.
+distcleancheck_listfiles = \
+ find -type f -exec sh -c 'test -f $(srcdir)/{} || echo {}' ';'
+
+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) 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
+intl/Makefile: $(top_builddir)/config.status $(top_srcdir)/intl/Makefile.in
+ cd $(top_builddir) && $(SHELL) ./config.status $@
+uninstall-info-am:
+
+# 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):
+ @set fnord $$MAKEFLAGS; amf=$$2; \
+ 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) \
+ || case "$$amf" in *=*) exit 1;; *k*) fail=yes;; *) exit 1;; esac; \
+ done; \
+ if test "$$dot_seen" = "no"; then \
+ $(MAKE) $(AM_MAKEFLAGS) "$$target-am" || exit 1; \
+ fi; test -z "$$fail"
+
+mostlyclean-recursive clean-recursive distclean-recursive \
+maintainer-clean-recursive:
+ @set fnord $$MAKEFLAGS; amf=$$2; \
+ 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) \
+ || case "$$amf" in *=*) exit 1;; *k*) fail=yes;; *) exit 1;; esac; \
+ 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; } \
+ END { 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; } \
+ END { 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=; \
+ here=`pwd`; \
+ 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; } \
+ END { 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)
+ mkdir $(distdir)
+ $(mkdir_p) $(distdir)/djgpp $(distdir)/intl $(distdir)/m4 $(distdir)/po
+ @srcdirstrip=`echo "$(srcdir)" | sed 's|.|.|g'`; \
+ topsrcdirstrip=`echo "$(top_srcdir)" | sed 's|.|.|g'`; \
+ list='$(DISTFILES)'; for file in $$list; do \
+ case $$file in \
+ $(srcdir)/*) file=`echo "$$file" | sed "s|^$$srcdirstrip/||"`;; \
+ $(top_srcdir)/*) file=`echo "$$file" | sed "s|^$$topsrcdirstrip/|$(top_builddir)/|"`;; \
+ esac; \
+ if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \
+ dir=`echo "$$file" | sed -e 's,/[^/]*$$,,'`; \
+ if test "$$dir" != "$$file" && test "$$dir" != "."; then \
+ dir="/$$dir"; \
+ $(mkdir_p) "$(distdir)$$dir"; \
+ else \
+ dir=''; \
+ fi; \
+ if test -d $$d/$$file; then \
+ 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" \
+ 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 $(SHELL) $(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-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) | bzip2 -9 -c >$(distdir).tar.bz2
+ $(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.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" \
+ --with-included-gettext \
+ $(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 '1{h;s/./=/g;p;x;}' -e '$${p;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-exec-am:
+
+install-info: install-info-recursive
+
+install-man:
+
+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: uninstall-info-am
+
+uninstall-info: uninstall-info-recursive
+
+.PHONY: $(RECURSIVE_TARGETS) CTAGS GTAGS all all-am am--refresh check \
+ check-am clean clean-generic clean-recursive ctags \
+ ctags-recursive dist dist-all dist-bzip2 dist-gzip dist-shar \
+ dist-tarZ dist-zip distcheck distclean distclean-generic \
+ distclean-hdr distclean-local distclean-recursive \
+ distclean-tags distcleancheck distdir distuninstallcheck dvi \
+ dvi-am html html-am info info-am install install-am \
+ install-data install-data-am install-exec install-exec-am \
+ install-info install-info-am install-man install-strip \
+ installcheck installcheck-am installdirs installdirs-am \
+ maintainer-clean maintainer-clean-generic \
+ maintainer-clean-recursive mostlyclean mostlyclean-generic \
+ mostlyclean-recursive pdf pdf-am ps ps-am tags tags-recursive \
+ uninstall uninstall-am uninstall-info-am
+
+
+@TOOLS_ONLY_TRUE@ # Build native tools only.
+@TOOLS_ONLY_FALSE@ # All subdirectories.
+@TOOLS_ONLY_FALSE@ # Do intl, m4, and lib first since the C programs depend on them.
+@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:
+# 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/macros/texinfo/contrib/texinfo-hu/texinfo/NEWS b/macros/texinfo/contrib/texinfo-hu/texinfo/NEWS
new file mode 100644
index 0000000000..7d73e14974
--- /dev/null
+++ b/macros/texinfo/contrib/texinfo-hu/texinfo/NEWS
@@ -0,0 +1,728 @@
+$Id: NEWS,v 1.103 2004/12/24 16:43:58 karl Exp $
+This 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 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.
+
+
+*** IMPORTANT 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. It's important to
+switch to using it as soon as possible (as 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.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 (nonexistent)
+
+
+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/macros/texinfo/contrib/texinfo-hu/texinfo/README b/macros/texinfo/contrib/texinfo-hu/texinfo/README
new file mode 100644
index 0000000000..879b59b4b3
--- /dev/null
+++ b/macros/texinfo/contrib/texinfo-hu/texinfo/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/macros/texinfo/contrib/texinfo-hu/texinfo/README.dev b/macros/texinfo/contrib/texinfo-hu/texinfo/README.dev
new file mode 100644
index 0000000000..cf0dc9de96
--- /dev/null
+++ b/macros/texinfo/contrib/texinfo-hu/texinfo/README.dev
@@ -0,0 +1,44 @@
+$Id: README.dev,v 1.7 2003/11/24 15:11:06 karl Exp $
+README.dev - Texinfo developer information.
+
+ Copyright (C) 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.
+
+The development sources for Texinfo is available through anonymous cvs
+at Savannah, see
+ 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 Texinfo sources from cvs, or change the Texinfo
+configure.ac, you'll need to have these tools installed to (re)build.
+You'll also need help2man. (All of these are available from
+ftp://ftp.gnu.org/gnu.)
+
+Here's the order in which to run the tools for a fresh build:
+
+ autoheader # creates config.in, not necessarily needed every time
+ aclocal -I m4 # for a new version of automake
+ automake
+ autoconf
+ configure CFLAGS=-g --enable-maintainer-mode
+ make
+
+(with arguments to taste, of course.) Or you can run
+
+ ./bootstrap
+
+instead of the various auto* tools.
+
+
+One final note: If you would like to contribute to the GNU project by
+implementing additional documentation output formats for Texinfo, that
+would be great. 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 Makeinfo to generate the new format, as it does now for Info,
+HTML, XML, and DocBook.
diff --git a/macros/texinfo/contrib/texinfo-hu/texinfo/TODO b/macros/texinfo/contrib/texinfo-hu/texinfo/TODO
new file mode 100644
index 0000000000..0fcaa5c599
--- /dev/null
+++ b/macros/texinfo/contrib/texinfo-hu/texinfo/TODO
@@ -0,0 +1,181 @@
+$Id: TODO,v 1.26 2004/11/22 23:57:32 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 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:
+ - @euro{}.
+ - 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.
+ - 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
+ - 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.
+ - Test for memory leaks, e.g., with valgrind:
+ http://developer.kde.org/~sewardj/
+ - Extend and improve the tests.
+
+* 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.
+ - 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.
+ - Try 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.
+ 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?
+ - 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. Eliminate all the crazy
+ multiple redefinitions of every Texinfo command in different contexts.
+ - Support input in any encoding and language, via ec or Latin Modern fonts.
+ - 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.
+ - How about using latex2html to produce HTML?
+ - Table of contents gets misaligned if there are 10 or more [sub]sections.
+ - Use url.sty (or something) to allow linebreak of url's.
+ - 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 <dominik@astro.uva.nl>.
+
+* 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:
+ - Regular expression search.
+ - Full-text search across all info files installed on the system.
+ - Support character sets other than ISO Latin 1.
+ - Perhaps comply with LANGUAGE setting on a per-node basis, to allow
+ incremental translation of Texinfo files.
+ - Search all nodes of dir file at startup, then can have
+ INFO-DIR-SEPARATE-GROUPS and other such.
+ - 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.
+ - q within help should quit help like C-x 0.
+ - Incorporate an X-based viewer, perhaps 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.
+ - merge features with Debian install-info, so we can have one program.
+
+* 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: phelps@ecstasy.CS.Berkeley.EDU (Tom Phelps)
+ [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.
diff --git a/macros/texinfo/contrib/texinfo-hu/texinfo/aclocal.m4 b/macros/texinfo/contrib/texinfo-hu/texinfo/aclocal.m4
new file mode 100644
index 0000000000..aae5484d26
--- /dev/null
+++ b/macros/texinfo/contrib/texinfo-hu/texinfo/aclocal.m4
@@ -0,0 +1,1090 @@
+# generated automatically by aclocal 1.9.4 -*- Autoconf -*-
+
+# Copyright (C) 1996, 1997, 1998, 1999, 2000, 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.
+
+# 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.
+
+# -*- Autoconf -*-
+# Copyright (C) 2002, 2003 Free Software Foundation, Inc.
+# Generated from amversion.in; do not edit by hand.
+
+# This program is free software; you can redistribute it and/or modify
+# it under the terms of the GNU General Public License as published by
+# the Free Software Foundation; either version 2, or (at your option)
+# any later version.
+
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+# GNU General Public License for more details.
+
+# You should have received a copy of the GNU General Public License
+# along with this program; if not, write to the Free Software
+# Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA
+
+# 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.
+AC_DEFUN([AM_AUTOMAKE_VERSION], [am__api_version="1.9"])
+
+# AM_SET_CURRENT_AUTOMAKE_VERSION
+# -------------------------------
+# Call AM_AUTOMAKE_VERSION so it can be traced.
+# This function is AC_REQUIREd by AC_INIT_AUTOMAKE.
+AC_DEFUN([AM_SET_CURRENT_AUTOMAKE_VERSION],
+ [AM_AUTOMAKE_VERSION([1.9.4])])
+
+# AM_AUX_DIR_EXPAND
+
+# Copyright (C) 2001, 2003 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., 59 Temple Place - Suite 330, Boston, MA
+# 02111-1307, USA.
+
+# 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 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., 59 Temple Place - Suite 330, Boston, MA
+# 02111-1307, USA.
+
+# serial 6
+
+# 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])
+AC_SUBST([$1_FALSE])
+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])])
+
+# serial 7 -*- Autoconf -*-
+
+# Copyright (C) 1999, 2000, 2001, 2002, 2003, 2004
+# 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., 59 Temple Place - Suite 330, Boston, MA
+# 02111-1307, USA.
+
+
+# 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], 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/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])
+])
+
+# Generate code to set up dependency tracking. -*- Autoconf -*-
+
+# Copyright (C) 1999, 2000, 2001, 2002, 2003, 2004
+# 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., 59 Temple Place - Suite 330, Boston, MA
+# 02111-1307, USA.
+
+#serial 2
+
+# _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.
+ # So let's grep whole file.
+ if grep '^#.*generated by automake' $mf > /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 -*-
+
+# 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.
+
+# Copyright (C) 1996, 1997, 1998, 1999, 2000, 2001, 2002, 2003, 2004
+# 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., 59 Temple Place - Suite 330, Boston, MA
+# 02111-1307, USA.
+
+# serial 11
+
+# 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.58])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
+# test to see if srcdir already configured
+if test "`cd $srcdir && pwd`" != "`pwd`" &&
+ test -f $srcdir/config.status; then
+ AC_MSG_ERROR([source directory already configured; run "make distclean" there first])
+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
+ 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
+])
+])
+
+
+# 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_stamp_count=1
+for _am_header in $config_headers :; do
+ case $_am_header in
+ $1 | $1:* )
+ break ;;
+ * )
+ _am_stamp_count=`expr $_am_stamp_count + 1` ;;
+ esac
+done
+echo "timestamp for $1" >`AS_DIRNAME([$1])`/stamp-h[]$_am_stamp_count])
+
+# AM_PROG_INSTALL_SH
+# ------------------
+# Define $install_sh.
+
+# Copyright (C) 2001, 2003 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., 59 Temple Place - Suite 330, Boston, MA
+# 02111-1307, USA.
+
+AC_DEFUN([AM_PROG_INSTALL_SH],
+[AC_REQUIRE([AM_AUX_DIR_EXPAND])dnl
+install_sh=${install_sh-"$am_aux_dir/install-sh"}
+AC_SUBST(install_sh)])
+
+# -*- Autoconf -*-
+# Copyright (C) 2003 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., 59 Temple Place - Suite 330, Boston, MA
+# 02111-1307, USA.
+
+# serial 1
+
+# 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.
+# From Jim Meyering
+
+# Copyright (C) 1996, 1998, 2000, 2001, 2002, 2003, 2004
+# 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., 59 Temple Place - Suite 330, Boston, MA
+# 02111-1307, USA.
+
+# serial 3
+
+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 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., 59 Temple Place - Suite 330, Boston, MA
+# 02111-1307, USA.
+
+# serial 2
+
+# 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
+])
+
+# -*- Autoconf -*-
+
+
+# Copyright (C) 1997, 1999, 2000, 2001, 2003 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., 59 Temple Place - Suite 330, Boston, MA
+# 02111-1307, USA.
+
+# serial 3
+
+# 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
+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
+])
+
+# AM_PROG_MKDIR_P
+# ---------------
+# Check whether `mkdir -p' is supported, fallback to mkinstalldirs otherwise.
+
+# Copyright (C) 2003, 2004 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., 59 Temple Place - Suite 330, Boston, MA
+# 02111-1307, USA.
+
+# Automake 1.8 used `mkdir -m 0755 -p --' to ensure that directories
+# created by `make install' are always world readable, even if the
+# installer happens to have an overly restrictive umask (e.g. 077).
+# This was a mistake. There are at least two reasons why we must not
+# use `-m 0755':
+# - it causes special bits like SGID to be ignored,
+# - it may be too restrictive (some setups expect 775 directories).
+#
+# Do not use -m 0755 and let people choose whatever they expect by
+# setting umask.
+#
+# We cannot accept any implementation of `mkdir' that recognizes `-p'.
+# Some implementations (such as Solaris 8's) are not thread-safe: if a
+# parallel make tries to run `mkdir -p a/b' and `mkdir -p a/c'
+# concurrently, both version can detect that a/ is missing, but only
+# one can create it and the other will error out. Consequently we
+# restrict ourselves to GNU make (using the --version option ensures
+# this.)
+AC_DEFUN([AM_PROG_MKDIR_P],
+[if mkdir -p --version . >/dev/null 2>&1 && test ! -d ./--version; then
+ # We used to keeping the `.' as first argument, in order to
+ # allow $(mkdir_p) to be used without argument. As in
+ # $(mkdir_p) $(somedir)
+ # where $(somedir) is conditionally defined. However this is wrong
+ # for two reasons:
+ # 1. if the package is installed by a user who cannot write `.'
+ # make install will fail,
+ # 2. the above comment should most certainly read
+ # $(mkdir_p) $(DESTDIR)$(somedir)
+ # so it does not work when $(somedir) is undefined and
+ # $(DESTDIR) is not.
+ # To support the latter case, we have to write
+ # test -z "$(somedir)" || $(mkdir_p) $(DESTDIR)$(somedir),
+ # so the `.' trick is pointless.
+ mkdir_p='mkdir -p --'
+else
+ # On NextStep and OpenStep, the `mkdir' command does not
+ # recognize any option. It will interpret all options as
+ # directories to create, and then abort because `.' already
+ # exists.
+ for d in ./-p ./--version;
+ do
+ test -d $d && rmdir $d
+ done
+ # $(mkinstalldirs) is defined by Automake if mkinstalldirs exists.
+ if test -f "$ac_aux_dir/mkinstalldirs"; then
+ mkdir_p='$(mkinstalldirs)'
+ else
+ mkdir_p='$(install_sh) -d'
+ fi
+fi
+AC_SUBST([mkdir_p])])
+
+# Helper functions for option handling. -*- Autoconf -*-
+
+# Copyright (C) 2001, 2002, 2003 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., 59 Temple Place - Suite 330, Boston, MA
+# 02111-1307, USA.
+
+# serial 2
+
+# _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.
+#
+
+# Copyright (C) 1996, 1997, 2000, 2001, 2003 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., 59 Temple Place - Suite 330, Boston, MA
+# 02111-1307, USA.
+
+# serial 3
+
+# 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)])
+
+# AM_PROG_INSTALL_STRIP
+
+# Copyright (C) 2001, 2003 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., 59 Temple Place - Suite 330, Boston, MA
+# 02111-1307, USA.
+
+# 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="\${SHELL} \$(install_sh) -c -s"
+AC_SUBST([INSTALL_STRIP_PROGRAM])])
+
+# Check how to create a tarball. -*- Autoconf -*-
+
+# Copyright (C) 2004 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., 59 Temple Place - Suite 330, Boston, MA
+# 02111-1307, USA.
+
+# serial 1
+
+
+# _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([m4/codeset.m4])
+m4_include([m4/gettext.m4])
+m4_include([m4/glibc21.m4])
+m4_include([m4/iconv.m4])
+m4_include([m4/intdiv0.m4])
+m4_include([m4/intmax.m4])
+m4_include([m4/inttypes-pri.m4])
+m4_include([m4/inttypes.m4])
+m4_include([m4/inttypes_h.m4])
+m4_include([m4/lcmessage.m4])
+m4_include([m4/lib-ld.m4])
+m4_include([m4/lib-link.m4])
+m4_include([m4/lib-prefix.m4])
+m4_include([m4/longdouble.m4])
+m4_include([m4/longlong.m4])
+m4_include([m4/mkstemp.m4])
+m4_include([m4/nls.m4])
+m4_include([m4/onceonly_2_57.m4])
+m4_include([m4/po.m4])
+m4_include([m4/printf-posix.m4])
+m4_include([m4/progtest.m4])
+m4_include([m4/signed.m4])
+m4_include([m4/size_max.m4])
+m4_include([m4/stdint_h.m4])
+m4_include([m4/strcase.m4])
+m4_include([m4/uintmax_t.m4])
+m4_include([m4/ulonglong.m4])
+m4_include([m4/wchar_t.m4])
+m4_include([m4/wint_t.m4])
+m4_include([m4/xsize.m4])
diff --git a/macros/texinfo/contrib/texinfo-hu/texinfo/config.guess b/macros/texinfo/contrib/texinfo-hu/texinfo/config.guess
new file mode 100644
index 0000000000..8229471326
--- /dev/null
+++ b/macros/texinfo/contrib/texinfo-hu/texinfo/config.guess
@@ -0,0 +1,1453 @@
+#! /bin/sh
+# Attempt to guess a canonical system name.
+# Copyright (C) 1992, 1993, 1994, 1995, 1996, 1997, 1998, 1999,
+# 2000, 2001, 2002, 2003, 2004 Free Software Foundation, Inc.
+
+timestamp='2004-11-12'
+
+# 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., 59 Temple Place - Suite 330, Boston, MA 02111-1307, 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
+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 0 ;;
+ --version | -v )
+ echo "$version" ; exit 0 ;;
+ --help | --h* | -h )
+ echo "$usage"; exit 0 ;;
+ -- ) # 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 -q "$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 ;'
+
+# 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 0 ;;
+ amd64:OpenBSD:*:*)
+ echo x86_64-unknown-openbsd${UNAME_RELEASE}
+ exit 0 ;;
+ amiga:OpenBSD:*:*)
+ echo m68k-unknown-openbsd${UNAME_RELEASE}
+ exit 0 ;;
+ cats:OpenBSD:*:*)
+ echo arm-unknown-openbsd${UNAME_RELEASE}
+ exit 0 ;;
+ hp300:OpenBSD:*:*)
+ echo m68k-unknown-openbsd${UNAME_RELEASE}
+ exit 0 ;;
+ luna88k:OpenBSD:*:*)
+ echo m88k-unknown-openbsd${UNAME_RELEASE}
+ exit 0 ;;
+ mac68k:OpenBSD:*:*)
+ echo m68k-unknown-openbsd${UNAME_RELEASE}
+ exit 0 ;;
+ macppc:OpenBSD:*:*)
+ echo powerpc-unknown-openbsd${UNAME_RELEASE}
+ exit 0 ;;
+ mvme68k:OpenBSD:*:*)
+ echo m68k-unknown-openbsd${UNAME_RELEASE}
+ exit 0 ;;
+ mvme88k:OpenBSD:*:*)
+ echo m88k-unknown-openbsd${UNAME_RELEASE}
+ exit 0 ;;
+ mvmeppc:OpenBSD:*:*)
+ echo powerpc-unknown-openbsd${UNAME_RELEASE}
+ exit 0 ;;
+ sgi:OpenBSD:*:*)
+ echo mips64-unknown-openbsd${UNAME_RELEASE}
+ exit 0 ;;
+ sun3:OpenBSD:*:*)
+ echo m68k-unknown-openbsd${UNAME_RELEASE}
+ exit 0 ;;
+ *:OpenBSD:*:*)
+ echo ${UNAME_MACHINE}-unknown-openbsd${UNAME_RELEASE}
+ exit 0 ;;
+ *:ekkoBSD:*:*)
+ echo ${UNAME_MACHINE}-unknown-ekkobsd${UNAME_RELEASE}
+ exit 0 ;;
+ macppc:MirBSD:*:*)
+ echo powerppc-unknown-mirbsd${UNAME_RELEASE}
+ exit 0 ;;
+ *:MirBSD:*:*)
+ echo ${UNAME_MACHINE}-unknown-mirbsd${UNAME_RELEASE}
+ exit 0 ;;
+ 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 0 ;;
+ 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 0 ;;
+ 21064:Windows_NT:50:3)
+ echo alpha-dec-winnt3.5
+ exit 0 ;;
+ Amiga*:UNIX_System_V:4.0:*)
+ echo m68k-unknown-sysv4
+ exit 0;;
+ *:[Aa]miga[Oo][Ss]:*:*)
+ echo ${UNAME_MACHINE}-unknown-amigaos
+ exit 0 ;;
+ *:[Mm]orph[Oo][Ss]:*:*)
+ echo ${UNAME_MACHINE}-unknown-morphos
+ exit 0 ;;
+ *:OS/390:*:*)
+ echo i370-ibm-openedition
+ exit 0 ;;
+ *:z/VM:*:*)
+ echo s390-ibm-zvmoe
+ exit 0 ;;
+ *:OS400:*:*)
+ echo powerpc-ibm-os400
+ exit 0 ;;
+ arm:RISC*:1.[012]*:*|arm:riscix:1.[012]*:*)
+ echo arm-acorn-riscix${UNAME_RELEASE}
+ exit 0;;
+ SR2?01:HI-UX/MPP:*:* | SR8000:HI-UX/MPP:*:*)
+ echo hppa1.1-hitachi-hiuxmpp
+ exit 0;;
+ 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 0 ;;
+ NILE*:*:*:dcosx)
+ echo pyramid-pyramid-svr4
+ exit 0 ;;
+ DRS?6000:unix:4.0:6*)
+ echo sparc-icl-nx6
+ exit 0 ;;
+ 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 0 ;;
+ esac ;;
+ sun4H:SunOS:5.*:*)
+ echo sparc-hal-solaris2`echo ${UNAME_RELEASE}|sed -e 's/[^.]*//'`
+ exit 0 ;;
+ sun4*:SunOS:5.*:* | tadpole*:SunOS:5.*:*)
+ echo sparc-sun-solaris2`echo ${UNAME_RELEASE}|sed -e 's/[^.]*//'`
+ exit 0 ;;
+ i86pc:SunOS:5.*:*)
+ echo i386-pc-solaris2`echo ${UNAME_RELEASE}|sed -e 's/[^.]*//'`
+ exit 0 ;;
+ 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 0 ;;
+ 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 0 ;;
+ sun3*:SunOS:*:*)
+ echo m68k-sun-sunos${UNAME_RELEASE}
+ exit 0 ;;
+ 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 0 ;;
+ aushp:SunOS:*:*)
+ echo sparc-auspex-sunos${UNAME_RELEASE}
+ exit 0 ;;
+ # 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 0 ;;
+ atari*:*MiNT:*:* | atari*:*mint:*:* | atarist[e]:*TOS:*:*)
+ echo m68k-atari-mint${UNAME_RELEASE}
+ exit 0 ;;
+ *falcon*:*MiNT:*:* | *falcon*:*mint:*:* | *falcon*:*TOS:*:*)
+ echo m68k-atari-mint${UNAME_RELEASE}
+ exit 0 ;;
+ milan*:*MiNT:*:* | milan*:*mint:*:* | *milan*:*TOS:*:*)
+ echo m68k-milan-mint${UNAME_RELEASE}
+ exit 0 ;;
+ hades*:*MiNT:*:* | hades*:*mint:*:* | *hades*:*TOS:*:*)
+ echo m68k-hades-mint${UNAME_RELEASE}
+ exit 0 ;;
+ *:*MiNT:*:* | *:*mint:*:* | *:*TOS:*:*)
+ echo m68k-unknown-mint${UNAME_RELEASE}
+ exit 0 ;;
+ m68k:machten:*:*)
+ echo m68k-apple-machten${UNAME_RELEASE}
+ exit 0 ;;
+ powerpc:machten:*:*)
+ echo powerpc-apple-machten${UNAME_RELEASE}
+ exit 0 ;;
+ RISC*:Mach:*:*)
+ echo mips-dec-mach_bsd4.3
+ exit 0 ;;
+ RISC*:ULTRIX:*:*)
+ echo mips-dec-ultrix${UNAME_RELEASE}
+ exit 0 ;;
+ VAX*:ULTRIX*:*:*)
+ echo vax-dec-ultrix${UNAME_RELEASE}
+ exit 0 ;;
+ 2020:CLIX:*:* | 2430:CLIX:*:*)
+ echo clipper-intergraph-clix${UNAME_RELEASE}
+ exit 0 ;;
+ 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 \
+ && $dummy `echo "${UNAME_RELEASE}" | sed -n 's/\([0-9]*\).*/\1/p'` \
+ && exit 0
+ echo mips-mips-riscos${UNAME_RELEASE}
+ exit 0 ;;
+ Motorola:PowerMAX_OS:*:*)
+ echo powerpc-motorola-powermax
+ exit 0 ;;
+ Motorola:*:4.3:PL8-*)
+ echo powerpc-harris-powermax
+ exit 0 ;;
+ Night_Hawk:*:*:PowerMAX_OS | Synergy:PowerMAX_OS:*:*)
+ echo powerpc-harris-powermax
+ exit 0 ;;
+ Night_Hawk:Power_UNIX:*:*)
+ echo powerpc-harris-powerunix
+ exit 0 ;;
+ m88k:CX/UX:7*:*)
+ echo m88k-harris-cxux7
+ exit 0 ;;
+ m88k:*:4*:R4*)
+ echo m88k-motorola-sysv4
+ exit 0 ;;
+ m88k:*:3*:R3*)
+ echo m88k-motorola-sysv3
+ exit 0 ;;
+ 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 0 ;;
+ M88*:DolphinOS:*:*) # DolphinOS (SVR3)
+ echo m88k-dolphin-sysv3
+ exit 0 ;;
+ M88*:*:R3*:*)
+ # Delta 88k system running SVR3
+ echo m88k-motorola-sysv3
+ exit 0 ;;
+ XD88*:*:*:*) # Tektronix XD88 system running UTekV (SVR3)
+ echo m88k-tektronix-sysv3
+ exit 0 ;;
+ Tek43[0-9][0-9]:UTek:*:*) # Tektronix 4300 system running UTek (BSD)
+ echo m68k-tektronix-bsd
+ exit 0 ;;
+ *:IRIX*:*:*)
+ echo mips-sgi-irix`echo ${UNAME_RELEASE}|sed -e 's/-/_/g'`
+ exit 0 ;;
+ ????????: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 0 ;; # Note that: echo "'`uname -s`'" gives 'AIX '
+ i*86:AIX:*:*)
+ echo i386-ibm-aix
+ exit 0 ;;
+ 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 0 ;;
+ *: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
+ $CC_FOR_BUILD -o $dummy $dummy.c && $dummy && exit 0
+ echo rs6000-ibm-aix3.2.5
+ 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 0 ;;
+ *: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 0 ;;
+ *:AIX:*:*)
+ echo rs6000-ibm-aix
+ exit 0 ;;
+ ibmrt:4.4BSD:*|romp-ibm:BSD:*)
+ echo romp-ibm-bsd4.4
+ exit 0 ;;
+ ibmrt:*BSD:*|romp-ibm:BSD:*) # covers RT/PC BSD and
+ echo romp-ibm-bsd${UNAME_RELEASE} # 4.3 with uname added to
+ exit 0 ;; # report: romp-ibm BSD 4.3
+ *:BOSX:*:*)
+ echo rs6000-bull-bosx
+ exit 0 ;;
+ DPX/2?00:B.O.S.:*:*)
+ echo m68k-bull-sysv3
+ exit 0 ;;
+ 9000/[34]??:4.3bsd:1.*:*)
+ echo m68k-hp-bsd
+ exit 0 ;;
+ hp300:4.4BSD:*:* | 9000/[34]??:4.3bsd:2.*:*)
+ echo m68k-hp-bsd4.4
+ exit 0 ;;
+ 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
+ # avoid double evaluation of $set_cc_for_build
+ test -n "$CC_FOR_BUILD" || eval $set_cc_for_build
+ if echo __LP64__ | (CCOPTS= $CC_FOR_BUILD -E -) | grep __LP64__ >/dev/null
+ then
+ HP_ARCH="hppa2.0w"
+ else
+ HP_ARCH="hppa64"
+ fi
+ fi
+ echo ${HP_ARCH}-hp-hpux${HPUX_REV}
+ exit 0 ;;
+ ia64:HP-UX:*:*)
+ HPUX_REV=`echo ${UNAME_RELEASE}|sed -e 's/[^.]*.[0B]*//'`
+ echo ia64-hp-hpux${HPUX_REV}
+ exit 0 ;;
+ 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 && $dummy && exit 0
+ echo unknown-hitachi-hiuxwe2
+ exit 0 ;;
+ 9000/7??:4.3bsd:*:* | 9000/8?[79]:4.3bsd:*:* )
+ echo hppa1.1-hp-bsd
+ exit 0 ;;
+ 9000/8??:4.3bsd:*:*)
+ echo hppa1.0-hp-bsd
+ exit 0 ;;
+ *9??*:MPE/iX:*:* | *3000*:MPE/iX:*:*)
+ echo hppa1.0-hp-mpeix
+ exit 0 ;;
+ hp7??:OSF1:*:* | hp8?[79]:OSF1:*:* )
+ echo hppa1.1-hp-osf
+ exit 0 ;;
+ hp8??:OSF1:*:*)
+ echo hppa1.0-hp-osf
+ exit 0 ;;
+ i*86:OSF1:*:*)
+ if [ -x /usr/sbin/sysversion ] ; then
+ echo ${UNAME_MACHINE}-unknown-osf1mk
+ else
+ echo ${UNAME_MACHINE}-unknown-osf1
+ fi
+ exit 0 ;;
+ parisc*:Lites*:*:*)
+ echo hppa1.1-hp-lites
+ exit 0 ;;
+ C1*:ConvexOS:*:* | convex:ConvexOS:C1*:*)
+ echo c1-convex-bsd
+ exit 0 ;;
+ C2*:ConvexOS:*:* | convex:ConvexOS:C2*:*)
+ if getsysinfo -f scalar_acc
+ then echo c32-convex-bsd
+ else echo c2-convex-bsd
+ fi
+ exit 0 ;;
+ C34*:ConvexOS:*:* | convex:ConvexOS:C34*:*)
+ echo c34-convex-bsd
+ exit 0 ;;
+ C38*:ConvexOS:*:* | convex:ConvexOS:C38*:*)
+ echo c38-convex-bsd
+ exit 0 ;;
+ C4*:ConvexOS:*:* | convex:ConvexOS:C4*:*)
+ echo c4-convex-bsd
+ exit 0 ;;
+ CRAY*Y-MP:*:*:*)
+ echo ymp-cray-unicos${UNAME_RELEASE} | sed -e 's/\.[^.]*$/.X/'
+ exit 0 ;;
+ 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 0 ;;
+ CRAY*TS:*:*:*)
+ echo t90-cray-unicos${UNAME_RELEASE} | sed -e 's/\.[^.]*$/.X/'
+ exit 0 ;;
+ CRAY*T3E:*:*:*)
+ echo alphaev5-cray-unicosmk${UNAME_RELEASE} | sed -e 's/\.[^.]*$/.X/'
+ exit 0 ;;
+ CRAY*SV1:*:*:*)
+ echo sv1-cray-unicos${UNAME_RELEASE} | sed -e 's/\.[^.]*$/.X/'
+ exit 0 ;;
+ *:UNICOS/mp:*:*)
+ echo craynv-cray-unicosmp${UNAME_RELEASE} | sed -e 's/\.[^.]*$/.X/'
+ exit 0 ;;
+ 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 0 ;;
+ 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 0 ;;
+ i*86:BSD/386:*:* | i*86:BSD/OS:*:* | *:Ascend\ Embedded/OS:*:*)
+ echo ${UNAME_MACHINE}-pc-bsdi${UNAME_RELEASE}
+ exit 0 ;;
+ sparc*:BSD/OS:*:*)
+ echo sparc-unknown-bsdi${UNAME_RELEASE}
+ exit 0 ;;
+ *:BSD/OS:*:*)
+ echo ${UNAME_MACHINE}-unknown-bsdi${UNAME_RELEASE}
+ exit 0 ;;
+ *:FreeBSD:*:*)
+ echo ${UNAME_MACHINE}-unknown-freebsd`echo ${UNAME_RELEASE}|sed -e 's/[-(].*//'`
+ exit 0 ;;
+ i*:CYGWIN*:*)
+ echo ${UNAME_MACHINE}-pc-cygwin
+ exit 0 ;;
+ i*:MINGW*:*)
+ echo ${UNAME_MACHINE}-pc-mingw32
+ exit 0 ;;
+ i*:PW*:*)
+ echo ${UNAME_MACHINE}-pc-pw32
+ exit 0 ;;
+ x86:Interix*:[34]*)
+ echo i586-pc-interix${UNAME_RELEASE}|sed -e 's/\..*//'
+ exit 0 ;;
+ [345]86:Windows_95:* | [345]86:Windows_98:* | [345]86:Windows_NT:*)
+ echo i${UNAME_MACHINE}-pc-mks
+ exit 0 ;;
+ 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 0 ;;
+ i*:UWIN*:*)
+ echo ${UNAME_MACHINE}-pc-uwin
+ exit 0 ;;
+ p*:CYGWIN*:*)
+ echo powerpcle-unknown-cygwin
+ exit 0 ;;
+ prep*:SunOS:5.*:*)
+ echo powerpcle-unknown-solaris2`echo ${UNAME_RELEASE}|sed -e 's/[^.]*//'`
+ exit 0 ;;
+ *:GNU:*:*)
+ # the GNU system
+ echo `echo ${UNAME_MACHINE}|sed -e 's,[-/].*$,,'`-unknown-gnu`echo ${UNAME_RELEASE}|sed -e 's,/.*$,,'`
+ exit 0 ;;
+ *: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 0 ;;
+ i*86:Minix:*:*)
+ echo ${UNAME_MACHINE}-pc-minix
+ exit 0 ;;
+ arm*:Linux:*:*)
+ echo ${UNAME_MACHINE}-unknown-linux-gnu
+ exit 0 ;;
+ cris:Linux:*:*)
+ echo cris-axis-linux-gnu
+ exit 0 ;;
+ crisv32:Linux:*:*)
+ echo crisv32-axis-linux-gnu
+ exit 0 ;;
+ frv:Linux:*:*)
+ echo frv-unknown-linux-gnu
+ exit 0 ;;
+ ia64:Linux:*:*)
+ echo ${UNAME_MACHINE}-unknown-linux-gnu
+ exit 0 ;;
+ m32r*:Linux:*:*)
+ echo ${UNAME_MACHINE}-unknown-linux-gnu
+ exit 0 ;;
+ m68*:Linux:*:*)
+ echo ${UNAME_MACHINE}-unknown-linux-gnu
+ exit 0 ;;
+ 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 | grep ^CPU=`
+ test x"${CPU}" != x && echo "${CPU}-unknown-linux-gnu" && exit 0
+ ;;
+ 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 | grep ^CPU=`
+ test x"${CPU}" != x && echo "${CPU}-unknown-linux-gnu" && exit 0
+ ;;
+ ppc:Linux:*:*)
+ echo powerpc-unknown-linux-gnu
+ exit 0 ;;
+ ppc64:Linux:*:*)
+ echo powerpc64-unknown-linux-gnu
+ exit 0 ;;
+ 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 0 ;;
+ 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 0 ;;
+ parisc64:Linux:*:* | hppa64:Linux:*:*)
+ echo hppa64-unknown-linux-gnu
+ exit 0 ;;
+ s390:Linux:*:* | s390x:Linux:*:*)
+ echo ${UNAME_MACHINE}-ibm-linux
+ exit 0 ;;
+ sh64*:Linux:*:*)
+ echo ${UNAME_MACHINE}-unknown-linux-gnu
+ exit 0 ;;
+ sh*:Linux:*:*)
+ echo ${UNAME_MACHINE}-unknown-linux-gnu
+ exit 0 ;;
+ sparc:Linux:*:* | sparc64:Linux:*:*)
+ echo ${UNAME_MACHINE}-unknown-linux-gnu
+ exit 0 ;;
+ x86_64:Linux:*:*)
+ echo x86_64-unknown-linux-gnu
+ exit 0 ;;
+ 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 0 ;;
+ coff-i386)
+ echo "${UNAME_MACHINE}-pc-linux-gnucoff"
+ exit 0 ;;
+ "")
+ # 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 0 ;;
+ 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
+ #ifdef __INTEL_COMPILER
+ LIBC=gnu
+ #else
+ LIBC=gnuaout
+ #endif
+ #endif
+ #ifdef __dietlibc__
+ LIBC=dietlibc
+ #endif
+EOF
+ eval `$CC_FOR_BUILD -E $dummy.c 2>/dev/null | grep ^LIBC=`
+ test x"${LIBC}" != x && echo "${UNAME_MACHINE}-pc-linux-${LIBC}" && exit 0
+ test x"${TENTATIVE}" != x && echo "${TENTATIVE}" && exit 0
+ ;;
+ 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 0 ;;
+ 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 0 ;;
+ 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 0 ;;
+ i*86:XTS-300:*:STOP)
+ echo ${UNAME_MACHINE}-unknown-stop
+ exit 0 ;;
+ i*86:atheos:*:*)
+ echo ${UNAME_MACHINE}-unknown-atheos
+ exit 0 ;;
+ i*86:syllable:*:*)
+ echo ${UNAME_MACHINE}-pc-syllable
+ exit 0 ;;
+ i*86:LynxOS:2.*:* | i*86:LynxOS:3.[01]*:* | i*86:LynxOS:4.0*:*)
+ echo i386-unknown-lynxos${UNAME_RELEASE}
+ exit 0 ;;
+ i*86:*DOS:*:*)
+ echo ${UNAME_MACHINE}-pc-msdosdjgpp
+ exit 0 ;;
+ 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 0 ;;
+ i*86:*:5:[78]*)
+ 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 0 ;;
+ 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 0 ;;
+ 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 0 ;;
+ Intel:Mach:3*:*)
+ echo i386-pc-mach3
+ exit 0 ;;
+ paragon:*:*:*)
+ echo i860-intel-osf1
+ exit 0 ;;
+ 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 0 ;;
+ mini*:CTIX:SYS*5:*)
+ # "miniframe"
+ echo m68010-convergent-sysv
+ exit 0 ;;
+ mc68k:UNIX:SYSTEM5:3.51m)
+ echo m68k-convergent-sysv
+ exit 0 ;;
+ M680?0:D-NIX:5.3:*)
+ echo m68k-diab-dnix
+ exit 0 ;;
+ M68*:*:R3V[5678]*:*)
+ test -r /sysV68 && echo 'm68k-motorola-sysv' && exit 0 ;;
+ 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 0
+ /bin/uname -p 2>/dev/null | /bin/grep entium >/dev/null \
+ && echo i586-ncr-sysv4.3${OS_REL} && exit 0 ;;
+ 3[34]??:*:4.0:* | 3[34]??,*:*:4.0:*)
+ /bin/uname -p 2>/dev/null | grep 86 >/dev/null \
+ && echo i486-ncr-sysv4 && exit 0 ;;
+ m68*:LynxOS:2.*:* | m68*:LynxOS:3.0*:*)
+ echo m68k-unknown-lynxos${UNAME_RELEASE}
+ exit 0 ;;
+ mc68030:UNIX_System_V:4.*:*)
+ echo m68k-atari-sysv4
+ exit 0 ;;
+ TSUNAMI:LynxOS:2.*:*)
+ echo sparc-unknown-lynxos${UNAME_RELEASE}
+ exit 0 ;;
+ rs6000:LynxOS:2.*:*)
+ echo rs6000-unknown-lynxos${UNAME_RELEASE}
+ exit 0 ;;
+ PowerPC:LynxOS:2.*:* | PowerPC:LynxOS:3.[01]*:* | PowerPC:LynxOS:4.0*:*)
+ echo powerpc-unknown-lynxos${UNAME_RELEASE}
+ exit 0 ;;
+ SM[BE]S:UNIX_SV:*:*)
+ echo mips-dde-sysv${UNAME_RELEASE}
+ exit 0 ;;
+ RM*:ReliantUNIX-*:*:*)
+ echo mips-sni-sysv4
+ exit 0 ;;
+ RM*:SINIX-*:*:*)
+ echo mips-sni-sysv4
+ exit 0 ;;
+ *: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 0 ;;
+ PENTIUM:*:4.0*:*) # Unisys `ClearPath HMP IX 4000' SVR4/MP effort
+ # says <Richard.M.Bartel@ccMail.Census.GOV>
+ echo i586-unisys-sysv4
+ exit 0 ;;
+ *:UNIX_System_V:4*:FTX*)
+ # From Gerald Hewes <hewes@openmarket.com>.
+ # How about differentiating between stratus architectures? -djm
+ echo hppa1.1-stratus-sysv4
+ exit 0 ;;
+ *:*:*:FTX*)
+ # From seanf@swdc.stratus.com.
+ echo i860-stratus-sysv4
+ exit 0 ;;
+ *:VOS:*:*)
+ # From Paul.Green@stratus.com.
+ echo hppa1.1-stratus-vos
+ exit 0 ;;
+ mc68*:A/UX:*:*)
+ echo m68k-apple-aux${UNAME_RELEASE}
+ exit 0 ;;
+ news*:NEWS-OS:6*:*)
+ echo mips-sony-newsos6
+ exit 0 ;;
+ 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 0 ;;
+ BeBox:BeOS:*:*) # BeOS running on hardware made by Be, PPC only.
+ echo powerpc-be-beos
+ exit 0 ;;
+ BeMac:BeOS:*:*) # BeOS running on Mac or Mac clone, PPC only.
+ echo powerpc-apple-beos
+ exit 0 ;;
+ BePC:BeOS:*:*) # BeOS running on Intel PC compatible.
+ echo i586-pc-beos
+ exit 0 ;;
+ SX-4:SUPER-UX:*:*)
+ echo sx4-nec-superux${UNAME_RELEASE}
+ exit 0 ;;
+ SX-5:SUPER-UX:*:*)
+ echo sx5-nec-superux${UNAME_RELEASE}
+ exit 0 ;;
+ SX-6:SUPER-UX:*:*)
+ echo sx6-nec-superux${UNAME_RELEASE}
+ exit 0 ;;
+ Power*:Rhapsody:*:*)
+ echo powerpc-apple-rhapsody${UNAME_RELEASE}
+ exit 0 ;;
+ *:Rhapsody:*:*)
+ echo ${UNAME_MACHINE}-apple-rhapsody${UNAME_RELEASE}
+ exit 0 ;;
+ *:Darwin:*:*)
+ UNAME_PROCESSOR=`uname -p` || UNAME_PROCESSOR=unknown
+ case $UNAME_PROCESSOR in
+ *86) UNAME_PROCESSOR=i686 ;;
+ unknown) UNAME_PROCESSOR=powerpc ;;
+ esac
+ echo ${UNAME_PROCESSOR}-apple-darwin${UNAME_RELEASE}
+ exit 0 ;;
+ *: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 0 ;;
+ *:QNX:*:4*)
+ echo i386-pc-qnx
+ exit 0 ;;
+ NSR-?:NONSTOP_KERNEL:*:*)
+ echo nsr-tandem-nsk${UNAME_RELEASE}
+ exit 0 ;;
+ *:NonStop-UX:*:*)
+ echo mips-compaq-nonstopux
+ exit 0 ;;
+ BS2000:POSIX*:*:*)
+ echo bs2000-siemens-sysv
+ exit 0 ;;
+ DS/*:UNIX_System_V:*:*)
+ echo ${UNAME_MACHINE}-${UNAME_SYSTEM}-${UNAME_RELEASE}
+ exit 0 ;;
+ *: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 0 ;;
+ *:TOPS-10:*:*)
+ echo pdp10-unknown-tops10
+ exit 0 ;;
+ *:TENEX:*:*)
+ echo pdp10-unknown-tenex
+ exit 0 ;;
+ KS10:TOPS-20:*:* | KL10:TOPS-20:*:* | TYPE4:TOPS-20:*:*)
+ echo pdp10-dec-tops20
+ exit 0 ;;
+ XKL-1:TOPS-20:*:* | TYPE5:TOPS-20:*:*)
+ echo pdp10-xkl-tops20
+ exit 0 ;;
+ *:TOPS-20:*:*)
+ echo pdp10-unknown-tops20
+ exit 0 ;;
+ *:ITS:*:*)
+ echo pdp10-unknown-its
+ exit 0 ;;
+ SEI:*:*:SEIUX)
+ echo mips-sei-seiux${UNAME_RELEASE}
+ exit 0 ;;
+ *:DragonFly:*:*)
+ echo ${UNAME_MACHINE}-unknown-dragonfly`echo ${UNAME_RELEASE}|sed -e 's/[-(].*//'`
+ exit 0 ;;
+ *:*VMS:*:*)
+ UNAME_MACHINE=`(uname -p) 2>/dev/null`
+ case "${UNAME_MACHINE}" in
+ A*) echo alpha-dec-vms && exit 0 ;;
+ I*) echo ia64-dec-vms && exit 0 ;;
+ V*) echo vax-dec-vms && exit 0 ;;
+ esac ;;
+ *:XENIX:*:SysV)
+ echo i386-pc-xenix
+ exit 0 ;;
+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"); 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 && $dummy && exit 0
+
+# Apollos put the system type in the environment.
+
+test -d /usr/apollo && { echo ${ISP}-apollo-${SYSTYPE}; exit 0; }
+
+# 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 0 ;;
+ c2*)
+ if getsysinfo -f scalar_acc
+ then echo c32-convex-bsd
+ else echo c2-convex-bsd
+ fi
+ exit 0 ;;
+ c34*)
+ echo c34-convex-bsd
+ exit 0 ;;
+ c38*)
+ echo c38-convex-bsd
+ exit 0 ;;
+ c4*)
+ echo c4-convex-bsd
+ exit 0 ;;
+ 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
+
+ ftp://ftp.gnu.org/pub/gnu/config/
+
+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/macros/texinfo/contrib/texinfo-hu/texinfo/config.in b/macros/texinfo/contrib/texinfo-hu/texinfo/config.in
new file mode 100644
index 0000000000..cc9fc88828
--- /dev/null
+++ b/macros/texinfo/contrib/texinfo-hu/texinfo/config.in
@@ -0,0 +1,420 @@
+/* config.in. Generated from configure.ac by autoheader. */
+
+/* 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 to 1 if `TIOCGWINSZ' requires <sys/ioctl.h>. */
+#undef GWINSZ_IN_SYS_IOCTL
+
+/* Define to 1 if you have `alloca', as a function or macro. */
+#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 `asprintf' function. */
+#undef HAVE_ASPRINTF
+
+/* Define to 1 if you have the `bzero' function. */
+#undef HAVE_BZERO
+
+/* Define if the GNU dcgettext() function is already present or preinstalled.
+ */
+#undef HAVE_DCGETTEXT
+
+/* Define to 1 if you have the declaration of `feof_unlocked', and to 0 if you
+ don't. */
+#undef HAVE_DECL_FEOF_UNLOCKED
+
+/* Define to 1 if you have the declaration of `fgets_unlocked', and to 0 if
+ you don't. */
+#undef HAVE_DECL_FGETS_UNLOCKED
+
+/* 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 the declaration of `memchr', and to 0 if you don't.
+ */
+#undef HAVE_DECL_MEMCHR
+
+/* 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 `strerror', and to 0 if you
+ don't. */
+#undef HAVE_DECL_STRERROR
+
+/* Define to 1 if you have the declaration of `_snprintf', and to 0 if you
+ don't. */
+#undef HAVE_DECL__SNPRINTF
+
+/* Define to 1 if you have the declaration of `_snwprintf', and to 0 if you
+ don't. */
+#undef HAVE_DECL__SNWPRINTF
+
+/* Define to 1 if you don't have `vprintf' but do have `_doprnt.' */
+#undef HAVE_DOPRNT
+
+/* Define to 1 if you have the <fcntl.h> header file. */
+#undef HAVE_FCNTL_H
+
+/* Define to 1 if you have the `fwprintf' function. */
+#undef HAVE_FWPRINTF
+
+/* Define to 1 if you have the `getcwd' function. */
+#undef HAVE_GETCWD
+
+/* Define to 1 if you have the `getegid' function. */
+#undef HAVE_GETEGID
+
+/* Define to 1 if you have the `geteuid' function. */
+#undef HAVE_GETEUID
+
+/* Define to 1 if you have the `getgid' function. */
+#undef HAVE_GETGID
+
+/* Define to 1 if you have the `getpagesize' function. */
+#undef HAVE_GETPAGESIZE
+
+/* 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 to 1 if you have the `getuid' function. */
+#undef HAVE_GETUID
+
+/* Define if you have the iconv() function. */
+#undef HAVE_ICONV
+
+/* Define if you have the 'intmax_t' type in <stdint.h> or <inttypes.h>. */
+#undef HAVE_INTMAX_T
+
+/* Define if <inttypes.h> exists and doesn't clash with <sys/types.h>. */
+#undef HAVE_INTTYPES_H
+
+/* Define if <inttypes.h> exists, doesn't clash with <sys/types.h>, and
+ declares uintmax_t. */
+#undef HAVE_INTTYPES_H_WITH_UINTMAX
+
+/* Define to 1 if you have the <io.h> header file. */
+#undef HAVE_IO_H
+
+/* Define if you have <langinfo.h> and nl_langinfo(CODESET). */
+#undef HAVE_LANGINFO_CODESET
+
+/* Define if your <locale.h> file defines LC_MESSAGES. */
+#undef HAVE_LC_MESSAGES
+
+/* 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 you have the <locale.h> header file. */
+#undef HAVE_LOCALE_H
+
+/* Define if you have the 'long double' type. */
+#undef HAVE_LONG_DOUBLE
+
+/* Define if you have the 'long long' type. */
+#undef HAVE_LONG_LONG
+
+/* Define to 1 if you have the <malloc.h> header file. */
+#undef HAVE_MALLOC_H
+
+/* Define to 1 if you have the `memcpy' function. */
+#undef HAVE_MEMCPY
+
+/* 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 `mkstemp' function. */
+#undef HAVE_MKSTEMP
+
+/* Define to 1 if you have a working `mmap' system call. */
+#undef HAVE_MMAP
+
+/* Define to 1 if you have the `munmap' function. */
+#undef HAVE_MUNMAP
+
+/* Define to 1 if you have the <ncurses/termcap.h> header file. */
+#undef HAVE_NCURSES_TERMCAP_H
+
+/* Define to 1 if you have the <nl_types.h> header file. */
+#undef HAVE_NL_TYPES_H
+
+/* Define if your printf() function supports format strings with positions. */
+#undef HAVE_POSIX_PRINTF
+
+/* Define to 1 if you have the `putenv' function. */
+#undef HAVE_PUTENV
+
+/* Define to 1 if you have the <pwd.h> header file. */
+#undef HAVE_PWD_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 you have the `sigprocmask' function. */
+#undef HAVE_SIGPROCMASK
+
+/* Define to 1 if you have the `sigsetmask' function. */
+#undef HAVE_SIGSETMASK
+
+/* Define to 1 if you have the `snprintf' function. */
+#undef HAVE_SNPRINTF
+
+/* Define to 1 if you have the <stddef.h> header file. */
+#undef HAVE_STDDEF_H
+
+/* Define to 1 if you have the <stdint.h> header file. */
+#undef HAVE_STDINT_H
+
+/* Define if <stdint.h> exists, doesn't clash with <sys/types.h>, and declares
+ uintmax_t. */
+#undef HAVE_STDINT_H_WITH_UINTMAX
+
+/* Define to 1 if you have the <stdlib.h> header file. */
+#undef HAVE_STDLIB_H
+
+/* Define to 1 if you have the `stpcpy' function. */
+#undef HAVE_STPCPY
+
+/* Define to 1 if you have the `strcasecmp' function. */
+#undef HAVE_STRCASECMP
+
+/* 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 <strings.h> header file. */
+#undef HAVE_STRINGS_H
+
+/* Define to 1 if you have the <string.h> header file. */
+#undef HAVE_STRING_H
+
+/* Define to 1 if you have the `strncasecmp' function. */
+#undef HAVE_STRNCASECMP
+
+/* Define to 1 if you have the `strtoul' function. */
+#undef HAVE_STRTOUL
+
+/* 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/param.h> header file. */
+#undef HAVE_SYS_PARAM_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/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 if you have the 'uintmax_t' type in <stdint.h> or <inttypes.h>. */
+#undef HAVE_UINTMAX_T
+
+/* Define to 1 if you have the <unistd.h> header file. */
+#undef HAVE_UNISTD_H
+
+/* Define if you have the 'unsigned long long' type. */
+#undef HAVE_UNSIGNED_LONG_LONG
+
+/* Define to 1 if you have the `vprintf' function. */
+#undef HAVE_VPRINTF
+
+/* Define if you have the 'wchar_t' type. */
+#undef HAVE_WCHAR_T
+
+/* Define to 1 if you have the `wcslen' function. */
+#undef HAVE_WCSLEN
+
+/* Define if you have the 'wint_t' type. */
+#undef HAVE_WINT_T
+
+/* Define to 1 if you have the `__argz_count' function. */
+#undef HAVE___ARGZ_COUNT
+
+/* Define to 1 if you have the `__argz_next' function. */
+#undef HAVE___ARGZ_NEXT
+
+/* Define to 1 if you have the `__argz_stringify' function. */
+#undef HAVE___ARGZ_STRINGIFY
+
+/* Define to 1 if you have the `__fsetlocking' function. */
+#undef HAVE___FSETLOCKING
+
+/* Define to 1 if you have the `__secure_getenv' function. */
+#undef HAVE___SECURE_GETENV
+
+/* Define as const if the declaration of iconv() needs const. */
+#undef ICONV_CONST
+
+/* Define if integer division by zero raises signal SIGFPE. */
+#undef INTDIV0_RAISES_SIGFPE
+
+/* 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 if <inttypes.h> exists and defines unusable PRI* macros. */
+#undef PRI_MACROS_BROKEN
+
+/* Define as the return type of signal handlers (`int' or `void'). */
+#undef RETSIGTYPE
+
+/* Define as the maximum value of type 'size_t', if the system doesn't define
+ it. */
+#undef SIZE_MAX
+
+/* 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 run-time.
+ 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 your <sys/time.h> declares `struct tm'. */
+#undef TM_IN_SYS_TIME
+
+/* Version number of package */
+#undef VERSION
+
+/* 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
+
+/* Define to empty if `const' does not conform to ANSI C. */
+#undef const
+
+/* Define to `__inline__' or `__inline' if that's what the C compiler
+ calls it, or to nothing if 'inline' is not supported under any name. */
+#ifndef __cplusplus
+#undef inline
+#endif
+
+/* Define to rpl_mkstemp if the replacement function should be used. */
+#undef mkstemp
+
+/* Define to `long' if <sys/types.h> does not define. */
+#undef off_t
+
+/* Define as the type of the result of subtracting two pointers, if the system
+ doesn't define it. */
+#undef ptrdiff_t
+
+/* Define to empty if the C compiler doesn't support this keyword. */
+#undef signed
+
+/* Define to `unsigned' if <sys/types.h> does not define. */
+#undef size_t
+
+/* Define to unsigned long or unsigned long long if <stdint.h> and
+ <inttypes.h> don't define. */
+#undef uintmax_t
diff --git a/macros/texinfo/contrib/texinfo-hu/texinfo/config.rpath b/macros/texinfo/contrib/texinfo-hu/texinfo/config.rpath
new file mode 100644
index 0000000000..4db13e50f6
--- /dev/null
+++ b/macros/texinfo/contrib/texinfo-hu/texinfo/config.rpath
@@ -0,0 +1,548 @@
+#! /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-2003 Free Software Foundation, Inc.
+# Taken from GNU libtool, 2001
+# Originally by Gordon Matzigkeit <gord@gnu.ai.mit.edu>, 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 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., 59 Temple Place - Suite 330, Boston, MA 02111-1307, 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.
+#
+# 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 M$VC,
+# 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 AC_LIBTOOL_PROG_COMPILER_PIC.
+
+wl=
+if test "$GCC" = yes; then
+ wl='-Wl,'
+else
+ case "$host_os" in
+ aix*)
+ wl='-Wl,'
+ ;;
+ mingw* | pw32* | os2*)
+ ;;
+ hpux9* | hpux10* | hpux11*)
+ wl='-Wl,'
+ ;;
+ irix5* | irix6* | nonstopux*)
+ wl='-Wl,'
+ ;;
+ newsos6)
+ ;;
+ linux*)
+ case $CC in
+ icc|ecc)
+ wl='-Wl,'
+ ;;
+ ccc)
+ wl='-Wl,'
+ ;;
+ esac
+ ;;
+ osf3* | osf4* | osf5*)
+ wl='-Wl,'
+ ;;
+ sco3.2v5*)
+ ;;
+ solaris*)
+ wl='-Wl,'
+ ;;
+ sunos4*)
+ wl='-Qoption ld '
+ ;;
+ sysv4 | sysv4.2uw2* | sysv4.3* | sysv5*)
+ wl='-Wl,'
+ ;;
+ sysv4*MP*)
+ ;;
+ uts4*)
+ ;;
+ esac
+fi
+
+# Code taken from libtool.m4's AC_LIBTOOL_PROG_LD_SHLIBS.
+
+hardcode_libdir_flag_spec=
+hardcode_libdir_separator=
+hardcode_direct=no
+hardcode_minus_L=no
+
+case "$host_os" in
+ cygwin* | mingw* | pw32*)
+ # 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
+ ;;
+ openbsd*)
+ with_gnu_ld=no
+ ;;
+esac
+
+ld_shlibs=yes
+if test "$with_gnu_ld" = yes; then
+ case "$host_os" in
+ aix3* | aix4* | aix5*)
+ # 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 can 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*)
+ # 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
+ ;;
+ netbsd*)
+ ;;
+ solaris* | sysv5*)
+ 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
+ ;;
+ 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" = yes; then
+ # 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'
+ 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
+ ;;
+ aix4* | aix5*)
+ 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].*|aix5*)
+ 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
+ hardcode_direct=yes
+ 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
+ ;;
+ bsdi4*)
+ ;;
+ cygwin* | mingw* | pw32*)
+ # 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*)
+ if $CC -v 2>&1 | grep 'Apple' >/dev/null ; then
+ hardcode_direct=no
+ 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*)
+ 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* | hpux11*)
+ if test "$with_gnu_ld" = no; then
+ case "$host_cpu" in
+ hppa*64*)
+ hardcode_libdir_flag_spec='${wl}+b ${wl}$libdir'
+ hardcode_libdir_separator=:
+ hardcode_direct=no
+ ;;
+ ia64*)
+ hardcode_libdir_flag_spec='-L$libdir'
+ hardcode_direct=no
+ # hardcode_minus_L: Not really in the search PATH,
+ # but as the default location of the library.
+ hardcode_minus_L=yes
+ ;;
+ *)
+ 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
+ ;;
+ 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*)
+ 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
+ ;;
+ 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=:
+ ;;
+ sco3.2v5*)
+ ;;
+ 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.2uw2*)
+ hardcode_direct=yes
+ hardcode_minus_L=no
+ ;;
+ sysv5OpenUNIX8* | sysv5UnixWare7* | sysv5uw[78]* | unixware7*)
+ ;;
+ sysv5*)
+ hardcode_libdir_flag_spec=
+ ;;
+ uts4*)
+ hardcode_libdir_flag_spec='-L$libdir'
+ ;;
+ *)
+ ld_shlibs=no
+ ;;
+ esac
+fi
+
+# Check dynamic linker characteristics
+# Code taken from libtool.m4's AC_LIBTOOL_SYS_DYNAMIC_LINKER.
+libname_spec='lib$name'
+case "$host_os" in
+ aix3*)
+ ;;
+ aix4* | aix5*)
+ ;;
+ amigaos*)
+ ;;
+ beos*)
+ ;;
+ bsdi4*)
+ ;;
+ cygwin* | mingw* | pw32*)
+ shrext=.dll
+ ;;
+ darwin* | rhapsody*)
+ shrext=.dylib
+ ;;
+ dgux*)
+ ;;
+ freebsd1*)
+ ;;
+ freebsd*)
+ ;;
+ gnu*)
+ ;;
+ hpux9* | hpux10* | hpux11*)
+ case "$host_cpu" in
+ ia64*)
+ shrext=.so
+ ;;
+ hppa*64*)
+ shrext=.sl
+ ;;
+ *)
+ shrext=.sl
+ ;;
+ esac
+ ;;
+ irix5* | irix6* | nonstopux*)
+ 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*)
+ ;;
+ netbsd*)
+ ;;
+ newsos6)
+ ;;
+ nto-qnx)
+ ;;
+ openbsd*)
+ ;;
+ os2*)
+ libname_spec='$name'
+ shrext=.dll
+ ;;
+ osf3* | osf4* | osf5*)
+ ;;
+ sco3.2v5*)
+ ;;
+ solaris*)
+ ;;
+ sunos4*)
+ ;;
+ sysv4 | sysv4.2uw2* | sysv4.3* | sysv5*)
+ ;;
+ sysv4*MP*)
+ ;;
+ uts4*)
+ ;;
+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_hardcode_libdir_flag_spec=`echo "X$hardcode_libdir_flag_spec" | sed -e 's/^X//' -e "$sed_quote_subst"`
+
+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"
+
+# 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/macros/texinfo/contrib/texinfo-hu/texinfo/config.sub b/macros/texinfo/contrib/texinfo-hu/texinfo/config.sub
new file mode 100644
index 0000000000..0f84ac2c51
--- /dev/null
+++ b/macros/texinfo/contrib/texinfo-hu/texinfo/config.sub
@@ -0,0 +1,1566 @@
+#! /bin/sh
+# Configuration validation subroutine script.
+# Copyright (C) 1992, 1993, 1994, 1995, 1996, 1997, 1998, 1999,
+# 2000, 2001, 2002, 2003, 2004 Free Software Foundation, Inc.
+
+timestamp='2004-11-30'
+
+# 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., 59 Temple Place - Suite 330,
+# Boston, MA 02111-1307, 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
+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 0 ;;
+ --version | -v )
+ echo "$version" ; exit 0 ;;
+ --help | --h* | -h )
+ echo "$usage"; exit 0 ;;
+ -- ) # 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 0;;
+
+ * )
+ 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-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
+ ;;
+ -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/'`
+ ;;
+ -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 \
+ | 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 \
+ | m32r | m32rle | m68000 | m68k | m88k | mcore \
+ | mips | mipsbe | mipseb | mipsel | mipsle \
+ | mips16 \
+ | mips64 | mips64el \
+ | mips64vr | mips64vrel \
+ | mips64orion | mips64orionel \
+ | mips64vr4100 | mips64vr4100el \
+ | mips64vr4300 | mips64vr4300el \
+ | mips64vr5000 | mips64vr5000el \
+ | mipsisa32 | mipsisa32el \
+ | mipsisa32r2 | mipsisa32r2el \
+ | mipsisa64 | mipsisa64el \
+ | mipsisa64r2 | mipsisa64r2el \
+ | mipsisa64sb1 | mipsisa64sb1el \
+ | mipsisa64sr71k | mipsisa64sr71kel \
+ | mipstx39 | mipstx39el \
+ | mn10200 | mn10300 \
+ | msp430 \
+ | ns16k | ns32k \
+ | openrisc | or32 \
+ | pdp10 | pdp11 | pj | pjl \
+ | powerpc | powerpc64 | powerpc64le | powerpcle | ppcbe \
+ | pyramid \
+ | sh | sh[1234] | sh[23]e | sh[34]eb | shbe | shle | sh[1234]le | sh3ele \
+ | sh64 | sh64le \
+ | sparc | sparc64 | sparc86x | sparclet | sparclite | sparcv8 | sparcv9 | sparcv9b \
+ | 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)
+ ;;
+
+ # 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-* \
+ | 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-* \
+ | m32r-* | m32rle-* \
+ | m68000-* | m680[012346]0-* | m68360-* | m683?2-* | m68k-* \
+ | m88110-* | m88k-* | mcore-* \
+ | mips-* | mipsbe-* | mipseb-* | mipsel-* | mipsle-* \
+ | mips16-* \
+ | mips64-* | mips64el-* \
+ | mips64vr-* | mips64vrel-* \
+ | mips64orion-* | mips64orionel-* \
+ | mips64vr4100-* | mips64vr4100el-* \
+ | mips64vr4300-* | mips64vr4300el-* \
+ | mips64vr5000-* | mips64vr5000el-* \
+ | mipsisa32-* | mipsisa32el-* \
+ | mipsisa32r2-* | mipsisa32r2el-* \
+ | mipsisa64-* | mipsisa64el-* \
+ | mipsisa64r2-* | mipsisa64r2el-* \
+ | mipsisa64sb1-* | mipsisa64sb1el-* \
+ | mipsisa64sr71k-* | mipsisa64sr71kel-* \
+ | mipstx39-* | mipstx39el-* \
+ | mmix-* \
+ | msp430-* \
+ | none-* | np1-* | ns16k-* | ns32k-* \
+ | orion-* \
+ | pdp10-* | pdp11-* | pj-* | pjl-* | pn-* | power-* \
+ | powerpc-* | powerpc64-* | powerpc64le-* | powerpcle-* | ppcbe-* \
+ | pyramid-* \
+ | romp-* | rs6000-* \
+ | sh-* | sh[1234]-* | sh[23]e-* | sh[34]eb-* | shbe-* \
+ | shle-* | sh[1234]le-* | sh3ele-* | sh64-* | sh64le-* \
+ | sparc-* | sparc64-* | sparc86x-* | sparclet-* | sparclite-* \
+ | sparcv8-* | sparcv9-* | sparcv9b-* | 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
+ ;;
+ 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
+ ;;
+ or32 | or32-*)
+ basic_machine=or32-unknown
+ os=-coff
+ ;;
+ 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
+ ;;
+ 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
+ ;;
+ 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
+ ;;
+ sh3 | sh4 | sh[34]eb | sh[1234]le | sh[23]ele)
+ basic_machine=sh-unknown
+ ;;
+ sh64)
+ basic_machine=sh64-unknown
+ ;;
+ sparc | sparcv8 | sparcv9 | sparcv9b)
+ 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* \
+ | -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-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*)
+ # 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* \
+ | -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
+ *-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
+ ;;
+ *-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 0
+
+# 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/macros/texinfo/contrib/texinfo-hu/texinfo/configure b/macros/texinfo/contrib/texinfo-hu/texinfo/configure
new file mode 100644
index 0000000000..f38ef266cb
--- /dev/null
+++ b/macros/texinfo/contrib/texinfo-hu/texinfo/configure
@@ -0,0 +1,14795 @@
+#! /bin/sh
+# Guess values for system-dependent variables and create Makefiles.
+# Generated by GNU Autoconf 2.59 for GNU Texinfo 4.8.
+#
+# Copyright (C) 2003 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 Bourne compatible
+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
+DUALCASE=1; export DUALCASE # for MKS sh
+
+# Support unset when possible.
+if ( (MAIL=60; unset MAIL) || exit) >/dev/null 2>&1; then
+ as_unset=unset
+else
+ as_unset=false
+fi
+
+
+# Work around bugs in pre-3.0 UWIN ksh.
+$as_unset ENV MAIL MAILPATH
+PS1='$ '
+PS2='> '
+PS4='+ '
+
+# NLS nuisances.
+for as_var in \
+ LANG LANGUAGE LC_ADDRESS LC_ALL LC_COLLATE LC_CTYPE LC_IDENTIFICATION \
+ LC_MEASUREMENT LC_MESSAGES LC_MONETARY LC_NAME LC_NUMERIC LC_PAPER \
+ LC_TELEPHONE LC_TIME
+do
+ if (set +x; test -z "`(eval $as_var=C; export $as_var) 2>&1`"); then
+ eval $as_var=C; export $as_var
+ else
+ $as_unset $as_var
+ fi
+done
+
+# Required to use basename.
+if expr a : '\(a\)' >/dev/null 2>&1; 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 ||
+echo X/"$0" |
+ sed '/^.*\/\([^/][^/]*\)\/*$/{ s//\1/; q; }
+ /^X\/\(\/\/\)$/{ s//\1/; q; }
+ /^X\/\(\/\).*/{ s//\1/; q; }
+ s/.*/./; q'`
+
+
+# PATH needs CR, and LINENO needs CR and PATH.
+# 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
+
+# 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
+
+
+ as_lineno_1=$LINENO
+ as_lineno_2=$LINENO
+ as_lineno_3=`(expr $as_lineno_1 + 1) 2>/dev/null`
+ test "x$as_lineno_1" != "x$as_lineno_2" &&
+ test "x$as_lineno_3" = "x$as_lineno_2" || {
+ # Find who we are. Look in the path if we contain no path at all
+ # relative or not.
+ 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
+
+ ;;
+ 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
+ { echo "$as_me: error: cannot find myself; rerun with an absolute path" >&2
+ { (exit 1); exit 1; }; }
+ fi
+ case $CONFIG_SHELL in
+ '')
+ 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=.
+ for as_base in sh bash ksh sh5; do
+ case $as_dir in
+ /*)
+ if ("$as_dir/$as_base" -c '
+ as_lineno_1=$LINENO
+ as_lineno_2=$LINENO
+ as_lineno_3=`(expr $as_lineno_1 + 1) 2>/dev/null`
+ test "x$as_lineno_1" != "x$as_lineno_2" &&
+ test "x$as_lineno_3" = "x$as_lineno_2" ') 2>/dev/null; then
+ $as_unset BASH_ENV || test "${BASH_ENV+set}" != set || { BASH_ENV=; export BASH_ENV; }
+ $as_unset ENV || test "${ENV+set}" != set || { ENV=; export ENV; }
+ CONFIG_SHELL=$as_dir/$as_base
+ export CONFIG_SHELL
+ exec "$CONFIG_SHELL" "$0" ${1+"$@"}
+ fi;;
+ esac
+ done
+done
+;;
+ esac
+
+ # 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 before each line; the second 'sed' does the real
+ # work. The second script uses 'N' to pair each line-number line
+ # with the numbered line, 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
+ # second 'sed' script. Blame Lee E. McMahon for sed's syntax. :-)
+ sed '=' <$as_myself |
+ sed '
+ N
+ s,$,-,
+ : loop
+ s,^\(['$as_cr_digits']*\)\(.*\)[$]LINENO\([^'$as_cr_alnum'_]\),\1\2\1\3,
+ t loop
+ s,-$,,
+ s,^['$as_cr_digits']*\n,,
+ ' >$as_me.lineno &&
+ chmod +x $as_me.lineno ||
+ { 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 sensible to this).
+ . ./$as_me.lineno
+ # Exit status is that of the last command.
+ exit
+}
+
+
+case `echo "testing\c"; echo 1,2,3`,`echo -n testing; echo 1,2,3` in
+ *c*,-n*) ECHO_N= ECHO_C='
+' ECHO_T=' ' ;;
+ *c*,* ) ECHO_N=-n ECHO_C= ECHO_T= ;;
+ *) ECHO_N= ECHO_C='\c' ECHO_T= ;;
+esac
+
+if expr a : '\(a\)' >/dev/null 2>&1; then
+ as_expr=expr
+else
+ as_expr=false
+fi
+
+rm -f conf$$ conf$$.exe conf$$.file
+echo >conf$$.file
+if ln -s conf$$.file conf$$ 2>/dev/null; then
+ # We could just check for DJGPP; but this test a) works b) is more generic
+ # and c) will remain valid once DJGPP supports symlinks (DJGPP 2.04).
+ if test -f conf$$.exe; then
+ # Don't use ln at all; we don't have any links
+ as_ln_s='cp -p'
+ else
+ as_ln_s='ln -s'
+ fi
+elif ln conf$$.file conf$$ 2>/dev/null; then
+ as_ln_s=ln
+else
+ as_ln_s='cp -p'
+fi
+rm -f conf$$ conf$$.exe conf$$.file
+
+if mkdir -p . 2>/dev/null; then
+ as_mkdir_p=:
+else
+ test -d ./-p && rmdir ./-p
+ as_mkdir_p=false
+fi
+
+as_executable_p="test -f"
+
+# 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'"
+
+
+# IFS
+# We need space, tab and new line, in precisely that order.
+as_nl='
+'
+IFS=" $as_nl"
+
+# CDPATH.
+$as_unset CDPATH
+
+
+# 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`
+
+exec 6>&1
+
+#
+# Initializations.
+#
+ac_default_prefix=/usr/local
+ac_config_libobj_dir=.
+cross_compiling=no
+subdirs=
+MFLAGS=
+MAKEFLAGS=
+SHELL=${CONFIG_SHELL-/bin/sh}
+
+# Maximum number of lines to put in a shell here document.
+# This variable seems obsolete. It should probably be removed, and
+# only ac_max_sed_lines should be used.
+: ${ac_max_here_lines=38}
+
+# Identity of this package.
+PACKAGE_NAME='GNU Texinfo'
+PACKAGE_TARNAME='texinfo'
+PACKAGE_VERSION='4.8'
+PACKAGE_STRING='GNU Texinfo 4.8'
+PACKAGE_BUGREPORT=''
+
+ac_unique_file="makeinfo/makeinfo.c"
+# Factoring default headers for most tests.
+ac_includes_default="\
+#include <stdio.h>
+#if HAVE_SYS_TYPES_H
+# include <sys/types.h>
+#endif
+#if HAVE_SYS_STAT_H
+# include <sys/stat.h>
+#endif
+#if STDC_HEADERS
+# include <stdlib.h>
+# include <stddef.h>
+#else
+# if HAVE_STDLIB_H
+# include <stdlib.h>
+# endif
+#endif
+#if HAVE_STRING_H
+# if !STDC_HEADERS && HAVE_MEMORY_H
+# include <memory.h>
+# endif
+# include <string.h>
+#endif
+#if HAVE_STRINGS_H
+# include <strings.h>
+#endif
+#if HAVE_INTTYPES_H
+# include <inttypes.h>
+#else
+# if HAVE_STDINT_H
+# include <stdint.h>
+# endif
+#endif
+#if HAVE_UNISTD_H
+# include <unistd.h>
+#endif"
+
+gl_header_list=
+ac_subst_vars='SHELL PATH_SEPARATOR PACKAGE_NAME PACKAGE_TARNAME PACKAGE_VERSION PACKAGE_STRING PACKAGE_BUGREPORT exec_prefix prefix program_transform_name bindir sbindir libexecdir datadir sysconfdir sharedstatedir localstatedir libdir includedir oldincludedir infodir mandir build_alias host_alias target_alias DEFS ECHO_C ECHO_N ECHO_T LIBS INSTALL_PROGRAM INSTALL_SCRIPT INSTALL_DATA CYGPATH_W PACKAGE VERSION ACLOCAL AUTOCONF AUTOMAKE AUTOHEADER MAKEINFO install_sh STRIP ac_ct_STRIP INSTALL_STRIP_PROGRAM mkdir_p AWK SET_MAKE am__leading_dot AMTAR am__tar am__untar MAINTAINER_MODE_TRUE MAINTAINER_MODE_FALSE MAINT CC CFLAGS LDFLAGS CPPFLAGS ac_ct_CC EXEEXT OBJEXT DEPDIR am__include am__quote AMDEP_TRUE AMDEP_FALSE AMDEPBACKSLASH CCDEPMODE am__fastdepCC_TRUE am__fastdepCC_FALSE CPP EGREP RANLIB ac_ct_RANLIB HELP2MAN ALLOCA LIBOBJS build build_cpu build_vendor build_os native_tools TOOLS_ONLY_TRUE TOOLS_ONLY_FALSE TERMLIBS host host_cpu host_vendor host_os INSTALL_WARNINGS_TRUE INSTALL_WARNINGS_FALSE MKINSTALLDIRS USE_NLS MSGFMT GMSGFMT XGETTEXT MSGMERGE GLIBC21 HAVE_POSIX_PRINTF HAVE_ASPRINTF HAVE_SNPRINTF HAVE_WPRINTF LIBICONV LTLIBICONV INTLBISON BUILD_INCLUDED_LIBINTL USE_INCLUDED_LIBINTL CATOBJEXT DATADIRNAME INSTOBJEXT GENCAT INTLOBJS INTL_LIBTOOL_SUFFIX_PREFIX INTLLIBS LIBINTL LTLIBINTL POSUB LTLIBOBJS'
+ac_subst_files=''
+
+# Initialize some variables set by options.
+ac_init_help=
+ac_init_version=false
+# 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.
+bindir='${exec_prefix}/bin'
+sbindir='${exec_prefix}/sbin'
+libexecdir='${exec_prefix}/libexec'
+datadir='${prefix}/share'
+sysconfdir='${prefix}/etc'
+sharedstatedir='${prefix}/com'
+localstatedir='${prefix}/var'
+libdir='${exec_prefix}/lib'
+includedir='${prefix}/include'
+oldincludedir='/usr/include'
+infodir='${prefix}/info'
+mandir='${prefix}/man'
+
+ac_prev=
+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
+
+ ac_optarg=`expr "x$ac_option" : 'x[^=]*=\(.*\)'`
+
+ # Accept the important Cygnus configure options, so we can diagnose typos.
+
+ case $ac_option in
+
+ -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 | --data | --dat | --da)
+ ac_prev=datadir ;;
+ -datadir=* | --datadir=* | --datadi=* | --datad=* | --data=* | --dat=* \
+ | --da=*)
+ datadir=$ac_optarg ;;
+
+ -disable-* | --disable-*)
+ ac_feature=`expr "x$ac_option" : 'x-*disable-\(.*\)'`
+ # Reject names that are not valid shell variable names.
+ expr "x$ac_feature" : ".*[^-_$as_cr_alnum]" >/dev/null &&
+ { echo "$as_me: error: invalid feature name: $ac_feature" >&2
+ { (exit 1); exit 1; }; }
+ ac_feature=`echo $ac_feature | sed 's/-/_/g'`
+ eval "enable_$ac_feature=no" ;;
+
+ -enable-* | --enable-*)
+ ac_feature=`expr "x$ac_option" : 'x-*enable-\([^=]*\)'`
+ # Reject names that are not valid shell variable names.
+ expr "x$ac_feature" : ".*[^-_$as_cr_alnum]" >/dev/null &&
+ { echo "$as_me: error: invalid feature name: $ac_feature" >&2
+ { (exit 1); exit 1; }; }
+ ac_feature=`echo $ac_feature | sed 's/-/_/g'`
+ case $ac_option in
+ *=*) ac_optarg=`echo "$ac_optarg" | sed "s/'/'\\\\\\\\''/g"`;;
+ *) ac_optarg=yes ;;
+ esac
+ eval "enable_$ac_feature='$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 ;;
+
+ -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 ;;
+
+ -localstatedir | --localstatedir | --localstatedi | --localstated \
+ | --localstate | --localstat | --localsta | --localst \
+ | --locals | --local | --loca | --loc | --lo)
+ ac_prev=localstatedir ;;
+ -localstatedir=* | --localstatedir=* | --localstatedi=* | --localstated=* \
+ | --localstate=* | --localstat=* | --localsta=* | --localst=* \
+ | --locals=* | --local=* | --loca=* | --loc=* | --lo=*)
+ 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 ;;
+
+ -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_package=`expr "x$ac_option" : 'x-*with-\([^=]*\)'`
+ # Reject names that are not valid shell variable names.
+ expr "x$ac_package" : ".*[^-_$as_cr_alnum]" >/dev/null &&
+ { echo "$as_me: error: invalid package name: $ac_package" >&2
+ { (exit 1); exit 1; }; }
+ ac_package=`echo $ac_package| sed 's/-/_/g'`
+ case $ac_option in
+ *=*) ac_optarg=`echo "$ac_optarg" | sed "s/'/'\\\\\\\\''/g"`;;
+ *) ac_optarg=yes ;;
+ esac
+ eval "with_$ac_package='$ac_optarg'" ;;
+
+ -without-* | --without-*)
+ ac_package=`expr "x$ac_option" : 'x-*without-\(.*\)'`
+ # Reject names that are not valid shell variable names.
+ expr "x$ac_package" : ".*[^-_$as_cr_alnum]" >/dev/null &&
+ { echo "$as_me: error: invalid package name: $ac_package" >&2
+ { (exit 1); exit 1; }; }
+ ac_package=`echo $ac_package | sed 's/-/_/g'`
+ eval "with_$ac_package=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 ;;
+
+ -*) { 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 &&
+ { echo "$as_me: error: invalid variable name: $ac_envvar" >&2
+ { (exit 1); exit 1; }; }
+ ac_optarg=`echo "$ac_optarg" | sed "s/'/'\\\\\\\\''/g"`
+ eval "$ac_envvar='$ac_optarg'"
+ export $ac_envvar ;;
+
+ *)
+ # FIXME: should be removed in autoconf 3.0.
+ echo "$as_me: WARNING: you should use --build, --host, --target" >&2
+ expr "x$ac_option" : ".*[^-._$as_cr_alnum]" >/dev/null &&
+ 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'`
+ { echo "$as_me: error: missing argument to $ac_option" >&2
+ { (exit 1); exit 1; }; }
+fi
+
+# Be sure to have absolute paths.
+for ac_var in exec_prefix prefix
+do
+ eval ac_val=$`echo $ac_var`
+ case $ac_val in
+ [\\/$]* | ?:[\\/]* | NONE | '' ) ;;
+ *) { echo "$as_me: error: expected an absolute directory name for --$ac_var: $ac_val" >&2
+ { (exit 1); exit 1; }; };;
+ esac
+done
+
+# Be sure to have absolute paths.
+for ac_var in bindir sbindir libexecdir datadir sysconfdir sharedstatedir \
+ localstatedir libdir includedir oldincludedir infodir mandir
+do
+ eval ac_val=$`echo $ac_var`
+ case $ac_val in
+ [\\/$]* | ?:[\\/]* ) ;;
+ *) { echo "$as_me: error: expected an absolute directory name for --$ac_var: $ac_val" >&2
+ { (exit 1); exit 1; }; };;
+ esac
+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
+ 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
+
+
+# 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 its parent.
+ ac_confdir=`(dirname "$0") 2>/dev/null ||
+$as_expr X"$0" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \
+ X"$0" : 'X\(//\)[^/]' \| \
+ X"$0" : 'X\(//\)$' \| \
+ X"$0" : 'X\(/\)' \| \
+ . : '\(.\)' 2>/dev/null ||
+echo X"$0" |
+ 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
+ if test "$ac_srcdir_defaulted" = yes; then
+ { echo "$as_me: error: cannot find sources ($ac_unique_file) in $ac_confdir or .." >&2
+ { (exit 1); exit 1; }; }
+ else
+ { echo "$as_me: error: cannot find sources ($ac_unique_file) in $srcdir" >&2
+ { (exit 1); exit 1; }; }
+ fi
+fi
+(cd $srcdir && test -r ./$ac_unique_file) 2>/dev/null ||
+ { echo "$as_me: error: sources are in $srcdir, but \`cd $srcdir' does not work" >&2
+ { (exit 1); exit 1; }; }
+srcdir=`echo "$srcdir" | sed 's%\([^\\/]\)[\\/]*$%\1%'`
+ac_env_build_alias_set=${build_alias+set}
+ac_env_build_alias_value=$build_alias
+ac_cv_env_build_alias_set=${build_alias+set}
+ac_cv_env_build_alias_value=$build_alias
+ac_env_host_alias_set=${host_alias+set}
+ac_env_host_alias_value=$host_alias
+ac_cv_env_host_alias_set=${host_alias+set}
+ac_cv_env_host_alias_value=$host_alias
+ac_env_target_alias_set=${target_alias+set}
+ac_env_target_alias_value=$target_alias
+ac_cv_env_target_alias_set=${target_alias+set}
+ac_cv_env_target_alias_value=$target_alias
+ac_env_CC_set=${CC+set}
+ac_env_CC_value=$CC
+ac_cv_env_CC_set=${CC+set}
+ac_cv_env_CC_value=$CC
+ac_env_CFLAGS_set=${CFLAGS+set}
+ac_env_CFLAGS_value=$CFLAGS
+ac_cv_env_CFLAGS_set=${CFLAGS+set}
+ac_cv_env_CFLAGS_value=$CFLAGS
+ac_env_LDFLAGS_set=${LDFLAGS+set}
+ac_env_LDFLAGS_value=$LDFLAGS
+ac_cv_env_LDFLAGS_set=${LDFLAGS+set}
+ac_cv_env_LDFLAGS_value=$LDFLAGS
+ac_env_CPPFLAGS_set=${CPPFLAGS+set}
+ac_env_CPPFLAGS_value=$CPPFLAGS
+ac_cv_env_CPPFLAGS_set=${CPPFLAGS+set}
+ac_cv_env_CPPFLAGS_value=$CPPFLAGS
+ac_env_CPP_set=${CPP+set}
+ac_env_CPP_value=$CPP
+ac_cv_env_CPP_set=${CPP+set}
+ac_cv_env_CPP_value=$CPP
+
+#
+# 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.8 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 \`..']
+
+_ACEOF
+
+ cat <<_ACEOF
+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]
+ --datadir=DIR read-only architecture-independent data [PREFIX/share]
+ --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]
+ --infodir=DIR info documentation [PREFIX/info]
+ --mandir=DIR man documentation [PREFIX/man]
+_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.8:";;
+ esac
+ cat <<\_ACEOF
+
+Optional Features:
+ --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
+ --enable-multiplatform put executables in bin/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-included-gettext use the GNU gettext library included here
+ --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>
+ CPPFLAGS C/C++ preprocessor flags, e.g. -I<include dir> if you have
+ headers in a nonstandard directory <include dir>
+ CPP C preprocessor
+
+Use these variables to override the choices made by `configure' or to help
+it to find libraries and programs with nonstandard names/locations.
+
+_ACEOF
+fi
+
+if test "$ac_init_help" = "recursive"; then
+ # If there are subdirs, report their specific --help.
+ ac_popdir=`pwd`
+ for ac_dir in : $ac_subdirs_all; do test "x$ac_dir" = x: && continue
+ test -d $ac_dir || continue
+ ac_builddir=.
+
+if test "$ac_dir" != .; then
+ ac_dir_suffix=/`echo "$ac_dir" | sed 's,^\.[\\/],,'`
+ # A "../" for each directory in $ac_dir_suffix.
+ ac_top_builddir=`echo "$ac_dir_suffix" | sed 's,/[^\\/]*,../,g'`
+else
+ ac_dir_suffix= ac_top_builddir=
+fi
+
+case $srcdir in
+ .) # No --srcdir option. We are building in place.
+ ac_srcdir=.
+ if test -z "$ac_top_builddir"; then
+ ac_top_srcdir=.
+ else
+ ac_top_srcdir=`echo $ac_top_builddir | sed 's,/$,,'`
+ fi ;;
+ [\\/]* | ?:[\\/]* ) # Absolute path.
+ ac_srcdir=$srcdir$ac_dir_suffix;
+ ac_top_srcdir=$srcdir ;;
+ *) # Relative path.
+ ac_srcdir=$ac_top_builddir$srcdir$ac_dir_suffix
+ ac_top_srcdir=$ac_top_builddir$srcdir ;;
+esac
+
+# Do not use `cd foo && pwd` to compute absolute paths, because
+# the directories may not exist.
+case `pwd` in
+.) ac_abs_builddir="$ac_dir";;
+*)
+ case "$ac_dir" in
+ .) ac_abs_builddir=`pwd`;;
+ [\\/]* | ?:[\\/]* ) ac_abs_builddir="$ac_dir";;
+ *) ac_abs_builddir=`pwd`/"$ac_dir";;
+ esac;;
+esac
+case $ac_abs_builddir in
+.) ac_abs_top_builddir=${ac_top_builddir}.;;
+*)
+ case ${ac_top_builddir}. in
+ .) ac_abs_top_builddir=$ac_abs_builddir;;
+ [\\/]* | ?:[\\/]* ) ac_abs_top_builddir=${ac_top_builddir}.;;
+ *) ac_abs_top_builddir=$ac_abs_builddir/${ac_top_builddir}.;;
+ esac;;
+esac
+case $ac_abs_builddir in
+.) ac_abs_srcdir=$ac_srcdir;;
+*)
+ case $ac_srcdir in
+ .) ac_abs_srcdir=$ac_abs_builddir;;
+ [\\/]* | ?:[\\/]* ) ac_abs_srcdir=$ac_srcdir;;
+ *) ac_abs_srcdir=$ac_abs_builddir/$ac_srcdir;;
+ esac;;
+esac
+case $ac_abs_builddir in
+.) ac_abs_top_srcdir=$ac_top_srcdir;;
+*)
+ case $ac_top_srcdir in
+ .) ac_abs_top_srcdir=$ac_abs_builddir;;
+ [\\/]* | ?:[\\/]* ) ac_abs_top_srcdir=$ac_top_srcdir;;
+ *) ac_abs_top_srcdir=$ac_abs_builddir/$ac_top_srcdir;;
+ esac;;
+esac
+
+ cd $ac_dir
+ # Check for guested configure; otherwise get Cygnus style 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
+ elif test -f $ac_srcdir/configure.ac ||
+ test -f $ac_srcdir/configure.in; then
+ echo
+ $ac_configure --help
+ else
+ echo "$as_me: WARNING: no configuration information is in $ac_dir" >&2
+ fi
+ cd $ac_popdir
+ done
+fi
+
+test -n "$ac_init_help" && exit 0
+if $ac_init_version; then
+ cat <<\_ACEOF
+GNU Texinfo configure 4.8
+generated by GNU Autoconf 2.59
+
+Copyright (C) 2003 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 0
+fi
+exec 5>config.log
+cat >&5 <<_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.8, which was
+generated by GNU Autoconf 2.59. Invocation command line was
+
+ $ $0 $@
+
+_ACEOF
+{
+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`
+hostinfo = `(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=.
+ echo "PATH: $as_dir"
+done
+
+} >&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_sep=
+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=`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_sep'$ac_arg'"
+ # Get rid of the leading space.
+ ac_sep=" "
+ ;;
+ 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: Be sure not to use single quotes in there, as some shells,
+# such as our DU 5.0 friend, will then `close' the trap.
+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,
+{
+ (set) 2>&1 |
+ case `(ac_space='"'"' '"'"'; set | grep ac_space) 2>&1` in
+ *ac_space=\ *)
+ sed -n \
+ "s/'"'"'/'"'"'\\\\'"'"''"'"'/g;
+ s/^\\([_$as_cr_alnum]*_cv_[_$as_cr_alnum]*\\)=\\(.*\\)/\\1='"'"'\\2'"'"'/p"
+ ;;
+ *)
+ sed -n \
+ "s/^\\([_$as_cr_alnum]*_cv_[_$as_cr_alnum]*\\)=\\(.*\\)/\\1=\\2/p"
+ ;;
+ esac;
+}
+ echo
+
+ cat <<\_ASBOX
+## ----------------- ##
+## Output variables. ##
+## ----------------- ##
+_ASBOX
+ echo
+ for ac_var in $ac_subst_vars
+ do
+ eval ac_val=$`echo $ac_var`
+ echo "$ac_var='"'"'$ac_val'"'"'"
+ done | sort
+ echo
+
+ if test -n "$ac_subst_files"; then
+ cat <<\_ASBOX
+## ------------- ##
+## Output files. ##
+## ------------- ##
+_ASBOX
+ echo
+ for ac_var in $ac_subst_files
+ do
+ eval ac_val=$`echo $ac_var`
+ echo "$ac_var='"'"'$ac_val'"'"'"
+ done | sort
+ echo
+ fi
+
+ if test -s confdefs.h; then
+ cat <<\_ASBOX
+## ----------- ##
+## confdefs.h. ##
+## ----------- ##
+_ASBOX
+ echo
+ sed "/^$/d" confdefs.h | sort
+ echo
+ fi
+ test "$ac_signal" != 0 &&
+ echo "$as_me: caught signal $ac_signal"
+ echo "$as_me: exit $exit_status"
+ } >&5
+ rm -f core *.core &&
+ rm -rf 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 -rf conftest* confdefs.h
+# AIX cpp loses on an empty file, so make sure it contains at least a newline.
+echo >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 explicitly selected file to automatically selected ones.
+if test -z "$CONFIG_SITE"; then
+ if test "x$prefix" != xNONE; then
+ CONFIG_SITE="$prefix/share/config.site $prefix/etc/config.site"
+ else
+ CONFIG_SITE="$ac_default_prefix/share/config.site $ac_default_prefix/etc/config.site"
+ fi
+fi
+for ac_site_file in $CONFIG_SITE; do
+ if test -r "$ac_site_file"; then
+ { echo "$as_me:$LINENO: loading site script $ac_site_file" >&5
+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
+ { echo "$as_me:$LINENO: loading cache $cache_file" >&5
+echo "$as_me: loading cache $cache_file" >&6;}
+ case $cache_file in
+ [\\/]* | ?:[\\/]* ) . $cache_file;;
+ *) . ./$cache_file;;
+ esac
+ fi
+else
+ { echo "$as_me:$LINENO: creating cache $cache_file" >&5
+echo "$as_me: creating cache $cache_file" >&6;}
+ >$cache_file
+fi
+
+# Check that the precious variables saved in the cache have kept the same
+# value.
+ac_cache_corrupted=false
+for ac_var in `(set) 2>&1 |
+ sed -n 's/^ac_env_\([a-zA-Z_0-9]*\)_set=.*/\1/p'`; 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,)
+ { echo "$as_me:$LINENO: error: \`$ac_var' was set to \`$ac_old_val' in the previous run" >&5
+echo "$as_me: error: \`$ac_var' was set to \`$ac_old_val' in the previous run" >&2;}
+ ac_cache_corrupted=: ;;
+ ,set)
+ { echo "$as_me:$LINENO: error: \`$ac_var' was not set in the previous run" >&5
+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
+ { echo "$as_me:$LINENO: error: \`$ac_var' has changed since the previous run:" >&5
+echo "$as_me: error: \`$ac_var' has changed since the previous run:" >&2;}
+ { echo "$as_me:$LINENO: former value: $ac_old_val" >&5
+echo "$as_me: former value: $ac_old_val" >&2;}
+ { echo "$as_me:$LINENO: current value: $ac_new_val" >&5
+echo "$as_me: current value: $ac_new_val" >&2;}
+ ac_cache_corrupted=:
+ fi;;
+ esac
+ # Pass precious variables to config.status.
+ if test "$ac_new_set" = set; then
+ case $ac_new_val in
+ *" "*|*" "*|*[\[\]\~\#\$\^\&\*\(\)\{\}\\\|\;\<\>\?\"\']*)
+ ac_arg=$ac_var=`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
+ { echo "$as_me:$LINENO: error: changes in the environment can compromise the build" >&5
+echo "$as_me: error: changes in the environment can compromise the build" >&2;}
+ { { echo "$as_me:$LINENO: error: run \`make distclean' and/or \`rm $cache_file' and start over" >&5
+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
+
+
+gl_header_list="$gl_header_list fcntl.h"
+gl_header_list="$gl_header_list sys/time.h"
+gl_header_list="$gl_header_list unistd.h"
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ ac_config_headers="$ac_config_headers config.h:config.in"
+# Keep filename to 8.3 for MS-DOS.
+
+am__api_version="1.9"
+ac_aux_dir=
+for ac_dir in $srcdir $srcdir/.. $srcdir/../..; do
+ if test -f $ac_dir/install-sh; then
+ ac_aux_dir=$ac_dir
+ ac_install_sh="$ac_aux_dir/install-sh -c"
+ break
+ elif test -f $ac_dir/install.sh; then
+ ac_aux_dir=$ac_dir
+ ac_install_sh="$ac_aux_dir/install.sh -c"
+ break
+ elif test -f $ac_dir/shtool; then
+ ac_aux_dir=$ac_dir
+ ac_install_sh="$ac_aux_dir/shtool install -c"
+ break
+ fi
+done
+if test -z "$ac_aux_dir"; then
+ { { echo "$as_me:$LINENO: error: cannot find install-sh or install.sh in $srcdir $srcdir/.. $srcdir/../.." >&5
+echo "$as_me: error: cannot find install-sh or install.sh in $srcdir $srcdir/.. $srcdir/../.." >&2;}
+ { (exit 1); exit 1; }; }
+fi
+ac_config_guess="$SHELL $ac_aux_dir/config.guess"
+ac_config_sub="$SHELL $ac_aux_dir/config.sub"
+ac_configure="$SHELL $ac_aux_dir/configure" # This should be Cygnus configure.
+
+# 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.
+echo "$as_me:$LINENO: checking for a BSD-compatible install" >&5
+echo $ECHO_N "checking for a BSD-compatible install... $ECHO_C" >&6
+if test -z "$INSTALL"; then
+if test "${ac_cv_path_install+set}" = set; then
+ echo $ECHO_N "(cached) $ECHO_C" >&6
+else
+ as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
+for as_dir in $PATH
+do
+ IFS=$as_save_IFS
+ test -z "$as_dir" && as_dir=.
+ # Account for people who put trailing slashes in PATH elements.
+case $as_dir/ in
+ ./ | .// | /cC/* | \
+ /etc/* | /usr/sbin/* | /usr/etc/* | /sbin/* | /usr/afsws/bin/* | \
+ ?:\\/os2\\/install\\/* | ?:\\/OS2\\/INSTALL\\/* | \
+ /usr/ucb/* ) ;;
+ *)
+ # OSF1 and SCO ODT 3.0 have their own names for install.
+ # Don't use installbsd from OSF since it installs stuff as root
+ # by default.
+ for ac_prog in ginstall scoinst install; do
+ for ac_exec_ext in '' $ac_executable_extensions; do
+ if $as_executable_p "$as_dir/$ac_prog$ac_exec_ext"; then
+ if test $ac_prog = install &&
+ grep dspmsg "$as_dir/$ac_prog$ac_exec_ext" >/dev/null 2>&1; then
+ # AIX install. It has an incompatible calling convention.
+ :
+ elif test $ac_prog = install &&
+ grep pwplus "$as_dir/$ac_prog$ac_exec_ext" >/dev/null 2>&1; then
+ # program-specific install script used by HP pwplus--don't use.
+ :
+ else
+ ac_cv_path_install="$as_dir/$ac_prog$ac_exec_ext -c"
+ break 3
+ fi
+ fi
+ done
+ done
+ ;;
+esac
+done
+
+
+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. We don't cache a
+ # path for INSTALL within a source directory, because that will
+ # break other packages using the cache if that directory is
+ # removed, or if the path is relative.
+ INSTALL=$ac_install_sh
+ fi
+fi
+echo "$as_me:$LINENO: result: $INSTALL" >&5
+echo "${ECHO_T}$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'
+
+echo "$as_me:$LINENO: checking whether build environment is sane" >&5
+echo $ECHO_N "checking whether build environment is sane... $ECHO_C" >&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".
+ { { echo "$as_me:$LINENO: error: ls -t appears to fail. Make sure there is not a broken
+alias in your environment" >&5
+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
+ { { echo "$as_me:$LINENO: error: newly created file is older than distributed files!
+Check your system clock" >&5
+echo "$as_me: error: newly created file is older than distributed files!
+Check your system clock" >&2;}
+ { (exit 1); exit 1; }; }
+fi
+echo "$as_me:$LINENO: result: yes" >&5
+echo "${ECHO_T}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 $. echo might interpret backslashes.
+# By default was `s,x,x', remove it if useless.
+cat <<\_ACEOF >conftest.sed
+s/[\\$]/&&/g;s/;s,x,x,$//
+_ACEOF
+program_transform_name=`echo $program_transform_name | sed -f conftest.sed`
+rm conftest.sed
+
+# 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=
+ { echo "$as_me:$LINENO: WARNING: \`missing' script is too old or missing" >&5
+echo "$as_me: WARNING: \`missing' script is too old or missing" >&2;}
+fi
+
+if mkdir -p --version . >/dev/null 2>&1 && test ! -d ./--version; then
+ # We used to keeping the `.' as first argument, in order to
+ # allow $(mkdir_p) to be used without argument. As in
+ # $(mkdir_p) $(somedir)
+ # where $(somedir) is conditionally defined. However this is wrong
+ # for two reasons:
+ # 1. if the package is installed by a user who cannot write `.'
+ # make install will fail,
+ # 2. the above comment should most certainly read
+ # $(mkdir_p) $(DESTDIR)$(somedir)
+ # so it does not work when $(somedir) is undefined and
+ # $(DESTDIR) is not.
+ # To support the latter case, we have to write
+ # test -z "$(somedir)" || $(mkdir_p) $(DESTDIR)$(somedir),
+ # so the `.' trick is pointless.
+ mkdir_p='mkdir -p --'
+else
+ # On NextStep and OpenStep, the `mkdir' command does not
+ # recognize any option. It will interpret all options as
+ # directories to create, and then abort because `.' already
+ # exists.
+ for d in ./-p ./--version;
+ do
+ test -d $d && rmdir $d
+ done
+ # $(mkinstalldirs) is defined by Automake if mkinstalldirs exists.
+ if test -f "$ac_aux_dir/mkinstalldirs"; then
+ mkdir_p='$(mkinstalldirs)'
+ else
+ mkdir_p='$(install_sh) -d'
+ fi
+fi
+
+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
+echo "$as_me:$LINENO: checking for $ac_word" >&5
+echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6
+if test "${ac_cv_prog_AWK+set}" = set; then
+ echo $ECHO_N "(cached) $ECHO_C" >&6
+else
+ if test -n "$AWK"; then
+ ac_cv_prog_AWK="$AWK" # Let the user override the test.
+else
+as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
+for as_dir in $PATH
+do
+ IFS=$as_save_IFS
+ test -z "$as_dir" && as_dir=.
+ for ac_exec_ext in '' $ac_executable_extensions; do
+ if $as_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
+ ac_cv_prog_AWK="$ac_prog"
+ echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5
+ break 2
+ fi
+done
+done
+
+fi
+fi
+AWK=$ac_cv_prog_AWK
+if test -n "$AWK"; then
+ echo "$as_me:$LINENO: result: $AWK" >&5
+echo "${ECHO_T}$AWK" >&6
+else
+ echo "$as_me:$LINENO: result: no" >&5
+echo "${ECHO_T}no" >&6
+fi
+
+ test -n "$AWK" && break
+done
+
+echo "$as_me:$LINENO: checking whether ${MAKE-make} sets \$(MAKE)" >&5
+echo $ECHO_N "checking whether ${MAKE-make} sets \$(MAKE)... $ECHO_C" >&6
+set dummy ${MAKE-make}; ac_make=`echo "$2" | sed 'y,:./+-,___p_,'`
+if eval "test \"\${ac_cv_prog_make_${ac_make}_set+set}\" = set"; then
+ echo $ECHO_N "(cached) $ECHO_C" >&6
+else
+ cat >conftest.make <<\_ACEOF
+all:
+ @echo 'ac_maketemp="$(MAKE)"'
+_ACEOF
+# GNU make sometimes prints "make[1]: Entering...", which would confuse us.
+eval `${MAKE-make} -f conftest.make 2>/dev/null | grep temp=`
+if test -n "$ac_maketemp"; then
+ eval ac_cv_prog_make_${ac_make}_set=yes
+else
+ eval ac_cv_prog_make_${ac_make}_set=no
+fi
+rm -f conftest.make
+fi
+if eval "test \"`echo '$ac_cv_prog_make_'${ac_make}_set`\" = yes"; then
+ echo "$as_me:$LINENO: result: yes" >&5
+echo "${ECHO_T}yes" >&6
+ SET_MAKE=
+else
+ echo "$as_me:$LINENO: result: no" >&5
+echo "${ECHO_T}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
+
+# test to see if srcdir already configured
+if test "`cd $srcdir && pwd`" != "`pwd`" &&
+ test -f $srcdir/config.status; then
+ { { echo "$as_me:$LINENO: error: source directory already configured; run \"make distclean\" there first" >&5
+echo "$as_me: error: source directory already configured; run \"make distclean\" there first" >&2;}
+ { (exit 1); exit 1; }; }
+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.8'
+
+
+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-"$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
+echo "$as_me:$LINENO: checking for $ac_word" >&5
+echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6
+if test "${ac_cv_prog_STRIP+set}" = set; then
+ echo $ECHO_N "(cached) $ECHO_C" >&6
+else
+ if test -n "$STRIP"; then
+ ac_cv_prog_STRIP="$STRIP" # Let the user override the test.
+else
+as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
+for as_dir in $PATH
+do
+ IFS=$as_save_IFS
+ test -z "$as_dir" && as_dir=.
+ for ac_exec_ext in '' $ac_executable_extensions; do
+ if $as_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
+ ac_cv_prog_STRIP="${ac_tool_prefix}strip"
+ echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5
+ break 2
+ fi
+done
+done
+
+fi
+fi
+STRIP=$ac_cv_prog_STRIP
+if test -n "$STRIP"; then
+ echo "$as_me:$LINENO: result: $STRIP" >&5
+echo "${ECHO_T}$STRIP" >&6
+else
+ echo "$as_me:$LINENO: result: no" >&5
+echo "${ECHO_T}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
+echo "$as_me:$LINENO: checking for $ac_word" >&5
+echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6
+if test "${ac_cv_prog_ac_ct_STRIP+set}" = set; then
+ echo $ECHO_N "(cached) $ECHO_C" >&6
+else
+ if test -n "$ac_ct_STRIP"; then
+ ac_cv_prog_ac_ct_STRIP="$ac_ct_STRIP" # Let the user override the test.
+else
+as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
+for as_dir in $PATH
+do
+ IFS=$as_save_IFS
+ test -z "$as_dir" && as_dir=.
+ for ac_exec_ext in '' $ac_executable_extensions; do
+ if $as_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
+ ac_cv_prog_ac_ct_STRIP="strip"
+ echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5
+ break 2
+ fi
+done
+done
+
+ test -z "$ac_cv_prog_ac_ct_STRIP" && ac_cv_prog_ac_ct_STRIP=":"
+fi
+fi
+ac_ct_STRIP=$ac_cv_prog_ac_ct_STRIP
+if test -n "$ac_ct_STRIP"; then
+ echo "$as_me:$LINENO: result: $ac_ct_STRIP" >&5
+echo "${ECHO_T}$ac_ct_STRIP" >&6
+else
+ echo "$as_me:$LINENO: result: no" >&5
+echo "${ECHO_T}no" >&6
+fi
+
+ STRIP=$ac_ct_STRIP
+else
+ STRIP="$ac_cv_prog_STRIP"
+fi
+
+fi
+INSTALL_STRIP_PROGRAM="\${SHELL} \$(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 -'
+
+
+
+
+
+
+# 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.
+echo "$as_me:$LINENO: checking whether to enable maintainer-specific portions of Makefiles" >&5
+echo $ECHO_N "checking whether to enable maintainer-specific portions of Makefiles... $ECHO_C" >&6
+ # Check whether --enable-maintainer-mode or --disable-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;
+ echo "$as_me:$LINENO: result: $USE_MAINTAINER_MODE" >&5
+echo "${ECHO_T}$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
+echo "$as_me:$LINENO: checking for $ac_word" >&5
+echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6
+if test "${ac_cv_prog_CC+set}" = set; then
+ echo $ECHO_N "(cached) $ECHO_C" >&6
+else
+ if test -n "$CC"; then
+ ac_cv_prog_CC="$CC" # Let the user override the test.
+else
+as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
+for as_dir in $PATH
+do
+ IFS=$as_save_IFS
+ test -z "$as_dir" && as_dir=.
+ for ac_exec_ext in '' $ac_executable_extensions; do
+ if $as_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
+ ac_cv_prog_CC="${ac_tool_prefix}gcc"
+ echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5
+ break 2
+ fi
+done
+done
+
+fi
+fi
+CC=$ac_cv_prog_CC
+if test -n "$CC"; then
+ echo "$as_me:$LINENO: result: $CC" >&5
+echo "${ECHO_T}$CC" >&6
+else
+ echo "$as_me:$LINENO: result: no" >&5
+echo "${ECHO_T}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
+echo "$as_me:$LINENO: checking for $ac_word" >&5
+echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6
+if test "${ac_cv_prog_ac_ct_CC+set}" = set; then
+ echo $ECHO_N "(cached) $ECHO_C" >&6
+else
+ if test -n "$ac_ct_CC"; then
+ ac_cv_prog_ac_ct_CC="$ac_ct_CC" # Let the user override the test.
+else
+as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
+for as_dir in $PATH
+do
+ IFS=$as_save_IFS
+ test -z "$as_dir" && as_dir=.
+ for ac_exec_ext in '' $ac_executable_extensions; do
+ if $as_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
+ ac_cv_prog_ac_ct_CC="gcc"
+ echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5
+ break 2
+ fi
+done
+done
+
+fi
+fi
+ac_ct_CC=$ac_cv_prog_ac_ct_CC
+if test -n "$ac_ct_CC"; then
+ echo "$as_me:$LINENO: result: $ac_ct_CC" >&5
+echo "${ECHO_T}$ac_ct_CC" >&6
+else
+ echo "$as_me:$LINENO: result: no" >&5
+echo "${ECHO_T}no" >&6
+fi
+
+ CC=$ac_ct_CC
+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
+echo "$as_me:$LINENO: checking for $ac_word" >&5
+echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6
+if test "${ac_cv_prog_CC+set}" = set; then
+ echo $ECHO_N "(cached) $ECHO_C" >&6
+else
+ if test -n "$CC"; then
+ ac_cv_prog_CC="$CC" # Let the user override the test.
+else
+as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
+for as_dir in $PATH
+do
+ IFS=$as_save_IFS
+ test -z "$as_dir" && as_dir=.
+ for ac_exec_ext in '' $ac_executable_extensions; do
+ if $as_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
+ ac_cv_prog_CC="${ac_tool_prefix}cc"
+ echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5
+ break 2
+ fi
+done
+done
+
+fi
+fi
+CC=$ac_cv_prog_CC
+if test -n "$CC"; then
+ echo "$as_me:$LINENO: result: $CC" >&5
+echo "${ECHO_T}$CC" >&6
+else
+ echo "$as_me:$LINENO: result: no" >&5
+echo "${ECHO_T}no" >&6
+fi
+
+fi
+if test -z "$ac_cv_prog_CC"; then
+ ac_ct_CC=$CC
+ # Extract the first word of "cc", so it can be a program name with args.
+set dummy cc; ac_word=$2
+echo "$as_me:$LINENO: checking for $ac_word" >&5
+echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6
+if test "${ac_cv_prog_ac_ct_CC+set}" = set; then
+ echo $ECHO_N "(cached) $ECHO_C" >&6
+else
+ if test -n "$ac_ct_CC"; then
+ ac_cv_prog_ac_ct_CC="$ac_ct_CC" # Let the user override the test.
+else
+as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
+for as_dir in $PATH
+do
+ IFS=$as_save_IFS
+ test -z "$as_dir" && as_dir=.
+ for ac_exec_ext in '' $ac_executable_extensions; do
+ if $as_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
+ ac_cv_prog_ac_ct_CC="cc"
+ echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5
+ break 2
+ fi
+done
+done
+
+fi
+fi
+ac_ct_CC=$ac_cv_prog_ac_ct_CC
+if test -n "$ac_ct_CC"; then
+ echo "$as_me:$LINENO: result: $ac_ct_CC" >&5
+echo "${ECHO_T}$ac_ct_CC" >&6
+else
+ echo "$as_me:$LINENO: result: no" >&5
+echo "${ECHO_T}no" >&6
+fi
+
+ CC=$ac_ct_CC
+else
+ CC="$ac_cv_prog_CC"
+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
+echo "$as_me:$LINENO: checking for $ac_word" >&5
+echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6
+if test "${ac_cv_prog_CC+set}" = set; then
+ echo $ECHO_N "(cached) $ECHO_C" >&6
+else
+ if test -n "$CC"; then
+ ac_cv_prog_CC="$CC" # Let the user override the test.
+else
+ ac_prog_rejected=no
+as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
+for as_dir in $PATH
+do
+ IFS=$as_save_IFS
+ test -z "$as_dir" && as_dir=.
+ for ac_exec_ext in '' $ac_executable_extensions; do
+ if $as_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
+ if test "$as_dir/$ac_word$ac_exec_ext" = "/usr/ucb/cc"; then
+ ac_prog_rejected=yes
+ continue
+ fi
+ ac_cv_prog_CC="cc"
+ echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5
+ break 2
+ fi
+done
+done
+
+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
+ echo "$as_me:$LINENO: result: $CC" >&5
+echo "${ECHO_T}$CC" >&6
+else
+ echo "$as_me:$LINENO: result: no" >&5
+echo "${ECHO_T}no" >&6
+fi
+
+fi
+if test -z "$CC"; then
+ if test -n "$ac_tool_prefix"; then
+ for ac_prog in cl
+ 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
+echo "$as_me:$LINENO: checking for $ac_word" >&5
+echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6
+if test "${ac_cv_prog_CC+set}" = set; then
+ echo $ECHO_N "(cached) $ECHO_C" >&6
+else
+ if test -n "$CC"; then
+ ac_cv_prog_CC="$CC" # Let the user override the test.
+else
+as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
+for as_dir in $PATH
+do
+ IFS=$as_save_IFS
+ test -z "$as_dir" && as_dir=.
+ for ac_exec_ext in '' $ac_executable_extensions; do
+ if $as_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
+ ac_cv_prog_CC="$ac_tool_prefix$ac_prog"
+ echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5
+ break 2
+ fi
+done
+done
+
+fi
+fi
+CC=$ac_cv_prog_CC
+if test -n "$CC"; then
+ echo "$as_me:$LINENO: result: $CC" >&5
+echo "${ECHO_T}$CC" >&6
+else
+ echo "$as_me:$LINENO: result: no" >&5
+echo "${ECHO_T}no" >&6
+fi
+
+ test -n "$CC" && break
+ done
+fi
+if test -z "$CC"; then
+ ac_ct_CC=$CC
+ for ac_prog in cl
+do
+ # Extract the first word of "$ac_prog", so it can be a program name with args.
+set dummy $ac_prog; ac_word=$2
+echo "$as_me:$LINENO: checking for $ac_word" >&5
+echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6
+if test "${ac_cv_prog_ac_ct_CC+set}" = set; then
+ echo $ECHO_N "(cached) $ECHO_C" >&6
+else
+ if test -n "$ac_ct_CC"; then
+ ac_cv_prog_ac_ct_CC="$ac_ct_CC" # Let the user override the test.
+else
+as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
+for as_dir in $PATH
+do
+ IFS=$as_save_IFS
+ test -z "$as_dir" && as_dir=.
+ for ac_exec_ext in '' $ac_executable_extensions; do
+ if $as_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
+ ac_cv_prog_ac_ct_CC="$ac_prog"
+ echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5
+ break 2
+ fi
+done
+done
+
+fi
+fi
+ac_ct_CC=$ac_cv_prog_ac_ct_CC
+if test -n "$ac_ct_CC"; then
+ echo "$as_me:$LINENO: result: $ac_ct_CC" >&5
+echo "${ECHO_T}$ac_ct_CC" >&6
+else
+ echo "$as_me:$LINENO: result: no" >&5
+echo "${ECHO_T}no" >&6
+fi
+
+ test -n "$ac_ct_CC" && break
+done
+
+ CC=$ac_ct_CC
+fi
+
+fi
+
+
+test -z "$CC" && { { echo "$as_me:$LINENO: error: no acceptable C compiler found in \$PATH
+See \`config.log' for more details." >&5
+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.
+echo "$as_me:$LINENO:" \
+ "checking for C compiler version" >&5
+ac_compiler=`set X $ac_compile; echo $2`
+{ (eval echo "$as_me:$LINENO: \"$ac_compiler --version </dev/null >&5\"") >&5
+ (eval $ac_compiler --version </dev/null >&5) 2>&5
+ ac_status=$?
+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
+ (exit $ac_status); }
+{ (eval echo "$as_me:$LINENO: \"$ac_compiler -v </dev/null >&5\"") >&5
+ (eval $ac_compiler -v </dev/null >&5) 2>&5
+ ac_status=$?
+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
+ (exit $ac_status); }
+{ (eval echo "$as_me:$LINENO: \"$ac_compiler -V </dev/null >&5\"") >&5
+ (eval $ac_compiler -V </dev/null >&5) 2>&5
+ ac_status=$?
+ 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.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.
+echo "$as_me:$LINENO: checking for C compiler default output file name" >&5
+echo $ECHO_N "checking for C compiler default output file name... $ECHO_C" >&6
+ac_link_default=`echo "$ac_link" | sed 's/ -o *conftest[^ ]*//'`
+if { (eval echo "$as_me:$LINENO: \"$ac_link_default\"") >&5
+ (eval $ac_link_default) 2>&5
+ ac_status=$?
+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
+ (exit $ac_status); }; then
+ # Find the output, starting from the most likely. This scheme is
+# not robust to junk in `.', hence go to wildcards (a.*) only as a last
+# resort.
+
+# Be careful to initialize this variable, since it used to be cached.
+# Otherwise an old cache value of `no' led to `EXEEXT = no' in a Makefile.
+ac_cv_exeext=
+# b.out is created by i960 compilers.
+for ac_file in a_out.exe a.exe conftest.exe a.out conftest a.* conftest.* b.out
+do
+ test -f "$ac_file" || continue
+ case $ac_file in
+ *.$ac_ext | *.xcoff | *.tds | *.d | *.pdb | *.xSYM | *.bb | *.bbg | *.o | *.obj )
+ ;;
+ conftest.$ac_ext )
+ # This is the source file.
+ ;;
+ [ab].out )
+ # We found the default executable, but exeext='' is most
+ # certainly right.
+ break;;
+ *.* )
+ ac_cv_exeext=`expr "$ac_file" : '[^.]*\(\..*\)'`
+ # FIXME: I believe we export ac_cv_exeext for Libtool,
+ # but it would be cool to find out if it's true. Does anybody
+ # maintain Libtool? --akim.
+ export ac_cv_exeext
+ break;;
+ * )
+ break;;
+ esac
+done
+else
+ echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+{ { echo "$as_me:$LINENO: error: C compiler cannot create executables
+See \`config.log' for more details." >&5
+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
+echo "$as_me:$LINENO: result: $ac_file" >&5
+echo "${ECHO_T}$ac_file" >&6
+
+# Check the compiler produces executables we can run. If not, either
+# the compiler is broken, or we cross compile.
+echo "$as_me:$LINENO: checking whether the C compiler works" >&5
+echo $ECHO_N "checking whether the C compiler works... $ECHO_C" >&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'
+ { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+ (eval $ac_try) 2>&5
+ ac_status=$?
+ 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
+ { { 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
+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
+echo "$as_me:$LINENO: result: yes" >&5
+echo "${ECHO_T}yes" >&6
+
+rm -f a.out a.exe conftest$ac_cv_exeext b.out
+ac_clean_files=$ac_clean_files_save
+# Check the compiler produces executables we can run. If not, either
+# the compiler is broken, or we cross compile.
+echo "$as_me:$LINENO: checking whether we are cross compiling" >&5
+echo $ECHO_N "checking whether we are cross compiling... $ECHO_C" >&6
+echo "$as_me:$LINENO: result: $cross_compiling" >&5
+echo "${ECHO_T}$cross_compiling" >&6
+
+echo "$as_me:$LINENO: checking for suffix of executables" >&5
+echo $ECHO_N "checking for suffix of executables... $ECHO_C" >&6
+if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5
+ (eval $ac_link) 2>&5
+ ac_status=$?
+ 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 | *.o | *.obj ) ;;
+ *.* ) ac_cv_exeext=`expr "$ac_file" : '[^.]*\(\..*\)'`
+ export ac_cv_exeext
+ break;;
+ * ) break;;
+ esac
+done
+else
+ { { echo "$as_me:$LINENO: error: cannot compute suffix of executables: cannot compile and link
+See \`config.log' for more details." >&5
+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
+echo "$as_me:$LINENO: result: $ac_cv_exeext" >&5
+echo "${ECHO_T}$ac_cv_exeext" >&6
+
+rm -f conftest.$ac_ext
+EXEEXT=$ac_cv_exeext
+ac_exeext=$EXEEXT
+echo "$as_me:$LINENO: checking for suffix of object files" >&5
+echo $ECHO_N "checking for suffix of object files... $ECHO_C" >&6
+if test "${ac_cv_objext+set}" = set; then
+ echo $ECHO_N "(cached) $ECHO_C" >&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 { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5
+ (eval $ac_compile) 2>&5
+ ac_status=$?
+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
+ (exit $ac_status); }; then
+ for ac_file in `(ls conftest.o conftest.obj; ls conftest.*) 2>/dev/null`; do
+ case $ac_file in
+ *.$ac_ext | *.xcoff | *.tds | *.d | *.pdb | *.xSYM | *.bb | *.bbg ) ;;
+ *) ac_cv_objext=`expr "$ac_file" : '.*\.\(.*\)'`
+ break;;
+ esac
+done
+else
+ echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+{ { echo "$as_me:$LINENO: error: cannot compute suffix of object files: cannot compile
+See \`config.log' for more details." >&5
+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
+echo "$as_me:$LINENO: result: $ac_cv_objext" >&5
+echo "${ECHO_T}$ac_cv_objext" >&6
+OBJEXT=$ac_cv_objext
+ac_objext=$OBJEXT
+echo "$as_me:$LINENO: checking whether we are using the GNU C compiler" >&5
+echo $ECHO_N "checking whether we are using the GNU C compiler... $ECHO_C" >&6
+if test "${ac_cv_c_compiler_gnu+set}" = set; then
+ echo $ECHO_N "(cached) $ECHO_C" >&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 { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5
+ (eval $ac_compile) 2>conftest.er1
+ ac_status=$?
+ grep -v '^ *+' conftest.er1 >conftest.err
+ rm -f conftest.er1
+ cat conftest.err >&5
+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
+ (exit $ac_status); } &&
+ { ac_try='test -z "$ac_c_werror_flag"
+ || test ! -s conftest.err'
+ { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+ (eval $ac_try) 2>&5
+ ac_status=$?
+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
+ (exit $ac_status); }; } &&
+ { ac_try='test -s conftest.$ac_objext'
+ { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+ (eval $ac_try) 2>&5
+ ac_status=$?
+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
+ (exit $ac_status); }; }; then
+ ac_compiler_gnu=yes
+else
+ echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+ac_compiler_gnu=no
+fi
+rm -f conftest.err conftest.$ac_objext conftest.$ac_ext
+ac_cv_c_compiler_gnu=$ac_compiler_gnu
+
+fi
+echo "$as_me:$LINENO: result: $ac_cv_c_compiler_gnu" >&5
+echo "${ECHO_T}$ac_cv_c_compiler_gnu" >&6
+GCC=`test $ac_compiler_gnu = yes && echo yes`
+ac_test_CFLAGS=${CFLAGS+set}
+ac_save_CFLAGS=$CFLAGS
+CFLAGS="-g"
+echo "$as_me:$LINENO: checking whether $CC accepts -g" >&5
+echo $ECHO_N "checking whether $CC accepts -g... $ECHO_C" >&6
+if test "${ac_cv_prog_cc_g+set}" = set; then
+ echo $ECHO_N "(cached) $ECHO_C" >&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.$ac_objext
+if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5
+ (eval $ac_compile) 2>conftest.er1
+ ac_status=$?
+ grep -v '^ *+' conftest.er1 >conftest.err
+ rm -f conftest.er1
+ cat conftest.err >&5
+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
+ (exit $ac_status); } &&
+ { ac_try='test -z "$ac_c_werror_flag"
+ || test ! -s conftest.err'
+ { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+ (eval $ac_try) 2>&5
+ ac_status=$?
+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
+ (exit $ac_status); }; } &&
+ { ac_try='test -s conftest.$ac_objext'
+ { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+ (eval $ac_try) 2>&5
+ ac_status=$?
+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
+ (exit $ac_status); }; }; then
+ ac_cv_prog_cc_g=yes
+else
+ echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+ac_cv_prog_cc_g=no
+fi
+rm -f conftest.err conftest.$ac_objext conftest.$ac_ext
+fi
+echo "$as_me:$LINENO: result: $ac_cv_prog_cc_g" >&5
+echo "${ECHO_T}$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
+echo "$as_me:$LINENO: checking for $CC option to accept ANSI C" >&5
+echo $ECHO_N "checking for $CC option to accept ANSI C... $ECHO_C" >&6
+if test "${ac_cv_prog_cc_stdc+set}" = set; then
+ echo $ECHO_N "(cached) $ECHO_C" >&6
+else
+ ac_cv_prog_cc_stdc=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 -std1 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 -std1. */
+int osf4_cc_array ['\x00' == 0 ? 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
+# Don't try gcc -ansi; that turns off useful extensions and
+# breaks some systems' header files.
+# AIX -qlanglvl=ansi
+# Ultrix and OSF/1 -std1
+# HP-UX 10.20 and later -Ae
+# HP-UX older versions -Aa -D_HPUX_SOURCE
+# SVR4 -Xc -D__EXTENSIONS__
+for ac_arg in "" -qlanglvl=ansi -std1 -Ae "-Aa -D_HPUX_SOURCE" "-Xc -D__EXTENSIONS__"
+do
+ CC="$ac_save_CC $ac_arg"
+ rm -f conftest.$ac_objext
+if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5
+ (eval $ac_compile) 2>conftest.er1
+ ac_status=$?
+ grep -v '^ *+' conftest.er1 >conftest.err
+ rm -f conftest.er1
+ cat conftest.err >&5
+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
+ (exit $ac_status); } &&
+ { ac_try='test -z "$ac_c_werror_flag"
+ || test ! -s conftest.err'
+ { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+ (eval $ac_try) 2>&5
+ ac_status=$?
+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
+ (exit $ac_status); }; } &&
+ { ac_try='test -s conftest.$ac_objext'
+ { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+ (eval $ac_try) 2>&5
+ ac_status=$?
+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
+ (exit $ac_status); }; }; then
+ ac_cv_prog_cc_stdc=$ac_arg
+break
+else
+ echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+fi
+rm -f conftest.err conftest.$ac_objext
+done
+rm -f conftest.$ac_ext conftest.$ac_objext
+CC=$ac_save_CC
+
+fi
+
+case "x$ac_cv_prog_cc_stdc" in
+ x|xno)
+ echo "$as_me:$LINENO: result: none needed" >&5
+echo "${ECHO_T}none needed" >&6 ;;
+ *)
+ echo "$as_me:$LINENO: result: $ac_cv_prog_cc_stdc" >&5
+echo "${ECHO_T}$ac_cv_prog_cc_stdc" >&6
+ CC="$CC $ac_cv_prog_cc_stdc" ;;
+esac
+
+# Some people use a C++ compiler to compile C. Since we use `exit',
+# in C++ we need to declare it. In case someone uses the same compiler
+# for both compiling C and C++ we need to have the C++ compiler decide
+# the declaration of exit, since it's the most demanding environment.
+cat >conftest.$ac_ext <<_ACEOF
+#ifndef __cplusplus
+ choke me
+#endif
+_ACEOF
+rm -f conftest.$ac_objext
+if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5
+ (eval $ac_compile) 2>conftest.er1
+ ac_status=$?
+ grep -v '^ *+' conftest.er1 >conftest.err
+ rm -f conftest.er1
+ cat conftest.err >&5
+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
+ (exit $ac_status); } &&
+ { ac_try='test -z "$ac_c_werror_flag"
+ || test ! -s conftest.err'
+ { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+ (eval $ac_try) 2>&5
+ ac_status=$?
+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
+ (exit $ac_status); }; } &&
+ { ac_try='test -s conftest.$ac_objext'
+ { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+ (eval $ac_try) 2>&5
+ ac_status=$?
+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
+ (exit $ac_status); }; }; then
+ for ac_declaration in \
+ '' \
+ 'extern "C" void std::exit (int) throw (); using std::exit;' \
+ 'extern "C" void std::exit (int); using std::exit;' \
+ 'extern "C" void exit (int) throw ();' \
+ 'extern "C" void exit (int);' \
+ 'void exit (int);'
+do
+ cat >conftest.$ac_ext <<_ACEOF
+/* confdefs.h. */
+_ACEOF
+cat confdefs.h >>conftest.$ac_ext
+cat >>conftest.$ac_ext <<_ACEOF
+/* end confdefs.h. */
+$ac_declaration
+#include <stdlib.h>
+int
+main ()
+{
+exit (42);
+ ;
+ return 0;
+}
+_ACEOF
+rm -f conftest.$ac_objext
+if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5
+ (eval $ac_compile) 2>conftest.er1
+ ac_status=$?
+ grep -v '^ *+' conftest.er1 >conftest.err
+ rm -f conftest.er1
+ cat conftest.err >&5
+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
+ (exit $ac_status); } &&
+ { ac_try='test -z "$ac_c_werror_flag"
+ || test ! -s conftest.err'
+ { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+ (eval $ac_try) 2>&5
+ ac_status=$?
+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
+ (exit $ac_status); }; } &&
+ { ac_try='test -s conftest.$ac_objext'
+ { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+ (eval $ac_try) 2>&5
+ ac_status=$?
+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
+ (exit $ac_status); }; }; then
+ :
+else
+ echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+continue
+fi
+rm -f 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. */
+$ac_declaration
+int
+main ()
+{
+exit (42);
+ ;
+ return 0;
+}
+_ACEOF
+rm -f conftest.$ac_objext
+if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5
+ (eval $ac_compile) 2>conftest.er1
+ ac_status=$?
+ grep -v '^ *+' conftest.er1 >conftest.err
+ rm -f conftest.er1
+ cat conftest.err >&5
+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
+ (exit $ac_status); } &&
+ { ac_try='test -z "$ac_c_werror_flag"
+ || test ! -s conftest.err'
+ { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+ (eval $ac_try) 2>&5
+ ac_status=$?
+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
+ (exit $ac_status); }; } &&
+ { ac_try='test -s conftest.$ac_objext'
+ { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+ (eval $ac_try) 2>&5
+ ac_status=$?
+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
+ (exit $ac_status); }; }; then
+ break
+else
+ echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+fi
+rm -f conftest.err conftest.$ac_objext conftest.$ac_ext
+done
+rm -f conftest*
+if test -n "$ac_declaration"; then
+ echo '#ifdef __cplusplus' >>confdefs.h
+ echo $ac_declaration >>confdefs.h
+ echo '#endif' >>confdefs.h
+fi
+
+else
+ echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+fi
+rm -f conftest.err conftest.$ac_objext conftest.$ac_ext
+ac_ext=c
+ac_cpp='$CPP $CPPFLAGS'
+ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5'
+ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5'
+ac_compiler_gnu=$ac_cv_c_compiler_gnu
+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.
+echo "$as_me:$LINENO: checking for style of include used by $am_make" >&5
+echo $ECHO_N "checking for style of include used by $am_make... $ECHO_C" >&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
+
+
+echo "$as_me:$LINENO: result: $_am_result" >&5
+echo "${ECHO_T}$_am_result" >&6
+rm -f confinc confmf
+
+# Check whether --enable-dependency-tracking or --disable-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=
+
+echo "$as_me:$LINENO: checking dependency style of $depcc" >&5
+echo $ECHO_N "checking dependency style of $depcc... $ECHO_C" >&6
+if test "${am_cv_CC_dependencies_compiler_type+set}" = set; then
+ echo $ECHO_N "(cached) $ECHO_C" >&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/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
+echo "$as_me:$LINENO: result: $am_cv_CC_dependencies_compiler_type" >&5
+echo "${ECHO_T}$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
+
+
+
+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
+echo "$as_me:$LINENO: checking how to run the C preprocessor" >&5
+echo $ECHO_N "checking how to run the C preprocessor... $ECHO_C" >&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
+ echo $ECHO_N "(cached) $ECHO_C" >&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 { (eval echo "$as_me:$LINENO: \"$ac_cpp conftest.$ac_ext\"") >&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
+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
+ (exit $ac_status); } >/dev/null; then
+ if test -s conftest.err; then
+ ac_cpp_err=$ac_c_preproc_warn_flag
+ ac_cpp_err=$ac_cpp_err$ac_c_werror_flag
+ else
+ ac_cpp_err=
+ fi
+else
+ ac_cpp_err=yes
+fi
+if test -z "$ac_cpp_err"; then
+ :
+else
+ 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 non-existent 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 { (eval echo "$as_me:$LINENO: \"$ac_cpp conftest.$ac_ext\"") >&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
+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
+ (exit $ac_status); } >/dev/null; then
+ if test -s conftest.err; then
+ ac_cpp_err=$ac_c_preproc_warn_flag
+ ac_cpp_err=$ac_cpp_err$ac_c_werror_flag
+ else
+ ac_cpp_err=
+ fi
+else
+ ac_cpp_err=yes
+fi
+if test -z "$ac_cpp_err"; then
+ # Broken: success on invalid input.
+continue
+else
+ 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
+echo "$as_me:$LINENO: result: $CPP" >&5
+echo "${ECHO_T}$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 { (eval echo "$as_me:$LINENO: \"$ac_cpp conftest.$ac_ext\"") >&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
+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
+ (exit $ac_status); } >/dev/null; then
+ if test -s conftest.err; then
+ ac_cpp_err=$ac_c_preproc_warn_flag
+ ac_cpp_err=$ac_cpp_err$ac_c_werror_flag
+ else
+ ac_cpp_err=
+ fi
+else
+ ac_cpp_err=yes
+fi
+if test -z "$ac_cpp_err"; then
+ :
+else
+ 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 non-existent 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 { (eval echo "$as_me:$LINENO: \"$ac_cpp conftest.$ac_ext\"") >&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
+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
+ (exit $ac_status); } >/dev/null; then
+ if test -s conftest.err; then
+ ac_cpp_err=$ac_c_preproc_warn_flag
+ ac_cpp_err=$ac_cpp_err$ac_c_werror_flag
+ else
+ ac_cpp_err=
+ fi
+else
+ ac_cpp_err=yes
+fi
+if test -z "$ac_cpp_err"; then
+ # Broken: success on invalid input.
+continue
+else
+ 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
+ { { echo "$as_me:$LINENO: error: C preprocessor \"$CPP\" fails sanity check
+See \`config.log' for more details." >&5
+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
+
+
+echo "$as_me:$LINENO: checking for egrep" >&5
+echo $ECHO_N "checking for egrep... $ECHO_C" >&6
+if test "${ac_cv_prog_egrep+set}" = set; then
+ echo $ECHO_N "(cached) $ECHO_C" >&6
+else
+ if echo a | (grep -E '(a|b)') >/dev/null 2>&1
+ then ac_cv_prog_egrep='grep -E'
+ else ac_cv_prog_egrep='egrep'
+ fi
+fi
+echo "$as_me:$LINENO: result: $ac_cv_prog_egrep" >&5
+echo "${ECHO_T}$ac_cv_prog_egrep" >&6
+ EGREP=$ac_cv_prog_egrep
+
+
+if test $ac_cv_c_compiler_gnu = yes; then
+ echo "$as_me:$LINENO: checking whether $CC needs -traditional" >&5
+echo $ECHO_N "checking whether $CC needs -traditional... $ECHO_C" >&6
+if test "${ac_cv_prog_gcc_traditional+set}" = set; then
+ echo $ECHO_N "(cached) $ECHO_C" >&6
+else
+ ac_pattern="Autoconf.*'x'"
+ cat >conftest.$ac_ext <<_ACEOF
+/* confdefs.h. */
+_ACEOF
+cat confdefs.h >>conftest.$ac_ext
+cat >>conftest.$ac_ext <<_ACEOF
+/* end confdefs.h. */
+#include <sgtty.h>
+Autoconf TIOCGETP
+_ACEOF
+if (eval "$ac_cpp conftest.$ac_ext") 2>&5 |
+ $EGREP "$ac_pattern" >/dev/null 2>&1; then
+ ac_cv_prog_gcc_traditional=yes
+else
+ ac_cv_prog_gcc_traditional=no
+fi
+rm -f conftest*
+
+
+ if test $ac_cv_prog_gcc_traditional = no; then
+ cat >conftest.$ac_ext <<_ACEOF
+/* confdefs.h. */
+_ACEOF
+cat confdefs.h >>conftest.$ac_ext
+cat >>conftest.$ac_ext <<_ACEOF
+/* end confdefs.h. */
+#include <termio.h>
+Autoconf TCGETA
+_ACEOF
+if (eval "$ac_cpp conftest.$ac_ext") 2>&5 |
+ $EGREP "$ac_pattern" >/dev/null 2>&1; then
+ ac_cv_prog_gcc_traditional=yes
+fi
+rm -f conftest*
+
+ fi
+fi
+echo "$as_me:$LINENO: result: $ac_cv_prog_gcc_traditional" >&5
+echo "${ECHO_T}$ac_cv_prog_gcc_traditional" >&6
+ if test $ac_cv_prog_gcc_traditional = yes; then
+ CC="$CC -traditional"
+ fi
+fi
+
+# Find a good install program. We prefer a C program (faster),
+# so one script is as good as another. But avoid the broken or
+# incompatible versions:
+# SysV /etc/install, /usr/sbin/install
+# SunOS /usr/etc/install
+# IRIX /sbin/install
+# AIX /bin/install
+# AmigaOS /C/install, which installs bootblocks on floppy discs
+# AIX 4 /usr/bin/installbsd, which doesn't work without a -g flag
+# AFS /usr/afsws/bin/install, which mishandles nonexistent args
+# SVR4 /usr/ucb/install, which tries to use the nonexistent group "staff"
+# OS/2's system install, which has a completely different semantic
+# ./install, which can be erroneously created by make from ./install.sh.
+echo "$as_me:$LINENO: checking for a BSD-compatible install" >&5
+echo $ECHO_N "checking for a BSD-compatible install... $ECHO_C" >&6
+if test -z "$INSTALL"; then
+if test "${ac_cv_path_install+set}" = set; then
+ echo $ECHO_N "(cached) $ECHO_C" >&6
+else
+ as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
+for as_dir in $PATH
+do
+ IFS=$as_save_IFS
+ test -z "$as_dir" && as_dir=.
+ # Account for people who put trailing slashes in PATH elements.
+case $as_dir/ in
+ ./ | .// | /cC/* | \
+ /etc/* | /usr/sbin/* | /usr/etc/* | /sbin/* | /usr/afsws/bin/* | \
+ ?:\\/os2\\/install\\/* | ?:\\/OS2\\/INSTALL\\/* | \
+ /usr/ucb/* ) ;;
+ *)
+ # OSF1 and SCO ODT 3.0 have their own names for install.
+ # Don't use installbsd from OSF since it installs stuff as root
+ # by default.
+ for ac_prog in ginstall scoinst install; do
+ for ac_exec_ext in '' $ac_executable_extensions; do
+ if $as_executable_p "$as_dir/$ac_prog$ac_exec_ext"; then
+ if test $ac_prog = install &&
+ grep dspmsg "$as_dir/$ac_prog$ac_exec_ext" >/dev/null 2>&1; then
+ # AIX install. It has an incompatible calling convention.
+ :
+ elif test $ac_prog = install &&
+ grep pwplus "$as_dir/$ac_prog$ac_exec_ext" >/dev/null 2>&1; then
+ # program-specific install script used by HP pwplus--don't use.
+ :
+ else
+ ac_cv_path_install="$as_dir/$ac_prog$ac_exec_ext -c"
+ break 3
+ fi
+ fi
+ done
+ done
+ ;;
+esac
+done
+
+
+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. We don't cache a
+ # path for INSTALL within a source directory, because that will
+ # break other packages using the cache if that directory is
+ # removed, or if the path is relative.
+ INSTALL=$ac_install_sh
+ fi
+fi
+echo "$as_me:$LINENO: result: $INSTALL" >&5
+echo "${ECHO_T}$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'
+
+echo "$as_me:$LINENO: checking whether ${MAKE-make} sets \$(MAKE)" >&5
+echo $ECHO_N "checking whether ${MAKE-make} sets \$(MAKE)... $ECHO_C" >&6
+set dummy ${MAKE-make}; ac_make=`echo "$2" | sed 'y,:./+-,___p_,'`
+if eval "test \"\${ac_cv_prog_make_${ac_make}_set+set}\" = set"; then
+ echo $ECHO_N "(cached) $ECHO_C" >&6
+else
+ cat >conftest.make <<\_ACEOF
+all:
+ @echo 'ac_maketemp="$(MAKE)"'
+_ACEOF
+# GNU make sometimes prints "make[1]: Entering...", which would confuse us.
+eval `${MAKE-make} -f conftest.make 2>/dev/null | grep temp=`
+if test -n "$ac_maketemp"; then
+ eval ac_cv_prog_make_${ac_make}_set=yes
+else
+ eval ac_cv_prog_make_${ac_make}_set=no
+fi
+rm -f conftest.make
+fi
+if eval "test \"`echo '$ac_cv_prog_make_'${ac_make}_set`\" = yes"; then
+ echo "$as_me:$LINENO: result: yes" >&5
+echo "${ECHO_T}yes" >&6
+ SET_MAKE=
+else
+ echo "$as_me:$LINENO: result: no" >&5
+echo "${ECHO_T}no" >&6
+ SET_MAKE="MAKE=${MAKE-make}"
+fi
+
+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
+echo "$as_me:$LINENO: checking for $ac_word" >&5
+echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6
+if test "${ac_cv_prog_RANLIB+set}" = set; then
+ echo $ECHO_N "(cached) $ECHO_C" >&6
+else
+ if test -n "$RANLIB"; then
+ ac_cv_prog_RANLIB="$RANLIB" # Let the user override the test.
+else
+as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
+for as_dir in $PATH
+do
+ IFS=$as_save_IFS
+ test -z "$as_dir" && as_dir=.
+ for ac_exec_ext in '' $ac_executable_extensions; do
+ if $as_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
+ ac_cv_prog_RANLIB="${ac_tool_prefix}ranlib"
+ echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5
+ break 2
+ fi
+done
+done
+
+fi
+fi
+RANLIB=$ac_cv_prog_RANLIB
+if test -n "$RANLIB"; then
+ echo "$as_me:$LINENO: result: $RANLIB" >&5
+echo "${ECHO_T}$RANLIB" >&6
+else
+ echo "$as_me:$LINENO: result: no" >&5
+echo "${ECHO_T}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
+echo "$as_me:$LINENO: checking for $ac_word" >&5
+echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6
+if test "${ac_cv_prog_ac_ct_RANLIB+set}" = set; then
+ echo $ECHO_N "(cached) $ECHO_C" >&6
+else
+ if test -n "$ac_ct_RANLIB"; then
+ ac_cv_prog_ac_ct_RANLIB="$ac_ct_RANLIB" # Let the user override the test.
+else
+as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
+for as_dir in $PATH
+do
+ IFS=$as_save_IFS
+ test -z "$as_dir" && as_dir=.
+ for ac_exec_ext in '' $ac_executable_extensions; do
+ if $as_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
+ ac_cv_prog_ac_ct_RANLIB="ranlib"
+ echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5
+ break 2
+ fi
+done
+done
+
+ test -z "$ac_cv_prog_ac_ct_RANLIB" && ac_cv_prog_ac_ct_RANLIB=":"
+fi
+fi
+ac_ct_RANLIB=$ac_cv_prog_ac_ct_RANLIB
+if test -n "$ac_ct_RANLIB"; then
+ echo "$as_me:$LINENO: result: $ac_ct_RANLIB" >&5
+echo "${ECHO_T}$ac_ct_RANLIB" >&6
+else
+ echo "$as_me:$LINENO: result: no" >&5
+echo "${ECHO_T}no" >&6
+fi
+
+ RANLIB=$ac_ct_RANLIB
+else
+ RANLIB="$ac_cv_prog_RANLIB"
+fi
+
+
+HELP2MAN=${HELP2MAN-"${am_missing_run}help2man"}
+
+
+echo "$as_me:$LINENO: checking for library containing strerror" >&5
+echo $ECHO_N "checking for library containing strerror... $ECHO_C" >&6
+if test "${ac_cv_search_strerror+set}" = set; then
+ echo $ECHO_N "(cached) $ECHO_C" >&6
+else
+ ac_func_search_save_LIBS=$LIBS
+ac_cv_search_strerror=no
+cat >conftest.$ac_ext <<_ACEOF
+/* confdefs.h. */
+_ACEOF
+cat confdefs.h >>conftest.$ac_ext
+cat >>conftest.$ac_ext <<_ACEOF
+/* end confdefs.h. */
+
+/* Override any gcc2 internal prototype to avoid an error. */
+#ifdef __cplusplus
+extern "C"
+#endif
+/* We use char because int might match the return type of a gcc2
+ builtin and then its argument prototype would still apply. */
+char strerror ();
+int
+main ()
+{
+strerror ();
+ ;
+ return 0;
+}
+_ACEOF
+rm -f conftest.$ac_objext conftest$ac_exeext
+if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5
+ (eval $ac_link) 2>conftest.er1
+ ac_status=$?
+ grep -v '^ *+' conftest.er1 >conftest.err
+ rm -f conftest.er1
+ cat conftest.err >&5
+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
+ (exit $ac_status); } &&
+ { ac_try='test -z "$ac_c_werror_flag"
+ || test ! -s conftest.err'
+ { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+ (eval $ac_try) 2>&5
+ ac_status=$?
+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
+ (exit $ac_status); }; } &&
+ { ac_try='test -s conftest$ac_exeext'
+ { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+ (eval $ac_try) 2>&5
+ ac_status=$?
+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
+ (exit $ac_status); }; }; then
+ ac_cv_search_strerror="none required"
+else
+ echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+fi
+rm -f conftest.err conftest.$ac_objext \
+ conftest$ac_exeext conftest.$ac_ext
+if test "$ac_cv_search_strerror" = no; then
+ for ac_lib in cposix; do
+ LIBS="-l$ac_lib $ac_func_search_save_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 gcc2 internal prototype to avoid an error. */
+#ifdef __cplusplus
+extern "C"
+#endif
+/* We use char because int might match the return type of a gcc2
+ builtin and then its argument prototype would still apply. */
+char strerror ();
+int
+main ()
+{
+strerror ();
+ ;
+ return 0;
+}
+_ACEOF
+rm -f conftest.$ac_objext conftest$ac_exeext
+if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5
+ (eval $ac_link) 2>conftest.er1
+ ac_status=$?
+ grep -v '^ *+' conftest.er1 >conftest.err
+ rm -f conftest.er1
+ cat conftest.err >&5
+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
+ (exit $ac_status); } &&
+ { ac_try='test -z "$ac_c_werror_flag"
+ || test ! -s conftest.err'
+ { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+ (eval $ac_try) 2>&5
+ ac_status=$?
+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
+ (exit $ac_status); }; } &&
+ { ac_try='test -s conftest$ac_exeext'
+ { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+ (eval $ac_try) 2>&5
+ ac_status=$?
+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
+ (exit $ac_status); }; }; then
+ ac_cv_search_strerror="-l$ac_lib"
+break
+else
+ echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+fi
+rm -f conftest.err conftest.$ac_objext \
+ conftest$ac_exeext conftest.$ac_ext
+ done
+fi
+LIBS=$ac_func_search_save_LIBS
+fi
+echo "$as_me:$LINENO: result: $ac_cv_search_strerror" >&5
+echo "${ECHO_T}$ac_cv_search_strerror" >&6
+if test "$ac_cv_search_strerror" != no; then
+ test "$ac_cv_search_strerror" = "none required" || LIBS="$ac_cv_search_strerror $LIBS"
+
+fi
+
+echo "$as_me:$LINENO: checking for ANSI C header files" >&5
+echo $ECHO_N "checking for ANSI C header files... $ECHO_C" >&6
+if test "${ac_cv_header_stdc+set}" = set; then
+ echo $ECHO_N "(cached) $ECHO_C" >&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 { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5
+ (eval $ac_compile) 2>conftest.er1
+ ac_status=$?
+ grep -v '^ *+' conftest.er1 >conftest.err
+ rm -f conftest.er1
+ cat conftest.err >&5
+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
+ (exit $ac_status); } &&
+ { ac_try='test -z "$ac_c_werror_flag"
+ || test ! -s conftest.err'
+ { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+ (eval $ac_try) 2>&5
+ ac_status=$?
+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
+ (exit $ac_status); }; } &&
+ { ac_try='test -s conftest.$ac_objext'
+ { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+ (eval $ac_try) 2>&5
+ ac_status=$?
+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
+ (exit $ac_status); }; }; then
+ ac_cv_header_stdc=yes
+else
+ echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+ac_cv_header_stdc=no
+fi
+rm -f 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>
+#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))
+ exit(2);
+ exit (0);
+}
+_ACEOF
+rm -f conftest$ac_exeext
+if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5
+ (eval $ac_link) 2>&5
+ ac_status=$?
+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
+ (exit $ac_status); } && { ac_try='./conftest$ac_exeext'
+ { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+ (eval $ac_try) 2>&5
+ ac_status=$?
+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
+ (exit $ac_status); }; }; then
+ :
+else
+ echo "$as_me: program exited with status $ac_status" >&5
+echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+( exit $ac_status )
+ac_cv_header_stdc=no
+fi
+rm -f core *.core gmon.out bb.out conftest$ac_exeext conftest.$ac_objext conftest.$ac_ext
+fi
+fi
+fi
+echo "$as_me:$LINENO: result: $ac_cv_header_stdc" >&5
+echo "${ECHO_T}$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=`echo "ac_cv_header_$ac_header" | $as_tr_sh`
+echo "$as_me:$LINENO: checking for $ac_header" >&5
+echo $ECHO_N "checking for $ac_header... $ECHO_C" >&6
+if eval "test \"\${$as_ac_Header+set}\" = set"; then
+ echo $ECHO_N "(cached) $ECHO_C" >&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 { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5
+ (eval $ac_compile) 2>conftest.er1
+ ac_status=$?
+ grep -v '^ *+' conftest.er1 >conftest.err
+ rm -f conftest.er1
+ cat conftest.err >&5
+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
+ (exit $ac_status); } &&
+ { ac_try='test -z "$ac_c_werror_flag"
+ || test ! -s conftest.err'
+ { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+ (eval $ac_try) 2>&5
+ ac_status=$?
+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
+ (exit $ac_status); }; } &&
+ { ac_try='test -s conftest.$ac_objext'
+ { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+ (eval $ac_try) 2>&5
+ ac_status=$?
+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
+ (exit $ac_status); }; }; then
+ eval "$as_ac_Header=yes"
+else
+ echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+eval "$as_ac_Header=no"
+fi
+rm -f conftest.err conftest.$ac_objext conftest.$ac_ext
+fi
+echo "$as_me:$LINENO: result: `eval echo '${'$as_ac_Header'}'`" >&5
+echo "${ECHO_T}`eval echo '${'$as_ac_Header'}'`" >&6
+if test `eval echo '${'$as_ac_Header'}'` = yes; then
+ cat >>confdefs.h <<_ACEOF
+#define `echo "HAVE_$ac_header" | $as_tr_cpp` 1
+_ACEOF
+
+fi
+
+done
+
+
+if test "${ac_cv_header_minix_config_h+set}" = set; then
+ echo "$as_me:$LINENO: checking for minix/config.h" >&5
+echo $ECHO_N "checking for minix/config.h... $ECHO_C" >&6
+if test "${ac_cv_header_minix_config_h+set}" = set; then
+ echo $ECHO_N "(cached) $ECHO_C" >&6
+fi
+echo "$as_me:$LINENO: result: $ac_cv_header_minix_config_h" >&5
+echo "${ECHO_T}$ac_cv_header_minix_config_h" >&6
+else
+ # Is the header compilable?
+echo "$as_me:$LINENO: checking minix/config.h usability" >&5
+echo $ECHO_N "checking minix/config.h usability... $ECHO_C" >&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 { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5
+ (eval $ac_compile) 2>conftest.er1
+ ac_status=$?
+ grep -v '^ *+' conftest.er1 >conftest.err
+ rm -f conftest.er1
+ cat conftest.err >&5
+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
+ (exit $ac_status); } &&
+ { ac_try='test -z "$ac_c_werror_flag"
+ || test ! -s conftest.err'
+ { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+ (eval $ac_try) 2>&5
+ ac_status=$?
+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
+ (exit $ac_status); }; } &&
+ { ac_try='test -s conftest.$ac_objext'
+ { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+ (eval $ac_try) 2>&5
+ ac_status=$?
+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
+ (exit $ac_status); }; }; then
+ ac_header_compiler=yes
+else
+ echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+ac_header_compiler=no
+fi
+rm -f conftest.err conftest.$ac_objext conftest.$ac_ext
+echo "$as_me:$LINENO: result: $ac_header_compiler" >&5
+echo "${ECHO_T}$ac_header_compiler" >&6
+
+# Is the header present?
+echo "$as_me:$LINENO: checking minix/config.h presence" >&5
+echo $ECHO_N "checking minix/config.h presence... $ECHO_C" >&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 { (eval echo "$as_me:$LINENO: \"$ac_cpp conftest.$ac_ext\"") >&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
+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
+ (exit $ac_status); } >/dev/null; then
+ if test -s conftest.err; then
+ ac_cpp_err=$ac_c_preproc_warn_flag
+ ac_cpp_err=$ac_cpp_err$ac_c_werror_flag
+ else
+ ac_cpp_err=
+ fi
+else
+ ac_cpp_err=yes
+fi
+if test -z "$ac_cpp_err"; then
+ ac_header_preproc=yes
+else
+ 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
+echo "$as_me:$LINENO: result: $ac_header_preproc" >&5
+echo "${ECHO_T}$ac_header_preproc" >&6
+
+# So? What about this header?
+case $ac_header_compiler:$ac_header_preproc:$ac_c_preproc_warn_flag in
+ yes:no: )
+ { echo "$as_me:$LINENO: WARNING: minix/config.h: accepted by the compiler, rejected by the preprocessor!" >&5
+echo "$as_me: WARNING: minix/config.h: accepted by the compiler, rejected by the preprocessor!" >&2;}
+ { echo "$as_me:$LINENO: WARNING: minix/config.h: proceeding with the compiler's result" >&5
+echo "$as_me: WARNING: minix/config.h: proceeding with the compiler's result" >&2;}
+ ac_header_preproc=yes
+ ;;
+ no:yes:* )
+ { echo "$as_me:$LINENO: WARNING: minix/config.h: present but cannot be compiled" >&5
+echo "$as_me: WARNING: minix/config.h: present but cannot be compiled" >&2;}
+ { echo "$as_me:$LINENO: WARNING: minix/config.h: check for missing prerequisite headers?" >&5
+echo "$as_me: WARNING: minix/config.h: check for missing prerequisite headers?" >&2;}
+ { echo "$as_me:$LINENO: WARNING: minix/config.h: see the Autoconf documentation" >&5
+echo "$as_me: WARNING: minix/config.h: see the Autoconf documentation" >&2;}
+ { echo "$as_me:$LINENO: WARNING: minix/config.h: section \"Present But Cannot Be Compiled\"" >&5
+echo "$as_me: WARNING: minix/config.h: section \"Present But Cannot Be Compiled\"" >&2;}
+ { echo "$as_me:$LINENO: WARNING: minix/config.h: proceeding with the preprocessor's result" >&5
+echo "$as_me: WARNING: minix/config.h: proceeding with the preprocessor's result" >&2;}
+ { echo "$as_me:$LINENO: WARNING: minix/config.h: in the future, the compiler will take precedence" >&5
+echo "$as_me: WARNING: minix/config.h: in the future, the compiler will take precedence" >&2;}
+ (
+ cat <<\_ASBOX
+## -------------------------------------- ##
+## Report this to the GNU Texinfo lists. ##
+## -------------------------------------- ##
+_ASBOX
+ ) |
+ sed "s/^/$as_me: WARNING: /" >&2
+ ;;
+esac
+echo "$as_me:$LINENO: checking for minix/config.h" >&5
+echo $ECHO_N "checking for minix/config.h... $ECHO_C" >&6
+if test "${ac_cv_header_minix_config_h+set}" = set; then
+ echo $ECHO_N "(cached) $ECHO_C" >&6
+else
+ ac_cv_header_minix_config_h=$ac_header_preproc
+fi
+echo "$as_me:$LINENO: result: $ac_cv_header_minix_config_h" >&5
+echo "${ECHO_T}$ac_cv_header_minix_config_h" >&6
+
+fi
+if test $ac_cv_header_minix_config_h = 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
+
+
+# Needed on sysV68 for sigblock, sigsetmask. But check for it in libc first.
+echo "$as_me:$LINENO: checking for sigblock" >&5
+echo $ECHO_N "checking for sigblock... $ECHO_C" >&6
+if test "${ac_cv_func_sigblock+set}" = set; then
+ echo $ECHO_N "(cached) $ECHO_C" >&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 gcc2 internal prototype to avoid an error. */
+#ifdef __cplusplus
+extern "C"
+{
+#endif
+/* We use char because int might match the return type of a gcc2
+ builtin and then its argument prototype would still apply. */
+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
+#else
+char (*f) () = sigblock;
+#endif
+#ifdef __cplusplus
+}
+#endif
+
+int
+main ()
+{
+return f != sigblock;
+ ;
+ return 0;
+}
+_ACEOF
+rm -f conftest.$ac_objext conftest$ac_exeext
+if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5
+ (eval $ac_link) 2>conftest.er1
+ ac_status=$?
+ grep -v '^ *+' conftest.er1 >conftest.err
+ rm -f conftest.er1
+ cat conftest.err >&5
+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
+ (exit $ac_status); } &&
+ { ac_try='test -z "$ac_c_werror_flag"
+ || test ! -s conftest.err'
+ { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+ (eval $ac_try) 2>&5
+ ac_status=$?
+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
+ (exit $ac_status); }; } &&
+ { ac_try='test -s conftest$ac_exeext'
+ { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+ (eval $ac_try) 2>&5
+ ac_status=$?
+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
+ (exit $ac_status); }; }; then
+ ac_cv_func_sigblock=yes
+else
+ echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+ac_cv_func_sigblock=no
+fi
+rm -f conftest.err conftest.$ac_objext \
+ conftest$ac_exeext conftest.$ac_ext
+fi
+echo "$as_me:$LINENO: result: $ac_cv_func_sigblock" >&5
+echo "${ECHO_T}$ac_cv_func_sigblock" >&6
+if test $ac_cv_func_sigblock = yes; then
+ :
+else
+
+echo "$as_me:$LINENO: checking for sigblock in -lbsd" >&5
+echo $ECHO_N "checking for sigblock in -lbsd... $ECHO_C" >&6
+if test "${ac_cv_lib_bsd_sigblock+set}" = set; then
+ echo $ECHO_N "(cached) $ECHO_C" >&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 gcc2 internal prototype to avoid an error. */
+#ifdef __cplusplus
+extern "C"
+#endif
+/* We use char because int might match the return type of a gcc2
+ builtin and then its argument prototype would still apply. */
+char sigblock ();
+int
+main ()
+{
+sigblock ();
+ ;
+ return 0;
+}
+_ACEOF
+rm -f conftest.$ac_objext conftest$ac_exeext
+if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5
+ (eval $ac_link) 2>conftest.er1
+ ac_status=$?
+ grep -v '^ *+' conftest.er1 >conftest.err
+ rm -f conftest.er1
+ cat conftest.err >&5
+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
+ (exit $ac_status); } &&
+ { ac_try='test -z "$ac_c_werror_flag"
+ || test ! -s conftest.err'
+ { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+ (eval $ac_try) 2>&5
+ ac_status=$?
+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
+ (exit $ac_status); }; } &&
+ { ac_try='test -s conftest$ac_exeext'
+ { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+ (eval $ac_try) 2>&5
+ ac_status=$?
+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
+ (exit $ac_status); }; }; then
+ ac_cv_lib_bsd_sigblock=yes
+else
+ echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+ac_cv_lib_bsd_sigblock=no
+fi
+rm -f conftest.err conftest.$ac_objext \
+ conftest$ac_exeext conftest.$ac_ext
+LIBS=$ac_check_lib_save_LIBS
+fi
+echo "$as_me:$LINENO: result: $ac_cv_lib_bsd_sigblock" >&5
+echo "${ECHO_T}$ac_cv_lib_bsd_sigblock" >&6
+if test $ac_cv_lib_bsd_sigblock = yes; then
+ cat >>confdefs.h <<_ACEOF
+#define HAVE_LIBBSD 1
+_ACEOF
+
+ LIBS="-lbsd $LIBS"
+
+fi
+
+fi
+
+
+# Checks for header files.
+echo "$as_me:$LINENO: checking whether stat file-mode macros are broken" >&5
+echo $ECHO_N "checking whether stat file-mode macros are broken... $ECHO_C" >&6
+if test "${ac_cv_header_stat_broken+set}" = set; then
+ echo $ECHO_N "(cached) $ECHO_C" >&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)
+# if S_ISBLK (S_IFDIR)
+You lose.
+# endif
+#endif
+
+#if defined(S_ISBLK) && defined(S_IFCHR)
+# if S_ISBLK (S_IFCHR)
+You lose.
+# endif
+#endif
+
+#if defined(S_ISLNK) && defined(S_IFREG)
+# if S_ISLNK (S_IFREG)
+You lose.
+# endif
+#endif
+
+#if defined(S_ISSOCK) && defined(S_IFREG)
+# if S_ISSOCK (S_IFREG)
+You lose.
+# endif
+#endif
+
+_ACEOF
+if (eval "$ac_cpp conftest.$ac_ext") 2>&5 |
+ $EGREP "You lose" >/dev/null 2>&1; then
+ ac_cv_header_stat_broken=yes
+else
+ ac_cv_header_stat_broken=no
+fi
+rm -f conftest*
+
+fi
+echo "$as_me:$LINENO: result: $ac_cv_header_stat_broken" >&5
+echo "${ECHO_T}$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
+
+echo "$as_me:$LINENO: checking for ANSI C header files" >&5
+echo $ECHO_N "checking for ANSI C header files... $ECHO_C" >&6
+if test "${ac_cv_header_stdc+set}" = set; then
+ echo $ECHO_N "(cached) $ECHO_C" >&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 { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5
+ (eval $ac_compile) 2>conftest.er1
+ ac_status=$?
+ grep -v '^ *+' conftest.er1 >conftest.err
+ rm -f conftest.er1
+ cat conftest.err >&5
+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
+ (exit $ac_status); } &&
+ { ac_try='test -z "$ac_c_werror_flag"
+ || test ! -s conftest.err'
+ { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+ (eval $ac_try) 2>&5
+ ac_status=$?
+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
+ (exit $ac_status); }; } &&
+ { ac_try='test -s conftest.$ac_objext'
+ { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+ (eval $ac_try) 2>&5
+ ac_status=$?
+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
+ (exit $ac_status); }; }; then
+ ac_cv_header_stdc=yes
+else
+ echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+ac_cv_header_stdc=no
+fi
+rm -f 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>
+#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))
+ exit(2);
+ exit (0);
+}
+_ACEOF
+rm -f conftest$ac_exeext
+if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5
+ (eval $ac_link) 2>&5
+ ac_status=$?
+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
+ (exit $ac_status); } && { ac_try='./conftest$ac_exeext'
+ { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+ (eval $ac_try) 2>&5
+ ac_status=$?
+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
+ (exit $ac_status); }; }; then
+ :
+else
+ echo "$as_me: program exited with status $ac_status" >&5
+echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+( exit $ac_status )
+ac_cv_header_stdc=no
+fi
+rm -f core *.core gmon.out bb.out conftest$ac_exeext conftest.$ac_objext conftest.$ac_ext
+fi
+fi
+fi
+echo "$as_me:$LINENO: result: $ac_cv_header_stdc" >&5
+echo "${ECHO_T}$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=`echo "ac_cv_header_$ac_header" | $as_tr_sh`
+if eval "test \"\${$as_ac_Header+set}\" = set"; then
+ echo "$as_me:$LINENO: checking for $ac_header" >&5
+echo $ECHO_N "checking for $ac_header... $ECHO_C" >&6
+if eval "test \"\${$as_ac_Header+set}\" = set"; then
+ echo $ECHO_N "(cached) $ECHO_C" >&6
+fi
+echo "$as_me:$LINENO: result: `eval echo '${'$as_ac_Header'}'`" >&5
+echo "${ECHO_T}`eval echo '${'$as_ac_Header'}'`" >&6
+else
+ # Is the header compilable?
+echo "$as_me:$LINENO: checking $ac_header usability" >&5
+echo $ECHO_N "checking $ac_header usability... $ECHO_C" >&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 { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5
+ (eval $ac_compile) 2>conftest.er1
+ ac_status=$?
+ grep -v '^ *+' conftest.er1 >conftest.err
+ rm -f conftest.er1
+ cat conftest.err >&5
+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
+ (exit $ac_status); } &&
+ { ac_try='test -z "$ac_c_werror_flag"
+ || test ! -s conftest.err'
+ { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+ (eval $ac_try) 2>&5
+ ac_status=$?
+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
+ (exit $ac_status); }; } &&
+ { ac_try='test -s conftest.$ac_objext'
+ { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+ (eval $ac_try) 2>&5
+ ac_status=$?
+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
+ (exit $ac_status); }; }; then
+ ac_header_compiler=yes
+else
+ echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+ac_header_compiler=no
+fi
+rm -f conftest.err conftest.$ac_objext conftest.$ac_ext
+echo "$as_me:$LINENO: result: $ac_header_compiler" >&5
+echo "${ECHO_T}$ac_header_compiler" >&6
+
+# Is the header present?
+echo "$as_me:$LINENO: checking $ac_header presence" >&5
+echo $ECHO_N "checking $ac_header presence... $ECHO_C" >&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 { (eval echo "$as_me:$LINENO: \"$ac_cpp conftest.$ac_ext\"") >&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
+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
+ (exit $ac_status); } >/dev/null; then
+ if test -s conftest.err; then
+ ac_cpp_err=$ac_c_preproc_warn_flag
+ ac_cpp_err=$ac_cpp_err$ac_c_werror_flag
+ else
+ ac_cpp_err=
+ fi
+else
+ ac_cpp_err=yes
+fi
+if test -z "$ac_cpp_err"; then
+ ac_header_preproc=yes
+else
+ 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
+echo "$as_me:$LINENO: result: $ac_header_preproc" >&5
+echo "${ECHO_T}$ac_header_preproc" >&6
+
+# So? What about this header?
+case $ac_header_compiler:$ac_header_preproc:$ac_c_preproc_warn_flag in
+ yes:no: )
+ { echo "$as_me:$LINENO: WARNING: $ac_header: accepted by the compiler, rejected by the preprocessor!" >&5
+echo "$as_me: WARNING: $ac_header: accepted by the compiler, rejected by the preprocessor!" >&2;}
+ { echo "$as_me:$LINENO: WARNING: $ac_header: proceeding with the compiler's result" >&5
+echo "$as_me: WARNING: $ac_header: proceeding with the compiler's result" >&2;}
+ ac_header_preproc=yes
+ ;;
+ no:yes:* )
+ { echo "$as_me:$LINENO: WARNING: $ac_header: present but cannot be compiled" >&5
+echo "$as_me: WARNING: $ac_header: present but cannot be compiled" >&2;}
+ { echo "$as_me:$LINENO: WARNING: $ac_header: check for missing prerequisite headers?" >&5
+echo "$as_me: WARNING: $ac_header: check for missing prerequisite headers?" >&2;}
+ { echo "$as_me:$LINENO: WARNING: $ac_header: see the Autoconf documentation" >&5
+echo "$as_me: WARNING: $ac_header: see the Autoconf documentation" >&2;}
+ { echo "$as_me:$LINENO: WARNING: $ac_header: section \"Present But Cannot Be Compiled\"" >&5
+echo "$as_me: WARNING: $ac_header: section \"Present But Cannot Be Compiled\"" >&2;}
+ { echo "$as_me:$LINENO: WARNING: $ac_header: proceeding with the preprocessor's result" >&5
+echo "$as_me: WARNING: $ac_header: proceeding with the preprocessor's result" >&2;}
+ { echo "$as_me:$LINENO: WARNING: $ac_header: in the future, the compiler will take precedence" >&5
+echo "$as_me: WARNING: $ac_header: in the future, the compiler will take precedence" >&2;}
+ (
+ cat <<\_ASBOX
+## -------------------------------------- ##
+## Report this to the GNU Texinfo lists. ##
+## -------------------------------------- ##
+_ASBOX
+ ) |
+ sed "s/^/$as_me: WARNING: /" >&2
+ ;;
+esac
+echo "$as_me:$LINENO: checking for $ac_header" >&5
+echo $ECHO_N "checking for $ac_header... $ECHO_C" >&6
+if eval "test \"\${$as_ac_Header+set}\" = set"; then
+ echo $ECHO_N "(cached) $ECHO_C" >&6
+else
+ eval "$as_ac_Header=\$ac_header_preproc"
+fi
+echo "$as_me:$LINENO: result: `eval echo '${'$as_ac_Header'}'`" >&5
+echo "${ECHO_T}`eval echo '${'$as_ac_Header'}'`" >&6
+
+fi
+if test `eval echo '${'$as_ac_Header'}'` = yes; then
+ cat >>confdefs.h <<_ACEOF
+#define `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=`echo "ac_cv_header_$ac_header" | $as_tr_sh`
+echo "$as_me:$LINENO: checking for $ac_header" >&5
+echo $ECHO_N "checking for $ac_header... $ECHO_C" >&6
+if eval "test \"\${$as_ac_Header+set}\" = set"; then
+ echo $ECHO_N "(cached) $ECHO_C" >&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 { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5
+ (eval $ac_compile) 2>conftest.er1
+ ac_status=$?
+ grep -v '^ *+' conftest.er1 >conftest.err
+ rm -f conftest.er1
+ cat conftest.err >&5
+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
+ (exit $ac_status); } &&
+ { ac_try='test -z "$ac_c_werror_flag"
+ || test ! -s conftest.err'
+ { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+ (eval $ac_try) 2>&5
+ ac_status=$?
+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
+ (exit $ac_status); }; } &&
+ { ac_try='test -s conftest.$ac_objext'
+ { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+ (eval $ac_try) 2>&5
+ ac_status=$?
+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
+ (exit $ac_status); }; }; then
+ eval "$as_ac_Header=yes"
+else
+ echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+eval "$as_ac_Header=no"
+fi
+rm -f conftest.err conftest.$ac_objext conftest.$ac_ext
+fi
+echo "$as_me:$LINENO: result: `eval echo '${'$as_ac_Header'}'`" >&5
+echo "${ECHO_T}`eval echo '${'$as_ac_Header'}'`" >&6
+if test `eval echo '${'$as_ac_Header'}'` = yes; then
+ cat >>confdefs.h <<_ACEOF
+#define `echo "HAVE_$ac_header" | $as_tr_cpp` 1
+_ACEOF
+
+fi
+
+done
+
+
+echo "$as_me:$LINENO: checking POSIX termios" >&5
+echo $ECHO_N "checking POSIX termios... $ECHO_C" >&6
+if test "${ac_cv_sys_posix_termios+set}" = set; then
+ echo $ECHO_N "(cached) $ECHO_C" >&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 { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5
+ (eval $ac_link) 2>conftest.er1
+ ac_status=$?
+ grep -v '^ *+' conftest.er1 >conftest.err
+ rm -f conftest.er1
+ cat conftest.err >&5
+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
+ (exit $ac_status); } &&
+ { ac_try='test -z "$ac_c_werror_flag"
+ || test ! -s conftest.err'
+ { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+ (eval $ac_try) 2>&5
+ ac_status=$?
+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
+ (exit $ac_status); }; } &&
+ { ac_try='test -s conftest$ac_exeext'
+ { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+ (eval $ac_try) 2>&5
+ ac_status=$?
+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
+ (exit $ac_status); }; }; then
+ ac_cv_sys_posix_termios=yes
+else
+ echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+ac_cv_sys_posix_termios=no
+fi
+rm -f conftest.err conftest.$ac_objext \
+ conftest$ac_exeext conftest.$ac_ext
+fi
+echo "$as_me:$LINENO: result: $ac_cv_sys_posix_termios" >&5
+echo "${ECHO_T}$ac_cv_sys_posix_termios" >&6
+
+echo "$as_me:$LINENO: checking whether termios.h defines TIOCGWINSZ" >&5
+echo $ECHO_N "checking whether termios.h defines TIOCGWINSZ... $ECHO_C" >&6
+if test "${ac_cv_sys_tiocgwinsz_in_termios_h+set}" = set; then
+ echo $ECHO_N "(cached) $ECHO_C" >&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
+echo "$as_me:$LINENO: result: $ac_cv_sys_tiocgwinsz_in_termios_h" >&5
+echo "${ECHO_T}$ac_cv_sys_tiocgwinsz_in_termios_h" >&6
+
+if test $ac_cv_sys_tiocgwinsz_in_termios_h != yes; then
+ echo "$as_me:$LINENO: checking whether sys/ioctl.h defines TIOCGWINSZ" >&5
+echo $ECHO_N "checking whether sys/ioctl.h defines TIOCGWINSZ... $ECHO_C" >&6
+if test "${ac_cv_sys_tiocgwinsz_in_sys_ioctl_h+set}" = set; then
+ echo $ECHO_N "(cached) $ECHO_C" >&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
+echo "$as_me:$LINENO: result: $ac_cv_sys_tiocgwinsz_in_sys_ioctl_h" >&5
+echo "${ECHO_T}$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.
+echo "$as_me:$LINENO: checking for off_t" >&5
+echo $ECHO_N "checking for off_t... $ECHO_C" >&6
+if test "${ac_cv_type_off_t+set}" = set; then
+ echo $ECHO_N "(cached) $ECHO_C" >&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 ()
+{
+if ((off_t *) 0)
+ return 0;
+if (sizeof (off_t))
+ return 0;
+ ;
+ return 0;
+}
+_ACEOF
+rm -f conftest.$ac_objext
+if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5
+ (eval $ac_compile) 2>conftest.er1
+ ac_status=$?
+ grep -v '^ *+' conftest.er1 >conftest.err
+ rm -f conftest.er1
+ cat conftest.err >&5
+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
+ (exit $ac_status); } &&
+ { ac_try='test -z "$ac_c_werror_flag"
+ || test ! -s conftest.err'
+ { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+ (eval $ac_try) 2>&5
+ ac_status=$?
+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
+ (exit $ac_status); }; } &&
+ { ac_try='test -s conftest.$ac_objext'
+ { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+ (eval $ac_try) 2>&5
+ ac_status=$?
+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
+ (exit $ac_status); }; }; then
+ ac_cv_type_off_t=yes
+else
+ echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+ac_cv_type_off_t=no
+fi
+rm -f conftest.err conftest.$ac_objext conftest.$ac_ext
+fi
+echo "$as_me:$LINENO: result: $ac_cv_type_off_t" >&5
+echo "${ECHO_T}$ac_cv_type_off_t" >&6
+if test $ac_cv_type_off_t = yes; then
+ :
+else
+
+cat >>confdefs.h <<_ACEOF
+#define off_t long
+_ACEOF
+
+fi
+
+echo "$as_me:$LINENO: checking return type of signal handlers" >&5
+echo $ECHO_N "checking return type of signal handlers... $ECHO_C" >&6
+if test "${ac_cv_type_signal+set}" = set; then
+ echo $ECHO_N "(cached) $ECHO_C" >&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>
+#ifdef signal
+# undef signal
+#endif
+#ifdef __cplusplus
+extern "C" void (*signal (int, void (*)(int)))(int);
+#else
+void (*signal ()) ();
+#endif
+
+int
+main ()
+{
+int i;
+ ;
+ return 0;
+}
+_ACEOF
+rm -f conftest.$ac_objext
+if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5
+ (eval $ac_compile) 2>conftest.er1
+ ac_status=$?
+ grep -v '^ *+' conftest.er1 >conftest.err
+ rm -f conftest.er1
+ cat conftest.err >&5
+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
+ (exit $ac_status); } &&
+ { ac_try='test -z "$ac_c_werror_flag"
+ || test ! -s conftest.err'
+ { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+ (eval $ac_try) 2>&5
+ ac_status=$?
+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
+ (exit $ac_status); }; } &&
+ { ac_try='test -s conftest.$ac_objext'
+ { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+ (eval $ac_try) 2>&5
+ ac_status=$?
+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
+ (exit $ac_status); }; }; then
+ ac_cv_type_signal=void
+else
+ echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+ac_cv_type_signal=int
+fi
+rm -f conftest.err conftest.$ac_objext conftest.$ac_ext
+fi
+echo "$as_me:$LINENO: result: $ac_cv_type_signal" >&5
+echo "${ECHO_T}$ac_cv_type_signal" >&6
+
+cat >>confdefs.h <<_ACEOF
+#define RETSIGTYPE $ac_cv_type_signal
+_ACEOF
+
+
+echo "$as_me:$LINENO: checking for an ANSI C-conforming const" >&5
+echo $ECHO_N "checking for an ANSI C-conforming const... $ECHO_C" >&6
+if test "${ac_cv_c_const+set}" = set; then
+ echo $ECHO_N "(cached) $ECHO_C" >&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 x;
+ /* SunOS 4.1.1 cc rejects this. */
+ char const *const *ccp;
+ char **p;
+ /* 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";
+ ccp = &g + (g ? g-g : 0);
+ /* HPUX 7.0 cc rejects these. */
+ ++ccp;
+ p = (char**) ccp;
+ ccp = (char const *const *) p;
+ { /* SCO 3.2v4 cc rejects this. */
+ char *t;
+ char const *s = 0 ? (char *) 0 : (char const *) 0;
+
+ *t++ = 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;
+ }
+#endif
+
+ ;
+ return 0;
+}
+_ACEOF
+rm -f conftest.$ac_objext
+if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5
+ (eval $ac_compile) 2>conftest.er1
+ ac_status=$?
+ grep -v '^ *+' conftest.er1 >conftest.err
+ rm -f conftest.er1
+ cat conftest.err >&5
+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
+ (exit $ac_status); } &&
+ { ac_try='test -z "$ac_c_werror_flag"
+ || test ! -s conftest.err'
+ { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+ (eval $ac_try) 2>&5
+ ac_status=$?
+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
+ (exit $ac_status); }; } &&
+ { ac_try='test -s conftest.$ac_objext'
+ { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+ (eval $ac_try) 2>&5
+ ac_status=$?
+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
+ (exit $ac_status); }; }; then
+ ac_cv_c_const=yes
+else
+ echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+ac_cv_c_const=no
+fi
+rm -f conftest.err conftest.$ac_objext conftest.$ac_ext
+fi
+echo "$as_me:$LINENO: result: $ac_cv_c_const" >&5
+echo "${ECHO_T}$ac_cv_c_const" >&6
+if test $ac_cv_c_const = no; then
+
+cat >>confdefs.h <<\_ACEOF
+#define const
+_ACEOF
+
+fi
+
+echo "$as_me:$LINENO: checking whether struct tm is in sys/time.h or time.h" >&5
+echo $ECHO_N "checking whether struct tm is in sys/time.h or time.h... $ECHO_C" >&6
+if test "${ac_cv_struct_tm+set}" = set; then
+ echo $ECHO_N "(cached) $ECHO_C" >&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 *tp; tp->tm_sec;
+ ;
+ return 0;
+}
+_ACEOF
+rm -f conftest.$ac_objext
+if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5
+ (eval $ac_compile) 2>conftest.er1
+ ac_status=$?
+ grep -v '^ *+' conftest.er1 >conftest.err
+ rm -f conftest.er1
+ cat conftest.err >&5
+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
+ (exit $ac_status); } &&
+ { ac_try='test -z "$ac_c_werror_flag"
+ || test ! -s conftest.err'
+ { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+ (eval $ac_try) 2>&5
+ ac_status=$?
+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
+ (exit $ac_status); }; } &&
+ { ac_try='test -s conftest.$ac_objext'
+ { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+ (eval $ac_try) 2>&5
+ ac_status=$?
+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
+ (exit $ac_status); }; }; then
+ ac_cv_struct_tm=time.h
+else
+ echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+ac_cv_struct_tm=sys/time.h
+fi
+rm -f conftest.err conftest.$ac_objext conftest.$ac_ext
+fi
+echo "$as_me:$LINENO: result: $ac_cv_struct_tm" >&5
+echo "${ECHO_T}$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.
+echo "$as_me:$LINENO: checking whether memchr is declared" >&5
+echo $ECHO_N "checking whether memchr is declared... $ECHO_C" >&6
+if test "${ac_cv_have_decl_memchr+set}" = set; then
+ echo $ECHO_N "(cached) $ECHO_C" >&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
+ char *p = (char *) memchr;
+#endif
+
+ ;
+ return 0;
+}
+_ACEOF
+rm -f conftest.$ac_objext
+if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5
+ (eval $ac_compile) 2>conftest.er1
+ ac_status=$?
+ grep -v '^ *+' conftest.er1 >conftest.err
+ rm -f conftest.er1
+ cat conftest.err >&5
+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
+ (exit $ac_status); } &&
+ { ac_try='test -z "$ac_c_werror_flag"
+ || test ! -s conftest.err'
+ { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+ (eval $ac_try) 2>&5
+ ac_status=$?
+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
+ (exit $ac_status); }; } &&
+ { ac_try='test -s conftest.$ac_objext'
+ { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+ (eval $ac_try) 2>&5
+ ac_status=$?
+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
+ (exit $ac_status); }; }; then
+ ac_cv_have_decl_memchr=yes
+else
+ echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+ac_cv_have_decl_memchr=no
+fi
+rm -f conftest.err conftest.$ac_objext conftest.$ac_ext
+fi
+echo "$as_me:$LINENO: result: $ac_cv_have_decl_memchr" >&5
+echo "${ECHO_T}$ac_cv_have_decl_memchr" >&6
+if test $ac_cv_have_decl_memchr = yes; then
+
+cat >>confdefs.h <<_ACEOF
+#define HAVE_DECL_MEMCHR 1
+_ACEOF
+
+
+else
+ cat >>confdefs.h <<_ACEOF
+#define HAVE_DECL_MEMCHR 0
+_ACEOF
+
+
+fi
+echo "$as_me:$LINENO: checking whether strcoll is declared" >&5
+echo $ECHO_N "checking whether strcoll is declared... $ECHO_C" >&6
+if test "${ac_cv_have_decl_strcoll+set}" = set; then
+ echo $ECHO_N "(cached) $ECHO_C" >&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
+ char *p = (char *) strcoll;
+#endif
+
+ ;
+ return 0;
+}
+_ACEOF
+rm -f conftest.$ac_objext
+if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5
+ (eval $ac_compile) 2>conftest.er1
+ ac_status=$?
+ grep -v '^ *+' conftest.er1 >conftest.err
+ rm -f conftest.er1
+ cat conftest.err >&5
+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
+ (exit $ac_status); } &&
+ { ac_try='test -z "$ac_c_werror_flag"
+ || test ! -s conftest.err'
+ { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+ (eval $ac_try) 2>&5
+ ac_status=$?
+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
+ (exit $ac_status); }; } &&
+ { ac_try='test -s conftest.$ac_objext'
+ { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+ (eval $ac_try) 2>&5
+ ac_status=$?
+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
+ (exit $ac_status); }; }; then
+ ac_cv_have_decl_strcoll=yes
+else
+ echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+ac_cv_have_decl_strcoll=no
+fi
+rm -f conftest.err conftest.$ac_objext conftest.$ac_ext
+fi
+echo "$as_me:$LINENO: result: $ac_cv_have_decl_strcoll" >&5
+echo "${ECHO_T}$ac_cv_have_decl_strcoll" >&6
+if test $ac_cv_have_decl_strcoll = yes; then
+
+cat >>confdefs.h <<_ACEOF
+#define HAVE_DECL_STRCOLL 1
+_ACEOF
+
+
+else
+ cat >>confdefs.h <<_ACEOF
+#define HAVE_DECL_STRCOLL 0
+_ACEOF
+
+
+fi
+echo "$as_me:$LINENO: checking whether strerror is declared" >&5
+echo $ECHO_N "checking whether strerror is declared... $ECHO_C" >&6
+if test "${ac_cv_have_decl_strerror+set}" = set; then
+ echo $ECHO_N "(cached) $ECHO_C" >&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
+ char *p = (char *) strerror;
+#endif
+
+ ;
+ return 0;
+}
+_ACEOF
+rm -f conftest.$ac_objext
+if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5
+ (eval $ac_compile) 2>conftest.er1
+ ac_status=$?
+ grep -v '^ *+' conftest.er1 >conftest.err
+ rm -f conftest.er1
+ cat conftest.err >&5
+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
+ (exit $ac_status); } &&
+ { ac_try='test -z "$ac_c_werror_flag"
+ || test ! -s conftest.err'
+ { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+ (eval $ac_try) 2>&5
+ ac_status=$?
+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
+ (exit $ac_status); }; } &&
+ { ac_try='test -s conftest.$ac_objext'
+ { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+ (eval $ac_try) 2>&5
+ ac_status=$?
+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
+ (exit $ac_status); }; }; then
+ ac_cv_have_decl_strerror=yes
+else
+ echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+ac_cv_have_decl_strerror=no
+fi
+rm -f conftest.err conftest.$ac_objext conftest.$ac_ext
+fi
+echo "$as_me:$LINENO: result: $ac_cv_have_decl_strerror" >&5
+echo "${ECHO_T}$ac_cv_have_decl_strerror" >&6
+if test $ac_cv_have_decl_strerror = 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.
+# The Ultrix 4.2 mips builtin alloca declared by alloca.h only works
+# for constant arguments. Useless!
+echo "$as_me:$LINENO: checking for working alloca.h" >&5
+echo $ECHO_N "checking for working alloca.h... $ECHO_C" >&6
+if test "${ac_cv_working_alloca_h+set}" = set; then
+ echo $ECHO_N "(cached) $ECHO_C" >&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));
+ ;
+ return 0;
+}
+_ACEOF
+rm -f conftest.$ac_objext conftest$ac_exeext
+if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5
+ (eval $ac_link) 2>conftest.er1
+ ac_status=$?
+ grep -v '^ *+' conftest.er1 >conftest.err
+ rm -f conftest.er1
+ cat conftest.err >&5
+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
+ (exit $ac_status); } &&
+ { ac_try='test -z "$ac_c_werror_flag"
+ || test ! -s conftest.err'
+ { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+ (eval $ac_try) 2>&5
+ ac_status=$?
+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
+ (exit $ac_status); }; } &&
+ { ac_try='test -s conftest$ac_exeext'
+ { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+ (eval $ac_try) 2>&5
+ ac_status=$?
+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
+ (exit $ac_status); }; }; then
+ ac_cv_working_alloca_h=yes
+else
+ echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+ac_cv_working_alloca_h=no
+fi
+rm -f conftest.err conftest.$ac_objext \
+ conftest$ac_exeext conftest.$ac_ext
+fi
+echo "$as_me:$LINENO: result: $ac_cv_working_alloca_h" >&5
+echo "${ECHO_T}$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
+
+echo "$as_me:$LINENO: checking for alloca" >&5
+echo $ECHO_N "checking for alloca... $ECHO_C" >&6
+if test "${ac_cv_func_alloca_works+set}" = set; then
+ echo $ECHO_N "(cached) $ECHO_C" >&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
+# if 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);
+ ;
+ return 0;
+}
+_ACEOF
+rm -f conftest.$ac_objext conftest$ac_exeext
+if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5
+ (eval $ac_link) 2>conftest.er1
+ ac_status=$?
+ grep -v '^ *+' conftest.er1 >conftest.err
+ rm -f conftest.er1
+ cat conftest.err >&5
+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
+ (exit $ac_status); } &&
+ { ac_try='test -z "$ac_c_werror_flag"
+ || test ! -s conftest.err'
+ { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+ (eval $ac_try) 2>&5
+ ac_status=$?
+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
+ (exit $ac_status); }; } &&
+ { ac_try='test -s conftest$ac_exeext'
+ { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+ (eval $ac_try) 2>&5
+ ac_status=$?
+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
+ (exit $ac_status); }; }; then
+ ac_cv_func_alloca_works=yes
+else
+ echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+ac_cv_func_alloca_works=no
+fi
+rm -f conftest.err conftest.$ac_objext \
+ conftest$ac_exeext conftest.$ac_ext
+fi
+echo "$as_me:$LINENO: result: $ac_cv_func_alloca_works" >&5
+echo "${ECHO_T}$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=alloca.$ac_objext
+
+cat >>confdefs.h <<\_ACEOF
+#define C_ALLOCA 1
+_ACEOF
+
+
+echo "$as_me:$LINENO: checking whether \`alloca.c' needs Cray hooks" >&5
+echo $ECHO_N "checking whether \`alloca.c' needs Cray hooks... $ECHO_C" >&6
+if test "${ac_cv_os_cray+set}" = set; then
+ echo $ECHO_N "(cached) $ECHO_C" >&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
+echo "$as_me:$LINENO: result: $ac_cv_os_cray" >&5
+echo "${ECHO_T}$ac_cv_os_cray" >&6
+if test $ac_cv_os_cray = yes; then
+ for ac_func in _getb67 GETB67 getb67; do
+ as_ac_var=`echo "ac_cv_func_$ac_func" | $as_tr_sh`
+echo "$as_me:$LINENO: checking for $ac_func" >&5
+echo $ECHO_N "checking for $ac_func... $ECHO_C" >&6
+if eval "test \"\${$as_ac_var+set}\" = set"; then
+ echo $ECHO_N "(cached) $ECHO_C" >&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 gcc2 internal prototype to avoid an error. */
+#ifdef __cplusplus
+extern "C"
+{
+#endif
+/* We use char because int might match the return type of a gcc2
+ builtin and then its argument prototype would still apply. */
+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
+#else
+char (*f) () = $ac_func;
+#endif
+#ifdef __cplusplus
+}
+#endif
+
+int
+main ()
+{
+return f != $ac_func;
+ ;
+ return 0;
+}
+_ACEOF
+rm -f conftest.$ac_objext conftest$ac_exeext
+if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5
+ (eval $ac_link) 2>conftest.er1
+ ac_status=$?
+ grep -v '^ *+' conftest.er1 >conftest.err
+ rm -f conftest.er1
+ cat conftest.err >&5
+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
+ (exit $ac_status); } &&
+ { ac_try='test -z "$ac_c_werror_flag"
+ || test ! -s conftest.err'
+ { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+ (eval $ac_try) 2>&5
+ ac_status=$?
+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
+ (exit $ac_status); }; } &&
+ { ac_try='test -s conftest$ac_exeext'
+ { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+ (eval $ac_try) 2>&5
+ ac_status=$?
+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
+ (exit $ac_status); }; }; then
+ eval "$as_ac_var=yes"
+else
+ echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+eval "$as_ac_var=no"
+fi
+rm -f conftest.err conftest.$ac_objext \
+ conftest$ac_exeext conftest.$ac_ext
+fi
+echo "$as_me:$LINENO: result: `eval echo '${'$as_ac_var'}'`" >&5
+echo "${ECHO_T}`eval echo '${'$as_ac_var'}'`" >&6
+if test `eval echo '${'$as_ac_var'}'` = yes; then
+
+cat >>confdefs.h <<_ACEOF
+#define CRAY_STACKSEG_END $ac_func
+_ACEOF
+
+ break
+fi
+
+ done
+fi
+
+echo "$as_me:$LINENO: checking stack direction for C alloca" >&5
+echo $ECHO_N "checking stack direction for C alloca... $ECHO_C" >&6
+if test "${ac_cv_c_stack_direction+set}" = set; then
+ echo $ECHO_N "(cached) $ECHO_C" >&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. */
+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 ()
+{
+ exit (find_stack_direction () < 0);
+}
+_ACEOF
+rm -f conftest$ac_exeext
+if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5
+ (eval $ac_link) 2>&5
+ ac_status=$?
+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
+ (exit $ac_status); } && { ac_try='./conftest$ac_exeext'
+ { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+ (eval $ac_try) 2>&5
+ ac_status=$?
+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
+ (exit $ac_status); }; }; then
+ ac_cv_c_stack_direction=1
+else
+ echo "$as_me: program exited with status $ac_status" >&5
+echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+( exit $ac_status )
+ac_cv_c_stack_direction=-1
+fi
+rm -f core *.core gmon.out bb.out conftest$ac_exeext conftest.$ac_objext conftest.$ac_ext
+fi
+fi
+echo "$as_me:$LINENO: result: $ac_cv_c_stack_direction" >&5
+echo "${ECHO_T}$ac_cv_c_stack_direction" >&6
+
+cat >>confdefs.h <<_ACEOF
+#define STACK_DIRECTION $ac_cv_c_stack_direction
+_ACEOF
+
+
+fi
+
+echo "$as_me:$LINENO: checking for working strcoll" >&5
+echo $ECHO_N "checking for working strcoll... $ECHO_C" >&6
+if test "${ac_cv_func_strcoll_works+set}" = set; then
+ echo $ECHO_N "(cached) $ECHO_C" >&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 ()
+{
+exit (strcoll ("abc", "def") >= 0 ||
+ strcoll ("ABC", "DEF") >= 0 ||
+ strcoll ("123", "456") >= 0)
+ ;
+ return 0;
+}
+_ACEOF
+rm -f conftest$ac_exeext
+if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5
+ (eval $ac_link) 2>&5
+ ac_status=$?
+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
+ (exit $ac_status); } && { ac_try='./conftest$ac_exeext'
+ { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+ (eval $ac_try) 2>&5
+ ac_status=$?
+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
+ (exit $ac_status); }; }; then
+ ac_cv_func_strcoll_works=yes
+else
+ echo "$as_me: program exited with status $ac_status" >&5
+echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+( exit $ac_status )
+ac_cv_func_strcoll_works=no
+fi
+rm -f core *.core gmon.out bb.out conftest$ac_exeext conftest.$ac_objext conftest.$ac_ext
+fi
+fi
+echo "$as_me:$LINENO: result: $ac_cv_func_strcoll_works" >&5
+echo "${ECHO_T}$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=`echo "ac_cv_func_$ac_func" | $as_tr_sh`
+echo "$as_me:$LINENO: checking for $ac_func" >&5
+echo $ECHO_N "checking for $ac_func... $ECHO_C" >&6
+if eval "test \"\${$as_ac_var+set}\" = set"; then
+ echo $ECHO_N "(cached) $ECHO_C" >&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 gcc2 internal prototype to avoid an error. */
+#ifdef __cplusplus
+extern "C"
+{
+#endif
+/* We use char because int might match the return type of a gcc2
+ builtin and then its argument prototype would still apply. */
+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
+#else
+char (*f) () = $ac_func;
+#endif
+#ifdef __cplusplus
+}
+#endif
+
+int
+main ()
+{
+return f != $ac_func;
+ ;
+ return 0;
+}
+_ACEOF
+rm -f conftest.$ac_objext conftest$ac_exeext
+if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5
+ (eval $ac_link) 2>conftest.er1
+ ac_status=$?
+ grep -v '^ *+' conftest.er1 >conftest.err
+ rm -f conftest.er1
+ cat conftest.err >&5
+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
+ (exit $ac_status); } &&
+ { ac_try='test -z "$ac_c_werror_flag"
+ || test ! -s conftest.err'
+ { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+ (eval $ac_try) 2>&5
+ ac_status=$?
+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
+ (exit $ac_status); }; } &&
+ { ac_try='test -s conftest$ac_exeext'
+ { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+ (eval $ac_try) 2>&5
+ ac_status=$?
+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
+ (exit $ac_status); }; }; then
+ eval "$as_ac_var=yes"
+else
+ echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+eval "$as_ac_var=no"
+fi
+rm -f conftest.err conftest.$ac_objext \
+ conftest$ac_exeext conftest.$ac_ext
+fi
+echo "$as_me:$LINENO: result: `eval echo '${'$as_ac_var'}'`" >&5
+echo "${ECHO_T}`eval echo '${'$as_ac_var'}'`" >&6
+if test `eval echo '${'$as_ac_var'}'` = yes; then
+ cat >>confdefs.h <<_ACEOF
+#define `echo "HAVE_$ac_func" | $as_tr_cpp` 1
+_ACEOF
+
+echo "$as_me:$LINENO: checking for _doprnt" >&5
+echo $ECHO_N "checking for _doprnt... $ECHO_C" >&6
+if test "${ac_cv_func__doprnt+set}" = set; then
+ echo $ECHO_N "(cached) $ECHO_C" >&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 gcc2 internal prototype to avoid an error. */
+#ifdef __cplusplus
+extern "C"
+{
+#endif
+/* We use char because int might match the return type of a gcc2
+ builtin and then its argument prototype would still apply. */
+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
+#else
+char (*f) () = _doprnt;
+#endif
+#ifdef __cplusplus
+}
+#endif
+
+int
+main ()
+{
+return f != _doprnt;
+ ;
+ return 0;
+}
+_ACEOF
+rm -f conftest.$ac_objext conftest$ac_exeext
+if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5
+ (eval $ac_link) 2>conftest.er1
+ ac_status=$?
+ grep -v '^ *+' conftest.er1 >conftest.err
+ rm -f conftest.er1
+ cat conftest.err >&5
+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
+ (exit $ac_status); } &&
+ { ac_try='test -z "$ac_c_werror_flag"
+ || test ! -s conftest.err'
+ { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+ (eval $ac_try) 2>&5
+ ac_status=$?
+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
+ (exit $ac_status); }; } &&
+ { ac_try='test -s conftest$ac_exeext'
+ { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+ (eval $ac_try) 2>&5
+ ac_status=$?
+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
+ (exit $ac_status); }; }; then
+ ac_cv_func__doprnt=yes
+else
+ echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+ac_cv_func__doprnt=no
+fi
+rm -f conftest.err conftest.$ac_objext \
+ conftest$ac_exeext conftest.$ac_ext
+fi
+echo "$as_me:$LINENO: result: $ac_cv_func__doprnt" >&5
+echo "${ECHO_T}$ac_cv_func__doprnt" >&6
+if test $ac_cv_func__doprnt = 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 setvbuf sigaction sigprocmask \
+ sigsetmask strchr
+do
+as_ac_var=`echo "ac_cv_func_$ac_func" | $as_tr_sh`
+echo "$as_me:$LINENO: checking for $ac_func" >&5
+echo $ECHO_N "checking for $ac_func... $ECHO_C" >&6
+if eval "test \"\${$as_ac_var+set}\" = set"; then
+ echo $ECHO_N "(cached) $ECHO_C" >&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 gcc2 internal prototype to avoid an error. */
+#ifdef __cplusplus
+extern "C"
+{
+#endif
+/* We use char because int might match the return type of a gcc2
+ builtin and then its argument prototype would still apply. */
+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
+#else
+char (*f) () = $ac_func;
+#endif
+#ifdef __cplusplus
+}
+#endif
+
+int
+main ()
+{
+return f != $ac_func;
+ ;
+ return 0;
+}
+_ACEOF
+rm -f conftest.$ac_objext conftest$ac_exeext
+if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5
+ (eval $ac_link) 2>conftest.er1
+ ac_status=$?
+ grep -v '^ *+' conftest.er1 >conftest.err
+ rm -f conftest.er1
+ cat conftest.err >&5
+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
+ (exit $ac_status); } &&
+ { ac_try='test -z "$ac_c_werror_flag"
+ || test ! -s conftest.err'
+ { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+ (eval $ac_try) 2>&5
+ ac_status=$?
+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
+ (exit $ac_status); }; } &&
+ { ac_try='test -s conftest$ac_exeext'
+ { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+ (eval $ac_try) 2>&5
+ ac_status=$?
+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
+ (exit $ac_status); }; }; then
+ eval "$as_ac_var=yes"
+else
+ echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+eval "$as_ac_var=no"
+fi
+rm -f conftest.err conftest.$ac_objext \
+ conftest$ac_exeext conftest.$ac_ext
+fi
+echo "$as_me:$LINENO: result: `eval echo '${'$as_ac_var'}'`" >&5
+echo "${ECHO_T}`eval echo '${'$as_ac_var'}'`" >&6
+if test `eval echo '${'$as_ac_var'}'` = yes; then
+ cat >>confdefs.h <<_ACEOF
+#define `echo "HAVE_$ac_func" | $as_tr_cpp` 1
+_ACEOF
+
+fi
+done
+
+
+
+
+
+for ac_func in memcpy memmove strdup strerror
+do
+as_ac_var=`echo "ac_cv_func_$ac_func" | $as_tr_sh`
+echo "$as_me:$LINENO: checking for $ac_func" >&5
+echo $ECHO_N "checking for $ac_func... $ECHO_C" >&6
+if eval "test \"\${$as_ac_var+set}\" = set"; then
+ echo $ECHO_N "(cached) $ECHO_C" >&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 gcc2 internal prototype to avoid an error. */
+#ifdef __cplusplus
+extern "C"
+{
+#endif
+/* We use char because int might match the return type of a gcc2
+ builtin and then its argument prototype would still apply. */
+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
+#else
+char (*f) () = $ac_func;
+#endif
+#ifdef __cplusplus
+}
+#endif
+
+int
+main ()
+{
+return f != $ac_func;
+ ;
+ return 0;
+}
+_ACEOF
+rm -f conftest.$ac_objext conftest$ac_exeext
+if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5
+ (eval $ac_link) 2>conftest.er1
+ ac_status=$?
+ grep -v '^ *+' conftest.er1 >conftest.err
+ rm -f conftest.er1
+ cat conftest.err >&5
+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
+ (exit $ac_status); } &&
+ { ac_try='test -z "$ac_c_werror_flag"
+ || test ! -s conftest.err'
+ { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+ (eval $ac_try) 2>&5
+ ac_status=$?
+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
+ (exit $ac_status); }; } &&
+ { ac_try='test -s conftest$ac_exeext'
+ { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+ (eval $ac_try) 2>&5
+ ac_status=$?
+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
+ (exit $ac_status); }; }; then
+ eval "$as_ac_var=yes"
+else
+ echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+eval "$as_ac_var=no"
+fi
+rm -f conftest.err conftest.$ac_objext \
+ conftest$ac_exeext conftest.$ac_ext
+fi
+echo "$as_me:$LINENO: result: `eval echo '${'$as_ac_var'}'`" >&5
+echo "${ECHO_T}`eval echo '${'$as_ac_var'}'`" >&6
+if test `eval echo '${'$as_ac_var'}'` = yes; then
+ cat >>confdefs.h <<_ACEOF
+#define `echo "HAVE_$ac_func" | $as_tr_cpp` 1
+_ACEOF
+
+else
+ case $LIBOBJS in
+ "$ac_func.$ac_objext" | \
+ *" $ac_func.$ac_objext" | \
+ "$ac_func.$ac_objext "* | \
+ *" $ac_func.$ac_objext "* ) ;;
+ *) LIBOBJS="$LIBOBJS $ac_func.$ac_objext" ;;
+esac
+
+fi
+done
+
+
+
+# strcasecmp and strncasecmp, gnulib-style.
+
+
+
+for ac_func in strcasecmp
+do
+as_ac_var=`echo "ac_cv_func_$ac_func" | $as_tr_sh`
+echo "$as_me:$LINENO: checking for $ac_func" >&5
+echo $ECHO_N "checking for $ac_func... $ECHO_C" >&6
+if eval "test \"\${$as_ac_var+set}\" = set"; then
+ echo $ECHO_N "(cached) $ECHO_C" >&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 gcc2 internal prototype to avoid an error. */
+#ifdef __cplusplus
+extern "C"
+{
+#endif
+/* We use char because int might match the return type of a gcc2
+ builtin and then its argument prototype would still apply. */
+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
+#else
+char (*f) () = $ac_func;
+#endif
+#ifdef __cplusplus
+}
+#endif
+
+int
+main ()
+{
+return f != $ac_func;
+ ;
+ return 0;
+}
+_ACEOF
+rm -f conftest.$ac_objext conftest$ac_exeext
+if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5
+ (eval $ac_link) 2>conftest.er1
+ ac_status=$?
+ grep -v '^ *+' conftest.er1 >conftest.err
+ rm -f conftest.er1
+ cat conftest.err >&5
+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
+ (exit $ac_status); } &&
+ { ac_try='test -z "$ac_c_werror_flag"
+ || test ! -s conftest.err'
+ { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+ (eval $ac_try) 2>&5
+ ac_status=$?
+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
+ (exit $ac_status); }; } &&
+ { ac_try='test -s conftest$ac_exeext'
+ { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+ (eval $ac_try) 2>&5
+ ac_status=$?
+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
+ (exit $ac_status); }; }; then
+ eval "$as_ac_var=yes"
+else
+ echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+eval "$as_ac_var=no"
+fi
+rm -f conftest.err conftest.$ac_objext \
+ conftest$ac_exeext conftest.$ac_ext
+fi
+echo "$as_me:$LINENO: result: `eval echo '${'$as_ac_var'}'`" >&5
+echo "${ECHO_T}`eval echo '${'$as_ac_var'}'`" >&6
+if test `eval echo '${'$as_ac_var'}'` = yes; then
+ cat >>confdefs.h <<_ACEOF
+#define `echo "HAVE_$ac_func" | $as_tr_cpp` 1
+_ACEOF
+
+else
+ case $LIBOBJS in
+ "$ac_func.$ac_objext" | \
+ *" $ac_func.$ac_objext" | \
+ "$ac_func.$ac_objext "* | \
+ *" $ac_func.$ac_objext "* ) ;;
+ *) LIBOBJS="$LIBOBJS $ac_func.$ac_objext" ;;
+esac
+
+fi
+done
+
+
+ if test $ac_cv_func_strcasecmp = no; then
+
+ :
+
+ fi
+
+
+
+for ac_func in strncasecmp
+do
+as_ac_var=`echo "ac_cv_func_$ac_func" | $as_tr_sh`
+echo "$as_me:$LINENO: checking for $ac_func" >&5
+echo $ECHO_N "checking for $ac_func... $ECHO_C" >&6
+if eval "test \"\${$as_ac_var+set}\" = set"; then
+ echo $ECHO_N "(cached) $ECHO_C" >&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 gcc2 internal prototype to avoid an error. */
+#ifdef __cplusplus
+extern "C"
+{
+#endif
+/* We use char because int might match the return type of a gcc2
+ builtin and then its argument prototype would still apply. */
+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
+#else
+char (*f) () = $ac_func;
+#endif
+#ifdef __cplusplus
+}
+#endif
+
+int
+main ()
+{
+return f != $ac_func;
+ ;
+ return 0;
+}
+_ACEOF
+rm -f conftest.$ac_objext conftest$ac_exeext
+if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5
+ (eval $ac_link) 2>conftest.er1
+ ac_status=$?
+ grep -v '^ *+' conftest.er1 >conftest.err
+ rm -f conftest.er1
+ cat conftest.err >&5
+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
+ (exit $ac_status); } &&
+ { ac_try='test -z "$ac_c_werror_flag"
+ || test ! -s conftest.err'
+ { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+ (eval $ac_try) 2>&5
+ ac_status=$?
+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
+ (exit $ac_status); }; } &&
+ { ac_try='test -s conftest$ac_exeext'
+ { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+ (eval $ac_try) 2>&5
+ ac_status=$?
+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
+ (exit $ac_status); }; }; then
+ eval "$as_ac_var=yes"
+else
+ echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+eval "$as_ac_var=no"
+fi
+rm -f conftest.err conftest.$ac_objext \
+ conftest$ac_exeext conftest.$ac_ext
+fi
+echo "$as_me:$LINENO: result: `eval echo '${'$as_ac_var'}'`" >&5
+echo "${ECHO_T}`eval echo '${'$as_ac_var'}'`" >&6
+if test `eval echo '${'$as_ac_var'}'` = yes; then
+ cat >>confdefs.h <<_ACEOF
+#define `echo "HAVE_$ac_func" | $as_tr_cpp` 1
+_ACEOF
+
+else
+ case $LIBOBJS in
+ "$ac_func.$ac_objext" | \
+ *" $ac_func.$ac_objext" | \
+ "$ac_func.$ac_objext "* | \
+ *" $ac_func.$ac_objext "* ) ;;
+ *) LIBOBJS="$LIBOBJS $ac_func.$ac_objext" ;;
+esac
+
+fi
+done
+
+
+ if test $ac_cv_func_strncasecmp = no; then
+
+ :
+
+ fi
+
+
+
+# We want to recognize djgpp to avoid the useless warning about no
+# term library.
+# Make sure we can run config.sub.
+$ac_config_sub sun4 >/dev/null 2>&1 ||
+ { { echo "$as_me:$LINENO: error: cannot run $ac_config_sub" >&5
+echo "$as_me: error: cannot run $ac_config_sub" >&2;}
+ { (exit 1); exit 1; }; }
+
+echo "$as_me:$LINENO: checking build system type" >&5
+echo $ECHO_N "checking build system type... $ECHO_C" >&6
+if test "${ac_cv_build+set}" = set; then
+ echo $ECHO_N "(cached) $ECHO_C" >&6
+else
+ ac_cv_build_alias=$build_alias
+test -z "$ac_cv_build_alias" &&
+ ac_cv_build_alias=`$ac_config_guess`
+test -z "$ac_cv_build_alias" &&
+ { { echo "$as_me:$LINENO: error: cannot guess build type; you must specify one" >&5
+echo "$as_me: error: cannot guess build type; you must specify one" >&2;}
+ { (exit 1); exit 1; }; }
+ac_cv_build=`$ac_config_sub $ac_cv_build_alias` ||
+ { { echo "$as_me:$LINENO: error: $ac_config_sub $ac_cv_build_alias failed" >&5
+echo "$as_me: error: $ac_config_sub $ac_cv_build_alias failed" >&2;}
+ { (exit 1); exit 1; }; }
+
+fi
+echo "$as_me:$LINENO: result: $ac_cv_build" >&5
+echo "${ECHO_T}$ac_cv_build" >&6
+build=$ac_cv_build
+build_cpu=`echo $ac_cv_build | sed 's/^\([^-]*\)-\([^-]*\)-\(.*\)$/\1/'`
+build_vendor=`echo $ac_cv_build | sed 's/^\([^-]*\)-\([^-]*\)-\(.*\)$/\2/'`
+build_os=`echo $ac_cv_build | sed 's/^\([^-]*\)-\([^-]*\)-\(.*\)$/\3/'`
+
+
+
+# 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
+ { echo "$as_me:$LINENO: Doing configure of native tools (${build})." >&5
+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.
+ 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
+ { echo "$as_me:$LINENO: Continuing with main configure (${host})." >&5
+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=`echo "ac_cv_lib_${termlib}''_tgetent" | $as_tr_sh`
+echo "$as_me:$LINENO: checking for tgetent in -l${termlib}" >&5
+echo $ECHO_N "checking for tgetent in -l${termlib}... $ECHO_C" >&6
+if eval "test \"\${$as_ac_Lib+set}\" = set"; then
+ echo $ECHO_N "(cached) $ECHO_C" >&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 gcc2 internal prototype to avoid an error. */
+#ifdef __cplusplus
+extern "C"
+#endif
+/* We use char because int might match the return type of a gcc2
+ builtin and then its argument prototype would still apply. */
+char tgetent ();
+int
+main ()
+{
+tgetent ();
+ ;
+ return 0;
+}
+_ACEOF
+rm -f conftest.$ac_objext conftest$ac_exeext
+if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5
+ (eval $ac_link) 2>conftest.er1
+ ac_status=$?
+ grep -v '^ *+' conftest.er1 >conftest.err
+ rm -f conftest.er1
+ cat conftest.err >&5
+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
+ (exit $ac_status); } &&
+ { ac_try='test -z "$ac_c_werror_flag"
+ || test ! -s conftest.err'
+ { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+ (eval $ac_try) 2>&5
+ ac_status=$?
+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
+ (exit $ac_status); }; } &&
+ { ac_try='test -s conftest$ac_exeext'
+ { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+ (eval $ac_try) 2>&5
+ ac_status=$?
+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
+ (exit $ac_status); }; }; then
+ eval "$as_ac_Lib=yes"
+else
+ echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+eval "$as_ac_Lib=no"
+fi
+rm -f conftest.err conftest.$ac_objext \
+ conftest$ac_exeext conftest.$ac_ext
+LIBS=$ac_check_lib_save_LIBS
+fi
+echo "$as_me:$LINENO: result: `eval echo '${'$as_ac_Lib'}'`" >&5
+echo "${ECHO_T}`eval echo '${'$as_ac_Lib'}'`" >&6
+if test `eval echo '${'$as_ac_Lib'}'` = 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
+ { echo "$as_me:$LINENO: WARNING: probably need a terminal library, one of: ${TERMLIB_VARIANTS}" >&5
+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.
+echo "$as_me:$LINENO: checking for library with termcap variables" >&5
+echo $ECHO_N "checking for library with termcap variables... $ECHO_C" >&6
+if test "${ac_cv_var_ospeed+set}" = set; then
+ echo $ECHO_N "(cached) $ECHO_C" >&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 { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5
+ (eval $ac_link) 2>conftest.er1
+ ac_status=$?
+ grep -v '^ *+' conftest.er1 >conftest.err
+ rm -f conftest.er1
+ cat conftest.err >&5
+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
+ (exit $ac_status); } &&
+ { ac_try='test -z "$ac_c_werror_flag"
+ || test ! -s conftest.err'
+ { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+ (eval $ac_try) 2>&5
+ ac_status=$?
+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
+ (exit $ac_status); }; } &&
+ { ac_try='test -s conftest$ac_exeext'
+ { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+ (eval $ac_try) 2>&5
+ ac_status=$?
+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
+ (exit $ac_status); }; }; then
+ ac_cv_var_ospeed=$trylib; break
+else
+ echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+fi
+rm -f conftest.err conftest.$ac_objext \
+ conftest$ac_exeext conftest.$ac_ext
+done
+LIBS=$oldLIBS
+
+fi
+
+echo "$as_me:$LINENO: result: $ac_cv_var_ospeed" >&5
+echo "${ECHO_T}$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=`echo "ac_cv_header_$ac_header" | $as_tr_sh`
+if eval "test \"\${$as_ac_Header+set}\" = set"; then
+ echo "$as_me:$LINENO: checking for $ac_header" >&5
+echo $ECHO_N "checking for $ac_header... $ECHO_C" >&6
+if eval "test \"\${$as_ac_Header+set}\" = set"; then
+ echo $ECHO_N "(cached) $ECHO_C" >&6
+fi
+echo "$as_me:$LINENO: result: `eval echo '${'$as_ac_Header'}'`" >&5
+echo "${ECHO_T}`eval echo '${'$as_ac_Header'}'`" >&6
+else
+ # Is the header compilable?
+echo "$as_me:$LINENO: checking $ac_header usability" >&5
+echo $ECHO_N "checking $ac_header usability... $ECHO_C" >&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 { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5
+ (eval $ac_compile) 2>conftest.er1
+ ac_status=$?
+ grep -v '^ *+' conftest.er1 >conftest.err
+ rm -f conftest.er1
+ cat conftest.err >&5
+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
+ (exit $ac_status); } &&
+ { ac_try='test -z "$ac_c_werror_flag"
+ || test ! -s conftest.err'
+ { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+ (eval $ac_try) 2>&5
+ ac_status=$?
+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
+ (exit $ac_status); }; } &&
+ { ac_try='test -s conftest.$ac_objext'
+ { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+ (eval $ac_try) 2>&5
+ ac_status=$?
+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
+ (exit $ac_status); }; }; then
+ ac_header_compiler=yes
+else
+ echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+ac_header_compiler=no
+fi
+rm -f conftest.err conftest.$ac_objext conftest.$ac_ext
+echo "$as_me:$LINENO: result: $ac_header_compiler" >&5
+echo "${ECHO_T}$ac_header_compiler" >&6
+
+# Is the header present?
+echo "$as_me:$LINENO: checking $ac_header presence" >&5
+echo $ECHO_N "checking $ac_header presence... $ECHO_C" >&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 { (eval echo "$as_me:$LINENO: \"$ac_cpp conftest.$ac_ext\"") >&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
+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
+ (exit $ac_status); } >/dev/null; then
+ if test -s conftest.err; then
+ ac_cpp_err=$ac_c_preproc_warn_flag
+ ac_cpp_err=$ac_cpp_err$ac_c_werror_flag
+ else
+ ac_cpp_err=
+ fi
+else
+ ac_cpp_err=yes
+fi
+if test -z "$ac_cpp_err"; then
+ ac_header_preproc=yes
+else
+ 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
+echo "$as_me:$LINENO: result: $ac_header_preproc" >&5
+echo "${ECHO_T}$ac_header_preproc" >&6
+
+# So? What about this header?
+case $ac_header_compiler:$ac_header_preproc:$ac_c_preproc_warn_flag in
+ yes:no: )
+ { echo "$as_me:$LINENO: WARNING: $ac_header: accepted by the compiler, rejected by the preprocessor!" >&5
+echo "$as_me: WARNING: $ac_header: accepted by the compiler, rejected by the preprocessor!" >&2;}
+ { echo "$as_me:$LINENO: WARNING: $ac_header: proceeding with the compiler's result" >&5
+echo "$as_me: WARNING: $ac_header: proceeding with the compiler's result" >&2;}
+ ac_header_preproc=yes
+ ;;
+ no:yes:* )
+ { echo "$as_me:$LINENO: WARNING: $ac_header: present but cannot be compiled" >&5
+echo "$as_me: WARNING: $ac_header: present but cannot be compiled" >&2;}
+ { echo "$as_me:$LINENO: WARNING: $ac_header: check for missing prerequisite headers?" >&5
+echo "$as_me: WARNING: $ac_header: check for missing prerequisite headers?" >&2;}
+ { echo "$as_me:$LINENO: WARNING: $ac_header: see the Autoconf documentation" >&5
+echo "$as_me: WARNING: $ac_header: see the Autoconf documentation" >&2;}
+ { echo "$as_me:$LINENO: WARNING: $ac_header: section \"Present But Cannot Be Compiled\"" >&5
+echo "$as_me: WARNING: $ac_header: section \"Present But Cannot Be Compiled\"" >&2;}
+ { echo "$as_me:$LINENO: WARNING: $ac_header: proceeding with the preprocessor's result" >&5
+echo "$as_me: WARNING: $ac_header: proceeding with the preprocessor's result" >&2;}
+ { echo "$as_me:$LINENO: WARNING: $ac_header: in the future, the compiler will take precedence" >&5
+echo "$as_me: WARNING: $ac_header: in the future, the compiler will take precedence" >&2;}
+ (
+ cat <<\_ASBOX
+## -------------------------------------- ##
+## Report this to the GNU Texinfo lists. ##
+## -------------------------------------- ##
+_ASBOX
+ ) |
+ sed "s/^/$as_me: WARNING: /" >&2
+ ;;
+esac
+echo "$as_me:$LINENO: checking for $ac_header" >&5
+echo $ECHO_N "checking for $ac_header... $ECHO_C" >&6
+if eval "test \"\${$as_ac_Header+set}\" = set"; then
+ echo $ECHO_N "(cached) $ECHO_C" >&6
+else
+ eval "$as_ac_Header=\$ac_header_preproc"
+fi
+echo "$as_me:$LINENO: result: `eval echo '${'$as_ac_Header'}'`" >&5
+echo "${ECHO_T}`eval echo '${'$as_ac_Header'}'`" >&6
+
+fi
+if test `eval echo '${'$as_ac_Header'}'` = yes; then
+ cat >>confdefs.h <<_ACEOF
+#define `echo "HAVE_$ac_header" | $as_tr_cpp` 1
+_ACEOF
+
+fi
+
+done
+
+fi
+
+# gnulib.
+
+
+
+
+
+for ac_header in $gl_header_list
+do
+as_ac_Header=`echo "ac_cv_header_$ac_header" | $as_tr_sh`
+if eval "test \"\${$as_ac_Header+set}\" = set"; then
+ echo "$as_me:$LINENO: checking for $ac_header" >&5
+echo $ECHO_N "checking for $ac_header... $ECHO_C" >&6
+if eval "test \"\${$as_ac_Header+set}\" = set"; then
+ echo $ECHO_N "(cached) $ECHO_C" >&6
+fi
+echo "$as_me:$LINENO: result: `eval echo '${'$as_ac_Header'}'`" >&5
+echo "${ECHO_T}`eval echo '${'$as_ac_Header'}'`" >&6
+else
+ # Is the header compilable?
+echo "$as_me:$LINENO: checking $ac_header usability" >&5
+echo $ECHO_N "checking $ac_header usability... $ECHO_C" >&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 { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5
+ (eval $ac_compile) 2>conftest.er1
+ ac_status=$?
+ grep -v '^ *+' conftest.er1 >conftest.err
+ rm -f conftest.er1
+ cat conftest.err >&5
+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
+ (exit $ac_status); } &&
+ { ac_try='test -z "$ac_c_werror_flag"
+ || test ! -s conftest.err'
+ { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+ (eval $ac_try) 2>&5
+ ac_status=$?
+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
+ (exit $ac_status); }; } &&
+ { ac_try='test -s conftest.$ac_objext'
+ { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+ (eval $ac_try) 2>&5
+ ac_status=$?
+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
+ (exit $ac_status); }; }; then
+ ac_header_compiler=yes
+else
+ echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+ac_header_compiler=no
+fi
+rm -f conftest.err conftest.$ac_objext conftest.$ac_ext
+echo "$as_me:$LINENO: result: $ac_header_compiler" >&5
+echo "${ECHO_T}$ac_header_compiler" >&6
+
+# Is the header present?
+echo "$as_me:$LINENO: checking $ac_header presence" >&5
+echo $ECHO_N "checking $ac_header presence... $ECHO_C" >&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 { (eval echo "$as_me:$LINENO: \"$ac_cpp conftest.$ac_ext\"") >&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
+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
+ (exit $ac_status); } >/dev/null; then
+ if test -s conftest.err; then
+ ac_cpp_err=$ac_c_preproc_warn_flag
+ ac_cpp_err=$ac_cpp_err$ac_c_werror_flag
+ else
+ ac_cpp_err=
+ fi
+else
+ ac_cpp_err=yes
+fi
+if test -z "$ac_cpp_err"; then
+ ac_header_preproc=yes
+else
+ 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
+echo "$as_me:$LINENO: result: $ac_header_preproc" >&5
+echo "${ECHO_T}$ac_header_preproc" >&6
+
+# So? What about this header?
+case $ac_header_compiler:$ac_header_preproc:$ac_c_preproc_warn_flag in
+ yes:no: )
+ { echo "$as_me:$LINENO: WARNING: $ac_header: accepted by the compiler, rejected by the preprocessor!" >&5
+echo "$as_me: WARNING: $ac_header: accepted by the compiler, rejected by the preprocessor!" >&2;}
+ { echo "$as_me:$LINENO: WARNING: $ac_header: proceeding with the compiler's result" >&5
+echo "$as_me: WARNING: $ac_header: proceeding with the compiler's result" >&2;}
+ ac_header_preproc=yes
+ ;;
+ no:yes:* )
+ { echo "$as_me:$LINENO: WARNING: $ac_header: present but cannot be compiled" >&5
+echo "$as_me: WARNING: $ac_header: present but cannot be compiled" >&2;}
+ { echo "$as_me:$LINENO: WARNING: $ac_header: check for missing prerequisite headers?" >&5
+echo "$as_me: WARNING: $ac_header: check for missing prerequisite headers?" >&2;}
+ { echo "$as_me:$LINENO: WARNING: $ac_header: see the Autoconf documentation" >&5
+echo "$as_me: WARNING: $ac_header: see the Autoconf documentation" >&2;}
+ { echo "$as_me:$LINENO: WARNING: $ac_header: section \"Present But Cannot Be Compiled\"" >&5
+echo "$as_me: WARNING: $ac_header: section \"Present But Cannot Be Compiled\"" >&2;}
+ { echo "$as_me:$LINENO: WARNING: $ac_header: proceeding with the preprocessor's result" >&5
+echo "$as_me: WARNING: $ac_header: proceeding with the preprocessor's result" >&2;}
+ { echo "$as_me:$LINENO: WARNING: $ac_header: in the future, the compiler will take precedence" >&5
+echo "$as_me: WARNING: $ac_header: in the future, the compiler will take precedence" >&2;}
+ (
+ cat <<\_ASBOX
+## -------------------------------------- ##
+## Report this to the GNU Texinfo lists. ##
+## -------------------------------------- ##
+_ASBOX
+ ) |
+ sed "s/^/$as_me: WARNING: /" >&2
+ ;;
+esac
+echo "$as_me:$LINENO: checking for $ac_header" >&5
+echo $ECHO_N "checking for $ac_header... $ECHO_C" >&6
+if eval "test \"\${$as_ac_Header+set}\" = set"; then
+ echo $ECHO_N "(cached) $ECHO_C" >&6
+else
+ eval "$as_ac_Header=\$ac_header_preproc"
+fi
+echo "$as_me:$LINENO: result: `eval echo '${'$as_ac_Header'}'`" >&5
+echo "${ECHO_T}`eval echo '${'$as_ac_Header'}'`" >&6
+
+fi
+if test `eval echo '${'$as_ac_Header'}'` = yes; then
+ cat >>confdefs.h <<_ACEOF
+#define `echo "HAVE_$ac_header" | $as_tr_cpp` 1
+_ACEOF
+
+fi
+
+done
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ echo "$as_me:$LINENO: checking whether getenv is declared" >&5
+echo $ECHO_N "checking whether getenv is declared... $ECHO_C" >&6
+if test "${ac_cv_have_decl_getenv+set}" = set; then
+ echo $ECHO_N "(cached) $ECHO_C" >&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
+ char *p = (char *) getenv;
+#endif
+
+ ;
+ return 0;
+}
+_ACEOF
+rm -f conftest.$ac_objext
+if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5
+ (eval $ac_compile) 2>conftest.er1
+ ac_status=$?
+ grep -v '^ *+' conftest.er1 >conftest.err
+ rm -f conftest.er1
+ cat conftest.err >&5
+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
+ (exit $ac_status); } &&
+ { ac_try='test -z "$ac_c_werror_flag"
+ || test ! -s conftest.err'
+ { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+ (eval $ac_try) 2>&5
+ ac_status=$?
+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
+ (exit $ac_status); }; } &&
+ { ac_try='test -s conftest.$ac_objext'
+ { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+ (eval $ac_try) 2>&5
+ ac_status=$?
+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
+ (exit $ac_status); }; }; then
+ ac_cv_have_decl_getenv=yes
+else
+ echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+ac_cv_have_decl_getenv=no
+fi
+rm -f conftest.err conftest.$ac_objext conftest.$ac_ext
+fi
+echo "$as_me:$LINENO: result: $ac_cv_have_decl_getenv" >&5
+echo "${ECHO_T}$ac_cv_have_decl_getenv" >&6
+if test $ac_cv_have_decl_getenv = yes; then
+
+cat >>confdefs.h <<_ACEOF
+#define HAVE_DECL_GETENV 1
+_ACEOF
+
+
+else
+ cat >>confdefs.h <<_ACEOF
+#define HAVE_DECL_GETENV 0
+_ACEOF
+
+
+fi
+
+
+
+
+ echo "$as_me:$LINENO: checking for inttypes.h" >&5
+echo $ECHO_N "checking for inttypes.h... $ECHO_C" >&6
+if test "${gl_cv_header_inttypes_h+set}" = set; then
+ echo $ECHO_N "(cached) $ECHO_C" >&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 <inttypes.h>
+int
+main ()
+{
+uintmax_t i = (uintmax_t) -1;
+ ;
+ return 0;
+}
+_ACEOF
+rm -f conftest.$ac_objext
+if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5
+ (eval $ac_compile) 2>conftest.er1
+ ac_status=$?
+ grep -v '^ *+' conftest.er1 >conftest.err
+ rm -f conftest.er1
+ cat conftest.err >&5
+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
+ (exit $ac_status); } &&
+ { ac_try='test -z "$ac_c_werror_flag"
+ || test ! -s conftest.err'
+ { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+ (eval $ac_try) 2>&5
+ ac_status=$?
+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
+ (exit $ac_status); }; } &&
+ { ac_try='test -s conftest.$ac_objext'
+ { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+ (eval $ac_try) 2>&5
+ ac_status=$?
+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
+ (exit $ac_status); }; }; then
+ gl_cv_header_inttypes_h=yes
+else
+ echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+gl_cv_header_inttypes_h=no
+fi
+rm -f conftest.err conftest.$ac_objext conftest.$ac_ext
+fi
+echo "$as_me:$LINENO: result: $gl_cv_header_inttypes_h" >&5
+echo "${ECHO_T}$gl_cv_header_inttypes_h" >&6
+ if test $gl_cv_header_inttypes_h = yes; then
+
+cat >>confdefs.h <<_ACEOF
+#define HAVE_INTTYPES_H_WITH_UINTMAX 1
+_ACEOF
+
+ fi
+
+
+ echo "$as_me:$LINENO: checking for stdint.h" >&5
+echo $ECHO_N "checking for stdint.h... $ECHO_C" >&6
+if test "${gl_cv_header_stdint_h+set}" = set; then
+ echo $ECHO_N "(cached) $ECHO_C" >&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 <stdint.h>
+int
+main ()
+{
+uintmax_t i = (uintmax_t) -1;
+ ;
+ return 0;
+}
+_ACEOF
+rm -f conftest.$ac_objext
+if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5
+ (eval $ac_compile) 2>conftest.er1
+ ac_status=$?
+ grep -v '^ *+' conftest.er1 >conftest.err
+ rm -f conftest.er1
+ cat conftest.err >&5
+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
+ (exit $ac_status); } &&
+ { ac_try='test -z "$ac_c_werror_flag"
+ || test ! -s conftest.err'
+ { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+ (eval $ac_try) 2>&5
+ ac_status=$?
+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
+ (exit $ac_status); }; } &&
+ { ac_try='test -s conftest.$ac_objext'
+ { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+ (eval $ac_try) 2>&5
+ ac_status=$?
+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
+ (exit $ac_status); }; }; then
+ gl_cv_header_stdint_h=yes
+else
+ echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+gl_cv_header_stdint_h=no
+fi
+rm -f conftest.err conftest.$ac_objext conftest.$ac_ext
+fi
+echo "$as_me:$LINENO: result: $gl_cv_header_stdint_h" >&5
+echo "${ECHO_T}$gl_cv_header_stdint_h" >&6
+ if test $gl_cv_header_stdint_h = yes; then
+
+cat >>confdefs.h <<_ACEOF
+#define HAVE_STDINT_H_WITH_UINTMAX 1
+_ACEOF
+
+ fi
+
+
+ echo "$as_me:$LINENO: checking for unsigned long long" >&5
+echo $ECHO_N "checking for unsigned long long... $ECHO_C" >&6
+if test "${ac_cv_type_unsigned_long_long+set}" = set; then
+ echo $ECHO_N "(cached) $ECHO_C" >&6
+else
+ cat >conftest.$ac_ext <<_ACEOF
+/* confdefs.h. */
+_ACEOF
+cat confdefs.h >>conftest.$ac_ext
+cat >>conftest.$ac_ext <<_ACEOF
+/* end confdefs.h. */
+unsigned long long ull = 1ULL; int i = 63;
+int
+main ()
+{
+unsigned long long ullmax = (unsigned long long) -1;
+ return ull << i | ull >> i | ullmax / ull | ullmax % ull;
+ ;
+ return 0;
+}
+_ACEOF
+rm -f conftest.$ac_objext conftest$ac_exeext
+if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5
+ (eval $ac_link) 2>conftest.er1
+ ac_status=$?
+ grep -v '^ *+' conftest.er1 >conftest.err
+ rm -f conftest.er1
+ cat conftest.err >&5
+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
+ (exit $ac_status); } &&
+ { ac_try='test -z "$ac_c_werror_flag"
+ || test ! -s conftest.err'
+ { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+ (eval $ac_try) 2>&5
+ ac_status=$?
+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
+ (exit $ac_status); }; } &&
+ { ac_try='test -s conftest$ac_exeext'
+ { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+ (eval $ac_try) 2>&5
+ ac_status=$?
+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
+ (exit $ac_status); }; }; then
+ ac_cv_type_unsigned_long_long=yes
+else
+ echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+ac_cv_type_unsigned_long_long=no
+fi
+rm -f conftest.err conftest.$ac_objext \
+ conftest$ac_exeext conftest.$ac_ext
+fi
+echo "$as_me:$LINENO: result: $ac_cv_type_unsigned_long_long" >&5
+echo "${ECHO_T}$ac_cv_type_unsigned_long_long" >&6
+ if test $ac_cv_type_unsigned_long_long = yes; then
+
+cat >>confdefs.h <<\_ACEOF
+#define HAVE_UNSIGNED_LONG_LONG 1
+_ACEOF
+
+ fi
+
+
+
+
+ if test $gl_cv_header_inttypes_h = no && test $gl_cv_header_stdint_h = no; then
+
+ test $ac_cv_type_unsigned_long_long = yes \
+ && ac_type='unsigned long long' \
+ || ac_type='unsigned long'
+
+cat >>confdefs.h <<_ACEOF
+#define uintmax_t $ac_type
+_ACEOF
+
+ else
+
+cat >>confdefs.h <<\_ACEOF
+#define HAVE_UINTMAX_T 1
+_ACEOF
+
+ fi
+
+
+for ac_func in mkstemp
+do
+as_ac_var=`echo "ac_cv_func_$ac_func" | $as_tr_sh`
+echo "$as_me:$LINENO: checking for $ac_func" >&5
+echo $ECHO_N "checking for $ac_func... $ECHO_C" >&6
+if eval "test \"\${$as_ac_var+set}\" = set"; then
+ echo $ECHO_N "(cached) $ECHO_C" >&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 gcc2 internal prototype to avoid an error. */
+#ifdef __cplusplus
+extern "C"
+{
+#endif
+/* We use char because int might match the return type of a gcc2
+ builtin and then its argument prototype would still apply. */
+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
+#else
+char (*f) () = $ac_func;
+#endif
+#ifdef __cplusplus
+}
+#endif
+
+int
+main ()
+{
+return f != $ac_func;
+ ;
+ return 0;
+}
+_ACEOF
+rm -f conftest.$ac_objext conftest$ac_exeext
+if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5
+ (eval $ac_link) 2>conftest.er1
+ ac_status=$?
+ grep -v '^ *+' conftest.er1 >conftest.err
+ rm -f conftest.er1
+ cat conftest.err >&5
+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
+ (exit $ac_status); } &&
+ { ac_try='test -z "$ac_c_werror_flag"
+ || test ! -s conftest.err'
+ { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+ (eval $ac_try) 2>&5
+ ac_status=$?
+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
+ (exit $ac_status); }; } &&
+ { ac_try='test -s conftest$ac_exeext'
+ { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+ (eval $ac_try) 2>&5
+ ac_status=$?
+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
+ (exit $ac_status); }; }; then
+ eval "$as_ac_var=yes"
+else
+ echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+eval "$as_ac_var=no"
+fi
+rm -f conftest.err conftest.$ac_objext \
+ conftest$ac_exeext conftest.$ac_ext
+fi
+echo "$as_me:$LINENO: result: `eval echo '${'$as_ac_var'}'`" >&5
+echo "${ECHO_T}`eval echo '${'$as_ac_var'}'`" >&6
+if test `eval echo '${'$as_ac_var'}'` = yes; then
+ cat >>confdefs.h <<_ACEOF
+#define `echo "HAVE_$ac_func" | $as_tr_cpp` 1
+_ACEOF
+
+else
+ case $LIBOBJS in
+ "$ac_func.$ac_objext" | \
+ *" $ac_func.$ac_objext" | \
+ "$ac_func.$ac_objext "* | \
+ *" $ac_func.$ac_objext "* ) ;;
+ *) LIBOBJS="$LIBOBJS $ac_func.$ac_objext" ;;
+esac
+
+fi
+done
+
+
+ if test $ac_cv_func_mkstemp = no; then
+ gl_cv_func_mkstemp_limitations=yes
+ else
+ echo "$as_me:$LINENO: checking for mkstemp limitations" >&5
+echo $ECHO_N "checking for mkstemp limitations... $ECHO_C" >&6
+if test "${gl_cv_func_mkstemp_limitations+set}" = set; then
+ echo $ECHO_N "(cached) $ECHO_C" >&6
+else
+
+ if test "$cross_compiling" = yes; then
+ gl_cv_func_mkstemp_limitations=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 <stdlib.h>
+ int main ()
+ {
+ int i;
+ for (i = 0; i < 70; i++)
+ {
+ char template[] = "conftestXXXXXX";
+ int fd = mkstemp (template);
+ if (fd == -1)
+ exit (1);
+ close (fd);
+ }
+ exit (0);
+ }
+
+_ACEOF
+rm -f conftest$ac_exeext
+if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5
+ (eval $ac_link) 2>&5
+ ac_status=$?
+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
+ (exit $ac_status); } && { ac_try='./conftest$ac_exeext'
+ { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+ (eval $ac_try) 2>&5
+ ac_status=$?
+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
+ (exit $ac_status); }; }; then
+ gl_cv_func_mkstemp_limitations=no
+else
+ echo "$as_me: program exited with status $ac_status" >&5
+echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+( exit $ac_status )
+gl_cv_func_mkstemp_limitations=yes
+fi
+rm -f core *.core gmon.out bb.out conftest$ac_exeext conftest.$ac_objext conftest.$ac_ext
+fi
+
+
+fi
+echo "$as_me:$LINENO: result: $gl_cv_func_mkstemp_limitations" >&5
+echo "${ECHO_T}$gl_cv_func_mkstemp_limitations" >&6
+ fi
+
+ if test $gl_cv_func_mkstemp_limitations = yes; then
+ case $LIBOBJS in
+ "mkstemp.$ac_objext" | \
+ *" mkstemp.$ac_objext" | \
+ "mkstemp.$ac_objext "* | \
+ *" mkstemp.$ac_objext "* ) ;;
+ *) LIBOBJS="$LIBOBJS mkstemp.$ac_objext" ;;
+esac
+
+ case $LIBOBJS in
+ "tempname.$ac_objext" | \
+ *" tempname.$ac_objext" | \
+ "tempname.$ac_objext "* | \
+ *" tempname.$ac_objext "* ) ;;
+ *) LIBOBJS="$LIBOBJS tempname.$ac_objext" ;;
+esac
+
+
+cat >>confdefs.h <<\_ACEOF
+#define mkstemp rpl_mkstemp
+_ACEOF
+
+
+
+
+
+
+ :
+
+
+
+
+
+
+
+
+
+
+
+
+for ac_header in stdint.h
+do
+as_ac_Header=`echo "ac_cv_header_$ac_header" | $as_tr_sh`
+if eval "test \"\${$as_ac_Header+set}\" = set"; then
+ echo "$as_me:$LINENO: checking for $ac_header" >&5
+echo $ECHO_N "checking for $ac_header... $ECHO_C" >&6
+if eval "test \"\${$as_ac_Header+set}\" = set"; then
+ echo $ECHO_N "(cached) $ECHO_C" >&6
+fi
+echo "$as_me:$LINENO: result: `eval echo '${'$as_ac_Header'}'`" >&5
+echo "${ECHO_T}`eval echo '${'$as_ac_Header'}'`" >&6
+else
+ # Is the header compilable?
+echo "$as_me:$LINENO: checking $ac_header usability" >&5
+echo $ECHO_N "checking $ac_header usability... $ECHO_C" >&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 { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5
+ (eval $ac_compile) 2>conftest.er1
+ ac_status=$?
+ grep -v '^ *+' conftest.er1 >conftest.err
+ rm -f conftest.er1
+ cat conftest.err >&5
+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
+ (exit $ac_status); } &&
+ { ac_try='test -z "$ac_c_werror_flag"
+ || test ! -s conftest.err'
+ { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+ (eval $ac_try) 2>&5
+ ac_status=$?
+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
+ (exit $ac_status); }; } &&
+ { ac_try='test -s conftest.$ac_objext'
+ { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+ (eval $ac_try) 2>&5
+ ac_status=$?
+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
+ (exit $ac_status); }; }; then
+ ac_header_compiler=yes
+else
+ echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+ac_header_compiler=no
+fi
+rm -f conftest.err conftest.$ac_objext conftest.$ac_ext
+echo "$as_me:$LINENO: result: $ac_header_compiler" >&5
+echo "${ECHO_T}$ac_header_compiler" >&6
+
+# Is the header present?
+echo "$as_me:$LINENO: checking $ac_header presence" >&5
+echo $ECHO_N "checking $ac_header presence... $ECHO_C" >&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 { (eval echo "$as_me:$LINENO: \"$ac_cpp conftest.$ac_ext\"") >&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
+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
+ (exit $ac_status); } >/dev/null; then
+ if test -s conftest.err; then
+ ac_cpp_err=$ac_c_preproc_warn_flag
+ ac_cpp_err=$ac_cpp_err$ac_c_werror_flag
+ else
+ ac_cpp_err=
+ fi
+else
+ ac_cpp_err=yes
+fi
+if test -z "$ac_cpp_err"; then
+ ac_header_preproc=yes
+else
+ 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
+echo "$as_me:$LINENO: result: $ac_header_preproc" >&5
+echo "${ECHO_T}$ac_header_preproc" >&6
+
+# So? What about this header?
+case $ac_header_compiler:$ac_header_preproc:$ac_c_preproc_warn_flag in
+ yes:no: )
+ { echo "$as_me:$LINENO: WARNING: $ac_header: accepted by the compiler, rejected by the preprocessor!" >&5
+echo "$as_me: WARNING: $ac_header: accepted by the compiler, rejected by the preprocessor!" >&2;}
+ { echo "$as_me:$LINENO: WARNING: $ac_header: proceeding with the compiler's result" >&5
+echo "$as_me: WARNING: $ac_header: proceeding with the compiler's result" >&2;}
+ ac_header_preproc=yes
+ ;;
+ no:yes:* )
+ { echo "$as_me:$LINENO: WARNING: $ac_header: present but cannot be compiled" >&5
+echo "$as_me: WARNING: $ac_header: present but cannot be compiled" >&2;}
+ { echo "$as_me:$LINENO: WARNING: $ac_header: check for missing prerequisite headers?" >&5
+echo "$as_me: WARNING: $ac_header: check for missing prerequisite headers?" >&2;}
+ { echo "$as_me:$LINENO: WARNING: $ac_header: see the Autoconf documentation" >&5
+echo "$as_me: WARNING: $ac_header: see the Autoconf documentation" >&2;}
+ { echo "$as_me:$LINENO: WARNING: $ac_header: section \"Present But Cannot Be Compiled\"" >&5
+echo "$as_me: WARNING: $ac_header: section \"Present But Cannot Be Compiled\"" >&2;}
+ { echo "$as_me:$LINENO: WARNING: $ac_header: proceeding with the preprocessor's result" >&5
+echo "$as_me: WARNING: $ac_header: proceeding with the preprocessor's result" >&2;}
+ { echo "$as_me:$LINENO: WARNING: $ac_header: in the future, the compiler will take precedence" >&5
+echo "$as_me: WARNING: $ac_header: in the future, the compiler will take precedence" >&2;}
+ (
+ cat <<\_ASBOX
+## -------------------------------------- ##
+## Report this to the GNU Texinfo lists. ##
+## -------------------------------------- ##
+_ASBOX
+ ) |
+ sed "s/^/$as_me: WARNING: /" >&2
+ ;;
+esac
+echo "$as_me:$LINENO: checking for $ac_header" >&5
+echo $ECHO_N "checking for $ac_header... $ECHO_C" >&6
+if eval "test \"\${$as_ac_Header+set}\" = set"; then
+ echo $ECHO_N "(cached) $ECHO_C" >&6
+else
+ eval "$as_ac_Header=\$ac_header_preproc"
+fi
+echo "$as_me:$LINENO: result: `eval echo '${'$as_ac_Header'}'`" >&5
+echo "${ECHO_T}`eval echo '${'$as_ac_Header'}'`" >&6
+
+fi
+if test `eval echo '${'$as_ac_Header'}'` = yes; then
+ cat >>confdefs.h <<_ACEOF
+#define `echo "HAVE_$ac_header" | $as_tr_cpp` 1
+_ACEOF
+
+fi
+
+done
+
+
+
+for ac_func in __secure_getenv gettimeofday
+do
+as_ac_var=`echo "ac_cv_func_$ac_func" | $as_tr_sh`
+echo "$as_me:$LINENO: checking for $ac_func" >&5
+echo $ECHO_N "checking for $ac_func... $ECHO_C" >&6
+if eval "test \"\${$as_ac_var+set}\" = set"; then
+ echo $ECHO_N "(cached) $ECHO_C" >&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 gcc2 internal prototype to avoid an error. */
+#ifdef __cplusplus
+extern "C"
+{
+#endif
+/* We use char because int might match the return type of a gcc2
+ builtin and then its argument prototype would still apply. */
+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
+#else
+char (*f) () = $ac_func;
+#endif
+#ifdef __cplusplus
+}
+#endif
+
+int
+main ()
+{
+return f != $ac_func;
+ ;
+ return 0;
+}
+_ACEOF
+rm -f conftest.$ac_objext conftest$ac_exeext
+if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5
+ (eval $ac_link) 2>conftest.er1
+ ac_status=$?
+ grep -v '^ *+' conftest.er1 >conftest.err
+ rm -f conftest.er1
+ cat conftest.err >&5
+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
+ (exit $ac_status); } &&
+ { ac_try='test -z "$ac_c_werror_flag"
+ || test ! -s conftest.err'
+ { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+ (eval $ac_try) 2>&5
+ ac_status=$?
+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
+ (exit $ac_status); }; } &&
+ { ac_try='test -s conftest$ac_exeext'
+ { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+ (eval $ac_try) 2>&5
+ ac_status=$?
+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
+ (exit $ac_status); }; }; then
+ eval "$as_ac_var=yes"
+else
+ echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+eval "$as_ac_var=no"
+fi
+rm -f conftest.err conftest.$ac_objext \
+ conftest$ac_exeext conftest.$ac_ext
+fi
+echo "$as_me:$LINENO: result: `eval echo '${'$as_ac_var'}'`" >&5
+echo "${ECHO_T}`eval echo '${'$as_ac_var'}'`" >&6
+if test `eval echo '${'$as_ac_var'}'` = yes; then
+ cat >>confdefs.h <<_ACEOF
+#define `echo "HAVE_$ac_func" | $as_tr_cpp` 1
+_ACEOF
+
+fi
+done
+
+
+ :
+
+
+
+
+
+
+
+ fi
+
+
+# For teTeX and TeX Live.
+echo "$as_me:$LINENO: checking host system type" >&5
+echo $ECHO_N "checking host system type... $ECHO_C" >&6
+if test "${ac_cv_host+set}" = set; then
+ echo $ECHO_N "(cached) $ECHO_C" >&6
+else
+ ac_cv_host_alias=$host_alias
+test -z "$ac_cv_host_alias" &&
+ ac_cv_host_alias=$ac_cv_build_alias
+ac_cv_host=`$ac_config_sub $ac_cv_host_alias` ||
+ { { echo "$as_me:$LINENO: error: $ac_config_sub $ac_cv_host_alias failed" >&5
+echo "$as_me: error: $ac_config_sub $ac_cv_host_alias failed" >&2;}
+ { (exit 1); exit 1; }; }
+
+fi
+echo "$as_me:$LINENO: result: $ac_cv_host" >&5
+echo "${ECHO_T}$ac_cv_host" >&6
+host=$ac_cv_host
+host_cpu=`echo $ac_cv_host | sed 's/^\([^-]*\)-\([^-]*\)-\(.*\)$/\1/'`
+host_vendor=`echo $ac_cv_host | sed 's/^\([^-]*\)-\([^-]*\)-\(.*\)$/\2/'`
+host_os=`echo $ac_cv_host | sed 's/^\([^-]*\)-\([^-]*\)-\(.*\)$/\3/'`
+
+
+# Check whether --enable-multiplatform or --disable-multiplatform was given.
+if test "${enable_multiplatform+set}" = set; then
+ enableval="$enable_multiplatform"
+
+fi;
+# if enable_multiplatform is set in the environment, use that.
+test "x$enable_multiplatform" = xyes \
+&& test "x$bindir" = 'x${exec_prefix}/bin' \
+&& bindir="$bindir/$host"
+
+# Taken from the example in
+# http://www.gnu.org/software/automake/manual/html_node/Conditionals.html.
+# Check whether --enable-install-warnings or --disable-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 ;;
+ *) { { echo "$as_me:$LINENO: error: bad value ${enableval} for --enable-install-warnings" >&5
+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 --intl
+
+
+ MKINSTALLDIRS=
+ if test -n "$ac_aux_dir"; then
+ case "$ac_aux_dir" in
+ /*) MKINSTALLDIRS="$ac_aux_dir/mkinstalldirs" ;;
+ *) MKINSTALLDIRS="\$(top_builddir)/$ac_aux_dir/mkinstalldirs" ;;
+ esac
+ fi
+ if test -z "$MKINSTALLDIRS"; then
+ MKINSTALLDIRS="\$(top_srcdir)/mkinstalldirs"
+ fi
+
+
+
+ echo "$as_me:$LINENO: checking whether NLS is requested" >&5
+echo $ECHO_N "checking whether NLS is requested... $ECHO_C" >&6
+ # Check whether --enable-nls or --disable-nls was given.
+if test "${enable_nls+set}" = set; then
+ enableval="$enable_nls"
+ USE_NLS=$enableval
+else
+ USE_NLS=yes
+fi;
+ echo "$as_me:$LINENO: result: $USE_NLS" >&5
+echo "${ECHO_T}$USE_NLS" >&6
+
+
+
+
+
+
+# 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
+echo "$as_me:$LINENO: checking for $ac_word" >&5
+echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6
+if test "${ac_cv_path_MSGFMT+set}" = set; then
+ echo $ECHO_N "(cached) $ECHO_C" >&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
+ if $ac_dir/$ac_word --statistics /dev/null >/dev/null 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
+ echo "$as_me:$LINENO: result: $MSGFMT" >&5
+echo "${ECHO_T}$MSGFMT" >&6
+else
+ echo "$as_me:$LINENO: result: no" >&5
+echo "${ECHO_T}no" >&6
+fi
+
+ # Extract the first word of "gmsgfmt", so it can be a program name with args.
+set dummy gmsgfmt; ac_word=$2
+echo "$as_me:$LINENO: checking for $ac_word" >&5
+echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6
+if test "${ac_cv_path_GMSGFMT+set}" = set; then
+ echo $ECHO_N "(cached) $ECHO_C" >&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 $as_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
+ ac_cv_path_GMSGFMT="$as_dir/$ac_word$ac_exec_ext"
+ echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5
+ break 2
+ fi
+done
+done
+
+ test -z "$ac_cv_path_GMSGFMT" && ac_cv_path_GMSGFMT="$MSGFMT"
+ ;;
+esac
+fi
+GMSGFMT=$ac_cv_path_GMSGFMT
+
+if test -n "$GMSGFMT"; then
+ echo "$as_me:$LINENO: result: $GMSGFMT" >&5
+echo "${ECHO_T}$GMSGFMT" >&6
+else
+ echo "$as_me:$LINENO: result: no" >&5
+echo "${ECHO_T}no" >&6
+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
+
+# 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
+echo "$as_me:$LINENO: checking for $ac_word" >&5
+echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6
+if test "${ac_cv_path_XGETTEXT+set}" = set; then
+ echo $ECHO_N "(cached) $ECHO_C" >&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
+ if $ac_dir/$ac_word --omit-header --copyright-holder= --msgid-bugs-address= /dev/null >/dev/null 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
+ echo "$as_me:$LINENO: result: $XGETTEXT" >&5
+echo "${ECHO_T}$XGETTEXT" >&6
+else
+ echo "$as_me:$LINENO: result: no" >&5
+echo "${ECHO_T}no" >&6
+fi
+
+ rm -f messages.po
+
+
+# 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
+echo "$as_me:$LINENO: checking for $ac_word" >&5
+echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6
+if test "${ac_cv_path_MSGMERGE+set}" = set; then
+ echo $ECHO_N "(cached) $ECHO_C" >&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
+ if $ac_dir/$ac_word --update -q /dev/null /dev/null >/dev/null 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
+ echo "$as_me:$LINENO: result: $MSGMERGE" >&5
+echo "${ECHO_T}$MSGMERGE" >&6
+else
+ echo "$as_me:$LINENO: result: no" >&5
+echo "${ECHO_T}no" >&6
+fi
+
+
+ if test "$GMSGFMT" != ":"; then
+ if $GMSGFMT --statistics /dev/null >/dev/null 2>&1 &&
+ (if $GMSGFMT --statistics /dev/null 2>&1 >/dev/null | grep usage >/dev/null; then exit 1; else exit 0; fi); then
+ : ;
+ else
+ GMSGFMT=`echo "$GMSGFMT" | sed -e 's,^.*/,,'`
+ echo "$as_me:$LINENO: result: found $GMSGFMT program is not GNU msgfmt; ignore it" >&5
+echo "${ECHO_T}found $GMSGFMT program is not GNU msgfmt; ignore it" >&6
+ GMSGFMT=":"
+ fi
+ fi
+
+ if test "$XGETTEXT" != ":"; then
+ if $XGETTEXT --omit-header --copyright-holder= --msgid-bugs-address= /dev/null >/dev/null 2>&1 &&
+ (if $XGETTEXT --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
+ : ;
+ else
+ echo "$as_me:$LINENO: result: found xgettext program is not GNU xgettext; ignore it" >&5
+echo "${ECHO_T}found xgettext program is not GNU xgettext; ignore it" >&6
+ XGETTEXT=":"
+ fi
+ rm -f messages.po
+ fi
+
+ ac_config_commands="$ac_config_commands default-1"
+
+
+
+ echo "$as_me:$LINENO: checking for signed" >&5
+echo $ECHO_N "checking for signed... $ECHO_C" >&6
+if test "${bh_cv_c_signed+set}" = set; then
+ echo $ECHO_N "(cached) $ECHO_C" >&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 ()
+{
+signed char x;
+ ;
+ return 0;
+}
+_ACEOF
+rm -f conftest.$ac_objext
+if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5
+ (eval $ac_compile) 2>conftest.er1
+ ac_status=$?
+ grep -v '^ *+' conftest.er1 >conftest.err
+ rm -f conftest.er1
+ cat conftest.err >&5
+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
+ (exit $ac_status); } &&
+ { ac_try='test -z "$ac_c_werror_flag"
+ || test ! -s conftest.err'
+ { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+ (eval $ac_try) 2>&5
+ ac_status=$?
+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
+ (exit $ac_status); }; } &&
+ { ac_try='test -s conftest.$ac_objext'
+ { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+ (eval $ac_try) 2>&5
+ ac_status=$?
+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
+ (exit $ac_status); }; }; then
+ bh_cv_c_signed=yes
+else
+ echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+bh_cv_c_signed=no
+fi
+rm -f conftest.err conftest.$ac_objext conftest.$ac_ext
+fi
+echo "$as_me:$LINENO: result: $bh_cv_c_signed" >&5
+echo "${ECHO_T}$bh_cv_c_signed" >&6
+ if test $bh_cv_c_signed = no; then
+
+cat >>confdefs.h <<\_ACEOF
+#define signed
+_ACEOF
+
+ fi
+
+echo "$as_me:$LINENO: checking for inline" >&5
+echo $ECHO_N "checking for inline... $ECHO_C" >&6
+if test "${ac_cv_c_inline+set}" = set; then
+ echo $ECHO_N "(cached) $ECHO_C" >&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 { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5
+ (eval $ac_compile) 2>conftest.er1
+ ac_status=$?
+ grep -v '^ *+' conftest.er1 >conftest.err
+ rm -f conftest.er1
+ cat conftest.err >&5
+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
+ (exit $ac_status); } &&
+ { ac_try='test -z "$ac_c_werror_flag"
+ || test ! -s conftest.err'
+ { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+ (eval $ac_try) 2>&5
+ ac_status=$?
+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
+ (exit $ac_status); }; } &&
+ { ac_try='test -s conftest.$ac_objext'
+ { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+ (eval $ac_try) 2>&5
+ ac_status=$?
+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
+ (exit $ac_status); }; }; then
+ ac_cv_c_inline=$ac_kw; break
+else
+ echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+fi
+rm -f conftest.err conftest.$ac_objext conftest.$ac_ext
+done
+
+fi
+echo "$as_me:$LINENO: result: $ac_cv_c_inline" >&5
+echo "${ECHO_T}$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
+
+echo "$as_me:$LINENO: checking for size_t" >&5
+echo $ECHO_N "checking for size_t... $ECHO_C" >&6
+if test "${ac_cv_type_size_t+set}" = set; then
+ echo $ECHO_N "(cached) $ECHO_C" >&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 ()
+{
+if ((size_t *) 0)
+ return 0;
+if (sizeof (size_t))
+ return 0;
+ ;
+ return 0;
+}
+_ACEOF
+rm -f conftest.$ac_objext
+if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5
+ (eval $ac_compile) 2>conftest.er1
+ ac_status=$?
+ grep -v '^ *+' conftest.er1 >conftest.err
+ rm -f conftest.er1
+ cat conftest.err >&5
+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
+ (exit $ac_status); } &&
+ { ac_try='test -z "$ac_c_werror_flag"
+ || test ! -s conftest.err'
+ { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+ (eval $ac_try) 2>&5
+ ac_status=$?
+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
+ (exit $ac_status); }; } &&
+ { ac_try='test -s conftest.$ac_objext'
+ { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+ (eval $ac_try) 2>&5
+ ac_status=$?
+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
+ (exit $ac_status); }; }; then
+ ac_cv_type_size_t=yes
+else
+ echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+ac_cv_type_size_t=no
+fi
+rm -f conftest.err conftest.$ac_objext conftest.$ac_ext
+fi
+echo "$as_me:$LINENO: result: $ac_cv_type_size_t" >&5
+echo "${ECHO_T}$ac_cv_type_size_t" >&6
+if test $ac_cv_type_size_t = yes; then
+ :
+else
+
+cat >>confdefs.h <<_ACEOF
+#define size_t unsigned
+_ACEOF
+
+fi
+
+
+ echo "$as_me:$LINENO: checking for long long" >&5
+echo $ECHO_N "checking for long long... $ECHO_C" >&6
+if test "${ac_cv_type_long_long+set}" = set; then
+ echo $ECHO_N "(cached) $ECHO_C" >&6
+else
+ cat >conftest.$ac_ext <<_ACEOF
+/* confdefs.h. */
+_ACEOF
+cat confdefs.h >>conftest.$ac_ext
+cat >>conftest.$ac_ext <<_ACEOF
+/* end confdefs.h. */
+long long ll = 1LL; int i = 63;
+int
+main ()
+{
+long long llmax = (long long) -1;
+ return ll << i | ll >> i | llmax / ll | llmax % ll;
+ ;
+ return 0;
+}
+_ACEOF
+rm -f conftest.$ac_objext conftest$ac_exeext
+if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5
+ (eval $ac_link) 2>conftest.er1
+ ac_status=$?
+ grep -v '^ *+' conftest.er1 >conftest.err
+ rm -f conftest.er1
+ cat conftest.err >&5
+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
+ (exit $ac_status); } &&
+ { ac_try='test -z "$ac_c_werror_flag"
+ || test ! -s conftest.err'
+ { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+ (eval $ac_try) 2>&5
+ ac_status=$?
+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
+ (exit $ac_status); }; } &&
+ { ac_try='test -s conftest$ac_exeext'
+ { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+ (eval $ac_try) 2>&5
+ ac_status=$?
+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
+ (exit $ac_status); }; }; then
+ ac_cv_type_long_long=yes
+else
+ echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+ac_cv_type_long_long=no
+fi
+rm -f conftest.err conftest.$ac_objext \
+ conftest$ac_exeext conftest.$ac_ext
+fi
+echo "$as_me:$LINENO: result: $ac_cv_type_long_long" >&5
+echo "${ECHO_T}$ac_cv_type_long_long" >&6
+ if test $ac_cv_type_long_long = yes; then
+
+cat >>confdefs.h <<\_ACEOF
+#define HAVE_LONG_LONG 1
+_ACEOF
+
+ fi
+
+
+ echo "$as_me:$LINENO: checking for long double" >&5
+echo $ECHO_N "checking for long double... $ECHO_C" >&6
+if test "${gt_cv_c_long_double+set}" = set; then
+ echo $ECHO_N "(cached) $ECHO_C" >&6
+else
+ if test "$GCC" = yes; then
+ gt_cv_c_long_double=yes
+ else
+ cat >conftest.$ac_ext <<_ACEOF
+/* confdefs.h. */
+_ACEOF
+cat confdefs.h >>conftest.$ac_ext
+cat >>conftest.$ac_ext <<_ACEOF
+/* end confdefs.h. */
+
+ /* The Stardent Vistra knows sizeof(long double), but does not support it. */
+ long double foo = 0.0;
+ /* On Ultrix 4.3 cc, long double is 4 and double is 8. */
+ int array [2*(sizeof(long double) >= sizeof(double)) - 1];
+
+int
+main ()
+{
+
+ ;
+ return 0;
+}
+_ACEOF
+rm -f conftest.$ac_objext
+if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5
+ (eval $ac_compile) 2>conftest.er1
+ ac_status=$?
+ grep -v '^ *+' conftest.er1 >conftest.err
+ rm -f conftest.er1
+ cat conftest.err >&5
+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
+ (exit $ac_status); } &&
+ { ac_try='test -z "$ac_c_werror_flag"
+ || test ! -s conftest.err'
+ { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+ (eval $ac_try) 2>&5
+ ac_status=$?
+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
+ (exit $ac_status); }; } &&
+ { ac_try='test -s conftest.$ac_objext'
+ { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+ (eval $ac_try) 2>&5
+ ac_status=$?
+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
+ (exit $ac_status); }; }; then
+ gt_cv_c_long_double=yes
+else
+ echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+gt_cv_c_long_double=no
+fi
+rm -f conftest.err conftest.$ac_objext conftest.$ac_ext
+ fi
+fi
+echo "$as_me:$LINENO: result: $gt_cv_c_long_double" >&5
+echo "${ECHO_T}$gt_cv_c_long_double" >&6
+ if test $gt_cv_c_long_double = yes; then
+
+cat >>confdefs.h <<\_ACEOF
+#define HAVE_LONG_DOUBLE 1
+_ACEOF
+
+ fi
+
+
+ echo "$as_me:$LINENO: checking for wchar_t" >&5
+echo $ECHO_N "checking for wchar_t... $ECHO_C" >&6
+if test "${gt_cv_c_wchar_t+set}" = set; then
+ echo $ECHO_N "(cached) $ECHO_C" >&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 { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5
+ (eval $ac_compile) 2>conftest.er1
+ ac_status=$?
+ grep -v '^ *+' conftest.er1 >conftest.err
+ rm -f conftest.er1
+ cat conftest.err >&5
+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
+ (exit $ac_status); } &&
+ { ac_try='test -z "$ac_c_werror_flag"
+ || test ! -s conftest.err'
+ { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+ (eval $ac_try) 2>&5
+ ac_status=$?
+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
+ (exit $ac_status); }; } &&
+ { ac_try='test -s conftest.$ac_objext'
+ { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+ (eval $ac_try) 2>&5
+ ac_status=$?
+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
+ (exit $ac_status); }; }; then
+ gt_cv_c_wchar_t=yes
+else
+ echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+gt_cv_c_wchar_t=no
+fi
+rm -f conftest.err conftest.$ac_objext conftest.$ac_ext
+fi
+echo "$as_me:$LINENO: result: $gt_cv_c_wchar_t" >&5
+echo "${ECHO_T}$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
+
+
+ echo "$as_me:$LINENO: checking for wint_t" >&5
+echo $ECHO_N "checking for wint_t... $ECHO_C" >&6
+if test "${gt_cv_c_wint_t+set}" = set; then
+ echo $ECHO_N "(cached) $ECHO_C" >&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>
+ wint_t foo = (wchar_t)'\0';
+int
+main ()
+{
+
+ ;
+ return 0;
+}
+_ACEOF
+rm -f conftest.$ac_objext
+if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5
+ (eval $ac_compile) 2>conftest.er1
+ ac_status=$?
+ grep -v '^ *+' conftest.er1 >conftest.err
+ rm -f conftest.er1
+ cat conftest.err >&5
+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
+ (exit $ac_status); } &&
+ { ac_try='test -z "$ac_c_werror_flag"
+ || test ! -s conftest.err'
+ { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+ (eval $ac_try) 2>&5
+ ac_status=$?
+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
+ (exit $ac_status); }; } &&
+ { ac_try='test -s conftest.$ac_objext'
+ { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+ (eval $ac_try) 2>&5
+ ac_status=$?
+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
+ (exit $ac_status); }; }; then
+ gt_cv_c_wint_t=yes
+else
+ echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+gt_cv_c_wint_t=no
+fi
+rm -f conftest.err conftest.$ac_objext conftest.$ac_ext
+fi
+echo "$as_me:$LINENO: result: $gt_cv_c_wint_t" >&5
+echo "${ECHO_T}$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
+
+
+
+
+ echo "$as_me:$LINENO: checking for intmax_t" >&5
+echo $ECHO_N "checking for intmax_t... $ECHO_C" >&6
+if test "${gt_cv_c_intmax_t+set}" = set; then
+ echo $ECHO_N "(cached) $ECHO_C" >&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>
+#include <stdlib.h>
+#if HAVE_STDINT_H_WITH_UINTMAX
+#include <stdint.h>
+#endif
+#if HAVE_INTTYPES_H_WITH_UINTMAX
+#include <inttypes.h>
+#endif
+
+int
+main ()
+{
+intmax_t x = -1;
+ ;
+ return 0;
+}
+_ACEOF
+rm -f conftest.$ac_objext
+if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5
+ (eval $ac_compile) 2>conftest.er1
+ ac_status=$?
+ grep -v '^ *+' conftest.er1 >conftest.err
+ rm -f conftest.er1
+ cat conftest.err >&5
+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
+ (exit $ac_status); } &&
+ { ac_try='test -z "$ac_c_werror_flag"
+ || test ! -s conftest.err'
+ { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+ (eval $ac_try) 2>&5
+ ac_status=$?
+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
+ (exit $ac_status); }; } &&
+ { ac_try='test -s conftest.$ac_objext'
+ { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+ (eval $ac_try) 2>&5
+ ac_status=$?
+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
+ (exit $ac_status); }; }; then
+ gt_cv_c_intmax_t=yes
+else
+ echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+gt_cv_c_intmax_t=no
+fi
+rm -f conftest.err conftest.$ac_objext conftest.$ac_ext
+fi
+echo "$as_me:$LINENO: result: $gt_cv_c_intmax_t" >&5
+echo "${ECHO_T}$gt_cv_c_intmax_t" >&6
+ if test $gt_cv_c_intmax_t = yes; then
+
+cat >>confdefs.h <<\_ACEOF
+#define HAVE_INTMAX_T 1
+_ACEOF
+
+ fi
+
+
+
+ echo "$as_me:$LINENO: checking whether printf() supports POSIX/XSI format strings" >&5
+echo $ECHO_N "checking whether printf() supports POSIX/XSI format strings... $ECHO_C" >&6
+if test "${gt_cv_func_printf_posix+set}" = set; then
+ echo $ECHO_N "(cached) $ECHO_C" >&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. */
+
+#if defined __NetBSD__ || defined _MSC_VER || defined __MINGW32__ || defined __CYGWIN__
+ notposix
+#endif
+
+_ACEOF
+if (eval "$ac_cpp conftest.$ac_ext") 2>&5 |
+ $EGREP "notposix" >/dev/null 2>&1; then
+ gt_cv_func_printf_posix="guessing no"
+else
+ gt_cv_func_printf_posix="guessing yes"
+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 <stdio.h>
+#include <string.h>
+/* The string "%2$d %1$d", with dollar characters protected from the shell's
+ dollar expansion (possibly an autoconf bug). */
+static char format[] = { '%', '2', '$', 'd', ' ', '%', '1', '$', 'd', '\0' };
+static char buf[100];
+int main ()
+{
+ sprintf (buf, format, 33, 55);
+ return (strcmp (buf, "55 33") != 0);
+}
+_ACEOF
+rm -f conftest$ac_exeext
+if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5
+ (eval $ac_link) 2>&5
+ ac_status=$?
+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
+ (exit $ac_status); } && { ac_try='./conftest$ac_exeext'
+ { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+ (eval $ac_try) 2>&5
+ ac_status=$?
+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
+ (exit $ac_status); }; }; then
+ gt_cv_func_printf_posix=yes
+else
+ echo "$as_me: program exited with status $ac_status" >&5
+echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+( exit $ac_status )
+gt_cv_func_printf_posix=no
+fi
+rm -f core *.core gmon.out bb.out conftest$ac_exeext conftest.$ac_objext conftest.$ac_ext
+fi
+
+fi
+echo "$as_me:$LINENO: result: $gt_cv_func_printf_posix" >&5
+echo "${ECHO_T}$gt_cv_func_printf_posix" >&6
+ case $gt_cv_func_printf_posix in
+ *yes)
+
+cat >>confdefs.h <<\_ACEOF
+#define HAVE_POSIX_PRINTF 1
+_ACEOF
+
+ ;;
+ esac
+
+
+
+for ac_header in stdlib.h unistd.h
+do
+as_ac_Header=`echo "ac_cv_header_$ac_header" | $as_tr_sh`
+if eval "test \"\${$as_ac_Header+set}\" = set"; then
+ echo "$as_me:$LINENO: checking for $ac_header" >&5
+echo $ECHO_N "checking for $ac_header... $ECHO_C" >&6
+if eval "test \"\${$as_ac_Header+set}\" = set"; then
+ echo $ECHO_N "(cached) $ECHO_C" >&6
+fi
+echo "$as_me:$LINENO: result: `eval echo '${'$as_ac_Header'}'`" >&5
+echo "${ECHO_T}`eval echo '${'$as_ac_Header'}'`" >&6
+else
+ # Is the header compilable?
+echo "$as_me:$LINENO: checking $ac_header usability" >&5
+echo $ECHO_N "checking $ac_header usability... $ECHO_C" >&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 { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5
+ (eval $ac_compile) 2>conftest.er1
+ ac_status=$?
+ grep -v '^ *+' conftest.er1 >conftest.err
+ rm -f conftest.er1
+ cat conftest.err >&5
+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
+ (exit $ac_status); } &&
+ { ac_try='test -z "$ac_c_werror_flag"
+ || test ! -s conftest.err'
+ { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+ (eval $ac_try) 2>&5
+ ac_status=$?
+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
+ (exit $ac_status); }; } &&
+ { ac_try='test -s conftest.$ac_objext'
+ { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+ (eval $ac_try) 2>&5
+ ac_status=$?
+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
+ (exit $ac_status); }; }; then
+ ac_header_compiler=yes
+else
+ echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+ac_header_compiler=no
+fi
+rm -f conftest.err conftest.$ac_objext conftest.$ac_ext
+echo "$as_me:$LINENO: result: $ac_header_compiler" >&5
+echo "${ECHO_T}$ac_header_compiler" >&6
+
+# Is the header present?
+echo "$as_me:$LINENO: checking $ac_header presence" >&5
+echo $ECHO_N "checking $ac_header presence... $ECHO_C" >&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 { (eval echo "$as_me:$LINENO: \"$ac_cpp conftest.$ac_ext\"") >&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
+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
+ (exit $ac_status); } >/dev/null; then
+ if test -s conftest.err; then
+ ac_cpp_err=$ac_c_preproc_warn_flag
+ ac_cpp_err=$ac_cpp_err$ac_c_werror_flag
+ else
+ ac_cpp_err=
+ fi
+else
+ ac_cpp_err=yes
+fi
+if test -z "$ac_cpp_err"; then
+ ac_header_preproc=yes
+else
+ 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
+echo "$as_me:$LINENO: result: $ac_header_preproc" >&5
+echo "${ECHO_T}$ac_header_preproc" >&6
+
+# So? What about this header?
+case $ac_header_compiler:$ac_header_preproc:$ac_c_preproc_warn_flag in
+ yes:no: )
+ { echo "$as_me:$LINENO: WARNING: $ac_header: accepted by the compiler, rejected by the preprocessor!" >&5
+echo "$as_me: WARNING: $ac_header: accepted by the compiler, rejected by the preprocessor!" >&2;}
+ { echo "$as_me:$LINENO: WARNING: $ac_header: proceeding with the compiler's result" >&5
+echo "$as_me: WARNING: $ac_header: proceeding with the compiler's result" >&2;}
+ ac_header_preproc=yes
+ ;;
+ no:yes:* )
+ { echo "$as_me:$LINENO: WARNING: $ac_header: present but cannot be compiled" >&5
+echo "$as_me: WARNING: $ac_header: present but cannot be compiled" >&2;}
+ { echo "$as_me:$LINENO: WARNING: $ac_header: check for missing prerequisite headers?" >&5
+echo "$as_me: WARNING: $ac_header: check for missing prerequisite headers?" >&2;}
+ { echo "$as_me:$LINENO: WARNING: $ac_header: see the Autoconf documentation" >&5
+echo "$as_me: WARNING: $ac_header: see the Autoconf documentation" >&2;}
+ { echo "$as_me:$LINENO: WARNING: $ac_header: section \"Present But Cannot Be Compiled\"" >&5
+echo "$as_me: WARNING: $ac_header: section \"Present But Cannot Be Compiled\"" >&2;}
+ { echo "$as_me:$LINENO: WARNING: $ac_header: proceeding with the preprocessor's result" >&5
+echo "$as_me: WARNING: $ac_header: proceeding with the preprocessor's result" >&2;}
+ { echo "$as_me:$LINENO: WARNING: $ac_header: in the future, the compiler will take precedence" >&5
+echo "$as_me: WARNING: $ac_header: in the future, the compiler will take precedence" >&2;}
+ (
+ cat <<\_ASBOX
+## -------------------------------------- ##
+## Report this to the GNU Texinfo lists. ##
+## -------------------------------------- ##
+_ASBOX
+ ) |
+ sed "s/^/$as_me: WARNING: /" >&2
+ ;;
+esac
+echo "$as_me:$LINENO: checking for $ac_header" >&5
+echo $ECHO_N "checking for $ac_header... $ECHO_C" >&6
+if eval "test \"\${$as_ac_Header+set}\" = set"; then
+ echo $ECHO_N "(cached) $ECHO_C" >&6
+else
+ eval "$as_ac_Header=\$ac_header_preproc"
+fi
+echo "$as_me:$LINENO: result: `eval echo '${'$as_ac_Header'}'`" >&5
+echo "${ECHO_T}`eval echo '${'$as_ac_Header'}'`" >&6
+
+fi
+if test `eval echo '${'$as_ac_Header'}'` = yes; then
+ cat >>confdefs.h <<_ACEOF
+#define `echo "HAVE_$ac_header" | $as_tr_cpp` 1
+_ACEOF
+
+fi
+
+done
+
+
+for ac_func in getpagesize
+do
+as_ac_var=`echo "ac_cv_func_$ac_func" | $as_tr_sh`
+echo "$as_me:$LINENO: checking for $ac_func" >&5
+echo $ECHO_N "checking for $ac_func... $ECHO_C" >&6
+if eval "test \"\${$as_ac_var+set}\" = set"; then
+ echo $ECHO_N "(cached) $ECHO_C" >&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 gcc2 internal prototype to avoid an error. */
+#ifdef __cplusplus
+extern "C"
+{
+#endif
+/* We use char because int might match the return type of a gcc2
+ builtin and then its argument prototype would still apply. */
+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
+#else
+char (*f) () = $ac_func;
+#endif
+#ifdef __cplusplus
+}
+#endif
+
+int
+main ()
+{
+return f != $ac_func;
+ ;
+ return 0;
+}
+_ACEOF
+rm -f conftest.$ac_objext conftest$ac_exeext
+if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5
+ (eval $ac_link) 2>conftest.er1
+ ac_status=$?
+ grep -v '^ *+' conftest.er1 >conftest.err
+ rm -f conftest.er1
+ cat conftest.err >&5
+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
+ (exit $ac_status); } &&
+ { ac_try='test -z "$ac_c_werror_flag"
+ || test ! -s conftest.err'
+ { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+ (eval $ac_try) 2>&5
+ ac_status=$?
+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
+ (exit $ac_status); }; } &&
+ { ac_try='test -s conftest$ac_exeext'
+ { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+ (eval $ac_try) 2>&5
+ ac_status=$?
+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
+ (exit $ac_status); }; }; then
+ eval "$as_ac_var=yes"
+else
+ echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+eval "$as_ac_var=no"
+fi
+rm -f conftest.err conftest.$ac_objext \
+ conftest$ac_exeext conftest.$ac_ext
+fi
+echo "$as_me:$LINENO: result: `eval echo '${'$as_ac_var'}'`" >&5
+echo "${ECHO_T}`eval echo '${'$as_ac_var'}'`" >&6
+if test `eval echo '${'$as_ac_var'}'` = yes; then
+ cat >>confdefs.h <<_ACEOF
+#define `echo "HAVE_$ac_func" | $as_tr_cpp` 1
+_ACEOF
+
+fi
+done
+
+echo "$as_me:$LINENO: checking for working mmap" >&5
+echo $ECHO_N "checking for working mmap... $ECHO_C" >&6
+if test "${ac_cv_func_mmap_fixed_mapped+set}" = set; then
+ echo $ECHO_N "(cached) $ECHO_C" >&6
+else
+ if test "$cross_compiling" = yes; then
+ ac_cv_func_mmap_fixed_mapped=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
+/* malloc might have been renamed as rpl_malloc. */
+#undef malloc
+
+/* Thanks to Mike Haertel and Jim Avera for this test.
+ Here is a matrix of mmap possibilities:
+ mmap private not fixed
+ mmap private fixed at somewhere currently unmapped
+ mmap private fixed at somewhere already mapped
+ mmap shared not fixed
+ mmap shared fixed at somewhere currently unmapped
+ mmap shared fixed at somewhere already mapped
+ For private mappings, we should verify that changes cannot be read()
+ back from the file, nor mmap's back from the file at a different
+ address. (There have been systems where private was not correctly
+ implemented like the infamous i386 svr4.0, and systems where the
+ VM page cache was not coherent with the file system buffer cache
+ like early versions of FreeBSD and possibly contemporary NetBSD.)
+ For shared mappings, we should conversely verify that changes get
+ propagated back to all the places they're supposed to be.
+
+ Grep wants private fixed already mapped.
+ The main things grep needs to know about mmap are:
+ * does it exist and is it safe to write into the mmap'd area
+ * how to use it (BSD variants) */
+
+#include <fcntl.h>
+#include <sys/mman.h>
+
+#if !STDC_HEADERS && !HAVE_STDLIB_H
+char *malloc ();
+#endif
+
+/* This mess was copied from the GNU getpagesize.h. */
+#if !HAVE_GETPAGESIZE
+/* Assume that all systems that can run configure have sys/param.h. */
+# if !HAVE_SYS_PARAM_H
+# define HAVE_SYS_PARAM_H 1
+# endif
+
+# ifdef _SC_PAGESIZE
+# define getpagesize() sysconf(_SC_PAGESIZE)
+# else /* no _SC_PAGESIZE */
+# if HAVE_SYS_PARAM_H
+# include <sys/param.h>
+# ifdef EXEC_PAGESIZE
+# define getpagesize() EXEC_PAGESIZE
+# else /* no EXEC_PAGESIZE */
+# ifdef NBPG
+# define getpagesize() NBPG * CLSIZE
+# ifndef CLSIZE
+# define CLSIZE 1
+# endif /* no CLSIZE */
+# else /* no NBPG */
+# ifdef NBPC
+# define getpagesize() NBPC
+# else /* no NBPC */
+# ifdef PAGESIZE
+# define getpagesize() PAGESIZE
+# endif /* PAGESIZE */
+# endif /* no NBPC */
+# endif /* no NBPG */
+# endif /* no EXEC_PAGESIZE */
+# else /* no HAVE_SYS_PARAM_H */
+# define getpagesize() 8192 /* punt totally */
+# endif /* no HAVE_SYS_PARAM_H */
+# endif /* no _SC_PAGESIZE */
+
+#endif /* no HAVE_GETPAGESIZE */
+
+int
+main ()
+{
+ char *data, *data2, *data3;
+ int i, pagesize;
+ int fd;
+
+ pagesize = getpagesize ();
+
+ /* First, make a file with some known garbage in it. */
+ data = (char *) malloc (pagesize);
+ if (!data)
+ exit (1);
+ for (i = 0; i < pagesize; ++i)
+ *(data + i) = rand ();
+ umask (0);
+ fd = creat ("conftest.mmap", 0600);
+ if (fd < 0)
+ exit (1);
+ if (write (fd, data, pagesize) != pagesize)
+ exit (1);
+ close (fd);
+
+ /* Next, try to mmap the file at a fixed address which already has
+ something else allocated at it. If we can, also make sure that
+ we see the same garbage. */
+ fd = open ("conftest.mmap", O_RDWR);
+ if (fd < 0)
+ exit (1);
+ data2 = (char *) malloc (2 * pagesize);
+ if (!data2)
+ exit (1);
+ data2 += (pagesize - ((long) data2 & (pagesize - 1))) & (pagesize - 1);
+ if (data2 != mmap (data2, pagesize, PROT_READ | PROT_WRITE,
+ MAP_PRIVATE | MAP_FIXED, fd, 0L))
+ exit (1);
+ for (i = 0; i < pagesize; ++i)
+ if (*(data + i) != *(data2 + i))
+ exit (1);
+
+ /* Finally, make sure that changes to the mapped area do not
+ percolate back to the file as seen by read(). (This is a bug on
+ some variants of i386 svr4.0.) */
+ for (i = 0; i < pagesize; ++i)
+ *(data2 + i) = *(data2 + i) + 1;
+ data3 = (char *) malloc (pagesize);
+ if (!data3)
+ exit (1);
+ if (read (fd, data3, pagesize) != pagesize)
+ exit (1);
+ for (i = 0; i < pagesize; ++i)
+ if (*(data + i) != *(data3 + i))
+ exit (1);
+ close (fd);
+ exit (0);
+}
+_ACEOF
+rm -f conftest$ac_exeext
+if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5
+ (eval $ac_link) 2>&5
+ ac_status=$?
+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
+ (exit $ac_status); } && { ac_try='./conftest$ac_exeext'
+ { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+ (eval $ac_try) 2>&5
+ ac_status=$?
+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
+ (exit $ac_status); }; }; then
+ ac_cv_func_mmap_fixed_mapped=yes
+else
+ echo "$as_me: program exited with status $ac_status" >&5
+echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+( exit $ac_status )
+ac_cv_func_mmap_fixed_mapped=no
+fi
+rm -f core *.core gmon.out bb.out conftest$ac_exeext conftest.$ac_objext conftest.$ac_ext
+fi
+fi
+echo "$as_me:$LINENO: result: $ac_cv_func_mmap_fixed_mapped" >&5
+echo "${ECHO_T}$ac_cv_func_mmap_fixed_mapped" >&6
+if test $ac_cv_func_mmap_fixed_mapped = yes; then
+
+cat >>confdefs.h <<\_ACEOF
+#define HAVE_MMAP 1
+_ACEOF
+
+fi
+rm -f conftest.mmap
+
+
+ echo "$as_me:$LINENO: checking whether we are using the GNU C Library 2.1 or newer" >&5
+echo $ECHO_N "checking whether we are using the GNU C Library 2.1 or newer... $ECHO_C" >&6
+if test "${ac_cv_gnu_library_2_1+set}" = set; then
+ echo $ECHO_N "(cached) $ECHO_C" >&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
+echo "$as_me:$LINENO: result: $ac_cv_gnu_library_2_1" >&5
+echo "${ECHO_T}$ac_cv_gnu_library_2_1" >&6
+
+ GLIBC21="$ac_cv_gnu_library_2_1"
+
+
+
+
+ echo "$as_me:$LINENO: checking whether integer division by zero raises SIGFPE" >&5
+echo $ECHO_N "checking whether integer division by zero raises SIGFPE... $ECHO_C" >&6
+if test "${gt_cv_int_divbyzero_sigfpe+set}" = set; then
+ echo $ECHO_N "(cached) $ECHO_C" >&6
+else
+
+ if test "$cross_compiling" = yes; then
+
+ # Guess based on the CPU.
+ case "$host_cpu" in
+ alpha* | i3456786 | m68k | s390*)
+ gt_cv_int_divbyzero_sigfpe="guessing yes";;
+ *)
+ gt_cv_int_divbyzero_sigfpe="guessing no";;
+ 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 <stdlib.h>
+#include <signal.h>
+
+static void
+#ifdef __cplusplus
+sigfpe_handler (int sig)
+#else
+sigfpe_handler (sig) int sig;
+#endif
+{
+ /* Exit with code 0 if SIGFPE, with code 1 if any other signal. */
+ exit (sig != SIGFPE);
+}
+
+int x = 1;
+int y = 0;
+int z;
+int nan;
+
+int main ()
+{
+ signal (SIGFPE, sigfpe_handler);
+/* IRIX and AIX (when "xlc -qcheck" is used) yield signal SIGTRAP. */
+#if (defined (__sgi) || defined (_AIX)) && defined (SIGTRAP)
+ signal (SIGTRAP, sigfpe_handler);
+#endif
+/* Linux/SPARC yields signal SIGILL. */
+#if defined (__sparc__) && defined (__linux__)
+ signal (SIGILL, sigfpe_handler);
+#endif
+
+ z = x / y;
+ nan = y / y;
+ exit (1);
+}
+
+_ACEOF
+rm -f conftest$ac_exeext
+if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5
+ (eval $ac_link) 2>&5
+ ac_status=$?
+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
+ (exit $ac_status); } && { ac_try='./conftest$ac_exeext'
+ { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+ (eval $ac_try) 2>&5
+ ac_status=$?
+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
+ (exit $ac_status); }; }; then
+ gt_cv_int_divbyzero_sigfpe=yes
+else
+ echo "$as_me: program exited with status $ac_status" >&5
+echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+( exit $ac_status )
+gt_cv_int_divbyzero_sigfpe=no
+fi
+rm -f core *.core gmon.out bb.out conftest$ac_exeext conftest.$ac_objext conftest.$ac_ext
+fi
+
+fi
+echo "$as_me:$LINENO: result: $gt_cv_int_divbyzero_sigfpe" >&5
+echo "${ECHO_T}$gt_cv_int_divbyzero_sigfpe" >&6
+ case "$gt_cv_int_divbyzero_sigfpe" in
+ *yes) value=1;;
+ *) value=0;;
+ esac
+
+cat >>confdefs.h <<_ACEOF
+#define INTDIV0_RAISES_SIGFPE $value
+_ACEOF
+
+
+
+ echo "$as_me:$LINENO: checking for inttypes.h" >&5
+echo $ECHO_N "checking for inttypes.h... $ECHO_C" >&6
+if test "${gt_cv_header_inttypes_h+set}" = set; then
+ echo $ECHO_N "(cached) $ECHO_C" >&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 <inttypes.h>
+int
+main ()
+{
+
+ ;
+ return 0;
+}
+_ACEOF
+rm -f conftest.$ac_objext
+if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5
+ (eval $ac_compile) 2>conftest.er1
+ ac_status=$?
+ grep -v '^ *+' conftest.er1 >conftest.err
+ rm -f conftest.er1
+ cat conftest.err >&5
+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
+ (exit $ac_status); } &&
+ { ac_try='test -z "$ac_c_werror_flag"
+ || test ! -s conftest.err'
+ { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+ (eval $ac_try) 2>&5
+ ac_status=$?
+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
+ (exit $ac_status); }; } &&
+ { ac_try='test -s conftest.$ac_objext'
+ { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+ (eval $ac_try) 2>&5
+ ac_status=$?
+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
+ (exit $ac_status); }; }; then
+ gt_cv_header_inttypes_h=yes
+else
+ echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+gt_cv_header_inttypes_h=no
+fi
+rm -f conftest.err conftest.$ac_objext conftest.$ac_ext
+
+fi
+echo "$as_me:$LINENO: result: $gt_cv_header_inttypes_h" >&5
+echo "${ECHO_T}$gt_cv_header_inttypes_h" >&6
+ if test $gt_cv_header_inttypes_h = yes; then
+
+cat >>confdefs.h <<_ACEOF
+#define HAVE_INTTYPES_H 1
+_ACEOF
+
+ fi
+
+
+
+ if test $gt_cv_header_inttypes_h = yes; then
+ echo "$as_me:$LINENO: checking whether the inttypes.h PRIxNN macros are broken" >&5
+echo $ECHO_N "checking whether the inttypes.h PRIxNN macros are broken... $ECHO_C" >&6
+if test "${gt_cv_inttypes_pri_broken+set}" = set; then
+ echo $ECHO_N "(cached) $ECHO_C" >&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 <inttypes.h>
+#ifdef PRId32
+char *p = PRId32;
+#endif
+
+int
+main ()
+{
+
+ ;
+ return 0;
+}
+_ACEOF
+rm -f conftest.$ac_objext
+if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5
+ (eval $ac_compile) 2>conftest.er1
+ ac_status=$?
+ grep -v '^ *+' conftest.er1 >conftest.err
+ rm -f conftest.er1
+ cat conftest.err >&5
+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
+ (exit $ac_status); } &&
+ { ac_try='test -z "$ac_c_werror_flag"
+ || test ! -s conftest.err'
+ { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+ (eval $ac_try) 2>&5
+ ac_status=$?
+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
+ (exit $ac_status); }; } &&
+ { ac_try='test -s conftest.$ac_objext'
+ { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+ (eval $ac_try) 2>&5
+ ac_status=$?
+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
+ (exit $ac_status); }; }; then
+ gt_cv_inttypes_pri_broken=no
+else
+ echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+gt_cv_inttypes_pri_broken=yes
+fi
+rm -f conftest.err conftest.$ac_objext conftest.$ac_ext
+
+fi
+echo "$as_me:$LINENO: result: $gt_cv_inttypes_pri_broken" >&5
+echo "${ECHO_T}$gt_cv_inttypes_pri_broken" >&6
+ fi
+ if test "$gt_cv_inttypes_pri_broken" = yes; then
+
+cat >>confdefs.h <<_ACEOF
+#define PRI_MACROS_BROKEN 1
+_ACEOF
+
+ fi
+
+
+
+for ac_header in stdint.h
+do
+as_ac_Header=`echo "ac_cv_header_$ac_header" | $as_tr_sh`
+if eval "test \"\${$as_ac_Header+set}\" = set"; then
+ echo "$as_me:$LINENO: checking for $ac_header" >&5
+echo $ECHO_N "checking for $ac_header... $ECHO_C" >&6
+if eval "test \"\${$as_ac_Header+set}\" = set"; then
+ echo $ECHO_N "(cached) $ECHO_C" >&6
+fi
+echo "$as_me:$LINENO: result: `eval echo '${'$as_ac_Header'}'`" >&5
+echo "${ECHO_T}`eval echo '${'$as_ac_Header'}'`" >&6
+else
+ # Is the header compilable?
+echo "$as_me:$LINENO: checking $ac_header usability" >&5
+echo $ECHO_N "checking $ac_header usability... $ECHO_C" >&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 { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5
+ (eval $ac_compile) 2>conftest.er1
+ ac_status=$?
+ grep -v '^ *+' conftest.er1 >conftest.err
+ rm -f conftest.er1
+ cat conftest.err >&5
+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
+ (exit $ac_status); } &&
+ { ac_try='test -z "$ac_c_werror_flag"
+ || test ! -s conftest.err'
+ { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+ (eval $ac_try) 2>&5
+ ac_status=$?
+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
+ (exit $ac_status); }; } &&
+ { ac_try='test -s conftest.$ac_objext'
+ { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+ (eval $ac_try) 2>&5
+ ac_status=$?
+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
+ (exit $ac_status); }; }; then
+ ac_header_compiler=yes
+else
+ echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+ac_header_compiler=no
+fi
+rm -f conftest.err conftest.$ac_objext conftest.$ac_ext
+echo "$as_me:$LINENO: result: $ac_header_compiler" >&5
+echo "${ECHO_T}$ac_header_compiler" >&6
+
+# Is the header present?
+echo "$as_me:$LINENO: checking $ac_header presence" >&5
+echo $ECHO_N "checking $ac_header presence... $ECHO_C" >&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 { (eval echo "$as_me:$LINENO: \"$ac_cpp conftest.$ac_ext\"") >&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
+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
+ (exit $ac_status); } >/dev/null; then
+ if test -s conftest.err; then
+ ac_cpp_err=$ac_c_preproc_warn_flag
+ ac_cpp_err=$ac_cpp_err$ac_c_werror_flag
+ else
+ ac_cpp_err=
+ fi
+else
+ ac_cpp_err=yes
+fi
+if test -z "$ac_cpp_err"; then
+ ac_header_preproc=yes
+else
+ 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
+echo "$as_me:$LINENO: result: $ac_header_preproc" >&5
+echo "${ECHO_T}$ac_header_preproc" >&6
+
+# So? What about this header?
+case $ac_header_compiler:$ac_header_preproc:$ac_c_preproc_warn_flag in
+ yes:no: )
+ { echo "$as_me:$LINENO: WARNING: $ac_header: accepted by the compiler, rejected by the preprocessor!" >&5
+echo "$as_me: WARNING: $ac_header: accepted by the compiler, rejected by the preprocessor!" >&2;}
+ { echo "$as_me:$LINENO: WARNING: $ac_header: proceeding with the compiler's result" >&5
+echo "$as_me: WARNING: $ac_header: proceeding with the compiler's result" >&2;}
+ ac_header_preproc=yes
+ ;;
+ no:yes:* )
+ { echo "$as_me:$LINENO: WARNING: $ac_header: present but cannot be compiled" >&5
+echo "$as_me: WARNING: $ac_header: present but cannot be compiled" >&2;}
+ { echo "$as_me:$LINENO: WARNING: $ac_header: check for missing prerequisite headers?" >&5
+echo "$as_me: WARNING: $ac_header: check for missing prerequisite headers?" >&2;}
+ { echo "$as_me:$LINENO: WARNING: $ac_header: see the Autoconf documentation" >&5
+echo "$as_me: WARNING: $ac_header: see the Autoconf documentation" >&2;}
+ { echo "$as_me:$LINENO: WARNING: $ac_header: section \"Present But Cannot Be Compiled\"" >&5
+echo "$as_me: WARNING: $ac_header: section \"Present But Cannot Be Compiled\"" >&2;}
+ { echo "$as_me:$LINENO: WARNING: $ac_header: proceeding with the preprocessor's result" >&5
+echo "$as_me: WARNING: $ac_header: proceeding with the preprocessor's result" >&2;}
+ { echo "$as_me:$LINENO: WARNING: $ac_header: in the future, the compiler will take precedence" >&5
+echo "$as_me: WARNING: $ac_header: in the future, the compiler will take precedence" >&2;}
+ (
+ cat <<\_ASBOX
+## -------------------------------------- ##
+## Report this to the GNU Texinfo lists. ##
+## -------------------------------------- ##
+_ASBOX
+ ) |
+ sed "s/^/$as_me: WARNING: /" >&2
+ ;;
+esac
+echo "$as_me:$LINENO: checking for $ac_header" >&5
+echo $ECHO_N "checking for $ac_header... $ECHO_C" >&6
+if eval "test \"\${$as_ac_Header+set}\" = set"; then
+ echo $ECHO_N "(cached) $ECHO_C" >&6
+else
+ eval "$as_ac_Header=\$ac_header_preproc"
+fi
+echo "$as_me:$LINENO: result: `eval echo '${'$as_ac_Header'}'`" >&5
+echo "${ECHO_T}`eval echo '${'$as_ac_Header'}'`" >&6
+
+fi
+if test `eval echo '${'$as_ac_Header'}'` = yes; then
+ cat >>confdefs.h <<_ACEOF
+#define `echo "HAVE_$ac_header" | $as_tr_cpp` 1
+_ACEOF
+
+fi
+
+done
+
+ echo "$as_me:$LINENO: checking for SIZE_MAX" >&5
+echo $ECHO_N "checking for SIZE_MAX... $ECHO_C" >&6
+ result=
+ 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>
+#if HAVE_STDINT_H
+#include <stdint.h>
+#endif
+#ifdef SIZE_MAX
+Found it
+#endif
+
+_ACEOF
+if (eval "$ac_cpp conftest.$ac_ext") 2>&5 |
+ $EGREP "Found it" >/dev/null 2>&1; then
+ result=yes
+fi
+rm -f conftest*
+
+ if test -z "$result"; then
+ 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. */
+#include <stddef.h>
+int
+main ()
+{
+static int test_array [1 - 2 * !((~(size_t)0 / 10) >= 0)];
+test_array [0] = 0
+
+ ;
+ return 0;
+}
+_ACEOF
+rm -f conftest.$ac_objext
+if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5
+ (eval $ac_compile) 2>conftest.er1
+ ac_status=$?
+ grep -v '^ *+' conftest.er1 >conftest.err
+ rm -f conftest.er1
+ cat conftest.err >&5
+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
+ (exit $ac_status); } &&
+ { ac_try='test -z "$ac_c_werror_flag"
+ || test ! -s conftest.err'
+ { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+ (eval $ac_try) 2>&5
+ ac_status=$?
+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
+ (exit $ac_status); }; } &&
+ { ac_try='test -s conftest.$ac_objext'
+ { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+ (eval $ac_try) 2>&5
+ ac_status=$?
+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
+ (exit $ac_status); }; }; 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. */
+#include <stddef.h>
+int
+main ()
+{
+static int test_array [1 - 2 * !((~(size_t)0 / 10) <= $ac_mid)];
+test_array [0] = 0
+
+ ;
+ return 0;
+}
+_ACEOF
+rm -f conftest.$ac_objext
+if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5
+ (eval $ac_compile) 2>conftest.er1
+ ac_status=$?
+ grep -v '^ *+' conftest.er1 >conftest.err
+ rm -f conftest.er1
+ cat conftest.err >&5
+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
+ (exit $ac_status); } &&
+ { ac_try='test -z "$ac_c_werror_flag"
+ || test ! -s conftest.err'
+ { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+ (eval $ac_try) 2>&5
+ ac_status=$?
+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
+ (exit $ac_status); }; } &&
+ { ac_try='test -s conftest.$ac_objext'
+ { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+ (eval $ac_try) 2>&5
+ ac_status=$?
+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
+ (exit $ac_status); }; }; then
+ ac_hi=$ac_mid; break
+else
+ 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 conftest.err conftest.$ac_objext conftest.$ac_ext
+ done
+else
+ 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. */
+#include <stddef.h>
+int
+main ()
+{
+static int test_array [1 - 2 * !((~(size_t)0 / 10) < 0)];
+test_array [0] = 0
+
+ ;
+ return 0;
+}
+_ACEOF
+rm -f conftest.$ac_objext
+if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5
+ (eval $ac_compile) 2>conftest.er1
+ ac_status=$?
+ grep -v '^ *+' conftest.er1 >conftest.err
+ rm -f conftest.er1
+ cat conftest.err >&5
+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
+ (exit $ac_status); } &&
+ { ac_try='test -z "$ac_c_werror_flag"
+ || test ! -s conftest.err'
+ { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+ (eval $ac_try) 2>&5
+ ac_status=$?
+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
+ (exit $ac_status); }; } &&
+ { ac_try='test -s conftest.$ac_objext'
+ { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+ (eval $ac_try) 2>&5
+ ac_status=$?
+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
+ (exit $ac_status); }; }; 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. */
+#include <stddef.h>
+int
+main ()
+{
+static int test_array [1 - 2 * !((~(size_t)0 / 10) >= $ac_mid)];
+test_array [0] = 0
+
+ ;
+ return 0;
+}
+_ACEOF
+rm -f conftest.$ac_objext
+if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5
+ (eval $ac_compile) 2>conftest.er1
+ ac_status=$?
+ grep -v '^ *+' conftest.er1 >conftest.err
+ rm -f conftest.er1
+ cat conftest.err >&5
+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
+ (exit $ac_status); } &&
+ { ac_try='test -z "$ac_c_werror_flag"
+ || test ! -s conftest.err'
+ { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+ (eval $ac_try) 2>&5
+ ac_status=$?
+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
+ (exit $ac_status); }; } &&
+ { ac_try='test -s conftest.$ac_objext'
+ { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+ (eval $ac_try) 2>&5
+ ac_status=$?
+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
+ (exit $ac_status); }; }; then
+ ac_lo=$ac_mid; break
+else
+ 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 conftest.err conftest.$ac_objext conftest.$ac_ext
+ done
+else
+ echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+ac_lo= ac_hi=
+fi
+rm -f conftest.err conftest.$ac_objext conftest.$ac_ext
+fi
+rm -f 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. */
+#include <stddef.h>
+int
+main ()
+{
+static int test_array [1 - 2 * !((~(size_t)0 / 10) <= $ac_mid)];
+test_array [0] = 0
+
+ ;
+ return 0;
+}
+_ACEOF
+rm -f conftest.$ac_objext
+if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5
+ (eval $ac_compile) 2>conftest.er1
+ ac_status=$?
+ grep -v '^ *+' conftest.er1 >conftest.err
+ rm -f conftest.er1
+ cat conftest.err >&5
+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
+ (exit $ac_status); } &&
+ { ac_try='test -z "$ac_c_werror_flag"
+ || test ! -s conftest.err'
+ { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+ (eval $ac_try) 2>&5
+ ac_status=$?
+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
+ (exit $ac_status); }; } &&
+ { ac_try='test -s conftest.$ac_objext'
+ { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+ (eval $ac_try) 2>&5
+ ac_status=$?
+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
+ (exit $ac_status); }; }; then
+ ac_hi=$ac_mid
+else
+ echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+ac_lo=`expr '(' $ac_mid ')' + 1`
+fi
+rm -f conftest.err conftest.$ac_objext conftest.$ac_ext
+done
+case $ac_lo in
+?*) res_hi=$ac_lo;;
+'') result=? ;;
+esac
+else
+ if test "$cross_compiling" = yes; then
+ { { echo "$as_me:$LINENO: error: cannot run test program while cross compiling
+See \`config.log' for more details." >&5
+echo "$as_me: error: cannot run test program while cross compiling
+See \`config.log' for more details." >&2;}
+ { (exit 1); exit 1; }; }
+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>
+long longval () { return ~(size_t)0 / 10; }
+unsigned long ulongval () { return ~(size_t)0 / 10; }
+#include <stdio.h>
+#include <stdlib.h>
+int
+main ()
+{
+
+ FILE *f = fopen ("conftest.val", "w");
+ if (! f)
+ exit (1);
+ if ((~(size_t)0 / 10) < 0)
+ {
+ long i = longval ();
+ if (i != (~(size_t)0 / 10))
+ exit (1);
+ fprintf (f, "%ld\n", i);
+ }
+ else
+ {
+ unsigned long i = ulongval ();
+ if (i != (~(size_t)0 / 10))
+ exit (1);
+ fprintf (f, "%lu\n", i);
+ }
+ exit (ferror (f) || fclose (f) != 0);
+
+ ;
+ return 0;
+}
+_ACEOF
+rm -f conftest$ac_exeext
+if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5
+ (eval $ac_link) 2>&5
+ ac_status=$?
+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
+ (exit $ac_status); } && { ac_try='./conftest$ac_exeext'
+ { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+ (eval $ac_try) 2>&5
+ ac_status=$?
+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
+ (exit $ac_status); }; }; then
+ res_hi=`cat conftest.val`
+else
+ echo "$as_me: program exited with status $ac_status" >&5
+echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+( exit $ac_status )
+result=?
+fi
+rm -f core *.core gmon.out bb.out conftest$ac_exeext conftest.$ac_objext conftest.$ac_ext
+fi
+fi
+rm -f conftest.val
+ 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. */
+#include <stddef.h>
+int
+main ()
+{
+static int test_array [1 - 2 * !((~(size_t)0 % 10) >= 0)];
+test_array [0] = 0
+
+ ;
+ return 0;
+}
+_ACEOF
+rm -f conftest.$ac_objext
+if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5
+ (eval $ac_compile) 2>conftest.er1
+ ac_status=$?
+ grep -v '^ *+' conftest.er1 >conftest.err
+ rm -f conftest.er1
+ cat conftest.err >&5
+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
+ (exit $ac_status); } &&
+ { ac_try='test -z "$ac_c_werror_flag"
+ || test ! -s conftest.err'
+ { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+ (eval $ac_try) 2>&5
+ ac_status=$?
+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
+ (exit $ac_status); }; } &&
+ { ac_try='test -s conftest.$ac_objext'
+ { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+ (eval $ac_try) 2>&5
+ ac_status=$?
+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
+ (exit $ac_status); }; }; 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. */
+#include <stddef.h>
+int
+main ()
+{
+static int test_array [1 - 2 * !((~(size_t)0 % 10) <= $ac_mid)];
+test_array [0] = 0
+
+ ;
+ return 0;
+}
+_ACEOF
+rm -f conftest.$ac_objext
+if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5
+ (eval $ac_compile) 2>conftest.er1
+ ac_status=$?
+ grep -v '^ *+' conftest.er1 >conftest.err
+ rm -f conftest.er1
+ cat conftest.err >&5
+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
+ (exit $ac_status); } &&
+ { ac_try='test -z "$ac_c_werror_flag"
+ || test ! -s conftest.err'
+ { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+ (eval $ac_try) 2>&5
+ ac_status=$?
+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
+ (exit $ac_status); }; } &&
+ { ac_try='test -s conftest.$ac_objext'
+ { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+ (eval $ac_try) 2>&5
+ ac_status=$?
+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
+ (exit $ac_status); }; }; then
+ ac_hi=$ac_mid; break
+else
+ 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 conftest.err conftest.$ac_objext conftest.$ac_ext
+ done
+else
+ 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. */
+#include <stddef.h>
+int
+main ()
+{
+static int test_array [1 - 2 * !((~(size_t)0 % 10) < 0)];
+test_array [0] = 0
+
+ ;
+ return 0;
+}
+_ACEOF
+rm -f conftest.$ac_objext
+if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5
+ (eval $ac_compile) 2>conftest.er1
+ ac_status=$?
+ grep -v '^ *+' conftest.er1 >conftest.err
+ rm -f conftest.er1
+ cat conftest.err >&5
+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
+ (exit $ac_status); } &&
+ { ac_try='test -z "$ac_c_werror_flag"
+ || test ! -s conftest.err'
+ { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+ (eval $ac_try) 2>&5
+ ac_status=$?
+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
+ (exit $ac_status); }; } &&
+ { ac_try='test -s conftest.$ac_objext'
+ { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+ (eval $ac_try) 2>&5
+ ac_status=$?
+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
+ (exit $ac_status); }; }; 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. */
+#include <stddef.h>
+int
+main ()
+{
+static int test_array [1 - 2 * !((~(size_t)0 % 10) >= $ac_mid)];
+test_array [0] = 0
+
+ ;
+ return 0;
+}
+_ACEOF
+rm -f conftest.$ac_objext
+if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5
+ (eval $ac_compile) 2>conftest.er1
+ ac_status=$?
+ grep -v '^ *+' conftest.er1 >conftest.err
+ rm -f conftest.er1
+ cat conftest.err >&5
+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
+ (exit $ac_status); } &&
+ { ac_try='test -z "$ac_c_werror_flag"
+ || test ! -s conftest.err'
+ { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+ (eval $ac_try) 2>&5
+ ac_status=$?
+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
+ (exit $ac_status); }; } &&
+ { ac_try='test -s conftest.$ac_objext'
+ { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+ (eval $ac_try) 2>&5
+ ac_status=$?
+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
+ (exit $ac_status); }; }; then
+ ac_lo=$ac_mid; break
+else
+ 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 conftest.err conftest.$ac_objext conftest.$ac_ext
+ done
+else
+ echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+ac_lo= ac_hi=
+fi
+rm -f conftest.err conftest.$ac_objext conftest.$ac_ext
+fi
+rm -f 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. */
+#include <stddef.h>
+int
+main ()
+{
+static int test_array [1 - 2 * !((~(size_t)0 % 10) <= $ac_mid)];
+test_array [0] = 0
+
+ ;
+ return 0;
+}
+_ACEOF
+rm -f conftest.$ac_objext
+if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5
+ (eval $ac_compile) 2>conftest.er1
+ ac_status=$?
+ grep -v '^ *+' conftest.er1 >conftest.err
+ rm -f conftest.er1
+ cat conftest.err >&5
+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
+ (exit $ac_status); } &&
+ { ac_try='test -z "$ac_c_werror_flag"
+ || test ! -s conftest.err'
+ { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+ (eval $ac_try) 2>&5
+ ac_status=$?
+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
+ (exit $ac_status); }; } &&
+ { ac_try='test -s conftest.$ac_objext'
+ { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+ (eval $ac_try) 2>&5
+ ac_status=$?
+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
+ (exit $ac_status); }; }; then
+ ac_hi=$ac_mid
+else
+ echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+ac_lo=`expr '(' $ac_mid ')' + 1`
+fi
+rm -f conftest.err conftest.$ac_objext conftest.$ac_ext
+done
+case $ac_lo in
+?*) res_lo=$ac_lo;;
+'') result=? ;;
+esac
+else
+ if test "$cross_compiling" = yes; then
+ { { echo "$as_me:$LINENO: error: cannot run test program while cross compiling
+See \`config.log' for more details." >&5
+echo "$as_me: error: cannot run test program while cross compiling
+See \`config.log' for more details." >&2;}
+ { (exit 1); exit 1; }; }
+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>
+long longval () { return ~(size_t)0 % 10; }
+unsigned long ulongval () { return ~(size_t)0 % 10; }
+#include <stdio.h>
+#include <stdlib.h>
+int
+main ()
+{
+
+ FILE *f = fopen ("conftest.val", "w");
+ if (! f)
+ exit (1);
+ if ((~(size_t)0 % 10) < 0)
+ {
+ long i = longval ();
+ if (i != (~(size_t)0 % 10))
+ exit (1);
+ fprintf (f, "%ld\n", i);
+ }
+ else
+ {
+ unsigned long i = ulongval ();
+ if (i != (~(size_t)0 % 10))
+ exit (1);
+ fprintf (f, "%lu\n", i);
+ }
+ exit (ferror (f) || fclose (f) != 0);
+
+ ;
+ return 0;
+}
+_ACEOF
+rm -f conftest$ac_exeext
+if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5
+ (eval $ac_link) 2>&5
+ ac_status=$?
+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
+ (exit $ac_status); } && { ac_try='./conftest$ac_exeext'
+ { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+ (eval $ac_try) 2>&5
+ ac_status=$?
+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
+ (exit $ac_status); }; }; then
+ res_lo=`cat conftest.val`
+else
+ echo "$as_me: program exited with status $ac_status" >&5
+echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+( exit $ac_status )
+result=?
+fi
+rm -f core *.core gmon.out bb.out conftest$ac_exeext conftest.$ac_objext conftest.$ac_ext
+fi
+fi
+rm -f conftest.val
+ 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. */
+#include <stddef.h>
+int
+main ()
+{
+static int test_array [1 - 2 * !((sizeof (size_t) <= sizeof (unsigned int)) >= 0)];
+test_array [0] = 0
+
+ ;
+ return 0;
+}
+_ACEOF
+rm -f conftest.$ac_objext
+if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5
+ (eval $ac_compile) 2>conftest.er1
+ ac_status=$?
+ grep -v '^ *+' conftest.er1 >conftest.err
+ rm -f conftest.er1
+ cat conftest.err >&5
+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
+ (exit $ac_status); } &&
+ { ac_try='test -z "$ac_c_werror_flag"
+ || test ! -s conftest.err'
+ { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+ (eval $ac_try) 2>&5
+ ac_status=$?
+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
+ (exit $ac_status); }; } &&
+ { ac_try='test -s conftest.$ac_objext'
+ { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+ (eval $ac_try) 2>&5
+ ac_status=$?
+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
+ (exit $ac_status); }; }; 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. */
+#include <stddef.h>
+int
+main ()
+{
+static int test_array [1 - 2 * !((sizeof (size_t) <= sizeof (unsigned int)) <= $ac_mid)];
+test_array [0] = 0
+
+ ;
+ return 0;
+}
+_ACEOF
+rm -f conftest.$ac_objext
+if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5
+ (eval $ac_compile) 2>conftest.er1
+ ac_status=$?
+ grep -v '^ *+' conftest.er1 >conftest.err
+ rm -f conftest.er1
+ cat conftest.err >&5
+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
+ (exit $ac_status); } &&
+ { ac_try='test -z "$ac_c_werror_flag"
+ || test ! -s conftest.err'
+ { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+ (eval $ac_try) 2>&5
+ ac_status=$?
+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
+ (exit $ac_status); }; } &&
+ { ac_try='test -s conftest.$ac_objext'
+ { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+ (eval $ac_try) 2>&5
+ ac_status=$?
+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
+ (exit $ac_status); }; }; then
+ ac_hi=$ac_mid; break
+else
+ 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 conftest.err conftest.$ac_objext conftest.$ac_ext
+ done
+else
+ 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. */
+#include <stddef.h>
+int
+main ()
+{
+static int test_array [1 - 2 * !((sizeof (size_t) <= sizeof (unsigned int)) < 0)];
+test_array [0] = 0
+
+ ;
+ return 0;
+}
+_ACEOF
+rm -f conftest.$ac_objext
+if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5
+ (eval $ac_compile) 2>conftest.er1
+ ac_status=$?
+ grep -v '^ *+' conftest.er1 >conftest.err
+ rm -f conftest.er1
+ cat conftest.err >&5
+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
+ (exit $ac_status); } &&
+ { ac_try='test -z "$ac_c_werror_flag"
+ || test ! -s conftest.err'
+ { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+ (eval $ac_try) 2>&5
+ ac_status=$?
+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
+ (exit $ac_status); }; } &&
+ { ac_try='test -s conftest.$ac_objext'
+ { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+ (eval $ac_try) 2>&5
+ ac_status=$?
+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
+ (exit $ac_status); }; }; 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. */
+#include <stddef.h>
+int
+main ()
+{
+static int test_array [1 - 2 * !((sizeof (size_t) <= sizeof (unsigned int)) >= $ac_mid)];
+test_array [0] = 0
+
+ ;
+ return 0;
+}
+_ACEOF
+rm -f conftest.$ac_objext
+if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5
+ (eval $ac_compile) 2>conftest.er1
+ ac_status=$?
+ grep -v '^ *+' conftest.er1 >conftest.err
+ rm -f conftest.er1
+ cat conftest.err >&5
+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
+ (exit $ac_status); } &&
+ { ac_try='test -z "$ac_c_werror_flag"
+ || test ! -s conftest.err'
+ { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+ (eval $ac_try) 2>&5
+ ac_status=$?
+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
+ (exit $ac_status); }; } &&
+ { ac_try='test -s conftest.$ac_objext'
+ { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+ (eval $ac_try) 2>&5
+ ac_status=$?
+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
+ (exit $ac_status); }; }; then
+ ac_lo=$ac_mid; break
+else
+ 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 conftest.err conftest.$ac_objext conftest.$ac_ext
+ done
+else
+ echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+ac_lo= ac_hi=
+fi
+rm -f conftest.err conftest.$ac_objext conftest.$ac_ext
+fi
+rm -f 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. */
+#include <stddef.h>
+int
+main ()
+{
+static int test_array [1 - 2 * !((sizeof (size_t) <= sizeof (unsigned int)) <= $ac_mid)];
+test_array [0] = 0
+
+ ;
+ return 0;
+}
+_ACEOF
+rm -f conftest.$ac_objext
+if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5
+ (eval $ac_compile) 2>conftest.er1
+ ac_status=$?
+ grep -v '^ *+' conftest.er1 >conftest.err
+ rm -f conftest.er1
+ cat conftest.err >&5
+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
+ (exit $ac_status); } &&
+ { ac_try='test -z "$ac_c_werror_flag"
+ || test ! -s conftest.err'
+ { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+ (eval $ac_try) 2>&5
+ ac_status=$?
+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
+ (exit $ac_status); }; } &&
+ { ac_try='test -s conftest.$ac_objext'
+ { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+ (eval $ac_try) 2>&5
+ ac_status=$?
+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
+ (exit $ac_status); }; }; then
+ ac_hi=$ac_mid
+else
+ echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+ac_lo=`expr '(' $ac_mid ')' + 1`
+fi
+rm -f conftest.err conftest.$ac_objext conftest.$ac_ext
+done
+case $ac_lo in
+?*) fits_in_uint=$ac_lo;;
+'') result=? ;;
+esac
+else
+ if test "$cross_compiling" = yes; then
+ { { echo "$as_me:$LINENO: error: cannot run test program while cross compiling
+See \`config.log' for more details." >&5
+echo "$as_me: error: cannot run test program while cross compiling
+See \`config.log' for more details." >&2;}
+ { (exit 1); exit 1; }; }
+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>
+long longval () { return sizeof (size_t) <= sizeof (unsigned int); }
+unsigned long ulongval () { return sizeof (size_t) <= sizeof (unsigned int); }
+#include <stdio.h>
+#include <stdlib.h>
+int
+main ()
+{
+
+ FILE *f = fopen ("conftest.val", "w");
+ if (! f)
+ exit (1);
+ if ((sizeof (size_t) <= sizeof (unsigned int)) < 0)
+ {
+ long i = longval ();
+ if (i != (sizeof (size_t) <= sizeof (unsigned int)))
+ exit (1);
+ fprintf (f, "%ld\n", i);
+ }
+ else
+ {
+ unsigned long i = ulongval ();
+ if (i != (sizeof (size_t) <= sizeof (unsigned int)))
+ exit (1);
+ fprintf (f, "%lu\n", i);
+ }
+ exit (ferror (f) || fclose (f) != 0);
+
+ ;
+ return 0;
+}
+_ACEOF
+rm -f conftest$ac_exeext
+if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5
+ (eval $ac_link) 2>&5
+ ac_status=$?
+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
+ (exit $ac_status); } && { ac_try='./conftest$ac_exeext'
+ { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+ (eval $ac_try) 2>&5
+ ac_status=$?
+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
+ (exit $ac_status); }; }; then
+ fits_in_uint=`cat conftest.val`
+else
+ echo "$as_me: program exited with status $ac_status" >&5
+echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+( exit $ac_status )
+result=?
+fi
+rm -f core *.core gmon.out bb.out conftest$ac_exeext conftest.$ac_objext conftest.$ac_ext
+fi
+fi
+rm -f conftest.val
+ if test "$fits_in_uint" = 1; then
+ 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>
+ extern size_t foo;
+ extern unsigned long foo;
+
+int
+main ()
+{
+
+ ;
+ return 0;
+}
+_ACEOF
+rm -f conftest.$ac_objext
+if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5
+ (eval $ac_compile) 2>conftest.er1
+ ac_status=$?
+ grep -v '^ *+' conftest.er1 >conftest.err
+ rm -f conftest.er1
+ cat conftest.err >&5
+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
+ (exit $ac_status); } &&
+ { ac_try='test -z "$ac_c_werror_flag"
+ || test ! -s conftest.err'
+ { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+ (eval $ac_try) 2>&5
+ ac_status=$?
+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
+ (exit $ac_status); }; } &&
+ { ac_try='test -s conftest.$ac_objext'
+ { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+ (eval $ac_try) 2>&5
+ ac_status=$?
+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
+ (exit $ac_status); }; }; then
+ fits_in_uint=0
+else
+ echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+fi
+rm -f conftest.err conftest.$ac_objext conftest.$ac_ext
+ fi
+ if test -z "$result"; then
+ if test "$fits_in_uint" = 1; then
+ result="$res_hi$res_lo"U
+ else
+ result="$res_hi$res_lo"UL
+ fi
+ else
+ result='~(size_t)0'
+ fi
+ fi
+ echo "$as_me:$LINENO: result: $result" >&5
+echo "${ECHO_T}$result" >&6
+ if test "$result" != yes; then
+
+cat >>confdefs.h <<_ACEOF
+#define SIZE_MAX $result
+_ACEOF
+
+ fi
+
+
+
+
+for ac_header in stdint.h
+do
+as_ac_Header=`echo "ac_cv_header_$ac_header" | $as_tr_sh`
+if eval "test \"\${$as_ac_Header+set}\" = set"; then
+ echo "$as_me:$LINENO: checking for $ac_header" >&5
+echo $ECHO_N "checking for $ac_header... $ECHO_C" >&6
+if eval "test \"\${$as_ac_Header+set}\" = set"; then
+ echo $ECHO_N "(cached) $ECHO_C" >&6
+fi
+echo "$as_me:$LINENO: result: `eval echo '${'$as_ac_Header'}'`" >&5
+echo "${ECHO_T}`eval echo '${'$as_ac_Header'}'`" >&6
+else
+ # Is the header compilable?
+echo "$as_me:$LINENO: checking $ac_header usability" >&5
+echo $ECHO_N "checking $ac_header usability... $ECHO_C" >&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 { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5
+ (eval $ac_compile) 2>conftest.er1
+ ac_status=$?
+ grep -v '^ *+' conftest.er1 >conftest.err
+ rm -f conftest.er1
+ cat conftest.err >&5
+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
+ (exit $ac_status); } &&
+ { ac_try='test -z "$ac_c_werror_flag"
+ || test ! -s conftest.err'
+ { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+ (eval $ac_try) 2>&5
+ ac_status=$?
+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
+ (exit $ac_status); }; } &&
+ { ac_try='test -s conftest.$ac_objext'
+ { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+ (eval $ac_try) 2>&5
+ ac_status=$?
+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
+ (exit $ac_status); }; }; then
+ ac_header_compiler=yes
+else
+ echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+ac_header_compiler=no
+fi
+rm -f conftest.err conftest.$ac_objext conftest.$ac_ext
+echo "$as_me:$LINENO: result: $ac_header_compiler" >&5
+echo "${ECHO_T}$ac_header_compiler" >&6
+
+# Is the header present?
+echo "$as_me:$LINENO: checking $ac_header presence" >&5
+echo $ECHO_N "checking $ac_header presence... $ECHO_C" >&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 { (eval echo "$as_me:$LINENO: \"$ac_cpp conftest.$ac_ext\"") >&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
+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
+ (exit $ac_status); } >/dev/null; then
+ if test -s conftest.err; then
+ ac_cpp_err=$ac_c_preproc_warn_flag
+ ac_cpp_err=$ac_cpp_err$ac_c_werror_flag
+ else
+ ac_cpp_err=
+ fi
+else
+ ac_cpp_err=yes
+fi
+if test -z "$ac_cpp_err"; then
+ ac_header_preproc=yes
+else
+ 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
+echo "$as_me:$LINENO: result: $ac_header_preproc" >&5
+echo "${ECHO_T}$ac_header_preproc" >&6
+
+# So? What about this header?
+case $ac_header_compiler:$ac_header_preproc:$ac_c_preproc_warn_flag in
+ yes:no: )
+ { echo "$as_me:$LINENO: WARNING: $ac_header: accepted by the compiler, rejected by the preprocessor!" >&5
+echo "$as_me: WARNING: $ac_header: accepted by the compiler, rejected by the preprocessor!" >&2;}
+ { echo "$as_me:$LINENO: WARNING: $ac_header: proceeding with the compiler's result" >&5
+echo "$as_me: WARNING: $ac_header: proceeding with the compiler's result" >&2;}
+ ac_header_preproc=yes
+ ;;
+ no:yes:* )
+ { echo "$as_me:$LINENO: WARNING: $ac_header: present but cannot be compiled" >&5
+echo "$as_me: WARNING: $ac_header: present but cannot be compiled" >&2;}
+ { echo "$as_me:$LINENO: WARNING: $ac_header: check for missing prerequisite headers?" >&5
+echo "$as_me: WARNING: $ac_header: check for missing prerequisite headers?" >&2;}
+ { echo "$as_me:$LINENO: WARNING: $ac_header: see the Autoconf documentation" >&5
+echo "$as_me: WARNING: $ac_header: see the Autoconf documentation" >&2;}
+ { echo "$as_me:$LINENO: WARNING: $ac_header: section \"Present But Cannot Be Compiled\"" >&5
+echo "$as_me: WARNING: $ac_header: section \"Present But Cannot Be Compiled\"" >&2;}
+ { echo "$as_me:$LINENO: WARNING: $ac_header: proceeding with the preprocessor's result" >&5
+echo "$as_me: WARNING: $ac_header: proceeding with the preprocessor's result" >&2;}
+ { echo "$as_me:$LINENO: WARNING: $ac_header: in the future, the compiler will take precedence" >&5
+echo "$as_me: WARNING: $ac_header: in the future, the compiler will take precedence" >&2;}
+ (
+ cat <<\_ASBOX
+## -------------------------------------- ##
+## Report this to the GNU Texinfo lists. ##
+## -------------------------------------- ##
+_ASBOX
+ ) |
+ sed "s/^/$as_me: WARNING: /" >&2
+ ;;
+esac
+echo "$as_me:$LINENO: checking for $ac_header" >&5
+echo $ECHO_N "checking for $ac_header... $ECHO_C" >&6
+if eval "test \"\${$as_ac_Header+set}\" = set"; then
+ echo $ECHO_N "(cached) $ECHO_C" >&6
+else
+ eval "$as_ac_Header=\$ac_header_preproc"
+fi
+echo "$as_me:$LINENO: result: `eval echo '${'$as_ac_Header'}'`" >&5
+echo "${ECHO_T}`eval echo '${'$as_ac_Header'}'`" >&6
+
+fi
+if test `eval echo '${'$as_ac_Header'}'` = yes; then
+ cat >>confdefs.h <<_ACEOF
+#define `echo "HAVE_$ac_header" | $as_tr_cpp` 1
+_ACEOF
+
+fi
+
+done
+
+
+
+ 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 or --without-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.
+ echo "$as_me:$LINENO: checking for ld used by GCC" >&5
+echo $ECHO_N "checking for ld used by GCC... $ECHO_C" >&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
+ echo "$as_me:$LINENO: checking for GNU ld" >&5
+echo $ECHO_N "checking for GNU ld... $ECHO_C" >&6
+else
+ echo "$as_me:$LINENO: checking for non-GNU ld" >&5
+echo $ECHO_N "checking for non-GNU ld... $ECHO_C" >&6
+fi
+if test "${acl_cv_path_LD+set}" = set; then
+ echo $ECHO_N "(cached) $ECHO_C" >&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
+ echo "$as_me:$LINENO: result: $LD" >&5
+echo "${ECHO_T}$LD" >&6
+else
+ echo "$as_me:$LINENO: result: no" >&5
+echo "${ECHO_T}no" >&6
+fi
+test -z "$LD" && { { echo "$as_me:$LINENO: error: no acceptable ld found in \$PATH" >&5
+echo "$as_me: error: no acceptable ld found in \$PATH" >&2;}
+ { (exit 1); exit 1; }; }
+echo "$as_me:$LINENO: checking if the linker ($LD) is GNU ld" >&5
+echo $ECHO_N "checking if the linker ($LD) is GNU ld... $ECHO_C" >&6
+if test "${acl_cv_prog_gnu_ld+set}" = set; then
+ echo $ECHO_N "(cached) $ECHO_C" >&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
+echo "$as_me:$LINENO: result: $acl_cv_prog_gnu_ld" >&5
+echo "${ECHO_T}$acl_cv_prog_gnu_ld" >&6
+with_gnu_ld=$acl_cv_prog_gnu_ld
+
+
+
+ echo "$as_me:$LINENO: checking for shared library run path origin" >&5
+echo $ECHO_N "checking for shared library run path origin... $ECHO_C" >&6
+if test "${acl_cv_rpath+set}" = set; then
+ echo $ECHO_N "(cached) $ECHO_C" >&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
+echo "$as_me:$LINENO: result: $acl_cv_rpath" >&5
+echo "${ECHO_T}$acl_cv_rpath" >&6
+ wl="$acl_cv_wl"
+ libext="$acl_cv_libext"
+ shlibext="$acl_cv_shlibext"
+ hardcode_libdir_flag_spec="$acl_cv_hardcode_libdir_flag_spec"
+ hardcode_libdir_separator="$acl_cv_hardcode_libdir_separator"
+ hardcode_direct="$acl_cv_hardcode_direct"
+ hardcode_minus_L="$acl_cv_hardcode_minus_L"
+ # Check whether --enable-rpath or --disable-rpath was given.
+if test "${enable_rpath+set}" = set; then
+ enableval="$enable_rpath"
+ :
+else
+ enable_rpath=yes
+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 or --without-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/lib"
+ fi
+ fi
+
+fi;
+ LIBICONV=
+ LTLIBICONV=
+ INCICONV=
+ 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=
+ if test $use_additional = yes; then
+ if test -n "$shlibext" && test -f "$additional_libdir/lib$name.$shlibext"; then
+ found_dir="$additional_libdir"
+ found_so="$additional_libdir/lib$name.$shlibext"
+ if test -f "$additional_libdir/lib$name.la"; then
+ found_la="$additional_libdir/lib$name.la"
+ fi
+ else
+ if test -f "$additional_libdir/lib$name.$libext"; then
+ found_dir="$additional_libdir"
+ found_a="$additional_libdir/lib$name.$libext"
+ if test -f "$additional_libdir/lib$name.la"; then
+ found_la="$additional_libdir/lib$name.la"
+ fi
+ 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 "$shlibext" && test -f "$dir/lib$name.$shlibext"; then
+ found_dir="$dir"
+ found_so="$dir/lib$name.$shlibext"
+ if test -f "$dir/lib$name.la"; then
+ found_la="$dir/lib$name.la"
+ fi
+ else
+ if test -f "$dir/lib$name.$libext"; then
+ found_dir="$dir"
+ found_a="$dir/lib$name.$libext"
+ if test -f "$dir/lib$name.la"; then
+ found_la="$dir/lib$name.la"
+ fi
+ 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/lib"; 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 "$hardcode_direct" = yes; then
+ LIBICONV="${LIBICONV}${LIBICONV:+ }$found_so"
+ else
+ if test -n "$hardcode_libdir_flag_spec" && test "$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 "$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
+ */lib | */lib/)
+ basedir=`echo "X$found_dir" | sed -e 's,^X,,' -e 's,/lib/*$,,'`
+ 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*) 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/lib"; then
+ haveit=
+ if test "X$additional_libdir" = "X/usr/local/lib"; then
+ if test -n "$GCC"; then
+ case $host_os in
+ linux*) 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 "$hardcode_libdir_separator"; then
+ alldirs=
+ for found_dir in $rpathdirs; do
+ alldirs="${alldirs}${alldirs:+$hardcode_libdir_separator}$found_dir"
+ done
+ acl_save_libdir="$libdir"
+ libdir="$alldirs"
+ eval flag=\"$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=\"$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
+
+
+
+
+
+
+
+
+ echo "$as_me:$LINENO: checking for ptrdiff_t" >&5
+echo $ECHO_N "checking for ptrdiff_t... $ECHO_C" >&6
+if test "${ac_cv_type_ptrdiff_t+set}" = set; then
+ echo $ECHO_N "(cached) $ECHO_C" >&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 ()
+{
+if ((ptrdiff_t *) 0)
+ return 0;
+if (sizeof (ptrdiff_t))
+ return 0;
+ ;
+ return 0;
+}
+_ACEOF
+rm -f conftest.$ac_objext
+if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5
+ (eval $ac_compile) 2>conftest.er1
+ ac_status=$?
+ grep -v '^ *+' conftest.er1 >conftest.err
+ rm -f conftest.er1
+ cat conftest.err >&5
+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
+ (exit $ac_status); } &&
+ { ac_try='test -z "$ac_c_werror_flag"
+ || test ! -s conftest.err'
+ { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+ (eval $ac_try) 2>&5
+ ac_status=$?
+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
+ (exit $ac_status); }; } &&
+ { ac_try='test -s conftest.$ac_objext'
+ { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+ (eval $ac_try) 2>&5
+ ac_status=$?
+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
+ (exit $ac_status); }; }; then
+ ac_cv_type_ptrdiff_t=yes
+else
+ echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+ac_cv_type_ptrdiff_t=no
+fi
+rm -f conftest.err conftest.$ac_objext conftest.$ac_ext
+fi
+echo "$as_me:$LINENO: result: $ac_cv_type_ptrdiff_t" >&5
+echo "${ECHO_T}$ac_cv_type_ptrdiff_t" >&6
+if test $ac_cv_type_ptrdiff_t = yes; then
+ :
+else
+
+cat >>confdefs.h <<\_ACEOF
+#define ptrdiff_t long
+_ACEOF
+
+
+fi
+
+
+
+
+
+
+
+
+
+
+
+for ac_header in argz.h limits.h locale.h nl_types.h malloc.h stddef.h \
+stdlib.h string.h unistd.h sys/param.h
+do
+as_ac_Header=`echo "ac_cv_header_$ac_header" | $as_tr_sh`
+if eval "test \"\${$as_ac_Header+set}\" = set"; then
+ echo "$as_me:$LINENO: checking for $ac_header" >&5
+echo $ECHO_N "checking for $ac_header... $ECHO_C" >&6
+if eval "test \"\${$as_ac_Header+set}\" = set"; then
+ echo $ECHO_N "(cached) $ECHO_C" >&6
+fi
+echo "$as_me:$LINENO: result: `eval echo '${'$as_ac_Header'}'`" >&5
+echo "${ECHO_T}`eval echo '${'$as_ac_Header'}'`" >&6
+else
+ # Is the header compilable?
+echo "$as_me:$LINENO: checking $ac_header usability" >&5
+echo $ECHO_N "checking $ac_header usability... $ECHO_C" >&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 { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5
+ (eval $ac_compile) 2>conftest.er1
+ ac_status=$?
+ grep -v '^ *+' conftest.er1 >conftest.err
+ rm -f conftest.er1
+ cat conftest.err >&5
+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
+ (exit $ac_status); } &&
+ { ac_try='test -z "$ac_c_werror_flag"
+ || test ! -s conftest.err'
+ { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+ (eval $ac_try) 2>&5
+ ac_status=$?
+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
+ (exit $ac_status); }; } &&
+ { ac_try='test -s conftest.$ac_objext'
+ { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+ (eval $ac_try) 2>&5
+ ac_status=$?
+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
+ (exit $ac_status); }; }; then
+ ac_header_compiler=yes
+else
+ echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+ac_header_compiler=no
+fi
+rm -f conftest.err conftest.$ac_objext conftest.$ac_ext
+echo "$as_me:$LINENO: result: $ac_header_compiler" >&5
+echo "${ECHO_T}$ac_header_compiler" >&6
+
+# Is the header present?
+echo "$as_me:$LINENO: checking $ac_header presence" >&5
+echo $ECHO_N "checking $ac_header presence... $ECHO_C" >&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 { (eval echo "$as_me:$LINENO: \"$ac_cpp conftest.$ac_ext\"") >&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
+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
+ (exit $ac_status); } >/dev/null; then
+ if test -s conftest.err; then
+ ac_cpp_err=$ac_c_preproc_warn_flag
+ ac_cpp_err=$ac_cpp_err$ac_c_werror_flag
+ else
+ ac_cpp_err=
+ fi
+else
+ ac_cpp_err=yes
+fi
+if test -z "$ac_cpp_err"; then
+ ac_header_preproc=yes
+else
+ 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
+echo "$as_me:$LINENO: result: $ac_header_preproc" >&5
+echo "${ECHO_T}$ac_header_preproc" >&6
+
+# So? What about this header?
+case $ac_header_compiler:$ac_header_preproc:$ac_c_preproc_warn_flag in
+ yes:no: )
+ { echo "$as_me:$LINENO: WARNING: $ac_header: accepted by the compiler, rejected by the preprocessor!" >&5
+echo "$as_me: WARNING: $ac_header: accepted by the compiler, rejected by the preprocessor!" >&2;}
+ { echo "$as_me:$LINENO: WARNING: $ac_header: proceeding with the compiler's result" >&5
+echo "$as_me: WARNING: $ac_header: proceeding with the compiler's result" >&2;}
+ ac_header_preproc=yes
+ ;;
+ no:yes:* )
+ { echo "$as_me:$LINENO: WARNING: $ac_header: present but cannot be compiled" >&5
+echo "$as_me: WARNING: $ac_header: present but cannot be compiled" >&2;}
+ { echo "$as_me:$LINENO: WARNING: $ac_header: check for missing prerequisite headers?" >&5
+echo "$as_me: WARNING: $ac_header: check for missing prerequisite headers?" >&2;}
+ { echo "$as_me:$LINENO: WARNING: $ac_header: see the Autoconf documentation" >&5
+echo "$as_me: WARNING: $ac_header: see the Autoconf documentation" >&2;}
+ { echo "$as_me:$LINENO: WARNING: $ac_header: section \"Present But Cannot Be Compiled\"" >&5
+echo "$as_me: WARNING: $ac_header: section \"Present But Cannot Be Compiled\"" >&2;}
+ { echo "$as_me:$LINENO: WARNING: $ac_header: proceeding with the preprocessor's result" >&5
+echo "$as_me: WARNING: $ac_header: proceeding with the preprocessor's result" >&2;}
+ { echo "$as_me:$LINENO: WARNING: $ac_header: in the future, the compiler will take precedence" >&5
+echo "$as_me: WARNING: $ac_header: in the future, the compiler will take precedence" >&2;}
+ (
+ cat <<\_ASBOX
+## -------------------------------------- ##
+## Report this to the GNU Texinfo lists. ##
+## -------------------------------------- ##
+_ASBOX
+ ) |
+ sed "s/^/$as_me: WARNING: /" >&2
+ ;;
+esac
+echo "$as_me:$LINENO: checking for $ac_header" >&5
+echo $ECHO_N "checking for $ac_header... $ECHO_C" >&6
+if eval "test \"\${$as_ac_Header+set}\" = set"; then
+ echo $ECHO_N "(cached) $ECHO_C" >&6
+else
+ eval "$as_ac_Header=\$ac_header_preproc"
+fi
+echo "$as_me:$LINENO: result: `eval echo '${'$as_ac_Header'}'`" >&5
+echo "${ECHO_T}`eval echo '${'$as_ac_Header'}'`" >&6
+
+fi
+if test `eval echo '${'$as_ac_Header'}'` = yes; then
+ cat >>confdefs.h <<_ACEOF
+#define `echo "HAVE_$ac_header" | $as_tr_cpp` 1
+_ACEOF
+
+fi
+
+done
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+for ac_func in asprintf fwprintf getcwd getegid geteuid getgid getuid \
+mempcpy munmap putenv setenv setlocale snprintf stpcpy strcasecmp strdup \
+strtoul tsearch wcslen __argz_count __argz_stringify __argz_next \
+__fsetlocking
+do
+as_ac_var=`echo "ac_cv_func_$ac_func" | $as_tr_sh`
+echo "$as_me:$LINENO: checking for $ac_func" >&5
+echo $ECHO_N "checking for $ac_func... $ECHO_C" >&6
+if eval "test \"\${$as_ac_var+set}\" = set"; then
+ echo $ECHO_N "(cached) $ECHO_C" >&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 gcc2 internal prototype to avoid an error. */
+#ifdef __cplusplus
+extern "C"
+{
+#endif
+/* We use char because int might match the return type of a gcc2
+ builtin and then its argument prototype would still apply. */
+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
+#else
+char (*f) () = $ac_func;
+#endif
+#ifdef __cplusplus
+}
+#endif
+
+int
+main ()
+{
+return f != $ac_func;
+ ;
+ return 0;
+}
+_ACEOF
+rm -f conftest.$ac_objext conftest$ac_exeext
+if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5
+ (eval $ac_link) 2>conftest.er1
+ ac_status=$?
+ grep -v '^ *+' conftest.er1 >conftest.err
+ rm -f conftest.er1
+ cat conftest.err >&5
+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
+ (exit $ac_status); } &&
+ { ac_try='test -z "$ac_c_werror_flag"
+ || test ! -s conftest.err'
+ { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+ (eval $ac_try) 2>&5
+ ac_status=$?
+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
+ (exit $ac_status); }; } &&
+ { ac_try='test -s conftest$ac_exeext'
+ { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+ (eval $ac_try) 2>&5
+ ac_status=$?
+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
+ (exit $ac_status); }; }; then
+ eval "$as_ac_var=yes"
+else
+ echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+eval "$as_ac_var=no"
+fi
+rm -f conftest.err conftest.$ac_objext \
+ conftest$ac_exeext conftest.$ac_ext
+fi
+echo "$as_me:$LINENO: result: `eval echo '${'$as_ac_var'}'`" >&5
+echo "${ECHO_T}`eval echo '${'$as_ac_var'}'`" >&6
+if test `eval echo '${'$as_ac_var'}'` = yes; then
+ cat >>confdefs.h <<_ACEOF
+#define `echo "HAVE_$ac_func" | $as_tr_cpp` 1
+_ACEOF
+
+fi
+done
+
+
+
+ echo "$as_me:$LINENO: checking whether _snprintf is declared" >&5
+echo $ECHO_N "checking whether _snprintf is declared... $ECHO_C" >&6
+if test "${ac_cv_have_decl__snprintf+set}" = set; then
+ echo $ECHO_N "(cached) $ECHO_C" >&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 <stdio.h>
+int
+main ()
+{
+
+#ifndef _snprintf
+ char *p = (char *) _snprintf;
+#endif
+
+ ;
+ return 0;
+}
+_ACEOF
+rm -f conftest.$ac_objext
+if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5
+ (eval $ac_compile) 2>conftest.er1
+ ac_status=$?
+ grep -v '^ *+' conftest.er1 >conftest.err
+ rm -f conftest.er1
+ cat conftest.err >&5
+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
+ (exit $ac_status); } &&
+ { ac_try='test -z "$ac_c_werror_flag"
+ || test ! -s conftest.err'
+ { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+ (eval $ac_try) 2>&5
+ ac_status=$?
+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
+ (exit $ac_status); }; } &&
+ { ac_try='test -s conftest.$ac_objext'
+ { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+ (eval $ac_try) 2>&5
+ ac_status=$?
+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
+ (exit $ac_status); }; }; then
+ ac_cv_have_decl__snprintf=yes
+else
+ echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+ac_cv_have_decl__snprintf=no
+fi
+rm -f conftest.err conftest.$ac_objext conftest.$ac_ext
+fi
+echo "$as_me:$LINENO: result: $ac_cv_have_decl__snprintf" >&5
+echo "${ECHO_T}$ac_cv_have_decl__snprintf" >&6
+ if test $ac_cv_have_decl__snprintf = yes; then
+ gt_value=1
+ else
+ gt_value=0
+ fi
+
+cat >>confdefs.h <<_ACEOF
+#define HAVE_DECL__SNPRINTF $gt_value
+_ACEOF
+
+
+
+ echo "$as_me:$LINENO: checking whether _snwprintf is declared" >&5
+echo $ECHO_N "checking whether _snwprintf is declared... $ECHO_C" >&6
+if test "${ac_cv_have_decl__snwprintf+set}" = set; then
+ echo $ECHO_N "(cached) $ECHO_C" >&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 <stdio.h>
+int
+main ()
+{
+
+#ifndef _snwprintf
+ char *p = (char *) _snwprintf;
+#endif
+
+ ;
+ return 0;
+}
+_ACEOF
+rm -f conftest.$ac_objext
+if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5
+ (eval $ac_compile) 2>conftest.er1
+ ac_status=$?
+ grep -v '^ *+' conftest.er1 >conftest.err
+ rm -f conftest.er1
+ cat conftest.err >&5
+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
+ (exit $ac_status); } &&
+ { ac_try='test -z "$ac_c_werror_flag"
+ || test ! -s conftest.err'
+ { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+ (eval $ac_try) 2>&5
+ ac_status=$?
+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
+ (exit $ac_status); }; } &&
+ { ac_try='test -s conftest.$ac_objext'
+ { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+ (eval $ac_try) 2>&5
+ ac_status=$?
+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
+ (exit $ac_status); }; }; then
+ ac_cv_have_decl__snwprintf=yes
+else
+ echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+ac_cv_have_decl__snwprintf=no
+fi
+rm -f conftest.err conftest.$ac_objext conftest.$ac_ext
+fi
+echo "$as_me:$LINENO: result: $ac_cv_have_decl__snwprintf" >&5
+echo "${ECHO_T}$ac_cv_have_decl__snwprintf" >&6
+ if test $ac_cv_have_decl__snwprintf = yes; then
+ gt_value=1
+ else
+ gt_value=0
+ fi
+
+cat >>confdefs.h <<_ACEOF
+#define HAVE_DECL__SNWPRINTF $gt_value
+_ACEOF
+
+
+
+
+ echo "$as_me:$LINENO: checking whether feof_unlocked is declared" >&5
+echo $ECHO_N "checking whether feof_unlocked is declared... $ECHO_C" >&6
+if test "${ac_cv_have_decl_feof_unlocked+set}" = set; then
+ echo $ECHO_N "(cached) $ECHO_C" >&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 <stdio.h>
+int
+main ()
+{
+
+#ifndef feof_unlocked
+ char *p = (char *) feof_unlocked;
+#endif
+
+ ;
+ return 0;
+}
+_ACEOF
+rm -f conftest.$ac_objext
+if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5
+ (eval $ac_compile) 2>conftest.er1
+ ac_status=$?
+ grep -v '^ *+' conftest.er1 >conftest.err
+ rm -f conftest.er1
+ cat conftest.err >&5
+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
+ (exit $ac_status); } &&
+ { ac_try='test -z "$ac_c_werror_flag"
+ || test ! -s conftest.err'
+ { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+ (eval $ac_try) 2>&5
+ ac_status=$?
+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
+ (exit $ac_status); }; } &&
+ { ac_try='test -s conftest.$ac_objext'
+ { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+ (eval $ac_try) 2>&5
+ ac_status=$?
+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
+ (exit $ac_status); }; }; then
+ ac_cv_have_decl_feof_unlocked=yes
+else
+ echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+ac_cv_have_decl_feof_unlocked=no
+fi
+rm -f conftest.err conftest.$ac_objext conftest.$ac_ext
+fi
+echo "$as_me:$LINENO: result: $ac_cv_have_decl_feof_unlocked" >&5
+echo "${ECHO_T}$ac_cv_have_decl_feof_unlocked" >&6
+ if test $ac_cv_have_decl_feof_unlocked = yes; then
+ gt_value=1
+ else
+ gt_value=0
+ fi
+
+cat >>confdefs.h <<_ACEOF
+#define HAVE_DECL_FEOF_UNLOCKED $gt_value
+_ACEOF
+
+
+
+ echo "$as_me:$LINENO: checking whether fgets_unlocked is declared" >&5
+echo $ECHO_N "checking whether fgets_unlocked is declared... $ECHO_C" >&6
+if test "${ac_cv_have_decl_fgets_unlocked+set}" = set; then
+ echo $ECHO_N "(cached) $ECHO_C" >&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 <stdio.h>
+int
+main ()
+{
+
+#ifndef fgets_unlocked
+ char *p = (char *) fgets_unlocked;
+#endif
+
+ ;
+ return 0;
+}
+_ACEOF
+rm -f conftest.$ac_objext
+if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5
+ (eval $ac_compile) 2>conftest.er1
+ ac_status=$?
+ grep -v '^ *+' conftest.er1 >conftest.err
+ rm -f conftest.er1
+ cat conftest.err >&5
+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
+ (exit $ac_status); } &&
+ { ac_try='test -z "$ac_c_werror_flag"
+ || test ! -s conftest.err'
+ { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+ (eval $ac_try) 2>&5
+ ac_status=$?
+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
+ (exit $ac_status); }; } &&
+ { ac_try='test -s conftest.$ac_objext'
+ { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+ (eval $ac_try) 2>&5
+ ac_status=$?
+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
+ (exit $ac_status); }; }; then
+ ac_cv_have_decl_fgets_unlocked=yes
+else
+ echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+ac_cv_have_decl_fgets_unlocked=no
+fi
+rm -f conftest.err conftest.$ac_objext conftest.$ac_ext
+fi
+echo "$as_me:$LINENO: result: $ac_cv_have_decl_fgets_unlocked" >&5
+echo "${ECHO_T}$ac_cv_have_decl_fgets_unlocked" >&6
+ if test $ac_cv_have_decl_fgets_unlocked = yes; then
+ gt_value=1
+ else
+ gt_value=0
+ fi
+
+cat >>confdefs.h <<_ACEOF
+#define HAVE_DECL_FGETS_UNLOCKED $gt_value
+_ACEOF
+
+
+
+ echo "$as_me:$LINENO: checking whether getc_unlocked is declared" >&5
+echo $ECHO_N "checking whether getc_unlocked is declared... $ECHO_C" >&6
+if test "${ac_cv_have_decl_getc_unlocked+set}" = set; then
+ echo $ECHO_N "(cached) $ECHO_C" >&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 <stdio.h>
+int
+main ()
+{
+
+#ifndef getc_unlocked
+ char *p = (char *) getc_unlocked;
+#endif
+
+ ;
+ return 0;
+}
+_ACEOF
+rm -f conftest.$ac_objext
+if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5
+ (eval $ac_compile) 2>conftest.er1
+ ac_status=$?
+ grep -v '^ *+' conftest.er1 >conftest.err
+ rm -f conftest.er1
+ cat conftest.err >&5
+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
+ (exit $ac_status); } &&
+ { ac_try='test -z "$ac_c_werror_flag"
+ || test ! -s conftest.err'
+ { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+ (eval $ac_try) 2>&5
+ ac_status=$?
+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
+ (exit $ac_status); }; } &&
+ { ac_try='test -s conftest.$ac_objext'
+ { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+ (eval $ac_try) 2>&5
+ ac_status=$?
+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
+ (exit $ac_status); }; }; then
+ ac_cv_have_decl_getc_unlocked=yes
+else
+ echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+ac_cv_have_decl_getc_unlocked=no
+fi
+rm -f conftest.err conftest.$ac_objext conftest.$ac_ext
+fi
+echo "$as_me:$LINENO: result: $ac_cv_have_decl_getc_unlocked" >&5
+echo "${ECHO_T}$ac_cv_have_decl_getc_unlocked" >&6
+ if test $ac_cv_have_decl_getc_unlocked = yes; then
+ gt_value=1
+ else
+ gt_value=0
+ fi
+
+cat >>confdefs.h <<_ACEOF
+#define HAVE_DECL_GETC_UNLOCKED $gt_value
+_ACEOF
+
+
+
+ case $gt_cv_func_printf_posix in
+ *yes) HAVE_POSIX_PRINTF=1 ;;
+ *) HAVE_POSIX_PRINTF=0 ;;
+ esac
+
+ if test "$ac_cv_func_asprintf" = yes; then
+ HAVE_ASPRINTF=1
+ else
+ HAVE_ASPRINTF=0
+ fi
+
+ if test "$ac_cv_func_snprintf" = yes; then
+ HAVE_SNPRINTF=1
+ else
+ HAVE_SNPRINTF=0
+ fi
+
+ if test "$ac_cv_func_wprintf" = yes; then
+ HAVE_WPRINTF=1
+ else
+ HAVE_WPRINTF=0
+ fi
+
+
+
+
+
+
+
+ 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
+
+
+ echo "$as_me:$LINENO: checking for iconv" >&5
+echo $ECHO_N "checking for iconv... $ECHO_C" >&6
+if test "${am_cv_func_iconv+set}" = set; then
+ echo $ECHO_N "(cached) $ECHO_C" >&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 { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5
+ (eval $ac_link) 2>conftest.er1
+ ac_status=$?
+ grep -v '^ *+' conftest.er1 >conftest.err
+ rm -f conftest.er1
+ cat conftest.err >&5
+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
+ (exit $ac_status); } &&
+ { ac_try='test -z "$ac_c_werror_flag"
+ || test ! -s conftest.err'
+ { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+ (eval $ac_try) 2>&5
+ ac_status=$?
+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
+ (exit $ac_status); }; } &&
+ { ac_try='test -s conftest$ac_exeext'
+ { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+ (eval $ac_try) 2>&5
+ ac_status=$?
+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
+ (exit $ac_status); }; }; then
+ am_cv_func_iconv=yes
+else
+ echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+fi
+rm -f conftest.err conftest.$ac_objext \
+ 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 { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5
+ (eval $ac_link) 2>conftest.er1
+ ac_status=$?
+ grep -v '^ *+' conftest.er1 >conftest.err
+ rm -f conftest.er1
+ cat conftest.err >&5
+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
+ (exit $ac_status); } &&
+ { ac_try='test -z "$ac_c_werror_flag"
+ || test ! -s conftest.err'
+ { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+ (eval $ac_try) 2>&5
+ ac_status=$?
+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
+ (exit $ac_status); }; } &&
+ { ac_try='test -s conftest$ac_exeext'
+ { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+ (eval $ac_try) 2>&5
+ ac_status=$?
+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
+ (exit $ac_status); }; }; then
+ am_cv_lib_iconv=yes
+ am_cv_func_iconv=yes
+else
+ echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+fi
+rm -f conftest.err conftest.$ac_objext \
+ conftest$ac_exeext conftest.$ac_ext
+ LIBS="$am_save_LIBS"
+ fi
+
+fi
+echo "$as_me:$LINENO: result: $am_cv_func_iconv" >&5
+echo "${ECHO_T}$am_cv_func_iconv" >&6
+ if test "$am_cv_func_iconv" = yes; then
+
+cat >>confdefs.h <<\_ACEOF
+#define HAVE_ICONV 1
+_ACEOF
+
+ fi
+ if test "$am_cv_lib_iconv" = yes; then
+ echo "$as_me:$LINENO: checking how to link with libiconv" >&5
+echo $ECHO_N "checking how to link with libiconv... $ECHO_C" >&6
+ echo "$as_me:$LINENO: result: $LIBICONV" >&5
+echo "${ECHO_T}$LIBICONV" >&6
+ else
+ CPPFLAGS="$am_save_CPPFLAGS"
+ LIBICONV=
+ LTLIBICONV=
+ fi
+
+
+
+ if test "$am_cv_func_iconv" = yes; then
+ echo "$as_me:$LINENO: checking for iconv declaration" >&5
+echo $ECHO_N "checking for iconv declaration... $ECHO_C" >&6
+ if test "${am_cv_proto_iconv+set}" = set; then
+ echo $ECHO_N "(cached) $ECHO_C" >&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 <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
+
+int
+main ()
+{
+
+ ;
+ return 0;
+}
+_ACEOF
+rm -f conftest.$ac_objext
+if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5
+ (eval $ac_compile) 2>conftest.er1
+ ac_status=$?
+ grep -v '^ *+' conftest.er1 >conftest.err
+ rm -f conftest.er1
+ cat conftest.err >&5
+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
+ (exit $ac_status); } &&
+ { ac_try='test -z "$ac_c_werror_flag"
+ || test ! -s conftest.err'
+ { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+ (eval $ac_try) 2>&5
+ ac_status=$?
+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
+ (exit $ac_status); }; } &&
+ { ac_try='test -s conftest.$ac_objext'
+ { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+ (eval $ac_try) 2>&5
+ ac_status=$?
+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
+ (exit $ac_status); }; }; then
+ am_cv_proto_iconv_arg1=""
+else
+ echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+am_cv_proto_iconv_arg1="const"
+fi
+rm -f conftest.err conftest.$ac_objext conftest.$ac_ext
+ 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);"
+fi
+
+ am_cv_proto_iconv=`echo "$am_cv_proto_iconv" | tr -s ' ' | sed -e 's/( /(/'`
+ echo "$as_me:$LINENO: result: ${ac_t:-
+ }$am_cv_proto_iconv" >&5
+echo "${ECHO_T}${ac_t:-
+ }$am_cv_proto_iconv" >&6
+
+cat >>confdefs.h <<_ACEOF
+#define ICONV_CONST $am_cv_proto_iconv_arg1
+_ACEOF
+
+ fi
+
+
+ echo "$as_me:$LINENO: checking for nl_langinfo and CODESET" >&5
+echo $ECHO_N "checking for nl_langinfo and CODESET... $ECHO_C" >&6
+if test "${am_cv_langinfo_codeset+set}" = set; then
+ echo $ECHO_N "(cached) $ECHO_C" >&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 0;
+}
+_ACEOF
+rm -f conftest.$ac_objext conftest$ac_exeext
+if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5
+ (eval $ac_link) 2>conftest.er1
+ ac_status=$?
+ grep -v '^ *+' conftest.er1 >conftest.err
+ rm -f conftest.er1
+ cat conftest.err >&5
+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
+ (exit $ac_status); } &&
+ { ac_try='test -z "$ac_c_werror_flag"
+ || test ! -s conftest.err'
+ { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+ (eval $ac_try) 2>&5
+ ac_status=$?
+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
+ (exit $ac_status); }; } &&
+ { ac_try='test -s conftest$ac_exeext'
+ { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+ (eval $ac_try) 2>&5
+ ac_status=$?
+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
+ (exit $ac_status); }; }; then
+ am_cv_langinfo_codeset=yes
+else
+ echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+am_cv_langinfo_codeset=no
+fi
+rm -f conftest.err conftest.$ac_objext \
+ conftest$ac_exeext conftest.$ac_ext
+
+fi
+echo "$as_me:$LINENO: result: $am_cv_langinfo_codeset" >&5
+echo "${ECHO_T}$am_cv_langinfo_codeset" >&6
+ if test $am_cv_langinfo_codeset = yes; then
+
+cat >>confdefs.h <<\_ACEOF
+#define HAVE_LANGINFO_CODESET 1
+_ACEOF
+
+ fi
+
+ if test $ac_cv_header_locale_h = yes; then
+
+ echo "$as_me:$LINENO: checking for LC_MESSAGES" >&5
+echo $ECHO_N "checking for LC_MESSAGES... $ECHO_C" >&6
+if test "${am_cv_val_LC_MESSAGES+set}" = set; then
+ echo $ECHO_N "(cached) $ECHO_C" >&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 <locale.h>
+int
+main ()
+{
+return LC_MESSAGES
+ ;
+ return 0;
+}
+_ACEOF
+rm -f conftest.$ac_objext conftest$ac_exeext
+if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5
+ (eval $ac_link) 2>conftest.er1
+ ac_status=$?
+ grep -v '^ *+' conftest.er1 >conftest.err
+ rm -f conftest.er1
+ cat conftest.err >&5
+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
+ (exit $ac_status); } &&
+ { ac_try='test -z "$ac_c_werror_flag"
+ || test ! -s conftest.err'
+ { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+ (eval $ac_try) 2>&5
+ ac_status=$?
+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
+ (exit $ac_status); }; } &&
+ { ac_try='test -s conftest$ac_exeext'
+ { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+ (eval $ac_try) 2>&5
+ ac_status=$?
+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
+ (exit $ac_status); }; }; then
+ am_cv_val_LC_MESSAGES=yes
+else
+ echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+am_cv_val_LC_MESSAGES=no
+fi
+rm -f conftest.err conftest.$ac_objext \
+ conftest$ac_exeext conftest.$ac_ext
+fi
+echo "$as_me:$LINENO: result: $am_cv_val_LC_MESSAGES" >&5
+echo "${ECHO_T}$am_cv_val_LC_MESSAGES" >&6
+ if test $am_cv_val_LC_MESSAGES = yes; then
+
+cat >>confdefs.h <<\_ACEOF
+#define HAVE_LC_MESSAGES 1
+_ACEOF
+
+ fi
+
+ fi
+
+ for ac_prog in bison
+do
+ # Extract the first word of "$ac_prog", so it can be a program name with args.
+set dummy $ac_prog; ac_word=$2
+echo "$as_me:$LINENO: checking for $ac_word" >&5
+echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6
+if test "${ac_cv_prog_INTLBISON+set}" = set; then
+ echo $ECHO_N "(cached) $ECHO_C" >&6
+else
+ if test -n "$INTLBISON"; then
+ ac_cv_prog_INTLBISON="$INTLBISON" # Let the user override the test.
+else
+as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
+for as_dir in $PATH
+do
+ IFS=$as_save_IFS
+ test -z "$as_dir" && as_dir=.
+ for ac_exec_ext in '' $ac_executable_extensions; do
+ if $as_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
+ ac_cv_prog_INTLBISON="$ac_prog"
+ echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5
+ break 2
+ fi
+done
+done
+
+fi
+fi
+INTLBISON=$ac_cv_prog_INTLBISON
+if test -n "$INTLBISON"; then
+ echo "$as_me:$LINENO: result: $INTLBISON" >&5
+echo "${ECHO_T}$INTLBISON" >&6
+else
+ echo "$as_me:$LINENO: result: no" >&5
+echo "${ECHO_T}no" >&6
+fi
+
+ test -n "$INTLBISON" && break
+done
+
+ if test -z "$INTLBISON"; then
+ ac_verc_fail=yes
+ else
+ echo "$as_me:$LINENO: checking version of bison" >&5
+echo $ECHO_N "checking version of bison... $ECHO_C" >&6
+ ac_prog_version=`$INTLBISON --version 2>&1 | sed -n 's/^.*GNU Bison.* \([0-9]*\.[0-9.]*\).*$/\1/p'`
+ case $ac_prog_version in
+ '') ac_prog_version="v. ?.??, bad"; ac_verc_fail=yes;;
+ 1.2[6-9]* | 1.[3-9][0-9]* | [2-9].*)
+ ac_prog_version="$ac_prog_version, ok"; ac_verc_fail=no;;
+ *) ac_prog_version="$ac_prog_version, bad"; ac_verc_fail=yes;;
+ esac
+ echo "$as_me:$LINENO: result: $ac_prog_version" >&5
+echo "${ECHO_T}$ac_prog_version" >&6
+ fi
+ if test $ac_verc_fail = yes; then
+ INTLBISON=:
+ fi
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ echo "$as_me:$LINENO: checking whether NLS is requested" >&5
+echo $ECHO_N "checking whether NLS is requested... $ECHO_C" >&6
+ # Check whether --enable-nls or --disable-nls was given.
+if test "${enable_nls+set}" = set; then
+ enableval="$enable_nls"
+ USE_NLS=$enableval
+else
+ USE_NLS=yes
+fi;
+ echo "$as_me:$LINENO: result: $USE_NLS" >&5
+echo "${ECHO_T}$USE_NLS" >&6
+
+
+
+
+ BUILD_INCLUDED_LIBINTL=no
+ USE_INCLUDED_LIBINTL=no
+
+ LIBINTL=
+ LTLIBINTL=
+ POSUB=
+
+ if test "$USE_NLS" = "yes"; then
+ gt_use_preinstalled_gnugettext=no
+
+ echo "$as_me:$LINENO: checking whether included gettext is requested" >&5
+echo $ECHO_N "checking whether included gettext is requested... $ECHO_C" >&6
+
+# Check whether --with-included-gettext or --without-included-gettext was given.
+if test "${with_included_gettext+set}" = set; then
+ withval="$with_included_gettext"
+ nls_cv_force_use_gnu_gettext=$withval
+else
+ nls_cv_force_use_gnu_gettext=no
+fi;
+ echo "$as_me:$LINENO: result: $nls_cv_force_use_gnu_gettext" >&5
+echo "${ECHO_T}$nls_cv_force_use_gnu_gettext" >&6
+
+ nls_cv_use_gnu_gettext="$nls_cv_force_use_gnu_gettext"
+ if test "$nls_cv_force_use_gnu_gettext" != "yes"; then
+
+
+
+
+
+
+ echo "$as_me:$LINENO: checking for GNU gettext in libc" >&5
+echo $ECHO_N "checking for GNU gettext in libc... $ECHO_C" >&6
+if test "${gt_cv_func_gnugettext1_libc+set}" = set; then
+ echo $ECHO_N "(cached) $ECHO_C" >&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>
+extern int _nl_msg_cat_cntr;
+extern int *_nl_domain_bindings;
+int
+main ()
+{
+bindtextdomain ("", "");
+return (int) gettext ("") + _nl_msg_cat_cntr + *_nl_domain_bindings
+ ;
+ return 0;
+}
+_ACEOF
+rm -f conftest.$ac_objext conftest$ac_exeext
+if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5
+ (eval $ac_link) 2>conftest.er1
+ ac_status=$?
+ grep -v '^ *+' conftest.er1 >conftest.err
+ rm -f conftest.er1
+ cat conftest.err >&5
+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
+ (exit $ac_status); } &&
+ { ac_try='test -z "$ac_c_werror_flag"
+ || test ! -s conftest.err'
+ { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+ (eval $ac_try) 2>&5
+ ac_status=$?
+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
+ (exit $ac_status); }; } &&
+ { ac_try='test -s conftest$ac_exeext'
+ { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+ (eval $ac_try) 2>&5
+ ac_status=$?
+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
+ (exit $ac_status); }; }; then
+ gt_cv_func_gnugettext1_libc=yes
+else
+ echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+gt_cv_func_gnugettext1_libc=no
+fi
+rm -f conftest.err conftest.$ac_objext \
+ conftest$ac_exeext conftest.$ac_ext
+fi
+echo "$as_me:$LINENO: result: $gt_cv_func_gnugettext1_libc" >&5
+echo "${ECHO_T}$gt_cv_func_gnugettext1_libc" >&6
+
+ if test "$gt_cv_func_gnugettext1_libc" != "yes"; then
+
+
+
+ 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 or --without-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/lib"
+ fi
+ fi
+
+fi;
+ LIBINTL=
+ LTLIBINTL=
+ INCINTL=
+ 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=
+ if test $use_additional = yes; then
+ if test -n "$shlibext" && test -f "$additional_libdir/lib$name.$shlibext"; then
+ found_dir="$additional_libdir"
+ found_so="$additional_libdir/lib$name.$shlibext"
+ if test -f "$additional_libdir/lib$name.la"; then
+ found_la="$additional_libdir/lib$name.la"
+ fi
+ else
+ if test -f "$additional_libdir/lib$name.$libext"; then
+ found_dir="$additional_libdir"
+ found_a="$additional_libdir/lib$name.$libext"
+ if test -f "$additional_libdir/lib$name.la"; then
+ found_la="$additional_libdir/lib$name.la"
+ fi
+ 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 "$shlibext" && test -f "$dir/lib$name.$shlibext"; then
+ found_dir="$dir"
+ found_so="$dir/lib$name.$shlibext"
+ if test -f "$dir/lib$name.la"; then
+ found_la="$dir/lib$name.la"
+ fi
+ else
+ if test -f "$dir/lib$name.$libext"; then
+ found_dir="$dir"
+ found_a="$dir/lib$name.$libext"
+ if test -f "$dir/lib$name.la"; then
+ found_la="$dir/lib$name.la"
+ fi
+ 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/lib"; 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 "$hardcode_direct" = yes; then
+ LIBINTL="${LIBINTL}${LIBINTL:+ }$found_so"
+ else
+ if test -n "$hardcode_libdir_flag_spec" && test "$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 "$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
+ */lib | */lib/)
+ basedir=`echo "X$found_dir" | sed -e 's,^X,,' -e 's,/lib/*$,,'`
+ 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*) 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/lib"; then
+ haveit=
+ if test "X$additional_libdir" = "X/usr/local/lib"; then
+ if test -n "$GCC"; then
+ case $host_os in
+ linux*) 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 "$hardcode_libdir_separator"; then
+ alldirs=
+ for found_dir in $rpathdirs; do
+ alldirs="${alldirs}${alldirs:+$hardcode_libdir_separator}$found_dir"
+ done
+ acl_save_libdir="$libdir"
+ libdir="$alldirs"
+ eval flag=\"$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=\"$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
+
+ echo "$as_me:$LINENO: checking for GNU gettext in libintl" >&5
+echo $ECHO_N "checking for GNU gettext in libintl... $ECHO_C" >&6
+if test "${gt_cv_func_gnugettext1_libintl+set}" = set; then
+ echo $ECHO_N "(cached) $ECHO_C" >&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>
+extern int _nl_msg_cat_cntr;
+extern
+#ifdef __cplusplus
+"C"
+#endif
+const char *_nl_expand_alias ();
+int
+main ()
+{
+bindtextdomain ("", "");
+return (int) gettext ("") + _nl_msg_cat_cntr + *_nl_expand_alias (0)
+ ;
+ return 0;
+}
+_ACEOF
+rm -f conftest.$ac_objext conftest$ac_exeext
+if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5
+ (eval $ac_link) 2>conftest.er1
+ ac_status=$?
+ grep -v '^ *+' conftest.er1 >conftest.err
+ rm -f conftest.er1
+ cat conftest.err >&5
+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
+ (exit $ac_status); } &&
+ { ac_try='test -z "$ac_c_werror_flag"
+ || test ! -s conftest.err'
+ { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+ (eval $ac_try) 2>&5
+ ac_status=$?
+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
+ (exit $ac_status); }; } &&
+ { ac_try='test -s conftest$ac_exeext'
+ { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+ (eval $ac_try) 2>&5
+ ac_status=$?
+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
+ (exit $ac_status); }; }; then
+ gt_cv_func_gnugettext1_libintl=yes
+else
+ echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+gt_cv_func_gnugettext1_libintl=no
+fi
+rm -f conftest.err conftest.$ac_objext \
+ conftest$ac_exeext conftest.$ac_ext
+ if test "$gt_cv_func_gnugettext1_libintl" != 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>
+extern int _nl_msg_cat_cntr;
+extern
+#ifdef __cplusplus
+"C"
+#endif
+const char *_nl_expand_alias ();
+int
+main ()
+{
+bindtextdomain ("", "");
+return (int) gettext ("") + _nl_msg_cat_cntr + *_nl_expand_alias (0)
+ ;
+ return 0;
+}
+_ACEOF
+rm -f conftest.$ac_objext conftest$ac_exeext
+if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5
+ (eval $ac_link) 2>conftest.er1
+ ac_status=$?
+ grep -v '^ *+' conftest.er1 >conftest.err
+ rm -f conftest.er1
+ cat conftest.err >&5
+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
+ (exit $ac_status); } &&
+ { ac_try='test -z "$ac_c_werror_flag"
+ || test ! -s conftest.err'
+ { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+ (eval $ac_try) 2>&5
+ ac_status=$?
+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
+ (exit $ac_status); }; } &&
+ { ac_try='test -s conftest$ac_exeext'
+ { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+ (eval $ac_try) 2>&5
+ ac_status=$?
+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
+ (exit $ac_status); }; }; then
+ LIBINTL="$LIBINTL $LIBICONV"
+ LTLIBINTL="$LTLIBINTL $LTLIBICONV"
+ gt_cv_func_gnugettext1_libintl=yes
+
+else
+ echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+fi
+rm -f conftest.err conftest.$ac_objext \
+ conftest$ac_exeext conftest.$ac_ext
+ fi
+ CPPFLAGS="$gt_save_CPPFLAGS"
+ LIBS="$gt_save_LIBS"
+fi
+echo "$as_me:$LINENO: result: $gt_cv_func_gnugettext1_libintl" >&5
+echo "${ECHO_T}$gt_cv_func_gnugettext1_libintl" >&6
+ fi
+
+ if test "$gt_cv_func_gnugettext1_libc" = "yes" \
+ || { test "$gt_cv_func_gnugettext1_libintl" = "yes" \
+ && test "$PACKAGE" != gettext-runtime \
+ && test "$PACKAGE" != gettext-tools; }; then
+ gt_use_preinstalled_gnugettext=yes
+ else
+ LIBINTL=
+ LTLIBINTL=
+ INCINTL=
+ fi
+
+
+ if test "$gt_use_preinstalled_gnugettext" != "yes"; then
+ nls_cv_use_gnu_gettext=yes
+ fi
+ fi
+
+ if test "$nls_cv_use_gnu_gettext" = "yes"; then
+ BUILD_INCLUDED_LIBINTL=yes
+ USE_INCLUDED_LIBINTL=yes
+ LIBINTL="\${top_builddir}/intl/libintl.a $LIBICONV"
+ LTLIBINTL="\${top_builddir}/intl/libintl.a $LTLIBICONV"
+ LIBS=`echo " $LIBS " | sed -e 's/ -lintl / /' -e 's/^ //' -e 's/ $//'`
+ fi
+
+ if test "$gt_use_preinstalled_gnugettext" = "yes" \
+ || test "$nls_cv_use_gnu_gettext" = "yes"; then
+ CATOBJEXT=.gmo
+ 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
+
+ echo "$as_me:$LINENO: checking whether to use NLS" >&5
+echo $ECHO_N "checking whether to use NLS... $ECHO_C" >&6
+ echo "$as_me:$LINENO: result: $USE_NLS" >&5
+echo "${ECHO_T}$USE_NLS" >&6
+ if test "$USE_NLS" = "yes"; then
+ echo "$as_me:$LINENO: checking where the gettext function comes from" >&5
+echo $ECHO_N "checking where the gettext function comes from... $ECHO_C" >&6
+ if test "$gt_use_preinstalled_gnugettext" = "yes"; then
+ if test "$gt_cv_func_gnugettext1_libintl" = "yes"; then
+ gt_source="external libintl"
+ else
+ gt_source="libc"
+ fi
+ else
+ gt_source="included intl directory"
+ fi
+ echo "$as_me:$LINENO: result: $gt_source" >&5
+echo "${ECHO_T}$gt_source" >&6
+ fi
+
+ if test "$USE_NLS" = "yes"; then
+
+ if test "$gt_use_preinstalled_gnugettext" = "yes"; then
+ if test "$gt_cv_func_gnugettext1_libintl" = "yes"; then
+ echo "$as_me:$LINENO: checking how to link with libintl" >&5
+echo $ECHO_N "checking how to link with libintl... $ECHO_C" >&6
+ echo "$as_me:$LINENO: result: $LIBINTL" >&5
+echo "${ECHO_T}$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
+
+
+ if test "$PACKAGE" = gettext-runtime || test "$PACKAGE" = gettext-tools; then
+ BUILD_INCLUDED_LIBINTL=yes
+ fi
+
+
+
+
+
+ nls_cv_header_intl=
+ nls_cv_header_libgt=
+
+ DATADIRNAME=share
+
+
+ INSTOBJEXT=.mo
+
+
+ GENCAT=gencat
+
+
+ if test "$USE_INCLUDED_LIBINTL" = yes; then
+ INTLOBJS="\$(GETTOBJS)"
+ fi
+
+
+ INTL_LIBTOOL_SUFFIX_PREFIX=
+
+
+
+ INTLLIBS="$LIBINTL"
+
+
+
+
+
+
+
+ ac_config_files="$ac_config_files Makefile doc/Makefile info/Makefile intl/Makefile lib/Makefile m4/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, don't put newlines in cache variables' values.
+# 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.
+{
+ (set) 2>&1 |
+ case `(ac_space=' '; set | grep ac_space) 2>&1` in
+ *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 \
+ "s/^\\([_$as_cr_alnum]*_cv_[_$as_cr_alnum]*\\)=\\(.*\\)/\\1=\\2/p"
+ ;;
+ esac;
+} |
+ sed '
+ t clear
+ : clear
+ s/^\([^=]*\)=\(.*[{}].*\)$/test "${\1+set}" = set || &/
+ t end
+ /^ac_cv_env/!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" && echo "updating cache $cache_file"
+ cat confcache >$cache_file
+ else
+ echo "not updating unwritable cache $cache_file"
+ 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}'
+
+# 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
+
+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_i=`echo "$ac_i" |
+ sed 's/\$U\././;s/\.o$//;s/\.obj$//'`
+ # 2. Add them.
+ ac_libobjs="$ac_libobjs $ac_i\$U.$ac_objext"
+ ac_ltlibobjs="$ac_ltlibobjs $ac_i"'$U.lo'
+done
+LIBOBJS=$ac_libobjs
+
+LTLIBOBJS=$ac_ltlibobjs
+
+
+if test -z "${MAINTAINER_MODE_TRUE}" && test -z "${MAINTAINER_MODE_FALSE}"; then
+ { { echo "$as_me:$LINENO: error: conditional \"MAINTAINER_MODE\" was never defined.
+Usually this means the macro was only invoked conditionally." >&5
+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
+ { { echo "$as_me:$LINENO: error: conditional \"AMDEP\" was never defined.
+Usually this means the macro was only invoked conditionally." >&5
+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
+ { { echo "$as_me:$LINENO: error: conditional \"am__fastdepCC\" was never defined.
+Usually this means the macro was only invoked conditionally." >&5
+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 "${TOOLS_ONLY_TRUE}" && test -z "${TOOLS_ONLY_FALSE}"; then
+ { { echo "$as_me:$LINENO: error: conditional \"TOOLS_ONLY\" was never defined.
+Usually this means the macro was only invoked conditionally." >&5
+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
+ { { echo "$as_me:$LINENO: error: conditional \"INSTALL_WARNINGS\" was never defined.
+Usually this means the macro was only invoked conditionally." >&5
+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_clean_files_save=$ac_clean_files
+ac_clean_files="$ac_clean_files $CONFIG_STATUS"
+{ echo "$as_me:$LINENO: creating $CONFIG_STATUS" >&5
+echo "$as_me: creating $CONFIG_STATUS" >&6;}
+cat >$CONFIG_STATUS <<_ACEOF
+#! $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
+## --------------------- ##
+## M4sh Initialization. ##
+## --------------------- ##
+
+# Be Bourne compatible
+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
+DUALCASE=1; export DUALCASE # for MKS sh
+
+# Support unset when possible.
+if ( (MAIL=60; unset MAIL) || exit) >/dev/null 2>&1; then
+ as_unset=unset
+else
+ as_unset=false
+fi
+
+
+# Work around bugs in pre-3.0 UWIN ksh.
+$as_unset ENV MAIL MAILPATH
+PS1='$ '
+PS2='> '
+PS4='+ '
+
+# NLS nuisances.
+for as_var in \
+ LANG LANGUAGE LC_ADDRESS LC_ALL LC_COLLATE LC_CTYPE LC_IDENTIFICATION \
+ LC_MEASUREMENT LC_MESSAGES LC_MONETARY LC_NAME LC_NUMERIC LC_PAPER \
+ LC_TELEPHONE LC_TIME
+do
+ if (set +x; test -z "`(eval $as_var=C; export $as_var) 2>&1`"); then
+ eval $as_var=C; export $as_var
+ else
+ $as_unset $as_var
+ fi
+done
+
+# Required to use basename.
+if expr a : '\(a\)' >/dev/null 2>&1; 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 ||
+echo X/"$0" |
+ sed '/^.*\/\([^/][^/]*\)\/*$/{ s//\1/; q; }
+ /^X\/\(\/\/\)$/{ s//\1/; q; }
+ /^X\/\(\/\).*/{ s//\1/; q; }
+ s/.*/./; q'`
+
+
+# PATH needs CR, and LINENO needs CR and PATH.
+# 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
+
+# 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
+
+
+ as_lineno_1=$LINENO
+ as_lineno_2=$LINENO
+ as_lineno_3=`(expr $as_lineno_1 + 1) 2>/dev/null`
+ test "x$as_lineno_1" != "x$as_lineno_2" &&
+ test "x$as_lineno_3" = "x$as_lineno_2" || {
+ # Find who we are. Look in the path if we contain no path at all
+ # relative or not.
+ 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
+
+ ;;
+ 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
+ { { echo "$as_me:$LINENO: error: cannot find myself; rerun with an absolute path" >&5
+echo "$as_me: error: cannot find myself; rerun with an absolute path" >&2;}
+ { (exit 1); exit 1; }; }
+ fi
+ case $CONFIG_SHELL in
+ '')
+ 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=.
+ for as_base in sh bash ksh sh5; do
+ case $as_dir in
+ /*)
+ if ("$as_dir/$as_base" -c '
+ as_lineno_1=$LINENO
+ as_lineno_2=$LINENO
+ as_lineno_3=`(expr $as_lineno_1 + 1) 2>/dev/null`
+ test "x$as_lineno_1" != "x$as_lineno_2" &&
+ test "x$as_lineno_3" = "x$as_lineno_2" ') 2>/dev/null; then
+ $as_unset BASH_ENV || test "${BASH_ENV+set}" != set || { BASH_ENV=; export BASH_ENV; }
+ $as_unset ENV || test "${ENV+set}" != set || { ENV=; export ENV; }
+ CONFIG_SHELL=$as_dir/$as_base
+ export CONFIG_SHELL
+ exec "$CONFIG_SHELL" "$0" ${1+"$@"}
+ fi;;
+ esac
+ done
+done
+;;
+ esac
+
+ # 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 before each line; the second 'sed' does the real
+ # work. The second script uses 'N' to pair each line-number line
+ # with the numbered line, 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
+ # second 'sed' script. Blame Lee E. McMahon for sed's syntax. :-)
+ sed '=' <$as_myself |
+ sed '
+ N
+ s,$,-,
+ : loop
+ s,^\(['$as_cr_digits']*\)\(.*\)[$]LINENO\([^'$as_cr_alnum'_]\),\1\2\1\3,
+ t loop
+ s,-$,,
+ s,^['$as_cr_digits']*\n,,
+ ' >$as_me.lineno &&
+ chmod +x $as_me.lineno ||
+ { { echo "$as_me:$LINENO: error: cannot create $as_me.lineno; rerun with a POSIX shell" >&5
+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 sensible to this).
+ . ./$as_me.lineno
+ # Exit status is that of the last command.
+ exit
+}
+
+
+case `echo "testing\c"; echo 1,2,3`,`echo -n testing; echo 1,2,3` in
+ *c*,-n*) ECHO_N= ECHO_C='
+' ECHO_T=' ' ;;
+ *c*,* ) ECHO_N=-n ECHO_C= ECHO_T= ;;
+ *) ECHO_N= ECHO_C='\c' ECHO_T= ;;
+esac
+
+if expr a : '\(a\)' >/dev/null 2>&1; then
+ as_expr=expr
+else
+ as_expr=false
+fi
+
+rm -f conf$$ conf$$.exe conf$$.file
+echo >conf$$.file
+if ln -s conf$$.file conf$$ 2>/dev/null; then
+ # We could just check for DJGPP; but this test a) works b) is more generic
+ # and c) will remain valid once DJGPP supports symlinks (DJGPP 2.04).
+ if test -f conf$$.exe; then
+ # Don't use ln at all; we don't have any links
+ as_ln_s='cp -p'
+ else
+ as_ln_s='ln -s'
+ fi
+elif ln conf$$.file conf$$ 2>/dev/null; then
+ as_ln_s=ln
+else
+ as_ln_s='cp -p'
+fi
+rm -f conf$$ conf$$.exe conf$$.file
+
+if mkdir -p . 2>/dev/null; then
+ as_mkdir_p=:
+else
+ test -d ./-p && rmdir ./-p
+ as_mkdir_p=false
+fi
+
+as_executable_p="test -f"
+
+# 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'"
+
+
+# IFS
+# We need space, tab and new line, in precisely that order.
+as_nl='
+'
+IFS=" $as_nl"
+
+# CDPATH.
+$as_unset CDPATH
+
+exec 6>&1
+
+# Open the log real soon, to keep \$[0] and so on meaningful, and to
+# report actual input values of CONFIG_FILES etc. instead of their
+# values after options handling. Logging --version etc. is OK.
+exec 5>>config.log
+{
+ echo
+ sed 'h;s/./-/g;s/^.../## /;s/...$/ ##/;p;x;p;x' <<_ASBOX
+## Running $as_me. ##
+_ASBOX
+} >&5
+cat >&5 <<_CSEOF
+
+This file was extended by GNU Texinfo $as_me 4.8, which was
+generated by GNU Autoconf 2.59. Invocation command line was
+
+ CONFIG_FILES = $CONFIG_FILES
+ CONFIG_HEADERS = $CONFIG_HEADERS
+ CONFIG_LINKS = $CONFIG_LINKS
+ CONFIG_COMMANDS = $CONFIG_COMMANDS
+ $ $0 $@
+
+_CSEOF
+echo "on `(hostname || uname -n) 2>/dev/null | sed 1q`" >&5
+echo >&5
+_ACEOF
+
+# Files that config.status was made for.
+if test -n "$ac_config_files"; then
+ echo "config_files=\"$ac_config_files\"" >>$CONFIG_STATUS
+fi
+
+if test -n "$ac_config_headers"; then
+ echo "config_headers=\"$ac_config_headers\"" >>$CONFIG_STATUS
+fi
+
+if test -n "$ac_config_links"; then
+ echo "config_links=\"$ac_config_links\"" >>$CONFIG_STATUS
+fi
+
+if test -n "$ac_config_commands"; then
+ echo "config_commands=\"$ac_config_commands\"" >>$CONFIG_STATUS
+fi
+
+cat >>$CONFIG_STATUS <<\_ACEOF
+
+ac_cs_usage="\
+\`$as_me' instantiates files from templates according to the
+current configuration.
+
+Usage: $0 [OPTIONS] [FILE]...
+
+ -h, --help print this help, then exit
+ -V, --version print version number, then exit
+ -q, --quiet 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_cs_version="\\
+GNU Texinfo config.status 4.8
+configured by $0, generated by GNU Autoconf 2.59,
+ with options \\"`echo "$ac_configure_args" | sed 's/[\\""\`\$]/\\\\&/g'`\\"
+
+Copyright (C) 2003 Free Software Foundation, Inc.
+This config.status script is free software; the Free Software Foundation
+gives unlimited permission to copy, distribute and modify it."
+srcdir=$srcdir
+INSTALL="$INSTALL"
+_ACEOF
+
+cat >>$CONFIG_STATUS <<\_ACEOF
+# If no file are specified by the user, then we need to provide default
+# value. By we need to know if files were specified by the user.
+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
+ ;;
+ *) # This is not an option, so the user has probably given explicit
+ # arguments.
+ ac_option=$1
+ ac_need_defaults=false;;
+ esac
+
+ case $ac_option in
+ # Handling of the options.
+_ACEOF
+cat >>$CONFIG_STATUS <<\_ACEOF
+ -recheck | --recheck | --rechec | --reche | --rech | --rec | --re | --r)
+ ac_cs_recheck=: ;;
+ --version | --vers* | -V )
+ echo "$ac_cs_version"; exit 0 ;;
+ --he | --h)
+ # Conflict between --help and --header
+ { { echo "$as_me:$LINENO: error: ambiguous option: $1
+Try \`$0 --help' for more information." >&5
+echo "$as_me: error: ambiguous option: $1
+Try \`$0 --help' for more information." >&2;}
+ { (exit 1); exit 1; }; };;
+ --help | --hel | -h )
+ echo "$ac_cs_usage"; exit 0 ;;
+ --debug | --d* | -d )
+ debug=: ;;
+ --file | --fil | --fi | --f )
+ $ac_shift
+ CONFIG_FILES="$CONFIG_FILES $ac_optarg"
+ ac_need_defaults=false;;
+ --header | --heade | --head | --hea )
+ $ac_shift
+ CONFIG_HEADERS="$CONFIG_HEADERS $ac_optarg"
+ ac_need_defaults=false;;
+ -q | -quiet | --quiet | --quie | --qui | --qu | --q \
+ | -silent | --silent | --silen | --sile | --sil | --si | --s)
+ ac_cs_silent=: ;;
+
+ # This is an error.
+ -*) { { echo "$as_me:$LINENO: error: unrecognized option: $1
+Try \`$0 --help' for more information." >&5
+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" ;;
+
+ 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
+if \$ac_cs_recheck; then
+ echo "running $SHELL $0 " $ac_configure_args \$ac_configure_extra_args " --no-create --no-recursion" >&6
+ exec $SHELL $0 $ac_configure_args \$ac_configure_extra_args --no-create --no-recursion
+fi
+
+_ACEOF
+
+cat >>$CONFIG_STATUS <<_ACEOF
+#
+# INIT-COMMANDS section.
+#
+
+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.
+ 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
+for ac_config_target in $ac_config_targets
+do
+ case "$ac_config_target" in
+ # Handling of arguments.
+ "Makefile" ) CONFIG_FILES="$CONFIG_FILES Makefile" ;;
+ "doc/Makefile" ) CONFIG_FILES="$CONFIG_FILES doc/Makefile" ;;
+ "info/Makefile" ) CONFIG_FILES="$CONFIG_FILES info/Makefile" ;;
+ "intl/Makefile" ) CONFIG_FILES="$CONFIG_FILES intl/Makefile" ;;
+ "lib/Makefile" ) CONFIG_FILES="$CONFIG_FILES lib/Makefile" ;;
+ "m4/Makefile" ) CONFIG_FILES="$CONFIG_FILES m4/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" ;;
+ "depfiles" ) CONFIG_COMMANDS="$CONFIG_COMMANDS depfiles" ;;
+ "default-1" ) CONFIG_COMMANDS="$CONFIG_COMMANDS default-1" ;;
+ "config.h" ) CONFIG_HEADERS="$CONFIG_HEADERS config.h:config.in" ;;
+ *) { { echo "$as_me:$LINENO: error: invalid argument: $ac_config_target" >&5
+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 to put it here, and in addition,
+# creating and moving files from /tmp can sometimes cause problems.
+# Create a temporary directory, and hook for its removal unless debugging.
+$debug ||
+{
+ trap 'exit_status=$?; rm -rf $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 -q "./confstatXXXXXX") 2>/dev/null` &&
+ test -n "$tmp" && test -d "$tmp"
+} ||
+{
+ tmp=./confstat$$-$RANDOM
+ (umask 077 && mkdir $tmp)
+} ||
+{
+ echo "$me: cannot create a temporary directory in ." >&2
+ { (exit 1); exit 1; }
+}
+
+_ACEOF
+
+cat >>$CONFIG_STATUS <<_ACEOF
+
+#
+# CONFIG_FILES section.
+#
+
+# No need to generate the scripts if there are no CONFIG_FILES.
+# This happens for instance when ./config.status config.h
+if test -n "\$CONFIG_FILES"; then
+ # Protect against being on the right side of a sed subst in config.status.
+ sed 's/,@/@@/; s/@,/@@/; s/,;t t\$/@;t t/; /@;t t\$/s/[\\\\&,]/\\\\&/g;
+ s/@@/,@/; s/@@/@,/; s/@;t t\$/,;t t/' >\$tmp/subs.sed <<\\CEOF
+s,@SHELL@,$SHELL,;t t
+s,@PATH_SEPARATOR@,$PATH_SEPARATOR,;t t
+s,@PACKAGE_NAME@,$PACKAGE_NAME,;t t
+s,@PACKAGE_TARNAME@,$PACKAGE_TARNAME,;t t
+s,@PACKAGE_VERSION@,$PACKAGE_VERSION,;t t
+s,@PACKAGE_STRING@,$PACKAGE_STRING,;t t
+s,@PACKAGE_BUGREPORT@,$PACKAGE_BUGREPORT,;t t
+s,@exec_prefix@,$exec_prefix,;t t
+s,@prefix@,$prefix,;t t
+s,@program_transform_name@,$program_transform_name,;t t
+s,@bindir@,$bindir,;t t
+s,@sbindir@,$sbindir,;t t
+s,@libexecdir@,$libexecdir,;t t
+s,@datadir@,$datadir,;t t
+s,@sysconfdir@,$sysconfdir,;t t
+s,@sharedstatedir@,$sharedstatedir,;t t
+s,@localstatedir@,$localstatedir,;t t
+s,@libdir@,$libdir,;t t
+s,@includedir@,$includedir,;t t
+s,@oldincludedir@,$oldincludedir,;t t
+s,@infodir@,$infodir,;t t
+s,@mandir@,$mandir,;t t
+s,@build_alias@,$build_alias,;t t
+s,@host_alias@,$host_alias,;t t
+s,@target_alias@,$target_alias,;t t
+s,@DEFS@,$DEFS,;t t
+s,@ECHO_C@,$ECHO_C,;t t
+s,@ECHO_N@,$ECHO_N,;t t
+s,@ECHO_T@,$ECHO_T,;t t
+s,@LIBS@,$LIBS,;t t
+s,@INSTALL_PROGRAM@,$INSTALL_PROGRAM,;t t
+s,@INSTALL_SCRIPT@,$INSTALL_SCRIPT,;t t
+s,@INSTALL_DATA@,$INSTALL_DATA,;t t
+s,@CYGPATH_W@,$CYGPATH_W,;t t
+s,@PACKAGE@,$PACKAGE,;t t
+s,@VERSION@,$VERSION,;t t
+s,@ACLOCAL@,$ACLOCAL,;t t
+s,@AUTOCONF@,$AUTOCONF,;t t
+s,@AUTOMAKE@,$AUTOMAKE,;t t
+s,@AUTOHEADER@,$AUTOHEADER,;t t
+s,@MAKEINFO@,$MAKEINFO,;t t
+s,@install_sh@,$install_sh,;t t
+s,@STRIP@,$STRIP,;t t
+s,@ac_ct_STRIP@,$ac_ct_STRIP,;t t
+s,@INSTALL_STRIP_PROGRAM@,$INSTALL_STRIP_PROGRAM,;t t
+s,@mkdir_p@,$mkdir_p,;t t
+s,@AWK@,$AWK,;t t
+s,@SET_MAKE@,$SET_MAKE,;t t
+s,@am__leading_dot@,$am__leading_dot,;t t
+s,@AMTAR@,$AMTAR,;t t
+s,@am__tar@,$am__tar,;t t
+s,@am__untar@,$am__untar,;t t
+s,@MAINTAINER_MODE_TRUE@,$MAINTAINER_MODE_TRUE,;t t
+s,@MAINTAINER_MODE_FALSE@,$MAINTAINER_MODE_FALSE,;t t
+s,@MAINT@,$MAINT,;t t
+s,@CC@,$CC,;t t
+s,@CFLAGS@,$CFLAGS,;t t
+s,@LDFLAGS@,$LDFLAGS,;t t
+s,@CPPFLAGS@,$CPPFLAGS,;t t
+s,@ac_ct_CC@,$ac_ct_CC,;t t
+s,@EXEEXT@,$EXEEXT,;t t
+s,@OBJEXT@,$OBJEXT,;t t
+s,@DEPDIR@,$DEPDIR,;t t
+s,@am__include@,$am__include,;t t
+s,@am__quote@,$am__quote,;t t
+s,@AMDEP_TRUE@,$AMDEP_TRUE,;t t
+s,@AMDEP_FALSE@,$AMDEP_FALSE,;t t
+s,@AMDEPBACKSLASH@,$AMDEPBACKSLASH,;t t
+s,@CCDEPMODE@,$CCDEPMODE,;t t
+s,@am__fastdepCC_TRUE@,$am__fastdepCC_TRUE,;t t
+s,@am__fastdepCC_FALSE@,$am__fastdepCC_FALSE,;t t
+s,@CPP@,$CPP,;t t
+s,@EGREP@,$EGREP,;t t
+s,@RANLIB@,$RANLIB,;t t
+s,@ac_ct_RANLIB@,$ac_ct_RANLIB,;t t
+s,@HELP2MAN@,$HELP2MAN,;t t
+s,@ALLOCA@,$ALLOCA,;t t
+s,@LIBOBJS@,$LIBOBJS,;t t
+s,@build@,$build,;t t
+s,@build_cpu@,$build_cpu,;t t
+s,@build_vendor@,$build_vendor,;t t
+s,@build_os@,$build_os,;t t
+s,@native_tools@,$native_tools,;t t
+s,@TOOLS_ONLY_TRUE@,$TOOLS_ONLY_TRUE,;t t
+s,@TOOLS_ONLY_FALSE@,$TOOLS_ONLY_FALSE,;t t
+s,@TERMLIBS@,$TERMLIBS,;t t
+s,@host@,$host,;t t
+s,@host_cpu@,$host_cpu,;t t
+s,@host_vendor@,$host_vendor,;t t
+s,@host_os@,$host_os,;t t
+s,@INSTALL_WARNINGS_TRUE@,$INSTALL_WARNINGS_TRUE,;t t
+s,@INSTALL_WARNINGS_FALSE@,$INSTALL_WARNINGS_FALSE,;t t
+s,@MKINSTALLDIRS@,$MKINSTALLDIRS,;t t
+s,@USE_NLS@,$USE_NLS,;t t
+s,@MSGFMT@,$MSGFMT,;t t
+s,@GMSGFMT@,$GMSGFMT,;t t
+s,@XGETTEXT@,$XGETTEXT,;t t
+s,@MSGMERGE@,$MSGMERGE,;t t
+s,@GLIBC21@,$GLIBC21,;t t
+s,@HAVE_POSIX_PRINTF@,$HAVE_POSIX_PRINTF,;t t
+s,@HAVE_ASPRINTF@,$HAVE_ASPRINTF,;t t
+s,@HAVE_SNPRINTF@,$HAVE_SNPRINTF,;t t
+s,@HAVE_WPRINTF@,$HAVE_WPRINTF,;t t
+s,@LIBICONV@,$LIBICONV,;t t
+s,@LTLIBICONV@,$LTLIBICONV,;t t
+s,@INTLBISON@,$INTLBISON,;t t
+s,@BUILD_INCLUDED_LIBINTL@,$BUILD_INCLUDED_LIBINTL,;t t
+s,@USE_INCLUDED_LIBINTL@,$USE_INCLUDED_LIBINTL,;t t
+s,@CATOBJEXT@,$CATOBJEXT,;t t
+s,@DATADIRNAME@,$DATADIRNAME,;t t
+s,@INSTOBJEXT@,$INSTOBJEXT,;t t
+s,@GENCAT@,$GENCAT,;t t
+s,@INTLOBJS@,$INTLOBJS,;t t
+s,@INTL_LIBTOOL_SUFFIX_PREFIX@,$INTL_LIBTOOL_SUFFIX_PREFIX,;t t
+s,@INTLLIBS@,$INTLLIBS,;t t
+s,@LIBINTL@,$LIBINTL,;t t
+s,@LTLIBINTL@,$LTLIBINTL,;t t
+s,@POSUB@,$POSUB,;t t
+s,@LTLIBOBJS@,$LTLIBOBJS,;t t
+CEOF
+
+_ACEOF
+
+ cat >>$CONFIG_STATUS <<\_ACEOF
+ # Split the substitutions into bite-sized pieces for seds with
+ # small command number limits, like on Digital OSF/1 and HP-UX.
+ ac_max_sed_lines=48
+ ac_sed_frag=1 # Number of current file.
+ ac_beg=1 # First line for current file.
+ ac_end=$ac_max_sed_lines # Line after last line for current file.
+ ac_more_lines=:
+ ac_sed_cmds=
+ while $ac_more_lines; do
+ if test $ac_beg -gt 1; then
+ sed "1,${ac_beg}d; ${ac_end}q" $tmp/subs.sed >$tmp/subs.frag
+ else
+ sed "${ac_end}q" $tmp/subs.sed >$tmp/subs.frag
+ fi
+ if test ! -s $tmp/subs.frag; then
+ ac_more_lines=false
+ else
+ # The purpose of the label and of the branching condition is to
+ # speed up the sed processing (if there are no `@' at all, there
+ # is no need to browse any of the substitutions).
+ # These are the two extra sed commands mentioned above.
+ (echo ':t
+ /@[a-zA-Z_][a-zA-Z_0-9]*@/!b' && cat $tmp/subs.frag) >$tmp/subs-$ac_sed_frag.sed
+ if test -z "$ac_sed_cmds"; then
+ ac_sed_cmds="sed -f $tmp/subs-$ac_sed_frag.sed"
+ else
+ ac_sed_cmds="$ac_sed_cmds | sed -f $tmp/subs-$ac_sed_frag.sed"
+ fi
+ ac_sed_frag=`expr $ac_sed_frag + 1`
+ ac_beg=$ac_end
+ ac_end=`expr $ac_end + $ac_max_sed_lines`
+ fi
+ done
+ if test -z "$ac_sed_cmds"; then
+ ac_sed_cmds=cat
+ fi
+fi # test -n "$CONFIG_FILES"
+
+_ACEOF
+cat >>$CONFIG_STATUS <<\_ACEOF
+for ac_file in : $CONFIG_FILES; do test "x$ac_file" = x: && continue
+ # Support "outfile[:infile[:infile...]]", defaulting infile="outfile.in".
+ case $ac_file in
+ - | *:- | *:-:* ) # input from stdin
+ cat >$tmp/stdin
+ ac_file_in=`echo "$ac_file" | sed 's,[^:]*:,,'`
+ ac_file=`echo "$ac_file" | sed 's,:.*,,'` ;;
+ *:* ) ac_file_in=`echo "$ac_file" | sed 's,[^:]*:,,'`
+ ac_file=`echo "$ac_file" | sed 's,:.*,,'` ;;
+ * ) ac_file_in=$ac_file.in ;;
+ esac
+
+ # Compute @srcdir@, @top_srcdir@, and @INSTALL@ for subdirectories.
+ ac_dir=`(dirname "$ac_file") 2>/dev/null ||
+$as_expr X"$ac_file" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \
+ X"$ac_file" : 'X\(//\)[^/]' \| \
+ X"$ac_file" : 'X\(//\)$' \| \
+ X"$ac_file" : 'X\(/\)' \| \
+ . : '\(.\)' 2>/dev/null ||
+echo X"$ac_file" |
+ sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{ s//\1/; q; }
+ /^X\(\/\/\)[^/].*/{ s//\1/; q; }
+ /^X\(\/\/\)$/{ s//\1/; q; }
+ /^X\(\/\).*/{ s//\1/; q; }
+ s/.*/./; q'`
+ { if $as_mkdir_p; then
+ mkdir -p "$ac_dir"
+ else
+ as_dir="$ac_dir"
+ as_dirs=
+ while test ! -d "$as_dir"; do
+ as_dirs="$as_dir $as_dirs"
+ as_dir=`(dirname "$as_dir") 2>/dev/null ||
+$as_expr X"$as_dir" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \
+ X"$as_dir" : 'X\(//\)[^/]' \| \
+ X"$as_dir" : 'X\(//\)$' \| \
+ X"$as_dir" : 'X\(/\)' \| \
+ . : '\(.\)' 2>/dev/null ||
+echo X"$as_dir" |
+ sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{ s//\1/; q; }
+ /^X\(\/\/\)[^/].*/{ s//\1/; q; }
+ /^X\(\/\/\)$/{ s//\1/; q; }
+ /^X\(\/\).*/{ s//\1/; q; }
+ s/.*/./; q'`
+ done
+ test ! -n "$as_dirs" || mkdir $as_dirs
+ fi || { { echo "$as_me:$LINENO: error: cannot create directory \"$ac_dir\"" >&5
+echo "$as_me: error: cannot create directory \"$ac_dir\"" >&2;}
+ { (exit 1); exit 1; }; }; }
+
+ ac_builddir=.
+
+if test "$ac_dir" != .; then
+ ac_dir_suffix=/`echo "$ac_dir" | sed 's,^\.[\\/],,'`
+ # A "../" for each directory in $ac_dir_suffix.
+ ac_top_builddir=`echo "$ac_dir_suffix" | sed 's,/[^\\/]*,../,g'`
+else
+ ac_dir_suffix= ac_top_builddir=
+fi
+
+case $srcdir in
+ .) # No --srcdir option. We are building in place.
+ ac_srcdir=.
+ if test -z "$ac_top_builddir"; then
+ ac_top_srcdir=.
+ else
+ ac_top_srcdir=`echo $ac_top_builddir | sed 's,/$,,'`
+ fi ;;
+ [\\/]* | ?:[\\/]* ) # Absolute path.
+ ac_srcdir=$srcdir$ac_dir_suffix;
+ ac_top_srcdir=$srcdir ;;
+ *) # Relative path.
+ ac_srcdir=$ac_top_builddir$srcdir$ac_dir_suffix
+ ac_top_srcdir=$ac_top_builddir$srcdir ;;
+esac
+
+# Do not use `cd foo && pwd` to compute absolute paths, because
+# the directories may not exist.
+case `pwd` in
+.) ac_abs_builddir="$ac_dir";;
+*)
+ case "$ac_dir" in
+ .) ac_abs_builddir=`pwd`;;
+ [\\/]* | ?:[\\/]* ) ac_abs_builddir="$ac_dir";;
+ *) ac_abs_builddir=`pwd`/"$ac_dir";;
+ esac;;
+esac
+case $ac_abs_builddir in
+.) ac_abs_top_builddir=${ac_top_builddir}.;;
+*)
+ case ${ac_top_builddir}. in
+ .) ac_abs_top_builddir=$ac_abs_builddir;;
+ [\\/]* | ?:[\\/]* ) ac_abs_top_builddir=${ac_top_builddir}.;;
+ *) ac_abs_top_builddir=$ac_abs_builddir/${ac_top_builddir}.;;
+ esac;;
+esac
+case $ac_abs_builddir in
+.) ac_abs_srcdir=$ac_srcdir;;
+*)
+ case $ac_srcdir in
+ .) ac_abs_srcdir=$ac_abs_builddir;;
+ [\\/]* | ?:[\\/]* ) ac_abs_srcdir=$ac_srcdir;;
+ *) ac_abs_srcdir=$ac_abs_builddir/$ac_srcdir;;
+ esac;;
+esac
+case $ac_abs_builddir in
+.) ac_abs_top_srcdir=$ac_top_srcdir;;
+*)
+ case $ac_top_srcdir in
+ .) ac_abs_top_srcdir=$ac_abs_builddir;;
+ [\\/]* | ?:[\\/]* ) ac_abs_top_srcdir=$ac_top_srcdir;;
+ *) ac_abs_top_srcdir=$ac_abs_builddir/$ac_top_srcdir;;
+ esac;;
+esac
+
+
+ case $INSTALL in
+ [\\/$]* | ?:[\\/]* ) ac_INSTALL=$INSTALL ;;
+ *) ac_INSTALL=$ac_top_builddir$INSTALL ;;
+ esac
+
+ if test x"$ac_file" != x-; then
+ { echo "$as_me:$LINENO: creating $ac_file" >&5
+echo "$as_me: creating $ac_file" >&6;}
+ rm -f "$ac_file"
+ fi
+ # 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. */
+ if test x"$ac_file" = x-; then
+ configure_input=
+ else
+ configure_input="$ac_file. "
+ fi
+ configure_input=$configure_input"Generated from `echo $ac_file_in |
+ sed 's,.*/,,'` by configure."
+
+ # First look for the input files in the build tree, otherwise in the
+ # src tree.
+ ac_file_inputs=`IFS=:
+ for f in $ac_file_in; do
+ case $f in
+ -) echo $tmp/stdin ;;
+ [\\/$]*)
+ # Absolute (can't be DOS-style, as IFS=:)
+ test -f "$f" || { { echo "$as_me:$LINENO: error: cannot find input file: $f" >&5
+echo "$as_me: error: cannot find input file: $f" >&2;}
+ { (exit 1); exit 1; }; }
+ echo "$f";;
+ *) # Relative
+ if test -f "$f"; then
+ # Build tree
+ echo "$f"
+ elif test -f "$srcdir/$f"; then
+ # Source tree
+ echo "$srcdir/$f"
+ else
+ # /dev/null tree
+ { { echo "$as_me:$LINENO: error: cannot find input file: $f" >&5
+echo "$as_me: error: cannot find input file: $f" >&2;}
+ { (exit 1); exit 1; }; }
+ fi;;
+ esac
+ done` || { (exit 1); exit 1; }
+_ACEOF
+cat >>$CONFIG_STATUS <<_ACEOF
+ sed "$ac_vpsub
+$extrasub
+_ACEOF
+cat >>$CONFIG_STATUS <<\_ACEOF
+:t
+/@[a-zA-Z_][a-zA-Z_0-9]*@/!b
+s,@configure_input@,$configure_input,;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,@top_builddir@,$ac_top_builddir,;t t
+s,@abs_top_builddir@,$ac_abs_top_builddir,;t t
+s,@INSTALL@,$ac_INSTALL,;t t
+" $ac_file_inputs | (eval "$ac_sed_cmds") >$tmp/out
+ rm -f $tmp/stdin
+ if test x"$ac_file" != x-; then
+ mv $tmp/out $ac_file
+ else
+ cat $tmp/out
+ rm -f $tmp/out
+ fi
+
+done
+_ACEOF
+cat >>$CONFIG_STATUS <<\_ACEOF
+
+#
+# CONFIG_HEADER section.
+#
+
+# These sed commands are passed to sed as "A NAME B NAME C VALUE D", where
+# NAME is the cpp macro being defined and VALUE is the value it is being given.
+#
+# ac_d sets the value in "#define NAME VALUE" lines.
+ac_dA='s,^\([ ]*\)#\([ ]*define[ ][ ]*\)'
+ac_dB='[ ].*$,\1#\2'
+ac_dC=' '
+ac_dD=',;t'
+# ac_u turns "#undef NAME" without trailing blanks into "#define NAME VALUE".
+ac_uA='s,^\([ ]*\)#\([ ]*\)undef\([ ][ ]*\)'
+ac_uB='$,\1#\2define\3'
+ac_uC=' '
+ac_uD=',;t'
+
+for ac_file in : $CONFIG_HEADERS; do test "x$ac_file" = x: && continue
+ # Support "outfile[:infile[:infile...]]", defaulting infile="outfile.in".
+ case $ac_file in
+ - | *:- | *:-:* ) # input from stdin
+ cat >$tmp/stdin
+ ac_file_in=`echo "$ac_file" | sed 's,[^:]*:,,'`
+ ac_file=`echo "$ac_file" | sed 's,:.*,,'` ;;
+ *:* ) ac_file_in=`echo "$ac_file" | sed 's,[^:]*:,,'`
+ ac_file=`echo "$ac_file" | sed 's,:.*,,'` ;;
+ * ) ac_file_in=$ac_file.in ;;
+ esac
+
+ test x"$ac_file" != x- && { echo "$as_me:$LINENO: creating $ac_file" >&5
+echo "$as_me: creating $ac_file" >&6;}
+
+ # First look for the input files in the build tree, otherwise in the
+ # src tree.
+ ac_file_inputs=`IFS=:
+ for f in $ac_file_in; do
+ case $f in
+ -) echo $tmp/stdin ;;
+ [\\/$]*)
+ # Absolute (can't be DOS-style, as IFS=:)
+ test -f "$f" || { { echo "$as_me:$LINENO: error: cannot find input file: $f" >&5
+echo "$as_me: error: cannot find input file: $f" >&2;}
+ { (exit 1); exit 1; }; }
+ # Do quote $f, to prevent DOS paths from being IFS'd.
+ echo "$f";;
+ *) # Relative
+ if test -f "$f"; then
+ # Build tree
+ echo "$f"
+ elif test -f "$srcdir/$f"; then
+ # Source tree
+ echo "$srcdir/$f"
+ else
+ # /dev/null tree
+ { { echo "$as_me:$LINENO: error: cannot find input file: $f" >&5
+echo "$as_me: error: cannot find input file: $f" >&2;}
+ { (exit 1); exit 1; }; }
+ fi;;
+ esac
+ done` || { (exit 1); exit 1; }
+ # Remove the trailing spaces.
+ sed 's/[ ]*$//' $ac_file_inputs >$tmp/in
+
+_ACEOF
+
+# Transform confdefs.h into two sed scripts, `conftest.defines' and
+# `conftest.undefs', that substitutes the proper values into
+# config.h.in to produce config.h. The first handles `#define'
+# templates, and the second `#undef' templates.
+# And first: Protect against being on the right side of a sed subst in
+# config.status. Protect against being in an unquoted here document
+# in config.status.
+rm -f conftest.defines conftest.undefs
+# Using a here document instead of a string reduces the quoting nightmare.
+# Putting comments in sed scripts is not portable.
+#
+# `end' is used to avoid that the second main sed command (meant for
+# 0-ary CPP macros) applies to n-ary macro definitions.
+# See the Autoconf documentation for `clear'.
+cat >confdef2sed.sed <<\_ACEOF
+s/[\\&,]/\\&/g
+s,[\\$`],\\&,g
+t clear
+: clear
+s,^[ ]*#[ ]*define[ ][ ]*\([^ (][^ (]*\)\(([^)]*)\)[ ]*\(.*\)$,${ac_dA}\1${ac_dB}\1\2${ac_dC}\3${ac_dD},gp
+t end
+s,^[ ]*#[ ]*define[ ][ ]*\([^ ][^ ]*\)[ ]*\(.*\)$,${ac_dA}\1${ac_dB}\1${ac_dC}\2${ac_dD},gp
+: end
+_ACEOF
+# If some macros were called several times there might be several times
+# the same #defines, which is useless. Nevertheless, we may not want to
+# sort them, since we want the *last* AC-DEFINE to be honored.
+uniq confdefs.h | sed -n -f confdef2sed.sed >conftest.defines
+sed 's/ac_d/ac_u/g' conftest.defines >conftest.undefs
+rm -f confdef2sed.sed
+
+# This sed command replaces #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.
+cat >>conftest.undefs <<\_ACEOF
+s,^[ ]*#[ ]*undef[ ][ ]*[a-zA-Z_][a-zA-Z_0-9]*,/* & */,
+_ACEOF
+
+# Break up conftest.defines because some shells have a limit on the size
+# of here documents, and old seds have small limits too (100 cmds).
+echo ' # Handle all the #define templates only if necessary.' >>$CONFIG_STATUS
+echo ' if grep "^[ ]*#[ ]*define" $tmp/in >/dev/null; then' >>$CONFIG_STATUS
+echo ' # If there are no defines, we may have an empty if/fi' >>$CONFIG_STATUS
+echo ' :' >>$CONFIG_STATUS
+rm -f conftest.tail
+while grep . conftest.defines >/dev/null
+do
+ # Write a limited-size here document to $tmp/defines.sed.
+ echo ' cat >$tmp/defines.sed <<CEOF' >>$CONFIG_STATUS
+ # Speed up: don't consider the non `#define' lines.
+ echo '/^[ ]*#[ ]*define/!b' >>$CONFIG_STATUS
+ # Work around the forget-to-reset-the-flag bug.
+ echo 't clr' >>$CONFIG_STATUS
+ echo ': clr' >>$CONFIG_STATUS
+ sed ${ac_max_here_lines}q conftest.defines >>$CONFIG_STATUS
+ echo 'CEOF
+ sed -f $tmp/defines.sed $tmp/in >$tmp/out
+ rm -f $tmp/in
+ mv $tmp/out $tmp/in
+' >>$CONFIG_STATUS
+ sed 1,${ac_max_here_lines}d conftest.defines >conftest.tail
+ rm -f conftest.defines
+ mv conftest.tail conftest.defines
+done
+rm -f conftest.defines
+echo ' fi # grep' >>$CONFIG_STATUS
+echo >>$CONFIG_STATUS
+
+# Break up conftest.undefs because some shells have a limit on the size
+# of here documents, and old seds have small limits too (100 cmds).
+echo ' # Handle all the #undef templates' >>$CONFIG_STATUS
+rm -f conftest.tail
+while grep . conftest.undefs >/dev/null
+do
+ # Write a limited-size here document to $tmp/undefs.sed.
+ echo ' cat >$tmp/undefs.sed <<CEOF' >>$CONFIG_STATUS
+ # Speed up: don't consider the non `#undef'
+ echo '/^[ ]*#[ ]*undef/!b' >>$CONFIG_STATUS
+ # Work around the forget-to-reset-the-flag bug.
+ echo 't clr' >>$CONFIG_STATUS
+ echo ': clr' >>$CONFIG_STATUS
+ sed ${ac_max_here_lines}q conftest.undefs >>$CONFIG_STATUS
+ echo 'CEOF
+ sed -f $tmp/undefs.sed $tmp/in >$tmp/out
+ rm -f $tmp/in
+ mv $tmp/out $tmp/in
+' >>$CONFIG_STATUS
+ sed 1,${ac_max_here_lines}d conftest.undefs >conftest.tail
+ rm -f conftest.undefs
+ mv conftest.tail conftest.undefs
+done
+rm -f conftest.undefs
+
+cat >>$CONFIG_STATUS <<\_ACEOF
+ # 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. */
+ if test x"$ac_file" = x-; then
+ echo "/* Generated by configure. */" >$tmp/config.h
+ else
+ echo "/* $ac_file. Generated by configure. */" >$tmp/config.h
+ fi
+ cat $tmp/in >>$tmp/config.h
+ rm -f $tmp/in
+ if test x"$ac_file" != x-; then
+ if diff $ac_file $tmp/config.h >/dev/null 2>&1; then
+ { echo "$as_me:$LINENO: $ac_file is unchanged" >&5
+echo "$as_me: $ac_file is unchanged" >&6;}
+ else
+ ac_dir=`(dirname "$ac_file") 2>/dev/null ||
+$as_expr X"$ac_file" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \
+ X"$ac_file" : 'X\(//\)[^/]' \| \
+ X"$ac_file" : 'X\(//\)$' \| \
+ X"$ac_file" : 'X\(/\)' \| \
+ . : '\(.\)' 2>/dev/null ||
+echo X"$ac_file" |
+ sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{ s//\1/; q; }
+ /^X\(\/\/\)[^/].*/{ s//\1/; q; }
+ /^X\(\/\/\)$/{ s//\1/; q; }
+ /^X\(\/\).*/{ s//\1/; q; }
+ s/.*/./; q'`
+ { if $as_mkdir_p; then
+ mkdir -p "$ac_dir"
+ else
+ as_dir="$ac_dir"
+ as_dirs=
+ while test ! -d "$as_dir"; do
+ as_dirs="$as_dir $as_dirs"
+ as_dir=`(dirname "$as_dir") 2>/dev/null ||
+$as_expr X"$as_dir" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \
+ X"$as_dir" : 'X\(//\)[^/]' \| \
+ X"$as_dir" : 'X\(//\)$' \| \
+ X"$as_dir" : 'X\(/\)' \| \
+ . : '\(.\)' 2>/dev/null ||
+echo X"$as_dir" |
+ sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{ s//\1/; q; }
+ /^X\(\/\/\)[^/].*/{ s//\1/; q; }
+ /^X\(\/\/\)$/{ s//\1/; q; }
+ /^X\(\/\).*/{ s//\1/; q; }
+ s/.*/./; q'`
+ done
+ test ! -n "$as_dirs" || mkdir $as_dirs
+ fi || { { echo "$as_me:$LINENO: error: cannot create directory \"$ac_dir\"" >&5
+echo "$as_me: error: cannot create directory \"$ac_dir\"" >&2;}
+ { (exit 1); exit 1; }; }; }
+
+ rm -f $ac_file
+ mv $tmp/config.h $ac_file
+ fi
+ else
+ cat $tmp/config.h
+ rm -f $tmp/config.h
+ fi
+# Compute $ac_file's index in $config_headers.
+_am_stamp_count=1
+for _am_header in $config_headers :; do
+ case $_am_header in
+ $ac_file | $ac_file:* )
+ break ;;
+ * )
+ _am_stamp_count=`expr $_am_stamp_count + 1` ;;
+ esac
+done
+echo "timestamp for $ac_file" >`(dirname $ac_file) 2>/dev/null ||
+$as_expr X$ac_file : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \
+ X$ac_file : 'X\(//\)[^/]' \| \
+ X$ac_file : 'X\(//\)$' \| \
+ X$ac_file : 'X\(/\)' \| \
+ . : '\(.\)' 2>/dev/null ||
+echo X$ac_file |
+ sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{ s//\1/; q; }
+ /^X\(\/\/\)[^/].*/{ s//\1/; q; }
+ /^X\(\/\/\)$/{ s//\1/; q; }
+ /^X\(\/\).*/{ s//\1/; q; }
+ s/.*/./; q'`/stamp-h$_am_stamp_count
+done
+_ACEOF
+cat >>$CONFIG_STATUS <<\_ACEOF
+
+#
+# CONFIG_COMMANDS section.
+#
+for ac_file in : $CONFIG_COMMANDS; do test "x$ac_file" = x: && continue
+ ac_dest=`echo "$ac_file" | sed 's,:.*,,'`
+ ac_source=`echo "$ac_file" | sed 's,[^:]*:,,'`
+ ac_dir=`(dirname "$ac_dest") 2>/dev/null ||
+$as_expr X"$ac_dest" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \
+ X"$ac_dest" : 'X\(//\)[^/]' \| \
+ X"$ac_dest" : 'X\(//\)$' \| \
+ X"$ac_dest" : 'X\(/\)' \| \
+ . : '\(.\)' 2>/dev/null ||
+echo X"$ac_dest" |
+ sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{ s//\1/; q; }
+ /^X\(\/\/\)[^/].*/{ s//\1/; q; }
+ /^X\(\/\/\)$/{ s//\1/; q; }
+ /^X\(\/\).*/{ s//\1/; q; }
+ s/.*/./; q'`
+ { if $as_mkdir_p; then
+ mkdir -p "$ac_dir"
+ else
+ as_dir="$ac_dir"
+ as_dirs=
+ while test ! -d "$as_dir"; do
+ as_dirs="$as_dir $as_dirs"
+ as_dir=`(dirname "$as_dir") 2>/dev/null ||
+$as_expr X"$as_dir" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \
+ X"$as_dir" : 'X\(//\)[^/]' \| \
+ X"$as_dir" : 'X\(//\)$' \| \
+ X"$as_dir" : 'X\(/\)' \| \
+ . : '\(.\)' 2>/dev/null ||
+echo X"$as_dir" |
+ sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{ s//\1/; q; }
+ /^X\(\/\/\)[^/].*/{ s//\1/; q; }
+ /^X\(\/\/\)$/{ s//\1/; q; }
+ /^X\(\/\).*/{ s//\1/; q; }
+ s/.*/./; q'`
+ done
+ test ! -n "$as_dirs" || mkdir $as_dirs
+ fi || { { echo "$as_me:$LINENO: error: cannot create directory \"$ac_dir\"" >&5
+echo "$as_me: error: cannot create directory \"$ac_dir\"" >&2;}
+ { (exit 1); exit 1; }; }; }
+
+ ac_builddir=.
+
+if test "$ac_dir" != .; then
+ ac_dir_suffix=/`echo "$ac_dir" | sed 's,^\.[\\/],,'`
+ # A "../" for each directory in $ac_dir_suffix.
+ ac_top_builddir=`echo "$ac_dir_suffix" | sed 's,/[^\\/]*,../,g'`
+else
+ ac_dir_suffix= ac_top_builddir=
+fi
+
+case $srcdir in
+ .) # No --srcdir option. We are building in place.
+ ac_srcdir=.
+ if test -z "$ac_top_builddir"; then
+ ac_top_srcdir=.
+ else
+ ac_top_srcdir=`echo $ac_top_builddir | sed 's,/$,,'`
+ fi ;;
+ [\\/]* | ?:[\\/]* ) # Absolute path.
+ ac_srcdir=$srcdir$ac_dir_suffix;
+ ac_top_srcdir=$srcdir ;;
+ *) # Relative path.
+ ac_srcdir=$ac_top_builddir$srcdir$ac_dir_suffix
+ ac_top_srcdir=$ac_top_builddir$srcdir ;;
+esac
+
+# Do not use `cd foo && pwd` to compute absolute paths, because
+# the directories may not exist.
+case `pwd` in
+.) ac_abs_builddir="$ac_dir";;
+*)
+ case "$ac_dir" in
+ .) ac_abs_builddir=`pwd`;;
+ [\\/]* | ?:[\\/]* ) ac_abs_builddir="$ac_dir";;
+ *) ac_abs_builddir=`pwd`/"$ac_dir";;
+ esac;;
+esac
+case $ac_abs_builddir in
+.) ac_abs_top_builddir=${ac_top_builddir}.;;
+*)
+ case ${ac_top_builddir}. in
+ .) ac_abs_top_builddir=$ac_abs_builddir;;
+ [\\/]* | ?:[\\/]* ) ac_abs_top_builddir=${ac_top_builddir}.;;
+ *) ac_abs_top_builddir=$ac_abs_builddir/${ac_top_builddir}.;;
+ esac;;
+esac
+case $ac_abs_builddir in
+.) ac_abs_srcdir=$ac_srcdir;;
+*)
+ case $ac_srcdir in
+ .) ac_abs_srcdir=$ac_abs_builddir;;
+ [\\/]* | ?:[\\/]* ) ac_abs_srcdir=$ac_srcdir;;
+ *) ac_abs_srcdir=$ac_abs_builddir/$ac_srcdir;;
+ esac;;
+esac
+case $ac_abs_builddir in
+.) ac_abs_top_srcdir=$ac_top_srcdir;;
+*)
+ case $ac_top_srcdir in
+ .) ac_abs_top_srcdir=$ac_abs_builddir;;
+ [\\/]* | ?:[\\/]* ) ac_abs_top_srcdir=$ac_top_srcdir;;
+ *) ac_abs_top_srcdir=$ac_abs_builddir/$ac_top_srcdir;;
+ esac;;
+esac
+
+
+ { echo "$as_me:$LINENO: executing $ac_dest commands" >&5
+echo "$as_me: executing $ac_dest commands" >&6;}
+ case $ac_dest in
+ depfiles ) 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.
+ # So let's grep whole file.
+ if grep '^#.*generated by automake' $mf > /dev/null 2>&1; then
+ dirpart=`(dirname "$mf") 2>/dev/null ||
+$as_expr X"$mf" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \
+ X"$mf" : 'X\(//\)[^/]' \| \
+ X"$mf" : 'X\(//\)$' \| \
+ X"$mf" : 'X\(/\)' \| \
+ . : '\(.\)' 2>/dev/null ||
+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=`(dirname "$file") 2>/dev/null ||
+$as_expr X"$file" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \
+ X"$file" : 'X\(//\)[^/]' \| \
+ X"$file" : 'X\(//\)$' \| \
+ X"$file" : 'X\(/\)' \| \
+ . : '\(.\)' 2>/dev/null ||
+echo X"$file" |
+ sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{ s//\1/; q; }
+ /^X\(\/\/\)[^/].*/{ s//\1/; q; }
+ /^X\(\/\/\)$/{ s//\1/; q; }
+ /^X\(\/\).*/{ s//\1/; q; }
+ s/.*/./; q'`
+ { if $as_mkdir_p; then
+ mkdir -p $dirpart/$fdir
+ else
+ as_dir=$dirpart/$fdir
+ as_dirs=
+ while test ! -d "$as_dir"; do
+ as_dirs="$as_dir $as_dirs"
+ as_dir=`(dirname "$as_dir") 2>/dev/null ||
+$as_expr X"$as_dir" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \
+ X"$as_dir" : 'X\(//\)[^/]' \| \
+ X"$as_dir" : 'X\(//\)$' \| \
+ X"$as_dir" : 'X\(/\)' \| \
+ . : '\(.\)' 2>/dev/null ||
+echo X"$as_dir" |
+ sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{ s//\1/; q; }
+ /^X\(\/\/\)[^/].*/{ s//\1/; q; }
+ /^X\(\/\/\)$/{ s//\1/; q; }
+ /^X\(\/\).*/{ s//\1/; q; }
+ s/.*/./; q'`
+ done
+ test ! -n "$as_dirs" || mkdir $as_dirs
+ fi || { { echo "$as_me:$LINENO: error: cannot create directory $dirpart/$fdir" >&5
+echo "$as_me: error: cannot create directory $dirpart/$fdir" >&2;}
+ { (exit 1); exit 1; }; }; }
+
+ # echo "creating $dirpart/$file"
+ echo '# dummy' > "$dirpart/$file"
+ done
+done
+ ;;
+ default-1 )
+ 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
+ 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" "$ac_given_srcdir/$ac_dir/LINGUAS"`
+ # Hide the ALL_LINGUAS assigment from automake.
+ eval 'ALL_LINGUAS''=$ALL_LINGUAS_'
+ POMAKEFILEDEPS="$POMAKEFILEDEPS LINGUAS"
+ else
+ # The set of available languages was given in configure.in.
+ 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
+_ACEOF
+
+cat >>$CONFIG_STATUS <<\_ACEOF
+
+{ (exit 0); exit 0; }
+_ACEOF
+chmod +x $CONFIG_STATUS
+ac_clean_files=$ac_clean_files_save
+
+
+# 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
+
diff --git a/macros/texinfo/contrib/texinfo-hu/texinfo/configure.ac b/macros/texinfo/contrib/texinfo-hu/texinfo/configure.ac
new file mode 100644
index 0000000000..dd889d0057
--- /dev/null
+++ b/macros/texinfo/contrib/texinfo-hu/texinfo/configure.ac
@@ -0,0 +1,224 @@
+# Process this file with autoconf to produce a configure script.
+# $Id: configure.ac,v 1.50 2004/12/22 13:29:44 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_PREREQ(2.59)# Minimum Autoconf version required.
+#
+AC_INIT([GNU Texinfo], [4.8])
+AC_CONFIG_HEADERS(config.h:config.in)# Keep filename to 8.3 for MS-DOS.
+AC_CONFIG_SRCDIR([makeinfo/makeinfo.c])
+AM_INIT_AUTOMAKE([dist-bzip2])
+
+# 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
+AC_PROG_GCC_TRADITIONAL
+AC_PROG_INSTALL
+AC_PROG_MAKE_SET
+AC_PROG_RANLIB
+AM_MISSING_PROG(HELP2MAN, help2man)
+
+AC_ISC_POSIX
+AC_MINIX
+
+# 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_ALLOCA
+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 setvbuf sigaction sigprocmask \
+ sigsetmask strchr)
+AC_REPLACE_FUNCS(memcpy memmove strdup strerror)
+
+# strcasecmp and strncasecmp, gnulib-style.
+gl_STRCASE
+
+# 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.
+ 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_TRY_LINK(,
+[#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
+
+# gnulib.
+gl_FUNC_MKSTEMP
+
+# For teTeX and TeX Live.
+AC_CANONICAL_HOST
+AC_ARG_ENABLE(multiplatform,
+ [ --enable-multiplatform put executables in bin/PLATFORM])
+# if enable_multiplatform is set in the environment, use that.
+test "x$enable_multiplatform" = xyes \
+&& test "x$bindir" = 'x${exec_prefix}/bin' \
+&& bindir="$bindir/$host"
+
+# 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 --intl
+AM_GNU_GETTEXT_VERSION(0.14.1)
+AM_GNU_GETTEXT()
+
+AC_CONFIG_FILES([
+ Makefile
+ doc/Makefile
+ info/Makefile
+ intl/Makefile
+ lib/Makefile
+ m4/Makefile
+ makeinfo/Makefile
+ makeinfo/tests/Makefile
+ po/Makefile.in
+ util/Makefile
+])
+AC_OUTPUT
diff --git a/macros/texinfo/contrib/texinfo-hu/texinfo/depcomp b/macros/texinfo/contrib/texinfo-hu/texinfo/depcomp
new file mode 100644
index 0000000000..11e2d3bfe1
--- /dev/null
+++ b/macros/texinfo/contrib/texinfo-hu/texinfo/depcomp
@@ -0,0 +1,522 @@
+#! /bin/sh
+# depcomp - compile a program generating dependencies as side-effects
+
+scriptversion=2004-05-31.23
+
+# Copyright (C) 1999, 2000, 2003, 2004 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., 59 Temple Place - Suite 330, Boston, MA
+# 02111-1307, 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 0
+ ;;
+ -v | --v*)
+ echo "depcomp $scriptversion"
+ exit 0
+ ;;
+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"
+ ;;
+
+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
+ # Dependencies are output in .lo.d with libtool 1.4.
+ # With libtool 1.5 they are output both in $dir.libs/$base.o.d
+ # and in $dir.libs/$base.o.d and $dir$base.o.d. We process the
+ # latter, because the former will be cleaned when $dir.libs is
+ # erased.
+ tmpdepfile1="$dir.libs/$base.lo.d"
+ tmpdepfile2="$dir$base.o.d"
+ tmpdepfile3="$dir.libs/$base.d"
+ "$@" -Wc,-MD
+ else
+ tmpdepfile1="$dir$base.o.d"
+ tmpdepfile2="$dir$base.d"
+ tmpdepfile3="$dir$base.d"
+ "$@" -MD
+ fi
+
+ stat=$?
+ if test $stat -eq 0; then :
+ else
+ rm -f "$tmpdepfile1" "$tmpdepfile2" "$tmpdepfile3"
+ exit $stat
+ fi
+
+ if test -f "$tmpdepfile1"; then
+ tmpdepfile="$tmpdepfile1"
+ elif test -f "$tmpdepfile2"; then
+ tmpdepfile="$tmpdepfile2"
+ else
+ tmpdepfile="$tmpdepfile3"
+ fi
+ 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 '/^# [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/macros/texinfo/contrib/texinfo-hu/texinfo/djgpp/README b/macros/texinfo/contrib/texinfo-hu/texinfo/djgpp/README
new file mode 100644
index 0000000000..da0c2ec3ec
--- /dev/null
+++ b/macros/texinfo/contrib/texinfo-hu/texinfo/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/macros/texinfo/contrib/texinfo-hu/texinfo/djgpp/config.bat b/macros/texinfo/contrib/texinfo-hu/texinfo/djgpp/config.bat
new file mode 100644
index 0000000000..9bc97a1278
--- /dev/null
+++ b/macros/texinfo/contrib/texinfo-hu/texinfo/djgpp/config.bat
@@ -0,0 +1,240 @@
+@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% > arguments
+if "%CACHE%" == "enabled" echo --config-cache >>arguments
+if "%DEPTRAK%" == "enabled" echo --enable-dependency-tracking >>arguments
+if "%DEPTRAK%" == "disabled" echo --disable-dependency-tracking >>arguments
+if not "%ARGS%" == "" echo %ARGS% >>arguments
+set ARGS=
+set CACHE=
+set DEPTRAK=
+
+if "%XSRC%" == "." goto in_place
+
+:not_in_place
+redir -e /dev/null update %XSRC%/configure.orig ./configure
+test -f ./configure
+if errorlevel 1 update %XSRC%/configure ./configure
+
+:in_place
+Rem Update configuration files
+echo Updating configuration scripts...
+test -f ./configure.orig
+if errorlevel 1 update configure configure.orig
+sed -f %XSRC%/djgpp/config.sed configure.orig > 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/diffutil*.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 >> arguments
+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 >> arguments
+
+:configure_package
+echo Running the ./configure script...
+sh ./configure @arguments
+if errorlevel 1 goto cfg_error
+rm arguments
+
+Rem Remove files created by the gl_FUNC_MKSTEMP test.
+rm co*.tmp
+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/macros/texinfo/contrib/texinfo-hu/texinfo/djgpp/config.sed b/macros/texinfo/contrib/texinfo-hu/texinfo/djgpp/config.sed
new file mode 100644
index 0000000000..c4193df0fb
--- /dev/null
+++ b/macros/texinfo/contrib/texinfo-hu/texinfo/djgpp/config.sed
@@ -0,0 +1,67 @@
+# Additional editing of configure and Makefiles for DJGPP
+
+/(echo[ ]*':t/ a\
+# DJGPP specific Makefile changes.\
+ /^aliaspath * *=/s,:,";",g;t t\
+ /TEXINPUTS=/s,:,";",g;t t\
+ /PATH=/s,:,";",g;t t\
+ s,\\.deps,_deps,g;t t\
+ s,\\.new\\.,_new.,g;t t\
+ s,\\.old\\.,_old.,g;t t\
+ s,\\.tab\\.,_tab.,g;t t\
+ s,Makefile\\.in\\.in,Makefile.in-in,g;t t\
+ s,Makefile\\.am\\.in,Makefile.am-in,g;t t\
+ /^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,\
+ }
+
+# 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 instead of .deps, because the latter is an
+# invalid name on 8+3 MS-DOS filesystem. 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).
+s,\.deps,_deps,g
+
+# 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][a-z]\\{0,1\\}%${top_srcdir}%;s%.:.*/texinfo-\\{0,1\\}4\\.[0-9][a-z]\\{0,1\\}%${top_srcdir}%'`
+}
+/^install_sh=/a\
+install_sh=`echo "$install_sh" | sed 's%/dev.*/texinfo-\\{0,1\\}4\\.[0-9][a-z]\\{0,1\\}%${top_srcdir}%;s%.:.*/texinfo-\\{0,1\\}4\\.[0-9][a-z]\\{0,1\\}%${top_srcdir}%'`
+
+# 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 ||%
diff --git a/macros/texinfo/contrib/texinfo-hu/texinfo/djgpp/config.site b/macros/texinfo/contrib/texinfo-hu/texinfo/djgpp/config.site
new file mode 100644
index 0000000000..c7768b11f0
--- /dev/null
+++ b/macros/texinfo/contrib/texinfo-hu/texinfo/djgpp/config.site
@@ -0,0 +1,53 @@
+#! /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'}
+
+# 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/macros/texinfo/contrib/texinfo-hu/texinfo/doc/Makefile.am b/macros/texinfo/contrib/texinfo-hu/texinfo/doc/Makefile.am
new file mode 100644
index 0000000000..63df8183db
--- /dev/null
+++ b/macros/texinfo/contrib/texinfo-hu/texinfo/doc/Makefile.am
@@ -0,0 +1,80 @@
+# $Id: Makefile.am,v 1.20 2004/11/18 01:10:59 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 texi2dvi.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
+INSTALL_INFO = $(top_builddir)/$(native_tools)/util/install-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-no.tex txi-pl.tex txi-pt.tex txi-tr.tex
+
+# Include our texinfo.tex, not Automake's.
+EXTRA_DIST = epsf.tex pdfcolor.tex texinfo.tex \
+ fdl.texi \
+ $(man_MANS) $(TXI_XLATE)
+
+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 and (if you"
+ @echo " use pdftex) pdfcolor.tex in TEXMF/tex/generic/dvips"
+ @echo " and TEXMF/pdftex/plain/misc/pdfcolor.tex respectively,"
+ @echo " if your TeX installation did not include them."
+endif
+
+texmf_texinfo = $(TEXMF)/tex/texinfo
+texmf_dvips = $(TEXMF)/tex/generic/dvips
+texmf_pdftex_misc = $(TEXMF)/pdftex/plain/misc
+install-tex:
+ test -n "$(TEXMF)" || (echo "TEXMF must be set." >&2; exit 1)
+ $(mkinstalldirs) $(DESTDIR)$(texmf_texinfo) $(DESTDIR)$(texmf_dvips) $(DESTDIR)$(texmf_pdftex_misc)
+ $(INSTALL_DATA) $(srcdir)/texinfo.tex $(DESTDIR)$(texmf_texinfo)/texinfo.tex
+ $(INSTALL_DATA) $(srcdir)/epsf.tex $(DESTDIR)$(texmf_dvips)/epsf.tex
+ $(INSTALL_DATA) $(srcdir)/pdfcolor.tex $(DESTDIR)$(texmf_pdftex_misc)/pdfcolor.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.
+if MAINTAINER_MODE
+common_mandeps = $(top_srcdir)/configure.ac
+info.1: $(top_srcdir)/info/info.c $(common_mandeps)
+ $(HELP2MAN) --name="read Info documents" `basename $@ .1` >$@
+infokey.1: $(top_srcdir)/info/infokey.c $(common_mandeps)
+ $(HELP2MAN) --name="compile customizations for Info" `basename $@ .1` >$@
+install-info.1: $(top_srcdir)/util/install-info.c $(common_mandeps)
+ $(HELP2MAN) --name="update info/dir entries" `basename $@ .1` >$@
+makeinfo.1: $(top_srcdir)/makeinfo/makeinfo.c $(common_mandeps)
+ $(HELP2MAN) --name="translate Texinfo documents" `basename $@ .1` >$@
+texi2dvi.1: $(top_srcdir)/util/texi2dvi $(common_mandeps)
+ $(HELP2MAN) --name="print Texinfo documents" `basename $@ .1` >$@
+texindex.1: $(top_srcdir)/util/texindex.c $(common_mandeps)
+ $(HELP2MAN) --name="sort Texinfo index files" `basename $@ .1` >$@
+endif
+
+# Do not create info files for distribution.
+dist-info:
diff --git a/macros/texinfo/contrib/texinfo-hu/texinfo/doc/Makefile.in b/macros/texinfo/contrib/texinfo-hu/texinfo/doc/Makefile.in
new file mode 100644
index 0000000000..237b8b2442
--- /dev/null
+++ b/macros/texinfo/contrib/texinfo-hu/texinfo/doc/Makefile.in
@@ -0,0 +1,772 @@
+# Makefile.in generated by automake 1.9.4 from Makefile.am.
+# @configure_input@
+
+# Copyright (C) 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002,
+# 2003, 2004 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.20 2004/11/18 01:10:59 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.
+srcdir = @srcdir@
+top_srcdir = @top_srcdir@
+VPATH = @srcdir@
+pkgdatadir = $(datadir)/@PACKAGE@
+pkglibdir = $(libdir)/@PACKAGE@
+pkgincludedir = $(includedir)/@PACKAGE@
+top_builddir = ..
+am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd
+INSTALL = @INSTALL@
+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 mdate-sh \
+ texinfo.tex
+ACLOCAL_M4 = $(top_srcdir)/aclocal.m4
+am__aclocal_m4_deps = $(top_srcdir)/m4/codeset.m4 \
+ $(top_srcdir)/m4/gettext.m4 $(top_srcdir)/m4/glibc21.m4 \
+ $(top_srcdir)/m4/iconv.m4 $(top_srcdir)/m4/intdiv0.m4 \
+ $(top_srcdir)/m4/intmax.m4 $(top_srcdir)/m4/inttypes-pri.m4 \
+ $(top_srcdir)/m4/inttypes.m4 $(top_srcdir)/m4/inttypes_h.m4 \
+ $(top_srcdir)/m4/lcmessage.m4 $(top_srcdir)/m4/lib-ld.m4 \
+ $(top_srcdir)/m4/lib-link.m4 $(top_srcdir)/m4/lib-prefix.m4 \
+ $(top_srcdir)/m4/longdouble.m4 $(top_srcdir)/m4/longlong.m4 \
+ $(top_srcdir)/m4/mkstemp.m4 $(top_srcdir)/m4/nls.m4 \
+ $(top_srcdir)/m4/onceonly_2_57.m4 $(top_srcdir)/m4/po.m4 \
+ $(top_srcdir)/m4/printf-posix.m4 $(top_srcdir)/m4/progtest.m4 \
+ $(top_srcdir)/m4/signed.m4 $(top_srcdir)/m4/size_max.m4 \
+ $(top_srcdir)/m4/stdint_h.m4 $(top_srcdir)/m4/strcase.m4 \
+ $(top_srcdir)/m4/uintmax_t.m4 $(top_srcdir)/m4/ulonglong.m4 \
+ $(top_srcdir)/m4/wchar_t.m4 $(top_srcdir)/m4/wint_t.m4 \
+ $(top_srcdir)/m4/xsize.m4 $(top_srcdir)/configure.ac
+am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \
+ $(ACLOCAL_M4)
+mkinstalldirs = $(SHELL) $(top_srcdir)/mkinstalldirs
+CONFIG_HEADER = $(top_builddir)/config.h
+CONFIG_CLEAN_FILES =
+SOURCES =
+DIST_SOURCES =
+INFO_DEPS = texinfo info-stnd.info info.info
+am__TEXINFO_TEX_DIR = $(srcdir)
+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)"
+man1dir = $(mandir)/man1
+man5dir = $(mandir)/man5
+NROFF = nroff
+MANS = $(man_MANS)
+DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST)
+ACLOCAL = @ACLOCAL@
+ALLOCA = @ALLOCA@
+AMDEP_FALSE = @AMDEP_FALSE@
+AMDEP_TRUE = @AMDEP_TRUE@
+AMTAR = @AMTAR@
+AUTOCONF = @AUTOCONF@
+AUTOHEADER = @AUTOHEADER@
+AUTOMAKE = @AUTOMAKE@
+AWK = @AWK@
+BUILD_INCLUDED_LIBINTL = @BUILD_INCLUDED_LIBINTL@
+CATOBJEXT = @CATOBJEXT@
+CC = @CC@
+CCDEPMODE = @CCDEPMODE@
+CFLAGS = @CFLAGS@
+CPP = @CPP@
+CPPFLAGS = @CPPFLAGS@
+CYGPATH_W = @CYGPATH_W@
+DATADIRNAME = @DATADIRNAME@
+DEFS = @DEFS@
+DEPDIR = @DEPDIR@
+ECHO_C = @ECHO_C@
+ECHO_N = @ECHO_N@
+ECHO_T = @ECHO_T@
+EGREP = @EGREP@
+EXEEXT = @EXEEXT@
+GENCAT = @GENCAT@
+GLIBC21 = @GLIBC21@
+GMSGFMT = @GMSGFMT@
+HAVE_ASPRINTF = @HAVE_ASPRINTF@
+HAVE_POSIX_PRINTF = @HAVE_POSIX_PRINTF@
+HAVE_SNPRINTF = @HAVE_SNPRINTF@
+HAVE_WPRINTF = @HAVE_WPRINTF@
+HELP2MAN = @HELP2MAN@
+INSTALL_DATA = @INSTALL_DATA@
+INSTALL_PROGRAM = @INSTALL_PROGRAM@
+INSTALL_SCRIPT = @INSTALL_SCRIPT@
+INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@
+INSTALL_WARNINGS_FALSE = @INSTALL_WARNINGS_FALSE@
+INSTALL_WARNINGS_TRUE = @INSTALL_WARNINGS_TRUE@
+INSTOBJEXT = @INSTOBJEXT@
+INTLBISON = @INTLBISON@
+INTLLIBS = @INTLLIBS@
+INTLOBJS = @INTLOBJS@
+INTL_LIBTOOL_SUFFIX_PREFIX = @INTL_LIBTOOL_SUFFIX_PREFIX@
+LDFLAGS = @LDFLAGS@
+LIBICONV = @LIBICONV@
+LIBINTL = @LIBINTL@
+LIBOBJS = @LIBOBJS@
+LIBS = @LIBS@
+LTLIBICONV = @LTLIBICONV@
+LTLIBINTL = @LTLIBINTL@
+LTLIBOBJS = @LTLIBOBJS@
+MAINT = @MAINT@
+MAINTAINER_MODE_FALSE = @MAINTAINER_MODE_FALSE@
+MAINTAINER_MODE_TRUE = @MAINTAINER_MODE_TRUE@
+
+# Use the programs built in our distribution, taking account of possible
+# cross-compiling.
+MAKEINFO = $(top_builddir)/$(native_tools)/makeinfo/makeinfo
+MKINSTALLDIRS = @MKINSTALLDIRS@
+MSGFMT = @MSGFMT@
+MSGMERGE = @MSGMERGE@
+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@
+RANLIB = @RANLIB@
+SET_MAKE = @SET_MAKE@
+SHELL = @SHELL@
+STRIP = @STRIP@
+TERMLIBS = @TERMLIBS@
+TOOLS_ONLY_FALSE = @TOOLS_ONLY_FALSE@
+TOOLS_ONLY_TRUE = @TOOLS_ONLY_TRUE@
+USE_INCLUDED_LIBINTL = @USE_INCLUDED_LIBINTL@
+USE_NLS = @USE_NLS@
+VERSION = @VERSION@
+XGETTEXT = @XGETTEXT@
+ac_ct_CC = @ac_ct_CC@
+ac_ct_RANLIB = @ac_ct_RANLIB@
+ac_ct_STRIP = @ac_ct_STRIP@
+am__fastdepCC_FALSE = @am__fastdepCC_FALSE@
+am__fastdepCC_TRUE = @am__fastdepCC_TRUE@
+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@
+datadir = @datadir@
+exec_prefix = @exec_prefix@
+host = @host@
+host_alias = @host_alias@
+host_cpu = @host_cpu@
+host_os = @host_os@
+host_vendor = @host_vendor@
+includedir = @includedir@
+infodir = @infodir@
+install_sh = @install_sh@
+libdir = @libdir@
+libexecdir = @libexecdir@
+localstatedir = @localstatedir@
+mandir = @mandir@
+mkdir_p = @mkdir_p@
+native_tools = @native_tools@
+oldincludedir = @oldincludedir@
+prefix = @prefix@
+program_transform_name = @program_transform_name@
+sbindir = @sbindir@
+sharedstatedir = @sharedstatedir@
+sysconfdir = @sysconfdir@
+target_alias = @target_alias@
+
+# 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 texi2dvi.1 \
+ info.5 texinfo.5
+
+INSTALL_INFO = $(top_builddir)/$(native_tools)/util/install-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-no.tex txi-pl.tex txi-pt.tex txi-tr.tex
+
+
+# Include our texinfo.tex, not Automake's.
+EXTRA_DIST = epsf.tex pdfcolor.tex texinfo.tex \
+ fdl.texi \
+ $(man_MANS) $(TXI_XLATE)
+
+texmf_texinfo = $(TEXMF)/tex/texinfo
+texmf_dvips = $(TEXMF)/tex/generic/dvips
+texmf_pdftex_misc = $(TEXMF)/pdftex/plain/misc
+
+# The man pages depend on the --help strings and the version number.
+@MAINTAINER_MODE_TRUE@common_mandeps = $(top_srcdir)/configure.ac
+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 && \
+ 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; \
+ 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) $(srcdir)/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 && \
+ 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; \
+ 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) $(srcdir)/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 && \
+ 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; \
+ 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:
+ $(DVIPS) -o $@ $<
+
+uninstall-info-am:
+ $(PRE_UNINSTALL)
+ @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)' --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 cd "$(DESTDIR)$(infodir)"; then \
+ echo " 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
+
+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)'; for file in $$list; do \
+ case $$file in \
+ $(srcdir)/*) file=`echo "$$file" | sed "s|^$$srcdirstrip/||"`;; \
+ $(top_srcdir)/*) file=`echo "$$file" | sed "s|^$$topsrcdirstrip/|$(top_builddir)/|"`;; \
+ esac; \
+ if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \
+ dir=`echo "$$file" | sed -e 's,/[^/]*$$,,'`; \
+ if test "$$dir" != "$$file" && test "$$dir" != "."; then \
+ dir="/$$dir"; \
+ $(mkdir_p) "$(distdir)$$dir"; \
+ else \
+ dir=''; \
+ fi; \
+ if test -d $$d/$$file; then \
+ 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-exec-am:
+
+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
+
+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-info-am uninstall-man
+
+uninstall-man: uninstall-man1 uninstall-man5
+
+.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-exec install-exec-am install-info \
+ install-info-am install-man install-man1 install-man5 \
+ 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-info-am uninstall-man uninstall-man1 uninstall-man5
+
+
+@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 and (if you"
+@INSTALL_WARNINGS_TRUE@ @echo " use pdftex) pdfcolor.tex in TEXMF/tex/generic/dvips"
+@INSTALL_WARNINGS_TRUE@ @echo " and TEXMF/pdftex/plain/misc/pdfcolor.tex respectively,"
+@INSTALL_WARNINGS_TRUE@ @echo " if your TeX installation did not include them."
+install-tex:
+ test -n "$(TEXMF)" || (echo "TEXMF must be set." >&2; exit 1)
+ $(mkinstalldirs) $(DESTDIR)$(texmf_texinfo) $(DESTDIR)$(texmf_dvips) $(DESTDIR)$(texmf_pdftex_misc)
+ $(INSTALL_DATA) $(srcdir)/texinfo.tex $(DESTDIR)$(texmf_texinfo)/texinfo.tex
+ $(INSTALL_DATA) $(srcdir)/epsf.tex $(DESTDIR)$(texmf_dvips)/epsf.tex
+ $(INSTALL_DATA) $(srcdir)/pdfcolor.tex $(DESTDIR)$(texmf_pdftex_misc)/pdfcolor.tex
+ for f in $(TXI_XLATE); do \
+ $(INSTALL_DATA) $(srcdir)/$$f $(DESTDIR)$(texmf_texinfo)/$$f; done
+@MAINTAINER_MODE_TRUE@info.1: $(top_srcdir)/info/info.c $(common_mandeps)
+@MAINTAINER_MODE_TRUE@ $(HELP2MAN) --name="read Info documents" `basename $@ .1` >$@
+@MAINTAINER_MODE_TRUE@infokey.1: $(top_srcdir)/info/infokey.c $(common_mandeps)
+@MAINTAINER_MODE_TRUE@ $(HELP2MAN) --name="compile customizations for Info" `basename $@ .1` >$@
+@MAINTAINER_MODE_TRUE@install-info.1: $(top_srcdir)/util/install-info.c $(common_mandeps)
+@MAINTAINER_MODE_TRUE@ $(HELP2MAN) --name="update info/dir entries" `basename $@ .1` >$@
+@MAINTAINER_MODE_TRUE@makeinfo.1: $(top_srcdir)/makeinfo/makeinfo.c $(common_mandeps)
+@MAINTAINER_MODE_TRUE@ $(HELP2MAN) --name="translate Texinfo documents" `basename $@ .1` >$@
+@MAINTAINER_MODE_TRUE@texi2dvi.1: $(top_srcdir)/util/texi2dvi $(common_mandeps)
+@MAINTAINER_MODE_TRUE@ $(HELP2MAN) --name="print Texinfo documents" `basename $@ .1` >$@
+@MAINTAINER_MODE_TRUE@texindex.1: $(top_srcdir)/util/texindex.c $(common_mandeps)
+@MAINTAINER_MODE_TRUE@ $(HELP2MAN) --name="sort Texinfo index files" `basename $@ .1` >$@
+
+# 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/macros/texinfo/contrib/texinfo-hu/texinfo/doc/README b/macros/texinfo/contrib/texinfo-hu/texinfo/doc/README
new file mode 100644
index 0000000000..63f1ba2921
--- /dev/null
+++ b/macros/texinfo/contrib/texinfo-hu/texinfo/doc/README
@@ -0,0 +1,44 @@
+$Id: README,v 1.4 2004/04/11 17:56:45 karl 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, TEXMF/tex/generic/dvips/ for epsf.tex,
+and TEXMF/pdftex/plain/misc for pdfcolor.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/macros/texinfo/contrib/texinfo-hu/texinfo/doc/epsf.tex b/macros/texinfo/contrib/texinfo-hu/texinfo/doc/epsf.tex
new file mode 100644
index 0000000000..db2cd2031b
--- /dev/null
+++ b/macros/texinfo/contrib/texinfo-hu/texinfo/doc/epsf.tex
@@ -0,0 +1,547 @@
+%%% ====================================================================
+%%% This file is freely redistributable and placed into the
+%%% public domain by Tomas Rokicki.
+%%% @TeX-file{
+%%% author = "Tom Rokicki",
+%%% version = "2.7k",
+%%% date = "19 July 1997",
+%%% time = "10:00:05 MDT",
+%%% filename = "epsf.tex",
+%%% address = "Tom Rokicki
+%%% Box 2081
+%%% Stanford, CA 94309
+%%% USA",
+%%% telephone = "+1 415 855 9989",
+%%% email = "rokicki@cs.stanford.edu (Internet)",
+%%% codetable = "ISO/ASCII",
+%%% 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 say
+%%%
+%%% \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
+%%% saying
+%%%
+%%% \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), say
+%%% `\epsfverbosetrue'.
+%%%
+%%% If you only want to get the bounding box
+%%% extents, without producing any output boxes
+%%% or \special{}, then say
+%%% \epsfgetbb{filename}. The extents will be
+%%% saved in the macros \epsfllx \epsflly
+%%% \epsfurx \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.
+%%% ---------------------------------------------
+%%%
+%%% Modified to avoid verbosity, give help.
+%%% --kb@cs.umb.edu, for Texinfo.
+%%% }
+%%% ====================================================================
+%
+\ifx\epsfannounce\undefined \def\epsfannounce{\immediate\write16}\fi
+ \epsfannounce{This is `epsf.tex' v2.7k <10 July 1997>}%
+%
+\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}%
+}%
+%
+\newhelp\epsfnoopenhelp{The PostScript image file must be findable by
+TeX, i.e., somewhere in the TEXINPUTS (or equivalent) path.}%
+%
+\def\epsfgetbb#1{%
+%
+% The first thing we need to do is to open the
+% PostScript file, if possible.
+%
+ \openin\epsffilein=#1
+ \ifeof\epsffilein
+ \errhelp = \epsfnoopenhelp
+ \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}%
+}%
+%
+% 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\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\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\space
+ 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%
+{%
+ \leavevmode % so we can put this inside
+ % a centered environment
+ \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
+ \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
+}%
+%
+\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.
+ %
+ \leavevmode
+ \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
+ }%
+ }}%
+ %
+ % 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\epsfrsize
+ \epsfxsize=\epsfysize \multiply\epsfxsize\epsftmp
+ \multiply\epsftmp\epsfrsize \advance\epsftsize-\epsftmp
+ \epsftmp=\epsfysize
+ \loop \advance\epsftsize\epsftsize \divide\epsftmp 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\epsftsize
+ \epsfysize=\epsfxsize \multiply\epsfysize\epsftmp
+ \multiply\epsftmp\epsftsize \advance\epsfrsize-\epsftmp
+ \epsftmp=\epsfxsize
+ \loop \advance\epsfrsize\epsfrsize \divide\epsftmp 2
+ \ifnum \epsftmp>0
+ \ifnum \epsfrsize<\epsftsize
+ \else
+ \advance\epsfrsize-\epsftsize \advance\epsfysize\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/macros/texinfo/contrib/texinfo-hu/texinfo/doc/fdl.texi b/macros/texinfo/contrib/texinfo-hu/texinfo/doc/fdl.texi
new file mode 100644
index 0000000000..11737cc89b
--- /dev/null
+++ b/macros/texinfo/contrib/texinfo-hu/texinfo/doc/fdl.texi
@@ -0,0 +1,452 @@
+
+@node GNU Free Documentation License
+@appendixsec GNU Free Documentation License
+
+@cindex FDL, GNU Free Documentation License
+@center Version 1.2, November 2002
+
+@display
+Copyright @copyright{} 2000,2001,2002 Free Software Foundation, Inc.
+59 Temple Place, Suite 330, Boston, MA 02111-1307, 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
+@appendixsubsec 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...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/macros/texinfo/contrib/texinfo-hu/texinfo/doc/huhyp.tex b/macros/texinfo/contrib/texinfo-hu/texinfo/doc/huhyp.tex
new file mode 100644
index 0000000000..31b64b6ed3
--- /dev/null
+++ b/macros/texinfo/contrib/texinfo-hu/texinfo/doc/huhyp.tex
@@ -0,0 +1,67 @@
+%%% 00-11-28 20:01:29 cp437-cwi
+%%% hyphenation file for Hungarian language
+%%%
+%%% $Id: huhyp.tex, v 1.01. 2007/06/10 19:07:59 vozarik Exp $
+%%%% mailto: Lajos Vozaarik, techn@toolstyle.hu
+%%%
+%%% Elv laszt si kiv‚telsz¢t r;
+%%% azon szavak, amit a TeX nem j¢l v laszt el, vagy nyelvtani okokb¢l
+%%% t”bb helyen lehet elt”rni a szavakat, mint az nyomtat sban eszt‚tikus
+%%% lenne.
+%%% Igy p‚ld ul _nyelvtanilag_ ez korrekt:
+%%% e-lek-tro-ni-kus e-set-le-ges
+%%% de _tipogr fiailag_ csak ez lehet:
+%%% elek-tro-ni-kus eset-le-ges
+%%% ^ ^
+%%% |
+%%% breaking not allowed end of line
+%%%
+%%% Soha ne hagyjunk 1 karaktert a sor v‚g‚n, m‚g akkor sem, ha az
+%%% nyelvtanilag helyes lenne.
+%%%
+\message{Last updated: 11-06-07}
+\hyphenation{a-da-to-kat
+ak-kor ala-cso-nyabb al-kal-maz-hat-juk al-kal-maz-ni al-kal-ma-zott
+bal-eset
+be-kap-csol be-kap-csol-ja be-mu-tat-ja be-nyo-mott
+bi-lin-csel-ve
+csa-va-rok csa-va-roz-va csi-szo-la-ti csi-szo-la-tok
+elek-tro-ni-kus
+el-he-lyez-ve el-mon-dot-tak egy-sze-res eset-ben
+eset-le-ges eset-le-ge-sen
+ez-alatt
+fel-a-da-to-kat fel-ada-tok-kal
+fel-csa-va-roz-zuk fel-sze-rel-ve
+fo-lya-mat fo-lya-ma-tot
+gon-dol-juk
+hagy-ni hasz-no-sab-bak
+he-lye-ket hen-ger-ben hid-ra-u-li-kus
+in-ter-pre-ter
+kap-cso-lat-ban kap-csol-ja
+kelet-ke-zett
+ke-reszt-met-szete ki-fej-lesz-tett
+las-sab-ban leg-ma-ga-sabb leg-mo-der-nebb leg-na-gyobb le-kap-csol-ja
+le-kap-csolt
+lel-ki-is-me-re-tes le-nyom-va
+lo-gi-kai
+mak-rosz-ko-pi-kus meg-is-mer-ni meg-ve-zetve mik-rosz-ko-pi-kus
+mun-ka-da-rab mun-ka-terv
+na-gyobb ne-he-zebb Ne-he-zebb
+nyit-ja
+nyom-juk
+ott-ho-ni
+pa-pu-csok pa-ran-cso-kat
+plasz-ti-kus
+prog-ra-mok
+rend-sze-rek
+so-ha-sem
+sza-bad sza-ba-don sza-ka-szok-ban szak-em-ber
+szeg-nye-reg sze-rel-ve sze-re-pe
+sze-rint
+szer-ke-ze-tek szer-ke-ze-ti
+szi-ge-te-let-len szint-je szisz-te-ma-ti-kus
+szta-ti-kus
+ten-gelyt
+ugyan-azt u-gyan-o-lyan
+ven-ni ve-zet-ve vi-szont
+vo-nal-ra}
diff --git a/macros/texinfo/contrib/texinfo-hu/texinfo/doc/info-stnd.texi b/macros/texinfo/contrib/texinfo-hu/texinfo/doc/info-stnd.texi
new file mode 100644
index 0000000000..1a1df6fb6d
--- /dev/null
+++ b/macros/texinfo/contrib/texinfo-hu/texinfo/doc/info-stnd.texi
@@ -0,0 +1,2203 @@
+\input texinfo.tex @c -*-texinfo-*-
+@comment $Id: info-stnd.texi,v 1.9 2004/12/14 16:58:15 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 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.1 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 freedom to copy and modify
+this GNU Manual, like GNU software. Copies published by the Free
+Software Foundation raise funds for GNU development.''
+@end quotation
+@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 (bfox@@gnu.org)
+@page
+@vskip 0pt plus 1filll
+@insertcopying
+@end titlepage
+
+@contents
+
+@ifnottex
+@node Top
+@top GNU Info
+
+@insertcopying
+
+This documentation is different from the documentation for the Info
+reader that is part of GNU Emacs. If you do not know how to use Info,
+but have a working Info reader, you should read the Emacs documentation
+first, as it includes more background information and a thorough tutorial.
+@end ifnottex
+
+@menu
+* What is 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.
+* Copying This Manual:: The GNU Free Documentation License.
+* Index:: Global index containing keystrokes,
+ command names, variable names,
+ and general concepts.
+@end menu
+
+
+@node What is Info
+@chapter What is Info?
+
+@dfn{Info} is a program which is used to view Info files on an ASCII
+terminal. @dfn{Info files} are the result of processing Texinfo files
+with the program @code{makeinfo} or with one of the Emacs commands, such
+as @code{M-x texinfo-format-buffer}. 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.
+
+
+@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}
+@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. Note that 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.
+
+@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.
+
+@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 standalone 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 @key{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 @key{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 @key{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 @key{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 @key{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 @key{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 @key{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 @key{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 @key{M-<} (@code{beginning-of-node})
+@itemx @key{C-@key{Home}} (on DOS/Windows only)
+@itemx @key{b}
+@itemx @key{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 @key{M->} (@code{end-of-node})
+@itemx @key{C-@key{End}} (on DOS/Windows only)
+@itemx @key{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 @key{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''.
+
+@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 @key{C-v}
+@itemx @key{C-f}, vi-like operation
+@itemx @key{f}, vi-like operation
+@itemx @key{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 @key{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 @key{M-v}
+@itemx @key{b}, vi-like operation
+@itemx @key{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 @key{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 @key{C-n} (@code{down-line}, vi-like operation)
+@itemx @key{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 @key{C-p} (@code{up-line}, vi-like operation)
+@itemx @key{UP}, vi-like operation
+@itemx @key{y}, vi-like operation
+@itemx @key{k}, vi-like operation
+@itemx @key{C-k}, vi-like operation
+@itemx @key{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 @key{d} (@code{scroll-half-screen-down}, vi-like operation)
+@itemx @key{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 @key{u} (@code{scroll-half-screen-up}, vi-like operation)
+@itemx @key{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}. @xref{Variables,
+@code{scroll-behavior}}, for more information.
+
+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 @key{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 @key{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 @key{n} (@code{next-node})
+@itemx @kbd{C-@key{NEXT}} (on DOS/Windows only)
+@itemx @kbd{C-x @key{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 @key{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 @key{u} (@code{up-node})
+@itemx @kbd{C-@key{UP}} (an arrow key on DOS/Windows only)
+@itemx @kbd{C-x @key{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 @key{l} (@code{history-node})
+@itemx @key{C-@key{CENTER}} (on DOS/Windows only)
+@itemx @key{'}, 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 @key{t} (@code{top-node})
+@itemx @key{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 @key{d} (@code{dir-node})
+@itemx @key{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 @key{<} (@code{first-node})
+@itemx @key{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 @key{>} (@code{last-node})
+@itemx @key{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 @key{]} (@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 @key{[} (@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}; @xref{Variables, @code{scroll-behavior}}, for
+more information.
+
+@table @asis
+@anchor{goto-node}
+@item @key{g} (@code{goto-node})
+@itemx @kbd{C-x @key{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 @key{O} (@code{goto-invocation}
+@itemx @key{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 @key{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 @key{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 @key{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 @key{s} (@code{search})
+@itemx @key{/}
+@kindex s
+@kindex /
+@findex search
+Read a string in the echo area and search for it. 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 @key{?} (@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 @key{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 @key{n}} (@code{search-next})
+@itemx @key{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 @key{N}} (@code{search-previous})
+@itemx @key{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 @key{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 @key{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 @key{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 @key{,} (@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 @key{1} (@code{menu-digit})
+@itemx @key{2} @dots{} @key{9}
+@itemx @key{M-1}, vi-like operation
+@itemx @key{M-2} @dots{} @key{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 @key{M-0}.
+
+@item @key{0} (@code{last-menu-item})
+@itemx @key{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 @key{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 @key{f} (@code{xref-item})
+@itemx @key{r}
+@item @key{M-f}, vi-like operation
+@itemx @kbd{C-x @key{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 @key{M-TAB} (@code{move-to-prev-xref})
+@itemx @key{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 @key{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 @key{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 @key{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 @key{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 @key{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 @key{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 @key{^}} (@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 @key{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 @key{C-f} (@code{echo-area-forward})
+@itemx @key{RIGHT} (an arrow key)
+@itemx @key{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 @key{C-b} (@code{echo-area-backward})
+@itemx @key{LEFT} (an arrow key)
+@itemx @key{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 @key{C-a} (@code{echo-area-beg-of-line})
+@itemx @key{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 @key{C-e} (@code{echo-area-end-of-line})
+@itemx @key{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 @key{M-f} (@code{echo-area-forward-word})
+@itemx @key{C-@key{RIGHT}} (DOS/Windows only)
+@itemx @key{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 @key{M-b} (@code{echo-area-backward-word})
+@itemx @key{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 @key{C-d} (@code{echo-area-delete})
+@itemx @key{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 @key{C-g} (@code{echo-area-abort})
+@itemx @key{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 @key{C-q} (@code{echo-area-quoted-insert})
+@itemx @key{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 @key{M-TAB} (@code{echo-area-tab-insert})
+@itemx @key{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 @key{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 @key{M-d} (@code{echo-area-kill-word})
+@itemx @key{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 @key{M-DEL} (@code{echo-area-backward-kill-word})
+@itemx @key{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 @code{Backspace} key is used instead of
+@code{DEL}, so @code{M-@key{Backspace}} has the same effect as
+@code{M-@key{DEL}}.
+
+@item @key{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 @key{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 @key{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 @key{?} (@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 @key{C-h} (@code{get-help-window})
+@itemx @key{?}
+@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 @key{h} (@code{get-info-help-node})
+@itemx @key{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 @key{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 @key{M-1} (@code{add-digit-to-numeric-arg})
+@itemx @key{1}, vi-like operation
+@itemx @key{M-2} @dots{} @key{M-9}
+@itemx @key{2} @dots{} @key{9}, vi-like operation
+@itemx @key{M-0}
+@itemx @key{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 @key{M--} (@code{add-digit-to-numeric-arg}
+@itemx @key{-}
+@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 @key{C-g} (@code{abort-key})
+@itemx @key{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 @key{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 @key{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.
+
+@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.
+
+@item scroll-behavior
+@vindex scroll-behavior
+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 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
+
+@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)
+
+For those whose editor/pager of choice is not Emacs and who are not
+entirely satisfied with the --vi-keys option (@pxref{--vi-keys}), GNU
+Info provides a way to define different key-to-command bindings and
+variable settings from the defaults described in this document.
+
+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 Copying This Manual
+@appendix Copying This Manual
+
+@menu
+* GNU Free Documentation License:: License for copying this manual.
+@end menu
+
+@include fdl.texi
+
+
+@node Index
+@appendix Index
+
+@printindex cp
+
+@bye
diff --git a/macros/texinfo/contrib/texinfo-hu/texinfo/doc/info.1 b/macros/texinfo/contrib/texinfo-hu/texinfo/doc/info.1
new file mode 100644
index 0000000000..39ca1d32ac
--- /dev/null
+++ b/macros/texinfo/contrib/texinfo-hu/texinfo/doc/info.1
@@ -0,0 +1,89 @@
+.\" DO NOT MODIFY THIS FILE! It was generated by help2man 1.34.
+.TH INFO "1" "December 2004" "info 4.8" "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\-\-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\-w\fR, \fB\-\-where\fR, \fB\-\-location\fR
+print physical location of Info file.
+.TP
+\fB\-\-vi\-keys\fR
+use vi\-like and less\-like key bindings.
+.TP
+\fB\-\-version\fR
+display version information and exit.
+.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.
+.SH EXAMPLES
+.TP
+info
+show top\-level dir menu
+.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\-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 2004 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.
diff --git a/macros/texinfo/contrib/texinfo-hu/texinfo/doc/info.5 b/macros/texinfo/contrib/texinfo-hu/texinfo/doc/info.5
new file mode 100644
index 0000000000..af9ba2ed42
--- /dev/null
+++ b/macros/texinfo/contrib/texinfo-hu/texinfo/doc/info.5
@@ -0,0 +1,62 @@
+.\" info(5)
+.\" $Id: info.5,v 1.2 2004/04/11 17:56:45 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.
+.\"
+.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:
+.RS
+.I info texinfo
+.RE
+or this key sequence from inside Emacs:
+.RS
+.I M-x info RET m texinfo RET
+.RE
+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/macros/texinfo/contrib/texinfo-hu/texinfo/doc/info.texi b/macros/texinfo/contrib/texinfo-hu/texinfo/doc/info.texi
new file mode 100644
index 0000000000..014e916508
--- /dev/null
+++ b/macros/texinfo/contrib/texinfo-hu/texinfo/doc/info.texi
@@ -0,0 +1,1498 @@
+\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 (C) 1989, 1992, 1996, 1997, 1998, 1999, 2000, 2001, 2002, 2003, 2004
+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.1 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. Copies published by the Free
+Software Foundation raise funds for GNU development.''
+
+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, 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 expert-level Info commands, type @kbd{n} twice. This
+brings you to @cite{Info for Experts}, skipping over the `Getting
+Started' chapter.
+@end ifinfo
+@end ifnottex
+
+@menu
+* Getting Started:: Getting started using an Info reader.
+* Expert Info:: Info commands for experts.
+* Creating an Info File:: How to make your own Info file.
+* Index:: An index of topics, commands, and variables.
+@end menu
+
+@node Getting Started, Expert Info, 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, and how to write an Info as distinct from a Texinfo
+file. The third part briefly explains how to generate Info files from
+Texinfo files.
+
+@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 you see the text @samp{--All----} near the bottom right corner
+of the screen, it means the entire text you are looking at fits on the
+screen. If you see @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 duplicated in a special typeface,
+and the duplicate 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 middle
+ 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 the middle mouse button 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{Prev} (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 string @samp{--Top-----} rather than @samp{--All----} near
+the bottom right corner 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
+
+ If your screen is very tall, all of this node might fit at once. In
+that case, @kbd{b} won't do anything. But you could observe the
+effect of the @kbd{b} key if you use a smaller window.
+
+@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
+a @kbd{?} (in Emacs it runs the @code{Info-summary} command) which
+displays a brief list of commands. When you are finished looking at
+the list, make it go away by typing a @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}. In Emacs, @kbd{m} runs the command @code{Info-menu}.
+
+@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, 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}.)
+
+ 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'' (the Emacs command run by @kbd{u} is
+@code{Info-up}). That puts you at the @emph{front} of the node---to
+get back to where you were reading you have to type some @key{SPC}s.
+(Some Info readers, such as the one built into Emacs, put you at the
+same place where you were reading in @samp{Help-M}.)
+
+ 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
+ There are two ways to follow a cross reference. You can move the
+cursor to it and press @key{RET}, just as in a menu. @key{RET}
+follows the cross reference that the cursor is on. Or you can type
+@kbd{f} and then specify the name of the cross reference (in this
+case, @samp{Cross}) as an argument. In Emacs Info, @kbd{f} runs
+@code{Info-follow-reference},
+
+ In the @kbd{f} command, you select the cross reference with its
+name, so 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} and @kbd{M-@key{TAB}} key, 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 (shown in the stand-alone version) refers to the
+file name. This file name appears in cross references and node names
+if it differs from the current file. In Emacs, the file name is
+hidden (along with other text). (Use @kbd{M-x visible-mode} to show
+or hide it.)
+
+ The remainder of this node applies only to the Emacs version. If
+you use the stand-alone version, you can type @kbd{n} immediately.
+
+ To some users, switching manuals is a much bigger switch than
+switching sections. These users like to know that they are going to
+be switching to another manual (and which one) before actually doing
+so, especially given that, if one does not notice, Info commands like
+@kbd{t} (see the next node) can have confusing results.
+
+ If you put your mouse over the cross reference and if the cross
+reference leads to a different manual, then the information appearing
+in a separate box (tool tip) or in the echo area, will mention the
+file the cross reference will carry you to (between parentheses).
+This is also true for menu subtopic names. If you have a mouse, just
+leave it over the @samp{Overview} cross reference above and watch what
+happens.
+
+ If you always like to have that information available without having
+to move your mouse over the cross reference, set
+@code{Info-hide-note-references} to a value other than t (@pxref{Emacs
+Info Variables}). You might also want to do that if you have a lot of
+cross references to files on remote machines and have non-permanent or
+slow access, since otherwise you might not be able to distinguish
+between local and remote links.
+
+@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; 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{Info Search}, for a full explanation.
+
+@kindex l @r{(Info mode)}
+@findex Info-last
+@cindex going back in Info mode
+ 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.
+
+ In Emacs, @kbd{l} runs the command @code{Info-last}.
+
+@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 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}.
+
+ Clicking @kbd{Mouse-2} on or near a cross reference also follows the
+reference. 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.
+
+@format
+>> Now type @kbd{n} to see the last node of the course.
+@end format
+
+ @xref{Expert Info}, 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 Expert Info
+@chapter Info for Experts
+
+ This chapter describes various Info commands for experts. (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}.)
+
+ This chapter also explains how to write an Info as distinct from a
+Texinfo file. (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.) @xref{Top,, Overview of Texinfo, texinfo, Texinfo: The GNU
+Documentation Format}.
+
+@menu
+* Advanced:: Advanced Info commands: g, e, and 1 - 9.
+* Info Search:: How to search Info documents for specific subjects.
+* 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
+* Emacs Info Variables:: Variables modifying the behavior of Emacs Info.
+@end menu
+
+@node Advanced, Info Search, , Expert Info
+@comment node-name, next, previous, up
+@section Advanced Info Commands
+
+Here are some more Info commands that make it easier to move around.
+
+@subheading @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{gAdvanced@key{RET}} would come back here.
+@kbd{g} in Emacs runs the command @code{Info-goto-node}.
+
+ 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}}.
+
+@subheading @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. In Emacs,
+the digit keys run the command @code{Info-nth-menu-item}.
+
+ 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.
+
+@subheading @kbd{e} makes Info document editable
+
+@kindex e @r{(Info mode)}
+@findex Info-edit
+@cindex edit Info document
+ The Info command @kbd{e} changes from Info mode to an ordinary
+Emacs editing mode, so that you can edit the text of the current node.
+Type @kbd{C-c C-c} to switch back to Info. The @kbd{e} command is allowed
+only if the variable @code{Info-enable-edit} is non-@code{nil}.
+
+ The @kbd{e} command only works in Emacs, where it runs the command
+@code{Info-edit}. The stand-alone Info reader doesn't allow you to
+edit the Info file, so typing @kbd{e} there goes to the end of the
+current node.
+
+@subheading @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 another 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.
+
+@node Info Search, Add, Advanced, Expert Info
+@comment node-name, next, previous, up
+@section How to search Info documents for specific subjects
+
+@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 indices or its text.
+
+@kindex i @r{(Info mode)}
+@findex Info-index
+ Since most subjects related to what the manual describes should be
+indexed, you should try the index search first. 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 finds 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-f} key does, type
+@kbd{i C - f @key{RET}}. Here @kbd{C-f} are 3 literal characters
+@samp{C}, @samp{-}, and @samp{f}, not the ``Control-f'' command key
+you type inside Emacs to run the command bound to @kbd{C-f}.
+
+ In Emacs, @kbd{i} runs the command @code{Info-index}.
+
+@findex info-apropos
+If you don't know what manual documents something, try the @kbd{M-x
+info-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.
+
+@kindex s @r{(Info mode)}
+@findex Info-search
+ The @kbd{s} command allows you to search a whole 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 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 do a @kbd{b} 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}.
+
+
+@node Add, Menus, Info Search, 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
+
+ Usually, the way to create the nodes is with Texinfo (@pxref{Top,,
+Overview of Texinfo, texinfo, Texinfo: The GNU Documentation Format});
+this has the advantage that you can also make a printed manual or HTML
+from them. You would use the @samp{@@dircategory} and
+@samp{@@direntry} commands to put the manual into the Info directory.
+However, if you want to edit an Info file manually and install it
+manually, here is how.
+
+@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 ``./'',
+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, 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 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{Info Search}.
+
+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 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, Emacs Info Variables, 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 Emacs Info Variables, , Checking, Expert Info
+@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 @file{~/.emacs} 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-fontify
+When set to a non-@code{nil} value, enables highlighting of Info
+files. The default is @code{t}. You can change how the highlighting
+looks by customizing the faces @code{info-node}, @code{info-xref},
+@code{info-header-xref}, @code{info-header-node}, @code{info-menu-5},
+@code{info-menu-header}, and @code{info-title-@var{n}-face} (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-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-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
+
+@item Info-enable-edit
+Set to @code{nil}, disables the @samp{e} (@code{Info-edit}) command. A
+non-@code{nil} value enables it. @xref{Add, Edit}.
+@end vtable
+
+
+@node Creating an Info File
+@chapter Creating an Info File from a Texinfo File
+
+@code{makeinfo} is a utility that 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}, to learn how to write a Texinfo file.
+
+@xref{Creating an Info File,,, texinfo, Texinfo: The GNU Documentation
+Format}, to learn how to create an Info file from a Texinfo file.
+
+@xref{Installing an Info File,,, texinfo, Texinfo: The GNU
+Documentation Format}, to learn how to install an Info file after you
+have created one.
+
+@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/macros/texinfo/contrib/texinfo-hu/texinfo/doc/infokey.1 b/macros/texinfo/contrib/texinfo-hu/texinfo/doc/infokey.1
new file mode 100644
index 0000000000..fb8f4634f4
--- /dev/null
+++ b/macros/texinfo/contrib/texinfo-hu/texinfo/doc/infokey.1
@@ -0,0 +1,41 @@
+.\" DO NOT MODIFY THIS FILE! It was generated by help2man 1.34.
+.TH INFOKEY "1" "December 2004" "infokey 4.8" "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 2003 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.
+.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/macros/texinfo/contrib/texinfo-hu/texinfo/doc/install-info.1 b/macros/texinfo/contrib/texinfo-hu/texinfo/doc/install-info.1
new file mode 100644
index 0000000000..004d5d0f97
--- /dev/null
+++ b/macros/texinfo/contrib/texinfo-hu/texinfo/doc/install-info.1
@@ -0,0 +1,78 @@
+.\" DO NOT MODIFY THIS FILE! It was generated by help2man 1.34.
+.TH INSTALL-INFO "1" "December 2004" "install-info 4.8" "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
+Install or delete dir entries from INFO\-FILE in the Info directory file
+DIR\-FILE.
+.SH OPTIONS
+.TP
+\fB\-\-delete\fR
+delete existing entries for INFO\-FILE from DIR\-FILE;
+don't insert any new entries.
+.TP
+\fB\-\-dir\-file\fR=\fINAME\fR
+specify file name of Info directory file.
+This is equivalent to using the DIR\-FILE argument.
+.TP
+\fB\-\-entry\fR=\fITEXT\fR
+insert TEXT as an Info directory entry.
+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.
+.TP
+\fB\-\-help\fR
+display this help and exit.
+.TP
+\fB\-\-info\-file\fR=\fIFILE\fR
+specify Info file to install in the directory.
+This is equivalent to using the INFO\-FILE argument.
+.TP
+\fB\-\-info\-dir\fR=\fIDIR\fR
+same as \fB\-\-dir\-file\fR=\fIDIR\fR/dir.
+.TP
+\fB\-\-item\fR=\fITEXT\fR
+same as \fB\-\-entry\fR TEXT.
+An Info directory entry is actually a menu item.
+.TP
+\fB\-\-quiet\fR
+suppress warnings.
+.TP
+\fB\-\-remove\fR
+same as \fB\-\-delete\fR.
+.TP
+\fB\-\-section\fR=\fISEC\fR
+put this file's entries in section 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.
+.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 2004 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.
+.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/macros/texinfo/contrib/texinfo-hu/texinfo/doc/makeinfo.1 b/macros/texinfo/contrib/texinfo-hu/texinfo/doc/makeinfo.1
new file mode 100644
index 0000000000..7b46491e0a
--- /dev/null
+++ b/macros/texinfo/contrib/texinfo-hu/texinfo/doc/makeinfo.1
@@ -0,0 +1,205 @@
+.\" DO NOT MODIFY THIS FILE! It was generated by help2man 1.34.
+.TH MAKEINFO "1" "December 2004" "makeinfo 4.8" "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\-\-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\-\-reference\-limit\fR=\fINUM\fR
+warn about at most NUM references (default 1000).
+.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 FILE
+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 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 (directory if split HTML),
+.SS "Options for Info and plain text:"
+.TP
+\fB\-\-enable\-encoding\fR
+output accented and special characters in
+Info output based on @documentencoding.
+.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
+.IP
+in which they are defined (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 \-.
+.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.
+.IP
+Also, for the \fB\-\-no\-ifFORMAT\fR options, do process @ifnotFORMAT text.
+.IP
+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
+.IP
+makeinfo \fB\-\-html\fR \fB\-\-no\-headers\fR foo.texi write html without node lines, menus
+makeinfo \fB\-\-number\-sections\fR foo.texi write Info with numbered sections
+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 2004 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.
+.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/macros/texinfo/contrib/texinfo-hu/texinfo/doc/mdate-sh b/macros/texinfo/contrib/texinfo-hu/texinfo/doc/mdate-sh
new file mode 100644
index 0000000000..881782eb55
--- /dev/null
+++ b/macros/texinfo/contrib/texinfo-hu/texinfo/doc/mdate-sh
@@ -0,0 +1,170 @@
+#!/bin/sh
+# Get modification time of a file or directory and pretty-print it.
+
+scriptversion=2004-12-08.12
+
+# Copyright (C) 1995, 1996, 1997, 2003, 2004 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., 59 Temple Place - Suite 330, Boston, MA 02111-1307, 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 0
+ ;;
+ -v | --v*)
+ echo "mdate-sh $scriptversion"
+ exit 0
+ ;;
+esac
+
+# Prevent date giving response in another language.
+LANG=C
+export LANG
+LC_ALL=C
+export LC_ALL
+LC_TIME=C
+export LC_TIME
+
+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 x`eval "$ls_command \"\$save_arg1\""`
+
+# Remove all preceding arguments
+eval $command
+
+# Get the month. Next argument is day, followed by the year or time.
+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
+
+day=$2
+
+# 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/macros/texinfo/contrib/texinfo-hu/texinfo/doc/pdfcolor.tex b/macros/texinfo/contrib/texinfo-hu/texinfo/doc/pdfcolor.tex
new file mode 100644
index 0000000000..f09ecbcb75
--- /dev/null
+++ b/macros/texinfo/contrib/texinfo-hu/texinfo/doc/pdfcolor.tex
@@ -0,0 +1,158 @@
+% Very simple macros to show how to use colors with pdftex
+
+\def\cmykGreenYellow{0.15 0 0.69 0}
+\def\cmykYellow{0 0 1 0}
+\def\cmykGoldenrod{0 0.10 0.84 0}
+\def\cmykDandelion{0 0.29 0.84 0}
+\def\cmykApricot{0 0.32 0.52 0}
+\def\cmykPeach{0 0.50 0.70 0}
+\def\cmykMelon{0 0.46 0.50 0}
+\def\cmykYellowOrange{0 0.42 1 0}
+\def\cmykOrange{0 0.61 0.87 0}
+\def\cmykBurntOrange{0 0.51 1 0}
+\def\cmykBittersweet{0 0.75 1 0.24}
+\def\cmykRedOrange{0 0.77 0.87 0}
+\def\cmykMahogany{0 0.85 0.87 0.35}
+\def\cmykMaroon{0 0.87 0.68 0.32}
+\def\cmykBrickRed{0 0.89 0.94 0.28}
+\def\cmykRed{0 1 1 0}
+\def\cmykOrangeRed{0 1 0.50 0}
+\def\cmykRubineRed{0 1 0.13 0}
+\def\cmykWildStrawberry{0 0.96 0.39 0}
+\def\cmykSalmon{0 0.53 0.38 0}
+\def\cmykCarnationPink{0 0.63 0 0}
+\def\cmykMagenta{0 1 0 0}
+\def\cmykVioletRed{0 0.81 0 0}
+\def\cmykRhodamine{0 0.82 0 0}
+\def\cmykMulberry{0.34 0.90 0 0.02}
+\def\cmykRedViolet{0.07 0.90 0 0.34}
+\def\cmykFuchsia{0.47 0.91 0 0.08}
+\def\cmykLavender{0 0.48 0 0}
+\def\cmykThistle{0.12 0.59 0 0}
+\def\cmykOrchid{0.32 0.64 0 0}
+\def\cmykDarkOrchid{0.40 0.80 0.20 0}
+\def\cmykPurple{0.45 0.86 0 0}
+\def\cmykPlum{0.50 1 0 0}
+\def\cmykViolet{0.79 0.88 0 0}
+\def\cmykRoyalPurple{0.75 0.90 0 0}
+\def\cmykBlueViolet{0.86 0.91 0 0.04}
+\def\cmykPeriwinkle{0.57 0.55 0 0}
+\def\cmykCadetBlue{0.62 0.57 0.23 0}
+\def\cmykCornflowerBlue{0.65 0.13 0 0}
+\def\cmykMidnightBlue{0.98 0.13 0 0.43}
+\def\cmykNavyBlue{0.94 0.54 0 0}
+\def\cmykRoyalBlue{1 0.50 0 0}
+\def\cmykBlue{1 1 0 0}
+\def\cmykCerulean{0.94 0.11 0 0}
+\def\cmykCyan{1 0 0 0}
+\def\cmykProcessBlue{0.96 0 0 0}
+\def\cmykSkyBlue{0.62 0 0.12 0}
+\def\cmykTurquoise{0.85 0 0.20 0}
+\def\cmykTealBlue{0.86 0 0.34 0.02}
+\def\cmykAquamarine{0.82 0 0.30 0}
+\def\cmykBlueGreen{0.85 0 0.33 0}
+\def\cmykEmerald{1 0 0.50 0}
+\def\cmykJungleGreen{0.99 0 0.52 0}
+\def\cmykSeaGreen{0.69 0 0.50 0}
+\def\cmykGreen{1 0 1 0}
+\def\cmykForestGreen{0.91 0 0.88 0.12}
+\def\cmykPineGreen{0.92 0 0.59 0.25}
+\def\cmykLimeGreen{0.50 0 1 0}
+\def\cmykYellowGreen{0.44 0 0.74 0}
+\def\cmykSpringGreen{0.26 0 0.76 0}
+\def\cmykOliveGreen{0.64 0 0.95 0.40}
+\def\cmykRawSienna{0 0.72 1 0.45}
+\def\cmykSepia{0 0.83 1 0.70}
+\def\cmykBrown{0 0.81 1 0.60}
+\def\cmykTan{0.14 0.42 0.56 0}
+\def\cmykGray{0 0 0 0.50}
+\def\cmykBlack{0 0 0 1}
+\def\cmykWhite{0 0 0 0}
+
+\def\GreenYellow{\pdfsetcolor{\cmykGreenYellow}}
+\def\Yellow{\pdfsetcolor{\cmykYellow}}
+\def\Goldenrod{\pdfsetcolor{\cmykGoldenrod}}
+\def\Dandelion{\pdfsetcolor{\cmykDandelion}}
+\def\Apricot{\pdfsetcolor{\cmykApricot}}
+\def\Peach{\pdfsetcolor{\cmykPeach}}
+\def\Melon{\pdfsetcolor{\cmykMelon}}
+\def\YellowOrange{\pdfsetcolor{\cmykYellowOrange}}
+\def\Orange{\pdfsetcolor{\cmykOrange}}
+\def\BurntOrange{\pdfsetcolor{\cmykBurntOrange}}
+\def\Bittersweet{\pdfsetcolor{\cmykBittersweet}}
+\def\RedOrange{\pdfsetcolor{\cmykRedOrange}}
+\def\Mahogany{\pdfsetcolor{\cmykMahogany}}
+\def\Maroon{\pdfsetcolor{\cmykMaroon}}
+\def\BrickRed{\pdfsetcolor{\cmykBrickRed}}
+\def\Red{\pdfsetcolor{\cmykRed}}
+\def\OrangeRed{\pdfsetcolor{\cmykOrangeRed}}
+\def\RubineRed{\pdfsetcolor{\cmykRubineRed}}
+\def\WildStrawberry{\pdfsetcolor{\cmykWildStrawberry}}
+\def\Salmon{\pdfsetcolor{\cmykSalmon}}
+\def\CarnationPink{\pdfsetcolor{\cmykCarnationPink}}
+\def\Magenta{\pdfsetcolor{\cmykMagenta}}
+\def\VioletRed{\pdfsetcolor{\cmykVioletRed}}
+\def\Rhodamine{\pdfsetcolor{\cmykRhodamine}}
+\def\Mulberry{\pdfsetcolor{\cmykMulberry}}
+\def\RedViolet{\pdfsetcolor{\cmykRedViolet}}
+\def\Fuchsia{\pdfsetcolor{\cmykFuchsia}}
+\def\Lavender{\pdfsetcolor{\cmykLavender}}
+\def\Thistle{\pdfsetcolor{\cmykThistle}}
+\def\Orchid{\pdfsetcolor{\cmykOrchid}}
+\def\DarkOrchid{\pdfsetcolor{\cmykDarkOrchid}}
+\def\Purple{\pdfsetcolor{\cmykPurple}}
+\def\Plum{\pdfsetcolor{\cmykPlum}}
+\def\Violet{\pdfsetcolor{\cmykViolet}}
+\def\RoyalPurple{\pdfsetcolor{\cmykRoyalPurple}}
+\def\BlueViolet{\pdfsetcolor{\cmykBlueViolet}}
+\def\Periwinkle{\pdfsetcolor{\cmykPeriwinkle}}
+\def\CadetBlue{\pdfsetcolor{\cmykCadetBlue}}
+\def\CornflowerBlue{\pdfsetcolor{\cmykCornflowerBlue}}
+\def\MidnightBlue{\pdfsetcolor{\cmykMidnightBlue}}
+\def\NavyBlue{\pdfsetcolor{\cmykNavyBlue}}
+\def\RoyalBlue{\pdfsetcolor{\cmykRoyalBlue}}
+\def\Blue{\pdfsetcolor{\cmykBlue}}
+\def\Cerulean{\pdfsetcolor{\cmykCerulean}}
+\def\Cyan{\pdfsetcolor{\cmykCyan}}
+\def\ProcessBlue{\pdfsetcolor{\cmykProcessBlue}}
+\def\SkyBlue{\pdfsetcolor{\cmykSkyBlue}}
+\def\Turquoise{\pdfsetcolor{\cmykTurquoise}}
+\def\TealBlue{\pdfsetcolor{\cmykTealBlue}}
+\def\Aquamarine{\pdfsetcolor{\cmykAquamarine}}
+\def\BlueGreen{\pdfsetcolor{\cmykBlueGreen}}
+\def\Emerald{\pdfsetcolor{\cmykEmerald}}
+\def\JungleGreen{\pdfsetcolor{\cmykJungleGreen}}
+\def\SeaGreen{\pdfsetcolor{\cmykSeaGreen}}
+\def\Green{\pdfsetcolor{\cmykGreen}}
+\def\ForestGreen{\pdfsetcolor{\cmykForestGreen}}
+\def\PineGreen{\pdfsetcolor{\cmykPineGreen}}
+\def\LimeGreen{\pdfsetcolor{\cmykLimeGreen}}
+\def\YellowGreen{\pdfsetcolor{\cmykYellowGreen}}
+\def\SpringGreen{\pdfsetcolor{\cmykSpringGreen}}
+\def\OliveGreen{\pdfsetcolor{\cmykOliveGreen}}
+\def\RawSienna{\pdfsetcolor{\cmykRawSienna}}
+\def\Sepia{\pdfsetcolor{\cmykSepia}}
+\def\Brown{\pdfsetcolor{\cmykBrown}}
+\def\Tan{\pdfsetcolor{\cmykTan}}
+\def\Gray{\pdfsetcolor{\cmykGray}}
+\def\Black{\pdfsetcolor{\cmykBlack}}
+\def\White{\pdfsetcolor{\cmykWhite}}
+
+\def\pdfsetcolor#1{\pdfliteral{#1 k}}
+\def\setcolor#1{\mark{#1}\pdfsetcolor{#1}}
+
+\pdfoutput=1
+\def\maincolor{\cmykBlack}
+\pdfsetcolor{\maincolor}
+
+\def\makefootline{
+ \baselineskip24pt
+ \line{\pdfsetcolor{\maincolor}\the\footline}}
+
+\def\makeheadline{%
+ \edef\M{\topmark}
+ \ifx\M\empty\let\M=\maincolor\fi
+ \vbox to 0pt{\vskip-22.5pt
+ \line{\vbox to8.5pt{}%
+ \pdfsetcolor{\maincolor}\the\headline\pdfsetcolor{\M}}\vss}%
+ \nointerlineskip}
diff --git a/macros/texinfo/contrib/texinfo-hu/texinfo/doc/stamp-1 b/macros/texinfo/contrib/texinfo-hu/texinfo/doc/stamp-1
new file mode 100644
index 0000000000..32973a788b
--- /dev/null
+++ b/macros/texinfo/contrib/texinfo-hu/texinfo/doc/stamp-1
@@ -0,0 +1,4 @@
+@set UPDATED 14 December 2004
+@set UPDATED-MONTH December 2004
+@set EDITION 4.8
+@set VERSION 4.8
diff --git a/macros/texinfo/contrib/texinfo-hu/texinfo/doc/stamp-vti b/macros/texinfo/contrib/texinfo-hu/texinfo/doc/stamp-vti
new file mode 100644
index 0000000000..ae55f879d4
--- /dev/null
+++ b/macros/texinfo/contrib/texinfo-hu/texinfo/doc/stamp-vti
@@ -0,0 +1,4 @@
+@set UPDATED 29 December 2004
+@set UPDATED-MONTH December 2004
+@set EDITION 4.8
+@set VERSION 4.8
diff --git a/macros/texinfo/contrib/texinfo-hu/texinfo/doc/texi2dvi.1 b/macros/texinfo/contrib/texinfo-hu/texinfo/doc/texi2dvi.1
new file mode 100644
index 0000000000..fe06b4ae18
--- /dev/null
+++ b/macros/texinfo/contrib/texinfo-hu/texinfo/doc/texi2dvi.1
@@ -0,0 +1,95 @@
+.\" DO NOT MODIFY THIS FILE! It was generated by help2man 1.34.
+.TH TEXI2DVI "1" "December 2004" "texi2dvi 1.34" "User Commands"
+.SH NAME
+texi2dvi \- print Texinfo documents
+.SH SYNOPSIS
+.B texi2dvi
+[\fIOPTION\fR]... \fIFILE\fR...
+.SH DESCRIPTION
+Run each Texinfo or LaTeX 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 (LaTeX or Texinfo).
+.PP
+Makeinfo is used to perform Texinfo macro expansion before running TeX
+when needed.
+.SS "Operation modes:"
+.TP
+\fB\-b\fR, \fB\-\-batch\fR
+no interaction
+.TP
+\fB\-c\fR, \fB\-\-clean\fR
+remove all auxiliary files
+.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\-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 the LANG of FILE (LaTeX or Texinfo)
+.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 characters
+.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
+.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 2004 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.
+.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/macros/texinfo/contrib/texinfo-hu/texinfo/doc/texindex.1 b/macros/texinfo/contrib/texinfo-hu/texinfo/doc/texindex.1
new file mode 100644
index 0000000000..732e12b887
--- /dev/null
+++ b/macros/texinfo/contrib/texinfo-hu/texinfo/doc/texindex.1
@@ -0,0 +1,47 @@
+.\" DO NOT MODIFY THIS FILE! It was generated by help2man 1.34.
+.TH TEXINDEX "1" "December 2004" "texindex 4.8" "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\-k\fR, \fB\-\-keep\fR
+keep temporary files around after processing
+.TP
+\fB\-\-no\-keep\fR
+do not keep temporary files around after processing (default)
+.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 2004 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.
+.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/macros/texinfo/contrib/texinfo-hu/texinfo/doc/texinfo.5 b/macros/texinfo/contrib/texinfo-hu/texinfo/doc/texinfo.5
new file mode 100644
index 0000000000..3f8a2b2378
--- /dev/null
+++ b/macros/texinfo/contrib/texinfo-hu/texinfo/doc/texinfo.5
@@ -0,0 +1,51 @@
+.\" texinfo(5)
+.\" $Id: texinfo.5,v 1.2 2004/04/11 17:56:45 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.
+.\"
+.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:
+.RS
+.I info texinfo
+.RE
+or this key sequence from inside Emacs:
+.RS
+.I M-x info RET m texinfo RET
+.RE
+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/macros/texinfo/contrib/texinfo-hu/texinfo/doc/texinfo.tex b/macros/texinfo/contrib/texinfo-hu/texinfo/doc/texinfo.tex
new file mode 100644
index 0000000000..c93912a055
--- /dev/null
+++ b/macros/texinfo/contrib/texinfo-hu/texinfo/doc/texinfo.tex
@@ -0,0 +1,7086 @@
+% 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{2004-11-25.16}
+%
+% Copyright (C) 1985, 1986, 1988, 1990, 1991, 1992, 1993, 1994, 1995,
+% 1996, 1997, 1998, 1999, 2000, 2001, 2002, 2003, 2004 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 2, 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 texinfo.tex file; see the file COPYING. If not, write
+% to the Free Software Foundation, Inc., 59 Temple Place - Suite 330,
+% Boston, MA 02111-1307, USA.
+%
+% 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}
+
+\message{Basics,}
+\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
+
+% 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
+
+% In some macros, we cannot use the `\? notation---the left quote is
+% in some cases the escape char.
+\chardef\colonChar = `\:
+\chardef\commaChar = `\,
+\chardef\dotChar = `\.
+\chardef\exclamChar= `\!
+\chardef\questChar = `\?
+\chardef\semiChar = `\;
+\chardef\underChar = `\_
+
+\chardef\spaceChar = `\ %
+\chardef\spacecat = 10
+\def\spaceisspace{\catcode\spaceChar=\spacecat}
+
+% 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
+
+% 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).
+ \setbox\headlinebox = \vbox{\let\hsize=\pagewidth \makeheadline}%
+ \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.
+ %
+ \escapechar = `\\ % use backslash in output files.
+ \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.
+ \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 \oddfootingxxx.)
+ % The \baselineskip=24pt in plain's \makefootline has no effect.
+ \vskip 2\baselineskip
+ \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 \normalturnoffactive
+ \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 \unvbox#1
+\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\next{#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 occurence 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
+ % We cannot use \next here, as it holds the macro to run;
+ % thus we 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 \next.
+% (Similarily, 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\next\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 enviroments; they don't open a group. (The
+% implementation of @end takes care not to call \endgroup in this
+% special case.)
+
+
+% At runtime, 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
+}
+
+% Evironment 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 file.
+ \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 \ptexi
+ \else\ifx\temp\jmacro \j
+ \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=3000 }
+
+% @! is an end-of-sentence bang.
+\def\!{!\spacefactor=3000 }
+
+% @? is an end-of-sentence query.
+\def\?{?\spacefactor=3000 }
+
+% @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 insert text of that file as input.
+%
+\def\include{\parseargusing\filenamecatcodes\includezzz}
+\def\includezzz#1{%
+ \pushthisfilestack
+ \def\thisfile{#1}%
+ {%
+ \makevalueexpandable
+ \def\temp{\input #1 }%
+ \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\underChar = \active
+ \gdef\mathunderscore{%
+ \catcode\underChar=\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
+ $\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
+ }
+}
+
+% @bullet and @minus need the same treatment as @math, just above.
+\def\bullet{$\ptexbullet$}
+\def\minus{$-$}
+
+% @dots{} outputs an ellipsis using the current font.
+% We do .5em per period so that it has the same spacing in a typewriter
+% font as three actual period characters.
+%
+\def\dots{%
+ \leavevmode
+ \hbox to 1.5em{%
+ \hskip 0pt plus 0.25fil
+ .\hfil.\hfil.%
+ \hskip 0pt plus 0.5fil
+ }%
+}
+
+% @enddots{} is an end-of-sentence ellipsis.
+%
+\def\enddots{%
+ \dots
+ \spacefactor=3000
+}
+
+% @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
+%
+\ifpdf
+ \input pdfcolor
+ \pdfcatalog{/PageMode /UseOutlines}%
+ \def\dopdfimage#1#2#3{%
+ \def\imagewidth{#2}%
+ \def\imageheight{#3}%
+ % without \immediate, 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
+ \ifx\empty\imagewidth\else width \imagewidth \fi
+ \ifx\empty\imageheight\else height \imageheight \fi
+ \ifnum\pdftexversion<13
+ #1.pdf%
+ \else
+ {#1.pdf}%
+ \fi
+ \ifnum\pdftexversion < 14 \else
+ \pdfrefximage \pdflastximage
+ \fi}
+ \def\pdfmkdest#1{{%
+ % We have to set dummies so commands such as @code in a section title
+ % aren't expanded.
+ \atdummies
+ \normalturnoffactive
+ \pdfdest name{#1} xyz%
+ }}
+ \def\pdfmkpgn#1{#1}
+ \let\linkcolor = \Blue % was Cyan, but that seems light?
+ \def\endlink{\Black\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. #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 worthwhile, since most documents are normally structured.
+ \def\pdfoutlinedest{#3}%
+ \ifx\pdfoutlinedest\empty \def\pdfoutlinedest{#4}\fi
+ %
+ \pdfoutline goto name{\pdfmkpgn{\pdfoutlinedest}}#2{#1}%
+ }
+ %
+ \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}%
+ \input \jobname.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
+ \turnoffactive
+ \input \jobname.toc
+ \endgroup
+ }
+ %
+ \def\makelinks #1,{%
+ \def\params{#1}\def\E{END}%
+ \ifx\params\E
+ \let\nextmakelinks=\relax
+ \else
+ \let\nextmakelinks=\makelinks
+ \ifnum\lnkcount>0,\fi
+ \picknum{#1}%
+ \startlink attr{/Border [0 0 0]}
+ goto name{\pdfmkpgn{\the\pgn}}%
+ \linkcolor #1%
+ \advance\lnkcount by 1%
+ \endlink
+ \fi
+ \nextmakelinks
+ }
+ \def\picknum#1{\expandafter\pn#1}
+ \def\pn#1{%
+ \def\p{#1}%
+ \ifx\p\lbrace
+ \let\nextpn=\ppn
+ \else
+ \let\nextpn=\ppnn
+ \def\first{#1}
+ \fi
+ \nextpn
+ }
+ \def\ppn#1{\pgn=#1\gobble}
+ \def\ppnn{\pgn=\first}
+ \def\pdfmklnk#1{\lnkcount=0\makelinks #1,END,}
+ \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
+ \def\pdfurl#1{%
+ \begingroup
+ \normalturnoffactive\def\@{@}%
+ \makevalueexpandable
+ \leavevmode\Red
+ \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}}
+ \linkcolor #1\endlink}
+ \def\done{\edef\st{\global\noexpand\toksA={\the\toksB}}\st}
+\else
+ \let\pdfmkdest = \gobble
+ \let\pdfurl = \gobble
+ \let\endlink = \relax
+ \let\linkcolor = \relax
+ \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}
+%
+\def\setleading#1{%
+ \normalbaselineskip = #1\relax
+ \normallineskip = \lineskipfactor\normalbaselineskip
+ \normalbaselines
+ \setbox\strutbox =\hbox{%
+ \vrule width0pt height\strutheightpercent\baselineskip
+ depth \strutdepthpercent \baselineskip
+ }%
+}
+
+% 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
+\def\setfont#1#2#3#4{\font#1=\fontprefix#2#3 scaled #4}
+
+% 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}
+
+% Text fonts (11.2pt, magstep1).
+\def\textnominalsize{11pt}
+\edef\mainmagstep{\magstephalf}
+\setfont\textrm\rmshape{10}{\mainmagstep}
+\setfont\texttt\ttshape{10}{\mainmagstep}
+\setfont\textbf\bfshape{10}{\mainmagstep}
+\setfont\textit\itshape{10}{\mainmagstep}
+\setfont\textsl\slshape{10}{\mainmagstep}
+\setfont\textsf\sfshape{10}{\mainmagstep}
+\setfont\textsc\scshape{10}{\mainmagstep}
+\setfont\textttsl\ttslshape{10}{\mainmagstep}
+\font\texti=cmmi10 scaled \mainmagstep
+\font\textsy=cmsy10 scaled \mainmagstep
+
+% A few fonts for @defun names and args.
+\setfont\defbf\bfshape{10}{\magstep1}
+\setfont\deftt\ttshape{10}{\magstep1}
+\setfont\defttsl\ttslshape{10}{\magstep1}
+\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}
+\setfont\smalltt\ttshape{9}{1000}
+\setfont\smallbf\bfshape{10}{900}
+\setfont\smallit\itshape{9}{1000}
+\setfont\smallsl\slshape{9}{1000}
+\setfont\smallsf\sfshape{9}{1000}
+\setfont\smallsc\scshape{10}{900}
+\setfont\smallttsl\ttslshape{10}{900}
+\font\smalli=cmmi9
+\font\smallsy=cmsy9
+
+% Fonts for small examples (8pt).
+\def\smallernominalsize{8pt}
+\setfont\smallerrm\rmshape{8}{1000}
+\setfont\smallertt\ttshape{8}{1000}
+\setfont\smallerbf\bfshape{10}{800}
+\setfont\smallerit\itshape{8}{1000}
+\setfont\smallersl\slshape{8}{1000}
+\setfont\smallersf\sfshape{8}{1000}
+\setfont\smallersc\scshape{10}{800}
+\setfont\smallerttsl\ttslshape{10}{800}
+\font\smalleri=cmmi8
+\font\smallersy=cmsy8
+
+% Fonts for title page (20.4pt):
+\def\titlenominalsize{20pt}
+\setfont\titlerm\rmbshape{12}{\magstep3}
+\setfont\titleit\itbshape{10}{\magstep4}
+\setfont\titlesl\slbshape{10}{\magstep4}
+\setfont\titlett\ttbshape{12}{\magstep3}
+\setfont\titlettsl\ttslshape{10}{\magstep4}
+\setfont\titlesf\sfbshape{17}{\magstep1}
+\let\titlebf=\titlerm
+\setfont\titlesc\scbshape{10}{\magstep4}
+\font\titlei=cmmi12 scaled \magstep3
+\font\titlesy=cmsy10 scaled \magstep4
+\def\authorrm{\secrm}
+\def\authortt{\sectt}
+
+% Chapter (and unnumbered) fonts (17.28pt).
+\def\chapnominalsize{17pt}
+\setfont\chaprm\rmbshape{12}{\magstep2}
+\setfont\chapit\itbshape{10}{\magstep3}
+\setfont\chapsl\slbshape{10}{\magstep3}
+\setfont\chaptt\ttbshape{12}{\magstep2}
+\setfont\chapttsl\ttslshape{10}{\magstep3}
+\setfont\chapsf\sfbshape{17}{1000}
+\let\chapbf=\chaprm
+\setfont\chapsc\scbshape{10}{\magstep3}
+\font\chapi=cmmi12 scaled \magstep2
+\font\chapsy=cmsy10 scaled \magstep3
+
+% Section fonts (14.4pt).
+\def\secnominalsize{14pt}
+\setfont\secrm\rmbshape{12}{\magstep1}
+\setfont\secit\itbshape{10}{\magstep2}
+\setfont\secsl\slbshape{10}{\magstep2}
+\setfont\sectt\ttbshape{12}{\magstep1}
+\setfont\secttsl\ttslshape{10}{\magstep2}
+\setfont\secsf\sfbshape{12}{\magstep1}
+\let\secbf\secrm
+\setfont\secsc\scbshape{10}{\magstep2}
+\font\seci=cmmi12 scaled \magstep1
+\font\secsy=cmsy10 scaled \magstep2
+
+% Subsection fonts (13.15pt).
+\def\ssecnominalsize{13pt}
+\setfont\ssecrm\rmbshape{12}{\magstephalf}
+\setfont\ssecit\itbshape{10}{1315}
+\setfont\ssecsl\slbshape{10}{1315}
+\setfont\ssectt\ttbshape{12}{\magstephalf}
+\setfont\ssecttsl\ttslshape{10}{1315}
+\setfont\ssecsf\sfbshape{12}{\magstephalf}
+\let\ssecbf\ssecrm
+\setfont\ssecsc\scbshape{10}{1315}
+\font\sseci=cmmi12 scaled \magstephalf
+\font\ssecsy=cmsy10 scaled 1315
+
+% Reduced fonts for @acro in text (10pt).
+\def\reducednominalsize{10pt}
+\setfont\reducedrm\rmshape{10}{1000}
+\setfont\reducedtt\ttshape{10}{1000}
+\setfont\reducedbf\bfshape{10}{1000}
+\setfont\reducedit\itshape{10}{1000}
+\setfont\reducedsl\slshape{10}{1000}
+\setfont\reducedsf\sfshape{10}{1000}
+\setfont\reducedsc\scshape{10}{1000}
+\setfont\reducedttsl\ttslshape{10}{1000}
+\font\reducedi=cmmi10
+\font\reducedsy=cmsy10
+
+% 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.
+%
+\textfonts \rm
+
+% 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}
+\setfont\shortcontbf\bfshape{10}{\magstep1} % no cmb12
+\setfont\shortcontsl\slshape{12}{1000}
+\setfont\shortconttt\ttshape{12}{1000}
+
+%% 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\frenchspacing{%
+ \sfcode\dotChar =\@m \sfcode\questChar=\@m \sfcode\exclamChar=\@m
+ \sfcode\colonChar=\@m \sfcode\semiChar =\@m \sfcode\commaChar =\@m
+ }
+\catcode`@=\other
+
+\def\t#1{%
+ {\tt \rawbackslash \frenchspacing #1}%
+ \null
+}
+\def\samp#1{`\tclose{#1}'\null}
+\setfont\keyrm\rmshape{8}{1000}
+\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}}}}
+% 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
+ \frenchspacing
+ #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
+ %
+ \global\def\code{\begingroup
+ \catcode`\-=\active \let-\codedash
+ \catcode`\_=\active \let_\codeunder
+ \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}
+
+% @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\arg{#1}%
+ \ifx\arg\worddistinct
+ \gdef\kbdexamplefont{\ttsl}\gdef\kbdfont{\ttsl}%
+ \else\ifx\arg\wordexample
+ \gdef\kbdexamplefont{\ttsl}\gdef\kbdfont{\tt}%
+ \else\ifx\arg\wordcode
+ \gdef\kbdexamplefont{\tt}\gdef\kbdfont{\tt}%
+ \else
+ \errhelp = \EMsimple
+ \errmessage{Unknown @kbdinputstyle option `\arg'}%
+ \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
+
+% @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{%
+ {\frenchspacing #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 symbold 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
+}
+
+% @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}}%
+ }$%
+}
+
+% 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
+
+
+\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 -\baselineskip
+ \global\advance\vsize by -\baselineskip
+}
+
+\parseargdef\everyfooting{\oddfootingxxx{#1}\evenfootingxxx{#1}}
+
+
+% @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:
+ \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', which must be on a line
+ % by itself.
+ \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.
+ \obeylines %
+ \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.
+\def\enddoignore{\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{%
+ \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
+ %
+ % \definedummyword defines \#1 as \realbackslash #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{%
+ \expandafter\def\csname ##1\endcsname{\realbackslash ##1\space}%
+ }%
+ \def\definedummyletter##1{%
+ \expandafter\def\csname ##1\endcsname{\realbackslash ##1}%
+ }%
+ \let\definedummyaccent\definedummyletter
+ %
+ % Do the redefinitions.
+ \commondummies
+}
+
+% For the aux file, @ is the escape character. So we want to redefine
+% everything using @ instead of \realbackslash. When everything uses
+% @, this will be simpler.
+%
+\def\atdummies{%
+ \def\@{@@}%
+ \def\ {@ }%
+ \let\{ = \lbraceatcmd
+ \let\} = \rbraceatcmd
+ %
+ % (See comments in \indexdummies.)
+ \def\definedummyword##1{%
+ \expandafter\def\csname ##1\endcsname{@##1\space}%
+ }%
+ \def\definedummyletter##1{%
+ \expandafter\def\csname ##1\endcsname{@##1}%
+ }%
+ \let\definedummyaccent\definedummyletter
+ %
+ % Do the redefinitions.
+ \commondummies
+}
+
+% Called from \indexdummies and \atdummies. \definedummyword and
+% \definedummyletter must be defined first.
+%
+\def\commondummies{%
+ %
+ \normalturnoffactive
+ %
+ \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{expansion}%
+ \definedummyword{minus}%
+ \definedummyword{pounds}%
+ \definedummyword{point}%
+ \definedummyword{print}%
+ \definedummyword{result}%
+ %
+ % Handle some cases of @value -- where it does not contain any
+ % (non-fully-expandable) commands.
+ \makevalueexpandable
+ %
+ % Normal spaces, not active ones.
+ \unsepspaces
+ %
+ % No macro expansion.
+ \turnoffmacros
+}
+
+% \commondummiesnofonts: common to \commondummies and \indexnofonts.
+%
+% Better have this without active chars.
+{
+ \catcode`\~=\other
+ \gdef\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{samp}%
+ \definedummyword{strong}%
+ \definedummyword{tie}%
+ \definedummyword{uref}%
+ \definedummyword{url}%
+ \definedummyword{var}%
+ \definedummyword{verb}%
+ \definedummyword{w}%
+ }
+}
+
+% \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{%
+ \expandafter\let\csname ##1\endcsname\asis
+ }%
+ % We can just ignore other control letters.
+ \def\definedummyletter##1{%
+ \expandafter\def\csname ##1\endcsname{}%
+ }%
+ % 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\expansion{==>}%
+ \def\minus{-}%
+ \def\pounds{pounds}%
+ \def\point{.}%
+ \def\print{-|}%
+ \def\result{=>}%
+ %
+ % Don't write macro names.
+ \emptyusermacros
+}
+
+\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}%
+ %
+ \ifvmode
+ \dosubindsanitize
+ \else
+ \dosubindwrite
+ \fi
+ }%
+ \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
+ \escapechar=`\\
+ \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:
+%
+% 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 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}
+%
+% ..., ready, GO:
+%
+\def\dosubindsanitize{%
+ % \lastskip and \lastpenalty cannot both be nonzero simultaneously.
+ \skip0 = \lastskip
+ \edef\lastskipmacro{\the\lastskip}%
+ \count255 = \lastpenalty
+ %
+ % If \lastskip is nonzero, that means the last item was a
+ % skip. And since a skip is discardable, that means this
+ % -\skip0 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-\skip0
+ \fi
+ %
+ \dosubindwrite
+ %
+ \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\count255>9999 \penalty\count255 \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\skip0
+ \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
+ \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 frozes 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.
+ \def\tempa{{\rm }}%
+ \def\tempb{#1}%
+ \edef\tempc{\tempa}%
+ \edef\tempd{\tempb}%
+ \ifx\tempc\tempd
+ \ %
+ \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 \dotfill except takes at least 1 em.
+\def\indexdotfill{\cleaders
+ \hbox{$\mathsurround=0pt \mkern1.5mu ${\it .}$ \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{%
+ \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 this as the name of the chapter.
+% page headings and footings can use it. @section does likewise.
+% However, they are not reliable, because we don't use marks.
+\def\thischapter{}
+\def\thissection{}
+
+\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}
+\def\chapoddpage{\chappager \ifodd\pageno \else \hbox to 0pt{} \chappager\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{%
+ \pchapsepmacro
+ {%
+ \chapfonts \rm
+ %
+ % Have to define \thissection 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\thissection{#1}%
+ \gdef\thischaptername{#1}%
+ %
+ % Only insert the separating space if we have a chapter/appendix
+ % number, and don't print the unnumbered ``number''.
+ \def\temptype{#2}%
+ \ifx\temptype\Ynothingkeyword
+ \setbox0 = \hbox{}%
+ \def\toctype{unnchap}%
+ \def\thischapter{#1}%
+ \else\ifx\temptype\Yomitfromtockeyword
+ \setbox0 = \hbox{}% contents like unnumbered, but no toc entry
+ \def\toctype{omit}%
+ \xdef\thischapter{}%
+ \else\ifx\temptype\Yappendixkeyword
+ \setbox0 = \hbox{\putwordAppendix{} #3\enspace}%
+ \def\toctype{app}%
+ % We don't substitute the actual chapter name into \thischapter
+ % because we don't want its macros evaluated now. And we don't
+ % use \thissection because that changes with each section.
+ %
+ \xdef\thischapter{\putwordAppendix{} \appendixletter:
+ \noexpand\thischaptername}%
+ \else
+ \setbox0 = \hbox{#3\enspace}%
+ \def\toctype{numchap}%
+ \xdef\thischapter{\putwordChapter{} \the\chapno:
+ \noexpand\thischaptername}%
+ \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.
+ \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\sectionheading#1#2#3#4{%
+ {%
+ % Switch to the right set of fonts.
+ \csname #2fonts\endcsname \rm
+ %
+ % Insert space above the heading.
+ \csname #2headingbreak\endcsname
+ %
+ % Only insert the space after the number if we have a section number.
+ \def\sectionlevel{#2}%
+ \def\temptype{#3}%
+ %
+ \ifx\temptype\Ynothingkeyword
+ \setbox0 = \hbox{}%
+ \def\toctype{unn}%
+ \gdef\thissection{#1}%
+ \else\ifx\temptype\Yomitfromtockeyword
+ % for @headings -- no section number, don't include in toc,
+ % and don't redefine \thissection.
+ \setbox0 = \hbox{}%
+ \def\toctype{omit}%
+ \let\sectionlevel=\empty
+ \else\ifx\temptype\Yappendixkeyword
+ \setbox0 = \hbox{#4\enspace}%
+ \def\toctype{app}%
+ \gdef\thissection{#1}%
+ \else
+ \setbox0 = \hbox{#4\enspace}%
+ \def\toctype{num}%
+ \gdef\thissection{#1}%
+ \fi\fi\fi
+ %
+ % Write the toc entry (before \donoderef). See comments in \chfplain.
+ \writetocentry{\toctype\sectionlevel}{#1}{#4}%
+ %
+ % Write the node reference (= pdf destination for pdftex).
+ % Again, see comments in \chfplain.
+ \donoderef{#3}%
+ %
+ % 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
+ \toks0 = {#2}%
+ \toks2 = \expandafter{\lastnode}%
+ \edef\temp{\write\tocfile{\realbackslash #1entry{\the\toks0}{#3}%
+ {\the\toks2}{\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
+}
+
+\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.
+ \def\thischapter{}%
+ \chapmacro{#1}{Yomitfromtoc}{}%
+ %
+ \savepageno = \pageno
+ \begingroup % Set up to handle contents files properly.
+ \catcode`\\=0 \catcode`\{=1 \catcode`\}=2 \catcode`\@=11
+ % We can't do this, because then an actual ^ in a section
+ % title fails, e.g., @chapter ^ -- exponentiation. --karl, 9jul97.
+ %\catcode`\^=7 % to see ^^e4 as \"a etc. juha@piuha.ydi.vtt.fi
+ \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
+}
+
+
+% Normal (long) toc.
+\def\contents{%
+ \startcontents{\putwordTOC}%
+ \openin 1 \jobname.toc
+ \ifeof 1 \else
+ \input \jobname.toc
+ \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 \jobname.toc
+ \ifeof 1 \else
+ \input \jobname.toc
+ \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, 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}}
+\def\equiv{\leavevmode\lower.1ex\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 \tensf 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
+ %
+ \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.
+\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=\comment
+ \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
+ % @cartouche defines \nonarrowing to inhibit narrowing
+ % at next level down.
+ \ifx\nonarrowing\relax
+ \advance \leftskip by \lispnarrowing
+ \exdentamount=\lispnarrowing
+ \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
+ \smallexamplefonts \rm
+ \fi
+}
+\def\setsmalldispenv{%
+ \ifx\SETdispenvsize\nosmallword
+ \else
+ \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
+ \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
+ \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}
+\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
+ }%
+ }
+\endgroup
+\def\setupverbatim{%
+ \nonfillstart
+ \advance\leftskip by -\defbodyindent
+ % Easiest (and conventionally used) font for verbatim
+ \tt
+ \def\par{\leavevmode\egroup\box0\endgraf}%
+ \catcode`\`=\active
+ \tabexpand
+ % 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
+
+% Start the processing of @deffn:
+\def\startdefun{%
+ \ifnum\lastpenalty<10000
+ \medbreak
+ \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 \defargscommonending, 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.
+ %
+ \ifnum\lastpenalty=10002 \penalty2000 \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 \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 10002 % 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 remainnig 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
+}
+\def\badparencount{%
+ \errmessage{Unbalanced parentheses in @def}%
+ \global\parencount=0
+}
+\def\badbrackcount{%
+ \errmessage{Unbalanced square braces 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?
+\def\macrolist{} % List of all defined macros in the form
+ % \do\macro1\do\macro2...
+
+% 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 \.
+
+% 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
+}
+
+\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%
+ % Add the macroname to \macrolist
+ \toks0 = \expandafter{\macrolist\do}%
+ \xdef\macrolist{\the\toks0
+ \expandafter\noexpand\csname\the\macname\endcsname}%
+ \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\do\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\do \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\next=#1\futurelet\nchar\braceorlinexxx}
+\def\braceorlinexxx{%
+ \ifx\nchar\bgroup\else
+ \expandafter\parsearg
+ \fi \next}
+
+% We want to disable all macros during \shipout so that they are not
+% expanded by \write.
+\def\turnoffmacros{\begingroup \def\do##1{\let\noexpand##1=\relax}%
+ \edef\next{\macrolist}\expandafter\endgroup\next}
+
+% For \indexnofonts, 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.
+%
+\def\emptyusermacros{\begingroup
+ \def\do##1{\let\noexpand##1=\noexpand\asis}%
+ \edef\next{\macrolist}\expandafter\endgroup\next}
+
+
+% @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
+ \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 \thissection,
+% 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
+ \turnoffactive
+ \otherbackslash
+ \edef\writexrdef##1##2{%
+ \write\auxfile{@xrdef{#1-% #1 of \setref, expanded by the \edef
+ ##1}{##2}}% these are parameters of \writexrdef
+ }%
+ \toks0 = \expandafter{\thissection}%
+ \immediate \writexrdef{title}{\the\toks0 }%
+ \immediate \writexrdef{snt}{\csname #2\endcsname}% \Ynumbered etc.
+ \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
+ \leavevmode
+ \getfilename{#4}%
+ {\turnoffactive \otherbackslash
+ \ifnum\filenamelength>0
+ \startlink attr{/Border [0 0 0]}%
+ goto file{\the\filename.pdf} name{#1}%
+ \else
+ \startlink attr{/Border [0 0 0]}%
+ goto name{\pdfmkpgn{#1}}%
+ \fi
+ }%
+ \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
+ \otherbackslash
+ \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 \otherbackslash
+ % 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 \otherbackslash \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{%
+ \expandafter\gdef\csname XR#1\endcsname{#2}% remember this xref value.
+ %
+ % Was that xref control sequence that we just defined for a float?
+ \expandafter\iffloat\csname XR#1\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{#1}}%
+ \fi
+}
+
+% Read the last existing aux file, if any. No error if none exists.
+%
+\def\tryauxfile{%
+ \openin 1 \jobname.aux
+ \ifeof 1 \else
+ \readauxfile
+ \global\havexrefstrue
+ \fi
+ \closein 1
+}
+
+\def\readauxfile{\begingroup
+ \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.
+ {%
+ \count 1=128
+ \def\loop{%
+ \catcode\count 1=\other
+ \advance\count 1 by 1
+ \ifnum \count 1<256 \loop \fi
+ }%
+ }%
+ %
+ % @ is our escape character in .aux files, and we need braces.
+ \catcode`\{=1
+ \catcode`\}=2
+ \catcode`\@=0
+ %
+ \input \jobname.aux
+\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.
+% Similarily, 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\bigskip
+ % 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
+ \line\bgroup\hss
+ \fi
+ %
+ % Output the image.
+ \ifpdf
+ \dopdfimage{#1}{#2}{#3}%
+ \else
+ % \epsfbox itself resets \epsf?size at each figure.
+ \setbox0 = \hbox{\ignorespaces #2}\ifdim\wd0 > 0pt \epsfxsize=#2\relax \fi
+ \setbox0 = \hbox{\ignorespaces #3}\ifdim\wd0 > 0pt \epsfysize=#3\relax \fi
+ \epsfbox{#1.eps}%
+ \fi
+ %
+ \ifimagevmode \hss \egroup \bigbreak \fi % space after the 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 \thissection 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\thissection{\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 \turnoffactive \otherbackslash
+ % 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 float, 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
+% \thissection 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,}
+% and i18n.
+
+% @documentlanguage is usually given very early, just after
+% @setfilename. If done too late, it may not override everything
+% properly. Single argument is the language abbreviation.
+% It would be nice if we could set up a hyphenation file here.
+%
+\parseargdef\documentlanguage{%
+ \tex % read txi-??.tex file in plain TeX.
+ % Read the file if it exists.
+ \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
+ \endgroup
+}
+\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.}
+
+
+% @documentencoding should change something in TeX eventually, most
+% likely, but for now just recognize it.
+\let\documentencoding = \comment
+
+
+% Page size parameters.
+%
+\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, just 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
+ \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{46\baselineskip}{6in}%
+ {\voffset}{.25in}%
+ {\bindingoffset}{36pt}%
+ {11in}{8.5in}%
+}}
+
+% Use @smallbook to reset parameters for 7x9.5 (or so) format.
+\def\smallbook{{\globaldefs = 1
+ \parskip = 2pt plus 1pt
+ \textleading = 12pt
+ %
+ \internalpagesizes{7.5in}{5in}%
+ {\voffset}{.25in}%
+ {\bindingoffset}{16pt}%
+ {9.25in}{7in}%
+ %
+ \lispnarrowing = 0.3in
+ \tolerance = 700
+ \hfuzz = 1pt
+ \contentsrightmargin = 0pt
+ \defbodyindent = .5cm
+}}
+
+% 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{51\baselineskip}{160mm}
+ {\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
+ \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\_}
+% 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}
+
+\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
+
+% \rawbackslash defines an active \ to do \backslashcurfont.
+% \otherbackslash defines an active \ to be a literal `\' character with
+% catcode other.
+{\catcode`\\=\active
+ @gdef@rawbackslash{@let\=@backslashcurfont}
+ @gdef@otherbackslash{@let\=@realbackslash}
+}
+
+% \realbackslash is an actual character `\' with catcode other.
+{\catcode`\\=\other @gdef@realbackslash{\}}
+
+% \normalbackslash outputs one backslash in fixed width font.
+\def\normalbackslash{{\tt\backslashcurfont}}
+
+\catcode`\\=\active
+
+% Used sometimes to turn off (effectively) the active characters
+% even after parsing them.
+@def@turnoffactive{%
+ @let"=@normaldoublequote
+ @let\=@realbackslash
+ @let~=@normaltilde
+ @let^=@normalcaret
+ @let_=@normalunderscore
+ @let|=@normalverticalbar
+ @let<=@normalless
+ @let>=@normalgreater
+ @let+=@normalplus
+ @let$=@normaldollar %$ font-lock fix
+ @unsepspaces
+}
+
+% Same as @turnoffactive except outputs \ as {\tt\char`\\} instead of
+% the literal character `\'. (Thus, \ is not expandable when this is in
+% effect.)
+%
+@def@normalturnoffactive{@turnoffactive @let\=@normalbackslash}
+
+% 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 back turn 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/macros/texinfo/contrib/texinfo-hu/texinfo/doc/texinfo.txi b/macros/texinfo/contrib/texinfo-hu/texinfo/doc/texinfo.txi
new file mode 100644
index 0000000000..15ef1dd0ca
--- /dev/null
+++ b/macros/texinfo/contrib/texinfo-hu/texinfo/doc/texinfo.txi
@@ -0,0 +1,20513 @@
+\input texinfo.tex @c -*-texinfo-*-
+@c $Id: texinfo.txi,v 1.128 2004/12/29 15:06:41 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 (C) 1988, 1990, 1991, 1992, 1993, 1995, 1996, 1997, 1998,
+1999, 2000, 2001, 2002, 2003, 2004 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.1 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 freedom to copy and modify
+this GNU Manual, like GNU software. Copies published by the Free
+Software Foundation raise funds for GNU development.''
+@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.
+* 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 @*
+59 Temple Place Suite 330 @*
+Boston, MA 02111-1307 @*
+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
+
+@insertcopying
+
+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.
+* Copying This Manual:: The GNU Free Documentation License.
+* Command and Variable Index:: A menu containing commands and variables.
+* Concept 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.
+
+@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.
+* cite:: Referring to books not in the Info system.
+* 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 Space:: How to insert the right amount of space
+ within a sentence.
+* Inserting Accents:: How to insert accents and special characters.
+* 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.
+* minus:: How to insert a minus sign.
+* math:: How to format a mathematical expression.
+* 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.
+* 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.
+* 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::
+
+Copying This Manual
+
+* GNU Free Documentation License:: License for copying this manual.
+
+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.
+
+Copying This Manual
+
+* GNU Free Documentation License:: License for copying this manual.
+
+@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.
+
+@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}).
+
+When sending patches, if possible please do not encode or split them in
+any way; it's much easier to deal with one plain text message, however
+large, than many small ones. @uref{ftp://ftp.gnu.org/gnu/sharutils/,
+GNU shar} is a convenient way of packaging multiple and/or binary files
+for email.
+
+
+@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 @sc{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
+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 supporting arbitrary
+scaling. It is intended to be platform-independent and easily
+viewable, among other design goals; for a discussion, see
+@uref{http://tug.org/TUGboat/Articles/tb22-3/tb72beebeI.pdf}. 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 URI's 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
+@uref{ftp://ftp.gnu.org/gnu/texinfo/texinfo.tex}.
+
+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 dots @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 @sc{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
+@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 @sc{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. We
+hope to eventually support the various quotation characters in
+Unicode.
+
+@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 and most important, 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 causes GNU Emacs to insert multiple
+spaces when you press the @key{TAB} key.
+
+@noindent
+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 namea 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 contains commands for printing indices and
+generating the table of contents, and 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@{@} 2004 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 also include the copying text again for
+the benefit of online readers. Since the copying text begins with
+a brief description of the manual, no other text is needed in this
+case. The @samp{@@top} command itself helps @command{makeinfo}
+determine the relationships between nodes.
+
+@example
+@@ifnottex
+@@node Top
+@@top Short Sample
+
+@@insertcopying
+@@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. @w{Robert 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 @w{David 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 strived 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 @sc{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 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 C-c @}
+@itemx C-c 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 C-c ]} is easier than typing @kbd{C-c 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 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 is often 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 C-c @{ @r{Insert braces.}
+C-c C-c ]
+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}
+
+@@insertcopying
+@@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.
+
+@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}).
+
+We also strongly recommend using @code{@@insertcopying} in the Top node
+of your manual (@pxref{The Top Node}), although it is not required
+legally. Here's why:
+
+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 *}). Therefore, an explicit @code{@@insertcopying}
+in the Top node makes it apparent to readers that the manual is free.
+
+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). And
+therefore again, the @code{@@insertcopying} in the Top node is valuable
+because it makes the copying permissions visible and thus promotes
+freedom.
+
+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 incantantion 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 pre-defined page
+headings prior to defining your own. Write an @code{@@headings} command
+immediately after the @code{@@end titlepage} command.@refill
+
+You can use @code{@@headings} as follows:@refill
+
+@table @code
+@item @@headings off
+Turn off printing of page headings.@refill
+
+@item @@headings single
+Turn on page headings appropriate for single-sided printing.
+@refill
+
+@item @@headings double
+@itemx @@headings on
+Turn on page headings appropriate for double-sided printing. The two
+commands, @code{@@headings on} and @code{@@headings double}, are
+synonymous.@refill
+
+@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:@refill
+
+@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.@refill
+
+You can also specify your own style of page heading and footing.
+@xref{Headings, , Page Headings}, for more information.@refill
+
+
+@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 the @code{@@insertcopying} command
+(@pxref{Document Permissions}) to provide a brief description of the
+manual (including the version number) and copying permissions, 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 also conventional 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 ifnottext}, 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 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
+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::
+* Concept 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 instead of by number.@refill
+
+For Info file output, the @code{@@unnumbered} and @code{@@appendix}
+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
+
+To create an appendix or an unnumbered chapter, 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.@refill
+
+
+@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
+@comment node-name, next, previous, up
+@section @code{@@section}
+@findex section
+
+In a printed manual, an @code{@@section} command identifies a
+numbered section within a chapter. The section title appears in the
+table of contents. In Info, an @code{@@section} command provides a
+title for a segment of text, underlined with @samp{=}.@refill
+
+This section is headed with an @code{@@section} command and looks like
+this in the Texinfo file:@refill
+
+@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.@refill
+
+Thus,
+
+@example
+@@section This is a section
+@end example
+
+@noindent
+produces
+
+@example
+@group
+This is a section
+=================
+@end group
+@end example
+
+@noindent
+in Info.
+
+
+@node unnumberedsec appendixsec heading
+@comment node-name, next, previous, up
+@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.
+(@xref{section, , @code{@@section}}.)@refill
+
+@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
+
+
+@node subsection
+@comment node-name, next, previous, up
+@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,@refill
+
+@example
+@@subsection This is a subsection
+@end example
+
+@noindent
+produces
+
+@example
+@group
+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
+@comment node-name, next, previous, up
+@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}}.)@refill
+
+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.@refill
+
+@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
+
+In Info, `subsub' titles are underlined with periods.
+For example,@refill
+
+@example
+@@subsubsection This is a subsubsection
+@end example
+
+@noindent
+produces
+
+@example
+@group
+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 create 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. 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}).
+
+You may insert spaces before each name 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}.)
+
+@quotation Note
+The GNU Emacs Texinfo mode updating commands work
+only with Texinfo files in which @code{@@node} lines are followed by chapter
+structuring lines. @xref{Updating Requirements}.
+@end quotation
+
+@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. 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 that 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 printed 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:@refill
+
+@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}.)@refill
+
+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.@refill
+
+The template for a fully-written-out node line with `Next', `Previous',
+and `Up' pointers looks like this:@refill
+
+@example
+@@node @var{node-name}, @var{next}, @var{previous}, @var{up}
+@end example
+
+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 Previous node of Top node
+On the other hand, do not define the `Previous' node of the Top node to
+be @samp{(dir)}, as it causes confusing behavior for users: if you are
+in the Top node and hits @key{DEL} to go backwards, you wind up in the
+middle of the some other entry in the @file{dir} file, which has nothing
+to do with what you were reading.
+
+@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.
+
+For concreteness, here is an example with explicit pointers (which you
+can maintain automatically with the texinfo mode commands):
+
+Or you can leave the pointers off entirely and let the tools implicitly
+define them. This is recommended. Thus:
+
+@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.
+
+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.
+
+This implicit node pointer insertion 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 the 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.
+Spaces are always 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}.)
+
+
+@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 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 aside from not working with
+@command{makeinfo}'s implicit pointer creation, it also makes the XML
+output incorrect, since it does not reflect the true document
+structure. So, unfortunately 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.
+
+
+@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 menu entry looks like this:@refill
+
+@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, period, or newline.@refill
+
+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.@refill
+
+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
+@comment node-name, next, previous, up
+@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.@refill
+
+@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 use the node name for the menu entry name whenever possible,
+since it reduces visual clutter in the menu.@refill
+
+@node Menu Example
+@comment node-name, next, previous, up
+@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.
+@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. If you include this argument, it becomes
+the first part of the cross reference. It is usually omitted.@refill
+
+@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, see @@ref@{Hurricanes@}.
+@end example
+
+@noindent produces (in Info):
+
+@example
+For more information, see *Note Hurricanes::.
+@end example
+
+@noindent and (in printed output):
+
+@quotation
+For more information, see Section 8.2 [Hurricanes], page 123.
+@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:
+
+@example
+Sea surges are described in *Note Hurricanes::.
+@end example
+
+As a general rule, 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.
+
+
+@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 you use it @emph{only} inside parentheses
+and you do @emph{not} type a comma or period (or anything else) after
+the command's closing brace. 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'.@refill
+
+@item
+The Info formatting commands automatically end the reference with a
+closing colon or period.@refill
+@end enumerate
+
+Because one type of formatting automatically inserts closing
+punctuation and the other does not, you should use @code{@@pxref}
+@emph{only} inside parentheses as part of another sentence. Also, you
+yourself should not insert punctuation after the reference (or any
+other text), as you do with @code{@@xref}. In the Info
+output, such text would follow a period, which is grammatically wrong.
+
+@code{@@pxref} is designed so that the output looks right and works
+right between parentheses 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.@refill
+
+@noindent
+With one argument, a parenthetical cross reference looks like
+this:@refill
+
+@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:@refill
+
+@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
+
+@need 1500
+@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}}).@refill
+
+@quotation Caution
+Use @code{@@pxref} only as a parenthetical
+reference. Do not try to use @code{@@pxref} as a clause in a sentence.
+It will look bad in either the Info file, the printed output, or
+both.@refill
+@end quotation
+
+Parenthetical cross references look best at the ends of sentences.
+Although they technically work 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
+definitions.
+
+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(1)@} program @dots{}
+@end example
+
+@noindent produces:
+@display
+The @uref{/man.cgi/1/ls,,ls(1)} program @dots{}
+@end display
+
+@noindent but with HTML:
+@example
+The <a href="/man.cgi/1/ls">ls(1)</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 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.
+* cite:: Referring to books not in the Info system.
+* 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{@@kenv}}.
+
+@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.
+
+@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 @sc{ascii} control character.@refill
+@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.
+
+@need 700
+For example,
+
+@example
+The function returns @@code@{nil@}.
+@end example
+
+@noindent
+produces this in the printed manual:
+
+@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 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.
+
+
+@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 accepts 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
+@comment node-name, next, previous, up
+@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
+
+@need 700
+For example, to produce @kbd{C-x @key{ESC}} you would type:@refill
+
+@example
+@@kbd@{C-x @@key@{ESC@}@}
+@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 DEL
+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}.
+
+@c I don't think this is a good explanation.
+@c I think it will puzzle readers more than it clarifies matters. -- rms.
+@c In other words, use @code{@@kbd} for what you do, and use @code{@@key}
+@c for what you talk about: ``Press @code{@@kbd@{M-a@}} to move point to
+@c the beginning of the sentence. The @code{@@key@{META@}} key is often in
+@c the lower left of the keyboard.''@refill
+
+@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{@@command} 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.
+
+@node cite
+@subsection @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}}.
+
+
+@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 @sc{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 @sc{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 abbreivation do not end a sentence.
+
+@cindex <abbr> tag
+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
+
+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 these commands for all abbreviations. Text
+is perfectly readable without them, and for common abbreviations like
+`etc.@:', we consider them to be overkill.
+
+@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
+@comment node-name, next, previous, up
+@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
+
+Texinfo 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
+rselects 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, when 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 with 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 output in a Texinfo manual. Here is an example;
+the output you see is just the same as the input, with a line
+@code{@@verbatim} before and a line @code{@@end verbatim} after.
+
+@verbatim
+This is an example of text written in a @verbatim
+block. No character substitutions are made. All commands
+are ignored, until `<at>end verbatim'.
+
+In the printed manual, the text is typeset in a
+fixed-width font, and not indented or filled. All
+spaces and blank lines are significant, including tabs.
+@end verbatim
+
+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
+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.
+
+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 reliably include files in other directories in a
+distribution, for instance:
+
+@example
+@@include @@value@{top_srcdir@}/NEWS
+@end example
+
+@noindent (You still have to get @code{top_srcdir} defined in the
+first place.)
+
+
+@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.@refill
+
+@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 group
+@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.
+
+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{@@listofloats} 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 basic 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
+@TeX{} reads the file @file{@var{filename}.eps} (Encapsulated PostScript
+format).
+@item
+@pindex pdftex@r{, and images}
+PDF@TeX{} reads @file{@var{filename}.pdf} (Adobe's Portable Document Format).
+@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 first thing in a paragraph, for
+example if you want two images side-by-side, you must precede it with
+@code{@@noindent} (@pxref{noindent,,@code{@@noindent}}). Otherwise it
+will be displayed on a line by itself. 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
+When producing html, @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. If you want an empty
+@code{alt} string, use @code{@@-}. 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.
+
+@cindex GIF images, unsupported due to patents
+@cindex PNG image format
+@cindex JPG 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. (We cannot support GIF format directly due to
+software patents.)
+
+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.
+
+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 pounds currency 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 Space:: How to insert the right amount of space
+ within a sentence.
+* Inserting Accents:: How to insert accents and special characters.
+* 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.
+* minus:: How to insert a minus sign.
+* math:: How to format a mathematical expression.
+* 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.ppp
+
+
+@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 chacter would confuse Texinfo's parsing for these
+commands, you must use the command @samp{@comma{}} instead if you want
+to have an actual comma in the output. 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 anywhere, there is no need for it
+anywhere except in this unusual case.
+
+
+@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.
+* 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
+The s.o.p.@@: has three parts @dots{}
+The s.o.p. has three parts @dots{}
+@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{s.o.p.} in the second
+line.
+@end iftex
+
+@quotation
+The s.o.p.@: has three parts @dots{}@*
+The s.o.p. has three parts @dots{}
+@end quotation
+
+@noindent
+(Incidentally, @samp{s.o.p.} is an abbreviation for ``Standard Operating
+Procedure''.)
+
+@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 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. The commands with non-alphabetic names do not take
+braces around their argument (which is taken to be the next character).
+(Exception: @code{@@,} @emph{does} take braces around its argument.)
+This is so as to make the source as convenient to type and read as
+possible, since accented characters are very common in some languages.
+
+To get the true accented characters output in Info, and not just the
+ASCII transliterations, you can use the @option{--enable-encoding}
+option to @command{makeinfo} (@pxref{makeinfo options}).
+
+@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 {@@questiondown@{@}} {Output} {hacek/check/caron accent}
+@item 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 {x@@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 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 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
+
+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
+
+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
+
+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
+
+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 relatively recently. In plain
+Info, it is the word @samp{Euro }. (The space is included in the text
+transliteration since typically there would be no space 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).
+
+
+@node pounds
+@section @code{@@pounds}@{@} (@pounds{}): Pounds Sterling
+@findex pounds
+
+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 minus
+@section @code{@@minus}@{@} (@minus{}): Inserting a Minus Sign
+@findex minus
+
+@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 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
+
+Thus, the @code{@@math} command has no effect on the Info and HTML
+output; @command{makeinfo} just reproduces the input, it does not try
+to interpret the mathematics in any way.
+
+@code{@@math} implies @code{@@tex}. This not only makes it possible to
+write superscripts and subscripts (as in the above example), but also
+allows you to use any of the plain @TeX{} math control sequences. It's
+conventional to use @samp{\} instead of @samp{@@} for these commands.
+As in:
+@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'll 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 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.@refill
+
+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.
+* 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.
+@end table
+
+Info output is not hyphenated, so these commands have no effect there.
+
+
+@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 indenting manual. 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 function 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.
+
+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 specifed.
+
+@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 value
+
+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{cc}}: Set the Document Language
+
+@findex documentlanguage
+@cindex Language, declaring
+@cindex Document language, declaring
+
+The @code{@@documentlanguage} command declares the current document
+language. Write it on a line by itself, with a two-letter ISO-639
+language code following (list is included below). 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} for English.
+
+@cindex @file{txi-@var{cc}.tex}
+At present, this command is ignored in Info and HTML output. For
+@TeX{}, it causes the file @file{txi-@var{cc}.tex} to be read (if it
+exists). Such a file appropriately redefines the various English words
+used in @TeX{} output, such as `Chapter', `See', and so on.
+
+@cindex Hyphenation patterns, language-dependent
+It would be good if this command also changed @TeX{}'s ideas of the
+current hyphenation patterns (via the @TeX{} primitive
+@code{\language}), but this is unfortunately not currently implemented.
+
+@cindex ISO 639 codes
+@cindex Language codes
+Hereare the valid language codes, from ISO-639.
+
+@multitable @columnfractions .07 .26 .07 .26 .07 .26
+@item
+@code{aa} @tab Afar @tab
+@code{ab} @tab Abkhazian @tab
+@code{af} @tab Afrikaans
+@item
+@code{am} @tab Amharic @tab
+@code{ar} @tab Arabic @tab
+@code{as} @tab Assamese
+@item
+@code{ay} @tab Aymara @tab
+@code{az} @tab Azerbaijani @tab
+@code{ba} @tab Bashkir
+@item
+@code{be} @tab Byelorussian @tab
+@code{bg} @tab Bulgarian @tab
+@code{bh} @tab Bihari
+@item
+@code{bi} @tab Bislama @tab
+@code{bn} @tab Bengali; Bangla @tab
+@code{bo} @tab Tibetan
+@item
+@code{br} @tab Breton @tab
+@code{ca} @tab Catalan @tab
+@code{co} @tab Corsican
+@item
+@code{cs} @tab Czech @tab
+@code{cy} @tab Welsh @tab
+@code{da} @tab Danish
+@item
+@code{de} @tab German @tab
+@code{dz} @tab Bhutani @tab
+@code{el} @tab Greek
+@item
+@code{en} @tab English @tab
+@code{eo} @tab Esperanto @tab
+@code{es} @tab Spanish
+@item
+@code{et} @tab Estonian @tab
+@code{eu} @tab Basque @tab
+@code{fa} @tab Persian
+@item
+@code{fi} @tab Finnish @tab
+@code{fj} @tab Fiji @tab
+@code{fo} @tab Faroese
+@item
+@code{fr} @tab French @tab
+@code{fy} @tab Frisian @tab
+@code{ga} @tab Irish
+@item
+@code{gd} @tab Scots Gaelic @tab
+@code{gl} @tab Galician @tab
+@code{gn} @tab Guarani
+@item
+@code{gu} @tab Gujarati @tab
+@code{ha} @tab Hausa @tab
+@code{he} @tab Hebrew
+@item
+@code{hi} @tab Hindi @tab
+@code{hr} @tab Croatian @tab
+@code{hu} @tab Hungarian
+@item
+@code{hy} @tab Armenian @tab
+@code{ia} @tab Interlingua @tab
+@code{id} @tab Indonesian
+@item
+@code{ie} @tab Interlingue @tab
+@code{ik} @tab Inupiak @tab
+@code{is} @tab Icelandic
+@item
+@code{it} @tab Italian @tab
+@code{iu} @tab Inuktitut @tab
+@code{ja} @tab Japanese
+@item
+@code{jw} @tab Javanese @tab
+@code{ka} @tab Georgian @tab
+@code{kk} @tab Kazakh
+@item
+@code{kl} @tab Greenlandic @tab
+@code{km} @tab Cambodian @tab
+@code{kn} @tab Kannada
+@item
+@code{ks} @tab Kashmiri @tab
+@code{ko} @tab Korean @tab
+@code{ku} @tab Kurdish
+@item
+@code{ky} @tab Kirghiz @tab
+@code{la} @tab Latin @tab
+@code{ln} @tab Lingala
+@item
+@code{lt} @tab Lithuanian @tab
+@code{lo} @tab Laothian @tab
+@code{lv} @tab Latvian, Lettish
+@item
+@code{mg} @tab Malagasy @tab
+@code{mi} @tab Maori @tab
+@code{mk} @tab Macedonian
+@item
+@code{ml} @tab Malayalam @tab
+@code{mn} @tab Mongolian @tab
+@code{mo} @tab Moldavian
+@item
+@code{mr} @tab Marathi @tab
+@code{ms} @tab Malay @tab
+@code{mt} @tab Maltese
+@item
+@code{my} @tab Burmese @tab
+@code{na} @tab Nauru @tab
+@code{ne} @tab Nepali
+@item
+@code{nl} @tab Dutch @tab
+@code{no} @tab Norwegian @tab
+@code{oc} @tab Occitan
+@item
+@code{om} @tab (Afan) Oromo @tab
+@code{or} @tab Oriya @tab
+@code{pa} @tab Punjabi
+@item
+@code{pl} @tab Polish @tab
+@code{ps} @tab Pashto, Pushto @tab
+@code{pt} @tab Portuguese
+@item
+@code{qu} @tab Quechua @tab
+@code{rm} @tab Rhaeto-Romance @tab
+@code{rn} @tab Kirundi
+@item
+@code{ro} @tab Romanian @tab
+@code{ru} @tab Russian @tab
+@code{rw} @tab Kinyarwanda
+@item
+@code{sa} @tab Sanskrit @tab
+@code{sd} @tab Sindhi @tab
+@code{sg} @tab Sangro
+@item
+@code{sh} @tab Serbo-Croatian @tab
+@code{si} @tab Sinhalese @tab
+@code{sk} @tab Slovak
+@item
+@code{sl} @tab Slovenian @tab
+@code{sm} @tab Samoan @tab
+@code{sn} @tab Shona
+@item
+@code{so} @tab Somali @tab
+@code{sq} @tab Albanian @tab
+@code{sr} @tab Serbian
+@item
+@code{ss} @tab Siswati @tab
+@code{st} @tab Sesotho @tab
+@code{su} @tab Sundanese
+@item
+@code{sv} @tab Swedish @tab
+@code{sw} @tab Swahili @tab
+@code{ta} @tab Tamil
+@item
+@code{te} @tab Telugu @tab
+@code{tg} @tab Tajik @tab
+@code{th} @tab Thai
+@item
+@code{ti} @tab Tigrinya @tab
+@code{tk} @tab Turkmen @tab
+@code{tl} @tab Tagalog
+@item
+@code{tn} @tab Setswana @tab
+@code{to} @tab Tonga @tab
+@code{tr} @tab Turkish
+@item
+@code{ts} @tab Tsonga @tab
+@code{tt} @tab Tatar @tab
+@code{tw} @tab Twi
+@item
+@code{ug} @tab Uighur @tab
+@code{uk} @tab Ukrainian @tab
+@code{ur} @tab Urdu
+@item
+@code{uz} @tab Uzbek @tab
+@code{vi} @tab Vietnamese @tab
+@code{vo} @tab Volapuk
+@item
+@code{wo} @tab Wolof @tab
+@code{xh} @tab Xhosa @tab
+@code{yi} @tab Yiddish
+@item
+@code{yo} @tab Yoruba @tab
+@code{za} @tab Zhuang @tab
+@code{zh} @tab Chinese
+@item
+@code{zu} @tab Zulu
+@end multitable
+
+
+@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.
+
+At present, Texinfo supports only these encodings:
+
+@table @code
+@item US-ASCII
+This has no particular effect, but it's included for completeness.
+
+@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.
+
+A full description of the encodings is beyond our scope here;
+one useful reference is @uref{http://czyborra.com/charsets/iso8859.html}.
+@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, if the option @option{--enable-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
+
+@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 all other cases, it is recognized but ignored.
+
+
+@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
+@cindex Braces, in macro arguments
+To insert a comma, brace, or backslash in an argument, prepend a
+backslash, as in
+
+@example
+@@@var{macname} @{\\\@{\@}\,@}
+@end example
+
+@noindent
+which 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 pre-defined 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.
+
+Perhaps the most 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{}}).
+
+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}.
+
+@cindex @LaTeX{}, processing with @command{texi2dvi}
+@command{texi2dvi} can also be used to process @LaTeX{} files; simply
+run @samp{texi2dvi filename.ext}.
+
+@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}.
+
+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}).
+
+@pindex pdfcolor.tex@r{, installing}
+Likewise for @file{pdfcolor.tex}, if it is not already installed and you
+use pdftex.
+
+@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
+
+(@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}; this simply executes the
+@command{texi2dvi} script with the @option{--pdf} option
+(@pxref{Format with texi2dvi}). If for some reason you want to
+process 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.
+59 Temple Place Suite 330
+Boston, MA @ @ 02111-1307
+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.
+
+
+@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 --docbook
+@opindex --docbook
+Generate Docbook output rather than Info.
+
+@item --enable-encoding
+@opindex --enable-encoding
+Output accented and special characters in Info or plain text output
+based on @samp{@@documentencoding}.
+@xref{documentencoding,,@code{documentencoding}}, and @ref{Inserting Accents}.
+
+@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 --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 --reference-limit=@var{limit}
+@itemx -r @var{limit}
+@opindex --reference-limit=@var{limit}
+@opindex -r @var{limit}
+Set the value of the number of references to a node that
+@code{makeinfo} will make without reporting a warning. If a node has more
+than this number of references in it, @code{makeinfo} will make the
+references but also report a warning. The default is 1000.
+
+@item --split-size=@var{num}
+@opindex --split-size=@var{num}
+Keep Info files to at most @var{num} characters; default is 300,000.
+
+@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.
+
+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). 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 files, reading
+@cindex Dir files, compressed
+If any input file is compressed with @code{gzip} (@pxref{Invoking
+gzip,,,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}.
+
+Options:
+
+@table @code
+@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.
+
+@item --dir-file=@var{name}
+@itemx -d @var{name}
+@opindex --dir-file=@var{name}
+@opindex -d @var{name}
+Specify file name of the Info directory file. This is equivalent to
+using the @var{dir-file} argument.
+
+@item --entry=@var{text}
+@itemx -e @var{text}
+@opindex --entry=@var{text}
+@opindex -e @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
+@itemx -h
+@opindex --help
+@opindex -h
+Display a usage message listing basic usage and all available options,
+then exit successfully.
+
+@item --info-file=@var{file}
+@itemx -i @var{file}
+@opindex --info-file=@var{file}
+@opindex -i @var{file}
+Specify Info file to install in the directory.
+Equivalent to using the @var{info-file} argument.
+
+@item --info-dir=@var{dir}
+@itemx -D @var{dir}
+@opindex --info-dir=@var{dir}
+@opindex -D @var{dir}
+Specify the directory where the directory file @file{dir} resides.
+Equivalent to @samp{--dir-file=@var{dir}/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 --quiet
+@opindex --quiet
+Suppress warnings.
+
+@item --remove
+@itemx -r
+@opindex --remove
+@opindex -r
+Same as @samp{--delete}.
+
+@item --section=@var{sec}
+@itemx -s @var{sec}
+@opindex --section=@var{sec}
+@opindex -s @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.
+
+@item --version
+@itemx -V
+@opindex --version
+@opindex -V
+@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 the
+@option{--css-include=@var{file}} option to @command{makeinfo}. This
+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 each
+manual is either available as a monolithic file @file{manual.html}, or a
+split subdirectory @file{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} also 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}.
+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{@@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{@@minus} @tab U+2212
+@item @code{@@ordf} @tab U+00AA
+@item @code{@@ordm} @tab U+00BA
+@item @code{@@point} @tab U+2217
+@item @code{@@pounds} @tab U+00A3
+@item @code{@@print} @tab @samp{-|}
+@item @code{@@questiondown} @tab U+00BF
+@item @code{@@registeredsymbol} @tab U+00AE
+@item @code{@@result} @tab U+21D2
+@item @code{@@tie} @tab (space)
+@end multitable
+
+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
+
+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.)
+
+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 @@!
+Generate an exclamation point that really does end 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 really does end 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 @@:
+Indicate to @TeX{} that an immediately preceding period, question
+mark, exclamation mark, or colon does not end a sentence. Prevent
+@TeX{} from inserting extra whitespace as it does at the end of a
+sentence. The command has no effect on the Info file output.
+@xref{Not Ending a Sentence}.
+
+@item @@=
+Generate a macron (bar) accent over the next character, as in @=o.
+@xref{Inserting Accents}.
+
+@item @@?
+Generate a question mark that really does end 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}@}
+Tag @var{abbreviation} as an abbreviation, such as `Comput.'.
+@xref{abbr,, @code{abbr}}.
+
+@item @@acronym@{@var{acronym}@}
+Tag @var{acronym} as an acronym, 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}} an alias 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 of a printed manual. In Info, the title is
+underlined with asterisks. @xref{unnumbered & appendix, , The
+@code{@@unnumbered} and @code{@@appendix} Commands}.@refill
+
+@item @@appendixsec @var{title}
+@itemx @@appendixsection @var{title}
+Begin an appendix section within an appendix. The section title appears
+in the table of contents of a printed manual. 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}.@refill
+
+@item @@appendixsubsec @var{title}
+Begin an appendix subsection within an appendix. The title appears
+in the table of contents of a printed manual. In Info, the title is
+underlined with hyphens. @xref{unnumberedsubsec appendixsubsec
+subheading, , Subsection Commands}.@refill
+
+@item @@appendixsubsubsec @var{title}
+Begin an appendix subsubsection within an appendix subsection. The
+title appears in the table of contents of a printed manual. In Info,
+the title is underlined with periods. @xref{subsubsection,, The
+`subsub' Commands}.@refill
+
+@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, , Making a Two-column Table}.@refill
+
+@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}@}
+Print @var{text} in @b{bold} font. No effect in Info. @xref{Fonts}.@refill
+
+@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, or the closest possible
+thing to one. @xref{bullet, , @code{@@bullet}}.@refill
+
+@item @@bye
+Stop formatting a file. The formatters do not see the contents of a
+file following an @code{@@bye} command. @xref{Ending a File}.@refill
+
+@item @@c @var{comment}
+Begin a comment in Texinfo. The rest of the line does not appear in
+either the Info file or the printed manual. 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 a chapter-like heading in the text, but not in the table of
+contents of a printed manual. In Info, the title is underlined with
+asterisks. @xref{majorheading & chapheading, , @code{@@majorheading}
+and @code{@@chapheading}}.@refill
+
+@item @@chapter @var{title}
+Begin a chapter. The chapter title appears in the table of
+contents of a printed manual. In Info, the title is underlined with
+asterisks. @xref{chapter, , @code{@@chapter}}.@refill
+
+@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 lacks a
+companion Info file. @xref{cite, , @code{@@cite}}.@refill
+
+@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}@}
+Highlight text that is an expression, a syntactically complete token
+of a program, or a program name. @xref{code, , @code{@@code}}.@refill
+
+@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
+either the Info file or the printed manual. 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 @sc{ascii} control character. Insert actual control character
+into Info file. @xref{ctrl, , @code{@@ctrl}}.@refill
+@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}.@refill
+
+@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},
+Create new @@-command @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}
+This command formats 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. The command is 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. The
+command is equivalent to @samp{@@defop Method @dots{}}. Takes as
+arguments the name of the class of the method, the name of the
+method, and its arguments, if any. @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 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. @xref{Definition
+Commands}, and @ref{Abstract Objects}.
+
+@item @@defopt @var{option-name}
+@itemx @@defoptx @var{option-name}
+Format a description for a user option. The command is 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. The command is 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. @code{@@deftp} takes as arguments
+the category, the name of the type (which is a word like @samp{int} or
+@samp{float}), 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{classification} @var{data-type} @var{name} @var{arguments}@dots{}
+@itemx @@deftypefnx @var{classification} @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
+classification 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{classification} @var{data-type} @var{name}
+@itemx @@deftypevrx @var{classification} @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
+classification 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 functions. The command is 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 variables. The command is 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
+Avoid @code{makeinfo} confusion stemming from the detailed node listing
+in a master menu. @xref{Master Menu Parts}.
+
+@item @@dfn@{@var{term}@}
+Highlight the introductory or defining use of a term.
+@xref{dfn, , @code{@@dfn}}.@refill
+
+@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@{@}
+Insert 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}@}
+Highlight @var{text}; text is displayed in @emph{italics} in printed
+output, and surrounded by 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 of 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}.@refill
+
+@item @@example
+Begin an example. Indent text, do not fill, and select fixed-width font.
+Pair with @code{@@end example}. @xref{example, ,
+@code{@@example}}.@refill
+
+@item @@exampleindent @var{indent}
+Indent example-like environments by @var{indent} number of spaces
+(perhaps 0). @xref{exampleindent,, Paragraph Indenting}.
+
+@item @@exclamdown@{@}
+Produce 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, or directory. @xref{file, ,
+@code{@@file}}.@refill
+
+@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
+Left justify every line but leave the right end ragged.
+Leave font as is. Pair with @code{@@end flushleft}.
+@code{@@flushright} analogous.
+@xref{flushleft & flushright, , @code{@@flushleft} and
+@code{@@flushright}}.@refill
+
+@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}.@refill
+
+@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}.@refill
+
+@item @@format
+Begin a kind of example. Like @code{@@display}, but do not narrow the
+margins. 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 @@group
+Hold text together that must appear on one printed page. Pair with
+@code{@@end group}. Not relevant to Info. @xref{group, ,
+@code{@@group}}.@refill
+
+@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 in the text, but not in the
+table of contents of a printed manual. In Info, the title is
+underlined with equal signs. @xref{unnumberedsec appendixsec heading,
+, Section Commands}.@refill
+
+@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 @@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}@}
+Print @var{text} in @i{italic} font. No effect in Info. @xref{Fonts}.
+
+@item @@ifclear @var{flag}
+If @var{flag} is cleared, the Texinfo formatting commands format text
+between @code{@@ifclear @var{flag}} and the following @code{@@end
+ifclear} command.
+@xref{set clear value, , @code{@@set} @code{@@clear} @code{@@value}}.@refill
+
+@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 @@ifnotinfo
+@itemx @@ifnotplaintext
+@itemx @@ifnottex
+@itemx @@ifnotxml
+Begin a stretch of text that will be ignored in one output format but
+not the others. The text appears in the formats not specified:
+@code{@@ifnothtml} text is omitted from html output, etc. The exception
+is @code{@@ifnotinfo} text, which is omitted from plain text output as
+well as Info output. Pair with the corresponding @code{@@end
+ifnot@var{format}}. @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{flag}
+If @var{flag} is set, the Texinfo formatting commands format text
+between @code{@@ifset @var{flag}} and the following @code{@@end ifset}
+command.
+@xref{set clear value, , @code{@@set} @code{@@clear} @code{@@value}}.@refill
+
+@item @@iftex
+Begin text that will not appear in the Info file or other output, but
+will be processed only by @TeX{}. 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}
+Incorporate the contents of the file @var{filename} into the Info file
+or printed document. @xref{Include Files}.@refill
+
+@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}.@refill
+
+@item @@itemize @var{mark-generating-character-or-command}
+Produce a sequence of indented paragraphs, with a mark inside the left
+margin at the beginning of each paragraph. Pair with @code{@@end
+itemize}. @xref{itemize, , @code{@@itemize}}.@refill
+
+@item @@itemx
+Like @code{@@item} but do not generate extra vertical space above the
+item text. @xref{itemx, , @code{@@itemx}}.@refill
+
+@item @@kbd@{@var{keyboard-characters}@}
+Indicate text that is characters of input to be typed by
+users. @xref{kbd, , @code{@@kbd}}.@refill
+
+@item @@kbdinputstyle @var{style}
+Specify when @code{@@kbd} should use a font distinct from @code{@@code}.
+@xref{kbd, , @code{@@kbd}}.@refill
+
+@item @@key@{@var{key-name}@}
+Indicate a name for a key on a keyboard.
+@xref{key, , @code{@@key}}.@refill
+
+@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@{@}
+Insert the logo @LaTeX{}. @xref{tex, , @TeX{} and @LaTeX{}}.
+
+@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}@}}.
+Only supported by @code{makeinfo} and @code{texi2dvi}. @xref{Defining
+Macros}.
+
+@item @@majorheading @var{title}
+Print a chapter-like heading in the text, but not in the table of
+contents of a printed manual. Generate more vertical whitespace before
+the heading than the @code{@@chapheading} command. @xref{majorheading &
+chapheading, , @code{@@majorheading} and @code{@@chapheading}}.@refill
+
+@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 in Info. No effect in a printed
+manual. Pair with @code{@@end menu}. @xref{Menus}.@refill
+
+@item @@minus@{@}
+Generate a minus sign, `@minus{}'. @xref{minus, , @code{@@minus}}.@refill
+
+@item @@multitable @var{column-width-spec}
+Begin a multi-column table. 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}}.@refill
+
+@item @@node @var{name}, @var{next}, @var{previous}, @var{up}
+Define the beginning of a new node in Info, and serve as a locator for
+references for @TeX{}. @xref{node, , @code{@@node}}.@refill
+
+@item @@noindent
+Prevent text from being indented as if it were a new paragraph.
+@xref{noindent, , @code{@@noindent}}.@refill
+
+@item @@novalidate
+Suppress validation of node references, 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}
+Print an alphabetized two-column index in a printed manual or generate
+an alphabetized menu of index entries for Info. @xref{Printing
+Indices & Menus}.@refill
+
+@item @@pxref@{@var{node-name}, [@var{entry}], [@var{topic-or-title}], [@var{info-file}], [@var{manual}]@}
+Make a reference that starts with a lower case `see' in a printed
+manual. Use within parentheses only. Do not follow command with a
+punctuation mark---the Info formatting commands automatically insert
+terminating punctuation as needed. Only the first argument is mandatory.
+@xref{pxref, , @code{@@pxref}}.@refill
+
+@item @@questiondown@{@}
+Generate an upside-down question mark. @xref{Inserting Accents}.
+
+@item @@quotation
+Narrow the margins to indicate text that is quoted from another real
+or imaginary work. Takes optional argument of prefix text. Pair with
+@code{@@end quotation}. @xref{quotation, ,
+@code{@@quotation}}.@refill
+
+@item @@r@{@var{text}@}
+Print @var{text} in @r{roman} font. No effect in Info.
+@xref{Fonts}.@refill
+
+@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-name}, [@var{entry}], [@var{topic-or-title}], [@var{info-file}], [@var{manual}]@}
+Make a reference. In a printed manual, the reference does not start
+with a `See'. Follow command with a punctuation mark. Only the first
+argument is mandatory. @xref{ref, , @code{@@ref}}.@refill
+
+@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}@}
+Highlight @var{text} that is a literal example of a sequence of
+characters. Used for single characters, for statements, and often for
+entire shell commands. @xref{samp, , @code{@@samp}}.@refill
+
+@item @@sansserif@{@var{text}@}
+Print @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 printed output in @sc{the small caps font} and
+set text in the Info file in uppercase letters.
+@xref{Smallcaps}.@refill
+
+@item @@section @var{title}
+Begin a section within a chapter. In a printed manual, the section
+title is numbered and appears in the table of contents. In Info, the
+title is underlined with equal signs. @xref{section, ,
+@code{@@section}}.@refill
+
+@item @@set @var{flag} [@var{string}]
+Make @var{flag} active, causing the Texinfo formatting commands to
+format text between subsequent pairs of @code{@@ifset @var{flag}} and
+@code{@@end ifset} commands. Optionally, set value of @var{flag} to
+@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 not there. @xref{Contents}.
+
+@item @@setfilename @var{info-file-name}
+Provide a name to be used by the Info file. This command is essential
+for @TeX{} formatting as well, even though it produces no output.
+@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 not there.
+@xref{Contents}.
+
+@item @@settitle @var{title}
+Provide a title for page headers in a printed manual, and the default
+document description for HTML @samp{<head>}.
+@xref{settitle, , @code{@@settitle}}.@refill
+
+@item @@shortcaption
+Define the short caption for a @code{@@float}. @xref{caption shortcaption}.
+
+@item @@shortcontents
+Print a short table of contents. Not relevant to Info, which uses
+menus rather than tables of contents. A synonym for
+@code{@@summarycontents}. @xref{Contents, , Generating a Table of
+Contents}.@refill
+
+@item @@shorttitlepage @var{title}
+Generate a minimal title page. @xref{titlepage,,@code{@@titlepage}}.
+
+@item @@slanted@{@var{text}@}
+Print @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
+Indent text to indicate an example. Do not fill, select fixed-width
+font, narrow the margins. In printed manuals, 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} by typesetting it in a @strong{bold} font for the
+printed manual and by surrounding it with asterisks for Info.
+@xref{emph & strong, , Emphasizing Text}.@refill
+
+@item @@subheading @var{title}
+Print an unnumbered subsection-like heading in the text, but not in
+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}}.@refill
+
+@item @@subsection @var{title}
+Begin a subsection within a section. In a printed manual, the
+subsection title is numbered and appears in the table of contents. In
+Info, the title is underlined with hyphens. @xref{subsection, ,
+@code{@@subsection}}.@refill
+
+@item @@subsubheading @var{title}
+Print an unnumbered subsubsection-like heading in the text, but not in
+the table of contents of a printed manual. In Info, the title is
+underlined with periods. @xref{subsubsection, , The `subsub'
+Commands}.@refill
+
+@item @@subsubsection @var{title}
+Begin a subsubsection within a subsection. In a printed manual,
+the subsubsection title is numbered and appears in the table of
+contents. In Info, the title is underlined with periods.
+@xref{subsubsection, , The `subsub' Commands}.@refill
+
+@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}.@refill
+
+@item @@summarycontents
+Print a short table of contents. Not relevant to Info, which uses
+menus rather than tables of contents. A synonym for
+@code{@@shortcontents}. @xref{Contents, , Generating a Table of
+Contents}.@refill
+
+@item @@syncodeindex @var{from-index} @var{into-index}
+Merge the index named in the first argument into the index named in
+the second argument, printing the entries from the first index in
+@code{@@code} font. @xref{Combining Indices}.@refill
+
+@item @@synindex @var{from-index} @var{into-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}.@refill
+
+@item @@t@{@var{text}@}
+Print @var{text} in a @t{fixed-width}, typewriter-like font.
+No effect in Info. @xref{Fonts}.@refill
+
+@item @@tab
+Separate columns in a multitable. @xref{Multitable Rows}.
+
+@item @@table @var{formatting-command}
+Begin a two-column table, 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}}.@refill
+
+@item @@TeX@{@}
+Insert the logo @TeX{}. @xref{tex, , @TeX{} and @LaTeX{}}.
+
+@item @@tex
+Enter @TeX{} completely. Pair with @code{@@end tex}. @xref{Raw
+Formatter Commands}.
+
+@item @@thischapter
+@itemx @@thischaptername
+@itemx @@thisfile
+@itemx @@thispage
+@itemx @@thistitle
+Only allowed in a heading or footing. Stands for the number and name of
+the current chapter (in the format `Chapter 1: Title'), the chapter name
+only, the filename, the current page number, and the title of the
+document, respectively. @xref{Custom Headings, , How to Make Your Own
+Headings}.@refill
+
+@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.
+Not relevant to Info, which does not have title pages.
+@xref{titlefont center sp, , The @code{@@titlefont} @code{@@center}
+and @code{@@sp} Commands}.@refill
+
+@item @@titlepage
+Indicate to Texinfo the beginning of the title page. Write command on
+a line of its own. Pair 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}
+In a Texinfo file to be formatted with @code{makeinfo}, identify the
+topmost @code{@@node} in the file, which must be written on the line
+immediately preceding the @code{@@top} command. Used for
+@code{makeinfo}'s node pointer insertion feature. The title is
+underlined with asterisks. Both the @code{@@node} line and the @code{@@top}
+line normally should be enclosed by @code{@@ifnottex} and @code{@@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}
+In a printed manual, begin a chapter that appears without chapter
+numbers of any kind. The title appears in the table of contents of a
+printed manual. In Info, the title is underlined with asterisks.
+@xref{unnumbered & appendix, , @code{@@unnumbered} and
+@code{@@appendix}}.@refill
+
+@item @@unnumberedsec @var{title}
+In a printed manual, 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}.@refill
+
+@item @@unnumberedsubsec @var{title}
+In a printed manual, begin an unnumbered subsection within a
+chapter. The title appears in 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}}.@refill
+
+@item @@unnumberedsubsubsec @var{title}
+In a printed manual, begin an unnumbered subsubsection within a
+chapter. The title appears in the table of contents of a printed
+manual. In Info, the title is underlined with periods.
+@xref{subsubsection, , The `subsub' Commands}.@refill
+
+@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 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{flag}@}
+Replace @var{flag} with the value to which it is set by @code{@@set
+@var{flag}}.
+@xref{set clear value, , @code{@@set} @code{@@clear} @code{@@value}}.@refill
+
+@item @@var@{@var{metasyntactic-variable}@}
+Highlight a metasyntactic variable, which is something that stands for
+another piece of text. @xref{var, , Indicating Metasyntactic
+Variables}.@refill
+
+@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}@}
+Prevent @var{text} from being split across two lines.
+@xref{w, , @code{@@w}}.@refill
+
+@item @@xml
+Enter XML completely. Pair with @code{@@end xml}. @xref{Raw
+Formatter Commands}.
+
+@item @@xref@{@var{node-name}, [@var{entry}], [@var{topic-or-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}}.@refill
+@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, and never take any
+argument. The two characters (@@ and the other one) are complete in
+themselves; none is followed by braces. The non-alphabetic commands
+are: @code{@@.}, @code{@@:}, @code{@@*}, @code{@@@kbd{SPACE}},
+@code{@@@kbd{TAB}}, @code{@@@kbd{NL}}, @code{@@@@}, @code{@@@{}, and
+@code{@@@}}.@refill
+
+@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 (C) 2004 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 (see rcsintro(1)) version control
+systems, which expand it into a string such as:
+@example
+$Id: texinfo.txi,v 1.128 2004/12/29 15:06:41 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$}.
+
+@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 your manual has invariant sections (again, see the license itself for
+details), then don't forget to 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.128 2004/12/29 15:06:41 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{} 2004 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.1 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 freedom to copy and modify
+this GNU Manual, like GNU software. Copies published by the Free
+Software Foundation raise funds for GNU development.''
+@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
+
+@insertcopying
+@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 Copying This Manual
+@appendix Copying This Manual
+
+@menu
+* GNU Free Documentation License:: License for copying this manual.
+@end menu
+
+@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{} 2004 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{} 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.
+@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.@refill
+
+@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:@refill
+
+@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.@refill
+
+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.@refill
+
+@need 950
+Here are the six heading and footing commands:@refill
+
+@findex everyheading
+@findex everyfooting
+@table @code
+@item @@everyheading @var{left} @@| @var{center} @@| @var{right}
+@itemx @@everyfooting @var{left} @@| @var{center} @@| @var{right}
+
+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.@refill
+
+@findex evenheading
+@findex evenfooting
+@findex oddheading
+@findex oddfooting
+@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}
+
+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.@refill
+
+@need 1000
+Here are the @samp{@@this@dots{}} commands:@refill
+
+@table @code
+@findex thispage
+@item @@thispage
+Expands to the current page number.@refill
+@c !!! Karl Berry says that `thissection' can fail on page breaks.
+@ignore
+@item @@thissection
+Expands to the name of the current section.@refill
+@end ignore
+
+@findex thischaptername
+@item @@thischaptername
+Expands to the name of the current chapter.@refill
+
+@findex thischapter
+@item @@thischapter
+Expands to the number and name of the current
+chapter, in the format `Chapter 1: Title'.@refill
+
+@findex thistitle
+@item @@thistitle
+Expands to the name of the document, as specified by the
+@code{@@settitle} command.@refill
+
+@findex thisfile
+@item @@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.)@refill
+@end table
+
+@noindent
+You can also use the @code{@@today@{@}} command, which expands to the
+current date, in `1 Jan 1900' format.@refill
+@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:@refill
+
+@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.@refill
+
+
+@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.
+
+@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 Copying This Manual
+@appendix Copying This Manual
+
+@menu
+* GNU Free Documentation License:: License for copying this manual.
+@end menu
+
+@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 Concept Index
+@unnumbered Concept Index
+
+@printindex cp
+
+
+@bye
diff --git a/macros/texinfo/contrib/texinfo-hu/texinfo/doc/txi-cs.tex b/macros/texinfo/contrib/texinfo-hu/texinfo/doc/txi-cs.tex
new file mode 100644
index 0000000000..cdbc3c0d22
--- /dev/null
+++ b/macros/texinfo/contrib/texinfo-hu/texinfo/doc/txi-cs.tex
@@ -0,0 +1,74 @@
+% $Id: txi-cs.tex,v 1.3 2004/04/11 17:56:45 karl Exp $
+% Czech translation for texinfo.tex.
+%
+% Copyright (C) 1999, 2000 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 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., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
+%
+\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/macros/texinfo/contrib/texinfo-hu/texinfo/doc/txi-de.tex b/macros/texinfo/contrib/texinfo-hu/texinfo/doc/txi-de.tex
new file mode 100644
index 0000000000..f3726c3677
--- /dev/null
+++ b/macros/texinfo/contrib/texinfo-hu/texinfo/doc/txi-de.tex
@@ -0,0 +1,79 @@
+% txi-de.tex -- adaptation to German for texinfo.tex.
+% $Id: txi-de.tex,v 1.3 2004/04/11 17:56:45 karl Exp $
+%
+% Copyright (C) 1999 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., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
+%
+% 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/macros/texinfo/contrib/texinfo-hu/texinfo/doc/txi-en.tex b/macros/texinfo/contrib/texinfo-hu/texinfo/doc/txi-en.tex
new file mode 100644
index 0000000000..721c49a49f
--- /dev/null
+++ b/macros/texinfo/contrib/texinfo-hu/texinfo/doc/txi-en.tex
@@ -0,0 +1,69 @@
+% 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.3 2004/04/11 17:56:45 karl Exp $
+%
+% Copyright (C) 1999 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 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., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
+
+\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/macros/texinfo/contrib/texinfo-hu/texinfo/doc/txi-es.tex b/macros/texinfo/contrib/texinfo-hu/texinfo/doc/txi-es.tex
new file mode 100644
index 0000000000..334e2d1e10
--- /dev/null
+++ b/macros/texinfo/contrib/texinfo-hu/texinfo/doc/txi-es.tex
@@ -0,0 +1,58 @@
+% txi-es.tex -- TeX macros to handle Spanish language documents.
+%
+% Copyright (C) 1999 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 2, 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.
+%
+
+%
+% 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/macros/texinfo/contrib/texinfo-hu/texinfo/doc/txi-fr.tex b/macros/texinfo/contrib/texinfo-hu/texinfo/doc/txi-fr.tex
new file mode 100644
index 0000000000..0a83f04ac0
--- /dev/null
+++ b/macros/texinfo/contrib/texinfo-hu/texinfo/doc/txi-fr.tex
@@ -0,0 +1,73 @@
+% txi-fr.tex -- TeX macros to handle French language for texinfo.tex documents.
+% $Id: txi-fr.tex,v 1.3 2004/04/11 17:56:45 karl Exp $
+%
+% Copyright (C) 1999 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 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., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
+
+% 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/macros/texinfo/contrib/texinfo-hu/texinfo/doc/txi-hu.tex b/macros/texinfo/contrib/texinfo-hu/texinfo/doc/txi-hu.tex
new file mode 100644
index 0000000000..60db05a296
--- /dev/null
+++ b/macros/texinfo/contrib/texinfo-hu/texinfo/doc/txi-hu.tex
@@ -0,0 +1,454 @@
+% Hungarian (magyar) TEX macro definitions for texinfo.tex.
+% This is read when a source document says: @documentlanguage hu
+%
+% $Id: txi-en.tex,v 1.01. 2007/05/04 20:50:59 vozarik Exp $
+% mailto: Lajos Vozaarik, techn@toolstyle.hu
+%
+% Copyright (C) 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 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., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
+%%%
+%%% Preface
+%%% Hungarian language NOT an simple and easy language. Include numerous
+%%% exceptions, agglutinations and archaic.
+%%% The full language is an expection, i think.
+%%% I'm adding numerous macros and rewritten some parts to easier working.
+%%%
+%%% Comments: %%% it is my comment, % it is original...
+
+\def\txi_hu_version{1.01. }
+\message{^^J Loading txi-hu [version v. \txi_hu_version],}
+%%% User defined hyphenation
+\message{hyphenation,}
+\include huhyp.tex
+%%%
+%%% Dotless i and dotless j macros, used for accents.
+%%% Correctly working, but _not_ tested with all cmXXX-fonts.
+%%% If don't working with Your cmXXX-font, please drop me a line.
+%%% For accessing long i, simple type @'@{i}   la TeX...,
+%%% it is ONE easy way moving text from TeX to texinfo and vice versa.
+%%% Example:
+%%% @tex
+%%% Put here (or inputting) Your Hungarian accented TeX-text,
+%%% without texinfo conversion.
+%%% color = sz\'\{i}n
+%%% colours = sz\'\{i}nek
+%%% hearth = sz\'\{i}v, etc.
+%%% @end tex
+%%%
+\gdef\imacro{\char16{}}
+\gdef\jmacro{\char17{}}
+%%% undefining \i macro. Unnfortunatelly, texinfo use this macro for
+%%% formatting, and \imacro don't ToC-ing...
+\gdef\i{\relax}
+\global\chardef\i="10 \chardef\j="11 % dotless letters
+%%%
+%%% rm-re elfogad6o, de tt-re nem. :-(((
+%%%
+%%%\gdef\"#1{\hbox{\leavevmode\kern.03em
+%%% \raise-.2ex\hbox{\char127{}}
+%%% \kern-.85em\lower.0ex\hbox{#1}}}
+%%%
+\message{fixed words,}
+%%%
+%%% Set up fixed words for Hungarian (magyar) language.
+%%%
+\gdef\putwordAppendix{\appendixname}
+\gdef\putwordChapter{fejezet}
+\gdef\putwordDefmac{Makr\'o}
+\gdef\putwordDefopt{Felhaszn\'al\'oi opci\'o}
+\gdef\putwordDeffunc{Funkci\'o}
+\gdef\putwordDefspec{Speci\'alis forma}
+\gdef\putwordDefvar{V\'altoz\'o}
+\gdef\putwordEquation{k\'eplet}
+\gdef\putwordfile{f\'ajl}
+\gdef\putwordIndexIsEmpty{(\"Ures index)}
+\gdef\putwordIndexNonexistent{(Neml\'etez\H{o} index)}
+\def\putwordInfo{Info}
+\gdef\putwordNoTitle{Nincs c\'\i{}m}
+\gdef\putwordpage{oldal}
+\gdef\putwordsection{r\'esz}
+\gdef\putwordSection{r\'esz}
+\gdef\putwordsee{l\'asd }
+\gdef\putwordSee{L\'asd }
+\gdef\putwordseeAlso{l. m\'eg: }
+\gdef\putwordTOC{Tartalomjegyz\'ek}
+\gdef\putwordShortTOC{\'Attekint\'es}
+%%%
+\gdef\abstractname{Kivonat}
+%%% for example: 2. fggel‚k
+\gdef\appendixname{f\"uggel\'ek}
+%%% if exist only one: Fggel‚k
+\gdef\Appendixname{F\"uggel\'ek}
+\gdef\bibname{Irodalom}
+\gdef\Bibname{Irodalomjegyz\'ek}
+\gdef\docsize{A dokument\'aci\'o terjedelme:}
+%%% for example: 2. mell‚klet
+\gdef\enclname{mell\'eklet}
+%%% if exist only one: Mell‚klet
+\gdef\Enclname{Mell\'eklet}
+\gdef\figurename{\'abra}
+\gdef\figures{\'Abr\'ak}
+\gdef\glossname{Kislexikon}
+\gdef\introname{Bevezet\'es}
+\gdef\proofname{Bizony\'\i{}t\'as}
+\gdef\headtoname{C\'\i{}mzett}
+\gdef\indexname{T\'argymutat\'o}
+\gdef\listfigurename{\'Abr\'ak jegyz\'eke}
+\gdef\listtablename{T\'abl\'azatok jegyz\'eke}
+\gdef\prefacename{El\H osz\'o}
+\gdef\refname{Hivatkoz\'asok}
+\gdef\tablename{t\'abl\'azat}
+%%%
+%%% untranslated def`s -- next time Gadget, next time...
+%%%
+\gdef\putwordin{in}
+\gdef\putwordInstanceVariableof{Instance Variable of}
+\gdef\putwordMethodon{Method on}
+\gdef\putwordof{of}
+\gdef\putwordon{on}
+%%%
+\message{date and time stamp,}
+%%%
+%%% Translation between numbers and characters
+%%%
+\gdef\arabic#1{\ifnum #1 > 0 \number #1 \fi} %%% Ki¡r s arab sz mmal
+\gdef\roman#1{\romannumeral #1} %%% Ki¡r s kisbet–s r¢mai sz mmal
+\gdef\Roman#1{\expandafter %%% Ki¡r s nagybet–s
+ \uppercase %%% r¢mai sz mmal
+ \expandafter{\romannumeral #1}}
+%%%
+%%% 1--26-ig kis/nagybet–vel ¡r. alph{1}==a; Alph{1}==A
+\gdef\alph#1{\ifcase#1\or a\or b\or c\or d\or e\or f\or g\or h\or i\or j\or
+ k\or l\or m\or n\or o\or p\or q\or r\or s\or t\or u\or v\or w\or x\or y\or
+ z\fi}
+\gdef\Alph#1{\ifcase#1\or A\or B\or C\or D\or E\or F\or G\or H\or I\or J\or
+ K\or L\or M\or N\or O\or P\or Q\or R\or S\or T\or U\or V\or W\or X\or Y\or
+ Z\fi}
+%%%
+%%% Traditional Hungarian date notation
+%%% 4-04-07 == 2007. IV. 4.
+%%%
+\gdef\hudate{ %%% Mai d tum
+ \number\year.
+ \Roman{\number\month.}
+ %%% \space %%% A pont ut n tenne
+ \ifcase\day\or
+ 1.\or 2.\or 3.\or 4.\or 5.\or
+ 6.\or 7.\or 8.\or 9.\or 10.\or
+ 11.\or 12.\or 13.\or 14.\or 15.\or
+ 16.\or 17.\or 18.\or 19.\or 20.\or
+ 21.\or 22.\or 23.\or 24.\or 25.\or
+ 26.\or 27.\or 28.\or 29.\or 30.\or
+ 31.\fi
+}
+%%%
+%%% first word/or title ONLY, otherwise lowercase
+%%%
+\gdef\putwordMJan{Janu\'ar}
+\gdef\putwordMFeb{Febru\'ar}
+\gdef\putwordMMar{M\'arcius}
+\gdef\putwordMApr{\'Aprilis}
+\gdef\putwordMMay{M\'ajus}
+\gdef\putwordMJun{J\'unius}
+\gdef\putwordMJul{J\'ulius}
+\gdef\putwordMAug{Augusztus}
+\gdef\putwordMSep{Szeptember}
+\gdef\putwordMOct{Okt\'ober}
+\gdef\putwordMNov{November}
+\gdef\putwordMDec{December}
+%%%
+%%% Date stamp
+%%% Produces y-m-d style of output.
+%%% 4-05-07 == 2007. m\'ajus 4.
+%%%
+\gdef\Today{\number\year. \ifcase\month\or % Mai d tum
+ janu\'ar\or febru\'ar\or m\'arcius\or
+ \'aprilis\or m\'ajus\or j\'unius\or
+ j\'ulius\or augusztus\or szeptember\or
+ okt\'ober\or november\or december\fi
+ \space\ifcase\day\or
+ 1.\or 2.\or 3.\or 4.\or 5.\or
+ 6.\or 7.\or 8.\or 9.\or 10.\or
+ 11.\or 12.\or 13.\or 14.\or 15.\or
+ 16.\or 17.\or 18.\or 19.\or 20.\or
+ 21.\or 22.\or 23.\or 24.\or 25.\or
+ 26.\or 27.\or 28.\or 29.\or 30.\or
+ 31.\fi}
+%%%
+%%% Letter style date stamp
+%%% 4-05-07 == 2007. m\'ajus 4-\'en
+%%% example:
+%%% Best regars, anonymus. Bodega-bay, 2007. m\'ajus 4-\'en
+%%%
+\gdef\ondate{ %%% (Kelt) ... -‚n, - n
+ \number\year. \ifcase\month\or
+ janu\'ar\or febru\'ar\or m\'arcius\or
+ \'aprilis\or m\'ajus\or j\'unius\or
+ j\'ulius\or augusztus\or szeptember\or
+ okt\'ober\or november\or december\fi
+ \space\ifcase\day\or
+ 1-j\'en\or 2-\'an\or 3-\'an\or 4-\'en\or 5-\'en\or
+ 6-\'an\or 7-\'en\or 8-\'an\or 9-\'en\or 10-\'en\or
+ 11-\'en\or 12-\'en\or 13-\'an\or 14-\'en\or 15-\'en\or
+ 16-\'an\or 17-\'en\or 18-\'an\or 19-\'en\or 20-\'an\or
+ 21-\'en\or 22-\'en\or 23-\'an\or 24-\'en\or 25-\'en\or
+ 26-\'an\or 27-\'en\or 28-\'an\or 29-\'en\or 30-\'an\or
+ 31-\'en\fi}
+%%%
+%%% Uncomment only one line, please.
+\gdef\today{\hudate}
+%%% \gdef\today{\ondate}
+%%% \gdef\today{\Today}
+%%%
+%%% Patch & new macros
+%%%
+%%% en dash for correct Hungarian notation
+%%% en dash, magyar hi. szt.-i gondolatjel
+\gdef\ndash{\thinspace{--}\hskip.16667em\relax}
+%%%
+\newwrite \captionfile
+%%% writing captions to file, MUST be opening via @opencaption macro.
+%%% T bl zatok jegyz‚ke, ki¡r s f jlba, neked KELL megnyitnod.
+%%%
+\gdef\opencaption{\openout \captionfile = \jobname.cap}
+%%%
+%%% autonumbering captions, Hungarian notation
+%%% Automatikus t bl zatsz moz s ,,1. t bl zat'' form ban
+%%%
+\newcount\TblNo \TblNo=1
+\gdef\tblnum{\global\advance \TblNo by 1\it{\the\TblNo. \tablename}}
+%%%
+%%% T bl zat c¡mk‚z‚se
+%%% Bug1: b rhol van a t bl zat a lapon, akkor is k”z‚pre teszi a feliratot.
+%%% K”z”s dobozba kell tenni “ket.
+%%%
+%%% bug1: don't aligning caption text
+%%% reparing: vbox{ table and hucaption}
+%%%
+%%% Bug2: a t bl zat ‚s a t bl zatok jegyz‚ke nem lehet k”z”s lapon.
+%%% bug2: table and list_of_tables don't existing in the same page.
+%%% reparing: using @page macro between table and list_of_table
+%%%
+%%% captioning
+\gdef\hucaption#1{
+ \gdef\temp{{\realbackslash captentry {\the\TblNo}{#1}{\folio}}}
+ \escapechar=`\@
+ \write\captionfile \temp
+ \smallskip
+ \centerline{\tblnum: \ii{#1}}
+}
+%%% caption entry #1 = id, #2 = name, #3 = pno.
+\gdef\captentry#1#2#3{\line{#1.\tablename:\thinspace#2\dotfill #3}}
+%%%
+%%% T bl zatok jegyz‚k‚nek feldolgoz sa.
+%%% Read caption entries from file.
+\newskip\contentsrightmargin \contentsrightmargin=1in
+\gdef\startcaptions#1{
+ \immediate\closeout \captionfile
+ \chapmacro{#1}{Ynothing}{\the\unnumberedno}
+ \begingroup
+ \catcode`\\=0 \catcode`\{=1 \catcode`\}=2 \catcode`\@=11
+ \catcode`\^=7
+ \raggedbottom
+ \advance\hsize by -\contentsrightmargin
+}
+%%%
+%%% T bl zatok jegyz‚k‚nek visszaolvas sa (mint a .toc eset‚ben)
+%%% start reading, similar to .toc-file
+%%%
+\gdef\listcaptions{
+ \startcaptions{\listtablename}
+ \input \jobname.cap
+ \endgroup
+ \vfill \eject
+}
+%%%
+\gdef\captentry#1#2#3{\line{#1. \tablename\thinspace{:} #2 \dotfill #3}}
+%%%
+%%% Ha nem irjuk ki mindet.1‚bk‚nt aut. becsuk¢dik
+%%% if don't writing all entries,
+%%% otherwise @startcaption macro automatically close it
+%%%
+\gdef\closecaptions#1{\immediate\closeout \captionfile}
+%%%
+%%%
+\message{chapter and section defs.,}
+%%% Chapter defs.
+%%%
+%%% Patch for Hungarian language ONLY
+%%%
+%%% in English Hungarian notation
+%%% ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+%%% Chapter 1 --> 1. fejezet
+%%% Appendix A --> A f\"{u}ggel\'ek, but 1. f\"{u}ggel\'ek
+\gdef\unnumbered #1{
+ \def\toctype{unnchap}
+ \gdef\thischapter{}
+ \chapheading{#1}
+ \writetocentry{\toctype}{#1}{\folio}
+ %%% \message{^^J #1}
+}
+%%%
+\global\secno=0
+\global\subsecno=0
+\global\subsubsecno=0
+\global\chapno=0
+%%%
+\gdef\chapterzzz #1{
+ \global\secno=0
+ \global\subsecno=0
+ \global\subsubsecno=0
+ \global\advance\chapno by 1
+ \gdef\thischapter{\the\chapno. \putwordChapter}
+ \gdef\chaplevelprefix{\the\chapno.}
+ \resetallfloatnos
+ \message{^^J\the\chapno. \putwordChapter}
+ \chapmacro{#1}{Ynumbered}{\the\chapno.}
+}
+%%%
+\gdef\chapmacro#1#2#3{%
+ \pchapsepmacro
+ {%
+ \chapfonts \rm
+ %
+ % Have to define \thissection 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\thissection{#1}%
+ \gdef\thischaptername{#1}%
+ %
+ % Only insert the separating space if we have a chapter/appendix
+ % number, and don't print the unnumbered ``number''.
+ \def\temptype{#2}%
+ \ifx\temptype\Ynothingkeyword
+ \setbox0 = \hbox{}%
+ \def\toctype{unnchap}%
+ \gdef\thischapternum{}%
+ \gdef\thischapter{#1}%
+ \else\ifx\temptype\Yomitfromtockeyword
+ \setbox0 = \hbox{}% contents like unnumbered, but no toc entry
+ \def\toctype{omit}%
+ \gdef\thischapternum{}%
+ \gdef\thischapter{}%
+ \else\ifx\temptype\Yappendixkeyword
+ \setbox0 = \hbox{#3\space\putwordAppendix{}:\enspace}%
+ \def\toctype{app}%
+ \xdef\thischapternum{\appendixletter}%
+ % We don't substitute the actual chapter name into \thischapter
+ % because we don't want its macros evaluated now. And we don't
+ % use \thissection because that changes with each section.
+ %
+ \gdef\thischapter{\appendixletter \putwordAppendix{}:
+ \noexpand\thischaptername}%
+ \else
+ \setbox0 = \hbox{#3\enspace}%
+ \def\toctype{numchap}%
+ \def\thischapternum{\the\chapno}%
+ \gdef\thischapter{\the\chapno{}. \putwordChapter{}: #1}%
+ \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.
+ \vbox{\hyphenpenalty=10000 \tolerance=5000 \parindent=0pt \raggedright
+ \hangindent=\wd0 \centerparametersmaybe
+ \unhbox0 #1\par}%
+ }%
+ \nobreak\bigskip % no page break after a chapter title
+ \nobreak
+}
+%%%
+%%% Lettered appendix = A. fggel‚k: Blahblahh
+%%% ONLY ONE Appendix: @unnumbered @putwordAppendix
+%%%
+\gdef\appendixzzz #1{
+ \global\chapno=0
+ \global\secno=0
+ \global\subsecno=0
+ \global\subsubsecno=0
+ \global\advance\appendixno by 1
+ \gdef\chaplevelprefix{\appendixletter}
+ \gdef\thischapter{\chaplevelprefix.\space\putwordAppendix}
+ \resetallfloatnos
+ \message{^^J\appendixletter.\space fuggelek}
+ \chapmacro{#1}{Yappendix}{\appendixletter.}
+}
+%%%
+%%% A._f\"{u}ggel\'ek (or unused 1._f\"{u}ggel\'ek, )
+%%% changed order
+%%%
+\gdef\appendixbox#1{%
+ \setbox0 = \hbox{M \putwordAppendix{}}%
+ \hbox to \wd0{#1\space\putwordAppendix{}\hss}}
+%%%
+%%% dotted sections: 1.1._Title
+%%%
+\gdef\seczzz#1{%
+ \global\subsecno=0 \global\subsubsecno=0 \global\advance\secno by 1
+ \sectionheading{#1}{sec}{Ynumbered}{\the\chapno.\the\secno.}%
+}
+%%%
+%%% appendixsec: B.1._Title
+%%%
+\gdef\appendixsectionzzz#1{%
+ \global\subsecno=0 \global\subsubsecno=0 \global\advance\secno by 1
+ \sectionheading{#1}{sec}{Yappendix}{\appendixletter.\the\secno.}%
+}
+%%%
+%%% subsections: 1.1.1._Subtitle
+%%%
+\gdef\numberedsubseczzz#1{%
+ \global\subsubsecno=0 \global\advance\subsecno by 1
+ \sectionheading{#1}{subsec}{Ynumbered}{\the\chapno.\the\secno.\the\subsecno.}%
+}
+%%%
+%%% appendixsubsec: B.1.1._Subtitle
+%%%
+\gdef\appendixsubseczzz#1{%
+ \global\subsubsecno=0 \global\advance\subsecno by 1
+ \sectionheading{#1}{subsec}{Yappendix}%
+ {\appendixletter.\the\secno.\the\subsecno.}%
+}
+%%%
+%%% subsubsections: 1.1.1.1._Subsubtitle
+%%%
+\gdef\numberedsubsubseczzz#1{%
+ \global\advance\subsubsecno by 1
+ \sectionheading{#1}{subsubsec}{Ynumbered}%
+ {\the\chapno.\the\secno.\the\subsecno.\the\subsubsecno.}%
+}
+%%%
+%%% appendixsubsubsec: B.1.1.1._Subsubtitle
+%%%
+\def\appendixsubsubseczzz#1{%
+ \global\advance\subsubsecno by 1
+ \sectionheading{#1}{subsubsec}{Yappendix}%
+ {\appendixletter.\the\secno.\the\subsecno.\the\subsubsecno.}%
+}
+\message{ ...done.^^J The current Language is: Hungarian.^^J}
+%%%
+%%% /* eof */ %%%
+%%% \ No newline at end of file
diff --git a/macros/texinfo/contrib/texinfo-hu/texinfo/doc/txi-it.tex b/macros/texinfo/contrib/texinfo-hu/texinfo/doc/txi-it.tex
new file mode 100644
index 0000000000..28e51eaa3f
--- /dev/null
+++ b/macros/texinfo/contrib/texinfo-hu/texinfo/doc/txi-it.tex
@@ -0,0 +1,69 @@
+% 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.3 2004/04/11 17:56:45 karl Exp $
+%
+% Copyright (C) 1999 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 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., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
+
+\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/macros/texinfo/contrib/texinfo-hu/texinfo/doc/txi-nl.tex b/macros/texinfo/contrib/texinfo-hu/texinfo/doc/txi-nl.tex
new file mode 100644
index 0000000000..aab69f7ecb
--- /dev/null
+++ b/macros/texinfo/contrib/texinfo-hu/texinfo/doc/txi-nl.tex
@@ -0,0 +1,68 @@
+% Dutch translation for texinfo.tex.
+% $Id: txi-nl.tex,v 1.3 2004/04/11 17:56:45 karl Exp $
+%
+% Copyright (C) 1999 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 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., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
+
+% 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/macros/texinfo/contrib/texinfo-hu/texinfo/doc/txi-no.tex b/macros/texinfo/contrib/texinfo-hu/texinfo/doc/txi-no.tex
new file mode 100644
index 0000000000..a4e589382e
--- /dev/null
+++ b/macros/texinfo/contrib/texinfo-hu/texinfo/doc/txi-no.tex
@@ -0,0 +1,69 @@
+% 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 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 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., 59 Temple Place - Suite 330, Boston,
+% MA 02111-1307, USA.
+%
+\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/macros/texinfo/contrib/texinfo-hu/texinfo/doc/txi-pl.tex b/macros/texinfo/contrib/texinfo-hu/texinfo/doc/txi-pl.tex
new file mode 100644
index 0000000000..b5895a2942
--- /dev/null
+++ b/macros/texinfo/contrib/texinfo-hu/texinfo/doc/txi-pl.tex
@@ -0,0 +1,73 @@
+% txi-pl.tex -- adaptation to Polish for texinfo.tex.
+% $Id: txi-pl.tex,v 1.3 2004/04/11 17:56:45 karl Exp $
+%
+% Copyright (C) 2003 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 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., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
+%
+% Written by Wojciech Polak <polak@gnu.org> on 29-03-2003.
+% Modified by Staszek Wawrykiewicz <staw@gust.org.pl> on 01-04-2003.
+%
+\prefixing
+\gdef\putwordAppendix{Suplement}
+\gdef\putwordChapter{Rozdzia/l}
+\gdef\putwordfile{plik}
+\gdef\putwordin{w}
+\gdef\putwordIndexIsEmpty{(Skorowidz jest pusty)}
+\gdef\putwordIndexNonexistent{(Brak skorowidza)}
+\gdef\putwordInfo{Info}
+\gdef\putwordInstanceVariableof{Przyk/ladowa zmienna}
+\gdef\putwordMethodon{Metoda}
+\gdef\putwordNoTitle{Brak tytu/lu}
+\gdef\putwordof{z}
+\gdef\putwordon{na}
+\gdef\putwordpage{strona}
+\gdef\putwordsection{cz/e/s/c}
+\gdef\putwordSection{Cz/e/s/c}
+\gdef\putwordsee{zobacz}
+\gdef\putwordSee{Zobacz}
+\gdef\putwordShortTOC{Kr/otka zawarto/s/c}
+\gdef\putwordTOC{Spis tre/sci}
+%
+\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/snia}
+\gdef\putwordMOct{pa/xdziernika}
+\gdef\putwordMNov{listopada}
+\gdef\putwordMDec{grudnia}
+%
+\gdef\putwordDefmac{Makro}
+\gdef\putwordDefspec{Specjalna forma}
+\gdef\putwordDefvar{Zmienna}
+\gdef\putwordDefopt{Opcja u/zytkownika}
+\gdef\putwordDeffunc{Funkcja}
+\nonprefixing
+%
+% 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/macros/texinfo/contrib/texinfo-hu/texinfo/doc/txi-pt.tex b/macros/texinfo/contrib/texinfo-hu/texinfo/doc/txi-pt.tex
new file mode 100644
index 0000000000..c65bc5e1d5
--- /dev/null
+++ b/macros/texinfo/contrib/texinfo-hu/texinfo/doc/txi-pt.tex
@@ -0,0 +1,69 @@
+% txi-pt.tex -- adaptation to Portuguese for texinfo.tex.
+%
+% Copyright (C) 1999 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., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
+%
+% 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/macros/texinfo/contrib/texinfo-hu/texinfo/doc/txi-tr.tex b/macros/texinfo/contrib/texinfo-hu/texinfo/doc/txi-tr.tex
new file mode 100644
index 0000000000..eafba9f984
--- /dev/null
+++ b/macros/texinfo/contrib/texinfo-hu/texinfo/doc/txi-tr.tex
@@ -0,0 +1,82 @@
+% txi-en.tex -- adaptation to Turkish for texinfo.tex.
+% $Id: txi-tr.tex,v 1.3 2004/04/11 17:56:45 karl Exp $
+%
+% Copyright (C) 2003 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., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
+%
+% 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/macros/texinfo/contrib/texinfo-hu/texinfo/doc/version-stnd.texi b/macros/texinfo/contrib/texinfo-hu/texinfo/doc/version-stnd.texi
new file mode 100644
index 0000000000..32973a788b
--- /dev/null
+++ b/macros/texinfo/contrib/texinfo-hu/texinfo/doc/version-stnd.texi
@@ -0,0 +1,4 @@
+@set UPDATED 14 December 2004
+@set UPDATED-MONTH December 2004
+@set EDITION 4.8
+@set VERSION 4.8
diff --git a/macros/texinfo/contrib/texinfo-hu/texinfo/doc/version.texi b/macros/texinfo/contrib/texinfo-hu/texinfo/doc/version.texi
new file mode 100644
index 0000000000..ae55f879d4
--- /dev/null
+++ b/macros/texinfo/contrib/texinfo-hu/texinfo/doc/version.texi
@@ -0,0 +1,4 @@
+@set UPDATED 29 December 2004
+@set UPDATED-MONTH December 2004
+@set EDITION 4.8
+@set VERSION 4.8
diff --git a/macros/texinfo/contrib/texinfo-hu/texinfo/info/Makefile.am b/macros/texinfo/contrib/texinfo-hu/texinfo/info/Makefile.am
new file mode 100644
index 0000000000..176f5939a5
--- /dev/null
+++ b/macros/texinfo/contrib/texinfo-hu/texinfo/info/Makefile.am
@@ -0,0 +1,74 @@
+# $Id: Makefile.am,v 1.8 2004/10/28 14:03:27 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
+
+# -I. for funs.h.
+# Automake puts -I.. and -I$(srcdir) into DEFS by default, but
+# we need to override it, so include them ourselves.
+INCLUDES = -I. -I$(top_srcdir)/lib -I../intl -I.. -I$(srcdir)
+DEFS += -DLOCALEDIR=\"$(localedir)\" -DINFODIR=\"$(infodir)\" \
+ -DINFODIR2=\"$(infodir2)\"
+LDADD = ../lib/libtxi.a $(TERMLIBS) $(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.
+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
+
+# The $(EXEEXT) should be added by Automake, but isn't. Fine.
+$(generated_sources): 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/macros/texinfo/contrib/texinfo-hu/texinfo/info/Makefile.in b/macros/texinfo/contrib/texinfo-hu/texinfo/info/Makefile.in
new file mode 100644
index 0000000000..56fc64f82e
--- /dev/null
+++ b/macros/texinfo/contrib/texinfo-hu/texinfo/info/Makefile.in
@@ -0,0 +1,584 @@
+# Makefile.in generated by automake 1.9.4 from Makefile.am.
+# @configure_input@
+
+# Copyright (C) 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002,
+# 2003, 2004 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.8 2004/10/28 14:03:27 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.
+
+SOURCES = $(ginfo_SOURCES) $(nodist_ginfo_SOURCES) $(infokey_SOURCES) $(nodist_infokey_SOURCES) $(makedoc_SOURCES)
+
+srcdir = @srcdir@
+top_srcdir = @top_srcdir@
+VPATH = @srcdir@
+pkgdatadir = $(datadir)/@PACKAGE@
+pkglibdir = $(libdir)/@PACKAGE@
+pkgincludedir = $(includedir)/@PACKAGE@
+top_builddir = ..
+am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd
+INSTALL = @INSTALL@
+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)/m4/codeset.m4 \
+ $(top_srcdir)/m4/gettext.m4 $(top_srcdir)/m4/glibc21.m4 \
+ $(top_srcdir)/m4/iconv.m4 $(top_srcdir)/m4/intdiv0.m4 \
+ $(top_srcdir)/m4/intmax.m4 $(top_srcdir)/m4/inttypes-pri.m4 \
+ $(top_srcdir)/m4/inttypes.m4 $(top_srcdir)/m4/inttypes_h.m4 \
+ $(top_srcdir)/m4/lcmessage.m4 $(top_srcdir)/m4/lib-ld.m4 \
+ $(top_srcdir)/m4/lib-link.m4 $(top_srcdir)/m4/lib-prefix.m4 \
+ $(top_srcdir)/m4/longdouble.m4 $(top_srcdir)/m4/longlong.m4 \
+ $(top_srcdir)/m4/mkstemp.m4 $(top_srcdir)/m4/nls.m4 \
+ $(top_srcdir)/m4/onceonly_2_57.m4 $(top_srcdir)/m4/po.m4 \
+ $(top_srcdir)/m4/printf-posix.m4 $(top_srcdir)/m4/progtest.m4 \
+ $(top_srcdir)/m4/signed.m4 $(top_srcdir)/m4/size_max.m4 \
+ $(top_srcdir)/m4/stdint_h.m4 $(top_srcdir)/m4/strcase.m4 \
+ $(top_srcdir)/m4/uintmax_t.m4 $(top_srcdir)/m4/ulonglong.m4 \
+ $(top_srcdir)/m4/wchar_t.m4 $(top_srcdir)/m4/wint_t.m4 \
+ $(top_srcdir)/m4/xsize.m4 $(top_srcdir)/configure.ac
+am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \
+ $(ACLOCAL_M4)
+mkinstalldirs = $(SHELL) $(top_srcdir)/mkinstalldirs
+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 $(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_LDADD = $(LDADD)
+infokey_DEPENDENCIES = ../lib/libtxi.a $(am__DEPENDENCIES_1) \
+ $(am__DEPENDENCIES_1)
+am_makedoc_OBJECTS = makedoc.$(OBJEXT)
+makedoc_OBJECTS = $(am_makedoc_OBJECTS)
+makedoc_LDADD = $(LDADD)
+makedoc_DEPENDENCIES = ../lib/libtxi.a $(am__DEPENDENCIES_1) \
+ $(am__DEPENDENCIES_1)
+DEFAULT_INCLUDES = -I. -I$(srcdir) -I$(top_builddir)
+depcomp = $(SHELL) $(top_srcdir)/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@
+AMDEP_FALSE = @AMDEP_FALSE@
+AMDEP_TRUE = @AMDEP_TRUE@
+AMTAR = @AMTAR@
+AUTOCONF = @AUTOCONF@
+AUTOHEADER = @AUTOHEADER@
+AUTOMAKE = @AUTOMAKE@
+AWK = @AWK@
+BUILD_INCLUDED_LIBINTL = @BUILD_INCLUDED_LIBINTL@
+CATOBJEXT = @CATOBJEXT@
+CC = @CC@
+CCDEPMODE = @CCDEPMODE@
+CFLAGS = @CFLAGS@
+CPP = @CPP@
+CPPFLAGS = @CPPFLAGS@
+CYGPATH_W = @CYGPATH_W@
+DATADIRNAME = @DATADIRNAME@
+DEFS = @DEFS@ -DLOCALEDIR=\"$(localedir)\" -DINFODIR=\"$(infodir)\" \
+ -DINFODIR2=\"$(infodir2)\"
+DEPDIR = @DEPDIR@
+ECHO_C = @ECHO_C@
+ECHO_N = @ECHO_N@
+ECHO_T = @ECHO_T@
+EGREP = @EGREP@
+EXEEXT = @EXEEXT@
+GENCAT = @GENCAT@
+GLIBC21 = @GLIBC21@
+GMSGFMT = @GMSGFMT@
+HAVE_ASPRINTF = @HAVE_ASPRINTF@
+HAVE_POSIX_PRINTF = @HAVE_POSIX_PRINTF@
+HAVE_SNPRINTF = @HAVE_SNPRINTF@
+HAVE_WPRINTF = @HAVE_WPRINTF@
+HELP2MAN = @HELP2MAN@
+INSTALL_DATA = @INSTALL_DATA@
+INSTALL_PROGRAM = @INSTALL_PROGRAM@
+INSTALL_SCRIPT = @INSTALL_SCRIPT@
+INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@
+INSTALL_WARNINGS_FALSE = @INSTALL_WARNINGS_FALSE@
+INSTALL_WARNINGS_TRUE = @INSTALL_WARNINGS_TRUE@
+INSTOBJEXT = @INSTOBJEXT@
+INTLBISON = @INTLBISON@
+INTLLIBS = @INTLLIBS@
+INTLOBJS = @INTLOBJS@
+INTL_LIBTOOL_SUFFIX_PREFIX = @INTL_LIBTOOL_SUFFIX_PREFIX@
+LDFLAGS = @LDFLAGS@
+LIBICONV = @LIBICONV@
+LIBINTL = @LIBINTL@
+LIBOBJS = @LIBOBJS@
+LIBS = @LIBS@
+LTLIBICONV = @LTLIBICONV@
+LTLIBINTL = @LTLIBINTL@
+LTLIBOBJS = @LTLIBOBJS@
+MAINT = @MAINT@
+MAINTAINER_MODE_FALSE = @MAINTAINER_MODE_FALSE@
+MAINTAINER_MODE_TRUE = @MAINTAINER_MODE_TRUE@
+MAKEINFO = @MAKEINFO@
+MKINSTALLDIRS = @MKINSTALLDIRS@
+MSGFMT = @MSGFMT@
+MSGMERGE = @MSGMERGE@
+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@
+RANLIB = @RANLIB@
+SET_MAKE = @SET_MAKE@
+SHELL = @SHELL@
+STRIP = @STRIP@
+TERMLIBS = @TERMLIBS@
+TOOLS_ONLY_FALSE = @TOOLS_ONLY_FALSE@
+TOOLS_ONLY_TRUE = @TOOLS_ONLY_TRUE@
+USE_INCLUDED_LIBINTL = @USE_INCLUDED_LIBINTL@
+USE_NLS = @USE_NLS@
+VERSION = @VERSION@
+XGETTEXT = @XGETTEXT@
+ac_ct_CC = @ac_ct_CC@
+ac_ct_RANLIB = @ac_ct_RANLIB@
+ac_ct_STRIP = @ac_ct_STRIP@
+am__fastdepCC_FALSE = @am__fastdepCC_FALSE@
+am__fastdepCC_TRUE = @am__fastdepCC_TRUE@
+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@
+datadir = @datadir@
+exec_prefix = @exec_prefix@
+host = @host@
+host_alias = @host_alias@
+host_cpu = @host_cpu@
+host_os = @host_os@
+host_vendor = @host_vendor@
+includedir = @includedir@
+infodir = @infodir@
+install_sh = @install_sh@
+libdir = @libdir@
+libexecdir = @libexecdir@
+localstatedir = @localstatedir@
+mandir = @mandir@
+mkdir_p = @mkdir_p@
+native_tools = @native_tools@
+oldincludedir = @oldincludedir@
+prefix = @prefix@
+program_transform_name = @program_transform_name@
+sbindir = @sbindir@
+sharedstatedir = @sharedstatedir@
+sysconfdir = @sysconfdir@
+target_alias = @target_alias@
+localedir = $(datadir)/locale
+infodir2 = $(datadir)/info
+
+# -I. for funs.h.
+# Automake puts -I.. and -I$(srcdir) into DEFS by default, but
+# we need to override it, so include them ourselves.
+INCLUDES = -I. -I$(top_srcdir)/lib -I../intl -I.. -I$(srcdir)
+LDADD = ../lib/libtxi.a $(TERMLIBS) $(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_LDFLAGS) $(ginfo_OBJECTS) $(ginfo_LDADD) $(LIBS)
+infokey$(EXEEXT): $(infokey_OBJECTS) $(infokey_DEPENDENCIES)
+ @rm -f infokey$(EXEEXT)
+ $(LINK) $(infokey_LDFLAGS) $(infokey_OBJECTS) $(infokey_LDADD) $(LIBS)
+makedoc$(EXEEXT): $(makedoc_OBJECTS) $(makedoc_DEPENDENCIES)
+ @rm -f makedoc$(EXEEXT)
+ $(LINK) $(makedoc_LDFLAGS) $(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@ if $(COMPILE) -MT $@ -MD -MP -MF "$(DEPDIR)/$*.Tpo" -c -o $@ $<; \
+@am__fastdepCC_TRUE@ then mv -f "$(DEPDIR)/$*.Tpo" "$(DEPDIR)/$*.Po"; else rm -f "$(DEPDIR)/$*.Tpo"; exit 1; fi
+@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@ if $(COMPILE) -MT $@ -MD -MP -MF "$(DEPDIR)/$*.Tpo" -c -o $@ `$(CYGPATH_W) '$<'`; \
+@am__fastdepCC_TRUE@ then mv -f "$(DEPDIR)/$*.Tpo" "$(DEPDIR)/$*.Po"; else rm -f "$(DEPDIR)/$*.Tpo"; exit 1; fi
+@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) '$<'`
+uninstall-info-am:
+
+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; } \
+ END { 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; } \
+ END { 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=; \
+ 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; } \
+ END { 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)'; for file in $$list; do \
+ case $$file in \
+ $(srcdir)/*) file=`echo "$$file" | sed "s|^$$srcdirstrip/||"`;; \
+ $(top_srcdir)/*) file=`echo "$$file" | sed "s|^$$topsrcdirstrip/|$(top_builddir)/|"`;; \
+ esac; \
+ if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \
+ dir=`echo "$$file" | sed -e 's,/[^/]*$$,,'`; \
+ if test "$$dir" != "$$file" && test "$$dir" != "."; then \
+ dir="/$$dir"; \
+ $(mkdir_p) "$(distdir)$$dir"; \
+ else \
+ dir=''; \
+ fi; \
+ if test -d $$d/$$file; then \
+ 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-exec-am: install-binPROGRAMS
+
+install-info: install-info-am
+
+install-man:
+
+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-info-am
+
+.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-exec \
+ install-exec-am install-info install-info-am install-man \
+ 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-info-am
+
+
+# We need a linear ordering to prevent race condition in parallel make.
+# See the node ``(automake)Multiple Outputs'' for an explanation.
+doc.c: key.c
+key.c: funs.h
+
+# The $(EXEEXT) should be added by Automake, but isn't. Fine.
+$(generated_sources): 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/macros/texinfo/contrib/texinfo-hu/texinfo/info/README b/macros/texinfo/contrib/texinfo-hu/texinfo/info/README
new file mode 100644
index 0000000000..4178a0107e
--- /dev/null
+++ b/macros/texinfo/contrib/texinfo-hu/texinfo/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/macros/texinfo/contrib/texinfo-hu/texinfo/info/dir.c b/macros/texinfo/contrib/texinfo-hu/texinfo/info/dir.c
new file mode 100644
index 0000000000..98061dfdfa
--- /dev/null
+++ b/macros/texinfo/contrib/texinfo-hu/texinfo/info/dir.c
@@ -0,0 +1,290 @@
+/* dir.c -- how to build a special "dir" node from "localdir" files.
+ $Id: dir.c,v 1.3 2004/04/11 17:56:45 karl Exp $
+
+ Copyright (C) 1993, 1997, 1998, 2004 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., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
+
+ 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", (char *)NULL
+};
+
+
+/* Return zero if the file represented in the stat structure TEST has
+ already been seen, nonzero else. */
+
+typedef struct
+{
+ unsigned long device;
+ unsigned long 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 = (char *)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/macros/texinfo/contrib/texinfo-hu/texinfo/info/display.c b/macros/texinfo/contrib/texinfo-hu/texinfo/info/display.c
new file mode 100644
index 0000000000..1a9fd0a9ae
--- /dev/null
+++ b/macros/texinfo/contrib/texinfo-hu/texinfo/info/display.c
@@ -0,0 +1,646 @@
+/* display.c -- How to display Info windows.
+ $Id: display.c,v 1.7 2004/04/11 17:56:45 karl Exp $
+
+ Copyright (C) 1993, 1997, 2003, 2004 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., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
+
+ 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 = (DISPLAY_LINE **)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);
+}
+
+/* Display WIN on the_display. Unlike display_update_display (), this
+ function only does one window. */
+void
+display_update_one_window (WINDOW *win)
+{
+ register char *nodetext; /* Current character to display. */
+ register char *last_node_char; /* Position of the last character in node. */
+ register int i; /* General use index. */
+ char *printed_line; /* Buffer for a printed line. */
+ int pl_index = 0; /* Index into PRINTED_LINE. */
+ int line_index = 0; /* Number of lines done so far. */
+ int pl_ignore = 0; /* How many chars use zero width on screen. */
+ int allocated_win_width;
+ 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. */
+ if (!win->height || 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;
+
+ /* 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 = (char *)xmalloc (allocated_win_width);
+
+ if (!win->node || !win->line_starts)
+ goto done_with_node_display;
+
+ nodetext = win->line_starts[win->pagetop];
+ last_node_char = win->node->contents + win->node->nodelen;
+
+ for (; nodetext < last_node_char; nodetext++)
+ {
+ char *rep = NULL, *rep_carried_over, rep_temp[2];
+ int replen;
+
+ if (isprint (*nodetext))
+ {
+ rep_temp[0] = *nodetext;
+ replen = 1;
+ rep_temp[1] = '\0';
+ rep = rep_temp;
+ }
+ else
+ {
+ if (*nodetext == '\r' || *nodetext == '\n')
+ {
+ replen = win->width - pl_index + pl_ignore;
+ }
+ else if (*nodetext == '\0'
+ && (nodetext + 2) < last_node_char
+ && *(nodetext + 1) == '\b'
+ && *(nodetext + 2) == '[')
+ {
+ /* Found new style tag/cookie \0\b[
+ Read until the closing tag \0\b] */
+ int element_len = 0;
+ char *element;
+
+ /* Skip the escapes. */
+ nodetext += 3;
+
+ while (!(*nodetext == '\0'
+ && *(nodetext + 1) == '\b'
+ && *(nodetext + 2) == ']'))
+ {
+ nodetext++;
+ element_len++;
+ }
+
+ element = (char *) malloc (element_len + 1);
+ strncpy (element, nodetext - element_len, element_len);
+
+ /* Skip the escapes. */
+ nodetext += 2;
+ pl_ignore += element_len + 5;
+ /* Append string terminator. */
+ element[element_len] = '\0';
+
+ handle_tag (element);
+
+ /* Over and out */
+ free (element);
+
+ continue;
+ }
+ else
+ {
+ rep = printed_representation (*nodetext, pl_index);
+ replen = strlen (rep);
+ }
+ }
+
+ /* Support ANSI escape sequences under -R. */
+ if (raw_escapes_p
+ && *nodetext == '\033'
+ && nodetext[1] == '['
+ && isdigit (nodetext[2]))
+ {
+ if (nodetext[3] == 'm')
+ pl_ignore += 4;
+ else if (isdigit (nodetext[3]) && nodetext[4] == 'm')
+ pl_ignore += 5;
+ }
+ while (pl_index + 2 >= allocated_win_width - 1)
+ {
+ allocated_win_width *= 2;
+ printed_line = (char *)xrealloc (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 (replen + pl_index < win->width + pl_ignore)
+ {
+ /* Optimize if possible. */
+ if (replen == 1)
+ {
+ printed_line[pl_index++] = *rep;
+ }
+ else
+ {
+ for (i = 0; i < replen; i++)
+ printed_line[pl_index++] = rep[i];
+ }
+ }
+ else
+ {
+ DISPLAY_LINE *entry;
+
+ /* 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 (*nodetext == '\n' || *nodetext == '\r' || *nodetext == '\t')
+ {
+ printed_line[pl_index] = '\0';
+ rep_carried_over = (char *)NULL;
+ }
+ else
+ {
+ /* The printed representation of this character extends into
+ the next line. 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_index < (win->width + pl_ignore - 1);)
+ printed_line[pl_index++] = rep[i++];
+
+ rep_carried_over = rep + i;
+
+ /* 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++] = '\\';
+ }
+ printed_line[pl_index] = '\0';
+ }
+
+ /* 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. */
+ entry = display[line_index + win->first_row];
+
+ /* 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 && entry->inverse)
+ /* Need to erase the line if it has escape sequences. */
+ || (raw_escapes_p && strchr (entry->text, '\033') != 0))
+ {
+ terminal_goto_xy (0, line_index + win->first_row);
+ terminal_clear_to_eol ();
+ entry->inverse = 0;
+ entry->text[0] = '\0';
+ entry->textlen = 0;
+ }
+
+ /* Find the offset where these lines differ. */
+ for (i = 0; i < pl_index; i++)
+ if (printed_line[i] != entry->text[i])
+ break;
+
+ /* If the lines are not the same length, or if they differed
+ at all, we must do some redrawing. */
+ if ((i != pl_index) || (pl_index != entry->textlen))
+ {
+ /* Move to the proper point on the terminal. */
+ terminal_goto_xy (i, line_index + win->first_row);
+
+ /* If there is any text to print, print it. */
+ if (i != pl_index)
+ 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_index < win->width + pl_ignore
+ && pl_index < 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 if we are under -R and there are escape
+ sequences in it. However, entry->text was
+ allocated (in display_initialize_display) for
+ screenwidth characters only. */
+ entry->text = xrealloc (entry->text, strlen (printed_line)+1);
+ strcpy (entry->text + i, printed_line + i);
+ entry->textlen = pl_index;
+
+ /* Lines showing node text are not in inverse. Only modelines
+ have that distinction. */
+ entry->inverse = 0;
+ }
+
+ /* We have done at least one line. Increment our screen line
+ index, and check against the bottom of the window. */
+ if (++line_index == win->height)
+ break;
+
+ /* 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 ())
+ {
+ free (printed_line);
+ display_was_interrupted_p = 1;
+ return;
+ }
+
+ /* Reset PL_INDEX to the start of the line. */
+ pl_index = 0;
+ pl_ignore = 0; /* this is computed per line */
+
+ /* If there are characters from REP left to print, stuff them
+ into the buffer now. */
+ if (rep_carried_over)
+ for (; rep[pl_index]; pl_index++)
+ printed_line[pl_index] = rep[pl_index];
+
+ /* 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))
+ {
+ char *begin;
+
+ pl_index = 0;
+ printed_line[0] = '\0';
+
+ begin = nodetext;
+
+ while ((nodetext < last_node_char) && (*nodetext != '\n'))
+ nodetext++;
+ }
+ }
+ }
+
+ done_with_node_display:
+ /* 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[line_index + win->first_row];
+
+ /* 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, line_index + win->first_row);
+ 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) == 0)
+ {
+ 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);
+ }
+ }
+
+ /* Okay, this window doesn't need updating anymore. */
+ win->flags &= ~W_UpdateWindow;
+ free (printed_line);
+ fflush (stdout);
+}
+
+/* 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 = (DISPLAY_LINE **)xmalloc ((1 + height) * sizeof (DISPLAY_LINE *));
+
+ for (i = 0; i < height; i++)
+ {
+ display[i] = (DISPLAY_LINE *)xmalloc (sizeof (DISPLAY_LINE));
+ display[i]->text = (char *)xmalloc (1 + width);
+ display[i]->textlen = 0;
+ display[i]->inverse = 0;
+ }
+ display[i] = (DISPLAY_LINE *)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/macros/texinfo/contrib/texinfo-hu/texinfo/info/display.h b/macros/texinfo/contrib/texinfo-hu/texinfo/info/display.h
new file mode 100644
index 0000000000..286db293ee
--- /dev/null
+++ b/macros/texinfo/contrib/texinfo-hu/texinfo/info/display.h
@@ -0,0 +1,78 @@
+/* display.h -- How the display in Info is done.
+ $Id: display.h,v 1.3 2004/04/11 17:56:45 karl Exp $
+
+ This file is part of GNU Info, a program for reading online documentation
+ stored in Info format.
+
+ Copyright (C) 1993, 1997, 2004 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., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
+
+ 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);
+
+#endif /* not INFO_DISPLAY_H */
diff --git a/macros/texinfo/contrib/texinfo-hu/texinfo/info/doc.h b/macros/texinfo/contrib/texinfo-hu/texinfo/info/doc.h
new file mode 100644
index 0000000000..9315e8adc3
--- /dev/null
+++ b/macros/texinfo/contrib/texinfo-hu/texinfo/info/doc.h
@@ -0,0 +1,103 @@
+/* doc.h -- Structures associating function pointers with documentation.
+ $Id: doc.h,v 1.3 2004/04/11 17:56:45 karl Exp $
+
+ Copyright (C) 1993, 2001, 2004 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., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
+
+ 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 (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/macros/texinfo/contrib/texinfo-hu/texinfo/info/dribble.c b/macros/texinfo/contrib/texinfo-hu/texinfo/info/dribble.c
new file mode 100644
index 0000000000..d456319366
--- /dev/null
+++ b/macros/texinfo/contrib/texinfo-hu/texinfo/info/dribble.c
@@ -0,0 +1,68 @@
+/* dribble.c -- dribble files for Info.
+ $Id: dribble.c,v 1.3 2004/04/11 17:56:45 karl Exp $
+
+ Copyright (C) 1993, 1998, 2004 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., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
+
+ 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 = (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, (char *)NULL, 1);
+# else
+ setvbuf (info_dribble_file, (char *)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 = (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/macros/texinfo/contrib/texinfo-hu/texinfo/info/dribble.h b/macros/texinfo/contrib/texinfo-hu/texinfo/info/dribble.h
new file mode 100644
index 0000000000..f30f2040d8
--- /dev/null
+++ b/macros/texinfo/contrib/texinfo-hu/texinfo/info/dribble.h
@@ -0,0 +1,41 @@
+/* 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 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., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
+
+ 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/macros/texinfo/contrib/texinfo-hu/texinfo/info/echo-area.c b/macros/texinfo/contrib/texinfo-hu/texinfo/info/echo-area.c
new file mode 100644
index 0000000000..31385c88a3
--- /dev/null
+++ b/macros/texinfo/contrib/texinfo-hu/texinfo/info/echo-area.c
@@ -0,0 +1,1524 @@
+/* echo-area.c -- how to read a line in the echo area.
+ $Id: echo-area.c,v 1.7 2004/12/14 00:15:36 karl Exp $
+
+ Copyright (C) 1993, 1997, 1998, 1999, 2001, 2004 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., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
+
+ 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 = (VFunction *)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 char *input_line_prompt;
+static int input_line_point;
+static int input_line_beg;
+static int input_line_end;
+static NODE input_line_node = {
+ (char *)NULL, (char *)NULL, (char *)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 = (WINDOW *)NULL;
+
+/* Variables which keep track of the window which was active prior to
+ entering the echo area. */
+static WINDOW *calling_window = (WINDOW *)NULL;
+static NODE *calling_window_node = (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 = (WINDOW *)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 = (WINDOW *)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 = (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 (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 = (char *)NULL;
+ }
+ else
+ {
+ if (input_line_beg == input_line_end)
+ return_value = xstrdup ("");
+ else
+ {
+ int line_len = input_line_end - input_line_beg;
+ return_value = (char *) 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, 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++;
+}
+
+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 = (char **)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 ((char *) _("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;
+ }
+}
+
+/* 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);
+ }
+}
+
+/* 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 = (char *)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 = (char *)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 = (char **) 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 = (REFERENCE **)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 = (REFERENCE **)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 = (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, 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 (strcasecmp (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 ((char *) _("No completions"));
+ else
+ inform_in_echo_area ((char *) _("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 = (REFERENCE **)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,
+ 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,
+ 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 ((char *) _("No completions"));
+ }
+ else if ((completions_found_index == 1) && (key != '?'))
+ {
+ inform_in_echo_area ((char *) _("Sole completion"));
+ }
+ else
+ {
+ register int i, l;
+ int limit, iterations, max_label = 0;
+
+ initialize_message_buffer ();
+ printf_to_message_buffer (completions_found_index == 1
+ ? (char *) _("One completion:\n")
+ : (char *) _("%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 = {
+ (char *)NULL, (char *)NULL, (char *)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 = (char *)NULL;
+static REFERENCE **last_completion_items = (REFERENCE **)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 = (char *)NULL;
+ last_completion_items = (REFERENCE **)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 = (REFERENCE *)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 = (char *)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 = (REFERENCE *)NULL;
+
+ for (i = 0; (entry = echo_area_completion_items[i]); i++)
+ {
+ if (strncasecmp (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 ((char *) _("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 = (char *)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 (strcasecmp ((*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] = (REFERENCE *)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 = (REFERENCE **)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] = (REFERENCE *)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 = (WINDOW *)NULL;
+}
+
+/* **************************************************************** */
+/* */
+/* Pushing and Popping the Echo Area */
+/* */
+/* **************************************************************** */
+
+/* Push and Pop the echo area. */
+typedef struct {
+ char *line;
+ char *prompt;
+ REFERENCE **comp_items;
+ int point, beg, end;
+ int must_complete;
+ NODE node;
+ WINDOW *compwin;
+} PUSHED_EA;
+
+static PUSHED_EA **pushed_echo_areas = (PUSHED_EA **)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 = (PUSHED_EA *)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 = (REFERENCE **)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 = (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, (fd_set *) NULL,
+ (fd_set *) 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/macros/texinfo/contrib/texinfo-hu/texinfo/info/echo-area.h b/macros/texinfo/contrib/texinfo-hu/texinfo/info/echo-area.h
new file mode 100644
index 0000000000..3178428248
--- /dev/null
+++ b/macros/texinfo/contrib/texinfo-hu/texinfo/info/echo-area.h
@@ -0,0 +1,85 @@
+/* echo-area.h -- Functions used in reading information from the echo area.
+ $Id: echo-area.h,v 1.4 2004/08/07 22:03:08 karl Exp $
+
+ This file is part of GNU Info, a program for reading online documentation
+ stored in Info format.
+
+ Copyright (C) 1993, 1997, 2004 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., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
+
+ 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, 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, 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,
+ 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,
+ 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/macros/texinfo/contrib/texinfo-hu/texinfo/info/filesys.c b/macros/texinfo/contrib/texinfo-hu/texinfo/info/filesys.c
new file mode 100644
index 0000000000..8134480645
--- /dev/null
+++ b/macros/texinfo/contrib/texinfo-hu/texinfo/info/filesys.c
@@ -0,0 +1,711 @@
+/* filesys.c -- filesystem specific functions.
+ $Id: filesys.c,v 1.6 2004/07/30 17:17:40 karl Exp $
+
+ Copyright (C) 1993, 1997, 1998, 2000, 2002, 2003, 2004 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., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
+
+ 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" },
+ { ".z", "gunzip" },
+ { ".Z", "uncompress" },
+ { ".Y", "unyabba" },
+#ifdef __MSDOS__
+ { "gz", "gunzip" },
+ { "z", "gunzip" },
+#endif
+ { (char *)NULL, (char *)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 = (char *)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 = (char *)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 = (char *)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 = (char *) 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 = (char *)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 ((char *)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 = (FILENAME_LIST **)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 (char *)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 =
+ (FILENAME_LIST **) xrealloc (names_and_files, alloc_size);
+ }
+
+ new = (FILENAME_LIST *)xmalloc (sizeof (FILENAME_LIST));
+ new->filename = xstrdup (filename);
+ new->expansion = expansion ? xstrdup (expansion) : (char *)NULL;
+
+ names_and_files[names_and_files_index++] = new;
+ names_and_files[names_and_files_index] = (FILENAME_LIST *)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 = (char *)xmalloc (infopath_size = 200 + strlen (path));
+ infopath[0] = '\0';
+ }
+
+ len = strlen (path) + strlen (infopath);
+
+ if (len + 2 >= infopath_size)
+ infopath = (char *)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 = (char *)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 (long)(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 ((char *)NULL);
+ }
+
+ /* Try to read the contents of this file. */
+ st_size = (long) finfo->st_size;
+ contents = (char *)xmalloc (1 + st_size);
+ if ((read (descriptor, contents, st_size)) != st_size)
+ {
+ filesys_error_number = errno;
+ close (descriptor);
+ free (contents);
+ return ((char *)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 = (char *)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 = (char *)NULL;
+
+ *filesize = filesys_error_number = 0;
+
+ decompressor = filesys_decompressor_for_file (pathname);
+
+ if (!decompressor)
+ return ((char *)NULL);
+
+ command = (char *)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 = (char *)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 = (char *)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 = (char *)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 = (char *)NULL;
+ filesys_error_number = errno;
+ }
+ else
+ {
+ *filesize = convert_eols (contents, offset);
+ contents = (char *)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 = (char *)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 ((char *)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 ((char *)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 = (char *)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 ((char *)NULL);
+
+ result = strerror (error_num);
+
+ len = 4 + strlen (filename) + strlen (result);
+ if (len >= errmsg_buf_size)
+ errmsg_buf = (char *)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 (strcasecmp (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 (strcasecmp (filename, dir_compressed) == 0)
+ return 1;
+ }
+ }
+
+ return 0;
+}
diff --git a/macros/texinfo/contrib/texinfo-hu/texinfo/info/filesys.h b/macros/texinfo/contrib/texinfo-hu/texinfo/info/filesys.h
new file mode 100644
index 0000000000..89ca543080
--- /dev/null
+++ b/macros/texinfo/contrib/texinfo-hu/texinfo/info/filesys.h
@@ -0,0 +1,92 @@
+/* filesys.h -- external declarations for filesys.c.
+ $Id: filesys.h,v 1.3 2004/04/11 17:56:45 karl Exp $
+
+ Copyright (C) 1993, 1997, 1998, 2002, 2004 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., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
+
+ 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/macros/texinfo/contrib/texinfo-hu/texinfo/info/footnotes.c b/macros/texinfo/contrib/texinfo-hu/texinfo/info/footnotes.c
new file mode 100644
index 0000000000..c8cd7b54a2
--- /dev/null
+++ b/macros/texinfo/contrib/texinfo-hu/texinfo/info/footnotes.c
@@ -0,0 +1,268 @@
+/* footnotes.c -- Some functions for manipulating footnotes.
+ $Id: footnotes.c,v 1.4 2004/04/11 17:56:45 karl Exp $
+
+ Copyright (C) 1993, 1997, 1998, 1999, 2002, 2004 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., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
+
+ 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 = (NODE *)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, (WINDOW *)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 = (char *)xmalloc (reflen + 1);
+
+ strcpy (refname, node->nodename);
+ strcat (refname, "-Footnotes");
+
+ for (i = 0; refs[i]; i++)
+ if ((refs[i]->nodename != (char *)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 ((NODE *)NULL);
+
+ /* Make the new node. */
+ result = (NODE *)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 = (char *)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 = (char *)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 ((char *) _("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 ((char *) msg_no_foot_node, NULL, NULL);
+ break;
+
+ case FN_UNABLE:
+ info_error ((char *) msg_win_too_small, NULL, NULL);
+ break;
+ }
+ }
+}
diff --git a/macros/texinfo/contrib/texinfo-hu/texinfo/info/footnotes.h b/macros/texinfo/contrib/texinfo-hu/texinfo/info/footnotes.h
new file mode 100644
index 0000000000..7f58399426
--- /dev/null
+++ b/macros/texinfo/contrib/texinfo-hu/texinfo/info/footnotes.h
@@ -0,0 +1,43 @@
+/* footnotes.h -- Some functions for manipulating footnotes.
+ $Id: footnotes.h,v 1.3 2004/04/11 17:56:45 karl Exp $
+
+ Copyright (C) 1993, 1997, 1998, 2002, 2004 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., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
+
+ 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/macros/texinfo/contrib/texinfo-hu/texinfo/info/gc.c b/macros/texinfo/contrib/texinfo-hu/texinfo/info/gc.c
new file mode 100644
index 0000000000..9416e3bb2e
--- /dev/null
+++ b/macros/texinfo/contrib/texinfo-hu/texinfo/info/gc.c
@@ -0,0 +1,92 @@
+/* gc.c -- Functions to remember and garbage collect unused node contents.
+ $Id: gc.c,v 1.3 2004/04/11 17:56:45 karl Exp $
+
+ Copyright (C) 1993, 2004 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., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
+
+ 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 = (char **)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 = (char **)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/macros/texinfo/contrib/texinfo-hu/texinfo/info/gc.h b/macros/texinfo/contrib/texinfo-hu/texinfo/info/gc.h
new file mode 100644
index 0000000000..67d031f9b8
--- /dev/null
+++ b/macros/texinfo/contrib/texinfo-hu/texinfo/info/gc.h
@@ -0,0 +1,37 @@
+/* gc.h -- Functions for garbage collecting unused node contents.
+ $Id: gc.h,v 1.3 2004/04/11 17:56:45 karl Exp $
+
+ This file is part of GNU Info, a program for reading online documentation
+ stored in Info format.
+
+ Copyright (C) 1993, 1997, 2004 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., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
+
+ 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/macros/texinfo/contrib/texinfo-hu/texinfo/info/indices.c b/macros/texinfo/contrib/texinfo-hu/texinfo/info/indices.c
new file mode 100644
index 0000000000..f5b0eb5763
--- /dev/null
+++ b/macros/texinfo/contrib/texinfo-hu/texinfo/info/indices.c
@@ -0,0 +1,735 @@
+/* indices.c -- deal with an Info file index.
+ $Id: indices.c,v 1.5 2004/04/11 17:56:45 karl Exp $
+
+ Copyright (C) 1993, 1997, 1998, 1999, 2002, 2003, 2004 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., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
+
+ 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 = (REFERENCE **)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 = (char *)NULL;
+
+/* A couple of "globals" describing where the initial index was found. */
+static char *initial_index_filename = (char *)NULL;
+static char *initial_index_nodename = (char *)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 = (INDEX_NAME_ASSOC **)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 = (INDEX_NAME_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 = (REFERENCE **)NULL;
+
+ /* No file buffer, no indices. */
+ if (!file_buffer)
+ return ((REFERENCE **)NULL);
+
+ /* Reset globals describing where the index was found. */
+ maybe_free (initial_index_filename);
+ maybe_free (initial_index_nodename);
+ initial_index_filename = (char *)NULL;
+ initial_index_nodename = (char *)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] = (INDEX_NAME_ASSOC *)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 = (char *)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 ((char *) _("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 ((char *) _("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, (char *) _("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 ((char *) _("No previous index search string."), NULL, NULL);
+ return;
+ }
+
+ /* If there is no index, that is an error. */
+ if (!index_index)
+ {
+ info_error ((char *) _("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 ((char *) _("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
+ ((char *) _("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 ((char *) msg_cant_file_node,
+ index_index[i]->filename, index_index[i]->nodename);
+ return;
+ }
+
+ info_set_node_of_window (1, window, node);
+
+ /* Try to find an occurence of LABEL in this node. */
+ {
+ long start, loc;
+
+ 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 = (REFERENCE **)NULL;
+ REFERENCE **dir_menu = (REFERENCE **)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 ((char *) _("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 = (REFERENCE **)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 ((char *) _(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, (char *) _("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 ((char *) _(APROPOS_NONE), line, NULL);
+ else
+ {
+ register int i;
+ char *line_buffer;
+
+ initialize_message_buffer ();
+ printf_to_message_buffer
+ ((char *) _("\n* Menu: Nodes whose indices contain `%s':\n"),
+ line, NULL, NULL);
+ line_buffer = (char *)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 ((NODE *)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/macros/texinfo/contrib/texinfo-hu/texinfo/info/indices.h b/macros/texinfo/contrib/texinfo-hu/texinfo/info/indices.h
new file mode 100644
index 0000000000..1ccd676361
--- /dev/null
+++ b/macros/texinfo/contrib/texinfo-hu/texinfo/info/indices.h
@@ -0,0 +1,45 @@
+/* indices.h -- Functions defined in indices.c.
+ $Id: indices.h,v 1.3 2004/04/11 17:56:45 karl Exp $
+
+ This file is part of GNU Info, a program for reading online documentation
+ stored in Info format.
+
+ Copyright (C) 1993, 1997, 2004 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., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
+
+ 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/macros/texinfo/contrib/texinfo-hu/texinfo/info/info-utils.c b/macros/texinfo/contrib/texinfo-hu/texinfo/info/info-utils.c
new file mode 100644
index 0000000000..c23bac571a
--- /dev/null
+++ b/macros/texinfo/contrib/texinfo-hu/texinfo/info/info-utils.c
@@ -0,0 +1,701 @@
+/* info-utils.c -- miscellanous.
+ $Id: info-utils.c,v 1.4 2004/04/11 17:56:45 karl Exp $
+
+ Copyright (C) 1993, 1998, 2003, 2004 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., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
+
+ 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 = (char *)NULL;
+
+/* Variable which holds the most recent nodename parsed as a result of
+ calling info_parse_xxx (). */
+char *info_parsed_nodename = (char *)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 ((char *)NULL);
+ save_nodename ((char *)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 = (char *)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 ((char *)NULL);
+ save_filename ((char *)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 = (REFERENCE **)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 ((REFERENCE **) 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 = (REFERENCE **)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 = (strcasecmp (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 = (REFERENCE *)xmalloc (sizeof (REFERENCE));
+ entry->filename = (char *)NULL;
+ entry->nodename = (char *)NULL;
+ entry->label = (char *)xmalloc (offset);
+ strncpy (entry->label, refdef, offset - 1);
+ entry->label[offset - 1] = '\0';
+ canonicalize_whitespace (entry->label);
+
+ 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 ((REFERENCE *)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 = (REFERENCE **)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] = (REFERENCE *)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;
+
+ 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 = (char *)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[10];
+
+/* Return a pointer to a string which is the printed representation
+ of CHARACTER if it were printed at HPOS. */
+char *
+printed_representation (unsigned char character, int hpos)
+{
+ register int i = 0;
+ int printable_limit = ISO_Latin_p ? 255 : 127;
+
+ if (raw_escapes_p && character == '\033')
+ the_rep[i++] = character;
+ /* Show CTRL-x as ^X. */
+ else if (iscntrl (character) && character < 127)
+ {
+ switch (character)
+ {
+ case '\r':
+ case '\n':
+ the_rep[i++] = character;
+ break;
+
+ case '\t':
+ {
+ int tw;
+
+ tw = ((hpos + 8) & 0xf8) - hpos;
+ while (i < tw)
+ the_rep[i++] = ' ';
+ }
+ break;
+
+ default:
+ the_rep[i++] = '^';
+ the_rep[i++] = (character | 0x40);
+ }
+ }
+ /* Show META-x as 0370. */
+ else if (character > printable_limit)
+ {
+ sprintf (the_rep + i, "\\%0o", character);
+ i = strlen (the_rep);
+ }
+ else if (character == DEL)
+ {
+ the_rep[i++] = '^';
+ the_rep[i++] = '?';
+ }
+ else
+ the_rep[i++] = character;
+
+ the_rep[i] = 0;
+
+ 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 = (char *)NULL;
+ *string_size_p = 0;
+ }
+ else
+ {
+ if (strlen (string) >= (unsigned int) *string_size_p)
+ *string_p = (char *)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 = (char *)NULL;
+ *string_size_p = 0;
+ }
+ else
+ {
+ if (len >= *string_size_p)
+ *string_p = (char *)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 != (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 = (char *)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 = (WINDOW *)NULL;
+
+ for (win = windows; win; win = win->next)
+ if (win->node == node)
+ break;
+
+ return (win);
+}
diff --git a/macros/texinfo/contrib/texinfo-hu/texinfo/info/info-utils.h b/macros/texinfo/contrib/texinfo-hu/texinfo/info/info-utils.h
new file mode 100644
index 0000000000..6517b15206
--- /dev/null
+++ b/macros/texinfo/contrib/texinfo-hu/texinfo/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.4 2004/04/11 17:56:45 karl Exp $
+
+ Copyright (C) 1993, 1996, 1998, 2002, 2003, 2004 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., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
+
+ 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 (unsigned char character, int hpos);
+
+/* 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/macros/texinfo/contrib/texinfo-hu/texinfo/info/info.c b/macros/texinfo/contrib/texinfo-hu/texinfo/info/info.c
new file mode 100644
index 0000000000..79dd0240c0
--- /dev/null
+++ b/macros/texinfo/contrib/texinfo-hu/texinfo/info/info.c
@@ -0,0 +1,685 @@
+/* info.c -- Display nodes of Info files in multiple windows.
+ $Id: info.c,v 1.11 2004/04/11 17:56:45 karl Exp $
+
+ Copyright (C) 1993, 1996, 1997, 1998, 1999, 2000, 2001, 2002, 2003,
+ 2004 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., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
+
+ 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 */
+
+static 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 = (char *)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 = (char *)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 = (char **)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 = (char *)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 = (char *)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 APROPOS_OPTION 1
+#define DRIBBLE_OPTION 2
+#define RESTORE_OPTION 3
+#define IDXSRCH_OPTION 4
+static struct option long_options[] = {
+ { "apropos", 1, 0, APROPOS_OPTION },
+ { "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 },
+ { "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 = "d:n:f:ho:ORswb";
+#else
+static char *short_options = "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
+
+#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 APROPOS_OPTION:
+ 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 == (char *)NULL))
+ {
+ user_output_filename = xstrdup ("-");
+ dump_subnodes = 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 ("");
+ puts ("Copyright (C) 2004 Free Software Foundation, Inc.");
+ printf (_("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"));
+ 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 ((char *) 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 = 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 ((char *) errstr, errarg1, errarg2);
+ }
+ else
+ {
+
+ if (errstr)
+ begin_info_session_with_error (initial_node, (char *) 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 = (VFunction *)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 (char *format, void *arg1, void *arg2)
+{
+ info_error_was_printed = 1;
+
+ if (!info_windows_initialized_p || display_inhibited)
+ {
+ fprintf (stderr, "%s: ", program_name);
+ fprintf (stderr, format, arg1, arg2);
+ 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;
+
+ 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)
+{
+#ifdef __MSDOS__
+ static const char speech_friendly_string[] = N_("\
+ -b, --speech-friendly be friendly to speech synthesizers.\n");
+#else
+ static const char speech_friendly_string[] = "";
+#endif
+
+
+ printf (_("\
+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 -f ./foo.info show file ./foo.info, not searching dir\n\
+"),
+ program_name, speech_friendly_string);
+
+ 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/macros/texinfo/contrib/texinfo-hu/texinfo/info/info.h b/macros/texinfo/contrib/texinfo-hu/texinfo/info/info.h
new file mode 100644
index 0000000000..7ff8abe9b1
--- /dev/null
+++ b/macros/texinfo/contrib/texinfo-hu/texinfo/info/info.h
@@ -0,0 +1,160 @@
+/* info.h -- Header file which includes all of the other headers.
+ $Id: info.h,v 1.4 2004/04/11 17:56:45 karl Exp $
+
+ Copyright (C) 1993, 1997, 1998, 1999, 2001, 2002, 2003, 2004 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., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
+
+ 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"
+
+#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 (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 (char *prompt, WINDOW *window);
+
+#endif /* !INFO_H */
diff --git a/macros/texinfo/contrib/texinfo-hu/texinfo/info/infodoc.c b/macros/texinfo/contrib/texinfo-hu/texinfo/info/infodoc.c
new file mode 100644
index 0000000000..eeea147a96
--- /dev/null
+++ b/macros/texinfo/contrib/texinfo-hu/texinfo/info/infodoc.c
@@ -0,0 +1,1200 @@
+/* infodoc.c -- functions which build documentation nodes.
+ $Id: infodoc.c,v 1.8 2004/04/11 17:56:45 karl Exp $
+
+ Copyright (C) 1993, 1997, 1998, 1999, 2001, 2002, 2003, 2004 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., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
+
+ 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 = (NODE *)NULL;
+
+/* A pointer to the contents of the help node. */
+static char *internal_info_help_node_contents = (char *)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 Commands in Info Windows\n\
+******************************\n"),
+ "\n",
+ N_("\\%-10[quit-help] Quit this help.\n"),
+ N_("\\%-10[quit] Quit Info altogether.\n"),
+ N_("\\%-10[get-info-help-node] Invoke the Info tutorial.\n"),
+ "\n",
+ N_("Selecting other nodes:\n\
+----------------------\n"),
+ N_("\\%-10[next-node] Move to the \"next\" node of this node.\n"),
+ N_("\\%-10[prev-node] Move to the \"previous\" node of this node.\n"),
+ N_("\\%-10[up-node] Move \"up\" from this node.\n"),
+ N_("\\%-10[menu-item] Pick menu item specified by name.\n\
+ Picking a menu item causes another node to be selected.\n"),
+ N_("\\%-10[xref-item] Follow a cross reference. Reads name of reference.\n"),
+ N_("\\%-10[history-node] Move to the last node seen in this window.\n"),
+ N_("\\%-10[move-to-next-xref] Skip to next hypertext link within this node.\n"),
+ N_("\\%-10[move-to-prev-xref] Skip to previous hypertext link within this node.\n"),
+ N_("\\%-10[select-reference-this-line] Follow the hypertext link under cursor.\n"),
+ N_("\\%-10[dir-node] Move to the `directory' node. Equivalent to `\\[goto-node] (DIR)'.\n"),
+ N_("\\%-10[top-node] Move to the Top node. Equivalent to `\\[goto-node] Top'.\n"),
+ "\n",
+ N_("Moving within a node:\n\
+---------------------\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_("\\%-10[next-line] Scroll forward 1 line.\n"),
+ N_("\\%-10[prev-line] Scroll backward 1 line.\n"),
+ N_("\\%-10[scroll-forward] Scroll forward a page.\n"),
+ N_("\\%-10[scroll-backward] Scroll backward a page.\n"),
+ "\n",
+ N_("Other commands:\n\
+---------------\n"),
+ N_("\\%-10[menu-digit] Pick first ... ninth item in node's menu.\n"),
+ N_("\\%-10[last-menu-item] Pick last item in node's menu.\n"),
+ 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"),
+ N_("\\%-10[goto-node] Move to node specified by name.\n\
+ You may include a filename as well, as in (FILENAME)NODENAME.\n"),
+ N_("\\%-10[search] Search forward for a specified string\n\
+ and select the node in which the next occurrence is found.\n"),
+ N_("\\%-10[search-backward] Search backward for a specified string\n\
+ and select the node in which the previous occurrence is found.\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"),
+ 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"),
+ 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"),
+ N_(" %-10s Move to node specified by name.\n"),
+ N_(" You may include a filename as well, as in (FILENAME)NODENAME.\n"),
+ N_(" %-10s Search forward for a specified string,\n"),
+ N_(" and select the node in which the next occurrence is found.\n"),
+ N_(" %-10s Search backward for a specified string\n"),
+ 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 = (char *)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
+ ((char *) _(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\n", NULL, NULL, NULL);
+ printf_to_message_buffer ((char *) _("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 ((char *) _("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 ((char *) _("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
+ ((char *) _("The following commands can only be invoked via %s:\n\n"),
+ exec_keys, NULL, NULL);
+ else
+ printf_to_message_buffer
+ ((char *) _("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)
+ ? (char *) _(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 */
+
+ printf_to_message_buffer
+ ("%s", replace_in_documentation
+ ((char *) _("--- Use `\\[history-node]' or `\\[kill-node]' to exit ---\n"), 0),
+ NULL, NULL);
+ 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 ((char *) 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 &&
+ (strcasecmp
+ (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 ((char *) 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 : (char *) _(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 ((char *)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 ((char *) _("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 == (InfoCommand *)NULL)
+ {
+ message_in_echo_area ((char *) _("%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 == (InfoCommand *)NULL)
+ {
+ message_in_echo_area ((char *) _("%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 = (char *)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 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 (char *)e;
+ }
+ return NULL;
+}
+
+/* Replace the names of functions with the key that invokes them. */
+char *
+replace_in_documentation (char *string, int help_is_only_window_p)
+{
+ unsigned reslen = strlen (string);
+ register int i, start, next;
+ static char *result = (char *)NULL;
+
+ maybe_free (result);
+ result = (char *)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 = (char *)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 = (char *)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
+ noew 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, *p;
+
+ argrep = where_is (info_keymap, InfoCmd(info_add_digit_to_numeric_arg));
+ p = argrep ? strrpbrk (argrep, "0123456789-") : NULL;
+ if (p)
+ {
+ argstr = (char *)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 = (char *)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 = (char *)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 = (char *)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 = (char *)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 ((char *) _("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 ((char *) _("`%s' is not on any keys"),
+ command_name, NULL);
+ }
+ else
+ {
+ if (strstr (location, function_name (command)))
+ window_message_in_echo_area
+ ((char *) _("%s can only be invoked via %s."),
+ command_name, location);
+ else
+ window_message_in_echo_area
+ ((char *) _("%s can be invoked via %s."),
+ command_name, location);
+ }
+ }
+ else
+ info_error ((char *) _("There is no function named `%s'"),
+ command_name, NULL);
+ }
+
+ free (command_name);
+}
diff --git a/macros/texinfo/contrib/texinfo-hu/texinfo/info/infokey.c b/macros/texinfo/contrib/texinfo-hu/texinfo/info/infokey.c
new file mode 100644
index 0000000000..51f23aab0c
--- /dev/null
+++ b/macros/texinfo/contrib/texinfo-hu/texinfo/info/infokey.c
@@ -0,0 +1,924 @@
+/* infokey.c -- compile ~/.infokey to ~/.info.
+ $Id: infokey.c,v 1.9 2004/12/14 00:15:36 karl Exp $
+
+ Copyright (C) 1999, 2001, 2002, 2003, 2004 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., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
+
+ Written by Andrew Bettison <andrewb@zip.com.au>. */
+
+#include "info.h"
+#include "infomap.h"
+#include "infokey.h"
+#include "key.h"
+#include "getopt.h"
+
+static 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 = (char *) 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 = (char *) 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\
+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"),
+ "2003");
+ 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,
+ (char *) _("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, (char *) _("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/macros/texinfo/contrib/texinfo-hu/texinfo/info/infokey.h b/macros/texinfo/contrib/texinfo-hu/texinfo/info/infokey.h
new file mode 100644
index 0000000000..d51211d0c3
--- /dev/null
+++ b/macros/texinfo/contrib/texinfo-hu/texinfo/info/infokey.h
@@ -0,0 +1,128 @@
+/* infokey.h -- Custom keystroke definition support.
+ $Id: infokey.h,v 1.2 2004/04/11 17:56:45 karl Exp $
+
+ Copyright (C) 1999, 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 2, or (at your option)
+ any later version.
+
+ This program is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ GNU General Public License for more details.
+
+ You should have received a copy of the GNU General Public License
+ along with this program; if not, write to the Free Software
+ Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
+
+ 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/macros/texinfo/contrib/texinfo-hu/texinfo/info/infomap.c b/macros/texinfo/contrib/texinfo-hu/texinfo/info/infomap.c
new file mode 100644
index 0000000000..c7dc2f4aea
--- /dev/null
+++ b/macros/texinfo/contrib/texinfo-hu/texinfo/info/infomap.c
@@ -0,0 +1,1831 @@
+/* infomap.c -- keymaps for Info.
+ $Id: infomap.c,v 1.10 2004/07/30 20:43:40 karl Exp $
+
+ Copyright (C) 1993, 1997, 1998, 1999, 2001, 2002, 2003, 2004 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., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
+
+ 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 = (InfoCommand *)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 = (FUNCTION_KEYSEQ *)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;
+
+#if !defined(INFOKEY)
+
+static void
+initialize_emacs_like_keymaps ()
+{
+ int i;
+ Keymap map;
+
+ if (!info_keymap)
+ {
+ info_keymap = keymap_make_keymap ();
+ echo_area_keymap = keymap_make_keymap ();
+ }
+
+ info_keymap[ESC].type = ISKMAP;
+ info_keymap[ESC].function = (InfoCommand *)keymap_make_keymap ();
+ info_keymap[Control ('x')].type = ISKMAP;
+ info_keymap[Control ('x')].function = (InfoCommand *)keymap_make_keymap ();
+
+ /* Bind the echo area insert routines. Let's make all characters
+ insertable by default, regardless of which character set we might
+ be using. */
+ for (i = 0; i < 256; i++)
+ echo_area_keymap[i].function = ea_insert;
+
+ echo_area_keymap[ESC].type = ISKMAP;
+ echo_area_keymap[ESC].function = (InfoCommand *) keymap_make_keymap ();
+ echo_area_keymap[Control ('x')].type = ISKMAP;
+ echo_area_keymap[Control ('x')].function
+ = (InfoCommand *) keymap_make_keymap ();
+
+ /* Bind numeric arg functions for both echo area and info window maps. */
+ for (i = '0'; i < '9' + 1; i++)
+ {
+ ((Keymap) info_keymap[ESC].function)[i].function
+ = ((Keymap) echo_area_keymap[ESC].function)[i].function
+ = info_add_digit_to_numeric_arg;
+ }
+ ((Keymap) info_keymap[ESC].function)['-'].function =
+ ((Keymap) echo_area_keymap[ESC].function)['-'].function =
+ info_add_digit_to_numeric_arg;
+
+ info_keymap['-'].function = info_add_digit_to_numeric_arg;
+
+ /* Bind the echo area routines. */
+ map = echo_area_keymap;
+
+ map[Control ('a')].function = ea_beg_of_line;
+ map[Control ('b')].function = ea_backward;
+ map[Control ('d')].function = ea_delete;
+ map[Control ('e')].function = ea_end_of_line;
+ map[Control ('f')].function = ea_forward;
+ map[Control ('g')].function = ea_abort;
+ map[Control ('h')].function = ea_rubout;
+ map[Control ('k')].function = ea_kill_line;
+ map[Control ('l')].function = info_redraw_display;
+ map[Control ('q')].function = ea_quoted_insert;
+ map[Control ('t')].function = ea_transpose_chars;
+ map[Control ('u')].function = info_universal_argument;
+ map[Control ('y')].function = ea_yank;
+
+ map[LFD].function = ea_newline;
+ map[RET].function = ea_newline;
+ map[SPC].function = ea_complete;
+ map[TAB].function = ea_complete;
+ map['?'].function = ea_possible_completions;
+#ifdef __MSDOS__
+ /* PC users will lynch me if I don't give them their usual DEL effect... */
+ map[DEL].function = ea_delete;
+#else
+ map[DEL].function = ea_rubout;
+#endif
+
+ /* Bind the echo area ESC keymap. */
+ map = (Keymap)echo_area_keymap[ESC].function;
+
+ map[Control ('g')].function = ea_abort;
+ map[Control ('v')].function = ea_scroll_completions_window;
+ map['b'].function = ea_backward_word;
+ map['d'].function = ea_kill_word;
+ map['f'].function = ea_forward_word;
+#if defined (NAMED_FUNCTIONS)
+ /* map['x'].function = info_execute_command; */
+#endif /* NAMED_FUNCTIONS */
+ map['y'].function = ea_yank_pop;
+ map['?'].function = ea_possible_completions;
+ map[TAB].function = ea_tab_insert;
+ map[DEL].function = ea_backward_kill_word;
+
+ /* Bind the echo area Control-x keymap. */
+ map = (Keymap)echo_area_keymap[Control ('x')].function;
+
+ map['o'].function = info_next_window;
+ map[DEL].function = 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. */
+ map = echo_area_keymap;
+ keymap_bind_keyseq (map, term_ku, &map[Control ('p')]); /* up */
+ keymap_bind_keyseq (map, "\033OA", &map[Control ('p')]);
+ keymap_bind_keyseq (map, "\033[A", &map[Control ('p')]);
+ keymap_bind_keyseq (map, term_kd, &map[Control ('n')]); /* down */
+ keymap_bind_keyseq (map, "\033OB", &map[Control ('n')]);
+ keymap_bind_keyseq (map, "\033[B", &map[Control ('n')]);
+ keymap_bind_keyseq (map, term_kr, &map[Control ('f')]); /* right */
+ keymap_bind_keyseq (map, "\033OC", &map[Control ('f')]);
+ keymap_bind_keyseq (map, "\033[C", &map[Control ('f')]);
+ keymap_bind_keyseq (map, term_kl, &map[Control ('b')]); /* left */
+ keymap_bind_keyseq (map, "\033OD", &map[Control ('b')]);
+ keymap_bind_keyseq (map, "\033[D", &map[Control ('b')]);
+ keymap_bind_keyseq (map, term_kD, &map[DEL]); /* delete */
+ keymap_bind_keyseq (map, term_kh, &map[Control ('a')]); /* home */
+ keymap_bind_keyseq (map, term_ke, &map[Control ('e')]); /* end */
+
+ map = (Keymap)echo_area_keymap[ESC].function;
+ keymap_bind_keyseq (map, term_kl, &map['b']); /* left */
+ keymap_bind_keyseq (map, "\033OA", &map['b']);
+ keymap_bind_keyseq (map, "\033[A", &map['b']);
+ keymap_bind_keyseq (map, term_kr, &map['f']); /* right */
+ keymap_bind_keyseq (map, "\033OB", &map['f']);
+ keymap_bind_keyseq (map, "\033[B", &map['f']);
+ keymap_bind_keyseq (map, term_kD, &map[DEL]); /* delete */
+
+ map = (Keymap)echo_area_keymap[Control ('x')].function;
+ keymap_bind_keyseq (map, term_kD, &map[DEL]); /* delete */
+
+ /* Bind commands for Info window keymaps. */
+ map = info_keymap;
+ map[TAB].function = info_move_to_next_xref;
+ map[LFD].function = info_select_reference_this_line;
+ map[RET].function = info_select_reference_this_line;
+ map[SPC].function = info_scroll_forward;
+ map[Control ('a')].function = info_beginning_of_line;
+ map[Control ('b')].function = info_backward_char;
+ map[Control ('e')].function = info_end_of_line;
+ map[Control ('f')].function = info_forward_char;
+ map[Control ('g')].function = info_abort_key;
+ map[Control ('h')].function = info_get_help_window;
+ map[Control ('l')].function = info_redraw_display;
+ map[Control ('n')].function = info_next_line;
+ map[Control ('p')].function = info_prev_line;
+ map[Control ('r')].function = isearch_backward;
+ map[Control ('s')].function = isearch_forward;
+ map[Control ('u')].function = info_universal_argument;
+ map[Control ('v')].function = info_scroll_forward_page_only;
+ map[','].function = info_next_index_match;
+ map['/'].function = info_search;
+
+ for (i = '1'; i < '9' + 1; i++)
+ map[i].function = info_menu_digit;
+ map['0'].function = info_last_menu_item;
+
+ map['<'].function = info_first_node;
+ map['>'].function = info_last_node;
+ map['?'].function = info_get_help_window;
+ map['['].function = info_global_prev_node;
+ map[']'].function = info_global_next_node;
+
+ map['b'].function = info_beginning_of_node;
+ map['d'].function = info_dir_node;
+ map['e'].function = info_end_of_node;
+ map['f'].function = info_xref_item;
+ map['g'].function = info_goto_node;
+ map['G'].function = info_menu_sequence;
+ map['h'].function = info_get_info_help_node;
+ map['i'].function = info_index_search;
+ map['I'].function = info_goto_invocation_node;
+ map['l'].function = info_history_node;
+ map['m'].function = info_menu_item;
+ map['n'].function = info_next_node;
+ map['O'].function = info_goto_invocation_node;
+ map['p'].function = info_prev_node;
+ map['q'].function = info_quit;
+ map['r'].function = info_xref_item;
+ map['s'].function = info_search;
+ map['S'].function = info_search_case_sensitively;
+ map['t'].function = info_top_node;
+ map['u'].function = info_up_node;
+ map[DEL].function = info_scroll_backward;
+
+ /* Bind members in the ESC map for Info windows. */
+ map = (Keymap)info_keymap[ESC].function;
+ map[Control ('f')].function = info_show_footnotes;
+ map[Control ('g')].function = info_abort_key;
+ map[TAB].function = info_move_to_prev_xref;
+ map[Control ('v')].function = info_scroll_other_window;
+ map['<'].function = info_beginning_of_node;
+ map['>'].function = info_end_of_node;
+ map['b'].function = info_backward_word;
+ map['f'].function = info_forward_word;
+ map['r'].function = info_move_to_window_line;
+ map['v'].function = info_scroll_backward_page_only;
+#if defined (NAMED_FUNCTIONS)
+ map['x'].function = info_execute_command;
+#endif /* NAMED_FUNCTIONS */
+ map[DEL].function = info_scroll_other_window_backward;
+
+ /* Bind members in the Control-X map for Info windows. */
+ map = (Keymap)info_keymap[Control ('x')].function;
+
+ map[Control ('b')].function = list_visited_nodes;
+ map[Control ('c')].function = info_quit;
+ map[Control ('f')].function = info_view_file;
+ map[Control ('g')].function = info_abort_key;
+ map[Control ('v')].function = info_view_file;
+ map['0'].function = info_delete_window;
+ map['1'].function = info_keep_one_window;
+ map['2'].function = info_split_window;
+ map['^'].function = info_grow_window;
+ map['b'].function = select_visited_node;
+ map['k'].function = info_kill_node;
+ map['n'].function = info_search_next;
+ map['N'].function = info_search_previous;
+ map['o'].function = info_next_window;
+ map['t'].function = info_tile_windows;
+ map['w'].function = info_toggle_wrap;
+
+ /* Arrow key bindings for Info windows keymap. */
+ map = info_keymap;
+ keymap_bind_keyseq (map, term_kN, &map[Control ('v')]); /* pagedown */
+ keymap_bind_keyseq (map, term_ku, &map[Control ('p')]); /* up */
+ keymap_bind_keyseq (map, "\033OA", &map[Control ('p')]);
+ keymap_bind_keyseq (map, "\033[A", &map[Control ('p')]);
+ keymap_bind_keyseq (map, term_kd, &map[Control ('n')]); /* down */
+ keymap_bind_keyseq (map, "\033OB", &map[Control ('n')]);
+ keymap_bind_keyseq (map, "\033[B", &map[Control ('n')]);
+ keymap_bind_keyseq (map, term_kr, &map[Control ('f')]); /* right */
+ keymap_bind_keyseq (map, "\033OC", &map[Control ('f')]);
+ keymap_bind_keyseq (map, "\033[C", &map[Control ('f')]);
+ keymap_bind_keyseq (map, term_kl, &map[Control ('b')]); /* left */
+ keymap_bind_keyseq (map, "\033OD", &map[Control ('b')]);
+ keymap_bind_keyseq (map, "\033[D", &map[Control ('b')]);
+ keymap_bind_keyseq (map, term_kh, &map['b']); /* home */
+ keymap_bind_keyseq (map, term_ke, &map['e']); /* end */
+ keymap_bind_keyseq (map, term_kD, &map[DEL]); /* delete */
+
+ map = (Keymap)info_keymap[ESC].function;
+ keymap_bind_keyseq (map, term_kl, &map['b']); /* left */
+ keymap_bind_keyseq (map, "\033OA", &map['b']);
+ keymap_bind_keyseq (map, "\033[A", &map['b']);
+ keymap_bind_keyseq (map, term_kr, &map['f']); /* right */
+ keymap_bind_keyseq (map, "\033OB", &map['f']);
+ keymap_bind_keyseq (map, "\033[B", &map['f']);
+ keymap_bind_keyseq (map, term_kN, &map[Control ('v')]); /* pagedown */
+ keymap_bind_keyseq (map, term_kP, &map[DEL]); /* pageup */
+ keymap_bind_keyseq (map, term_kD, &map[DEL]); /* delete */
+
+ /* The alternative to this definition of a `main map' key in the
+ `ESC map' section, is something like:
+ keymap_bind_keyseq (map, term_kP, &((KeyMap)map[ESC].function).map['v']);
+ */
+ keymap_bind_keyseq (info_keymap/*sic*/, term_kP, &map['v']); /* pageup */
+}
+
+static void
+initialize_vi_like_keymaps ()
+{
+ int i;
+ Keymap map;
+
+ if (!info_keymap)
+ {
+ info_keymap = keymap_make_keymap ();
+ echo_area_keymap = keymap_make_keymap ();
+ }
+
+ info_keymap[ESC].type = ISKMAP;
+ info_keymap[ESC].function = (InfoCommand *)keymap_make_keymap ();
+ info_keymap[Control ('x')].type = ISKMAP;
+ info_keymap[Control ('x')].function = (InfoCommand *)keymap_make_keymap ();
+
+ /* Bind the echo area insert routines. */
+ for (i = 0; i < 256; i++)
+ echo_area_keymap[i].function = ea_insert;
+
+ echo_area_keymap[ESC].type = ISKMAP;
+ echo_area_keymap[ESC].function = (InfoCommand *)keymap_make_keymap ();
+ echo_area_keymap[Control ('x')].type = ISKMAP;
+ echo_area_keymap[Control ('x')].function =
+ (InfoCommand *)keymap_make_keymap ();
+
+ /* Bind numeric arg functions for both echo area and info window maps. */
+ for (i = '0'; i < '9' + 1; i++)
+ {
+ info_keymap[i].function =
+ ((Keymap) echo_area_keymap[ESC].function)[i].function =
+ info_add_digit_to_numeric_arg;
+ }
+ info_keymap['-'].function =
+ ((Keymap) echo_area_keymap[ESC].function)['-'].function =
+ info_add_digit_to_numeric_arg;
+
+ /* Bind the echo area routines. */
+ map = echo_area_keymap;
+
+ map[Control ('a')].function = ea_beg_of_line;
+ map[Control ('b')].function = ea_backward;
+ map[Control ('d')].function = ea_delete;
+ map[Control ('e')].function = ea_end_of_line;
+ map[Control ('f')].function = ea_forward;
+ map[Control ('g')].function = ea_abort;
+ map[Control ('h')].function = ea_rubout;
+ map[Control ('k')].function = ea_kill_line;
+ map[Control ('l')].function = info_redraw_display;
+ map[Control ('q')].function = ea_quoted_insert;
+ map[Control ('t')].function = ea_transpose_chars;
+ map[Control ('u')].function = ea_abort;
+ map[Control ('v')].function = ea_quoted_insert;
+ map[Control ('y')].function = ea_yank;
+
+ map[LFD].function = ea_newline;
+ map[RET].function = ea_newline;
+ map[SPC].function = ea_complete;
+ map[TAB].function = ea_complete;
+ map['?'].function = ea_possible_completions;
+#ifdef __MSDOS__
+ /* PC users will lynch me if I don't give them their usual DEL effect... */
+ map[DEL].function = ea_delete;
+#else
+ map[DEL].function = ea_rubout;
+#endif
+
+ /* Bind the echo area ESC keymap. */
+ map = (Keymap)echo_area_keymap[ESC].function;
+
+ map[Control ('g')].function = ea_abort;
+ map[Control ('h')].function = ea_backward_kill_word;
+ map[Control ('v')].function = ea_scroll_completions_window;
+ map['0'].function = ea_beg_of_line;
+ map['$'].function = ea_end_of_line;
+ map['b'].function = ea_backward_word;
+ map['d'].function = ea_kill_word;
+ map['f'].function = ea_forward_word;
+ map['h'].function = ea_backward;
+ map['l'].function = ea_forward;
+ map['w'].function = ea_forward_word;
+ map['x'].function = ea_delete;
+ map['X'].function = ea_kill_word;
+ map['y'].function = ea_yank_pop;
+ map['?'].function = ea_possible_completions;
+ map[TAB].function = ea_tab_insert;
+ map[DEL].function = ea_kill_word;
+
+ /* Bind the echo area Control-x keymap. */
+ map = (Keymap)echo_area_keymap[Control ('x')].function;
+
+ map['o'].function = info_next_window;
+ map[DEL].function = 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. */
+ map = echo_area_keymap;
+ keymap_bind_keyseq (map, term_ku, &map[Control ('p')]); /* up */
+ keymap_bind_keyseq (map, "\033OA", &map[Control ('p')]);
+ keymap_bind_keyseq (map, "\033[A", &map[Control ('p')]);
+ keymap_bind_keyseq (map, term_kd, &map[Control ('n')]); /* down */
+ keymap_bind_keyseq (map, "\033OB", &map[Control ('n')]);
+ keymap_bind_keyseq (map, "\033[B", &map[Control ('n')]);
+ keymap_bind_keyseq (map, term_kr, &map[Control ('f')]); /* right */
+ keymap_bind_keyseq (map, "\033OC", &map[Control ('f')]);
+ keymap_bind_keyseq (map, "\033[C", &map[Control ('f')]);
+ keymap_bind_keyseq (map, term_kl, &map[Control ('b')]); /* left */
+ keymap_bind_keyseq (map, "\033OD", &map[Control ('b')]);
+ keymap_bind_keyseq (map, "\033[D", &map[Control ('b')]);
+ keymap_bind_keyseq (map, term_kh, &map[Control ('a')]); /* home */
+ keymap_bind_keyseq (map, term_ke, &map[Control ('e')]); /* end */
+ keymap_bind_keyseq (map, term_kD, &map[DEL]); /* delete */
+
+ map = (Keymap)echo_area_keymap[ESC].function;
+ keymap_bind_keyseq (map, term_kl, &map['b']); /* left */
+ keymap_bind_keyseq (map, "\033OA", &map['b']);
+ keymap_bind_keyseq (map, "\033[A", &map['b']);
+ keymap_bind_keyseq (map, term_kr, &map['f']); /* right */
+ keymap_bind_keyseq (map, "\033OB", &map['f']);
+ keymap_bind_keyseq (map, "\033[B", &map['f']);
+ keymap_bind_keyseq (map, term_kD, &map[DEL]); /* delete */
+
+ map = (Keymap)echo_area_keymap[Control ('x')].function;
+ keymap_bind_keyseq (map, term_kD, &map[DEL]);
+
+ /* Bind commands for Info window keymaps. */
+ map = info_keymap;
+ map[TAB].function = info_move_to_next_xref;
+ map[LFD].function = info_down_line;
+ map[RET].function = info_down_line;
+ map[SPC].function = info_scroll_forward;
+ map[Control ('a')].function = info_beginning_of_line;
+ map[Control ('b')].function = info_scroll_backward_page_only;
+ map[Control ('d')].function = info_scroll_half_screen_down;
+ map[Control ('e')].function = info_down_line;
+ map[Control ('f')].function = info_scroll_forward_page_only;
+ map[Control ('g')].function = info_abort_key;
+ map[Control ('k')].function = info_up_line;
+ map[Control ('l')].function = info_redraw_display;
+ map[Control ('n')].function = info_down_line;
+ map[Control ('p')].function = info_up_line;
+ map[Control ('r')].function = info_redraw_display;
+ map[Control ('s')].function = isearch_forward;
+ map[Control ('u')].function = info_scroll_half_screen_up;
+ map[Control ('v')].function = info_scroll_forward_page_only;
+ map[Control ('y')].function = info_up_line;
+ map[','].function = info_next_index_match;
+ map['/'].function = info_search;
+
+ for (i = '1'; i < '9' + 1; i++)
+ ((Keymap) info_keymap[ESC].function)[i].function = info_menu_digit;
+ ((Keymap) info_keymap[ESC].function)['0'].function = info_last_menu_item;
+
+ map['<'].function = info_first_node;
+ map['>'].function = info_last_node;
+ map['?'].function = info_search_backward;
+ map['['].function = info_global_prev_node;
+ map[']'].function = info_global_next_node;
+ map['\''].function = info_history_node;
+
+ map['b'].function = info_scroll_backward;
+ map['d'].function = info_scroll_half_screen_down;
+ map['e'].function = info_down_line;
+ map['E'].function = info_view_file;
+ map['f'].function = info_scroll_forward_page_only;
+ map['F'].function = info_scroll_forward_page_only;
+ map['g'].function = info_first_node;
+ map['G'].function = info_last_node;
+ map['h'].function = info_get_help_window;
+ map['H'].function = info_get_help_window;
+ map['i'].function = info_index_search;
+ map['I'].function = info_goto_invocation_node;
+ map['j'].function = info_next_line;
+ map['k'].function = info_prev_line;
+ map['l'].function = info_history_node;
+ map['m'].function = info_menu_item;
+ map['n'].function = info_search_next;
+ map['N'].function = info_search_previous;
+ map['O'].function = info_goto_invocation_node;
+ map['p'].function = info_prev_node;
+ map['q'].function = info_quit;
+ map['Q'].function = info_quit;
+ map['r'].function = info_redraw_display;
+ map['R'].function = info_redraw_display;
+ map['s'].function = info_search;
+ map['S'].function = info_search_case_sensitively;
+ map['t'].function = info_top_node;
+ map['u'].function = info_scroll_half_screen_up;
+ map['w'].function = info_scroll_backward_page_only_set_window;
+ map['y'].function = info_up_line;
+ map['z'].function = info_scroll_forward_page_only_set_window;
+ map['Z'].function = NULL; /* unbind, so it works to bind "ZZ" below */
+ map[DEL].function = info_scroll_backward;
+ keymap_bind_keyseq (map, term_kD, &map[DEL]);
+ keymap_bind_keyseq (map, ":q", &map['q']);
+ keymap_bind_keyseq (map, ":Q", &map['q']);
+ keymap_bind_keyseq (map, "ZZ", &map['q']);
+
+ /* Bind members in the ESC map for Info windows. */
+ map = (Keymap)info_keymap[ESC].function;
+ map[Control ('f')].function = info_show_footnotes;
+ map[Control ('g')].function = info_abort_key;
+ map[TAB].function = info_move_to_prev_xref;
+ map[SPC].function = info_scroll_forward_page_only;
+ map[Control ('v')].function = info_scroll_other_window;
+ map['<'].function = info_beginning_of_node;
+ map['>'].function = info_end_of_node;
+ map['/'].function = info_search;
+ map['?'].function = info_search_backward;
+ map['b'].function = info_beginning_of_node;
+ map['d'].function = info_dir_node;
+ map['e'].function = info_end_of_node;
+ map['f'].function = info_xref_item;
+ map['g'].function = info_select_reference_this_line;
+ map['h'].function = info_get_info_help_node;
+ map['m'].function = info_menu_item;
+ map['n'].function = info_search;
+ map['N'].function = info_search_backward;
+ map['r'].function = isearch_backward;
+ map['s'].function = isearch_forward;
+ map['t'].function = info_top_node;
+ map['v'].function = info_scroll_backward_page_only;
+#if defined (NAMED_FUNCTIONS)
+ map['x'].function = info_execute_command;
+#endif /* NAMED_FUNCTIONS */
+ map[DEL].function = info_scroll_other_window_backward;
+
+ /* Bind members in the Control-X map for Info windows. */
+ map = (Keymap)info_keymap[Control ('x')].function;
+
+ map[Control ('b')].function = list_visited_nodes;
+ map[Control ('c')].function = info_quit;
+ map[Control ('f')].function = info_view_file;
+ map[Control ('g')].function = info_abort_key;
+ map[Control ('v')].function = info_view_file;
+ map[LFD].function = info_select_reference_this_line;
+ map[RET].function = info_select_reference_this_line;
+ map['0'].function = info_delete_window;
+ map['1'].function = info_keep_one_window;
+ map['2'].function = info_split_window;
+ map['^'].function = info_grow_window;
+ map['b'].function = select_visited_node;
+ map['g'].function = info_goto_node;
+ map['i'].function = info_index_search;
+ map['I'].function = info_goto_invocation_node;
+ map['k'].function = info_kill_node;
+ map['n'].function = info_next_node;
+ map['o'].function = info_next_window;
+ map['O'].function = info_goto_invocation_node;
+ map['p'].function = info_prev_node;
+ map['r'].function = info_xref_item;
+ map['t'].function = info_tile_windows;
+ map['u'].function = info_up_node;
+ map['w'].function = info_toggle_wrap;
+ map[','].function = info_next_index_match;
+ keymap_bind_keyseq (info_keymap, ":e", &map[Control ('v')]);
+
+ /* Arrow key bindings for Info windows keymap. */
+ map = info_keymap;
+ keymap_bind_keyseq (map, term_kN, &map[Control ('v')]); /* pagedown */
+ keymap_bind_keyseq (map, term_ku, &map[Control ('p')]); /* up */
+ keymap_bind_keyseq (map, "\033OA", &map[Control ('p')]);
+ keymap_bind_keyseq (map, "\033[A", &map[Control ('p')]);
+ keymap_bind_keyseq (map, term_kd, &map[Control ('n')]); /* down */
+ keymap_bind_keyseq (map, "\033OB", &map[Control ('n')]);
+ keymap_bind_keyseq (map, "\033[B", &map[Control ('n')]);
+ keymap_bind_keyseq (map, term_kr, &map[Control ('f')]); /* right */
+ keymap_bind_keyseq (map, "\033OC", &map[Control ('f')]);
+ keymap_bind_keyseq (map, "\033[C", &map[Control ('f')]);
+ keymap_bind_keyseq (map, term_kl, &map[Control ('b')]); /* left */
+ keymap_bind_keyseq (map, "\033OD", &map[Control ('b')]);
+ keymap_bind_keyseq (map, "\033[D", &map[Control ('b')]);
+ keymap_bind_keyseq (map, term_kh, &map['b']); /* home */
+ keymap_bind_keyseq (map, term_ke, &map['e']); /* end */
+
+ map = (Keymap)info_keymap[ESC].function;
+ keymap_bind_keyseq (map, term_kl, &map['b']); /* left */
+ keymap_bind_keyseq (map, "\033OA", &map['b']);
+ keymap_bind_keyseq (map, "\033[A", &map['b']);
+ keymap_bind_keyseq (map, term_kr, &map['f']); /* right */
+ keymap_bind_keyseq (map, "\033OB", &map['f']);
+ keymap_bind_keyseq (map, "\033[B", &map['f']);
+ keymap_bind_keyseq (map, term_kN, &map[Control ('v')]); /* pagedown */
+ keymap_bind_keyseq (map, term_kP, &map[DEL]); /* pageup */
+ keymap_bind_keyseq (map, term_kD, &map[DEL]); /* delete */
+
+ /* The alternative to this definition of a `main map' key in the
+ `ESC map' section, is something like:
+ keymap_bind_keyseq (map, term_kP, &((KeyMap)map[ESC].function).map['v']);
+ */
+ keymap_bind_keyseq (info_keymap/*sic*/, term_kP, &map['v']); /* pageup */
+}
+
+void
+initialize_info_keymaps ()
+{
+ if (vi_keys_p)
+ initialize_vi_like_keymaps ();
+ else
+ initialize_emacs_like_keymaps ();
+}
+
+#else /* defined(INFOKEY) */
+
+/* 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,
+ SPC, NUL, A_info_scroll_forward,
+ 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('g'), NUL, A_info_abort_key,
+ 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_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,
+ 'q', NUL, A_info_quit,
+ 'r', NUL, A_info_xref_item,
+ 's', NUL, A_info_search,
+ 'S', NUL, A_info_search_case_sensitively,
+ 't', NUL, A_info_top_node,
+ 'u', NUL, A_info_up_node,
+ DEL, NUL, A_info_scroll_backward,
+ 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_page_only,
+ SK_ESCAPE, SK_PAGE_DOWN, NUL, A_info_scroll_forward_page_only,
+ SK_ESCAPE, SK_UP_ARROW, NUL, A_info_prev_line,
+ '\033', 'O', 'A', NUL, A_info_prev_line,
+ '\033', '[', 'A', NUL, A_info_prev_line,
+ SK_ESCAPE, SK_DOWN_ARROW, NUL, A_info_next_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,
+};
+
+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,
+ SPC, NUL, A_info_scroll_forward,
+ 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('g'), NUL, A_info_abort_key,
+ 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,
+ ':', 'Q', NUL, A_info_quit,
+ 'Z', 'Z', NUL, A_info_quit,
+ 'r', NUL, A_info_redraw_display,
+ 'R', NUL, A_info_redraw_display,
+ '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,
+ DEL, NUL, A_info_scroll_backward,
+ 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_page_only,
+ SK_ESCAPE, SK_PAGE_DOWN, NUL, A_info_scroll_forward_page_only,
+ SK_ESCAPE, SK_UP_ARROW, NUL, A_info_up_line,
+ '\033', 'O', 'A', NUL, A_info_up_line,
+ '\033', '[', 'A', NUL, A_info_up_line,
+ SK_ESCAPE, SK_DOWN_ARROW, NUL, A_info_down_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,
+};
+
+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((char *) _("Ignoring invalid infokey file `%s' - too small"),
+ filename, NULL);
+ else
+ info_error((char *) _("Ignoring invalid infokey file `%s' - too big"),
+ filename, NULL);
+ close(f);
+ free(filename);
+ return 0;
+ }
+
+ /* Read the file into a buffer. */
+ buf = (unsigned char *)xmalloc((int)len);
+ nread = read(f, buf, (unsigned int) len);
+ close(f);
+ if ((unsigned int) nread != len)
+ {
+ info_error((char *) _("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((char *) _("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
+ ((char *) _("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((char *) _("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((char *) _("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((char *) _("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((char *) _("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);
+}
+
+#endif /* defined(INFOKEY) */
+/* vim: set sw=2 cino={1s>2sn-s^-se-s: */
diff --git a/macros/texinfo/contrib/texinfo-hu/texinfo/info/infomap.h b/macros/texinfo/contrib/texinfo-hu/texinfo/info/infomap.h
new file mode 100644
index 0000000000..31e4d8275f
--- /dev/null
+++ b/macros/texinfo/contrib/texinfo-hu/texinfo/info/infomap.h
@@ -0,0 +1,82 @@
+/* infomap.h -- description of a keymap in Info and related functions.
+ $Id: infomap.h,v 1.3 2004/04/11 17:56:46 karl Exp $
+
+ Copyright (C) 1993, 2001, 2004 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., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
+
+ 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/macros/texinfo/contrib/texinfo-hu/texinfo/info/key.h b/macros/texinfo/contrib/texinfo-hu/texinfo/info/key.h
new file mode 100644
index 0000000000..35d2762211
--- /dev/null
+++ b/macros/texinfo/contrib/texinfo-hu/texinfo/info/key.h
@@ -0,0 +1,35 @@
+/* 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 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., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
+
+ 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/macros/texinfo/contrib/texinfo-hu/texinfo/info/m-x.c b/macros/texinfo/contrib/texinfo-hu/texinfo/info/m-x.c
new file mode 100644
index 0000000000..52365d1843
--- /dev/null
+++ b/macros/texinfo/contrib/texinfo-hu/texinfo/info/m-x.c
@@ -0,0 +1,214 @@
+/* m-x.c -- Meta-x minibuffer reader.
+ $Id: m-x.c,v 1.3 2004/04/11 17:56:46 karl Exp $
+
+ Copyright (C) 1993, 1997, 1998, 2001, 2002, 2004 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., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
+
+ 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 (char *prompt, WINDOW *window)
+{
+ register int i;
+ char *line;
+ REFERENCE **array = (REFERENCE **)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 = (REFERENCE *)xmalloc (sizeof (REFERENCE));
+ entry->label = xstrdup (function_doc_array[i].func_name);
+ entry->nodename = (char *)NULL;
+ entry->filename = (char *)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 ((char *) _("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 = (char *)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 ((char *) _("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 ((char *) _("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/macros/texinfo/contrib/texinfo-hu/texinfo/info/makedoc.c b/macros/texinfo/contrib/texinfo-hu/texinfo/info/makedoc.c
new file mode 100644
index 0000000000..41b1beb967
--- /dev/null
+++ b/macros/texinfo/contrib/texinfo-hu/texinfo/info/makedoc.c
@@ -0,0 +1,578 @@
+/* makedoc.c -- make doc.c and funs.h from input files.
+ $Id: makedoc.c,v 1.4 2004/04/11 17:56:46 karl Exp $
+
+ Copyright (C) 1993, 1997, 1998, 1999, 2001, 2002, 2003, 2004 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., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
+
+ 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"
+
+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'.",
+ (char *)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[] = {",
+ "",
+ (char *)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\".",
+ "",
+ (char *)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[] = {",
+ "",
+ (char *)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 = (EMACS_TAG_BLOCK **)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;
+ }
+
+ funs_stream = must_fopen (funs_filename, "w");
+ doc_stream = must_fopen (doc_filename, "w");
+ key_stream = must_fopen (key_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,
+ " { (VFunction *)NULL, (char *)NULL, (FUNCTION_KEYSEQ *)NULL, (char *)NULL }\n};\n");
+#else /* !NAMED_FUNCTIONS */
+ fprintf (doc_stream, " { (VFunction *)NULL, (FUNCTION_KEYSEQ *)NULL, (char *)NULL }\n};\n");
+#endif /* !NAMED_FUNCTIONS */
+
+#else /* !INFOKEY */
+
+#if defined (NAMED_FUNCTIONS)
+ fprintf (doc_stream,
+ " { (VFunction *)NULL, (char *)NULL, (char *)NULL }\n};\n");
+#else /* !NAMED_FUNCTIONS */
+ fprintf (doc_stream, " { (VFunction *)NULL, (char *)NULL }\n};\n");
+#endif /* !NAMED_FUNCTIONS */
+
+#endif /* !INFOKEY */
+
+ fprintf (key_stream, " { (char *)NULL, 0 }\n};\n");
+ fprintf (funs_stream, "\n#define A_NCOMMANDS %u\n", next_func_key());
+
+ fclose (funs_stream);
+ fclose (doc_stream);
+ fclose (key_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 = (EMACS_TAG_BLOCK *)xmalloc (sizeof (EMACS_TAG_BLOCK));
+ block->filename = xstrdup (filename);
+ block->entrylen = 0;
+ block->entries = (EMACS_TAG **)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 = (EMACS_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 = (char *)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 = (char *)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 = (char *)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 = (char *)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 = (char *)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/macros/texinfo/contrib/texinfo-hu/texinfo/info/man.c b/macros/texinfo/contrib/texinfo-hu/texinfo/info/man.c
new file mode 100644
index 0000000000..33fd6d4be0
--- /dev/null
+++ b/macros/texinfo/contrib/texinfo-hu/texinfo/info/man.c
@@ -0,0 +1,734 @@
+/* man.c: How to read and format man files.
+ $Id: man.c,v 1.4 2004/04/11 17:56:46 karl Exp $
+
+ Copyright (C) 1995, 1997, 1998, 1999, 2000, 2002, 2003, 2004 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., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
+
+ Written by Brian Fox Thu May 4 09:17:52 1995 (bfox@ai.mit.edu). */
+
+#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 void clean_manpage (char *manpage);
+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 =
+ (char *)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 = (char *)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 = (char *)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 ((char *)NULL);
+}
+
+/* Return the full pathname of the system man page formatter. */
+static char *
+find_man_formatter (void)
+{
+ return (executable_file_in_path ("man", (char *)getenv ("PATH")));
+}
+
+static char *manpage_pagename = (char *)NULL;
+static char *manpage_section = (char *)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 = (char *)NULL;
+ manpage_section = (char *)NULL;
+
+ for (i = 0; pagename[i] != '\0' && pagename[i] != '('; i++);
+
+ manpage_pagename = (char *)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 = (char *)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] = { (char *)NULL };
+ int pipes[2];
+ pid_t child;
+ RETSIGTYPE (*sigsave) (int signum);
+ char *formatted_page = NULL;
+ int arg_index = 1;
+
+ if (formatter_args[0] == (char *)NULL)
+ formatter_args[0] = find_man_formatter ();
+
+ if (formatter_args[0] == (char *)NULL)
+ return ((char *)NULL);
+
+ get_page_and_section (pagename);
+
+ if (manpage_section != (char *)NULL)
+ formatter_args[arg_index++] = manpage_section;
+
+ formatter_args[arg_index++] = manpage_pagename;
+ formatter_args[arg_index] = (char *)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 ((char *)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 ((char *)NULL);
+ formatted_page = read_from_fd (fileno (fpipe));
+ if (pclose (fpipe) == -1)
+ {
+ if (formatted_page)
+ free (formatted_page);
+ return ((char *)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 void
+clean_manpage (char *manpage)
+{
+ register int i, j;
+ int newline_count = 0;
+ char *newpage;
+
+ newpage = (char *)xmalloc (1 + strlen (manpage));
+
+ for (i = 0, j = 0; (newpage[j] = manpage[i]); i++, j++)
+ {
+ if (manpage[i] == '\n')
+ newline_count++;
+ else
+ newline_count = 0;
+
+ if (newline_count == 3)
+ {
+ j--;
+ newline_count--;
+ }
+
+ /* A malformed man page could have a \b as its first character,
+ in which case decrementing j by 2 will cause us to write into
+ newpage[-1], smashing the hidden info stored there by malloc. */
+ if (manpage[i] == '\b' || (manpage[i] == '\f' && j > 0))
+ j -= 2;
+ else if (!raw_escapes_p)
+ {
+ /* Remove the ANSI escape sequences for color, boldface,
+ underlining, and italics, generated by some versions of
+ Groff. */
+ if (manpage[i] == '\033' && manpage[i + 1] == '['
+ && isdigit (manpage[i + 2]))
+ {
+ if (isdigit (manpage[i + 3]) && manpage[i + 4] == 'm')
+ {
+ i += 4;
+ j--;
+ }
+ else if (manpage[i + 3] == 'm')
+ {
+ i += 3;
+ j--;
+ }
+ /* Else do nothing: it's some unknown escape sequence,
+ so let's leave it alone. */
+ }
+ }
+ }
+
+ newpage[j++] = 0;
+
+ strcpy (manpage, newpage);
+ free (newpage);
+}
+
+static NODE *
+manpage_node_of_file_buffer (FILE_BUFFER *file_buffer, char *pagename)
+{
+ NODE *node = (NODE *)NULL;
+ TAG *tag = (TAG *)NULL;
+
+ if (file_buffer->contents)
+ {
+ register int i;
+
+ for (i = 0; (tag = file_buffer->tags[i]); i++)
+ {
+ if (strcasecmp (pagename, tag->nodename) == 0)
+ break;
+ }
+ }
+
+ if (tag)
+ {
+ node = (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 = (char *)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 = (char *)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 = (char *)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 != (char *)NULL) && (*buffer == '\0'))
+ {
+ free (buffer);
+ buffer = (char *)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",
+ (char *)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] != (char *)NULL; i++)
+ {
+ position = search_forward (reference_section_starters[i], &frs_binding);
+ if (position != -1)
+ break;
+ }
+
+ if (position == -1)
+ return ((SEARCH_BINDING *)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 = (REFERENCE **)NULL;
+ int refs_index = 0;
+ int refs_slots = 0;
+ long position;
+
+ reference_section = find_reference_section (node);
+
+ if (reference_section == (SEARCH_BINDING *)NULL)
+ return ((REFERENCE **)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 = (REFERENCE *)xmalloc (sizeof (REFERENCE));
+ entry->label = (char *)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 = (REFERENCE **)NULL;
+ REFERENCE *entry;
+ int brefs_index = 0;
+ int brefs_slots = 0;
+ int start, end;
+
+ if (!all_refs)
+ return ((REFERENCE **)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/macros/texinfo/contrib/texinfo-hu/texinfo/info/man.h b/macros/texinfo/contrib/texinfo-hu/texinfo/info/man.h
new file mode 100644
index 0000000000..73ef1b6274
--- /dev/null
+++ b/macros/texinfo/contrib/texinfo-hu/texinfo/info/man.h
@@ -0,0 +1,39 @@
+/* man.h: Defines and external function declarations for man.c.
+ $Id: man.h,v 1.3 2004/04/11 17:56:46 karl Exp $
+
+ This file is part of GNU Info, a program for reading online documentation
+ stored in Info format.
+
+ Copyright (C) 1993, 1997, 2004 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., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
+
+ 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/macros/texinfo/contrib/texinfo-hu/texinfo/info/nodemenu.c b/macros/texinfo/contrib/texinfo-hu/texinfo/info/nodemenu.c
new file mode 100644
index 0000000000..1090d08db0
--- /dev/null
+++ b/macros/texinfo/contrib/texinfo-hu/texinfo/info/nodemenu.c
@@ -0,0 +1,347 @@
+/* nodemenu.c -- produce a menu of all visited nodes.
+ $Id: nodemenu.c,v 1.5 2004/04/11 17:56:46 karl Exp $
+
+ Copyright (C) 1993, 1997, 1998, 2002, 2003, 2004 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., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
+
+ 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 = (char *)NULL;
+
+ if (!line_buffer)
+ line_buffer = (char *)xmalloc (1000);
+
+ if (node->parent)
+ {
+ parent = filename_non_directory (node->parent);
+ if (!parent)
+ parent = node->parent;
+ }
+ else
+ parent = (char *)NULL;
+
+ containing_file = node->filename;
+
+ if (!parent && !*containing_file)
+ sprintf (line_buffer, "* %s::", node->nodename);
+ else
+ {
+ char *file = (char *)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 (strcasecmp (*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 = (char **)NULL;
+ int lines_index = 0, lines_slots = 0;
+
+ if (!info_windows)
+ return ((NODE *)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] = (char *)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 = (char **)xmalloc ((1 + newlen) * sizeof (char *));
+ for (i = 0, j = 0; i < lines_index; i++)
+ if (lines[i])
+ temp[j++] = lines[i];
+
+ temp[j] = (char *)NULL;
+ free (lines);
+ lines = temp;
+ lines_index = newlen;
+ }
+
+ initialize_message_buffer ();
+
+ printf_to_message_buffer
+ ("%s", replace_in_documentation
+ ((char *) _("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 != (char **)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 ((NODE *)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 ((Function *)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 ((Function *)NULL);
+
+ menu = info_menu_of_node (node);
+ free (node);
+
+ line =
+ info_read_completing_in_echo_area (window,
+ (char *) _("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 ((char *) _("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/macros/texinfo/contrib/texinfo-hu/texinfo/info/nodes.c b/macros/texinfo/contrib/texinfo-hu/texinfo/info/nodes.c
new file mode 100644
index 0000000000..a3381a8314
--- /dev/null
+++ b/macros/texinfo/contrib/texinfo-hu/texinfo/info/nodes.c
@@ -0,0 +1,1263 @@
+/* nodes.c -- how to get an Info file and node.
+ $Id: nodes.c,v 1.4 2004/04/11 17:56:46 karl Exp $
+
+ Copyright (C) 1993, 1998, 1999, 2000, 2002, 2003, 2004 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., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
+
+ 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. */
+ if (!node && (nodename == NULL || strcasecmp (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;
+
+ /* 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";
+
+ /* 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 = (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 (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 (strcasecmp (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 strcasecmp. 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 = (SUBFILE *)xmalloc (sizeof (SUBFILE));
+ subfile->filename = (char *)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 = (char **) xmalloc ((1 + i) * sizeof (char *));
+
+ for (i = 0; subfiles[i]; i++)
+ {
+ char *fullpath;
+
+ fullpath = (char *) 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/macros/texinfo/contrib/texinfo-hu/texinfo/info/nodes.h b/macros/texinfo/contrib/texinfo-hu/texinfo/info/nodes.h
new file mode 100644
index 0000000000..e2fbabea17
--- /dev/null
+++ b/macros/texinfo/contrib/texinfo-hu/texinfo/info/nodes.h
@@ -0,0 +1,156 @@
+/* nodes.h -- How we represent nodes internally.
+ $Id: nodes.h,v 1.3 2004/04/11 17:56:46 karl Exp $
+
+ Copyright (C) 1993, 1997, 1998, 2002, 2004 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., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
+
+ 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/macros/texinfo/contrib/texinfo-hu/texinfo/info/pcterm.c b/macros/texinfo/contrib/texinfo-hu/texinfo/info/pcterm.c
new file mode 100644
index 0000000000..ed348dc54d
--- /dev/null
+++ b/macros/texinfo/contrib/texinfo-hu/texinfo/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.4 2004/04/11 17:56:46 karl Exp $
+
+ Copyright (C) 1998, 1999, 2003, 2004 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.,
+ 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. */
+
+
+/* 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 (unsigned const char *)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 (long)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/macros/texinfo/contrib/texinfo-hu/texinfo/info/search.c b/macros/texinfo/contrib/texinfo-hu/texinfo/info/search.c
new file mode 100644
index 0000000000..a1d5da6c71
--- /dev/null
+++ b/macros/texinfo/contrib/texinfo-hu/texinfo/info/search.c
@@ -0,0 +1,497 @@
+/* search.c -- searching large bodies of text.
+ $Id: search.c,v 1.3 2004/04/11 17:56:46 karl Exp $
+
+ Copyright (C) 1993, 1997, 1998, 2002, 2004 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., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
+
+ Written by Brian Fox (bfox@ai.mit.edu). */
+
+#include "info.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 = (SEARCH_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 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 = (char *)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 ((long) (buff - binding->buffer));
+ }
+
+ buff++;
+ }
+
+ if (alternate)
+ free (alternate);
+
+ return ((long) -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 = (char *)NULL;
+
+ len = strlen (input_string);
+
+ /* Reverse the characters in the search string. */
+ string = (char *)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 ((long) (1 + (buff - binding->buffer)));
+ }
+
+ buff--;
+ }
+
+ free (string);
+ if (alternate)
+ free (alternate);
+
+ return ((long) -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/macros/texinfo/contrib/texinfo-hu/texinfo/info/search.h b/macros/texinfo/contrib/texinfo-hu/texinfo/info/search.h
new file mode 100644
index 0000000000..3e0610799b
--- /dev/null
+++ b/macros/texinfo/contrib/texinfo-hu/texinfo/info/search.h
@@ -0,0 +1,75 @@
+/* search.h -- Structure used to search large bodies of text, with bounds.
+ $Id: search.h,v 1.3 2004/04/11 17:56:46 karl Exp $
+
+ Copyright (C) 1993, 1997, 1998, 2002, 2004 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., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
+
+ 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 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/macros/texinfo/contrib/texinfo-hu/texinfo/info/session.c b/macros/texinfo/contrib/texinfo-hu/texinfo/info/session.c
new file mode 100644
index 0000000000..7a8996bbe2
--- /dev/null
+++ b/macros/texinfo/contrib/texinfo-hu/texinfo/info/session.c
@@ -0,0 +1,5039 @@
+/* session.c -- user windowing interface to Info.
+ $Id: session.c,v 1.16 2004/12/14 00:15:36 karl Exp $
+
+ Copyright (C) 1993, 1996, 1997, 1998, 1999, 2000, 2001, 2002, 2003, 2004
+ 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., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
+
+ 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;
+
+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 = (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 ((char *) 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 ((char *) 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, 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
+ ((char *) _("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 = (VFunction *)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 ((char *) 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 != (FILE *)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 = (INFO_WINDOW *)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 = (INFO_WINDOW *)xmalloc (sizeof (INFO_WINDOW));
+ info_win->window = window;
+ info_win->nodes = (NODE **)NULL;
+ info_win->pagetops = (int *)NULL;
+ info_win->points = (long *)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 = (INFO_WINDOW *)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] = (INFO_WINDOW *)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 ((char *) 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->line_starts[new], goal);
+ info_show_point (window);
+ }
+}
+
+/* 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
+ {
+ old_line = window_line_of_point (window);
+ new_line = old_line + count;
+ 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
+ {
+ old_line = window_line_of_point (window);
+ new_line = old_line - count;
+ move_to_new_line (old_line, new_line, window);
+ }
+}
+
+/* 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"))
+{
+ register int point, len;
+ register char *buffer;
+
+ buffer = window->node->contents;
+ len = window->node->nodelen;
+
+ for (point = window->point;
+ (point < len) && (buffer[point] != '\n');
+ point++);
+
+ 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"))
+{
+ register int point;
+ register char *buffer;
+
+ buffer = window->node->contents;
+ point = window->point;
+
+ for (; (point) && (buffer[point - 1] != '\n'); point--);
+
+ /* If at a line start already, do nothing. */
+ if (point != window->point)
+ {
+ window->point = point;
+ info_show_point (window);
+ }
+}
+
+/* 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
+ {
+ window->point += count;
+
+ if (window->point >= window->node->nodelen)
+ window->point = window->node->nodelen - 1;
+
+ 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
+ {
+ window->point -= count;
+
+ if (window->point < 0)
+ window->point = 0;
+
+ info_show_point (window);
+ }
+}
+
+#define alphabetic(c) (islower (c) || isupper (c) || isdigit (c))
+
+/* Move forward a word in this node. */
+DECLARE_INFO_COMMAND (info_forward_word, _("Move forward a word"))
+{
+ long point;
+ char *buffer;
+ int end, c;
+
+ if (count < 0)
+ {
+ info_backward_word (window, -count, key);
+ return;
+ }
+
+ point = window->point;
+ buffer = window->node->contents;
+ end = window->node->nodelen;
+
+ while (count)
+ {
+ if (point + 1 >= 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 = buffer[point];
+
+ if (!alphabetic (c))
+ {
+ while (++point < end)
+ {
+ c = buffer[point];
+ if (alphabetic (c))
+ break;
+ }
+ }
+
+ if (point >= end) return;
+
+ while (++point < end)
+ {
+ c = buffer[point];
+ if (!alphabetic (c))
+ break;
+ }
+ --count;
+ }
+ window->point = point;
+ info_show_point (window);
+}
+
+DECLARE_INFO_COMMAND (info_backward_word, _("Move backward a word"))
+{
+ long point;
+ char *buffer;
+ int c;
+
+ if (count < 0)
+ {
+ info_forward_word (window, -count, key);
+ return;
+ }
+
+ buffer = window->node->contents;
+ point = window->point;
+
+ while (count)
+ {
+ if (point == 0)
+ break;
+
+ /* Like info_forward_word (), except that we look at the
+ characters just before point. */
+
+ c = buffer[point - 1];
+
+ if (!alphabetic (c))
+ {
+ while (--point)
+ {
+ c = buffer[point - 1];
+ if (alphabetic (c))
+ break;
+ }
+ }
+
+ while (point)
+ {
+ c = buffer[point - 1];
+ if (!alphabetic (c))
+ break;
+ else
+ --point;
+ }
+ --count;
+ }
+ window->point = point;
+ 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", (char *)NULL
+};
+
+/* 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)))
+
+/* Move to 1st menu item, Next, Up/Next, or error in this window. */
+static void
+forward_move_node_structure (WINDOW *window, int behaviour)
+{
+ switch (behaviour)
+ {
+ case IS_PageOnly:
+ info_error ((char *) msg_at_node_bottom, NULL, NULL);
+ break;
+
+ case IS_NextOnly:
+ info_next_label_of_node (window->node);
+ if (!info_parsed_nodename && !info_parsed_filename)
+ info_error ((char *) msg_no_pointer, (char *) _("Next"), NULL);
+ else
+ {
+ window_message_in_echo_area ((char *) _("Following Next node..."),
+ NULL, NULL);
+ info_handle_pointer ("Next", window);
+ }
+ break;
+
+ case IS_Continuous:
+ {
+ /* 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);
+ window_message_in_echo_area ((char *) _("Selecting first menu item..."),
+ NULL, NULL);
+ info_menu_digit (window, 1, '1');
+ return;
+ }
+ }
+
+ /* 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 ())
+ {
+ window_message_in_echo_area ((char *) _("Selecting Next node..."),
+ NULL, NULL);
+ info_handle_pointer ("Next", window);
+ return;
+ }
+
+ /* 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. */
+ window_message_in_echo_area
+ ((char *) _("Moving Up %d time(s), then Next."),
+ (void *) (long) up_counter, NULL);
+
+ info_handle_pointer ("Next", window);
+ return;
+ }
+ 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] = (NODE *)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 ((char *) _("No more nodes within this document."),
+ NULL, NULL);
+ }
+ }
+ }
+ break;
+ }
+ }
+}
+
+/* Move Prev, Up or error in WINDOW depending on BEHAVIOUR. */
+static void
+backward_move_node_structure (WINDOW *window, int behaviour)
+{
+ switch (behaviour)
+ {
+ case IS_PageOnly:
+ info_error ((char *) msg_at_node_top, NULL, NULL);
+ break;
+
+ case IS_NextOnly:
+ info_prev_label_of_node (window->node);
+ if (!info_parsed_nodename && !info_parsed_filename)
+ info_error ((char *) _("No `Prev' for this node."), NULL, NULL);
+ else
+ {
+ window_message_in_echo_area ((char *) _("Moving Prev in this window."),
+ NULL, NULL);
+ 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 ((char *)
+ _("No `Prev' or `Up' for this node within this document."),
+ NULL, NULL);
+ else
+ {
+ window_message_in_echo_area ((char *) _("Moving Up in this window."),
+ NULL, NULL);
+ 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. */
+ window_message_in_echo_area ((char *) _("Moving Prev in this window."),
+ NULL, NULL);
+ 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);
+ window_message_in_echo_area
+ ((char *) _("Moving to `Prev's last menu item."), NULL, NULL);
+ info_menu_digit (window, 1, '0');
+ }
+ }
+ }
+ break;
+ }
+}
+
+/* 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)
+ {
+ forward_move_node_structure (window, behaviour);
+ 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))
+ {
+ backward_move_node_structure (window, behaviour);
+ return;
+ }
+ }
+ else
+ desired_top = window->pagetop - count;
+
+ if (desired_top < 0)
+ desired_top = 0;
+
+ set_window_pagetop (window, desired_top);
+ }
+}
+
+/* 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 ((char *) 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 ((char *) 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 ((char *) 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 = (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 ((char *) msg_cant_kill_last, NULL, NULL);
+ }
+ else if (window->flags & W_WindowIsPerm)
+ {
+ info_error ((char *) _("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 ((char *) 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);
+}
+
+/* **************************************************************** */
+/* */
+/* 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 = (char *)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 ((char *) 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 = (char *)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 ((char *) msg_cant_file_node, filename, nodename);
+ }
+
+ free (filename);
+ free (nodename);
+ }
+ else
+ {
+ info_error ((char *) 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 = (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 ((char *) _("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 = (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 ((char *) _("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 ((char *) 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 ((char *) _("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 ((char *) msg_no_menu_node, NULL, NULL);
+ else
+ info_error ((char *) 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 = (REFERENCE *)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 = (char *)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 strcasecmp because LINE is downcased
+ inside info_read_completing_in_echo_area. */
+ if (strcasecmp (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 = (REFERENCE *)NULL;
+ }
+
+ if (!entry && defentry)
+ info_error ((char *) _("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 ((char *) 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 ((char *) 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 ((char *) 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 = (REFERENCE **)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 = (REFERENCE *)xmalloc (sizeof (REFERENCE));
+ entry->filename = entry->nodename = (char *)NULL;
+ entry->label = (char *)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 = (REFERENCE *)xmalloc (sizeof (REFERENCE));
+ entry->filename = entry->nodename = (char *)NULL;
+ if (this_is_the_current_fb)
+ entry->label = xstrdup (fb->tags[i]->nodename);
+ else
+ {
+ entry->label = (char *) 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, (char *) _("Goto node: "),
+ items);
+ info_free_references (items);
+ }
+#else /* !GOTO_COMPLETES */
+ line = info_read_in_echo_area (window, (char *) _("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 (strcasecmp (entry->label, arg) == 0)
+ break;
+ else
+ if ((best_guess == -1)
+ && (strncasecmp (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, (char *) _("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 ((char *) 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 ((char *) 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 (strcasecmp (entry->label, arg) == 0)
+ break;
+ else
+ if (strncasecmp (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 = (char *)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 ((char *) 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, (char *) _("Get Manpage: "));
+
+ if (!line)
+ {
+ info_abort_key (window, 0, 0);
+ return;
+ }
+
+ canonicalize_whitespace (line);
+
+ if (*line)
+ {
+ char *goto_command;
+
+ goto_command = (char *)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 = (REFERENCE *)xmalloc (sizeof (REFERENCE));
+ entry->label = xstrdup (info_win->window->node->nodename);
+ entry->filename = entry->nodename = (char *)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 ((char *) _("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 ((char *) _("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, (char *) _("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 ((char *) _("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 ((char *) _("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 ((char *) _("Done."), NULL, NULL);
+#endif /* VERBOSE_NODE_DUMPING */
+}
+
+/* A place to remember already dumped nodes. */
+static char **dumped_already = (char **)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 ((char *) msg_cant_file_node,
+ filename_non_directory (filename),
+ nodename);
+ else
+ info_error ((char *) 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 ((char *) _("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 = (REFERENCE **)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 ((char *) _("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 ((char *) _("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 ((char *) _("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 ((char *) _("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 ((char *) _("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 = (char *)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 ((FILE_BUFFER *)NULL);
+
+ if (window->node->parent)
+ return (info_find_file (window->node->parent));
+
+ if (window->node->filename)
+ return (info_find_file (window->node->filename));
+
+ return ((FILE_BUFFER *)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. Final argument
+ DIR says which direction to search in. If it is positive, search
+ forward, else backwards. */
+long
+info_search_in_node (char *string, NODE *node, long int start,
+ WINDOW *window, int dir, int case_sensitive)
+{
+ 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 = 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);
+}
+
+/* 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, (WINDOW *)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 at point. 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 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)
+{
+ register int i;
+ FILE_BUFFER *file_buffer;
+ char *initial_nodename;
+ long ret, start = 0;
+
+ file_buffer = file_buffer_of_window (window);
+ initial_nodename = window->node->nodename;
+
+ /* 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. */
+ ret = info_search_in_node
+ (string, window->node, window->point + dir, window, dir,
+ case_sensitive);
+
+ if (ret != -1)
+ {
+ /* We won! */
+ if (!echo_area_is_active && !isearch_is_active)
+ window_clear_echo_area ();
+ return (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;
+
+ /* Find number of tags and current tag. */
+ last_subfile = (char *)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)
+ i = number_of_tags - 1;
+ else if (i == number_of_tags)
+ 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
+ ((char *) _("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 ((char *) 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 (string, node, start, window, dir,
+ case_sensitive);
+
+ /* 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)
+ 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 = (char *)xmalloc (search_string_size = 100);
+ search_string[0] = '\0';
+ }
+
+ if (ask_for_string)
+ {
+ prompt = (char *)xmalloc (strlen (_("%s%sfor string [%s]: "))
+ + strlen (_("Search backward"))
+ + strlen (_("Search"))
+ + strlen (_(" case-sensitively "))
+ + strlen (_(" "))
+ + strlen (search_string));
+
+ sprintf (prompt, _("%s%sfor string [%s]: "),
+ direction < 0 ? _("Search backward") : _("Search"),
+ case_sensitive ? _(" case-sensitively ") : _(" "),
+ 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 = (char *) 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);
+
+ if (result != 0 && !info_error_was_printed)
+ info_error ((char *) _("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 ((char *) _("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 ((char *) _("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 = (char *)NULL;
+
+/* The current incremental search string. */
+static char *isearch_string = (char *)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 = (SEARCH_STATE **)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 = (SEARCH_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] = (SEARCH_STATE *)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] = (SEARCH_STATE *)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 = _("I-search backward: ");
+ else
+ prefix = _("I-search: ");
+
+ p_rep_index = p_rep_size = 0;
+ p_rep = (char *)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 = (char *)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;
+
+ 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 = (char *)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 = (VFunction *)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 = (char *)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;
+ }
+ }
+ 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;
+ }
+
+
+ if (search_result == 0)
+ {
+ /* 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 : strncasecmp)
+ (window->node->contents + window->point,
+ isearch_string, isearch_string_index) == 0)) ||
+ ((dir > 0) &&
+ ((window->point - isearch_string_index) >= 0) &&
+ ((case_sensitive ? strncmp : strncasecmp)
+ (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);
+ }
+
+ /* 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 = (char *)NULL;
+ }
+ }
+}
+
+/* **************************************************************** */
+/* */
+/* Traversing and Selecting References */
+/* */
+/* **************************************************************** */
+
+/* Move to the next or previous cross reference in this node. */
+static void
+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;
+
+ 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, (WINDOW *)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, (WINDOW *)NULL, dir, 0);
+ }
+
+ firstxref =
+ info_search_in_node (INFO_XREF_LABEL, node, start, (WINDOW *)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)
+ {
+ info_error ((char *) msg_no_xref_node, NULL, NULL);
+ return;
+ }
+
+ /* 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, (WINDOW *)NULL, dir, 0);
+
+ nextxref = info_search_in_node
+ (INFO_XREF_LABEL, node, window->point + dir, (WINDOW *)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, (WINDOW *)NULL, dir, 0);
+ }
+
+ /* 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 (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;
+}
+
+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
+ info_move_to_xref (window, count, key, -1);
+}
+
+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
+ info_move_to_xref (window, count, key, 1);
+}
+
+/* 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 ((char *) _("Quit"), NULL, NULL);
+
+ info_initialize_numeric_arg ();
+ info_clear_pending_input ();
+ info_last_executed_command = (VFunction *)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 ((char *) _("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 = (char *)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, (fd_set *)NULL, (fd_set *)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 != (VFunction *)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 != (InfoCommand *)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/macros/texinfo/contrib/texinfo-hu/texinfo/info/session.h b/macros/texinfo/contrib/texinfo-hu/texinfo/info/session.h
new file mode 100644
index 0000000000..62f8ffe57d
--- /dev/null
+++ b/macros/texinfo/contrib/texinfo-hu/texinfo/info/session.h
@@ -0,0 +1,237 @@
+/* session.h -- Functions found in session.c.
+ $Id: session.h,v 1.3 2004/04/11 17:56:46 karl Exp $
+
+ Copyright (C) 1993, 1998, 1999, 2001, 2002, 2004 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., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
+
+ 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. */
+
+/* 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,
+ 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_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/macros/texinfo/contrib/texinfo-hu/texinfo/info/signals.c b/macros/texinfo/contrib/texinfo-hu/texinfo/info/signals.c
new file mode 100644
index 0000000000..724768b4ec
--- /dev/null
+++ b/macros/texinfo/contrib/texinfo-hu/texinfo/info/signals.c
@@ -0,0 +1,295 @@
+/* signals.c -- install and maintain signal handlers.
+ $Id: signals.c,v 1.7 2004/04/11 17:56:46 karl Exp $
+
+ Copyright (C) 1993, 1994, 1995, 1998, 2002, 2003, 2004 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., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
+
+ 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/macros/texinfo/contrib/texinfo-hu/texinfo/info/signals.h b/macros/texinfo/contrib/texinfo-hu/texinfo/info/signals.h
new file mode 100644
index 0000000000..2e3761e37b
--- /dev/null
+++ b/macros/texinfo/contrib/texinfo-hu/texinfo/info/signals.h
@@ -0,0 +1,96 @@
+/* signals.h -- header to include system dependent signal definitions.
+ $Id: signals.h,v 1.2 2004/04/11 17:56:46 karl Exp $
+
+ Copyright (C) 1993, 1994, 1995, 1997, 2002, 2004 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., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
+
+ 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/macros/texinfo/contrib/texinfo-hu/texinfo/info/termdep.h b/macros/texinfo/contrib/texinfo-hu/texinfo/info/termdep.h
new file mode 100644
index 0000000000..45f38aca5b
--- /dev/null
+++ b/macros/texinfo/contrib/texinfo-hu/texinfo/info/termdep.h
@@ -0,0 +1,59 @@
+/* termdep.h -- system things that terminal.c depends on.
+ $Id: termdep.h,v 1.2 2004/04/11 17:56:46 karl Exp $
+
+ Copyright (C) 1993, 1996, 1997, 1998, 2001, 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 2, or (at your option)
+ any later version.
+
+ This program is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ GNU General Public License for more details.
+
+ You should have received a copy of the GNU General Public License
+ along with this program; if not, write to the Free Software
+ Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
+
+ 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/macros/texinfo/contrib/texinfo-hu/texinfo/info/terminal.c b/macros/texinfo/contrib/texinfo-hu/texinfo/info/terminal.c
new file mode 100644
index 0000000000..9238643d45
--- /dev/null
+++ b/macros/texinfo/contrib/texinfo-hu/texinfo/info/terminal.c
@@ -0,0 +1,873 @@
+/* terminal.c -- how to handle the physical terminal for Info.
+ $Id: terminal.c,v 1.3 2004/04/11 17:56:46 karl Exp $
+
+ Copyright (C) 1988, 1989, 1990, 1991, 1992, 1993, 1996, 1997, 1998,
+ 1999, 2001, 2002, 2004 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., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
+
+ 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 = (VFunction *)NULL;
+VFunction *terminal_end_inverse_hook = (VFunction *)NULL;
+VFunction *terminal_prep_terminal_hook = (VFunction *)NULL;
+VFunction *terminal_unprep_terminal_hook = (VFunction *)NULL;
+VFunction *terminal_up_line_hook = (VFunction *)NULL;
+VFunction *terminal_down_line_hook = (VFunction *)NULL;
+VFunction *terminal_clear_screen_hook = (VFunction *)NULL;
+VFunction *terminal_clear_to_eol_hook = (VFunction *)NULL;
+VFunction *terminal_get_screen_size_hook = (VFunction *)NULL;
+VFunction *terminal_goto_xy_hook = (VFunction *)NULL;
+VFunction *terminal_initialize_terminal_hook = (VFunction *)NULL;
+VFunction *terminal_new_terminal_hook = (VFunction *)NULL;
+VFunction *terminal_put_text_hook = (VFunction *)NULL;
+VFunction *terminal_ring_bell_hook = (VFunction *)NULL;
+VFunction *terminal_write_chars_hook = (VFunction *)NULL;
+VFunction *terminal_scroll_terminal_hook = (VFunction *)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/macros/texinfo/contrib/texinfo-hu/texinfo/info/terminal.h b/macros/texinfo/contrib/texinfo-hu/texinfo/info/terminal.h
new file mode 100644
index 0000000000..dbf6b496ff
--- /dev/null
+++ b/macros/texinfo/contrib/texinfo-hu/texinfo/info/terminal.h
@@ -0,0 +1,130 @@
+/* terminal.h -- The external interface to terminal I/O.
+ $Id: terminal.h,v 1.3 2004/04/11 17:56:46 karl Exp $
+
+ Copyright (C) 1993, 1996, 1997, 2001, 2002, 2004 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., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
+
+ 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/macros/texinfo/contrib/texinfo-hu/texinfo/info/tilde.c b/macros/texinfo/contrib/texinfo-hu/texinfo/info/tilde.c
new file mode 100644
index 0000000000..ac32abd040
--- /dev/null
+++ b/macros/texinfo/contrib/texinfo-hu/texinfo/info/tilde.c
@@ -0,0 +1,342 @@
+/* tilde.c -- tilde expansion code (~/foo := $HOME/foo).
+ $Id: tilde.c,v 1.3 2004/04/11 17:56:46 karl Exp $
+
+ Copyright (C) 1988, 1989, 1990, 1991, 1992, 1993, 1996, 1998, 1999,
+ 2002, 2004 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., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
+
+ Written by Brian Fox (bfox@ai.mit.edu). */
+
+/* Include config.h before doing alloca. */
+#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~", (char *)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", (char *)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 = (CFunction *)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 = (char *)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 = (char *)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 = (char *)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 = (char *)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/macros/texinfo/contrib/texinfo-hu/texinfo/info/tilde.h b/macros/texinfo/contrib/texinfo-hu/texinfo/info/tilde.h
new file mode 100644
index 0000000000..b499f3efea
--- /dev/null
+++ b/macros/texinfo/contrib/texinfo-hu/texinfo/info/tilde.h
@@ -0,0 +1,54 @@
+/* tilde.h: Externally available variables and function in libtilde.a.
+ $Id: tilde.h,v 1.3 2004/04/11 17:56:46 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 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., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
+
+ 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/macros/texinfo/contrib/texinfo-hu/texinfo/info/variables.c b/macros/texinfo/contrib/texinfo-hu/texinfo/info/variables.c
new file mode 100644
index 0000000000..3636801a49
--- /dev/null
+++ b/macros/texinfo/contrib/texinfo-hu/texinfo/info/variables.c
@@ -0,0 +1,305 @@
+/* variables.c -- how to manipulate user visible variables in Info.
+ $Id: variables.c,v 1.3 2004/04/11 17:56:46 karl Exp $
+
+ Copyright (C) 1993, 1997, 2001, 2002, 2004 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., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
+
+ 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", (char *)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 },
+
+ { "scroll-step",
+ N_("The number lines to scroll when the cursor moves out of the window"),
+ &window_scroll_step, (char **)NULL },
+
+ { "ISO-Latin",
+ N_("When \"On\", Info accepts and displays ISO Latin characters"),
+ &ISO_Latin_p, (char **)on_off_choices },
+
+ { (char *)NULL, (char *)NULL, (int *)NULL, (char **)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 ((char *) _("Describe variable: "), window);
+
+ if (!var)
+ return;
+
+ description = (char *)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 ((char *) _("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 = (REFERENCE **)NULL;
+ int array_index = 0;
+ int array_slots = 0;
+
+ for (i = 0; var->choices[i]; i++)
+ {
+ REFERENCE *entry;
+
+ entry = (REFERENCE *)xmalloc (sizeof (REFERENCE));
+ entry->label = xstrdup (var->choices[i]);
+ entry->nodename = (char *)NULL;
+ entry->filename = (char *)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 (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 ((VARIABLE_ALIST *)NULL);
+ }
+
+ /* User accepted "default"? (There is none.) */
+ if (!*line)
+ {
+ free (line);
+ return ((VARIABLE_ALIST *)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 ((VARIABLE_ALIST *)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 = (REFERENCE **)NULL;
+ int array_index = 0, array_slots = 0;
+
+ for (i = 0; info_variables[i].name; i++)
+ {
+ REFERENCE *entry;
+
+ entry = (REFERENCE *) xmalloc (sizeof (REFERENCE));
+ entry->label = xstrdup (info_variables[i].name);
+ entry->nodename = (char *)NULL;
+ entry->filename = (char *)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/macros/texinfo/contrib/texinfo-hu/texinfo/info/variables.h b/macros/texinfo/contrib/texinfo-hu/texinfo/info/variables.h
new file mode 100644
index 0000000000..7e5b08239b
--- /dev/null
+++ b/macros/texinfo/contrib/texinfo-hu/texinfo/info/variables.h
@@ -0,0 +1,66 @@
+/* variables.h -- Description of user visible variables in Info.
+ $Id: variables.h,v 1.3 2004/04/11 17:56:46 karl Exp $
+
+ This file is part of GNU Info, a program for reading online documentation
+ stored in Info format.
+
+ Copyright (C) 1993, 1997, 2004 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., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
+
+ 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 (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 ISO_Latin_p;
+
+#endif /* not INFO_VARIABLES_H */
diff --git a/macros/texinfo/contrib/texinfo-hu/texinfo/info/window.c b/macros/texinfo/contrib/texinfo-hu/texinfo/info/window.c
new file mode 100644
index 0000000000..cf5665b038
--- /dev/null
+++ b/macros/texinfo/contrib/texinfo-hu/texinfo/info/window.c
@@ -0,0 +1,1554 @@
+/* window.c -- windows in Info.
+ $Id: window.c,v 1.4 2004/04/11 17:56:46 karl Exp $
+
+ Copyright (C) 1993, 1997, 1998, 2001, 2002, 2003, 2004 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., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
+
+ 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)
+
+/* 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;
+ }
+ }
+}
+
+/* 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;
+ 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);
+}
+
+/* Calculate a list of line starts for the node belonging to WINDOW. The line
+ starts are pointers to the actual text within WINDOW->NODE. */
+void
+calculate_line_starts (WINDOW *window)
+{
+ register int i, hpos;
+ char **line_starts = NULL;
+ int line_starts_index = 0, line_starts_slots = 0;
+ int bump_index;
+ NODE *node;
+
+ window->line_starts = NULL;
+ window->line_count = 0;
+ node = window->node;
+
+ if (!node)
+ return;
+
+ /* Grovel the node starting at the top, and for each line calculate the
+ width of the characters appearing in that line. Add each line start
+ to our array. */
+ i = 0;
+ hpos = 0;
+ bump_index = 0;
+
+ while (i < node->nodelen)
+ {
+ char *line = node->contents + i;
+ unsigned int cwidth, c;
+
+ add_pointer_to_array (line, line_starts_index, line_starts,
+ line_starts_slots, 100, char *);
+ if (bump_index)
+ {
+ i++;
+ bump_index = 0;
+ }
+
+ while (1)
+ {
+ /* The cast to unsigned char is for 8-bit characters, which
+ could be passed as negative integers to character_width
+ and wreak havoc on some naive implementations of iscntrl. */
+ c = (unsigned char) node->contents[i];
+
+ /* Support ANSI escape sequences for -R. */
+ if (raw_escapes_p
+ && c == '\033'
+ && node->contents[i+1] == '['
+ && isdigit (node->contents[i+2]))
+ {
+ if (node->contents[i+3] == 'm')
+ {
+ i += 3;
+ cwidth = 0;
+ }
+ else if (isdigit (node->contents[i+3])
+ && node->contents[i+4] == 'm')
+ {
+ i += 4;
+ cwidth = 0;
+ }
+ else
+ cwidth = character_width (c, hpos);
+ }
+ else
+ cwidth = character_width (c, hpos);
+
+ /* If this character fits within this line, just do the next one. */
+ if ((hpos + cwidth) < (unsigned int) window->width)
+ {
+ i++;
+ hpos += cwidth;
+ continue;
+ }
+ else
+ {
+ /* If this character would position the cursor at the start of
+ the next printed screen line, then do the next line. */
+ if (c == '\n' || c == '\r' || c == '\t')
+ {
+ i++;
+ hpos = 0;
+ break;
+ }
+ else
+ {
+ /* This character passes the window width border. Postion
+ the cursor after the printed character, but remember this
+ line start as where this character is. A bit tricky. */
+
+ /* If this window doesn't wrap lines, proceed to the next
+ physical line here. */
+ if (window->flags & W_NoWrap)
+ {
+ hpos = 0;
+ while (i < node->nodelen && node->contents[i] != '\n')
+ i++;
+
+ if (node->contents[i] == '\n')
+ i++;
+ }
+ else
+ {
+ hpos = the_screen->width - hpos;
+ bump_index++;
+ }
+ break;
+ }
+ }
+ }
+ }
+ window->line_starts = line_starts;
+ window->line_count = line_starts_index;
+}
+
+/* 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 user might set this to 1 for smooth scrolling. If
+ set to zero, the line containing point is centered within the window. */
+int window_scroll_step = 0;
+
+/* 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)
+{
+ int i, hpos, end;
+ char *line;
+
+ i = window_line_of_point (window);
+
+ if (i < 0)
+ return (-1);
+
+ line = window->line_starts[i];
+ end = window->point - (line - window->node->contents);
+
+ for (hpos = 0, i = 0; i < end; i++)
+ {
+ /* Support ANSI escape sequences for -R. */
+ if (raw_escapes_p
+ && line[i] == '\033'
+ && line[i+1] == '['
+ && isdigit (line[i+2]))
+ {
+ if (line[i+3] == 'm')
+ i += 3;
+ else if (isdigit (line[i+3]) && line[i+4] == 'm')
+ i += 4;
+ else
+ hpos += character_width (line[i], hpos);
+ }
+ else
+ hpos += character_width (line[i], hpos);
+ }
+
+ return (hpos);
+}
+
+/* Count the number of characters in LINE that precede the printed column
+ offset of GOAL. */
+int
+window_chars_to_goal (char *line, int goal)
+{
+ register int i, check = 0, hpos;
+
+ for (hpos = 0, i = 0; line[i] != '\n'; i++)
+ {
+ /* Support ANSI escape sequences for -R. */
+ if (raw_escapes_p
+ && line[i] == '\033'
+ && line[i+1] == '['
+ && isdigit (line[i+2])
+ && (line[i+3] == 'm'
+ || (isdigit (line[i+3]) && line[i+4] == 'm')))
+ while (line[i] != 'm')
+ i++;
+ else
+ check = hpos + character_width (line[i], hpos);
+
+ if (check > goal)
+ break;
+
+ hpos = check;
+ }
+ return (i);
+}
+
+/* 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 (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 (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 (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;
+ 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 = (char *) 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 (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 (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);
+}
diff --git a/macros/texinfo/contrib/texinfo-hu/texinfo/info/window.h b/macros/texinfo/contrib/texinfo-hu/texinfo/info/window.h
new file mode 100644
index 0000000000..44f620f0a4
--- /dev/null
+++ b/macros/texinfo/contrib/texinfo-hu/texinfo/info/window.h
@@ -0,0 +1,241 @@
+/* window.h -- Structure and flags used in manipulating Info windows.
+ $Id: window.h,v 1.3 2004/04/11 17:56:46 karl Exp $
+
+ This file is part of GNU Info, a program for reading online documentation
+ stored in Info format.
+
+ Copyright (C) 1993, 1997, 2004 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., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
+
+ 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)
+
+/* 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. */
+ 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. */
+
+/* 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 (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 (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 (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 (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 LINE that precede the printed column
+ offset of GOAL. */
+extern int window_chars_to_goal (char *line, int goal);
+
+#endif /* not INFO_WINDOW_H */
diff --git a/macros/texinfo/contrib/texinfo-hu/texinfo/install-sh b/macros/texinfo/contrib/texinfo-hu/texinfo/install-sh
new file mode 100644
index 0000000000..6ebe46de6c
--- /dev/null
+++ b/macros/texinfo/contrib/texinfo-hu/texinfo/install-sh
@@ -0,0 +1,323 @@
+#!/bin/sh
+# install - install a program, script, or datafile
+
+scriptversion=2004-12-17.09
+
+# 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.
+
+# 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 paths if you don't have them in your path; or use env. 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}"
+
+chmodcmd="$chmodprog 0755"
+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 -n "$1"; do
+ case $1 in
+ -c) shift
+ continue;;
+
+ -d) dir_arg=true
+ shift
+ continue;;
+
+ -g) chgrpcmd="$chgrpprog $2"
+ shift
+ shift
+ continue;;
+
+ --help) echo "$usage"; exit 0;;
+
+ -m) chmodcmd="$chmodprog $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 0;;
+
+ *) # When -d is used, all remaining arguments are directories to create.
+ # When -t is used, the destination is already specified.
+ test -n "$dir_arg$dstarg" && break
+ # 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
+ break;;
+ esac
+done
+
+if test -z "$1"; 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
+
+for src
+do
+ # Protect names starting with `-'.
+ case $src in
+ -*) src=./$src ;;
+ esac
+
+ if test -n "$dir_arg"; then
+ dst=$src
+ src=
+
+ if test -d "$dst"; then
+ mkdircmd=:
+ chmodcmd=
+ else
+ mkdircmd=$mkdirprog
+ fi
+ 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
+ dst=$dst/`basename "$src"`
+ fi
+ fi
+
+ # This sed command emulates the dirname command.
+ dstdir=`echo "$dst" | sed -e 's,/*$,,;s,[^/]*$,,;s,/*$,,;s,^$,.,'`
+
+ # Make sure that the destination directory exists.
+
+ # Skip lots of stat calls in the usual case.
+ if test ! -d "$dstdir"; then
+ defaultIFS='
+ '
+ IFS="${IFS-$defaultIFS}"
+
+ oIFS=$IFS
+ # Some sh's can't handle IFS=/ for some reason.
+ IFS='%'
+ set x `echo "$dstdir" | sed -e 's@/@%@g' -e 's@^%@/@'`
+ shift
+ IFS=$oIFS
+
+ pathcomp=
+
+ while test $# -ne 0 ; do
+ pathcomp=$pathcomp$1
+ shift
+ if test ! -d "$pathcomp"; then
+ $mkdirprog "$pathcomp"
+ # mkdir can fail with a `File exist' error in case several
+ # install-sh are creating the directory concurrently. This
+ # is OK.
+ test -d "$pathcomp" || exit
+ fi
+ pathcomp=$pathcomp/
+ done
+ fi
+
+ if test -n "$dir_arg"; then
+ $doit $mkdircmd "$dst" \
+ && { test -z "$chowncmd" || $doit $chowncmd "$dst"; } \
+ && { test -z "$chgrpcmd" || $doit $chgrpcmd "$dst"; } \
+ && { test -z "$stripcmd" || $doit $stripcmd "$dst"; } \
+ && { test -z "$chmodcmd" || $doit $chmodcmd "$dst"; }
+
+ else
+ dstfile=`basename "$dst"`
+
+ # 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
+ trap '(exit $?); exit' 1 2 13 15
+
+ # 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 "$dsttmp"; } &&
+
+ # Now rename the file to the real destination.
+ { $doit $mvcmd -f "$dsttmp" "$dstdir/$dstfile" 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 "$dstdir/$dstfile"; then
+ $doit $rmcmd -f "$dstdir/$dstfile" 2>/dev/null \
+ || $doit $mvcmd -f "$dstdir/$dstfile" "$rmtmp" 2>/dev/null \
+ || {
+ echo "$0: cannot unlink or rename $dstdir/$dstfile" >&2
+ (exit 1); exit 1
+ }
+ else
+ :
+ fi
+ } &&
+
+ # Now rename the file to the real destination.
+ $doit $mvcmd "$dsttmp" "$dstdir/$dstfile"
+ }
+ }
+ fi || { (exit 1); exit 1; }
+done
+
+# The final little trick to "correctly" pass the exit status to the exit trap.
+{
+ (exit 0); 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/macros/texinfo/contrib/texinfo-hu/texinfo/intl/ChangeLog b/macros/texinfo/contrib/texinfo-hu/texinfo/intl/ChangeLog
new file mode 100644
index 0000000000..751291929d
--- /dev/null
+++ b/macros/texinfo/contrib/texinfo-hu/texinfo/intl/ChangeLog
@@ -0,0 +1,4 @@
+2004-01-29 GNU <bug-gnu-gettext@gnu.org>
+
+ * Version 0.14.1 released.
+
diff --git a/macros/texinfo/contrib/texinfo-hu/texinfo/intl/Makefile.in b/macros/texinfo/contrib/texinfo-hu/texinfo/intl/Makefile.in
new file mode 100644
index 0000000000..05f15329e1
--- /dev/null
+++ b/macros/texinfo/contrib/texinfo-hu/texinfo/intl/Makefile.in
@@ -0,0 +1,493 @@
+# Makefile for directory with message catalog handling library of GNU gettext
+# Copyright (C) 1995-1998, 2000-2003 Free Software Foundation, Inc.
+#
+# This program is free software; you can redistribute it and/or modify it
+# under the terms of the GNU Library General Public License as published
+# 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
+# Library General Public License for more details.
+#
+# You should have received a copy of the GNU Library General Public
+# License along with this program; if not, write to the Free Software
+# Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307,
+# USA.
+
+PACKAGE = @PACKAGE@
+VERSION = @VERSION@
+
+SHELL = /bin/sh
+
+srcdir = @srcdir@
+top_srcdir = @top_srcdir@
+top_builddir = ..
+VPATH = $(srcdir)
+
+prefix = @prefix@
+exec_prefix = @exec_prefix@
+transform = @program_transform_name@
+libdir = @libdir@
+includedir = @includedir@
+datadir = @datadir@
+localedir = $(datadir)/locale
+gettextsrcdir = $(datadir)/gettext/intl
+aliaspath = $(localedir)
+subdir = intl
+
+INSTALL = @INSTALL@
+INSTALL_DATA = @INSTALL_DATA@
+MKINSTALLDIRS = @MKINSTALLDIRS@
+mkinstalldirs = $(SHELL) $(MKINSTALLDIRS)
+
+l = @INTL_LIBTOOL_SUFFIX_PREFIX@
+
+AR = ar
+CC = @CC@
+LIBTOOL = @LIBTOOL@
+RANLIB = @RANLIB@
+YACC = @INTLBISON@ -y -d
+YFLAGS = --name-prefix=__gettext
+
+DEFS = -DLOCALEDIR=\"$(localedir)\" -DLOCALE_ALIAS_PATH=\"$(aliaspath)\" \
+-DLIBDIR=\"$(libdir)\" -DIN_LIBINTL \
+-DENABLE_RELOCATABLE=1 -DIN_LIBRARY -DINSTALLDIR=\"$(libdir)\" -DNO_XMALLOC \
+-Dset_relocation_prefix=libintl_set_relocation_prefix \
+-Drelocate=libintl_relocate \
+-DDEPENDS_ON_LIBICONV=1 @DEFS@
+CPPFLAGS = @CPPFLAGS@
+CFLAGS = @CFLAGS@
+LDFLAGS = @LDFLAGS@
+LIBS = @LIBS@
+
+COMPILE = $(CC) -c $(DEFS) $(INCLUDES) $(CPPFLAGS) $(CFLAGS) $(XCFLAGS)
+
+HEADERS = \
+ gmo.h \
+ gettextP.h \
+ hash-string.h \
+ loadinfo.h \
+ plural-exp.h \
+ eval-plural.h \
+ localcharset.h \
+ relocatable.h \
+ xsize.h \
+ printf-args.h printf-args.c \
+ printf-parse.h wprintf-parse.h printf-parse.c \
+ vasnprintf.h vasnwprintf.h vasnprintf.c \
+ os2compat.h \
+ libgnuintl.h.in
+SOURCES = \
+ bindtextdom.c \
+ dcgettext.c \
+ dgettext.c \
+ gettext.c \
+ finddomain.c \
+ loadmsgcat.c \
+ localealias.c \
+ textdomain.c \
+ l10nflist.c \
+ explodename.c \
+ dcigettext.c \
+ dcngettext.c \
+ dngettext.c \
+ ngettext.c \
+ plural.y \
+ plural-exp.c \
+ localcharset.c \
+ relocatable.c \
+ localename.c \
+ log.c \
+ printf.c \
+ osdep.c \
+ os2compat.c \
+ intl-compat.c
+OBJECTS = \
+ bindtextdom.$lo \
+ dcgettext.$lo \
+ dgettext.$lo \
+ gettext.$lo \
+ finddomain.$lo \
+ loadmsgcat.$lo \
+ localealias.$lo \
+ textdomain.$lo \
+ l10nflist.$lo \
+ explodename.$lo \
+ dcigettext.$lo \
+ dcngettext.$lo \
+ dngettext.$lo \
+ ngettext.$lo \
+ plural.$lo \
+ plural-exp.$lo \
+ localcharset.$lo \
+ relocatable.$lo \
+ localename.$lo \
+ log.$lo \
+ printf.$lo \
+ osdep.$lo \
+ intl-compat.$lo
+DISTFILES.common = Makefile.in \
+config.charset locale.alias ref-add.sin ref-del.sin $(HEADERS) $(SOURCES)
+DISTFILES.generated = plural.c
+DISTFILES.normal = VERSION
+DISTFILES.gettext = COPYING.LIB-2.0 COPYING.LIB-2.1 libintl.glibc \
+libgnuintl.h_vms Makefile.vms \
+libgnuintl.h.msvc-static libgnuintl.h.msvc-shared README.woe32 Makefile.msvc
+DISTFILES.obsolete = xopen-msg.sed linux-msg.sed po2tbl.sed.in cat-compat.c \
+COPYING.LIB-2 gettext.h libgettext.h plural-eval.c libgnuintl.h
+
+all: all-@USE_INCLUDED_LIBINTL@
+all-yes: libintl.$la libintl.h charset.alias ref-add.sed ref-del.sed
+all-no: all-no-@BUILD_INCLUDED_LIBINTL@
+all-no-yes: libgnuintl.$la
+all-no-no:
+
+libintl.a libgnuintl.a: $(OBJECTS)
+ rm -f $@
+ $(AR) cru $@ $(OBJECTS)
+ $(RANLIB) $@
+
+libintl.la libgnuintl.la: $(OBJECTS)
+ $(LIBTOOL) --mode=link \
+ $(CC) $(CPPFLAGS) $(CFLAGS) $(XCFLAGS) $(LDFLAGS) -o $@ \
+ $(OBJECTS) @LTLIBICONV@ $(LIBS) -lc \
+ -version-info $(LTV_CURRENT):$(LTV_REVISION):$(LTV_AGE) \
+ -rpath $(libdir) \
+ -no-undefined
+
+# Libtool's library version information for libintl.
+# Before making a gettext release, the gettext maintainer must change this
+# according to the libtool documentation, section "Library interface versions".
+# Maintainers of other packages that include the intl directory must *not*
+# change these values.
+LTV_CURRENT=7
+LTV_REVISION=0
+LTV_AGE=4
+
+.SUFFIXES:
+.SUFFIXES: .c .y .o .lo .sin .sed
+
+.c.o:
+ $(COMPILE) $<
+
+.y.c:
+ $(YACC) $(YFLAGS) --output $@ $<
+ rm -f $*.h
+
+bindtextdom.lo: $(srcdir)/bindtextdom.c
+ $(LIBTOOL) --mode=compile $(COMPILE) $(srcdir)/bindtextdom.c
+dcgettext.lo: $(srcdir)/dcgettext.c
+ $(LIBTOOL) --mode=compile $(COMPILE) $(srcdir)/dcgettext.c
+dgettext.lo: $(srcdir)/dgettext.c
+ $(LIBTOOL) --mode=compile $(COMPILE) $(srcdir)/dgettext.c
+gettext.lo: $(srcdir)/gettext.c
+ $(LIBTOOL) --mode=compile $(COMPILE) $(srcdir)/gettext.c
+finddomain.lo: $(srcdir)/finddomain.c
+ $(LIBTOOL) --mode=compile $(COMPILE) $(srcdir)/finddomain.c
+loadmsgcat.lo: $(srcdir)/loadmsgcat.c
+ $(LIBTOOL) --mode=compile $(COMPILE) $(srcdir)/loadmsgcat.c
+localealias.lo: $(srcdir)/localealias.c
+ $(LIBTOOL) --mode=compile $(COMPILE) $(srcdir)/localealias.c
+textdomain.lo: $(srcdir)/textdomain.c
+ $(LIBTOOL) --mode=compile $(COMPILE) $(srcdir)/textdomain.c
+l10nflist.lo: $(srcdir)/l10nflist.c
+ $(LIBTOOL) --mode=compile $(COMPILE) $(srcdir)/l10nflist.c
+explodename.lo: $(srcdir)/explodename.c
+ $(LIBTOOL) --mode=compile $(COMPILE) $(srcdir)/explodename.c
+dcigettext.lo: $(srcdir)/dcigettext.c
+ $(LIBTOOL) --mode=compile $(COMPILE) $(srcdir)/dcigettext.c
+dcngettext.lo: $(srcdir)/dcngettext.c
+ $(LIBTOOL) --mode=compile $(COMPILE) $(srcdir)/dcngettext.c
+dngettext.lo: $(srcdir)/dngettext.c
+ $(LIBTOOL) --mode=compile $(COMPILE) $(srcdir)/dngettext.c
+ngettext.lo: $(srcdir)/ngettext.c
+ $(LIBTOOL) --mode=compile $(COMPILE) $(srcdir)/ngettext.c
+plural.lo: $(srcdir)/plural.c
+ $(LIBTOOL) --mode=compile $(COMPILE) $(srcdir)/plural.c
+plural-exp.lo: $(srcdir)/plural-exp.c
+ $(LIBTOOL) --mode=compile $(COMPILE) $(srcdir)/plural-exp.c
+localcharset.lo: $(srcdir)/localcharset.c
+ $(LIBTOOL) --mode=compile $(COMPILE) $(srcdir)/localcharset.c
+relocatable.lo: $(srcdir)/relocatable.c
+ $(LIBTOOL) --mode=compile $(COMPILE) $(srcdir)/relocatable.c
+localename.lo: $(srcdir)/localename.c
+ $(LIBTOOL) --mode=compile $(COMPILE) $(srcdir)/localename.c
+log.lo: $(srcdir)/log.c
+ $(LIBTOOL) --mode=compile $(COMPILE) $(srcdir)/log.c
+printf.lo: $(srcdir)/printf.c
+ $(LIBTOOL) --mode=compile $(COMPILE) $(srcdir)/printf.c
+osdep.lo: $(srcdir)/osdep.c
+ $(LIBTOOL) --mode=compile $(COMPILE) $(srcdir)/osdep.c
+intl-compat.lo: $(srcdir)/intl-compat.c
+ $(LIBTOOL) --mode=compile $(COMPILE) $(srcdir)/intl-compat.c
+
+ref-add.sed: $(srcdir)/ref-add.sin
+ sed -e '/^#/d' -e 's/@''PACKAGE''@/@PACKAGE@/g' $(srcdir)/ref-add.sin > t-ref-add.sed
+ mv t-ref-add.sed ref-add.sed
+ref-del.sed: $(srcdir)/ref-del.sin
+ sed -e '/^#/d' -e 's/@''PACKAGE''@/@PACKAGE@/g' $(srcdir)/ref-del.sin > t-ref-del.sed
+ mv t-ref-del.sed ref-del.sed
+
+INCLUDES = -I. -I$(srcdir) -I..
+
+libgnuintl.h: $(srcdir)/libgnuintl.h.in
+ sed -e 's,@''HAVE_POSIX_PRINTF''@,@HAVE_POSIX_PRINTF@,g' \
+ -e 's,@''HAVE_ASPRINTF''@,@HAVE_ASPRINTF@,g' \
+ -e 's,@''HAVE_SNPRINTF''@,@HAVE_SNPRINTF@,g' \
+ -e 's,@''HAVE_WPRINTF''@,@HAVE_WPRINTF@,g' \
+ < $(srcdir)/libgnuintl.h.in > libgnuintl.h
+
+libintl.h: libgnuintl.h
+ cp libgnuintl.h libintl.h
+
+charset.alias: $(srcdir)/config.charset
+ $(SHELL) $(srcdir)/config.charset '@host@' > t-$@
+ mv t-$@ $@
+
+check: all
+
+# We must not install the libintl.h/libintl.a files if we are on a
+# system which has the GNU gettext() function in its C library or in a
+# separate library.
+# If you want to use the one which comes with this version of the
+# package, you have to use `configure --with-included-gettext'.
+install: install-exec install-data
+install-exec: all
+ if { test "$(PACKAGE)" = "gettext-runtime" || test "$(PACKAGE)" = "gettext-tools"; } \
+ && test '@USE_INCLUDED_LIBINTL@' = yes; then \
+ $(mkinstalldirs) $(DESTDIR)$(libdir) $(DESTDIR)$(includedir); \
+ $(INSTALL_DATA) libintl.h $(DESTDIR)$(includedir)/libintl.h; \
+ $(LIBTOOL) --mode=install \
+ $(INSTALL_DATA) libintl.$la $(DESTDIR)$(libdir)/libintl.$la; \
+ if test "@RELOCATABLE@" = yes; then \
+ dependencies=`sed -n -e 's,^dependency_libs=\(.*\),\1,p' < $(DESTDIR)$(libdir)/libintl.la | sed -e "s,^',," -e "s,'\$$,,"`; \
+ if test -n "$$dependencies"; then \
+ rm -f $(DESTDIR)$(libdir)/libintl.la; \
+ fi; \
+ fi; \
+ else \
+ : ; \
+ fi
+ if test "$(PACKAGE)" = "gettext-tools" \
+ && test '@USE_INCLUDED_LIBINTL@' = no; then \
+ $(mkinstalldirs) $(DESTDIR)$(libdir); \
+ $(LIBTOOL) --mode=install \
+ $(INSTALL_DATA) libgnuintl.$la $(DESTDIR)$(libdir)/libgnuintl.$la; \
+ rm -f $(DESTDIR)$(libdir)/preloadable_libintl.so; \
+ $(INSTALL_DATA) $(DESTDIR)$(libdir)/libgnuintl.so $(DESTDIR)$(libdir)/preloadable_libintl.so; \
+ $(LIBTOOL) --mode=uninstall \
+ rm -f $(DESTDIR)$(libdir)/libgnuintl.$la; \
+ else \
+ : ; \
+ fi
+ if test '@USE_INCLUDED_LIBINTL@' = yes; then \
+ test @GLIBC21@ != no || $(mkinstalldirs) $(DESTDIR)$(libdir); \
+ temp=$(DESTDIR)$(libdir)/t-charset.alias; \
+ dest=$(DESTDIR)$(libdir)/charset.alias; \
+ if test -f $(DESTDIR)$(libdir)/charset.alias; then \
+ orig=$(DESTDIR)$(libdir)/charset.alias; \
+ sed -f ref-add.sed $$orig > $$temp; \
+ $(INSTALL_DATA) $$temp $$dest; \
+ rm -f $$temp; \
+ else \
+ if test @GLIBC21@ = no; then \
+ orig=charset.alias; \
+ sed -f ref-add.sed $$orig > $$temp; \
+ $(INSTALL_DATA) $$temp $$dest; \
+ rm -f $$temp; \
+ fi; \
+ fi; \
+ $(mkinstalldirs) $(DESTDIR)$(localedir); \
+ test -f $(DESTDIR)$(localedir)/locale.alias \
+ && orig=$(DESTDIR)$(localedir)/locale.alias \
+ || orig=$(srcdir)/locale.alias; \
+ temp=$(DESTDIR)$(localedir)/t-locale.alias; \
+ dest=$(DESTDIR)$(localedir)/locale.alias; \
+ sed -f ref-add.sed $$orig > $$temp; \
+ $(INSTALL_DATA) $$temp $$dest; \
+ rm -f $$temp; \
+ else \
+ : ; \
+ fi
+install-data: all
+ if test "$(PACKAGE)" = "gettext-tools"; then \
+ $(mkinstalldirs) $(DESTDIR)$(gettextsrcdir); \
+ $(INSTALL_DATA) VERSION $(DESTDIR)$(gettextsrcdir)/VERSION; \
+ $(INSTALL_DATA) ChangeLog.inst $(DESTDIR)$(gettextsrcdir)/ChangeLog; \
+ dists="COPYING.LIB-2.0 COPYING.LIB-2.1 $(DISTFILES.common)"; \
+ for file in $$dists; do \
+ $(INSTALL_DATA) $(srcdir)/$$file \
+ $(DESTDIR)$(gettextsrcdir)/$$file; \
+ done; \
+ chmod a+x $(DESTDIR)$(gettextsrcdir)/config.charset; \
+ dists="$(DISTFILES.generated)"; \
+ for file in $$dists; do \
+ if test -f $$file; then dir=.; else dir=$(srcdir); fi; \
+ $(INSTALL_DATA) $$dir/$$file \
+ $(DESTDIR)$(gettextsrcdir)/$$file; \
+ done; \
+ dists="$(DISTFILES.obsolete)"; \
+ for file in $$dists; do \
+ rm -f $(DESTDIR)$(gettextsrcdir)/$$file; \
+ done; \
+ else \
+ : ; \
+ fi
+
+install-strip: install
+
+installdirs:
+ if { test "$(PACKAGE)" = "gettext-runtime" || test "$(PACKAGE)" = "gettext-tools"; } \
+ && test '@USE_INCLUDED_LIBINTL@' = yes; then \
+ $(mkinstalldirs) $(DESTDIR)$(libdir) $(DESTDIR)$(includedir); \
+ else \
+ : ; \
+ fi
+ if test "$(PACKAGE)" = "gettext-tools" \
+ && test '@USE_INCLUDED_LIBINTL@' = no; then \
+ $(mkinstalldirs) $(DESTDIR)$(libdir); \
+ else \
+ : ; \
+ fi
+ if test '@USE_INCLUDED_LIBINTL@' = yes; then \
+ test @GLIBC21@ != no || $(mkinstalldirs) $(DESTDIR)$(libdir); \
+ $(mkinstalldirs) $(DESTDIR)$(localedir); \
+ else \
+ : ; \
+ fi
+ if test "$(PACKAGE)" = "gettext-tools"; then \
+ $(mkinstalldirs) $(DESTDIR)$(gettextsrcdir); \
+ else \
+ : ; \
+ fi
+
+# Define this as empty until I found a useful application.
+installcheck:
+
+uninstall:
+ if { test "$(PACKAGE)" = "gettext-runtime" || test "$(PACKAGE)" = "gettext-tools"; } \
+ && test '@USE_INCLUDED_LIBINTL@' = yes; then \
+ rm -f $(DESTDIR)$(includedir)/libintl.h; \
+ $(LIBTOOL) --mode=uninstall \
+ rm -f $(DESTDIR)$(libdir)/libintl.$la; \
+ else \
+ : ; \
+ fi
+ if test "$(PACKAGE)" = "gettext-tools" \
+ && test '@USE_INCLUDED_LIBINTL@' = no; then \
+ rm -f $(DESTDIR)$(libdir)/preloadable_libintl.so; \
+ else \
+ : ; \
+ fi
+ if test '@USE_INCLUDED_LIBINTL@' = yes; then \
+ if test -f $(DESTDIR)$(libdir)/charset.alias; then \
+ temp=$(DESTDIR)$(libdir)/t-charset.alias; \
+ dest=$(DESTDIR)$(libdir)/charset.alias; \
+ sed -f ref-del.sed $$dest > $$temp; \
+ if grep '^# Packages using this file: $$' $$temp > /dev/null; then \
+ rm -f $$dest; \
+ else \
+ $(INSTALL_DATA) $$temp $$dest; \
+ fi; \
+ rm -f $$temp; \
+ fi; \
+ if test -f $(DESTDIR)$(localedir)/locale.alias; then \
+ temp=$(DESTDIR)$(localedir)/t-locale.alias; \
+ dest=$(DESTDIR)$(localedir)/locale.alias; \
+ sed -f ref-del.sed $$dest > $$temp; \
+ if grep '^# Packages using this file: $$' $$temp > /dev/null; then \
+ rm -f $$dest; \
+ else \
+ $(INSTALL_DATA) $$temp $$dest; \
+ fi; \
+ rm -f $$temp; \
+ fi; \
+ else \
+ : ; \
+ fi
+ if test "$(PACKAGE)" = "gettext-tools"; then \
+ for file in VERSION ChangeLog COPYING.LIB-2.0 COPYING.LIB-2.1 $(DISTFILES.common) $(DISTFILES.generated); do \
+ rm -f $(DESTDIR)$(gettextsrcdir)/$$file; \
+ done; \
+ else \
+ : ; \
+ fi
+
+info dvi ps pdf html:
+
+$(OBJECTS): ../config.h libgnuintl.h
+bindtextdom.$lo dcgettext.$lo dcigettext.$lo dcngettext.$lo dgettext.$lo dngettext.$lo finddomain.$lo gettext.$lo intl-compat.$lo loadmsgcat.$lo localealias.$lo ngettext.$lo textdomain.$lo: $(srcdir)/gettextP.h $(srcdir)/gmo.h $(srcdir)/loadinfo.h
+dcigettext.$lo loadmsgcat.$lo: $(srcdir)/hash-string.h
+explodename.$lo l10nflist.$lo: $(srcdir)/loadinfo.h
+dcigettext.$lo loadmsgcat.$lo plural.$lo plural-exp.$lo: $(srcdir)/plural-exp.h
+dcigettext.$lo: $(srcdir)/eval-plural.h
+localcharset.$lo: $(srcdir)/localcharset.h
+localealias.$lo localcharset.$lo relocatable.$lo: $(srcdir)/relocatable.h
+printf.$lo: $(srcdir)/printf-args.h $(srcdir)/printf-args.c $(srcdir)/printf-parse.h $(srcdir)/wprintf-parse.h $(srcdir)/xsize.h $(srcdir)/printf-parse.c $(srcdir)/vasnprintf.h $(srcdir)/vasnwprintf.h $(srcdir)/vasnprintf.c
+
+tags: TAGS
+
+TAGS: $(HEADERS) $(SOURCES)
+ here=`pwd`; cd $(srcdir) && etags -o $$here/TAGS $(HEADERS) $(SOURCES)
+
+ctags: CTAGS
+
+CTAGS: $(HEADERS) $(SOURCES)
+ here=`pwd`; cd $(srcdir) && ctags -o $$here/CTAGS $(HEADERS) $(SOURCES)
+
+id: ID
+
+ID: $(HEADERS) $(SOURCES)
+ here=`pwd`; cd $(srcdir) && mkid -f$$here/ID $(HEADERS) $(SOURCES)
+
+
+mostlyclean:
+ rm -f *.a *.la *.o *.obj *.lo core core.*
+ rm -f libgnuintl.h libintl.h charset.alias ref-add.sed ref-del.sed
+ rm -f -r .libs _libs
+
+clean: mostlyclean
+
+distclean: clean
+ rm -f Makefile ID TAGS
+ if test "$(PACKAGE)" = "gettext-runtime" || test "$(PACKAGE)" = "gettext-tools"; then \
+ rm -f ChangeLog.inst $(DISTFILES.normal); \
+ else \
+ : ; \
+ fi
+
+maintainer-clean: distclean
+ @echo "This command is intended for maintainers to use;"
+ @echo "it deletes files that may require special tools to rebuild."
+
+
+# GNU gettext needs not contain the file `VERSION' but contains some
+# other files which should not be distributed in other packages.
+distdir = ../$(PACKAGE)-$(VERSION)/$(subdir)
+dist distdir: Makefile
+ if test "$(PACKAGE)" = "gettext-tools"; then \
+ : ; \
+ else \
+ if test "$(PACKAGE)" = "gettext-runtime"; then \
+ additional="$(DISTFILES.gettext)"; \
+ else \
+ additional="$(DISTFILES.normal)"; \
+ fi; \
+ $(MAKE) $(DISTFILES.common) $(DISTFILES.generated) $$additional; \
+ for file in ChangeLog $(DISTFILES.common) $(DISTFILES.generated) $$additional; do \
+ if test -f $$file; then dir=.; else dir=$(srcdir); fi; \
+ cp -p $$dir/$$file $(distdir); \
+ done; \
+ fi
+
+Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status
+ cd $(top_builddir) && $(SHELL) ./config.status
+# This would be more efficient, but doesn't work any more with autoconf-2.57,
+# when AC_CONFIG_FILES([intl/Makefile:somedir/Makefile.in]) is used.
+# cd $(top_builddir) && CONFIG_FILES=$(subdir)/$@ CONFIG_HEADERS= $(SHELL) ./config.status
+
+# 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/macros/texinfo/contrib/texinfo-hu/texinfo/intl/VERSION b/macros/texinfo/contrib/texinfo-hu/texinfo/intl/VERSION
new file mode 100644
index 0000000000..b4b846ca76
--- /dev/null
+++ b/macros/texinfo/contrib/texinfo-hu/texinfo/intl/VERSION
@@ -0,0 +1 @@
+GNU gettext library from gettext-0.14.1
diff --git a/macros/texinfo/contrib/texinfo-hu/texinfo/intl/bindtextdom.c b/macros/texinfo/contrib/texinfo-hu/texinfo/intl/bindtextdom.c
new file mode 100644
index 0000000000..dcdc40085d
--- /dev/null
+++ b/macros/texinfo/contrib/texinfo-hu/texinfo/intl/bindtextdom.c
@@ -0,0 +1,363 @@
+/* Implementation of the bindtextdomain(3) function
+ Copyright (C) 1995-1998, 2000-2003 Free Software Foundation, Inc.
+
+ This program is free software; you can redistribute it and/or modify it
+ under the terms of the GNU Library General Public License as published
+ 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
+ Library General Public License for more details.
+
+ You should have received a copy of the GNU Library General Public
+ License along with this program; if not, write to the Free Software
+ Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307,
+ USA. */
+
+#ifdef HAVE_CONFIG_H
+# include <config.h>
+#endif
+
+#include <stddef.h>
+#include <stdlib.h>
+#include <string.h>
+
+#ifdef _LIBC
+# include <libintl.h>
+#else
+# include "libgnuintl.h"
+#endif
+#include "gettextP.h"
+
+#ifdef _LIBC
+/* We have to handle multi-threaded applications. */
+# include <bits/libc-lock.h>
+#else
+/* Provide dummy implementation if this is outside glibc. */
+# define __libc_rwlock_define(CLASS, NAME)
+# define __libc_rwlock_wrlock(NAME)
+# define __libc_rwlock_unlock(NAME)
+#endif
+
+/* The internal variables in the standalone libintl.a must have different
+ names than the internal variables in GNU libc, otherwise programs
+ using libintl.a cannot be linked statically. */
+#if !defined _LIBC
+# define _nl_default_dirname libintl_nl_default_dirname
+# define _nl_domain_bindings libintl_nl_domain_bindings
+#endif
+
+/* Some compilers, like SunOS4 cc, don't have offsetof in <stddef.h>. */
+#ifndef offsetof
+# define offsetof(type,ident) ((size_t)&(((type*)0)->ident))
+#endif
+
+/* @@ end of prolog @@ */
+
+/* Contains the default location of the message catalogs. */
+extern const char _nl_default_dirname[];
+#ifdef _LIBC
+extern const char _nl_default_dirname_internal[] attribute_hidden;
+#else
+# define INTUSE(name) name
+#endif
+
+/* List with bindings of specific domains. */
+extern struct binding *_nl_domain_bindings;
+
+/* Lock variable to protect the global data in the gettext implementation. */
+__libc_rwlock_define (extern, _nl_state_lock attribute_hidden)
+
+
+/* Names for the libintl functions are a problem. They must not clash
+ with existing names and they should follow ANSI C. But this source
+ code is also used in GNU C Library where the names have a __
+ prefix. So we have to make a difference here. */
+#ifdef _LIBC
+# define BINDTEXTDOMAIN __bindtextdomain
+# define BIND_TEXTDOMAIN_CODESET __bind_textdomain_codeset
+# ifndef strdup
+# define strdup(str) __strdup (str)
+# endif
+#else
+# define BINDTEXTDOMAIN libintl_bindtextdomain
+# define BIND_TEXTDOMAIN_CODESET libintl_bind_textdomain_codeset
+#endif
+
+/* Specifies the directory name *DIRNAMEP and the output codeset *CODESETP
+ to be used for the DOMAINNAME message catalog.
+ If *DIRNAMEP or *CODESETP is NULL, the corresponding attribute is not
+ modified, only the current value is returned.
+ If DIRNAMEP or CODESETP is NULL, the corresponding attribute is neither
+ modified nor returned. */
+static void
+set_binding_values (const char *domainname,
+ const char **dirnamep, const char **codesetp)
+{
+ struct binding *binding;
+ int modified;
+
+ /* Some sanity checks. */
+ if (domainname == NULL || domainname[0] == '\0')
+ {
+ if (dirnamep)
+ *dirnamep = NULL;
+ if (codesetp)
+ *codesetp = NULL;
+ return;
+ }
+
+ __libc_rwlock_wrlock (_nl_state_lock);
+
+ modified = 0;
+
+ for (binding = _nl_domain_bindings; binding != NULL; binding = binding->next)
+ {
+ int compare = strcmp (domainname, binding->domainname);
+ if (compare == 0)
+ /* We found it! */
+ break;
+ if (compare < 0)
+ {
+ /* It is not in the list. */
+ binding = NULL;
+ break;
+ }
+ }
+
+ if (binding != NULL)
+ {
+ if (dirnamep)
+ {
+ const char *dirname = *dirnamep;
+
+ if (dirname == NULL)
+ /* The current binding has be to returned. */
+ *dirnamep = binding->dirname;
+ else
+ {
+ /* The domain is already bound. If the new value and the old
+ one are equal we simply do nothing. Otherwise replace the
+ old binding. */
+ char *result = binding->dirname;
+ if (strcmp (dirname, result) != 0)
+ {
+ if (strcmp (dirname, INTUSE(_nl_default_dirname)) == 0)
+ result = (char *) INTUSE(_nl_default_dirname);
+ else
+ {
+#if defined _LIBC || defined HAVE_STRDUP
+ result = strdup (dirname);
+#else
+ size_t len = strlen (dirname) + 1;
+ result = (char *) malloc (len);
+ if (__builtin_expect (result != NULL, 1))
+ memcpy (result, dirname, len);
+#endif
+ }
+
+ if (__builtin_expect (result != NULL, 1))
+ {
+ if (binding->dirname != INTUSE(_nl_default_dirname))
+ free (binding->dirname);
+
+ binding->dirname = result;
+ modified = 1;
+ }
+ }
+ *dirnamep = result;
+ }
+ }
+
+ if (codesetp)
+ {
+ const char *codeset = *codesetp;
+
+ if (codeset == NULL)
+ /* The current binding has be to returned. */
+ *codesetp = binding->codeset;
+ else
+ {
+ /* The domain is already bound. If the new value and the old
+ one are equal we simply do nothing. Otherwise replace the
+ old binding. */
+ char *result = binding->codeset;
+ if (result == NULL || strcmp (codeset, result) != 0)
+ {
+#if defined _LIBC || defined HAVE_STRDUP
+ result = strdup (codeset);
+#else
+ size_t len = strlen (codeset) + 1;
+ result = (char *) malloc (len);
+ if (__builtin_expect (result != NULL, 1))
+ memcpy (result, codeset, len);
+#endif
+
+ if (__builtin_expect (result != NULL, 1))
+ {
+ if (binding->codeset != NULL)
+ free (binding->codeset);
+
+ binding->codeset = result;
+ binding->codeset_cntr++;
+ modified = 1;
+ }
+ }
+ *codesetp = result;
+ }
+ }
+ }
+ else if ((dirnamep == NULL || *dirnamep == NULL)
+ && (codesetp == NULL || *codesetp == NULL))
+ {
+ /* Simply return the default values. */
+ if (dirnamep)
+ *dirnamep = INTUSE(_nl_default_dirname);
+ if (codesetp)
+ *codesetp = NULL;
+ }
+ else
+ {
+ /* We have to create a new binding. */
+ size_t len = strlen (domainname) + 1;
+ struct binding *new_binding =
+ (struct binding *) malloc (offsetof (struct binding, domainname) + len);
+
+ if (__builtin_expect (new_binding == NULL, 0))
+ goto failed;
+
+ memcpy (new_binding->domainname, domainname, len);
+
+ if (dirnamep)
+ {
+ const char *dirname = *dirnamep;
+
+ if (dirname == NULL)
+ /* The default value. */
+ dirname = INTUSE(_nl_default_dirname);
+ else
+ {
+ if (strcmp (dirname, INTUSE(_nl_default_dirname)) == 0)
+ dirname = INTUSE(_nl_default_dirname);
+ else
+ {
+ char *result;
+#if defined _LIBC || defined HAVE_STRDUP
+ result = strdup (dirname);
+ if (__builtin_expect (result == NULL, 0))
+ goto failed_dirname;
+#else
+ size_t len = strlen (dirname) + 1;
+ result = (char *) malloc (len);
+ if (__builtin_expect (result == NULL, 0))
+ goto failed_dirname;
+ memcpy (result, dirname, len);
+#endif
+ dirname = result;
+ }
+ }
+ *dirnamep = dirname;
+ new_binding->dirname = (char *) dirname;
+ }
+ else
+ /* The default value. */
+ new_binding->dirname = (char *) INTUSE(_nl_default_dirname);
+
+ new_binding->codeset_cntr = 0;
+
+ if (codesetp)
+ {
+ const char *codeset = *codesetp;
+
+ if (codeset != NULL)
+ {
+ char *result;
+
+#if defined _LIBC || defined HAVE_STRDUP
+ result = strdup (codeset);
+ if (__builtin_expect (result == NULL, 0))
+ goto failed_codeset;
+#else
+ size_t len = strlen (codeset) + 1;
+ result = (char *) malloc (len);
+ if (__builtin_expect (result == NULL, 0))
+ goto failed_codeset;
+ memcpy (result, codeset, len);
+#endif
+ codeset = result;
+ new_binding->codeset_cntr++;
+ }
+ *codesetp = codeset;
+ new_binding->codeset = (char *) codeset;
+ }
+ else
+ new_binding->codeset = NULL;
+
+ /* Now enqueue it. */
+ if (_nl_domain_bindings == NULL
+ || strcmp (domainname, _nl_domain_bindings->domainname) < 0)
+ {
+ new_binding->next = _nl_domain_bindings;
+ _nl_domain_bindings = new_binding;
+ }
+ else
+ {
+ binding = _nl_domain_bindings;
+ while (binding->next != NULL
+ && strcmp (domainname, binding->next->domainname) > 0)
+ binding = binding->next;
+
+ new_binding->next = binding->next;
+ binding->next = new_binding;
+ }
+
+ modified = 1;
+
+ /* Here we deal with memory allocation failures. */
+ if (0)
+ {
+ failed_codeset:
+ if (new_binding->dirname != INTUSE(_nl_default_dirname))
+ free (new_binding->dirname);
+ failed_dirname:
+ free (new_binding);
+ failed:
+ if (dirnamep)
+ *dirnamep = NULL;
+ if (codesetp)
+ *codesetp = NULL;
+ }
+ }
+
+ /* If we modified any binding, we flush the caches. */
+ if (modified)
+ ++_nl_msg_cat_cntr;
+
+ __libc_rwlock_unlock (_nl_state_lock);
+}
+
+/* Specify that the DOMAINNAME message catalog will be found
+ in DIRNAME rather than in the system locale data base. */
+char *
+BINDTEXTDOMAIN (const char *domainname, const char *dirname)
+{
+ set_binding_values (domainname, &dirname, NULL);
+ return (char *) dirname;
+}
+
+/* Specify the character encoding in which the messages from the
+ DOMAINNAME message catalog will be returned. */
+char *
+BIND_TEXTDOMAIN_CODESET (const char *domainname, const char *codeset)
+{
+ set_binding_values (domainname, NULL, &codeset);
+ return (char *) codeset;
+}
+
+#ifdef _LIBC
+/* Aliases for function names in GNU C Library. */
+weak_alias (__bindtextdomain, bindtextdomain);
+weak_alias (__bind_textdomain_codeset, bind_textdomain_codeset);
+#endif
diff --git a/macros/texinfo/contrib/texinfo-hu/texinfo/intl/config.charset b/macros/texinfo/contrib/texinfo-hu/texinfo/intl/config.charset
new file mode 100644
index 0000000000..43d45fb75f
--- /dev/null
+++ b/macros/texinfo/contrib/texinfo-hu/texinfo/intl/config.charset
@@ -0,0 +1,608 @@
+#! /bin/sh
+# Output a system dependent table of character encoding aliases.
+#
+# Copyright (C) 2000-2004 Free Software Foundation, Inc.
+#
+# This program is free software; you can redistribute it and/or modify it
+# under the terms of the GNU Library General Public License as published
+# 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
+# Library General Public License for more details.
+#
+# You should have received a copy of the GNU Library General Public
+# License along with this program; if not, write to the Free Software
+# Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307,
+# 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 darwin
+# ISO-8859-1 Y glibc aix hpux irix osf solaris freebsd darwin
+# ISO-8859-2 Y glibc aix hpux irix osf solaris freebsd darwin
+# ISO-8859-3 Y glibc solaris
+# ISO-8859-4 Y osf solaris freebsd darwin
+# ISO-8859-5 Y glibc aix hpux irix osf solaris freebsd darwin
+# ISO-8859-6 Y glibc aix hpux solaris
+# ISO-8859-7 Y glibc aix hpux irix osf solaris
+# ISO-8859-8 Y glibc aix hpux osf solaris
+# ISO-8859-9 Y glibc aix hpux irix osf solaris
+# ISO-8859-13 glibc
+# ISO-8859-14 glibc
+# ISO-8859-15 glibc aix osf solaris freebsd
+# KOI8-R Y glibc solaris freebsd darwin
+# KOI8-U Y glibc freebsd 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 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 darwin woe32
+# CP1252 aix woe32
+# CP1253 woe32
+# CP1254 woe32
+# CP1255 glibc woe32
+# CP1256 woe32
+# CP1257 woe32
+# GB2312 Y glibc aix hpux irix solaris freebsd darwin
+# EUC-JP Y glibc aix hpux irix osf solaris freebsd darwin
+# EUC-KR Y glibc aix hpux irix osf solaris freebsd darwin
+# EUC-TW glibc aix hpux irix osf solaris
+# BIG5 Y glibc aix hpux osf solaris freebsd darwin
+# BIG5-HKSCS glibc solaris
+# GBK glibc aix osf solaris woe32 dos
+# GB18030 glibc solaris
+# SHIFT_JIS Y hpux osf solaris freebsd 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
+#
+# 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-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"
+ ;;
+ darwin*)
+ # 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"
+ ;;
+ 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 <st001906@hrz1.hrz.tu-darmstadt.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/macros/texinfo/contrib/texinfo-hu/texinfo/intl/dcgettext.c b/macros/texinfo/contrib/texinfo-hu/texinfo/intl/dcgettext.c
new file mode 100644
index 0000000000..850acdee97
--- /dev/null
+++ b/macros/texinfo/contrib/texinfo-hu/texinfo/intl/dcgettext.c
@@ -0,0 +1,56 @@
+/* Implementation of the dcgettext(3) function.
+ Copyright (C) 1995-1999, 2000-2003 Free Software Foundation, Inc.
+
+ This program is free software; you can redistribute it and/or modify it
+ under the terms of the GNU Library General Public License as published
+ 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
+ Library General Public License for more details.
+
+ You should have received a copy of the GNU Library General Public
+ License along with this program; if not, write to the Free Software
+ Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307,
+ USA. */
+
+#ifdef HAVE_CONFIG_H
+# include <config.h>
+#endif
+
+#include "gettextP.h"
+#ifdef _LIBC
+# include <libintl.h>
+#else
+# include "libgnuintl.h"
+#endif
+
+/* @@ end of prolog @@ */
+
+/* Names for the libintl functions are a problem. They must not clash
+ with existing names and they should follow ANSI C. But this source
+ code is also used in GNU C Library where the names have a __
+ prefix. So we have to make a difference here. */
+#ifdef _LIBC
+# define DCGETTEXT __dcgettext
+# define DCIGETTEXT __dcigettext
+#else
+# define DCGETTEXT libintl_dcgettext
+# define DCIGETTEXT libintl_dcigettext
+#endif
+
+/* Look up MSGID in the DOMAINNAME message catalog for the current CATEGORY
+ locale. */
+char *
+DCGETTEXT (const char *domainname, const char *msgid, int category)
+{
+ return DCIGETTEXT (domainname, msgid, NULL, 0, 0, category);
+}
+
+#ifdef _LIBC
+/* Alias for function name in GNU C Library. */
+INTDEF(__dcgettext)
+weak_alias (__dcgettext, dcgettext);
+#endif
diff --git a/macros/texinfo/contrib/texinfo-hu/texinfo/intl/dcigettext.c b/macros/texinfo/contrib/texinfo-hu/texinfo/intl/dcigettext.c
new file mode 100644
index 0000000000..35238e2cbd
--- /dev/null
+++ b/macros/texinfo/contrib/texinfo-hu/texinfo/intl/dcigettext.c
@@ -0,0 +1,1219 @@
+/* Implementation of the internal dcigettext function.
+ Copyright (C) 1995-1999, 2000-2003 Free Software Foundation, Inc.
+
+ This program is free software; you can redistribute it and/or modify it
+ under the terms of the GNU Library General Public License as published
+ 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
+ Library General Public License for more details.
+
+ You should have received a copy of the GNU Library General Public
+ License along with this program; if not, write to the Free Software
+ Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307,
+ USA. */
+
+/* Tell glibc's <string.h> to provide a prototype for mempcpy().
+ This must come before <config.h> because <config.h> may include
+ <features.h>, and once <features.h> has been included, it's too late. */
+#ifndef _GNU_SOURCE
+# define _GNU_SOURCE 1
+#endif
+
+#ifdef HAVE_CONFIG_H
+# include <config.h>
+#endif
+
+#include <sys/types.h>
+
+#ifdef __GNUC__
+# define alloca __builtin_alloca
+# define HAVE_ALLOCA 1
+#else
+# ifdef _MSC_VER
+# include <malloc.h>
+# define alloca _alloca
+# else
+# if defined HAVE_ALLOCA_H || defined _LIBC
+# include <alloca.h>
+# else
+# ifdef _AIX
+ #pragma alloca
+# else
+# ifndef alloca
+char *alloca ();
+# endif
+# endif
+# endif
+# endif
+#endif
+
+#include <errno.h>
+#ifndef errno
+extern int errno;
+#endif
+#ifndef __set_errno
+# define __set_errno(val) errno = (val)
+#endif
+
+#include <stddef.h>
+#include <stdlib.h>
+#include <string.h>
+
+#if defined HAVE_UNISTD_H || defined _LIBC
+# include <unistd.h>
+#endif
+
+#include <locale.h>
+
+#ifdef _LIBC
+ /* Guess whether integer division by zero raises signal SIGFPE.
+ Set to 1 only if you know for sure. In case of doubt, set to 0. */
+# if defined __alpha__ || defined __arm__ || defined __i386__ \
+ || defined __m68k__ || defined __s390__
+# define INTDIV0_RAISES_SIGFPE 1
+# else
+# define INTDIV0_RAISES_SIGFPE 0
+# endif
+#endif
+#if !INTDIV0_RAISES_SIGFPE
+# include <signal.h>
+#endif
+
+#if defined HAVE_SYS_PARAM_H || defined _LIBC
+# include <sys/param.h>
+#endif
+
+#include "gettextP.h"
+#include "plural-exp.h"
+#ifdef _LIBC
+# include <libintl.h>
+#else
+# include "libgnuintl.h"
+#endif
+#include "hash-string.h"
+
+/* Thread safetyness. */
+#ifdef _LIBC
+# include <bits/libc-lock.h>
+#else
+/* Provide dummy implementation if this is outside glibc. */
+# define __libc_lock_define_initialized(CLASS, NAME)
+# define __libc_lock_lock(NAME)
+# define __libc_lock_unlock(NAME)
+# define __libc_rwlock_define_initialized(CLASS, NAME)
+# define __libc_rwlock_rdlock(NAME)
+# define __libc_rwlock_unlock(NAME)
+#endif
+
+/* Alignment of types. */
+#if defined __GNUC__ && __GNUC__ >= 2
+# define alignof(TYPE) __alignof__ (TYPE)
+#else
+# define alignof(TYPE) \
+ ((int) &((struct { char dummy1; TYPE dummy2; } *) 0)->dummy2)
+#endif
+
+/* The internal variables in the standalone libintl.a must have different
+ names than the internal variables in GNU libc, otherwise programs
+ using libintl.a cannot be linked statically. */
+#if !defined _LIBC
+# define _nl_default_default_domain libintl_nl_default_default_domain
+# define _nl_current_default_domain libintl_nl_current_default_domain
+# define _nl_default_dirname libintl_nl_default_dirname
+# define _nl_domain_bindings libintl_nl_domain_bindings
+#endif
+
+/* Some compilers, like SunOS4 cc, don't have offsetof in <stddef.h>. */
+#ifndef offsetof
+# define offsetof(type,ident) ((size_t)&(((type*)0)->ident))
+#endif
+
+/* @@ end of prolog @@ */
+
+#ifdef _LIBC
+/* Rename the non ANSI C functions. This is required by the standard
+ because some ANSI C functions will require linking with this object
+ file and the name space must not be polluted. */
+# define getcwd __getcwd
+# ifndef stpcpy
+# define stpcpy __stpcpy
+# endif
+# define tfind __tfind
+#else
+# if !defined HAVE_GETCWD
+char *getwd ();
+# define getcwd(buf, max) getwd (buf)
+# else
+# if VMS
+# define getcwd(buf, max) (getcwd) (buf, max, 0)
+# else
+char *getcwd ();
+# endif
+# endif
+# ifndef HAVE_STPCPY
+static char *stpcpy (char *dest, const char *src);
+# endif
+# ifndef HAVE_MEMPCPY
+static void *mempcpy (void *dest, const void *src, size_t n);
+# endif
+#endif
+
+/* Amount to increase buffer size by in each try. */
+#define PATH_INCR 32
+
+/* The following is from pathmax.h. */
+/* Non-POSIX BSD systems might have gcc's limits.h, which doesn't define
+ PATH_MAX but might cause redefinition warnings when sys/param.h is
+ later included (as on MORE/BSD 4.3). */
+#if defined _POSIX_VERSION || (defined HAVE_LIMITS_H && !defined __GNUC__)
+# include <limits.h>
+#endif
+
+#ifndef _POSIX_PATH_MAX
+# define _POSIX_PATH_MAX 255
+#endif
+
+#if !defined PATH_MAX && defined _PC_PATH_MAX
+# define PATH_MAX (pathconf ("/", _PC_PATH_MAX) < 1 ? 1024 : pathconf ("/", _PC_PATH_MAX))
+#endif
+
+/* Don't include sys/param.h if it already has been. */
+#if defined HAVE_SYS_PARAM_H && !defined PATH_MAX && !defined MAXPATHLEN
+# include <sys/param.h>
+#endif
+
+#if !defined PATH_MAX && defined MAXPATHLEN
+# define PATH_MAX MAXPATHLEN
+#endif
+
+#ifndef PATH_MAX
+# define PATH_MAX _POSIX_PATH_MAX
+#endif
+
+/* Pathname support.
+ ISSLASH(C) tests whether C is a directory separator character.
+ IS_ABSOLUTE_PATH(P) tests whether P is an absolute path. If it is not,
+ it may be concatenated to a directory pathname.
+ IS_PATH_WITH_DIR(P) tests whether P contains a directory specification.
+ */
+#if defined _WIN32 || defined __WIN32__ || defined __EMX__ || defined __DJGPP__
+ /* Win32, OS/2, DOS */
+# define ISSLASH(C) ((C) == '/' || (C) == '\\')
+# define HAS_DEVICE(P) \
+ ((((P)[0] >= 'A' && (P)[0] <= 'Z') || ((P)[0] >= 'a' && (P)[0] <= 'z')) \
+ && (P)[1] == ':')
+# define IS_ABSOLUTE_PATH(P) (ISSLASH ((P)[0]) || HAS_DEVICE (P))
+# define IS_PATH_WITH_DIR(P) \
+ (strchr (P, '/') != NULL || strchr (P, '\\') != NULL || HAS_DEVICE (P))
+#else
+ /* Unix */
+# define ISSLASH(C) ((C) == '/')
+# define IS_ABSOLUTE_PATH(P) ISSLASH ((P)[0])
+# define IS_PATH_WITH_DIR(P) (strchr (P, '/') != NULL)
+#endif
+
+/* This is the type used for the search tree where known translations
+ are stored. */
+struct known_translation_t
+{
+ /* Domain in which to search. */
+ char *domainname;
+
+ /* The category. */
+ int category;
+
+ /* State of the catalog counter at the point the string was found. */
+ int counter;
+
+ /* Catalog where the string was found. */
+ struct loaded_l10nfile *domain;
+
+ /* And finally the translation. */
+ const char *translation;
+ size_t translation_length;
+
+ /* Pointer to the string in question. */
+ char msgid[ZERO];
+};
+
+/* Root of the search tree with known translations. We can use this
+ only if the system provides the `tsearch' function family. */
+#if defined HAVE_TSEARCH || defined _LIBC
+# include <search.h>
+
+static void *root;
+
+# ifdef _LIBC
+# define tsearch __tsearch
+# endif
+
+/* Function to compare two entries in the table of known translations. */
+static int
+transcmp (const void *p1, const void *p2)
+{
+ const struct known_translation_t *s1;
+ const struct known_translation_t *s2;
+ int result;
+
+ s1 = (const struct known_translation_t *) p1;
+ s2 = (const struct known_translation_t *) p2;
+
+ result = strcmp (s1->msgid, s2->msgid);
+ if (result == 0)
+ {
+ result = strcmp (s1->domainname, s2->domainname);
+ if (result == 0)
+ /* We compare the category last (though this is the cheapest
+ operation) since it is hopefully always the same (namely
+ LC_MESSAGES). */
+ result = s1->category - s2->category;
+ }
+
+ return result;
+}
+#endif
+
+#ifndef INTVARDEF
+# define INTVARDEF(name)
+#endif
+#ifndef INTUSE
+# define INTUSE(name) name
+#endif
+
+/* Name of the default domain used for gettext(3) prior any call to
+ textdomain(3). The default value for this is "messages". */
+const char _nl_default_default_domain[] attribute_hidden = "messages";
+
+/* Value used as the default domain for gettext(3). */
+const char *_nl_current_default_domain attribute_hidden
+ = _nl_default_default_domain;
+
+/* Contains the default location of the message catalogs. */
+#if defined __EMX__
+extern const char _nl_default_dirname[];
+#else
+const char _nl_default_dirname[] = LOCALEDIR;
+INTVARDEF (_nl_default_dirname)
+#endif
+
+/* List with bindings of specific domains created by bindtextdomain()
+ calls. */
+struct binding *_nl_domain_bindings;
+
+/* Prototypes for local functions. */
+static char *plural_lookup (struct loaded_l10nfile *domain,
+ unsigned long int n,
+ const char *translation, size_t translation_len)
+ internal_function;
+static const char *guess_category_value (int category,
+ const char *categoryname)
+ internal_function;
+#ifdef _LIBC
+# include "../locale/localeinfo.h"
+# define category_to_name(category) _nl_category_names[category]
+#else
+static const char *category_to_name (int category) internal_function;
+#endif
+
+
+/* For those loosing systems which don't have `alloca' we have to add
+ some additional code emulating it. */
+#ifdef HAVE_ALLOCA
+/* Nothing has to be done. */
+# define freea(p) /* nothing */
+# define ADD_BLOCK(list, address) /* nothing */
+# define FREE_BLOCKS(list) /* nothing */
+#else
+struct block_list
+{
+ void *address;
+ struct block_list *next;
+};
+# define ADD_BLOCK(list, addr) \
+ do { \
+ struct block_list *newp = (struct block_list *) malloc (sizeof (*newp)); \
+ /* If we cannot get a free block we cannot add the new element to \
+ the list. */ \
+ if (newp != NULL) { \
+ newp->address = (addr); \
+ newp->next = (list); \
+ (list) = newp; \
+ } \
+ } while (0)
+# define FREE_BLOCKS(list) \
+ do { \
+ while (list != NULL) { \
+ struct block_list *old = list; \
+ list = list->next; \
+ free (old->address); \
+ free (old); \
+ } \
+ } while (0)
+# undef alloca
+# define alloca(size) (malloc (size))
+# define freea(p) free (p)
+#endif /* have alloca */
+
+
+#ifdef _LIBC
+/* List of blocks allocated for translations. */
+typedef struct transmem_list
+{
+ struct transmem_list *next;
+ char data[ZERO];
+} transmem_block_t;
+static struct transmem_list *transmem_list;
+#else
+typedef unsigned char transmem_block_t;
+#endif
+
+
+/* Names for the libintl functions are a problem. They must not clash
+ with existing names and they should follow ANSI C. But this source
+ code is also used in GNU C Library where the names have a __
+ prefix. So we have to make a difference here. */
+#ifdef _LIBC
+# define DCIGETTEXT __dcigettext
+#else
+# define DCIGETTEXT libintl_dcigettext
+#endif
+
+/* Lock variable to protect the global data in the gettext implementation. */
+#ifdef _LIBC
+__libc_rwlock_define_initialized (, _nl_state_lock attribute_hidden)
+#endif
+
+/* Checking whether the binaries runs SUID must be done and glibc provides
+ easier methods therefore we make a difference here. */
+#ifdef _LIBC
+# define ENABLE_SECURE __libc_enable_secure
+# define DETERMINE_SECURE
+#else
+# ifndef HAVE_GETUID
+# define getuid() 0
+# endif
+# ifndef HAVE_GETGID
+# define getgid() 0
+# endif
+# ifndef HAVE_GETEUID
+# define geteuid() getuid()
+# endif
+# ifndef HAVE_GETEGID
+# define getegid() getgid()
+# endif
+static int enable_secure;
+# define ENABLE_SECURE (enable_secure == 1)
+# define DETERMINE_SECURE \
+ if (enable_secure == 0) \
+ { \
+ if (getuid () != geteuid () || getgid () != getegid ()) \
+ enable_secure = 1; \
+ else \
+ enable_secure = -1; \
+ }
+#endif
+
+/* Get the function to evaluate the plural expression. */
+#include "eval-plural.h"
+
+/* Look up MSGID in the DOMAINNAME message catalog for the current
+ CATEGORY locale and, if PLURAL is nonzero, search over string
+ depending on the plural form determined by N. */
+char *
+DCIGETTEXT (const char *domainname, const char *msgid1, const char *msgid2,
+ int plural, unsigned long int n, int category)
+{
+#ifndef HAVE_ALLOCA
+ struct block_list *block_list = NULL;
+#endif
+ struct loaded_l10nfile *domain;
+ struct binding *binding;
+ const char *categoryname;
+ const char *categoryvalue;
+ char *dirname, *xdomainname;
+ char *single_locale;
+ char *retval;
+ size_t retlen;
+ int saved_errno;
+#if defined HAVE_TSEARCH || defined _LIBC
+ struct known_translation_t *search;
+ struct known_translation_t **foundp = NULL;
+ size_t msgid_len;
+#endif
+ size_t domainname_len;
+
+ /* If no real MSGID is given return NULL. */
+ if (msgid1 == NULL)
+ return NULL;
+
+#ifdef _LIBC
+ if (category < 0 || category >= __LC_LAST || category == LC_ALL)
+ /* Bogus. */
+ return (plural == 0
+ ? (char *) msgid1
+ /* Use the Germanic plural rule. */
+ : n == 1 ? (char *) msgid1 : (char *) msgid2);
+#endif
+
+ __libc_rwlock_rdlock (_nl_state_lock);
+
+ /* If DOMAINNAME is NULL, we are interested in the default domain. If
+ CATEGORY is not LC_MESSAGES this might not make much sense but the
+ definition left this undefined. */
+ if (domainname == NULL)
+ domainname = _nl_current_default_domain;
+
+ /* OS/2 specific: backward compatibility with older libintl versions */
+#ifdef LC_MESSAGES_COMPAT
+ if (category == LC_MESSAGES_COMPAT)
+ category = LC_MESSAGES;
+#endif
+
+#if defined HAVE_TSEARCH || defined _LIBC
+ msgid_len = strlen (msgid1) + 1;
+
+ /* Try to find the translation among those which we found at
+ some time. */
+ search = (struct known_translation_t *)
+ alloca (offsetof (struct known_translation_t, msgid) + msgid_len);
+ memcpy (search->msgid, msgid1, msgid_len);
+ search->domainname = (char *) domainname;
+ search->category = category;
+
+ foundp = (struct known_translation_t **) tfind (search, &root, transcmp);
+ freea (search);
+ if (foundp != NULL && (*foundp)->counter == _nl_msg_cat_cntr)
+ {
+ /* Now deal with plural. */
+ if (plural)
+ retval = plural_lookup ((*foundp)->domain, n, (*foundp)->translation,
+ (*foundp)->translation_length);
+ else
+ retval = (char *) (*foundp)->translation;
+
+ __libc_rwlock_unlock (_nl_state_lock);
+ return retval;
+ }
+#endif
+
+ /* Preserve the `errno' value. */
+ saved_errno = errno;
+
+ /* See whether this is a SUID binary or not. */
+ DETERMINE_SECURE;
+
+ /* First find matching binding. */
+ for (binding = _nl_domain_bindings; binding != NULL; binding = binding->next)
+ {
+ int compare = strcmp (domainname, binding->domainname);
+ if (compare == 0)
+ /* We found it! */
+ break;
+ if (compare < 0)
+ {
+ /* It is not in the list. */
+ binding = NULL;
+ break;
+ }
+ }
+
+ if (binding == NULL)
+ dirname = (char *) INTUSE(_nl_default_dirname);
+ else if (IS_ABSOLUTE_PATH (binding->dirname))
+ dirname = binding->dirname;
+ else
+ {
+ /* We have a relative path. Make it absolute now. */
+ size_t dirname_len = strlen (binding->dirname) + 1;
+ size_t path_max;
+ char *ret;
+
+ path_max = (unsigned int) PATH_MAX;
+ path_max += 2; /* The getcwd docs say to do this. */
+
+ for (;;)
+ {
+ dirname = (char *) alloca (path_max + dirname_len);
+ ADD_BLOCK (block_list, dirname);
+
+ __set_errno (0);
+ ret = getcwd (dirname, path_max);
+ if (ret != NULL || errno != ERANGE)
+ break;
+
+ path_max += path_max / 2;
+ path_max += PATH_INCR;
+ }
+
+ if (ret == NULL)
+ /* We cannot get the current working directory. Don't signal an
+ error but simply return the default string. */
+ goto return_untranslated;
+
+ stpcpy (stpcpy (strchr (dirname, '\0'), "/"), binding->dirname);
+ }
+
+ /* Now determine the symbolic name of CATEGORY and its value. */
+ categoryname = category_to_name (category);
+ categoryvalue = guess_category_value (category, categoryname);
+
+ domainname_len = strlen (domainname);
+ xdomainname = (char *) alloca (strlen (categoryname)
+ + domainname_len + 5);
+ ADD_BLOCK (block_list, xdomainname);
+
+ stpcpy (mempcpy (stpcpy (stpcpy (xdomainname, categoryname), "/"),
+ domainname, domainname_len),
+ ".mo");
+
+ /* Creating working area. */
+ single_locale = (char *) alloca (strlen (categoryvalue) + 1);
+ ADD_BLOCK (block_list, single_locale);
+
+
+ /* Search for the given string. This is a loop because we perhaps
+ got an ordered list of languages to consider for the translation. */
+ while (1)
+ {
+ /* Make CATEGORYVALUE point to the next element of the list. */
+ while (categoryvalue[0] != '\0' && categoryvalue[0] == ':')
+ ++categoryvalue;
+ if (categoryvalue[0] == '\0')
+ {
+ /* The whole contents of CATEGORYVALUE has been searched but
+ no valid entry has been found. We solve this situation
+ by implicitly appending a "C" entry, i.e. no translation
+ will take place. */
+ single_locale[0] = 'C';
+ single_locale[1] = '\0';
+ }
+ else
+ {
+ char *cp = single_locale;
+ while (categoryvalue[0] != '\0' && categoryvalue[0] != ':')
+ *cp++ = *categoryvalue++;
+ *cp = '\0';
+
+ /* When this is a SUID binary we must not allow accessing files
+ outside the dedicated directories. */
+ if (ENABLE_SECURE && IS_PATH_WITH_DIR (single_locale))
+ /* Ingore this entry. */
+ continue;
+ }
+
+ /* If the current locale value is C (or POSIX) we don't load a
+ domain. Return the MSGID. */
+ if (strcmp (single_locale, "C") == 0
+ || strcmp (single_locale, "POSIX") == 0)
+ break;
+
+ /* Find structure describing the message catalog matching the
+ DOMAINNAME and CATEGORY. */
+ domain = _nl_find_domain (dirname, single_locale, xdomainname, binding);
+
+ if (domain != NULL)
+ {
+ retval = _nl_find_msg (domain, binding, msgid1, &retlen);
+
+ if (retval == NULL)
+ {
+ int cnt;
+
+ for (cnt = 0; domain->successor[cnt] != NULL; ++cnt)
+ {
+ retval = _nl_find_msg (domain->successor[cnt], binding,
+ msgid1, &retlen);
+
+ if (retval != NULL)
+ {
+ domain = domain->successor[cnt];
+ break;
+ }
+ }
+ }
+
+ if (retval != NULL)
+ {
+ /* Found the translation of MSGID1 in domain DOMAIN:
+ starting at RETVAL, RETLEN bytes. */
+ FREE_BLOCKS (block_list);
+#if defined HAVE_TSEARCH || defined _LIBC
+ if (foundp == NULL)
+ {
+ /* Create a new entry and add it to the search tree. */
+ struct known_translation_t *newp;
+
+ newp = (struct known_translation_t *)
+ malloc (offsetof (struct known_translation_t, msgid)
+ + msgid_len + domainname_len + 1);
+ if (newp != NULL)
+ {
+ newp->domainname =
+ mempcpy (newp->msgid, msgid1, msgid_len);
+ memcpy (newp->domainname, domainname, domainname_len + 1);
+ newp->category = category;
+ newp->counter = _nl_msg_cat_cntr;
+ newp->domain = domain;
+ newp->translation = retval;
+ newp->translation_length = retlen;
+
+ /* Insert the entry in the search tree. */
+ foundp = (struct known_translation_t **)
+ tsearch (newp, &root, transcmp);
+ if (foundp == NULL
+ || __builtin_expect (*foundp != newp, 0))
+ /* The insert failed. */
+ free (newp);
+ }
+ }
+ else
+ {
+ /* We can update the existing entry. */
+ (*foundp)->counter = _nl_msg_cat_cntr;
+ (*foundp)->domain = domain;
+ (*foundp)->translation = retval;
+ (*foundp)->translation_length = retlen;
+ }
+#endif
+ __set_errno (saved_errno);
+
+ /* Now deal with plural. */
+ if (plural)
+ retval = plural_lookup (domain, n, retval, retlen);
+
+ __libc_rwlock_unlock (_nl_state_lock);
+ return retval;
+ }
+ }
+ }
+
+ return_untranslated:
+ /* Return the untranslated MSGID. */
+ FREE_BLOCKS (block_list);
+ __libc_rwlock_unlock (_nl_state_lock);
+#ifndef _LIBC
+ if (!ENABLE_SECURE)
+ {
+ extern void _nl_log_untranslated (const char *logfilename,
+ const char *domainname,
+ const char *msgid1, const char *msgid2,
+ int plural);
+ const char *logfilename = getenv ("GETTEXT_LOG_UNTRANSLATED");
+
+ if (logfilename != NULL && logfilename[0] != '\0')
+ _nl_log_untranslated (logfilename, domainname, msgid1, msgid2, plural);
+ }
+#endif
+ __set_errno (saved_errno);
+ return (plural == 0
+ ? (char *) msgid1
+ /* Use the Germanic plural rule. */
+ : n == 1 ? (char *) msgid1 : (char *) msgid2);
+}
+
+
+char *
+internal_function
+_nl_find_msg (struct loaded_l10nfile *domain_file,
+ struct binding *domainbinding, const char *msgid,
+ size_t *lengthp)
+{
+ struct loaded_domain *domain;
+ nls_uint32 nstrings;
+ size_t act;
+ char *result;
+ size_t resultlen;
+
+ if (domain_file->decided == 0)
+ _nl_load_domain (domain_file, domainbinding);
+
+ if (domain_file->data == NULL)
+ return NULL;
+
+ domain = (struct loaded_domain *) domain_file->data;
+
+ nstrings = domain->nstrings;
+
+ /* Locate the MSGID and its translation. */
+ if (domain->hash_tab != NULL)
+ {
+ /* Use the hashing table. */
+ nls_uint32 len = strlen (msgid);
+ nls_uint32 hash_val = hash_string (msgid);
+ nls_uint32 idx = hash_val % domain->hash_size;
+ nls_uint32 incr = 1 + (hash_val % (domain->hash_size - 2));
+
+ while (1)
+ {
+ nls_uint32 nstr =
+ W (domain->must_swap_hash_tab, domain->hash_tab[idx]);
+
+ if (nstr == 0)
+ /* Hash table entry is empty. */
+ return NULL;
+
+ nstr--;
+
+ /* Compare msgid with the original string at index nstr.
+ We compare the lengths with >=, not ==, because plural entries
+ are represented by strings with an embedded NUL. */
+ if (nstr < nstrings
+ ? W (domain->must_swap, domain->orig_tab[nstr].length) >= len
+ && (strcmp (msgid,
+ domain->data + W (domain->must_swap,
+ domain->orig_tab[nstr].offset))
+ == 0)
+ : domain->orig_sysdep_tab[nstr - nstrings].length > len
+ && (strcmp (msgid,
+ domain->orig_sysdep_tab[nstr - nstrings].pointer)
+ == 0))
+ {
+ act = nstr;
+ goto found;
+ }
+
+ if (idx >= domain->hash_size - incr)
+ idx -= domain->hash_size - incr;
+ else
+ idx += incr;
+ }
+ /* NOTREACHED */
+ }
+ else
+ {
+ /* Try the default method: binary search in the sorted array of
+ messages. */
+ size_t top, bottom;
+
+ bottom = 0;
+ top = nstrings;
+ while (bottom < top)
+ {
+ int cmp_val;
+
+ act = (bottom + top) / 2;
+ cmp_val = strcmp (msgid, (domain->data
+ + W (domain->must_swap,
+ domain->orig_tab[act].offset)));
+ if (cmp_val < 0)
+ top = act;
+ else if (cmp_val > 0)
+ bottom = act + 1;
+ else
+ goto found;
+ }
+ /* No translation was found. */
+ return NULL;
+ }
+
+ found:
+ /* The translation was found at index ACT. If we have to convert the
+ string to use a different character set, this is the time. */
+ if (act < nstrings)
+ {
+ result = (char *)
+ (domain->data + W (domain->must_swap, domain->trans_tab[act].offset));
+ resultlen = W (domain->must_swap, domain->trans_tab[act].length) + 1;
+ }
+ else
+ {
+ result = (char *) domain->trans_sysdep_tab[act - nstrings].pointer;
+ resultlen = domain->trans_sysdep_tab[act - nstrings].length;
+ }
+
+#if defined _LIBC || HAVE_ICONV
+ if (domain->codeset_cntr
+ != (domainbinding != NULL ? domainbinding->codeset_cntr : 0))
+ {
+ /* The domain's codeset has changed through bind_textdomain_codeset()
+ since the message catalog was initialized or last accessed. We
+ have to reinitialize the converter. */
+ _nl_free_domain_conv (domain);
+ _nl_init_domain_conv (domain_file, domain, domainbinding);
+ }
+
+ if (
+# ifdef _LIBC
+ domain->conv != (__gconv_t) -1
+# else
+# if HAVE_ICONV
+ domain->conv != (iconv_t) -1
+# endif
+# endif
+ )
+ {
+ /* We are supposed to do a conversion. First allocate an
+ appropriate table with the same structure as the table
+ of translations in the file, where we can put the pointers
+ to the converted strings in.
+ There is a slight complication with plural entries. They
+ are represented by consecutive NUL terminated strings. We
+ handle this case by converting RESULTLEN bytes, including
+ NULs. */
+
+ if (domain->conv_tab == NULL
+ && ((domain->conv_tab =
+ (char **) calloc (nstrings + domain->n_sysdep_strings,
+ sizeof (char *)))
+ == NULL))
+ /* Mark that we didn't succeed allocating a table. */
+ domain->conv_tab = (char **) -1;
+
+ if (__builtin_expect (domain->conv_tab == (char **) -1, 0))
+ /* Nothing we can do, no more memory. */
+ goto converted;
+
+ if (domain->conv_tab[act] == NULL)
+ {
+ /* We haven't used this string so far, so it is not
+ translated yet. Do this now. */
+ /* We use a bit more efficient memory handling.
+ We allocate always larger blocks which get used over
+ time. This is faster than many small allocations. */
+ __libc_lock_define_initialized (static, lock)
+# define INITIAL_BLOCK_SIZE 4080
+ static unsigned char *freemem;
+ static size_t freemem_size;
+
+ const unsigned char *inbuf;
+ unsigned char *outbuf;
+ int malloc_count;
+# ifndef _LIBC
+ transmem_block_t *transmem_list = NULL;
+# endif
+
+ __libc_lock_lock (lock);
+
+ inbuf = (const unsigned char *) result;
+ outbuf = freemem + sizeof (size_t);
+
+ malloc_count = 0;
+ while (1)
+ {
+ transmem_block_t *newmem;
+# ifdef _LIBC
+ size_t non_reversible;
+ int res;
+
+ if (freemem_size < sizeof (size_t))
+ goto resize_freemem;
+
+ res = __gconv (domain->conv,
+ &inbuf, inbuf + resultlen,
+ &outbuf,
+ outbuf + freemem_size - sizeof (size_t),
+ &non_reversible);
+
+ if (res == __GCONV_OK || res == __GCONV_EMPTY_INPUT)
+ break;
+
+ if (res != __GCONV_FULL_OUTPUT)
+ {
+ __libc_lock_unlock (lock);
+ goto converted;
+ }
+
+ inbuf = result;
+# else
+# if HAVE_ICONV
+ const char *inptr = (const char *) inbuf;
+ size_t inleft = resultlen;
+ char *outptr = (char *) outbuf;
+ size_t outleft;
+
+ if (freemem_size < sizeof (size_t))
+ goto resize_freemem;
+
+ outleft = freemem_size - sizeof (size_t);
+ if (iconv (domain->conv,
+ (ICONV_CONST char **) &inptr, &inleft,
+ &outptr, &outleft)
+ != (size_t) (-1))
+ {
+ outbuf = (unsigned char *) outptr;
+ break;
+ }
+ if (errno != E2BIG)
+ {
+ __libc_lock_unlock (lock);
+ goto converted;
+ }
+# endif
+# endif
+
+ resize_freemem:
+ /* We must allocate a new buffer or resize the old one. */
+ if (malloc_count > 0)
+ {
+ ++malloc_count;
+ freemem_size = malloc_count * INITIAL_BLOCK_SIZE;
+ newmem = (transmem_block_t *) realloc (transmem_list,
+ freemem_size);
+# ifdef _LIBC
+ if (newmem != NULL)
+ transmem_list = transmem_list->next;
+ else
+ {
+ struct transmem_list *old = transmem_list;
+
+ transmem_list = transmem_list->next;
+ free (old);
+ }
+# endif
+ }
+ else
+ {
+ malloc_count = 1;
+ freemem_size = INITIAL_BLOCK_SIZE;
+ newmem = (transmem_block_t *) malloc (freemem_size);
+ }
+ if (__builtin_expect (newmem == NULL, 0))
+ {
+ freemem = NULL;
+ freemem_size = 0;
+ __libc_lock_unlock (lock);
+ goto converted;
+ }
+
+# ifdef _LIBC
+ /* Add the block to the list of blocks we have to free
+ at some point. */
+ newmem->next = transmem_list;
+ transmem_list = newmem;
+
+ freemem = newmem->data;
+ freemem_size -= offsetof (struct transmem_list, data);
+# else
+ transmem_list = newmem;
+ freemem = newmem;
+# endif
+
+ outbuf = freemem + sizeof (size_t);
+ }
+
+ /* We have now in our buffer a converted string. Put this
+ into the table of conversions. */
+ *(size_t *) freemem = outbuf - freemem - sizeof (size_t);
+ domain->conv_tab[act] = (char *) freemem;
+ /* Shrink freemem, but keep it aligned. */
+ freemem_size -= outbuf - freemem;
+ freemem = outbuf;
+ freemem += freemem_size & (alignof (size_t) - 1);
+ freemem_size = freemem_size & ~ (alignof (size_t) - 1);
+
+ __libc_lock_unlock (lock);
+ }
+
+ /* Now domain->conv_tab[act] contains the translation of all
+ the plural variants. */
+ result = domain->conv_tab[act] + sizeof (size_t);
+ resultlen = *(size_t *) domain->conv_tab[act];
+ }
+
+ converted:
+ /* The result string is converted. */
+
+#endif /* _LIBC || HAVE_ICONV */
+
+ *lengthp = resultlen;
+ return result;
+}
+
+
+/* Look up a plural variant. */
+static char *
+internal_function
+plural_lookup (struct loaded_l10nfile *domain, unsigned long int n,
+ const char *translation, size_t translation_len)
+{
+ struct loaded_domain *domaindata = (struct loaded_domain *) domain->data;
+ unsigned long int index;
+ const char *p;
+
+ index = plural_eval (domaindata->plural, n);
+ if (index >= domaindata->nplurals)
+ /* This should never happen. It means the plural expression and the
+ given maximum value do not match. */
+ index = 0;
+
+ /* Skip INDEX strings at TRANSLATION. */
+ p = translation;
+ while (index-- > 0)
+ {
+#ifdef _LIBC
+ p = __rawmemchr (p, '\0');
+#else
+ p = strchr (p, '\0');
+#endif
+ /* And skip over the NUL byte. */
+ p++;
+
+ if (p >= translation + translation_len)
+ /* This should never happen. It means the plural expression
+ evaluated to a value larger than the number of variants
+ available for MSGID1. */
+ return (char *) translation;
+ }
+ return (char *) p;
+}
+
+#ifndef _LIBC
+/* Return string representation of locale CATEGORY. */
+static const char *
+internal_function
+category_to_name (int category)
+{
+ const char *retval;
+
+ switch (category)
+ {
+#ifdef LC_COLLATE
+ case LC_COLLATE:
+ retval = "LC_COLLATE";
+ break;
+#endif
+#ifdef LC_CTYPE
+ case LC_CTYPE:
+ retval = "LC_CTYPE";
+ break;
+#endif
+#ifdef LC_MONETARY
+ case LC_MONETARY:
+ retval = "LC_MONETARY";
+ break;
+#endif
+#ifdef LC_NUMERIC
+ case LC_NUMERIC:
+ retval = "LC_NUMERIC";
+ break;
+#endif
+#ifdef LC_TIME
+ case LC_TIME:
+ retval = "LC_TIME";
+ break;
+#endif
+#ifdef LC_MESSAGES
+ case LC_MESSAGES:
+ retval = "LC_MESSAGES";
+ break;
+#endif
+#ifdef LC_RESPONSE
+ case LC_RESPONSE:
+ retval = "LC_RESPONSE";
+ break;
+#endif
+#ifdef LC_ALL
+ case LC_ALL:
+ /* This might not make sense but is perhaps better than any other
+ value. */
+ retval = "LC_ALL";
+ break;
+#endif
+ default:
+ /* If you have a better idea for a default value let me know. */
+ retval = "LC_XXX";
+ }
+
+ return retval;
+}
+#endif
+
+/* Guess value of current locale from value of the environment variables. */
+static const char *
+internal_function
+guess_category_value (int category, const char *categoryname)
+{
+ const char *language;
+ const char *retval;
+
+ /* The highest priority value is the `LANGUAGE' environment
+ variable. But we don't use the value if the currently selected
+ locale is the C locale. This is a GNU extension. */
+ language = getenv ("LANGUAGE");
+ if (language != NULL && language[0] == '\0')
+ language = NULL;
+
+ /* We have to proceed with the POSIX methods of looking to `LC_ALL',
+ `LC_xxx', and `LANG'. On some systems this can be done by the
+ `setlocale' function itself. */
+#ifdef _LIBC
+ retval = __current_locale_name (category);
+#else
+ retval = _nl_locale_name (category, categoryname);
+#endif
+
+ /* Ignore LANGUAGE if the locale is set to "C" because
+ 1. "C" locale usually uses the ASCII encoding, and most international
+ messages use non-ASCII characters. These characters get displayed
+ as question marks (if using glibc's iconv()) or as invalid 8-bit
+ characters (because other iconv()s refuse to convert most non-ASCII
+ characters to ASCII). In any case, the output is ugly.
+ 2. The precise output of some programs in the "C" locale is specified
+ by POSIX and should not depend on environment variables like
+ "LANGUAGE". We allow such programs to use gettext(). */
+ return language != NULL && strcmp (retval, "C") != 0 ? language : retval;
+}
+
+/* @@ begin of epilog @@ */
+
+/* We don't want libintl.a to depend on any other library. So we
+ avoid the non-standard function stpcpy. In GNU C Library this
+ function is available, though. Also allow the symbol HAVE_STPCPY
+ to be defined. */
+#if !_LIBC && !HAVE_STPCPY
+static char *
+stpcpy (char *dest, const char *src)
+{
+ while ((*dest++ = *src++) != '\0')
+ /* Do nothing. */ ;
+ return dest - 1;
+}
+#endif
+
+#if !_LIBC && !HAVE_MEMPCPY
+static void *
+mempcpy (void *dest, const void *src, size_t n)
+{
+ return (void *) ((char *) memcpy (dest, src, n) + n);
+}
+#endif
+
+
+#ifdef _LIBC
+/* If we want to free all resources we have to do some work at
+ program's end. */
+libc_freeres_fn (free_mem)
+{
+ void *old;
+
+ while (_nl_domain_bindings != NULL)
+ {
+ struct binding *oldp = _nl_domain_bindings;
+ _nl_domain_bindings = _nl_domain_bindings->next;
+ if (oldp->dirname != INTUSE(_nl_default_dirname))
+ /* Yes, this is a pointer comparison. */
+ free (oldp->dirname);
+ free (oldp->codeset);
+ free (oldp);
+ }
+
+ if (_nl_current_default_domain != _nl_default_default_domain)
+ /* Yes, again a pointer comparison. */
+ free ((char *) _nl_current_default_domain);
+
+ /* Remove the search tree with the known translations. */
+ __tdestroy (root, free);
+ root = NULL;
+
+ while (transmem_list != NULL)
+ {
+ old = transmem_list;
+ transmem_list = transmem_list->next;
+ free (old);
+ }
+}
+#endif
diff --git a/macros/texinfo/contrib/texinfo-hu/texinfo/intl/dcngettext.c b/macros/texinfo/contrib/texinfo-hu/texinfo/intl/dcngettext.c
new file mode 100644
index 0000000000..48a3e09e09
--- /dev/null
+++ b/macros/texinfo/contrib/texinfo-hu/texinfo/intl/dcngettext.c
@@ -0,0 +1,57 @@
+/* Implementation of the dcngettext(3) function.
+ Copyright (C) 1995-1999, 2000-2003 Free Software Foundation, Inc.
+
+ This program is free software; you can redistribute it and/or modify it
+ under the terms of the GNU Library General Public License as published
+ 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
+ Library General Public License for more details.
+
+ You should have received a copy of the GNU Library General Public
+ License along with this program; if not, write to the Free Software
+ Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307,
+ USA. */
+
+#ifdef HAVE_CONFIG_H
+# include <config.h>
+#endif
+
+#include "gettextP.h"
+#ifdef _LIBC
+# include <libintl.h>
+#else
+# include "libgnuintl.h"
+#endif
+
+/* @@ end of prolog @@ */
+
+/* Names for the libintl functions are a problem. They must not clash
+ with existing names and they should follow ANSI C. But this source
+ code is also used in GNU C Library where the names have a __
+ prefix. So we have to make a difference here. */
+#ifdef _LIBC
+# define DCNGETTEXT __dcngettext
+# define DCIGETTEXT __dcigettext
+#else
+# define DCNGETTEXT libintl_dcngettext
+# define DCIGETTEXT libintl_dcigettext
+#endif
+
+/* Look up MSGID in the DOMAINNAME message catalog for the current CATEGORY
+ locale. */
+char *
+DCNGETTEXT (const char *domainname,
+ const char *msgid1, const char *msgid2, unsigned long int n,
+ int category)
+{
+ return DCIGETTEXT (domainname, msgid1, msgid2, 1, n, category);
+}
+
+#ifdef _LIBC
+/* Alias for function name in GNU C Library. */
+weak_alias (__dcngettext, dcngettext);
+#endif
diff --git a/macros/texinfo/contrib/texinfo-hu/texinfo/intl/dgettext.c b/macros/texinfo/contrib/texinfo-hu/texinfo/intl/dgettext.c
new file mode 100644
index 0000000000..b64b0f5d39
--- /dev/null
+++ b/macros/texinfo/contrib/texinfo-hu/texinfo/intl/dgettext.c
@@ -0,0 +1,58 @@
+/* Implementation of the dgettext(3) function.
+ Copyright (C) 1995-1997, 2000-2003 Free Software Foundation, Inc.
+
+ This program is free software; you can redistribute it and/or modify it
+ under the terms of the GNU Library General Public License as published
+ 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
+ Library General Public License for more details.
+
+ You should have received a copy of the GNU Library General Public
+ License along with this program; if not, write to the Free Software
+ Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307,
+ USA. */
+
+#ifdef HAVE_CONFIG_H
+# include <config.h>
+#endif
+
+#include "gettextP.h"
+
+#include <locale.h>
+
+#ifdef _LIBC
+# include <libintl.h>
+#else
+# include "libgnuintl.h"
+#endif
+
+/* @@ end of prolog @@ */
+
+/* Names for the libintl functions are a problem. They must not clash
+ with existing names and they should follow ANSI C. But this source
+ code is also used in GNU C Library where the names have a __
+ prefix. So we have to make a difference here. */
+#ifdef _LIBC
+# define DGETTEXT __dgettext
+# define DCGETTEXT INTUSE(__dcgettext)
+#else
+# define DGETTEXT libintl_dgettext
+# define DCGETTEXT libintl_dcgettext
+#endif
+
+/* Look up MSGID in the DOMAINNAME message catalog of the current
+ LC_MESSAGES locale. */
+char *
+DGETTEXT (const char *domainname, const char *msgid)
+{
+ return DCGETTEXT (domainname, msgid, LC_MESSAGES);
+}
+
+#ifdef _LIBC
+/* Alias for function name in GNU C Library. */
+weak_alias (__dgettext, dgettext);
+#endif
diff --git a/macros/texinfo/contrib/texinfo-hu/texinfo/intl/dngettext.c b/macros/texinfo/contrib/texinfo-hu/texinfo/intl/dngettext.c
new file mode 100644
index 0000000000..7815637f04
--- /dev/null
+++ b/macros/texinfo/contrib/texinfo-hu/texinfo/intl/dngettext.c
@@ -0,0 +1,59 @@
+/* Implementation of the dngettext(3) function.
+ Copyright (C) 1995-1997, 2000-2003 Free Software Foundation, Inc.
+
+ This program is free software; you can redistribute it and/or modify it
+ under the terms of the GNU Library General Public License as published
+ 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
+ Library General Public License for more details.
+
+ You should have received a copy of the GNU Library General Public
+ License along with this program; if not, write to the Free Software
+ Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307,
+ USA. */
+
+#ifdef HAVE_CONFIG_H
+# include <config.h>
+#endif
+
+#include "gettextP.h"
+
+#include <locale.h>
+
+#ifdef _LIBC
+# include <libintl.h>
+#else
+# include "libgnuintl.h"
+#endif
+
+/* @@ end of prolog @@ */
+
+/* Names for the libintl functions are a problem. They must not clash
+ with existing names and they should follow ANSI C. But this source
+ code is also used in GNU C Library where the names have a __
+ prefix. So we have to make a difference here. */
+#ifdef _LIBC
+# define DNGETTEXT __dngettext
+# define DCNGETTEXT __dcngettext
+#else
+# define DNGETTEXT libintl_dngettext
+# define DCNGETTEXT libintl_dcngettext
+#endif
+
+/* Look up MSGID in the DOMAINNAME message catalog of the current
+ LC_MESSAGES locale and skip message according to the plural form. */
+char *
+DNGETTEXT (const char *domainname,
+ const char *msgid1, const char *msgid2, unsigned long int n)
+{
+ return DCNGETTEXT (domainname, msgid1, msgid2, n, LC_MESSAGES);
+}
+
+#ifdef _LIBC
+/* Alias for function name in GNU C Library. */
+weak_alias (__dngettext, dngettext);
+#endif
diff --git a/macros/texinfo/contrib/texinfo-hu/texinfo/intl/eval-plural.h b/macros/texinfo/contrib/texinfo-hu/texinfo/intl/eval-plural.h
new file mode 100644
index 0000000000..01bd5af5fc
--- /dev/null
+++ b/macros/texinfo/contrib/texinfo-hu/texinfo/intl/eval-plural.h
@@ -0,0 +1,108 @@
+/* Plural expression evaluation.
+ Copyright (C) 2000-2003 Free Software Foundation, Inc.
+
+ This program is free software; you can redistribute it and/or modify it
+ under the terms of the GNU Library General Public License as published
+ 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
+ Library General Public License for more details.
+
+ You should have received a copy of the GNU Library General Public
+ License along with this program; if not, write to the Free Software
+ Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307,
+ USA. */
+
+#ifndef STATIC
+#define STATIC static
+#endif
+
+/* Evaluate the plural expression and return an index value. */
+STATIC
+unsigned long int
+internal_function
+plural_eval (struct expression *pexp, unsigned long int n)
+{
+ switch (pexp->nargs)
+ {
+ case 0:
+ switch (pexp->operation)
+ {
+ case var:
+ return n;
+ case num:
+ return pexp->val.num;
+ default:
+ break;
+ }
+ /* NOTREACHED */
+ break;
+ case 1:
+ {
+ /* pexp->operation must be lnot. */
+ unsigned long int arg = plural_eval (pexp->val.args[0], n);
+ return ! arg;
+ }
+ case 2:
+ {
+ unsigned long int leftarg = plural_eval (pexp->val.args[0], n);
+ if (pexp->operation == lor)
+ return leftarg || plural_eval (pexp->val.args[1], n);
+ else if (pexp->operation == land)
+ return leftarg && plural_eval (pexp->val.args[1], n);
+ else
+ {
+ unsigned long int rightarg = plural_eval (pexp->val.args[1], n);
+
+ switch (pexp->operation)
+ {
+ case mult:
+ return leftarg * rightarg;
+ case divide:
+#if !INTDIV0_RAISES_SIGFPE
+ if (rightarg == 0)
+ raise (SIGFPE);
+#endif
+ return leftarg / rightarg;
+ case module:
+#if !INTDIV0_RAISES_SIGFPE
+ if (rightarg == 0)
+ raise (SIGFPE);
+#endif
+ return leftarg % rightarg;
+ case plus:
+ return leftarg + rightarg;
+ case minus:
+ return leftarg - rightarg;
+ case less_than:
+ return leftarg < rightarg;
+ case greater_than:
+ return leftarg > rightarg;
+ case less_or_equal:
+ return leftarg <= rightarg;
+ case greater_or_equal:
+ return leftarg >= rightarg;
+ case equal:
+ return leftarg == rightarg;
+ case not_equal:
+ return leftarg != rightarg;
+ default:
+ break;
+ }
+ }
+ /* NOTREACHED */
+ break;
+ }
+ case 3:
+ {
+ /* pexp->operation must be qmop. */
+ unsigned long int boolarg = plural_eval (pexp->val.args[0], n);
+ return plural_eval (pexp->val.args[boolarg ? 1 : 2], n);
+ }
+ }
+ /* NOTREACHED */
+ return 0;
+}
diff --git a/macros/texinfo/contrib/texinfo-hu/texinfo/intl/explodename.c b/macros/texinfo/contrib/texinfo-hu/texinfo/intl/explodename.c
new file mode 100644
index 0000000000..52c25e7276
--- /dev/null
+++ b/macros/texinfo/contrib/texinfo-hu/texinfo/intl/explodename.c
@@ -0,0 +1,185 @@
+/* Copyright (C) 1995-1998, 2000-2001, 2003 Free Software Foundation, Inc.
+ Contributed by Ulrich Drepper <drepper@gnu.ai.mit.edu>, 1995.
+
+ This program is free software; you can redistribute it and/or modify it
+ under the terms of the GNU Library General Public License as published
+ 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
+ Library General Public License for more details.
+
+ You should have received a copy of the GNU Library General Public
+ License along with this program; if not, write to the Free Software
+ Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307,
+ USA. */
+
+#ifdef HAVE_CONFIG_H
+# include <config.h>
+#endif
+
+#include <stdlib.h>
+#include <string.h>
+#include <sys/types.h>
+
+#include "loadinfo.h"
+
+/* On some strange systems still no definition of NULL is found. Sigh! */
+#ifndef NULL
+# if defined __STDC__ && __STDC__
+# define NULL ((void *) 0)
+# else
+# define NULL 0
+# endif
+#endif
+
+/* @@ end of prolog @@ */
+
+char *
+_nl_find_language (const char *name)
+{
+ while (name[0] != '\0' && name[0] != '_' && name[0] != '@'
+ && name[0] != '+' && name[0] != ',')
+ ++name;
+
+ return (char *) name;
+}
+
+
+int
+_nl_explode_name (char *name,
+ const char **language, const char **modifier,
+ const char **territory, const char **codeset,
+ const char **normalized_codeset, const char **special,
+ const char **sponsor, const char **revision)
+{
+ enum { undecided, xpg, cen } syntax;
+ char *cp;
+ int mask;
+
+ *modifier = NULL;
+ *territory = NULL;
+ *codeset = NULL;
+ *normalized_codeset = NULL;
+ *special = NULL;
+ *sponsor = NULL;
+ *revision = NULL;
+
+ /* Now we determine the single parts of the locale name. First
+ look for the language. Termination symbols are `_' and `@' if
+ we use XPG4 style, and `_', `+', and `,' if we use CEN syntax. */
+ mask = 0;
+ syntax = undecided;
+ *language = cp = name;
+ cp = _nl_find_language (*language);
+
+ if (*language == cp)
+ /* This does not make sense: language has to be specified. Use
+ this entry as it is without exploding. Perhaps it is an alias. */
+ cp = strchr (*language, '\0');
+ else if (cp[0] == '_')
+ {
+ /* Next is the territory. */
+ cp[0] = '\0';
+ *territory = ++cp;
+
+ while (cp[0] != '\0' && cp[0] != '.' && cp[0] != '@'
+ && cp[0] != '+' && cp[0] != ',' && cp[0] != '_')
+ ++cp;
+
+ mask |= TERRITORY;
+
+ if (cp[0] == '.')
+ {
+ /* Next is the codeset. */
+ syntax = xpg;
+ cp[0] = '\0';
+ *codeset = ++cp;
+
+ while (cp[0] != '\0' && cp[0] != '@')
+ ++cp;
+
+ mask |= XPG_CODESET;
+
+ if (*codeset != cp && (*codeset)[0] != '\0')
+ {
+ *normalized_codeset = _nl_normalize_codeset (*codeset,
+ cp - *codeset);
+ if (strcmp (*codeset, *normalized_codeset) == 0)
+ free ((char *) *normalized_codeset);
+ else
+ mask |= XPG_NORM_CODESET;
+ }
+ }
+ }
+
+ if (cp[0] == '@' || (syntax != xpg && cp[0] == '+'))
+ {
+ /* Next is the modifier. */
+ syntax = cp[0] == '@' ? xpg : cen;
+ cp[0] = '\0';
+ *modifier = ++cp;
+
+ while (syntax == cen && cp[0] != '\0' && cp[0] != '+'
+ && cp[0] != ',' && cp[0] != '_')
+ ++cp;
+
+ mask |= XPG_MODIFIER | CEN_AUDIENCE;
+ }
+
+ if (syntax != xpg && (cp[0] == '+' || cp[0] == ',' || cp[0] == '_'))
+ {
+ syntax = cen;
+
+ if (cp[0] == '+')
+ {
+ /* Next is special application (CEN syntax). */
+ cp[0] = '\0';
+ *special = ++cp;
+
+ while (cp[0] != '\0' && cp[0] != ',' && cp[0] != '_')
+ ++cp;
+
+ mask |= CEN_SPECIAL;
+ }
+
+ if (cp[0] == ',')
+ {
+ /* Next is sponsor (CEN syntax). */
+ cp[0] = '\0';
+ *sponsor = ++cp;
+
+ while (cp[0] != '\0' && cp[0] != '_')
+ ++cp;
+
+ mask |= CEN_SPONSOR;
+ }
+
+ if (cp[0] == '_')
+ {
+ /* Next is revision (CEN syntax). */
+ cp[0] = '\0';
+ *revision = ++cp;
+
+ mask |= CEN_REVISION;
+ }
+ }
+
+ /* For CEN syntax values it might be important to have the
+ separator character in the file name, not for XPG syntax. */
+ if (syntax == xpg)
+ {
+ if (*territory != NULL && (*territory)[0] == '\0')
+ mask &= ~TERRITORY;
+
+ if (*codeset != NULL && (*codeset)[0] == '\0')
+ mask &= ~XPG_CODESET;
+
+ if (*modifier != NULL && (*modifier)[0] == '\0')
+ mask &= ~XPG_MODIFIER;
+ }
+
+ return mask;
+}
diff --git a/macros/texinfo/contrib/texinfo-hu/texinfo/intl/finddomain.c b/macros/texinfo/contrib/texinfo-hu/texinfo/intl/finddomain.c
new file mode 100644
index 0000000000..4992a8c9e3
--- /dev/null
+++ b/macros/texinfo/contrib/texinfo-hu/texinfo/intl/finddomain.c
@@ -0,0 +1,192 @@
+/* Handle list of needed message catalogs
+ Copyright (C) 1995-1999, 2000-2001, 2003 Free Software Foundation, Inc.
+ Written by Ulrich Drepper <drepper@gnu.org>, 1995.
+
+ This program is free software; you can redistribute it and/or modify it
+ under the terms of the GNU Library General Public License as published
+ 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
+ Library General Public License for more details.
+
+ You should have received a copy of the GNU Library General Public
+ License along with this program; if not, write to the Free Software
+ Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307,
+ USA. */
+
+#ifdef HAVE_CONFIG_H
+# include <config.h>
+#endif
+
+#include <stdio.h>
+#include <sys/types.h>
+#include <stdlib.h>
+#include <string.h>
+
+#if defined HAVE_UNISTD_H || defined _LIBC
+# include <unistd.h>
+#endif
+
+#include "gettextP.h"
+#ifdef _LIBC
+# include <libintl.h>
+#else
+# include "libgnuintl.h"
+#endif
+
+/* @@ end of prolog @@ */
+/* List of already loaded domains. */
+static struct loaded_l10nfile *_nl_loaded_domains;
+
+
+/* Return a data structure describing the message catalog described by
+ the DOMAINNAME and CATEGORY parameters with respect to the currently
+ established bindings. */
+struct loaded_l10nfile *
+internal_function
+_nl_find_domain (const char *dirname, char *locale,
+ const char *domainname, struct binding *domainbinding)
+{
+ struct loaded_l10nfile *retval;
+ const char *language;
+ const char *modifier;
+ const char *territory;
+ const char *codeset;
+ const char *normalized_codeset;
+ const char *special;
+ const char *sponsor;
+ const char *revision;
+ const char *alias_value;
+ int mask;
+
+ /* LOCALE can consist of up to four recognized parts for the XPG syntax:
+
+ language[_territory[.codeset]][@modifier]
+
+ and six parts for the CEN syntax:
+
+ language[_territory][+audience][+special][,[sponsor][_revision]]
+
+ Beside the first part all of them are allowed to be missing. If
+ the full specified locale is not found, the less specific one are
+ looked for. The various parts will be stripped off according to
+ the following order:
+ (1) revision
+ (2) sponsor
+ (3) special
+ (4) codeset
+ (5) normalized codeset
+ (6) territory
+ (7) audience/modifier
+ */
+
+ /* If we have already tested for this locale entry there has to
+ be one data set in the list of loaded domains. */
+ retval = _nl_make_l10nflist (&_nl_loaded_domains, dirname,
+ strlen (dirname) + 1, 0, locale, NULL, NULL,
+ NULL, NULL, NULL, NULL, NULL, domainname, 0);
+ if (retval != NULL)
+ {
+ /* We know something about this locale. */
+ int cnt;
+
+ if (retval->decided == 0)
+ _nl_load_domain (retval, domainbinding);
+
+ if (retval->data != NULL)
+ return retval;
+
+ for (cnt = 0; retval->successor[cnt] != NULL; ++cnt)
+ {
+ if (retval->successor[cnt]->decided == 0)
+ _nl_load_domain (retval->successor[cnt], domainbinding);
+
+ if (retval->successor[cnt]->data != NULL)
+ break;
+ }
+ return cnt >= 0 ? retval : NULL;
+ /* NOTREACHED */
+ }
+
+ /* See whether the locale value is an alias. If yes its value
+ *overwrites* the alias name. No test for the original value is
+ done. */
+ alias_value = _nl_expand_alias (locale);
+ if (alias_value != NULL)
+ {
+#if defined _LIBC || defined HAVE_STRDUP
+ locale = strdup (alias_value);
+ if (locale == NULL)
+ return NULL;
+#else
+ size_t len = strlen (alias_value) + 1;
+ locale = (char *) malloc (len);
+ if (locale == NULL)
+ return NULL;
+
+ memcpy (locale, alias_value, len);
+#endif
+ }
+
+ /* Now we determine the single parts of the locale name. First
+ look for the language. Termination symbols are `_' and `@' if
+ we use XPG4 style, and `_', `+', and `,' if we use CEN syntax. */
+ mask = _nl_explode_name (locale, &language, &modifier, &territory,
+ &codeset, &normalized_codeset, &special,
+ &sponsor, &revision);
+
+ /* Create all possible locale entries which might be interested in
+ generalization. */
+ retval = _nl_make_l10nflist (&_nl_loaded_domains, dirname,
+ strlen (dirname) + 1, mask, language, territory,
+ codeset, normalized_codeset, modifier, special,
+ sponsor, revision, domainname, 1);
+ if (retval == NULL)
+ /* This means we are out of core. */
+ return NULL;
+
+ if (retval->decided == 0)
+ _nl_load_domain (retval, domainbinding);
+ if (retval->data == NULL)
+ {
+ int cnt;
+ for (cnt = 0; retval->successor[cnt] != NULL; ++cnt)
+ {
+ if (retval->successor[cnt]->decided == 0)
+ _nl_load_domain (retval->successor[cnt], domainbinding);
+ if (retval->successor[cnt]->data != NULL)
+ break;
+ }
+ }
+
+ /* The room for an alias was dynamically allocated. Free it now. */
+ if (alias_value != NULL)
+ free (locale);
+
+ /* The space for normalized_codeset is dynamically allocated. Free it. */
+ if (mask & XPG_NORM_CODESET)
+ free ((void *) normalized_codeset);
+
+ return retval;
+}
+
+
+#ifdef _LIBC
+libc_freeres_fn (free_mem)
+{
+ struct loaded_l10nfile *runp = _nl_loaded_domains;
+
+ while (runp != NULL)
+ {
+ struct loaded_l10nfile *here = runp;
+ if (runp->data != NULL)
+ _nl_unload_domain ((struct loaded_domain *) runp->data);
+ runp = runp->next;
+ free ((char *) here->filename);
+ free (here);
+ }
+}
+#endif
diff --git a/macros/texinfo/contrib/texinfo-hu/texinfo/intl/gettext.c b/macros/texinfo/contrib/texinfo-hu/texinfo/intl/gettext.c
new file mode 100644
index 0000000000..92c42faa7c
--- /dev/null
+++ b/macros/texinfo/contrib/texinfo-hu/texinfo/intl/gettext.c
@@ -0,0 +1,63 @@
+/* Implementation of gettext(3) function.
+ Copyright (C) 1995, 1997, 2000-2003 Free Software Foundation, Inc.
+
+ This program is free software; you can redistribute it and/or modify it
+ under the terms of the GNU Library General Public License as published
+ 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
+ Library General Public License for more details.
+
+ You should have received a copy of the GNU Library General Public
+ License along with this program; if not, write to the Free Software
+ Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307,
+ USA. */
+
+#ifdef HAVE_CONFIG_H
+# include <config.h>
+#endif
+
+#ifdef _LIBC
+# define __need_NULL
+# include <stddef.h>
+#else
+# include <stdlib.h> /* Just for NULL. */
+#endif
+
+#include "gettextP.h"
+#ifdef _LIBC
+# include <libintl.h>
+#else
+# include "libgnuintl.h"
+#endif
+
+/* @@ end of prolog @@ */
+
+/* Names for the libintl functions are a problem. They must not clash
+ with existing names and they should follow ANSI C. But this source
+ code is also used in GNU C Library where the names have a __
+ prefix. So we have to make a difference here. */
+#ifdef _LIBC
+# define GETTEXT __gettext
+# define DCGETTEXT INTUSE(__dcgettext)
+#else
+# define GETTEXT libintl_gettext
+# define DCGETTEXT libintl_dcgettext
+#endif
+
+/* Look up MSGID in the current default message catalog for the current
+ LC_MESSAGES locale. If not found, returns MSGID itself (the default
+ text). */
+char *
+GETTEXT (const char *msgid)
+{
+ return DCGETTEXT (NULL, msgid, LC_MESSAGES);
+}
+
+#ifdef _LIBC
+/* Alias for function name in GNU C Library. */
+weak_alias (__gettext, gettext);
+#endif
diff --git a/macros/texinfo/contrib/texinfo-hu/texinfo/intl/gettextP.h b/macros/texinfo/contrib/texinfo-hu/texinfo/intl/gettextP.h
new file mode 100644
index 0000000000..4d66c3de31
--- /dev/null
+++ b/macros/texinfo/contrib/texinfo-hu/texinfo/intl/gettextP.h
@@ -0,0 +1,215 @@
+/* Header describing internals of libintl library.
+ Copyright (C) 1995-1999, 2000-2003 Free Software Foundation, Inc.
+ Written by Ulrich Drepper <drepper@cygnus.com>, 1995.
+
+ This program is free software; you can redistribute it and/or modify it
+ under the terms of the GNU Library General Public License as published
+ 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
+ Library General Public License for more details.
+
+ You should have received a copy of the GNU Library General Public
+ License along with this program; if not, write to the Free Software
+ Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307,
+ USA. */
+
+#ifndef _GETTEXTP_H
+#define _GETTEXTP_H
+
+#include <stddef.h> /* Get size_t. */
+
+#ifdef _LIBC
+# include "../iconv/gconv_int.h"
+#else
+# if HAVE_ICONV
+# include <iconv.h>
+# endif
+#endif
+
+#include "loadinfo.h"
+
+#include "gmo.h" /* Get nls_uint32. */
+
+/* @@ end of prolog @@ */
+
+#ifndef internal_function
+# define internal_function
+#endif
+
+#ifndef attribute_hidden
+# define attribute_hidden
+#endif
+
+/* Tell the compiler when a conditional or integer expression is
+ almost always true or almost always false. */
+#ifndef HAVE_BUILTIN_EXPECT
+# define __builtin_expect(expr, val) (expr)
+#endif
+
+#ifndef W
+# define W(flag, data) ((flag) ? SWAP (data) : (data))
+#endif
+
+
+#ifdef _LIBC
+# include <byteswap.h>
+# define SWAP(i) bswap_32 (i)
+#else
+static inline nls_uint32
+SWAP (i)
+ nls_uint32 i;
+{
+ return (i << 24) | ((i & 0xff00) << 8) | ((i >> 8) & 0xff00) | (i >> 24);
+}
+#endif
+
+
+/* In-memory representation of system dependent string. */
+struct sysdep_string_desc
+{
+ /* Length of addressed string, including the trailing NUL. */
+ size_t length;
+ /* Pointer to addressed string. */
+ const char *pointer;
+};
+
+/* The representation of an opened message catalog. */
+struct loaded_domain
+{
+ /* Pointer to memory containing the .mo file. */
+ const char *data;
+ /* 1 if the memory is mmap()ed, 0 if the memory is malloc()ed. */
+ int use_mmap;
+ /* Size of mmap()ed memory. */
+ size_t mmap_size;
+ /* 1 if the .mo file uses a different endianness than this machine. */
+ int must_swap;
+ /* Pointer to additional malloc()ed memory. */
+ void *malloced;
+
+ /* Number of static strings pairs. */
+ nls_uint32 nstrings;
+ /* Pointer to descriptors of original strings in the file. */
+ const struct string_desc *orig_tab;
+ /* Pointer to descriptors of translated strings in the file. */
+ const struct string_desc *trans_tab;
+
+ /* Number of system dependent strings pairs. */
+ nls_uint32 n_sysdep_strings;
+ /* Pointer to descriptors of original sysdep strings. */
+ const struct sysdep_string_desc *orig_sysdep_tab;
+ /* Pointer to descriptors of translated sysdep strings. */
+ const struct sysdep_string_desc *trans_sysdep_tab;
+
+ /* Size of hash table. */
+ nls_uint32 hash_size;
+ /* Pointer to hash table. */
+ const nls_uint32 *hash_tab;
+ /* 1 if the hash table uses a different endianness than this machine. */
+ int must_swap_hash_tab;
+
+ int codeset_cntr;
+#ifdef _LIBC
+ __gconv_t conv;
+#else
+# if HAVE_ICONV
+ iconv_t conv;
+# endif
+#endif
+ char **conv_tab;
+
+ struct expression *plural;
+ unsigned long int nplurals;
+};
+
+/* We want to allocate a string at the end of the struct. But ISO C
+ doesn't allow zero sized arrays. */
+#ifdef __GNUC__
+# define ZERO 0
+#else
+# define ZERO 1
+#endif
+
+/* A set of settings bound to a message domain. Used to store settings
+ from bindtextdomain() and bind_textdomain_codeset(). */
+struct binding
+{
+ struct binding *next;
+ char *dirname;
+ int codeset_cntr; /* Incremented each time codeset changes. */
+ char *codeset;
+ char domainname[ZERO];
+};
+
+/* A counter which is incremented each time some previous translations
+ become invalid.
+ This variable is part of the external ABI of the GNU libintl. */
+extern int _nl_msg_cat_cntr;
+
+#ifndef _LIBC
+const char *_nl_locale_name (int category, const char *categoryname);
+#endif
+
+struct loaded_l10nfile *_nl_find_domain (const char *__dirname, char *__locale,
+ const char *__domainname,
+ struct binding *__domainbinding)
+ internal_function;
+void _nl_load_domain (struct loaded_l10nfile *__domain,
+ struct binding *__domainbinding)
+ internal_function;
+void _nl_unload_domain (struct loaded_domain *__domain)
+ internal_function;
+const char *_nl_init_domain_conv (struct loaded_l10nfile *__domain_file,
+ struct loaded_domain *__domain,
+ struct binding *__domainbinding)
+ internal_function;
+void _nl_free_domain_conv (struct loaded_domain *__domain)
+ internal_function;
+
+char *_nl_find_msg (struct loaded_l10nfile *domain_file,
+ struct binding *domainbinding, const char *msgid,
+ size_t *lengthp)
+ internal_function;
+
+#ifdef _LIBC
+extern char *__gettext (const char *__msgid);
+extern char *__dgettext (const char *__domainname, const char *__msgid);
+extern char *__dcgettext (const char *__domainname, const char *__msgid,
+ int __category);
+extern char *__ngettext (const char *__msgid1, const char *__msgid2,
+ unsigned long int __n);
+extern char *__dngettext (const char *__domainname,
+ const char *__msgid1, const char *__msgid2,
+ unsigned long int n);
+extern char *__dcngettext (const char *__domainname,
+ const char *__msgid1, const char *__msgid2,
+ unsigned long int __n, int __category);
+extern char *__dcigettext (const char *__domainname,
+ const char *__msgid1, const char *__msgid2,
+ int __plural, unsigned long int __n,
+ int __category);
+extern char *__textdomain (const char *__domainname);
+extern char *__bindtextdomain (const char *__domainname,
+ const char *__dirname);
+extern char *__bind_textdomain_codeset (const char *__domainname,
+ const char *__codeset);
+#else
+/* Declare the exported libintl_* functions, in a way that allows us to
+ call them under their real name. */
+# undef _INTL_REDIRECT_INLINE
+# undef _INTL_REDIRECT_MACROS
+# define _INTL_REDIRECT_MACROS
+# include "libgnuintl.h"
+extern char *libintl_dcigettext (const char *__domainname,
+ const char *__msgid1, const char *__msgid2,
+ int __plural, unsigned long int __n,
+ int __category);
+#endif
+
+/* @@ begin of epilog @@ */
+
+#endif /* gettextP.h */
diff --git a/macros/texinfo/contrib/texinfo-hu/texinfo/intl/gmo.h b/macros/texinfo/contrib/texinfo-hu/texinfo/intl/gmo.h
new file mode 100644
index 0000000000..e7c9cc14b5
--- /dev/null
+++ b/macros/texinfo/contrib/texinfo-hu/texinfo/intl/gmo.h
@@ -0,0 +1,149 @@
+/* Description of GNU message catalog format: general file layout.
+ Copyright (C) 1995, 1997, 2000-2002, 2004 Free Software Foundation, Inc.
+
+ This program is free software; you can redistribute it and/or modify it
+ under the terms of the GNU Library General Public License as published
+ 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
+ Library General Public License for more details.
+
+ You should have received a copy of the GNU Library General Public
+ License along with this program; if not, write to the Free Software
+ Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307,
+ USA. */
+
+#ifndef _GETTEXT_H
+#define _GETTEXT_H 1
+
+#include <limits.h>
+
+/* @@ end of prolog @@ */
+
+/* The magic number of the GNU message catalog format. */
+#define _MAGIC 0x950412de
+#define _MAGIC_SWAPPED 0xde120495
+
+/* Revision number of the currently used .mo (binary) file format. */
+#define MO_REVISION_NUMBER 0
+#define MO_REVISION_NUMBER_WITH_SYSDEP_I 1
+
+/* The following contortions are an attempt to use the C preprocessor
+ to determine an unsigned integral type that is 32 bits wide. An
+ alternative approach is to use autoconf's AC_CHECK_SIZEOF macro, but
+ as of version autoconf-2.13, the AC_CHECK_SIZEOF macro doesn't work
+ when cross-compiling. */
+
+#if __STDC__
+# define UINT_MAX_32_BITS 4294967295U
+#else
+# define UINT_MAX_32_BITS 0xFFFFFFFF
+#endif
+
+/* If UINT_MAX isn't defined, assume it's a 32-bit type.
+ This should be valid for all systems GNU cares about because
+ that doesn't include 16-bit systems, and only modern systems
+ (that certainly have <limits.h>) have 64+-bit integral types. */
+
+#ifndef UINT_MAX
+# define UINT_MAX UINT_MAX_32_BITS
+#endif
+
+#if UINT_MAX == UINT_MAX_32_BITS
+typedef unsigned nls_uint32;
+#else
+# if USHRT_MAX == UINT_MAX_32_BITS
+typedef unsigned short nls_uint32;
+# else
+# if ULONG_MAX == UINT_MAX_32_BITS
+typedef unsigned long nls_uint32;
+# else
+ /* The following line is intended to throw an error. Using #error is
+ not portable enough. */
+ "Cannot determine unsigned 32-bit data type."
+# endif
+# endif
+#endif
+
+
+/* Header for binary .mo file format. */
+struct mo_file_header
+{
+ /* The magic number. */
+ nls_uint32 magic;
+ /* The revision number of the file format. */
+ nls_uint32 revision;
+
+ /* The following are only used in .mo files with major revision 0 or 1. */
+
+ /* The number of strings pairs. */
+ nls_uint32 nstrings;
+ /* Offset of table with start offsets of original strings. */
+ nls_uint32 orig_tab_offset;
+ /* Offset of table with start offsets of translated strings. */
+ nls_uint32 trans_tab_offset;
+ /* Size of hash table. */
+ nls_uint32 hash_tab_size;
+ /* Offset of first hash table entry. */
+ nls_uint32 hash_tab_offset;
+
+ /* The following are only used in .mo files with minor revision >= 1. */
+
+ /* The number of system dependent segments. */
+ nls_uint32 n_sysdep_segments;
+ /* Offset of table describing system dependent segments. */
+ nls_uint32 sysdep_segments_offset;
+ /* The number of system dependent strings pairs. */
+ nls_uint32 n_sysdep_strings;
+ /* Offset of table with start offsets of original sysdep strings. */
+ nls_uint32 orig_sysdep_tab_offset;
+ /* Offset of table with start offsets of translated sysdep strings. */
+ nls_uint32 trans_sysdep_tab_offset;
+};
+
+/* Descriptor for static string contained in the binary .mo file. */
+struct string_desc
+{
+ /* Length of addressed string, not including the trailing NUL. */
+ nls_uint32 length;
+ /* Offset of string in file. */
+ nls_uint32 offset;
+};
+
+/* The following are only used in .mo files with minor revision >= 1. */
+
+/* Descriptor for system dependent string segment. */
+struct sysdep_segment
+{
+ /* Length of addressed string, including the trailing NUL. */
+ nls_uint32 length;
+ /* Offset of string in file. */
+ nls_uint32 offset;
+};
+
+/* Descriptor for system dependent string. */
+struct sysdep_string
+{
+ /* Offset of static string segments in file. */
+ nls_uint32 offset;
+ /* Alternating sequence of static and system dependent segments.
+ The last segment is a static segment, including the trailing NUL. */
+ struct segment_pair
+ {
+ /* Size of static segment. */
+ nls_uint32 segsize;
+ /* Reference to system dependent string segment, or ~0 at the end. */
+ nls_uint32 sysdepref;
+ } segments[1];
+};
+
+/* Marker for the end of the segments[] array. This has the value 0xFFFFFFFF,
+ regardless whether 'int' is 16 bit, 32 bit, or 64 bit. */
+#define SEGMENTS_END ((nls_uint32) ~0)
+
+/* @@ begin of epilog @@ */
+
+#endif /* gettext.h */
diff --git a/macros/texinfo/contrib/texinfo-hu/texinfo/intl/hash-string.h b/macros/texinfo/contrib/texinfo-hu/texinfo/intl/hash-string.h
new file mode 100644
index 0000000000..093e3b1c10
--- /dev/null
+++ b/macros/texinfo/contrib/texinfo-hu/texinfo/intl/hash-string.h
@@ -0,0 +1,48 @@
+/* Description of GNU message catalog format: string hashing function.
+ Copyright (C) 1995, 1997-1998, 2000-2003 Free Software Foundation, Inc.
+
+ This program is free software; you can redistribute it and/or modify it
+ under the terms of the GNU Library General Public License as published
+ 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
+ Library General Public License for more details.
+
+ You should have received a copy of the GNU Library General Public
+ License along with this program; if not, write to the Free Software
+ Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307,
+ USA. */
+
+/* @@ end of prolog @@ */
+
+/* We assume to have `unsigned long int' value with at least 32 bits. */
+#define HASHWORDBITS 32
+
+
+/* Defines the so called `hashpjw' function by P.J. Weinberger
+ [see Aho/Sethi/Ullman, COMPILERS: Principles, Techniques and Tools,
+ 1986, 1987 Bell Telephone Laboratories, Inc.] */
+static inline unsigned long int
+hash_string (const char *str_param)
+{
+ unsigned long int hval, g;
+ const char *str = str_param;
+
+ /* Compute the hash value for the given string. */
+ hval = 0;
+ while (*str != '\0')
+ {
+ hval <<= 4;
+ hval += (unsigned char) *str++;
+ g = hval & ((unsigned long int) 0xf << (HASHWORDBITS - 4));
+ if (g != 0)
+ {
+ hval ^= g >> (HASHWORDBITS - 8);
+ hval ^= g;
+ }
+ }
+ return hval;
+}
diff --git a/macros/texinfo/contrib/texinfo-hu/texinfo/intl/intl-compat.c b/macros/texinfo/contrib/texinfo-hu/texinfo/intl/intl-compat.c
new file mode 100644
index 0000000000..96f9d955d1
--- /dev/null
+++ b/macros/texinfo/contrib/texinfo-hu/texinfo/intl/intl-compat.c
@@ -0,0 +1,131 @@
+/* intl-compat.c - Stub functions to call gettext functions from GNU gettext
+ Library.
+ Copyright (C) 1995, 2000-2003 Software Foundation, Inc.
+
+ This program is free software; you can redistribute it and/or modify it
+ under the terms of the GNU Library General Public License as published
+ 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
+ Library General Public License for more details.
+
+ You should have received a copy of the GNU Library General Public
+ License along with this program; if not, write to the Free Software
+ Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307,
+ USA. */
+
+#ifdef HAVE_CONFIG_H
+# include <config.h>
+#endif
+
+#include "gettextP.h"
+
+/* @@ end of prolog @@ */
+
+/* This file redirects the gettext functions (without prefix) to those
+ defined in the included GNU libintl library (with "libintl_" prefix).
+ It is compiled into libintl in order to make the AM_GNU_GETTEXT test
+ of gettext <= 0.11.2 work with the libintl library >= 0.11.3 which
+ has the redirections primarily in the <libintl.h> include file.
+ It is also compiled into libgnuintl so that libgnuintl.so can be used
+ as LD_PRELOADable library on glibc systems, to provide the extra
+ features that the functions in the libc don't have (namely, logging). */
+
+
+#undef gettext
+#undef dgettext
+#undef dcgettext
+#undef ngettext
+#undef dngettext
+#undef dcngettext
+#undef textdomain
+#undef bindtextdomain
+#undef bind_textdomain_codeset
+
+
+/* When building a DLL, we must export some functions. Note that because
+ the functions are only defined for binary backward compatibility, we
+ don't need to use __declspec(dllimport) in any case. */
+#if defined _MSC_VER && BUILDING_DLL
+# define DLL_EXPORTED __declspec(dllexport)
+#else
+# define DLL_EXPORTED
+#endif
+
+
+DLL_EXPORTED
+char *
+gettext (const char *msgid)
+{
+ return libintl_gettext (msgid);
+}
+
+
+DLL_EXPORTED
+char *
+dgettext (const char *domainname, const char *msgid)
+{
+ return libintl_dgettext (domainname, msgid);
+}
+
+
+DLL_EXPORTED
+char *
+dcgettext (const char *domainname, const char *msgid, int category)
+{
+ return libintl_dcgettext (domainname, msgid, category);
+}
+
+
+DLL_EXPORTED
+char *
+ngettext (const char *msgid1, const char *msgid2, unsigned long int n)
+{
+ return libintl_ngettext (msgid1, msgid2, n);
+}
+
+
+DLL_EXPORTED
+char *
+dngettext (const char *domainname,
+ const char *msgid1, const char *msgid2, unsigned long int n)
+{
+ return libintl_dngettext (domainname, msgid1, msgid2, n);
+}
+
+
+DLL_EXPORTED
+char *
+dcngettext (const char *domainname,
+ const char *msgid1, const char *msgid2, unsigned long int n,
+ int category)
+{
+ return libintl_dcngettext (domainname, msgid1, msgid2, n, category);
+}
+
+
+DLL_EXPORTED
+char *
+textdomain (const char *domainname)
+{
+ return libintl_textdomain (domainname);
+}
+
+
+DLL_EXPORTED
+char *
+bindtextdomain (const char *domainname, const char *dirname)
+{
+ return libintl_bindtextdomain (domainname, dirname);
+}
+
+
+DLL_EXPORTED
+char *
+bind_textdomain_codeset (const char *domainname, const char *codeset)
+{
+ return libintl_bind_textdomain_codeset (domainname, codeset);
+}
diff --git a/macros/texinfo/contrib/texinfo-hu/texinfo/intl/l10nflist.c b/macros/texinfo/contrib/texinfo-hu/texinfo/intl/l10nflist.c
new file mode 100644
index 0000000000..eb995aafad
--- /dev/null
+++ b/macros/texinfo/contrib/texinfo-hu/texinfo/intl/l10nflist.c
@@ -0,0 +1,421 @@
+/* Copyright (C) 1995-1999, 2000-2003 Free Software Foundation, Inc.
+ Contributed by Ulrich Drepper <drepper@gnu.ai.mit.edu>, 1995.
+
+ This program is free software; you can redistribute it and/or modify it
+ under the terms of the GNU Library General Public License as published
+ 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
+ Library General Public License for more details.
+
+ You should have received a copy of the GNU Library General Public
+ License along with this program; if not, write to the Free Software
+ Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307,
+ USA. */
+
+/* Tell glibc's <string.h> to provide a prototype for stpcpy().
+ This must come before <config.h> because <config.h> may include
+ <features.h>, and once <features.h> has been included, it's too late. */
+#ifndef _GNU_SOURCE
+# define _GNU_SOURCE 1
+#endif
+
+#ifdef HAVE_CONFIG_H
+# include <config.h>
+#endif
+
+#include <string.h>
+
+#if defined _LIBC || defined HAVE_ARGZ_H
+# include <argz.h>
+#endif
+#include <ctype.h>
+#include <sys/types.h>
+#include <stdlib.h>
+
+#include "loadinfo.h"
+
+/* On some strange systems still no definition of NULL is found. Sigh! */
+#ifndef NULL
+# if defined __STDC__ && __STDC__
+# define NULL ((void *) 0)
+# else
+# define NULL 0
+# endif
+#endif
+
+/* @@ end of prolog @@ */
+
+#ifdef _LIBC
+/* Rename the non ANSI C functions. This is required by the standard
+ because some ANSI C functions will require linking with this object
+ file and the name space must not be polluted. */
+# ifndef stpcpy
+# define stpcpy(dest, src) __stpcpy(dest, src)
+# endif
+#else
+# ifndef HAVE_STPCPY
+static char *stpcpy (char *dest, const char *src);
+# endif
+#endif
+
+/* Pathname support.
+ ISSLASH(C) tests whether C is a directory separator character.
+ IS_ABSOLUTE_PATH(P) tests whether P is an absolute path. If it is not,
+ it may be concatenated to a directory pathname.
+ */
+#if defined _WIN32 || defined __WIN32__ || defined __EMX__ || defined __DJGPP__
+ /* Win32, OS/2, DOS */
+# define ISSLASH(C) ((C) == '/' || (C) == '\\')
+# define HAS_DEVICE(P) \
+ ((((P)[0] >= 'A' && (P)[0] <= 'Z') || ((P)[0] >= 'a' && (P)[0] <= 'z')) \
+ && (P)[1] == ':')
+# define IS_ABSOLUTE_PATH(P) (ISSLASH ((P)[0]) || HAS_DEVICE (P))
+#else
+ /* Unix */
+# define ISSLASH(C) ((C) == '/')
+# define IS_ABSOLUTE_PATH(P) ISSLASH ((P)[0])
+#endif
+
+/* Define function which are usually not available. */
+
+#if !defined _LIBC && !defined HAVE___ARGZ_COUNT
+/* Returns the number of strings in ARGZ. */
+static 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;
+}
+# undef __argz_count
+# define __argz_count(argz, len) argz_count__ (argz, len)
+#else
+# ifdef _LIBC
+# define __argz_count(argz, len) INTUSE(__argz_count) (argz, len)
+# endif
+#endif /* !_LIBC && !HAVE___ARGZ_COUNT */
+
+#if !defined _LIBC && !defined HAVE___ARGZ_STRINGIFY
+/* Make '\0' separated arg vector ARGZ printable by converting all the '\0's
+ except the last into the character SEP. */
+static void
+argz_stringify__ (char *argz, size_t len, int sep)
+{
+ while (len > 0)
+ {
+ size_t part_len = strlen (argz);
+ argz += part_len;
+ len -= part_len + 1;
+ if (len > 0)
+ *argz++ = sep;
+ }
+}
+# undef __argz_stringify
+# define __argz_stringify(argz, len, sep) argz_stringify__ (argz, len, sep)
+#else
+# ifdef _LIBC
+# define __argz_stringify(argz, len, sep) \
+ INTUSE(__argz_stringify) (argz, len, sep)
+# endif
+#endif /* !_LIBC && !HAVE___ARGZ_STRINGIFY */
+
+#if !defined _LIBC && !defined HAVE___ARGZ_NEXT
+static char *
+argz_next__ (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 argz;
+ else
+ return 0;
+}
+# undef __argz_next
+# define __argz_next(argz, len, entry) argz_next__ (argz, len, entry)
+#endif /* !_LIBC && !HAVE___ARGZ_NEXT */
+
+
+/* Return number of bits set in X. */
+static inline int
+pop (int x)
+{
+ /* We assume that no more than 16 bits are used. */
+ x = ((x & ~0x5555) >> 1) + (x & 0x5555);
+ x = ((x & ~0x3333) >> 2) + (x & 0x3333);
+ x = ((x >> 4) + x) & 0x0f0f;
+ x = ((x >> 8) + x) & 0xff;
+
+ return x;
+}
+
+
+struct loaded_l10nfile *
+_nl_make_l10nflist (struct loaded_l10nfile **l10nfile_list,
+ const char *dirlist, size_t dirlist_len,
+ int mask, const char *language, const char *territory,
+ const char *codeset, const char *normalized_codeset,
+ const char *modifier, const char *special,
+ const char *sponsor, const char *revision,
+ const char *filename, int do_allocate)
+{
+ char *abs_filename;
+ struct loaded_l10nfile **lastp;
+ struct loaded_l10nfile *retval;
+ char *cp;
+ size_t dirlist_count;
+ size_t entries;
+ int cnt;
+
+ /* If LANGUAGE contains an absolute directory specification, we ignore
+ DIRLIST. */
+ if (IS_ABSOLUTE_PATH (language))
+ dirlist_len = 0;
+
+ /* Allocate room for the full file name. */
+ abs_filename = (char *) malloc (dirlist_len
+ + strlen (language)
+ + ((mask & TERRITORY) != 0
+ ? strlen (territory) + 1 : 0)
+ + ((mask & XPG_CODESET) != 0
+ ? strlen (codeset) + 1 : 0)
+ + ((mask & XPG_NORM_CODESET) != 0
+ ? strlen (normalized_codeset) + 1 : 0)
+ + (((mask & XPG_MODIFIER) != 0
+ || (mask & CEN_AUDIENCE) != 0)
+ ? strlen (modifier) + 1 : 0)
+ + ((mask & CEN_SPECIAL) != 0
+ ? strlen (special) + 1 : 0)
+ + (((mask & CEN_SPONSOR) != 0
+ || (mask & CEN_REVISION) != 0)
+ ? (1 + ((mask & CEN_SPONSOR) != 0
+ ? strlen (sponsor) : 0)
+ + ((mask & CEN_REVISION) != 0
+ ? strlen (revision) + 1 : 0)) : 0)
+ + 1 + strlen (filename) + 1);
+
+ if (abs_filename == NULL)
+ return NULL;
+
+ /* Construct file name. */
+ cp = abs_filename;
+ if (dirlist_len > 0)
+ {
+ memcpy (cp, dirlist, dirlist_len);
+ __argz_stringify (cp, dirlist_len, PATH_SEPARATOR);
+ cp += dirlist_len;
+ cp[-1] = '/';
+ }
+
+ cp = stpcpy (cp, language);
+
+ if ((mask & TERRITORY) != 0)
+ {
+ *cp++ = '_';
+ cp = stpcpy (cp, territory);
+ }
+ if ((mask & XPG_CODESET) != 0)
+ {
+ *cp++ = '.';
+ cp = stpcpy (cp, codeset);
+ }
+ if ((mask & XPG_NORM_CODESET) != 0)
+ {
+ *cp++ = '.';
+ cp = stpcpy (cp, normalized_codeset);
+ }
+ if ((mask & (XPG_MODIFIER | CEN_AUDIENCE)) != 0)
+ {
+ /* This component can be part of both syntaces but has different
+ leading characters. For CEN we use `+', else `@'. */
+ *cp++ = (mask & CEN_AUDIENCE) != 0 ? '+' : '@';
+ cp = stpcpy (cp, modifier);
+ }
+ if ((mask & CEN_SPECIAL) != 0)
+ {
+ *cp++ = '+';
+ cp = stpcpy (cp, special);
+ }
+ if ((mask & (CEN_SPONSOR | CEN_REVISION)) != 0)
+ {
+ *cp++ = ',';
+ if ((mask & CEN_SPONSOR) != 0)
+ cp = stpcpy (cp, sponsor);
+ if ((mask & CEN_REVISION) != 0)
+ {
+ *cp++ = '_';
+ cp = stpcpy (cp, revision);
+ }
+ }
+
+ *cp++ = '/';
+ stpcpy (cp, filename);
+
+ /* Look in list of already loaded domains whether it is already
+ available. */
+ lastp = l10nfile_list;
+ for (retval = *l10nfile_list; retval != NULL; retval = retval->next)
+ if (retval->filename != NULL)
+ {
+ int compare = strcmp (retval->filename, abs_filename);
+ if (compare == 0)
+ /* We found it! */
+ break;
+ if (compare < 0)
+ {
+ /* It's not in the list. */
+ retval = NULL;
+ break;
+ }
+
+ lastp = &retval->next;
+ }
+
+ if (retval != NULL || do_allocate == 0)
+ {
+ free (abs_filename);
+ return retval;
+ }
+
+ dirlist_count = (dirlist_len > 0 ? __argz_count (dirlist, dirlist_len) : 1);
+
+ /* Allocate a new loaded_l10nfile. */
+ retval =
+ (struct loaded_l10nfile *)
+ malloc (sizeof (*retval)
+ + (((dirlist_count << pop (mask)) + (dirlist_count > 1 ? 1 : 0))
+ * sizeof (struct loaded_l10nfile *)));
+ if (retval == NULL)
+ return NULL;
+
+ retval->filename = abs_filename;
+
+ /* We set retval->data to NULL here; it is filled in later.
+ Setting retval->decided to 1 here means that retval does not
+ correspond to a real file (dirlist_count > 1) or is not worth
+ looking up (if an unnormalized codeset was specified). */
+ retval->decided = (dirlist_count > 1
+ || ((mask & XPG_CODESET) != 0
+ && (mask & XPG_NORM_CODESET) != 0));
+ retval->data = NULL;
+
+ retval->next = *lastp;
+ *lastp = retval;
+
+ entries = 0;
+ /* Recurse to fill the inheritance list of RETVAL.
+ If the DIRLIST is a real list (i.e. DIRLIST_COUNT > 1), the RETVAL
+ entry does not correspond to a real file; retval->filename contains
+ colons. In this case we loop across all elements of DIRLIST and
+ across all bit patterns dominated by MASK.
+ If the DIRLIST is a single directory or entirely redundant (i.e.
+ DIRLIST_COUNT == 1), we loop across all bit patterns dominated by
+ MASK, excluding MASK itself.
+ In either case, we loop down from MASK to 0. This has the effect
+ that the extra bits in the locale name are dropped in this order:
+ first the modifier, then the territory, then the codeset, then the
+ normalized_codeset. */
+ for (cnt = dirlist_count > 1 ? mask : mask - 1; cnt >= 0; --cnt)
+ if ((cnt & ~mask) == 0
+ && ((cnt & CEN_SPECIFIC) == 0 || (cnt & XPG_SPECIFIC) == 0)
+ && ((cnt & XPG_CODESET) == 0 || (cnt & XPG_NORM_CODESET) == 0))
+ {
+ if (dirlist_count > 1)
+ {
+ /* Iterate over all elements of the DIRLIST. */
+ char *dir = NULL;
+
+ while ((dir = __argz_next ((char *) dirlist, dirlist_len, dir))
+ != NULL)
+ retval->successor[entries++]
+ = _nl_make_l10nflist (l10nfile_list, dir, strlen (dir) + 1,
+ cnt, language, territory, codeset,
+ normalized_codeset, modifier, special,
+ sponsor, revision, filename, 1);
+ }
+ else
+ retval->successor[entries++]
+ = _nl_make_l10nflist (l10nfile_list, dirlist, dirlist_len,
+ cnt, language, territory, codeset,
+ normalized_codeset, modifier, special,
+ sponsor, revision, filename, 1);
+ }
+ retval->successor[entries] = NULL;
+
+ return retval;
+}
+
+/* Normalize codeset name. There is no standard for the codeset
+ names. Normalization allows the user to use any of the common
+ names. The return value is dynamically allocated and has to be
+ freed by the caller. */
+const char *
+_nl_normalize_codeset (const char *codeset, size_t name_len)
+{
+ int len = 0;
+ int only_digit = 1;
+ char *retval;
+ char *wp;
+ size_t cnt;
+
+ for (cnt = 0; cnt < name_len; ++cnt)
+ if (isalnum ((unsigned char) codeset[cnt]))
+ {
+ ++len;
+
+ if (isalpha ((unsigned char) codeset[cnt]))
+ only_digit = 0;
+ }
+
+ retval = (char *) malloc ((only_digit ? 3 : 0) + len + 1);
+
+ if (retval != NULL)
+ {
+ if (only_digit)
+ wp = stpcpy (retval, "iso");
+ else
+ wp = retval;
+
+ for (cnt = 0; cnt < name_len; ++cnt)
+ if (isalpha ((unsigned char) codeset[cnt]))
+ *wp++ = tolower ((unsigned char) codeset[cnt]);
+ else if (isdigit ((unsigned char) codeset[cnt]))
+ *wp++ = codeset[cnt];
+
+ *wp = '\0';
+ }
+
+ return (const char *) retval;
+}
+
+
+/* @@ begin of epilog @@ */
+
+/* We don't want libintl.a to depend on any other library. So we
+ avoid the non-standard function stpcpy. In GNU C Library this
+ function is available, though. Also allow the symbol HAVE_STPCPY
+ to be defined. */
+#if !_LIBC && !HAVE_STPCPY
+static char *
+stpcpy (char *dest, const char *src)
+{
+ while ((*dest++ = *src++) != '\0')
+ /* Do nothing. */ ;
+ return dest - 1;
+}
+#endif
diff --git a/macros/texinfo/contrib/texinfo-hu/texinfo/intl/libgnuintl.h.in b/macros/texinfo/contrib/texinfo-hu/texinfo/intl/libgnuintl.h.in
new file mode 100644
index 0000000000..3be7eb990c
--- /dev/null
+++ b/macros/texinfo/contrib/texinfo-hu/texinfo/intl/libgnuintl.h.in
@@ -0,0 +1,383 @@
+/* Message catalogs for internationalization.
+ Copyright (C) 1995-1997, 2000-2003 Free Software Foundation, Inc.
+
+ This program is free software; you can redistribute it and/or modify it
+ under the terms of the GNU Library General Public License as published
+ 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
+ Library General Public License for more details.
+
+ You should have received a copy of the GNU Library General Public
+ License along with this program; if not, write to the Free Software
+ Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307,
+ USA. */
+
+#ifndef _LIBINTL_H
+#define _LIBINTL_H 1
+
+#include <locale.h>
+
+/* The LC_MESSAGES locale category is the category used by the functions
+ gettext() and dgettext(). It is specified in POSIX, but not in ANSI C.
+ On systems that don't define it, use an arbitrary value instead.
+ On Solaris, <locale.h> defines __LOCALE_H (or _LOCALE_H in Solaris 2.5)
+ then includes <libintl.h> (i.e. this file!) and then only defines
+ LC_MESSAGES. To avoid a redefinition warning, don't define LC_MESSAGES
+ in this case. */
+#if !defined LC_MESSAGES && !(defined __LOCALE_H || (defined _LOCALE_H && defined __sun))
+# define LC_MESSAGES 1729
+#endif
+
+/* We define an additional symbol to signal that we use the GNU
+ implementation of gettext. */
+#define __USE_GNU_GETTEXT 1
+
+/* Provide information about the supported file formats. Returns the
+ maximum minor revision number supported for a given major revision. */
+#define __GNU_GETTEXT_SUPPORTED_REVISION(major) \
+ ((major) == 0 ? 1 : -1)
+
+/* Resolve a platform specific conflict on DJGPP. GNU gettext takes
+ precedence over _conio_gettext. */
+#ifdef __DJGPP__
+# undef gettext
+#endif
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+
+/* We redirect the functions to those prefixed with "libintl_". This is
+ necessary, because some systems define gettext/textdomain/... in the C
+ library (namely, Solaris 2.4 and newer, and GNU libc 2.0 and newer).
+ If we used the unprefixed names, there would be cases where the
+ definition in the C library would override the one in the libintl.so
+ shared library. Recall that on ELF systems, the symbols are looked
+ up in the following order:
+ 1. in the executable,
+ 2. in the shared libraries specified on the link command line, in order,
+ 3. in the dependencies of the shared libraries specified on the link
+ command line,
+ 4. in the dlopen()ed shared libraries, in the order in which they were
+ dlopen()ed.
+ The definition in the C library would override the one in libintl.so if
+ either
+ * -lc is given on the link command line and -lintl isn't, or
+ * -lc is given on the link command line before -lintl, or
+ * libintl.so is a dependency of a dlopen()ed shared library but not
+ linked to the executable at link time.
+ Since Solaris gettext() behaves differently than GNU gettext(), this
+ would be unacceptable.
+
+ The redirection happens by default through macros in C, so that &gettext
+ is independent of the compilation unit, but through inline functions in
+ C++, in order not to interfere with the name mangling of class fields or
+ class methods called 'gettext'. */
+
+/* The user can define _INTL_REDIRECT_INLINE or _INTL_REDIRECT_MACROS.
+ If he doesn't, we choose the method. A third possible method is
+ _INTL_REDIRECT_ASM, supported only by GCC. */
+#if !(defined _INTL_REDIRECT_INLINE || defined _INTL_REDIRECT_MACROS)
+# if __GNUC__ >= 2 && !defined __APPLE_CC__ && !defined __MINGW32__ && !(__GNUC__ == 2 && defined _AIX) && (defined __STDC__ || defined __cplusplus)
+# define _INTL_REDIRECT_ASM
+# else
+# ifdef __cplusplus
+# define _INTL_REDIRECT_INLINE
+# else
+# define _INTL_REDIRECT_MACROS
+# endif
+# endif
+#endif
+/* Auxiliary macros. */
+#ifdef _INTL_REDIRECT_ASM
+# define _INTL_ASM(cname) __asm__ (_INTL_ASMNAME (__USER_LABEL_PREFIX__, #cname))
+# define _INTL_ASMNAME(prefix,cnamestring) _INTL_STRINGIFY (prefix) cnamestring
+# define _INTL_STRINGIFY(prefix) #prefix
+#else
+# define _INTL_ASM(cname)
+#endif
+
+/* Look up MSGID in the current default message catalog for the current
+ LC_MESSAGES locale. If not found, returns MSGID itself (the default
+ text). */
+#ifdef _INTL_REDIRECT_INLINE
+extern char *libintl_gettext (const char *__msgid);
+static inline char *gettext (const char *__msgid)
+{
+ return libintl_gettext (__msgid);
+}
+#else
+#ifdef _INTL_REDIRECT_MACROS
+# define gettext libintl_gettext
+#endif
+extern char *gettext (const char *__msgid)
+ _INTL_ASM (libintl_gettext);
+#endif
+
+/* Look up MSGID in the DOMAINNAME message catalog for the current
+ LC_MESSAGES locale. */
+#ifdef _INTL_REDIRECT_INLINE
+extern char *libintl_dgettext (const char *__domainname, const char *__msgid);
+static inline char *dgettext (const char *__domainname, const char *__msgid)
+{
+ return libintl_dgettext (__domainname, __msgid);
+}
+#else
+#ifdef _INTL_REDIRECT_MACROS
+# define dgettext libintl_dgettext
+#endif
+extern char *dgettext (const char *__domainname, const char *__msgid)
+ _INTL_ASM (libintl_dgettext);
+#endif
+
+/* Look up MSGID in the DOMAINNAME message catalog for the current CATEGORY
+ locale. */
+#ifdef _INTL_REDIRECT_INLINE
+extern char *libintl_dcgettext (const char *__domainname, const char *__msgid,
+ int __category);
+static inline char *dcgettext (const char *__domainname, const char *__msgid,
+ int __category)
+{
+ return libintl_dcgettext (__domainname, __msgid, __category);
+}
+#else
+#ifdef _INTL_REDIRECT_MACROS
+# define dcgettext libintl_dcgettext
+#endif
+extern char *dcgettext (const char *__domainname, const char *__msgid,
+ int __category)
+ _INTL_ASM (libintl_dcgettext);
+#endif
+
+
+/* Similar to `gettext' but select the plural form corresponding to the
+ number N. */
+#ifdef _INTL_REDIRECT_INLINE
+extern char *libintl_ngettext (const char *__msgid1, const char *__msgid2,
+ unsigned long int __n);
+static inline char *ngettext (const char *__msgid1, const char *__msgid2,
+ unsigned long int __n)
+{
+ return libintl_ngettext (__msgid1, __msgid2, __n);
+}
+#else
+#ifdef _INTL_REDIRECT_MACROS
+# define ngettext libintl_ngettext
+#endif
+extern char *ngettext (const char *__msgid1, const char *__msgid2,
+ unsigned long int __n)
+ _INTL_ASM (libintl_ngettext);
+#endif
+
+/* Similar to `dgettext' but select the plural form corresponding to the
+ number N. */
+#ifdef _INTL_REDIRECT_INLINE
+extern char *libintl_dngettext (const char *__domainname, const char *__msgid1,
+ const char *__msgid2, unsigned long int __n);
+static inline char *dngettext (const char *__domainname, const char *__msgid1,
+ const char *__msgid2, unsigned long int __n)
+{
+ return libintl_dngettext (__domainname, __msgid1, __msgid2, __n);
+}
+#else
+#ifdef _INTL_REDIRECT_MACROS
+# define dngettext libintl_dngettext
+#endif
+extern char *dngettext (const char *__domainname,
+ const char *__msgid1, const char *__msgid2,
+ unsigned long int __n)
+ _INTL_ASM (libintl_dngettext);
+#endif
+
+/* Similar to `dcgettext' but select the plural form corresponding to the
+ number N. */
+#ifdef _INTL_REDIRECT_INLINE
+extern char *libintl_dcngettext (const char *__domainname,
+ const char *__msgid1, const char *__msgid2,
+ unsigned long int __n, int __category);
+static inline char *dcngettext (const char *__domainname,
+ const char *__msgid1, const char *__msgid2,
+ unsigned long int __n, int __category)
+{
+ return libintl_dcngettext (__domainname, __msgid1, __msgid2, __n, __category);
+}
+#else
+#ifdef _INTL_REDIRECT_MACROS
+# define dcngettext libintl_dcngettext
+#endif
+extern char *dcngettext (const char *__domainname,
+ const char *__msgid1, const char *__msgid2,
+ unsigned long int __n, int __category)
+ _INTL_ASM (libintl_dcngettext);
+#endif
+
+
+/* Set the current default message catalog to DOMAINNAME.
+ If DOMAINNAME is null, return the current default.
+ If DOMAINNAME is "", reset to the default of "messages". */
+#ifdef _INTL_REDIRECT_INLINE
+extern char *libintl_textdomain (const char *__domainname);
+static inline char *textdomain (const char *__domainname)
+{
+ return libintl_textdomain (__domainname);
+}
+#else
+#ifdef _INTL_REDIRECT_MACROS
+# define textdomain libintl_textdomain
+#endif
+extern char *textdomain (const char *__domainname)
+ _INTL_ASM (libintl_textdomain);
+#endif
+
+/* Specify that the DOMAINNAME message catalog will be found
+ in DIRNAME rather than in the system locale data base. */
+#ifdef _INTL_REDIRECT_INLINE
+extern char *libintl_bindtextdomain (const char *__domainname,
+ const char *__dirname);
+static inline char *bindtextdomain (const char *__domainname,
+ const char *__dirname)
+{
+ return libintl_bindtextdomain (__domainname, __dirname);
+}
+#else
+#ifdef _INTL_REDIRECT_MACROS
+# define bindtextdomain libintl_bindtextdomain
+#endif
+extern char *bindtextdomain (const char *__domainname, const char *__dirname)
+ _INTL_ASM (libintl_bindtextdomain);
+#endif
+
+/* Specify the character encoding in which the messages from the
+ DOMAINNAME message catalog will be returned. */
+#ifdef _INTL_REDIRECT_INLINE
+extern char *libintl_bind_textdomain_codeset (const char *__domainname,
+ const char *__codeset);
+static inline char *bind_textdomain_codeset (const char *__domainname,
+ const char *__codeset)
+{
+ return libintl_bind_textdomain_codeset (__domainname, __codeset);
+}
+#else
+#ifdef _INTL_REDIRECT_MACROS
+# define bind_textdomain_codeset libintl_bind_textdomain_codeset
+#endif
+extern char *bind_textdomain_codeset (const char *__domainname,
+ const char *__codeset)
+ _INTL_ASM (libintl_bind_textdomain_codeset);
+#endif
+
+
+/* Support for format strings with positions in *printf(), following the
+ POSIX/XSI specification.
+ Note: These replacements for the *printf() functions are visible only
+ in source files that #include <libintl.h> or #include "gettext.h".
+ Packages that use *printf() in source files that don't refer to _()
+ or gettext() but for which the format string could be the return value
+ of _() or gettext() need to add this #include. Oh well. */
+
+#if !@HAVE_POSIX_PRINTF@
+
+#include <stdio.h>
+#include <stddef.h>
+
+/* Get va_list. */
+#if __STDC__ || defined __cplusplus || defined _MSC_VER
+# include <stdarg.h>
+#else
+# include <varargs.h>
+#endif
+
+#undef fprintf
+#define fprintf libintl_fprintf
+extern int fprintf (FILE *, const char *, ...);
+#undef vfprintf
+#define vfprintf libintl_vfprintf
+extern int vfprintf (FILE *, const char *, va_list);
+
+#undef printf
+#define printf libintl_printf
+extern int printf (const char *, ...);
+#undef vprintf
+#define vprintf libintl_vprintf
+extern int vprintf (const char *, va_list);
+
+#undef sprintf
+#define sprintf libintl_sprintf
+extern int sprintf (char *, const char *, ...);
+#undef vsprintf
+#define vsprintf libintl_vsprintf
+extern int vsprintf (char *, const char *, va_list);
+
+#if @HAVE_SNPRINTF@
+
+#undef snprintf
+#define snprintf libintl_snprintf
+extern int snprintf (char *, size_t, const char *, ...);
+#undef vsnprintf
+#define vsnprintf libintl_vsnprintf
+extern int vsnprintf (char *, size_t, const char *, va_list);
+
+#endif
+
+#if @HAVE_ASPRINTF@
+
+#undef asprintf
+#define asprintf libintl_asprintf
+extern int asprintf (char **, const char *, ...);
+#undef vasprintf
+#define vasprintf libintl_vasprintf
+extern int vasprintf (char **, const char *, va_list);
+
+#endif
+
+#if @HAVE_WPRINTF@
+
+#undef fwprintf
+#define fwprintf libintl_fwprintf
+extern int fwprintf (FILE *, const wchar_t *, ...);
+#undef vfwprintf
+#define vfwprintf libintl_vfwprintf
+extern int vfwprintf (FILE *, const wchar_t *, va_list);
+
+#undef wprintf
+#define wprintf libintl_wprintf
+extern int wprintf (const wchar_t *, ...);
+#undef vwprintf
+#define vwprintf libintl_vwprintf
+extern int vwprintf (const wchar_t *, va_list);
+
+#undef swprintf
+#define swprintf libintl_swprintf
+extern int swprintf (wchar_t *, size_t, const wchar_t *, ...);
+#undef vswprintf
+#define vswprintf libintl_vswprintf
+extern int vswprintf (wchar_t *, size_t, const wchar_t *, va_list);
+
+#endif
+
+#endif
+
+
+/* Support for relocatable packages. */
+
+/* Sets the original and the current installation prefix of the package.
+ Relocation simply replaces a pathname starting with the original prefix
+ by the corresponding pathname with the current prefix instead. Both
+ prefixes should be directory names without trailing slash (i.e. use ""
+ instead of "/"). */
+#define libintl_set_relocation_prefix libintl_set_relocation_prefix
+extern void
+ libintl_set_relocation_prefix (const char *orig_prefix,
+ const char *curr_prefix);
+
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif /* libintl.h */
diff --git a/macros/texinfo/contrib/texinfo-hu/texinfo/intl/loadinfo.h b/macros/texinfo/contrib/texinfo-hu/texinfo/intl/loadinfo.h
new file mode 100644
index 0000000000..65e5ebd1f8
--- /dev/null
+++ b/macros/texinfo/contrib/texinfo-hu/texinfo/intl/loadinfo.h
@@ -0,0 +1,145 @@
+/* Copyright (C) 1996-1999, 2000-2003 Free Software Foundation, Inc.
+ This file is part of the GNU C Library.
+ Contributed by Ulrich Drepper <drepper@cygnus.com>, 1996.
+
+ This program is free software; you can redistribute it and/or modify it
+ under the terms of the GNU Library General Public License as published
+ 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
+ Library General Public License for more details.
+
+ You should have received a copy of the GNU Library General Public
+ License along with this program; if not, write to the Free Software
+ Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307,
+ USA. */
+
+#ifndef _LOADINFO_H
+#define _LOADINFO_H 1
+
+/* Declarations of locale dependent catalog lookup functions.
+ Implemented in
+
+ localealias.c Possibly replace a locale name by another.
+ explodename.c Split a locale name into its various fields.
+ l10nflist.c Generate a list of filenames of possible message catalogs.
+ finddomain.c Find and open the relevant message catalogs.
+
+ The main function _nl_find_domain() in finddomain.c is declared
+ in gettextP.h.
+ */
+
+#ifndef internal_function
+# define internal_function
+#endif
+
+/* Tell the compiler when a conditional or integer expression is
+ almost always true or almost always false. */
+#ifndef HAVE_BUILTIN_EXPECT
+# define __builtin_expect(expr, val) (expr)
+#endif
+
+/* Separator in PATH like lists of pathnames. */
+#if defined _WIN32 || defined __WIN32__ || defined __EMX__ || defined __DJGPP__
+ /* Win32, OS/2, DOS */
+# define PATH_SEPARATOR ';'
+#else
+ /* Unix */
+# define PATH_SEPARATOR ':'
+#endif
+
+/* Encoding of locale name parts. */
+#define CEN_REVISION 1
+#define CEN_SPONSOR 2
+#define CEN_SPECIAL 4
+#define XPG_NORM_CODESET 8
+#define XPG_CODESET 16
+#define TERRITORY 32
+#define CEN_AUDIENCE 64
+#define XPG_MODIFIER 128
+
+#define CEN_SPECIFIC (CEN_REVISION|CEN_SPONSOR|CEN_SPECIAL|CEN_AUDIENCE)
+#define XPG_SPECIFIC (XPG_CODESET|XPG_NORM_CODESET|XPG_MODIFIER)
+
+
+struct loaded_l10nfile
+{
+ const char *filename;
+ int decided;
+
+ const void *data;
+
+ struct loaded_l10nfile *next;
+ struct loaded_l10nfile *successor[1];
+};
+
+
+/* Normalize codeset name. There is no standard for the codeset
+ names. Normalization allows the user to use any of the common
+ names. The return value is dynamically allocated and has to be
+ freed by the caller. */
+extern const char *_nl_normalize_codeset (const char *codeset,
+ size_t name_len);
+
+/* Lookup a locale dependent file.
+ *L10NFILE_LIST denotes a pool of lookup results of locale dependent
+ files of the same kind, sorted in decreasing order of ->filename.
+ DIRLIST and DIRLIST_LEN are an argz list of directories in which to
+ look, containing at least one directory (i.e. DIRLIST_LEN > 0).
+ MASK, LANGUAGE, TERRITORY, CODESET, NORMALIZED_CODESET, MODIFIER,
+ SPECIAL, SPONSOR, REVISION are the pieces of the locale name, as
+ produced by _nl_explode_name(). FILENAME is the filename suffix.
+ The return value is the lookup result, either found in *L10NFILE_LIST,
+ or - if DO_ALLOCATE is nonzero - freshly allocated, or possibly NULL.
+ If the return value is non-NULL, it is added to *L10NFILE_LIST, and
+ its ->next field denotes the chaining inside *L10NFILE_LIST, and
+ furthermore its ->successor[] field contains a list of other lookup
+ results from which this lookup result inherits. */
+extern struct loaded_l10nfile *
+_nl_make_l10nflist (struct loaded_l10nfile **l10nfile_list,
+ const char *dirlist, size_t dirlist_len, int mask,
+ const char *language, const char *territory,
+ const char *codeset, const char *normalized_codeset,
+ const char *modifier, const char *special,
+ const char *sponsor, const char *revision,
+ const char *filename, int do_allocate);
+
+/* Lookup the real locale name for a locale alias NAME, or NULL if
+ NAME is not a locale alias (but possibly a real locale name).
+ The return value is statically allocated and must not be freed. */
+extern const char *_nl_expand_alias (const char *name);
+
+/* Split a locale name NAME into its pieces: language, modifier,
+ territory, codeset, special, sponsor, revision.
+ NAME gets destructively modified: NUL bytes are inserted here and
+ there. *LANGUAGE gets assigned NAME. Each of *MODIFIER, *TERRITORY,
+ *CODESET, *SPECIAL, *SPONSOR, *REVISION gets assigned either a
+ pointer into the old NAME string, or NULL. *NORMALIZED_CODESET
+ gets assigned the expanded *CODESET, if it is different from *CODESET;
+ this one is dynamically allocated and has to be freed by the caller.
+ The return value is a bitmask, where each bit corresponds to one
+ filled-in value:
+ XPG_MODIFIER, CEN_AUDIENCE for *MODIFIER,
+ TERRITORY for *TERRITORY,
+ XPG_CODESET for *CODESET,
+ XPG_NORM_CODESET for *NORMALIZED_CODESET,
+ CEN_SPECIAL for *SPECIAL,
+ CEN_SPONSOR for *SPONSOR,
+ CEN_REVISION for *REVISION.
+ */
+extern int _nl_explode_name (char *name, const char **language,
+ const char **modifier, const char **territory,
+ const char **codeset,
+ const char **normalized_codeset,
+ const char **special, const char **sponsor,
+ const char **revision);
+
+/* Split a locale name NAME into a leading language part and all the
+ rest. Return a pointer to the first character after the language,
+ i.e. to the first byte of the rest. */
+extern char *_nl_find_language (const char *name);
+
+#endif /* loadinfo.h */
diff --git a/macros/texinfo/contrib/texinfo-hu/texinfo/intl/loadmsgcat.c b/macros/texinfo/contrib/texinfo-hu/texinfo/intl/loadmsgcat.c
new file mode 100644
index 0000000000..99c51b4c5c
--- /dev/null
+++ b/macros/texinfo/contrib/texinfo-hu/texinfo/intl/loadmsgcat.c
@@ -0,0 +1,1420 @@
+/* Load needed message catalogs.
+ Copyright (C) 1995-1999, 2000-2004 Free Software Foundation, Inc.
+
+ This program is free software; you can redistribute it and/or modify it
+ under the terms of the GNU Library General Public License as published
+ 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
+ Library General Public License for more details.
+
+ You should have received a copy of the GNU Library General Public
+ License along with this program; if not, write to the Free Software
+ Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307,
+ USA. */
+
+/* Tell glibc's <string.h> to provide a prototype for mempcpy().
+ This must come before <config.h> because <config.h> may include
+ <features.h>, and once <features.h> has been included, it's too late. */
+#ifndef _GNU_SOURCE
+# define _GNU_SOURCE 1
+#endif
+
+#ifdef HAVE_CONFIG_H
+# include <config.h>
+#endif
+
+#include <ctype.h>
+#include <errno.h>
+#include <fcntl.h>
+#include <sys/types.h>
+#include <sys/stat.h>
+
+#ifdef __GNUC__
+# undef alloca
+# define alloca __builtin_alloca
+# define HAVE_ALLOCA 1
+#else
+# ifdef _MSC_VER
+# include <malloc.h>
+# define alloca _alloca
+# else
+# if defined HAVE_ALLOCA_H || defined _LIBC
+# include <alloca.h>
+# else
+# ifdef _AIX
+ #pragma alloca
+# else
+# ifndef alloca
+char *alloca ();
+# endif
+# endif
+# endif
+# endif
+#endif
+
+#include <stdlib.h>
+#include <string.h>
+
+#if defined HAVE_UNISTD_H || defined _LIBC
+# include <unistd.h>
+#endif
+
+#ifdef _LIBC
+# include <langinfo.h>
+# include <locale.h>
+#endif
+
+#if (defined HAVE_MMAP && defined HAVE_MUNMAP && !defined DISALLOW_MMAP) \
+ || (defined _LIBC && defined _POSIX_MAPPED_FILES)
+# include <sys/mman.h>
+# undef HAVE_MMAP
+# define HAVE_MMAP 1
+#else
+# undef HAVE_MMAP
+#endif
+
+#if defined HAVE_STDINT_H_WITH_UINTMAX || defined _LIBC
+# include <stdint.h>
+#endif
+#if defined HAVE_INTTYPES_H || defined _LIBC
+# include <inttypes.h>
+#endif
+
+#include "gmo.h"
+#include "gettextP.h"
+#include "hash-string.h"
+#include "plural-exp.h"
+
+#ifdef _LIBC
+# include "../locale/localeinfo.h"
+#endif
+
+/* Provide fallback values for macros that ought to be defined in <inttypes.h>.
+ Note that our fallback values need not be literal strings, because we don't
+ use them with preprocessor string concatenation. */
+#if !defined PRId8 || PRI_MACROS_BROKEN
+# undef PRId8
+# define PRId8 "d"
+#endif
+#if !defined PRIi8 || PRI_MACROS_BROKEN
+# undef PRIi8
+# define PRIi8 "i"
+#endif
+#if !defined PRIo8 || PRI_MACROS_BROKEN
+# undef PRIo8
+# define PRIo8 "o"
+#endif
+#if !defined PRIu8 || PRI_MACROS_BROKEN
+# undef PRIu8
+# define PRIu8 "u"
+#endif
+#if !defined PRIx8 || PRI_MACROS_BROKEN
+# undef PRIx8
+# define PRIx8 "x"
+#endif
+#if !defined PRIX8 || PRI_MACROS_BROKEN
+# undef PRIX8
+# define PRIX8 "X"
+#endif
+#if !defined PRId16 || PRI_MACROS_BROKEN
+# undef PRId16
+# define PRId16 "d"
+#endif
+#if !defined PRIi16 || PRI_MACROS_BROKEN
+# undef PRIi16
+# define PRIi16 "i"
+#endif
+#if !defined PRIo16 || PRI_MACROS_BROKEN
+# undef PRIo16
+# define PRIo16 "o"
+#endif
+#if !defined PRIu16 || PRI_MACROS_BROKEN
+# undef PRIu16
+# define PRIu16 "u"
+#endif
+#if !defined PRIx16 || PRI_MACROS_BROKEN
+# undef PRIx16
+# define PRIx16 "x"
+#endif
+#if !defined PRIX16 || PRI_MACROS_BROKEN
+# undef PRIX16
+# define PRIX16 "X"
+#endif
+#if !defined PRId32 || PRI_MACROS_BROKEN
+# undef PRId32
+# define PRId32 "d"
+#endif
+#if !defined PRIi32 || PRI_MACROS_BROKEN
+# undef PRIi32
+# define PRIi32 "i"
+#endif
+#if !defined PRIo32 || PRI_MACROS_BROKEN
+# undef PRIo32
+# define PRIo32 "o"
+#endif
+#if !defined PRIu32 || PRI_MACROS_BROKEN
+# undef PRIu32
+# define PRIu32 "u"
+#endif
+#if !defined PRIx32 || PRI_MACROS_BROKEN
+# undef PRIx32
+# define PRIx32 "x"
+#endif
+#if !defined PRIX32 || PRI_MACROS_BROKEN
+# undef PRIX32
+# define PRIX32 "X"
+#endif
+#if !defined PRId64 || PRI_MACROS_BROKEN
+# undef PRId64
+# define PRId64 (sizeof (long) == 8 ? "ld" : "lld")
+#endif
+#if !defined PRIi64 || PRI_MACROS_BROKEN
+# undef PRIi64
+# define PRIi64 (sizeof (long) == 8 ? "li" : "lli")
+#endif
+#if !defined PRIo64 || PRI_MACROS_BROKEN
+# undef PRIo64
+# define PRIo64 (sizeof (long) == 8 ? "lo" : "llo")
+#endif
+#if !defined PRIu64 || PRI_MACROS_BROKEN
+# undef PRIu64
+# define PRIu64 (sizeof (long) == 8 ? "lu" : "llu")
+#endif
+#if !defined PRIx64 || PRI_MACROS_BROKEN
+# undef PRIx64
+# define PRIx64 (sizeof (long) == 8 ? "lx" : "llx")
+#endif
+#if !defined PRIX64 || PRI_MACROS_BROKEN
+# undef PRIX64
+# define PRIX64 (sizeof (long) == 8 ? "lX" : "llX")
+#endif
+#if !defined PRIdLEAST8 || PRI_MACROS_BROKEN
+# undef PRIdLEAST8
+# define PRIdLEAST8 "d"
+#endif
+#if !defined PRIiLEAST8 || PRI_MACROS_BROKEN
+# undef PRIiLEAST8
+# define PRIiLEAST8 "i"
+#endif
+#if !defined PRIoLEAST8 || PRI_MACROS_BROKEN
+# undef PRIoLEAST8
+# define PRIoLEAST8 "o"
+#endif
+#if !defined PRIuLEAST8 || PRI_MACROS_BROKEN
+# undef PRIuLEAST8
+# define PRIuLEAST8 "u"
+#endif
+#if !defined PRIxLEAST8 || PRI_MACROS_BROKEN
+# undef PRIxLEAST8
+# define PRIxLEAST8 "x"
+#endif
+#if !defined PRIXLEAST8 || PRI_MACROS_BROKEN
+# undef PRIXLEAST8
+# define PRIXLEAST8 "X"
+#endif
+#if !defined PRIdLEAST16 || PRI_MACROS_BROKEN
+# undef PRIdLEAST16
+# define PRIdLEAST16 "d"
+#endif
+#if !defined PRIiLEAST16 || PRI_MACROS_BROKEN
+# undef PRIiLEAST16
+# define PRIiLEAST16 "i"
+#endif
+#if !defined PRIoLEAST16 || PRI_MACROS_BROKEN
+# undef PRIoLEAST16
+# define PRIoLEAST16 "o"
+#endif
+#if !defined PRIuLEAST16 || PRI_MACROS_BROKEN
+# undef PRIuLEAST16
+# define PRIuLEAST16 "u"
+#endif
+#if !defined PRIxLEAST16 || PRI_MACROS_BROKEN
+# undef PRIxLEAST16
+# define PRIxLEAST16 "x"
+#endif
+#if !defined PRIXLEAST16 || PRI_MACROS_BROKEN
+# undef PRIXLEAST16
+# define PRIXLEAST16 "X"
+#endif
+#if !defined PRIdLEAST32 || PRI_MACROS_BROKEN
+# undef PRIdLEAST32
+# define PRIdLEAST32 "d"
+#endif
+#if !defined PRIiLEAST32 || PRI_MACROS_BROKEN
+# undef PRIiLEAST32
+# define PRIiLEAST32 "i"
+#endif
+#if !defined PRIoLEAST32 || PRI_MACROS_BROKEN
+# undef PRIoLEAST32
+# define PRIoLEAST32 "o"
+#endif
+#if !defined PRIuLEAST32 || PRI_MACROS_BROKEN
+# undef PRIuLEAST32
+# define PRIuLEAST32 "u"
+#endif
+#if !defined PRIxLEAST32 || PRI_MACROS_BROKEN
+# undef PRIxLEAST32
+# define PRIxLEAST32 "x"
+#endif
+#if !defined PRIXLEAST32 || PRI_MACROS_BROKEN
+# undef PRIXLEAST32
+# define PRIXLEAST32 "X"
+#endif
+#if !defined PRIdLEAST64 || PRI_MACROS_BROKEN
+# undef PRIdLEAST64
+# define PRIdLEAST64 PRId64
+#endif
+#if !defined PRIiLEAST64 || PRI_MACROS_BROKEN
+# undef PRIiLEAST64
+# define PRIiLEAST64 PRIi64
+#endif
+#if !defined PRIoLEAST64 || PRI_MACROS_BROKEN
+# undef PRIoLEAST64
+# define PRIoLEAST64 PRIo64
+#endif
+#if !defined PRIuLEAST64 || PRI_MACROS_BROKEN
+# undef PRIuLEAST64
+# define PRIuLEAST64 PRIu64
+#endif
+#if !defined PRIxLEAST64 || PRI_MACROS_BROKEN
+# undef PRIxLEAST64
+# define PRIxLEAST64 PRIx64
+#endif
+#if !defined PRIXLEAST64 || PRI_MACROS_BROKEN
+# undef PRIXLEAST64
+# define PRIXLEAST64 PRIX64
+#endif
+#if !defined PRIdFAST8 || PRI_MACROS_BROKEN
+# undef PRIdFAST8
+# define PRIdFAST8 "d"
+#endif
+#if !defined PRIiFAST8 || PRI_MACROS_BROKEN
+# undef PRIiFAST8
+# define PRIiFAST8 "i"
+#endif
+#if !defined PRIoFAST8 || PRI_MACROS_BROKEN
+# undef PRIoFAST8
+# define PRIoFAST8 "o"
+#endif
+#if !defined PRIuFAST8 || PRI_MACROS_BROKEN
+# undef PRIuFAST8
+# define PRIuFAST8 "u"
+#endif
+#if !defined PRIxFAST8 || PRI_MACROS_BROKEN
+# undef PRIxFAST8
+# define PRIxFAST8 "x"
+#endif
+#if !defined PRIXFAST8 || PRI_MACROS_BROKEN
+# undef PRIXFAST8
+# define PRIXFAST8 "X"
+#endif
+#if !defined PRIdFAST16 || PRI_MACROS_BROKEN
+# undef PRIdFAST16
+# define PRIdFAST16 "d"
+#endif
+#if !defined PRIiFAST16 || PRI_MACROS_BROKEN
+# undef PRIiFAST16
+# define PRIiFAST16 "i"
+#endif
+#if !defined PRIoFAST16 || PRI_MACROS_BROKEN
+# undef PRIoFAST16
+# define PRIoFAST16 "o"
+#endif
+#if !defined PRIuFAST16 || PRI_MACROS_BROKEN
+# undef PRIuFAST16
+# define PRIuFAST16 "u"
+#endif
+#if !defined PRIxFAST16 || PRI_MACROS_BROKEN
+# undef PRIxFAST16
+# define PRIxFAST16 "x"
+#endif
+#if !defined PRIXFAST16 || PRI_MACROS_BROKEN
+# undef PRIXFAST16
+# define PRIXFAST16 "X"
+#endif
+#if !defined PRIdFAST32 || PRI_MACROS_BROKEN
+# undef PRIdFAST32
+# define PRIdFAST32 "d"
+#endif
+#if !defined PRIiFAST32 || PRI_MACROS_BROKEN
+# undef PRIiFAST32
+# define PRIiFAST32 "i"
+#endif
+#if !defined PRIoFAST32 || PRI_MACROS_BROKEN
+# undef PRIoFAST32
+# define PRIoFAST32 "o"
+#endif
+#if !defined PRIuFAST32 || PRI_MACROS_BROKEN
+# undef PRIuFAST32
+# define PRIuFAST32 "u"
+#endif
+#if !defined PRIxFAST32 || PRI_MACROS_BROKEN
+# undef PRIxFAST32
+# define PRIxFAST32 "x"
+#endif
+#if !defined PRIXFAST32 || PRI_MACROS_BROKEN
+# undef PRIXFAST32
+# define PRIXFAST32 "X"
+#endif
+#if !defined PRIdFAST64 || PRI_MACROS_BROKEN
+# undef PRIdFAST64
+# define PRIdFAST64 PRId64
+#endif
+#if !defined PRIiFAST64 || PRI_MACROS_BROKEN
+# undef PRIiFAST64
+# define PRIiFAST64 PRIi64
+#endif
+#if !defined PRIoFAST64 || PRI_MACROS_BROKEN
+# undef PRIoFAST64
+# define PRIoFAST64 PRIo64
+#endif
+#if !defined PRIuFAST64 || PRI_MACROS_BROKEN
+# undef PRIuFAST64
+# define PRIuFAST64 PRIu64
+#endif
+#if !defined PRIxFAST64 || PRI_MACROS_BROKEN
+# undef PRIxFAST64
+# define PRIxFAST64 PRIx64
+#endif
+#if !defined PRIXFAST64 || PRI_MACROS_BROKEN
+# undef PRIXFAST64
+# define PRIXFAST64 PRIX64
+#endif
+#if !defined PRIdMAX || PRI_MACROS_BROKEN
+# undef PRIdMAX
+# define PRIdMAX (sizeof (uintmax_t) == sizeof (long) ? "ld" : "lld")
+#endif
+#if !defined PRIiMAX || PRI_MACROS_BROKEN
+# undef PRIiMAX
+# define PRIiMAX (sizeof (uintmax_t) == sizeof (long) ? "li" : "lli")
+#endif
+#if !defined PRIoMAX || PRI_MACROS_BROKEN
+# undef PRIoMAX
+# define PRIoMAX (sizeof (uintmax_t) == sizeof (long) ? "lo" : "llo")
+#endif
+#if !defined PRIuMAX || PRI_MACROS_BROKEN
+# undef PRIuMAX
+# define PRIuMAX (sizeof (uintmax_t) == sizeof (long) ? "lu" : "llu")
+#endif
+#if !defined PRIxMAX || PRI_MACROS_BROKEN
+# undef PRIxMAX
+# define PRIxMAX (sizeof (uintmax_t) == sizeof (long) ? "lx" : "llx")
+#endif
+#if !defined PRIXMAX || PRI_MACROS_BROKEN
+# undef PRIXMAX
+# define PRIXMAX (sizeof (uintmax_t) == sizeof (long) ? "lX" : "llX")
+#endif
+#if !defined PRIdPTR || PRI_MACROS_BROKEN
+# undef PRIdPTR
+# define PRIdPTR \
+ (sizeof (void *) == sizeof (long) ? "ld" : \
+ sizeof (void *) == sizeof (int) ? "d" : \
+ "lld")
+#endif
+#if !defined PRIiPTR || PRI_MACROS_BROKEN
+# undef PRIiPTR
+# define PRIiPTR \
+ (sizeof (void *) == sizeof (long) ? "li" : \
+ sizeof (void *) == sizeof (int) ? "i" : \
+ "lli")
+#endif
+#if !defined PRIoPTR || PRI_MACROS_BROKEN
+# undef PRIoPTR
+# define PRIoPTR \
+ (sizeof (void *) == sizeof (long) ? "lo" : \
+ sizeof (void *) == sizeof (int) ? "o" : \
+ "llo")
+#endif
+#if !defined PRIuPTR || PRI_MACROS_BROKEN
+# undef PRIuPTR
+# define PRIuPTR \
+ (sizeof (void *) == sizeof (long) ? "lu" : \
+ sizeof (void *) == sizeof (int) ? "u" : \
+ "llu")
+#endif
+#if !defined PRIxPTR || PRI_MACROS_BROKEN
+# undef PRIxPTR
+# define PRIxPTR \
+ (sizeof (void *) == sizeof (long) ? "lx" : \
+ sizeof (void *) == sizeof (int) ? "x" : \
+ "llx")
+#endif
+#if !defined PRIXPTR || PRI_MACROS_BROKEN
+# undef PRIXPTR
+# define PRIXPTR \
+ (sizeof (void *) == sizeof (long) ? "lX" : \
+ sizeof (void *) == sizeof (int) ? "X" : \
+ "llX")
+#endif
+
+/* @@ end of prolog @@ */
+
+#ifdef _LIBC
+/* Rename the non ISO C functions. This is required by the standard
+ because some ISO C functions will require linking with this object
+ file and the name space must not be polluted. */
+# define open __open
+# define close __close
+# define read __read
+# define mmap __mmap
+# define munmap __munmap
+#endif
+
+/* For those losing systems which don't have `alloca' we have to add
+ some additional code emulating it. */
+#ifdef HAVE_ALLOCA
+# define freea(p) /* nothing */
+#else
+# define alloca(n) malloc (n)
+# define freea(p) free (p)
+#endif
+
+/* For systems that distinguish between text and binary I/O.
+ O_BINARY is usually declared in <fcntl.h>. */
+#if !defined O_BINARY && defined _O_BINARY
+ /* For MSC-compatible compilers. */
+# define O_BINARY _O_BINARY
+# define O_TEXT _O_TEXT
+#endif
+#ifdef __BEOS__
+ /* BeOS 5 has O_BINARY and O_TEXT, but they have no effect. */
+# undef O_BINARY
+# undef O_TEXT
+#endif
+/* On reasonable systems, binary I/O is the default. */
+#ifndef O_BINARY
+# define O_BINARY 0
+#endif
+
+
+/* We need a sign, whether a new catalog was loaded, which can be associated
+ with all translations. This is important if the translations are
+ cached by one of GCC's features. */
+int _nl_msg_cat_cntr;
+
+
+/* Expand a system dependent string segment. Return NULL if unsupported. */
+static const char *
+get_sysdep_segment_value (const char *name)
+{
+ /* Test for an ISO C 99 section 7.8.1 format string directive.
+ Syntax:
+ P R I { d | i | o | u | x | X }
+ { { | LEAST | FAST } { 8 | 16 | 32 | 64 } | MAX | PTR } */
+ /* We don't use a table of 14 times 6 'const char *' strings here, because
+ data relocations cost startup time. */
+ if (name[0] == 'P' && name[1] == 'R' && name[2] == 'I')
+ {
+ if (name[3] == 'd' || name[3] == 'i' || name[3] == 'o' || name[3] == 'u'
+ || name[3] == 'x' || name[3] == 'X')
+ {
+ if (name[4] == '8' && name[5] == '\0')
+ {
+ if (name[3] == 'd')
+ return PRId8;
+ if (name[3] == 'i')
+ return PRIi8;
+ if (name[3] == 'o')
+ return PRIo8;
+ if (name[3] == 'u')
+ return PRIu8;
+ if (name[3] == 'x')
+ return PRIx8;
+ if (name[3] == 'X')
+ return PRIX8;
+ abort ();
+ }
+ if (name[4] == '1' && name[5] == '6' && name[6] == '\0')
+ {
+ if (name[3] == 'd')
+ return PRId16;
+ if (name[3] == 'i')
+ return PRIi16;
+ if (name[3] == 'o')
+ return PRIo16;
+ if (name[3] == 'u')
+ return PRIu16;
+ if (name[3] == 'x')
+ return PRIx16;
+ if (name[3] == 'X')
+ return PRIX16;
+ abort ();
+ }
+ if (name[4] == '3' && name[5] == '2' && name[6] == '\0')
+ {
+ if (name[3] == 'd')
+ return PRId32;
+ if (name[3] == 'i')
+ return PRIi32;
+ if (name[3] == 'o')
+ return PRIo32;
+ if (name[3] == 'u')
+ return PRIu32;
+ if (name[3] == 'x')
+ return PRIx32;
+ if (name[3] == 'X')
+ return PRIX32;
+ abort ();
+ }
+ if (name[4] == '6' && name[5] == '4' && name[6] == '\0')
+ {
+ if (name[3] == 'd')
+ return PRId64;
+ if (name[3] == 'i')
+ return PRIi64;
+ if (name[3] == 'o')
+ return PRIo64;
+ if (name[3] == 'u')
+ return PRIu64;
+ if (name[3] == 'x')
+ return PRIx64;
+ if (name[3] == 'X')
+ return PRIX64;
+ abort ();
+ }
+ if (name[4] == 'L' && name[5] == 'E' && name[6] == 'A'
+ && name[7] == 'S' && name[8] == 'T')
+ {
+ if (name[9] == '8' && name[10] == '\0')
+ {
+ if (name[3] == 'd')
+ return PRIdLEAST8;
+ if (name[3] == 'i')
+ return PRIiLEAST8;
+ if (name[3] == 'o')
+ return PRIoLEAST8;
+ if (name[3] == 'u')
+ return PRIuLEAST8;
+ if (name[3] == 'x')
+ return PRIxLEAST8;
+ if (name[3] == 'X')
+ return PRIXLEAST8;
+ abort ();
+ }
+ if (name[9] == '1' && name[10] == '6' && name[11] == '\0')
+ {
+ if (name[3] == 'd')
+ return PRIdLEAST16;
+ if (name[3] == 'i')
+ return PRIiLEAST16;
+ if (name[3] == 'o')
+ return PRIoLEAST16;
+ if (name[3] == 'u')
+ return PRIuLEAST16;
+ if (name[3] == 'x')
+ return PRIxLEAST16;
+ if (name[3] == 'X')
+ return PRIXLEAST16;
+ abort ();
+ }
+ if (name[9] == '3' && name[10] == '2' && name[11] == '\0')
+ {
+ if (name[3] == 'd')
+ return PRIdLEAST32;
+ if (name[3] == 'i')
+ return PRIiLEAST32;
+ if (name[3] == 'o')
+ return PRIoLEAST32;
+ if (name[3] == 'u')
+ return PRIuLEAST32;
+ if (name[3] == 'x')
+ return PRIxLEAST32;
+ if (name[3] == 'X')
+ return PRIXLEAST32;
+ abort ();
+ }
+ if (name[9] == '6' && name[10] == '4' && name[11] == '\0')
+ {
+ if (name[3] == 'd')
+ return PRIdLEAST64;
+ if (name[3] == 'i')
+ return PRIiLEAST64;
+ if (name[3] == 'o')
+ return PRIoLEAST64;
+ if (name[3] == 'u')
+ return PRIuLEAST64;
+ if (name[3] == 'x')
+ return PRIxLEAST64;
+ if (name[3] == 'X')
+ return PRIXLEAST64;
+ abort ();
+ }
+ }
+ if (name[4] == 'F' && name[5] == 'A' && name[6] == 'S'
+ && name[7] == 'T')
+ {
+ if (name[8] == '8' && name[9] == '\0')
+ {
+ if (name[3] == 'd')
+ return PRIdFAST8;
+ if (name[3] == 'i')
+ return PRIiFAST8;
+ if (name[3] == 'o')
+ return PRIoFAST8;
+ if (name[3] == 'u')
+ return PRIuFAST8;
+ if (name[3] == 'x')
+ return PRIxFAST8;
+ if (name[3] == 'X')
+ return PRIXFAST8;
+ abort ();
+ }
+ if (name[8] == '1' && name[9] == '6' && name[10] == '\0')
+ {
+ if (name[3] == 'd')
+ return PRIdFAST16;
+ if (name[3] == 'i')
+ return PRIiFAST16;
+ if (name[3] == 'o')
+ return PRIoFAST16;
+ if (name[3] == 'u')
+ return PRIuFAST16;
+ if (name[3] == 'x')
+ return PRIxFAST16;
+ if (name[3] == 'X')
+ return PRIXFAST16;
+ abort ();
+ }
+ if (name[8] == '3' && name[9] == '2' && name[10] == '\0')
+ {
+ if (name[3] == 'd')
+ return PRIdFAST32;
+ if (name[3] == 'i')
+ return PRIiFAST32;
+ if (name[3] == 'o')
+ return PRIoFAST32;
+ if (name[3] == 'u')
+ return PRIuFAST32;
+ if (name[3] == 'x')
+ return PRIxFAST32;
+ if (name[3] == 'X')
+ return PRIXFAST32;
+ abort ();
+ }
+ if (name[8] == '6' && name[9] == '4' && name[10] == '\0')
+ {
+ if (name[3] == 'd')
+ return PRIdFAST64;
+ if (name[3] == 'i')
+ return PRIiFAST64;
+ if (name[3] == 'o')
+ return PRIoFAST64;
+ if (name[3] == 'u')
+ return PRIuFAST64;
+ if (name[3] == 'x')
+ return PRIxFAST64;
+ if (name[3] == 'X')
+ return PRIXFAST64;
+ abort ();
+ }
+ }
+ if (name[4] == 'M' && name[5] == 'A' && name[6] == 'X'
+ && name[7] == '\0')
+ {
+ if (name[3] == 'd')
+ return PRIdMAX;
+ if (name[3] == 'i')
+ return PRIiMAX;
+ if (name[3] == 'o')
+ return PRIoMAX;
+ if (name[3] == 'u')
+ return PRIuMAX;
+ if (name[3] == 'x')
+ return PRIxMAX;
+ if (name[3] == 'X')
+ return PRIXMAX;
+ abort ();
+ }
+ if (name[4] == 'P' && name[5] == 'T' && name[6] == 'R'
+ && name[7] == '\0')
+ {
+ if (name[3] == 'd')
+ return PRIdPTR;
+ if (name[3] == 'i')
+ return PRIiPTR;
+ if (name[3] == 'o')
+ return PRIoPTR;
+ if (name[3] == 'u')
+ return PRIuPTR;
+ if (name[3] == 'x')
+ return PRIxPTR;
+ if (name[3] == 'X')
+ return PRIXPTR;
+ abort ();
+ }
+ }
+ }
+ /* Test for a glibc specific printf() format directive flag. */
+ if (name[0] == 'I' && name[1] == '\0')
+ {
+#if defined _LIBC || __GLIBC__ > 2 || (__GLIBC__ == 2 && __GLIBC_MINOR__ >= 2)
+ /* The 'I' flag, in numeric format directives, replaces ASCII digits
+ with the 'outdigits' defined in the LC_CTYPE locale facet. This is
+ used for Farsi (Persian) and maybe Arabic. */
+ return "I";
+#else
+ return "";
+#endif
+ }
+ /* Other system dependent strings are not valid. */
+ return NULL;
+}
+
+/* Initialize the codeset dependent parts of an opened message catalog.
+ Return the header entry. */
+const char *
+internal_function
+_nl_init_domain_conv (struct loaded_l10nfile *domain_file,
+ struct loaded_domain *domain,
+ struct binding *domainbinding)
+{
+ /* Find out about the character set the file is encoded with.
+ This can be found (in textual form) in the entry "". If this
+ entry does not exist or if this does not contain the `charset='
+ information, we will assume the charset matches the one the
+ current locale and we don't have to perform any conversion. */
+ char *nullentry;
+ size_t nullentrylen;
+
+ /* Preinitialize fields, to avoid recursion during _nl_find_msg. */
+ domain->codeset_cntr =
+ (domainbinding != NULL ? domainbinding->codeset_cntr : 0);
+#ifdef _LIBC
+ domain->conv = (__gconv_t) -1;
+#else
+# if HAVE_ICONV
+ domain->conv = (iconv_t) -1;
+# endif
+#endif
+ domain->conv_tab = NULL;
+
+ /* Get the header entry. */
+ nullentry = _nl_find_msg (domain_file, domainbinding, "", &nullentrylen);
+
+ if (nullentry != NULL)
+ {
+#if defined _LIBC || HAVE_ICONV
+ const char *charsetstr;
+
+ charsetstr = strstr (nullentry, "charset=");
+ if (charsetstr != NULL)
+ {
+ size_t len;
+ char *charset;
+ const char *outcharset;
+
+ charsetstr += strlen ("charset=");
+ len = strcspn (charsetstr, " \t\n");
+
+ charset = (char *) alloca (len + 1);
+# if defined _LIBC || HAVE_MEMPCPY
+ *((char *) mempcpy (charset, charsetstr, len)) = '\0';
+# else
+ memcpy (charset, charsetstr, len);
+ charset[len] = '\0';
+# endif
+
+ /* The output charset should normally be determined by the
+ locale. But sometimes the locale is not used or not correctly
+ set up, so we provide a possibility for the user to override
+ this. Moreover, the value specified through
+ bind_textdomain_codeset overrides both. */
+ if (domainbinding != NULL && domainbinding->codeset != NULL)
+ outcharset = domainbinding->codeset;
+ else
+ {
+ outcharset = getenv ("OUTPUT_CHARSET");
+ if (outcharset == NULL || outcharset[0] == '\0')
+ {
+# ifdef _LIBC
+ outcharset = _NL_CURRENT (LC_CTYPE, CODESET);
+# else
+# if HAVE_ICONV
+ extern const char *locale_charset (void);
+ outcharset = locale_charset ();
+# endif
+# endif
+ }
+ }
+
+# ifdef _LIBC
+ /* We always want to use transliteration. */
+ outcharset = norm_add_slashes (outcharset, "TRANSLIT");
+ charset = norm_add_slashes (charset, NULL);
+ if (__gconv_open (outcharset, charset, &domain->conv,
+ GCONV_AVOID_NOCONV)
+ != __GCONV_OK)
+ domain->conv = (__gconv_t) -1;
+# else
+# if HAVE_ICONV
+ /* When using GNU libc >= 2.2 or GNU libiconv >= 1.5,
+ we want to use transliteration. */
+# if (__GLIBC__ == 2 && __GLIBC_MINOR__ >= 2) || __GLIBC__ > 2 \
+ || _LIBICONV_VERSION >= 0x0105
+ if (strchr (outcharset, '/') == NULL)
+ {
+ char *tmp;
+
+ len = strlen (outcharset);
+ tmp = (char *) alloca (len + 10 + 1);
+ memcpy (tmp, outcharset, len);
+ memcpy (tmp + len, "//TRANSLIT", 10 + 1);
+ outcharset = tmp;
+
+ domain->conv = iconv_open (outcharset, charset);
+
+ freea (outcharset);
+ }
+ else
+# endif
+ domain->conv = iconv_open (outcharset, charset);
+# endif
+# endif
+
+ freea (charset);
+ }
+#endif /* _LIBC || HAVE_ICONV */
+ }
+
+ return nullentry;
+}
+
+/* Frees the codeset dependent parts of an opened message catalog. */
+void
+internal_function
+_nl_free_domain_conv (struct loaded_domain *domain)
+{
+ if (domain->conv_tab != NULL && domain->conv_tab != (char **) -1)
+ free (domain->conv_tab);
+
+#ifdef _LIBC
+ if (domain->conv != (__gconv_t) -1)
+ __gconv_close (domain->conv);
+#else
+# if HAVE_ICONV
+ if (domain->conv != (iconv_t) -1)
+ iconv_close (domain->conv);
+# endif
+#endif
+}
+
+/* Load the message catalogs specified by FILENAME. If it is no valid
+ message catalog do nothing. */
+void
+internal_function
+_nl_load_domain (struct loaded_l10nfile *domain_file,
+ struct binding *domainbinding)
+{
+ int fd;
+ size_t size;
+#ifdef _LIBC
+ struct stat64 st;
+#else
+ struct stat st;
+#endif
+ struct mo_file_header *data = (struct mo_file_header *) -1;
+ int use_mmap = 0;
+ struct loaded_domain *domain;
+ int revision;
+ const char *nullentry;
+
+ domain_file->decided = 1;
+ domain_file->data = NULL;
+
+ /* Note that it would be useless to store domainbinding in domain_file
+ because domainbinding might be == NULL now but != NULL later (after
+ a call to bind_textdomain_codeset). */
+
+ /* If the record does not represent a valid locale the FILENAME
+ might be NULL. This can happen when according to the given
+ specification the locale file name is different for XPG and CEN
+ syntax. */
+ if (domain_file->filename == NULL)
+ return;
+
+ /* Try to open the addressed file. */
+ fd = open (domain_file->filename, O_RDONLY | O_BINARY);
+ if (fd == -1)
+ return;
+
+ /* We must know about the size of the file. */
+ if (
+#ifdef _LIBC
+ __builtin_expect (fstat64 (fd, &st) != 0, 0)
+#else
+ __builtin_expect (fstat (fd, &st) != 0, 0)
+#endif
+ || __builtin_expect ((size = (size_t) st.st_size) != st.st_size, 0)
+ || __builtin_expect (size < sizeof (struct mo_file_header), 0))
+ {
+ /* Something went wrong. */
+ close (fd);
+ return;
+ }
+
+#ifdef HAVE_MMAP
+ /* Now we are ready to load the file. If mmap() is available we try
+ this first. If not available or it failed we try to load it. */
+ data = (struct mo_file_header *) mmap (NULL, size, PROT_READ,
+ MAP_PRIVATE, fd, 0);
+
+ if (__builtin_expect (data != (struct mo_file_header *) -1, 1))
+ {
+ /* mmap() call was successful. */
+ close (fd);
+ use_mmap = 1;
+ }
+#endif
+
+ /* If the data is not yet available (i.e. mmap'ed) we try to load
+ it manually. */
+ if (data == (struct mo_file_header *) -1)
+ {
+ size_t to_read;
+ char *read_ptr;
+
+ data = (struct mo_file_header *) malloc (size);
+ if (data == NULL)
+ return;
+
+ to_read = size;
+ read_ptr = (char *) data;
+ do
+ {
+ long int nb = (long int) read (fd, read_ptr, to_read);
+ if (nb <= 0)
+ {
+#ifdef EINTR
+ if (nb == -1 && errno == EINTR)
+ continue;
+#endif
+ close (fd);
+ return;
+ }
+ read_ptr += nb;
+ to_read -= nb;
+ }
+ while (to_read > 0);
+
+ close (fd);
+ }
+
+ /* Using the magic number we can test whether it really is a message
+ catalog file. */
+ if (__builtin_expect (data->magic != _MAGIC && data->magic != _MAGIC_SWAPPED,
+ 0))
+ {
+ /* The magic number is wrong: not a message catalog file. */
+#ifdef HAVE_MMAP
+ if (use_mmap)
+ munmap ((caddr_t) data, size);
+ else
+#endif
+ free (data);
+ return;
+ }
+
+ domain = (struct loaded_domain *) malloc (sizeof (struct loaded_domain));
+ if (domain == NULL)
+ return;
+ domain_file->data = domain;
+
+ domain->data = (char *) data;
+ domain->use_mmap = use_mmap;
+ domain->mmap_size = size;
+ domain->must_swap = data->magic != _MAGIC;
+ domain->malloced = NULL;
+
+ /* Fill in the information about the available tables. */
+ revision = W (domain->must_swap, data->revision);
+ /* We support only the major revisions 0 and 1. */
+ switch (revision >> 16)
+ {
+ case 0:
+ case 1:
+ domain->nstrings = W (domain->must_swap, data->nstrings);
+ domain->orig_tab = (const struct string_desc *)
+ ((char *) data + W (domain->must_swap, data->orig_tab_offset));
+ domain->trans_tab = (const struct string_desc *)
+ ((char *) data + W (domain->must_swap, data->trans_tab_offset));
+ domain->hash_size = W (domain->must_swap, data->hash_tab_size);
+ domain->hash_tab =
+ (domain->hash_size > 2
+ ? (const nls_uint32 *)
+ ((char *) data + W (domain->must_swap, data->hash_tab_offset))
+ : NULL);
+ domain->must_swap_hash_tab = domain->must_swap;
+
+ /* Now dispatch on the minor revision. */
+ switch (revision & 0xffff)
+ {
+ case 0:
+ domain->n_sysdep_strings = 0;
+ domain->orig_sysdep_tab = NULL;
+ domain->trans_sysdep_tab = NULL;
+ break;
+ case 1:
+ default:
+ {
+ nls_uint32 n_sysdep_strings;
+
+ if (domain->hash_tab == NULL)
+ /* This is invalid. These minor revisions need a hash table. */
+ goto invalid;
+
+ n_sysdep_strings =
+ W (domain->must_swap, data->n_sysdep_strings);
+ if (n_sysdep_strings > 0)
+ {
+ nls_uint32 n_sysdep_segments;
+ const struct sysdep_segment *sysdep_segments;
+ const char **sysdep_segment_values;
+ const nls_uint32 *orig_sysdep_tab;
+ const nls_uint32 *trans_sysdep_tab;
+ nls_uint32 n_inmem_sysdep_strings;
+ size_t memneed;
+ char *mem;
+ struct sysdep_string_desc *inmem_orig_sysdep_tab;
+ struct sysdep_string_desc *inmem_trans_sysdep_tab;
+ nls_uint32 *inmem_hash_tab;
+ unsigned int i, j;
+
+ /* Get the values of the system dependent segments. */
+ n_sysdep_segments =
+ W (domain->must_swap, data->n_sysdep_segments);
+ sysdep_segments = (const struct sysdep_segment *)
+ ((char *) data
+ + W (domain->must_swap, data->sysdep_segments_offset));
+ sysdep_segment_values =
+ alloca (n_sysdep_segments * sizeof (const char *));
+ for (i = 0; i < n_sysdep_segments; i++)
+ {
+ const char *name =
+ (char *) data
+ + W (domain->must_swap, sysdep_segments[i].offset);
+ nls_uint32 namelen =
+ W (domain->must_swap, sysdep_segments[i].length);
+
+ if (!(namelen > 0 && name[namelen - 1] == '\0'))
+ {
+ freea (sysdep_segment_values);
+ goto invalid;
+ }
+
+ sysdep_segment_values[i] = get_sysdep_segment_value (name);
+ }
+
+ orig_sysdep_tab = (const nls_uint32 *)
+ ((char *) data
+ + W (domain->must_swap, data->orig_sysdep_tab_offset));
+ trans_sysdep_tab = (const nls_uint32 *)
+ ((char *) data
+ + W (domain->must_swap, data->trans_sysdep_tab_offset));
+
+ /* Compute the amount of additional memory needed for the
+ system dependent strings and the augmented hash table.
+ At the same time, also drop string pairs which refer to
+ an undefined system dependent segment. */
+ n_inmem_sysdep_strings = 0;
+ memneed = domain->hash_size * sizeof (nls_uint32);
+ for (i = 0; i < n_sysdep_strings; i++)
+ {
+ int valid = 1;
+ size_t needs[2];
+
+ for (j = 0; j < 2; j++)
+ {
+ const struct sysdep_string *sysdep_string =
+ (const struct sysdep_string *)
+ ((char *) data
+ + W (domain->must_swap,
+ j == 0
+ ? orig_sysdep_tab[i]
+ : trans_sysdep_tab[i]));
+ size_t need = 0;
+ const struct segment_pair *p = sysdep_string->segments;
+
+ if (W (domain->must_swap, p->sysdepref) != SEGMENTS_END)
+ for (p = sysdep_string->segments;; p++)
+ {
+ nls_uint32 sysdepref;
+
+ need += W (domain->must_swap, p->segsize);
+
+ sysdepref = W (domain->must_swap, p->sysdepref);
+ if (sysdepref == SEGMENTS_END)
+ break;
+
+ if (sysdepref >= n_sysdep_segments)
+ {
+ /* Invalid. */
+ freea (sysdep_segment_values);
+ goto invalid;
+ }
+
+ if (sysdep_segment_values[sysdepref] == NULL)
+ {
+ /* This particular string pair is invalid. */
+ valid = 0;
+ break;
+ }
+
+ need += strlen (sysdep_segment_values[sysdepref]);
+ }
+
+ needs[j] = need;
+ if (!valid)
+ break;
+ }
+
+ if (valid)
+ {
+ n_inmem_sysdep_strings++;
+ memneed += needs[0] + needs[1];
+ }
+ }
+ memneed += 2 * n_inmem_sysdep_strings
+ * sizeof (struct sysdep_string_desc);
+
+ if (n_inmem_sysdep_strings > 0)
+ {
+ unsigned int k;
+
+ /* Allocate additional memory. */
+ mem = (char *) malloc (memneed);
+ if (mem == NULL)
+ goto invalid;
+
+ domain->malloced = mem;
+ inmem_orig_sysdep_tab = (struct sysdep_string_desc *) mem;
+ mem += n_inmem_sysdep_strings
+ * sizeof (struct sysdep_string_desc);
+ inmem_trans_sysdep_tab = (struct sysdep_string_desc *) mem;
+ mem += n_inmem_sysdep_strings
+ * sizeof (struct sysdep_string_desc);
+ inmem_hash_tab = (nls_uint32 *) mem;
+ mem += domain->hash_size * sizeof (nls_uint32);
+
+ /* Compute the system dependent strings. */
+ k = 0;
+ for (i = 0; i < n_sysdep_strings; i++)
+ {
+ int valid = 1;
+
+ for (j = 0; j < 2; j++)
+ {
+ const struct sysdep_string *sysdep_string =
+ (const struct sysdep_string *)
+ ((char *) data
+ + W (domain->must_swap,
+ j == 0
+ ? orig_sysdep_tab[i]
+ : trans_sysdep_tab[i]));
+ const struct segment_pair *p =
+ sysdep_string->segments;
+
+ if (W (domain->must_swap, p->sysdepref)
+ != SEGMENTS_END)
+ for (p = sysdep_string->segments;; p++)
+ {
+ nls_uint32 sysdepref;
+
+ sysdepref =
+ W (domain->must_swap, p->sysdepref);
+ if (sysdepref == SEGMENTS_END)
+ break;
+
+ if (sysdep_segment_values[sysdepref] == NULL)
+ {
+ /* This particular string pair is
+ invalid. */
+ valid = 0;
+ break;
+ }
+ }
+
+ if (!valid)
+ break;
+ }
+
+ if (valid)
+ {
+ for (j = 0; j < 2; j++)
+ {
+ const struct sysdep_string *sysdep_string =
+ (const struct sysdep_string *)
+ ((char *) data
+ + W (domain->must_swap,
+ j == 0
+ ? orig_sysdep_tab[i]
+ : trans_sysdep_tab[i]));
+ const char *static_segments =
+ (char *) data
+ + W (domain->must_swap, sysdep_string->offset);
+ const struct segment_pair *p =
+ sysdep_string->segments;
+
+ /* Concatenate the segments, and fill
+ inmem_orig_sysdep_tab[k] (for j == 0) and
+ inmem_trans_sysdep_tab[k] (for j == 1). */
+
+ struct sysdep_string_desc *inmem_tab_entry =
+ (j == 0
+ ? inmem_orig_sysdep_tab
+ : inmem_trans_sysdep_tab)
+ + k;
+
+ if (W (domain->must_swap, p->sysdepref)
+ == SEGMENTS_END)
+ {
+ /* Only one static segment. */
+ inmem_tab_entry->length =
+ W (domain->must_swap, p->segsize);
+ inmem_tab_entry->pointer = static_segments;
+ }
+ else
+ {
+ inmem_tab_entry->pointer = mem;
+
+ for (p = sysdep_string->segments;; p++)
+ {
+ nls_uint32 segsize =
+ W (domain->must_swap, p->segsize);
+ nls_uint32 sysdepref =
+ W (domain->must_swap, p->sysdepref);
+ size_t n;
+
+ if (segsize > 0)
+ {
+ memcpy (mem, static_segments, segsize);
+ mem += segsize;
+ static_segments += segsize;
+ }
+
+ if (sysdepref == SEGMENTS_END)
+ break;
+
+ n = strlen (sysdep_segment_values[sysdepref]);
+ memcpy (mem, sysdep_segment_values[sysdepref], n);
+ mem += n;
+ }
+
+ inmem_tab_entry->length =
+ mem - inmem_tab_entry->pointer;
+ }
+ }
+
+ k++;
+ }
+ }
+ if (k != n_inmem_sysdep_strings)
+ abort ();
+
+ /* Compute the augmented hash table. */
+ for (i = 0; i < domain->hash_size; i++)
+ inmem_hash_tab[i] =
+ W (domain->must_swap_hash_tab, domain->hash_tab[i]);
+ for (i = 0; i < n_inmem_sysdep_strings; i++)
+ {
+ const char *msgid = inmem_orig_sysdep_tab[i].pointer;
+ nls_uint32 hash_val = hash_string (msgid);
+ nls_uint32 idx = hash_val % domain->hash_size;
+ nls_uint32 incr =
+ 1 + (hash_val % (domain->hash_size - 2));
+
+ for (;;)
+ {
+ if (inmem_hash_tab[idx] == 0)
+ {
+ /* Hash table entry is empty. Use it. */
+ inmem_hash_tab[idx] = 1 + domain->nstrings + i;
+ break;
+ }
+
+ if (idx >= domain->hash_size - incr)
+ idx -= domain->hash_size - incr;
+ else
+ idx += incr;
+ }
+ }
+
+ domain->n_sysdep_strings = n_inmem_sysdep_strings;
+ domain->orig_sysdep_tab = inmem_orig_sysdep_tab;
+ domain->trans_sysdep_tab = inmem_trans_sysdep_tab;
+
+ domain->hash_tab = inmem_hash_tab;
+ domain->must_swap_hash_tab = 0;
+ }
+ else
+ {
+ domain->n_sysdep_strings = 0;
+ domain->orig_sysdep_tab = NULL;
+ domain->trans_sysdep_tab = NULL;
+ }
+
+ freea (sysdep_segment_values);
+ }
+ else
+ {
+ domain->n_sysdep_strings = 0;
+ domain->orig_sysdep_tab = NULL;
+ domain->trans_sysdep_tab = NULL;
+ }
+ }
+ break;
+ }
+ break;
+ default:
+ /* This is an invalid revision. */
+ invalid:
+ /* This is an invalid .mo file. */
+ if (domain->malloced)
+ free (domain->malloced);
+#ifdef HAVE_MMAP
+ if (use_mmap)
+ munmap ((caddr_t) data, size);
+ else
+#endif
+ free (data);
+ free (domain);
+ domain_file->data = NULL;
+ return;
+ }
+
+ /* Now initialize the character set converter from the character set
+ the file is encoded with (found in the header entry) to the domain's
+ specified character set or the locale's character set. */
+ nullentry = _nl_init_domain_conv (domain_file, domain, domainbinding);
+
+ /* Also look for a plural specification. */
+ EXTRACT_PLURAL_EXPRESSION (nullentry, &domain->plural, &domain->nplurals);
+}
+
+
+#ifdef _LIBC
+void
+internal_function
+_nl_unload_domain (struct loaded_domain *domain)
+{
+ if (domain->plural != &__gettext_germanic_plural)
+ __gettext_free_exp (domain->plural);
+
+ _nl_free_domain_conv (domain);
+
+ if (domain->malloced)
+ free (domain->malloced);
+
+# ifdef _POSIX_MAPPED_FILES
+ if (domain->use_mmap)
+ munmap ((caddr_t) domain->data, domain->mmap_size);
+ else
+# endif /* _POSIX_MAPPED_FILES */
+ free ((void *) domain->data);
+
+ free (domain);
+}
+#endif
diff --git a/macros/texinfo/contrib/texinfo-hu/texinfo/intl/localcharset.c b/macros/texinfo/contrib/texinfo-hu/texinfo/intl/localcharset.c
new file mode 100644
index 0000000000..4865f1037a
--- /dev/null
+++ b/macros/texinfo/contrib/texinfo-hu/texinfo/intl/localcharset.c
@@ -0,0 +1,398 @@
+/* Determine a canonical name for the current locale's character encoding.
+
+ Copyright (C) 2000-2003 Free Software Foundation, Inc.
+
+ This program is free software; you can redistribute it and/or modify it
+ under the terms of the GNU Library General Public License as published
+ 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
+ Library General Public License for more details.
+
+ You should have received a copy of the GNU Library General Public
+ License along with this program; if not, write to the Free Software
+ Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307,
+ USA. */
+
+/* Written by Bruno Haible <bruno@clisp.org>. */
+
+#ifdef HAVE_CONFIG_H
+# include <config.h>
+#endif
+
+/* Specification. */
+#include "localcharset.h"
+
+#if HAVE_STDDEF_H
+# include <stddef.h>
+#endif
+
+#include <stdio.h>
+#if HAVE_STRING_H
+# include <string.h>
+#else
+# include <strings.h>
+#endif
+#if HAVE_STDLIB_H
+# include <stdlib.h>
+#endif
+
+#if defined _WIN32 || defined __WIN32__
+# undef WIN32 /* avoid warning on mingw32 */
+# define WIN32
+#endif
+
+#if defined __EMX__
+/* Assume EMX program runs on OS/2, even if compiled under DOS. */
+# define OS2
+#endif
+
+#if !defined WIN32
+# if HAVE_LANGINFO_CODESET
+# include <langinfo.h>
+# else
+# if HAVE_SETLOCALE
+# include <locale.h>
+# endif
+# endif
+#elif defined WIN32
+# 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
+
+#if defined _WIN32 || defined __WIN32__ || defined __EMX__ || defined __DJGPP__
+ /* Win32, 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 ()
+{
+ const char *cp;
+
+ cp = charset_aliases;
+ if (cp == NULL)
+ {
+#if !(defined VMS || defined WIN32)
+ FILE *fp;
+ const char *dir = relocate (LIBDIR);
+ const char *base = "charset.alias";
+ char *file_name;
+
+ /* 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. */
+ int c;
+ char buf1[50+1];
+ char buf2[50+1];
+ char *res_ptr = NULL;
+ size_t res_size = 0;
+ size_t l1, l2;
+
+ for (;;)
+ {
+ 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);
+ 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;
+ 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
+ /* 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"
+ "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";
+# 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 ()
+{
+ const char *codeset;
+ const char *aliases;
+
+#if !(defined WIN32 || defined OS2)
+
+# if HAVE_LANGINFO_CODESET
+
+ /* Most systems support nl_langinfo (CODESET) nowadays. */
+ codeset = nl_langinfo (CODESET);
+
+# 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 HAVE_SETLOCALE && 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
+
+ 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/macros/texinfo/contrib/texinfo-hu/texinfo/intl/localcharset.h b/macros/texinfo/contrib/texinfo-hu/texinfo/intl/localcharset.h
new file mode 100644
index 0000000000..3b137e73c5
--- /dev/null
+++ b/macros/texinfo/contrib/texinfo-hu/texinfo/intl/localcharset.h
@@ -0,0 +1,42 @@
+/* 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 Library 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
+ Library General Public License for more details.
+
+ You should have received a copy of the GNU Library General Public
+ License along with this program; if not, write to the Free Software
+ Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307,
+ 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/macros/texinfo/contrib/texinfo-hu/texinfo/intl/locale.alias b/macros/texinfo/contrib/texinfo-hu/texinfo/intl/locale.alias
new file mode 100644
index 0000000000..bd6bb2562f
--- /dev/null
+++ b/macros/texinfo/contrib/texinfo-hu/texinfo/intl/locale.alias
@@ -0,0 +1,78 @@
+# Locale name alias data base.
+# Copyright (C) 1996-2001,2003 Free Software Foundation, Inc.
+#
+# This program is free software; you can redistribute it and/or modify it
+# under the terms of the GNU Library General Public License as published
+# 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
+# Library General Public License for more details.
+#
+# You should have received a copy of the GNU Library General Public
+# License along with this program; if not, write to the Free Software
+# Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307,
+# USA.
+
+# The format of this file is the same as for the corresponding file of
+# the X Window System, which normally can be found in
+# /usr/lib/X11/locale/locale.alias
+# A single line contains two fields: an alias and a substitution value.
+# All entries are case independent.
+
+# Note: This file is far from being complete. If you have a value for
+# your own site which you think might be useful for others too, share
+# it with the rest of us. Send it using the `glibcbug' script to
+# bugs@gnu.org.
+
+# Packages using this file:
+
+bokmal nb_NO.ISO-8859-1
+bokmål nb_NO.ISO-8859-1
+catalan ca_ES.ISO-8859-1
+croatian hr_HR.ISO-8859-2
+czech cs_CZ.ISO-8859-2
+danish da_DK.ISO-8859-1
+dansk da_DK.ISO-8859-1
+deutsch de_DE.ISO-8859-1
+dutch nl_NL.ISO-8859-1
+eesti et_EE.ISO-8859-1
+estonian et_EE.ISO-8859-1
+finnish fi_FI.ISO-8859-1
+français fr_FR.ISO-8859-1
+french fr_FR.ISO-8859-1
+galego gl_ES.ISO-8859-1
+galician gl_ES.ISO-8859-1
+german de_DE.ISO-8859-1
+greek el_GR.ISO-8859-7
+hebrew he_IL.ISO-8859-8
+hrvatski hr_HR.ISO-8859-2
+hungarian hu_HU.ISO-8859-2
+icelandic is_IS.ISO-8859-1
+italian it_IT.ISO-8859-1
+japanese ja_JP.eucJP
+japanese.euc ja_JP.eucJP
+ja_JP ja_JP.eucJP
+ja_JP.ujis ja_JP.eucJP
+japanese.sjis ja_JP.SJIS
+korean ko_KR.eucKR
+korean.euc ko_KR.eucKR
+ko_KR ko_KR.eucKR
+lithuanian lt_LT.ISO-8859-13
+no_NO nb_NO.ISO-8859-1
+no_NO.ISO-8859-1 nb_NO.ISO-8859-1
+norwegian nb_NO.ISO-8859-1
+nynorsk nn_NO.ISO-8859-1
+polish pl_PL.ISO-8859-2
+portuguese pt_PT.ISO-8859-1
+romanian ro_RO.ISO-8859-2
+russian ru_RU.ISO-8859-5
+slovak sk_SK.ISO-8859-2
+slovene sl_SI.ISO-8859-2
+slovenian sl_SI.ISO-8859-2
+spanish es_ES.ISO-8859-1
+swedish sv_SE.ISO-8859-1
+thai th_TH.TIS-620
+turkish tr_TR.ISO-8859-9
diff --git a/macros/texinfo/contrib/texinfo-hu/texinfo/intl/localealias.c b/macros/texinfo/contrib/texinfo-hu/texinfo/intl/localealias.c
new file mode 100644
index 0000000000..2eaf8813ed
--- /dev/null
+++ b/macros/texinfo/contrib/texinfo-hu/texinfo/intl/localealias.c
@@ -0,0 +1,414 @@
+/* Handle aliases for locale names.
+ Copyright (C) 1995-1999, 2000-2001, 2003 Free Software Foundation, Inc.
+
+ This program is free software; you can redistribute it and/or modify it
+ under the terms of the GNU Library General Public License as published
+ 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
+ Library General Public License for more details.
+
+ You should have received a copy of the GNU Library General Public
+ License along with this program; if not, write to the Free Software
+ Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307,
+ USA. */
+
+/* Tell glibc's <string.h> to provide a prototype for mempcpy().
+ This must come before <config.h> because <config.h> may include
+ <features.h>, and once <features.h> has been included, it's too late. */
+#ifndef _GNU_SOURCE
+# define _GNU_SOURCE 1
+#endif
+
+#ifdef HAVE_CONFIG_H
+# include <config.h>
+#endif
+
+#include <ctype.h>
+#include <stdio.h>
+#if defined _LIBC || defined HAVE___FSETLOCKING
+# include <stdio_ext.h>
+#endif
+#include <sys/types.h>
+
+#ifdef __GNUC__
+# undef alloca
+# define alloca __builtin_alloca
+# define HAVE_ALLOCA 1
+#else
+# ifdef _MSC_VER
+# include <malloc.h>
+# define alloca _alloca
+# else
+# if defined HAVE_ALLOCA_H || defined _LIBC
+# include <alloca.h>
+# else
+# ifdef _AIX
+ #pragma alloca
+# else
+# ifndef alloca
+char *alloca ();
+# endif
+# endif
+# endif
+# endif
+#endif
+
+#include <stdlib.h>
+#include <string.h>
+
+#include "gettextP.h"
+
+#if ENABLE_RELOCATABLE
+# include "relocatable.h"
+#else
+# define relocate(pathname) (pathname)
+#endif
+
+/* @@ end of prolog @@ */
+
+#ifdef _LIBC
+/* Rename the non ANSI C functions. This is required by the standard
+ because some ANSI C functions will require linking with this object
+ file and the name space must not be polluted. */
+# define strcasecmp __strcasecmp
+
+# ifndef mempcpy
+# define mempcpy __mempcpy
+# endif
+# define HAVE_MEMPCPY 1
+# define HAVE___FSETLOCKING 1
+
+/* We need locking here since we can be called from different places. */
+# include <bits/libc-lock.h>
+
+__libc_lock_define_initialized (static, lock);
+#endif
+
+#ifndef internal_function
+# define internal_function
+#endif
+
+/* Some optimizations for glibc. */
+#ifdef _LIBC
+# define FEOF(fp) feof_unlocked (fp)
+# define FGETS(buf, n, fp) fgets_unlocked (buf, n, fp)
+#else
+# define FEOF(fp) feof (fp)
+# define FGETS(buf, n, fp) fgets (buf, n, fp)
+#endif
+
+/* For those losing systems which don't have `alloca' we have to add
+ some additional code emulating it. */
+#ifdef HAVE_ALLOCA
+# define freea(p) /* nothing */
+#else
+# define alloca(n) malloc (n)
+# define freea(p) free (p)
+#endif
+
+#if defined _LIBC_REENTRANT || HAVE_DECL_FGETS_UNLOCKED
+# undef fgets
+# define fgets(buf, len, s) fgets_unlocked (buf, len, s)
+#endif
+#if defined _LIBC_REENTRANT || HAVE_DECL_FEOF_UNLOCKED
+# undef feof
+# define feof(s) feof_unlocked (s)
+#endif
+
+
+struct alias_map
+{
+ const char *alias;
+ const char *value;
+};
+
+
+#ifndef _LIBC
+# define libc_freeres_ptr(decl) decl
+#endif
+
+libc_freeres_ptr (static char *string_space);
+static size_t string_space_act;
+static size_t string_space_max;
+libc_freeres_ptr (static struct alias_map *map);
+static size_t nmap;
+static size_t maxmap;
+
+
+/* Prototypes for local functions. */
+static size_t read_alias_file (const char *fname, int fname_len)
+ internal_function;
+static int extend_alias_table (void);
+static int alias_compare (const struct alias_map *map1,
+ const struct alias_map *map2);
+
+
+const char *
+_nl_expand_alias (const char *name)
+{
+ static const char *locale_alias_path;
+ struct alias_map *retval;
+ const char *result = NULL;
+ size_t added;
+
+#ifdef _LIBC
+ __libc_lock_lock (lock);
+#endif
+
+ if (locale_alias_path == NULL)
+ locale_alias_path = LOCALE_ALIAS_PATH;
+
+ do
+ {
+ struct alias_map item;
+
+ item.alias = name;
+
+ if (nmap > 0)
+ retval = (struct alias_map *) bsearch (&item, map, nmap,
+ sizeof (struct alias_map),
+ (int (*) (const void *,
+ const void *)
+ ) alias_compare);
+ else
+ retval = NULL;
+
+ /* We really found an alias. Return the value. */
+ if (retval != NULL)
+ {
+ result = retval->value;
+ break;
+ }
+
+ /* Perhaps we can find another alias file. */
+ added = 0;
+ while (added == 0 && locale_alias_path[0] != '\0')
+ {
+ const char *start;
+
+ while (locale_alias_path[0] == PATH_SEPARATOR)
+ ++locale_alias_path;
+ start = locale_alias_path;
+
+ while (locale_alias_path[0] != '\0'
+ && locale_alias_path[0] != PATH_SEPARATOR)
+ ++locale_alias_path;
+
+ if (start < locale_alias_path)
+ added = read_alias_file (start, locale_alias_path - start);
+ }
+ }
+ while (added != 0);
+
+#ifdef _LIBC
+ __libc_lock_unlock (lock);
+#endif
+
+ return result;
+}
+
+
+static size_t
+internal_function
+read_alias_file (const char *fname, int fname_len)
+{
+ FILE *fp;
+ char *full_fname;
+ size_t added;
+ static const char aliasfile[] = "/locale.alias";
+
+ full_fname = (char *) alloca (fname_len + sizeof aliasfile);
+#ifdef HAVE_MEMPCPY
+ mempcpy (mempcpy (full_fname, fname, fname_len),
+ aliasfile, sizeof aliasfile);
+#else
+ memcpy (full_fname, fname, fname_len);
+ memcpy (&full_fname[fname_len], aliasfile, sizeof aliasfile);
+#endif
+
+ fp = fopen (relocate (full_fname), "r");
+ freea (full_fname);
+ if (fp == NULL)
+ return 0;
+
+#ifdef HAVE___FSETLOCKING
+ /* No threads present. */
+ __fsetlocking (fp, FSETLOCKING_BYCALLER);
+#endif
+
+ added = 0;
+ while (!FEOF (fp))
+ {
+ /* It is a reasonable approach to use a fix buffer here because
+ a) we are only interested in the first two fields
+ b) these fields must be usable as file names and so must not
+ be that long
+ We avoid a multi-kilobyte buffer here since this would use up
+ stack space which we might not have if the program ran out of
+ memory. */
+ char buf[400];
+ char *alias;
+ char *value;
+ char *cp;
+
+ if (FGETS (buf, sizeof buf, fp) == NULL)
+ /* EOF reached. */
+ break;
+
+ cp = buf;
+ /* Ignore leading white space. */
+ while (isspace ((unsigned char) cp[0]))
+ ++cp;
+
+ /* A leading '#' signals a comment line. */
+ if (cp[0] != '\0' && cp[0] != '#')
+ {
+ alias = cp++;
+ while (cp[0] != '\0' && !isspace ((unsigned char) cp[0]))
+ ++cp;
+ /* Terminate alias name. */
+ if (cp[0] != '\0')
+ *cp++ = '\0';
+
+ /* Now look for the beginning of the value. */
+ while (isspace ((unsigned char) cp[0]))
+ ++cp;
+
+ if (cp[0] != '\0')
+ {
+ size_t alias_len;
+ size_t value_len;
+
+ value = cp++;
+ while (cp[0] != '\0' && !isspace ((unsigned char) cp[0]))
+ ++cp;
+ /* Terminate value. */
+ if (cp[0] == '\n')
+ {
+ /* This has to be done to make the following test
+ for the end of line possible. We are looking for
+ the terminating '\n' which do not overwrite here. */
+ *cp++ = '\0';
+ *cp = '\n';
+ }
+ else if (cp[0] != '\0')
+ *cp++ = '\0';
+
+ if (nmap >= maxmap)
+ if (__builtin_expect (extend_alias_table (), 0))
+ return added;
+
+ alias_len = strlen (alias) + 1;
+ value_len = strlen (value) + 1;
+
+ if (string_space_act + alias_len + value_len > string_space_max)
+ {
+ /* Increase size of memory pool. */
+ size_t new_size = (string_space_max
+ + (alias_len + value_len > 1024
+ ? alias_len + value_len : 1024));
+ char *new_pool = (char *) realloc (string_space, new_size);
+ if (new_pool == NULL)
+ return added;
+
+ if (__builtin_expect (string_space != new_pool, 0))
+ {
+ size_t i;
+
+ for (i = 0; i < nmap; i++)
+ {
+ map[i].alias += new_pool - string_space;
+ map[i].value += new_pool - string_space;
+ }
+ }
+
+ string_space = new_pool;
+ string_space_max = new_size;
+ }
+
+ map[nmap].alias = memcpy (&string_space[string_space_act],
+ alias, alias_len);
+ string_space_act += alias_len;
+
+ map[nmap].value = memcpy (&string_space[string_space_act],
+ value, value_len);
+ string_space_act += value_len;
+
+ ++nmap;
+ ++added;
+ }
+ }
+
+ /* Possibly not the whole line fits into the buffer. Ignore
+ the rest of the line. */
+ while (strchr (buf, '\n') == NULL)
+ if (FGETS (buf, sizeof buf, fp) == NULL)
+ /* Make sure the inner loop will be left. The outer loop
+ will exit at the `feof' test. */
+ break;
+ }
+
+ /* Should we test for ferror()? I think we have to silently ignore
+ errors. --drepper */
+ fclose (fp);
+
+ if (added > 0)
+ qsort (map, nmap, sizeof (struct alias_map),
+ (int (*) (const void *, const void *)) alias_compare);
+
+ return added;
+}
+
+
+static int
+extend_alias_table ()
+{
+ size_t new_size;
+ struct alias_map *new_map;
+
+ new_size = maxmap == 0 ? 100 : 2 * maxmap;
+ new_map = (struct alias_map *) realloc (map, (new_size
+ * sizeof (struct alias_map)));
+ if (new_map == NULL)
+ /* Simply don't extend: we don't have any more core. */
+ return -1;
+
+ map = new_map;
+ maxmap = new_size;
+ return 0;
+}
+
+
+static int
+alias_compare (const struct alias_map *map1, const struct alias_map *map2)
+{
+#if defined _LIBC || defined HAVE_STRCASECMP
+ return strcasecmp (map1->alias, map2->alias);
+#else
+ const unsigned char *p1 = (const unsigned char *) map1->alias;
+ const unsigned char *p2 = (const unsigned char *) map2->alias;
+ unsigned char c1, c2;
+
+ if (p1 == p2)
+ return 0;
+
+ do
+ {
+ /* I know this seems to be odd but the tolower() function in
+ some systems libc cannot handle nonalpha characters. */
+ c1 = isupper (*p1) ? tolower (*p1) : *p1;
+ c2 = isupper (*p2) ? tolower (*p2) : *p2;
+ if (c1 == '\0')
+ break;
+ ++p1;
+ ++p2;
+ }
+ while (c1 == c2);
+
+ return c1 - c2;
+#endif
+}
diff --git a/macros/texinfo/contrib/texinfo-hu/texinfo/intl/localename.c b/macros/texinfo/contrib/texinfo-hu/texinfo/intl/localename.c
new file mode 100644
index 0000000000..5662e54ffe
--- /dev/null
+++ b/macros/texinfo/contrib/texinfo-hu/texinfo/intl/localename.c
@@ -0,0 +1,1142 @@
+/* Determine the current selected locale.
+ Copyright (C) 1995-1999, 2000-2004 Free Software Foundation, Inc.
+
+ This program is free software; you can redistribute it and/or modify it
+ under the terms of the GNU Library General Public License as published
+ 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
+ Library General Public License for more details.
+
+ You should have received a copy of the GNU Library General Public
+ License along with this program; if not, write to the Free Software
+ Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307,
+ USA. */
+
+/* Written by Ulrich Drepper <drepper@gnu.org>, 1995. */
+/* Win32 code written by Tor Lillqvist <tml@iki.fi>. */
+
+#ifdef HAVE_CONFIG_H
+# include <config.h>
+#endif
+
+#include <stdlib.h>
+#include <locale.h>
+
+#if defined _WIN32 || defined __WIN32__
+# undef WIN32 /* avoid warning on mingw32 */
+# define WIN32
+#endif
+
+#ifdef WIN32
+# define WIN32_LEAN_AND_MEAN
+# include <windows.h>
+/* List of language codes, sorted by value:
+ 0x01 LANG_ARABIC
+ 0x02 LANG_BULGARIAN
+ 0x03 LANG_CATALAN
+ 0x04 LANG_CHINESE
+ 0x05 LANG_CZECH
+ 0x06 LANG_DANISH
+ 0x07 LANG_GERMAN
+ 0x08 LANG_GREEK
+ 0x09 LANG_ENGLISH
+ 0x0a LANG_SPANISH
+ 0x0b LANG_FINNISH
+ 0x0c LANG_FRENCH
+ 0x0d LANG_HEBREW
+ 0x0e LANG_HUNGARIAN
+ 0x0f LANG_ICELANDIC
+ 0x10 LANG_ITALIAN
+ 0x11 LANG_JAPANESE
+ 0x12 LANG_KOREAN
+ 0x13 LANG_DUTCH
+ 0x14 LANG_NORWEGIAN
+ 0x15 LANG_POLISH
+ 0x16 LANG_PORTUGUESE
+ 0x17 LANG_RHAETO_ROMANCE
+ 0x18 LANG_ROMANIAN
+ 0x19 LANG_RUSSIAN
+ 0x1a LANG_CROATIAN == LANG_SERBIAN
+ 0x1b LANG_SLOVAK
+ 0x1c LANG_ALBANIAN
+ 0x1d LANG_SWEDISH
+ 0x1e LANG_THAI
+ 0x1f LANG_TURKISH
+ 0x20 LANG_URDU
+ 0x21 LANG_INDONESIAN
+ 0x22 LANG_UKRAINIAN
+ 0x23 LANG_BELARUSIAN
+ 0x24 LANG_SLOVENIAN
+ 0x25 LANG_ESTONIAN
+ 0x26 LANG_LATVIAN
+ 0x27 LANG_LITHUANIAN
+ 0x28 LANG_TAJIK
+ 0x29 LANG_FARSI
+ 0x2a LANG_VIETNAMESE
+ 0x2b LANG_ARMENIAN
+ 0x2c LANG_AZERI
+ 0x2d LANG_BASQUE
+ 0x2e LANG_SORBIAN
+ 0x2f LANG_MACEDONIAN
+ 0x30 LANG_SUTU
+ 0x31 LANG_TSONGA
+ 0x32 LANG_TSWANA
+ 0x33 LANG_VENDA
+ 0x34 LANG_XHOSA
+ 0x35 LANG_ZULU
+ 0x36 LANG_AFRIKAANS
+ 0x37 LANG_GEORGIAN
+ 0x38 LANG_FAEROESE
+ 0x39 LANG_HINDI
+ 0x3a LANG_MALTESE
+ 0x3b LANG_SAAMI
+ 0x3c LANG_GAELIC
+ 0x3d LANG_YIDDISH
+ 0x3e LANG_MALAY
+ 0x3f LANG_KAZAK
+ 0x40 LANG_KYRGYZ
+ 0x41 LANG_SWAHILI
+ 0x42 LANG_TURKMEN
+ 0x43 LANG_UZBEK
+ 0x44 LANG_TATAR
+ 0x45 LANG_BENGALI
+ 0x46 LANG_PUNJABI
+ 0x47 LANG_GUJARATI
+ 0x48 LANG_ORIYA
+ 0x49 LANG_TAMIL
+ 0x4a LANG_TELUGU
+ 0x4b LANG_KANNADA
+ 0x4c LANG_MALAYALAM
+ 0x4d LANG_ASSAMESE
+ 0x4e LANG_MARATHI
+ 0x4f LANG_SANSKRIT
+ 0x50 LANG_MONGOLIAN
+ 0x51 LANG_TIBETAN
+ 0x52 LANG_WELSH
+ 0x53 LANG_CAMBODIAN
+ 0x54 LANG_LAO
+ 0x55 LANG_BURMESE
+ 0x56 LANG_GALICIAN
+ 0x57 LANG_KONKANI
+ 0x58 LANG_MANIPURI
+ 0x59 LANG_SINDHI
+ 0x5a LANG_SYRIAC
+ 0x5b LANG_SINHALESE
+ 0x5c LANG_CHEROKEE
+ 0x5d LANG_INUKTITUT
+ 0x5e LANG_AMHARIC
+ 0x5f LANG_TAMAZIGHT
+ 0x60 LANG_KASHMIRI
+ 0x61 LANG_NEPALI
+ 0x62 LANG_FRISIAN
+ 0x63 LANG_PASHTO
+ 0x64 LANG_TAGALOG
+ 0x65 LANG_DIVEHI
+ 0x66 LANG_EDO
+ 0x67 LANG_FULFULDE
+ 0x68 LANG_HAUSA
+ 0x69 LANG_IBIBIO
+ 0x6a LANG_YORUBA
+ 0x70 LANG_IGBO
+ 0x71 LANG_KANURI
+ 0x72 LANG_OROMO
+ 0x73 LANG_TIGRINYA
+ 0x74 LANG_GUARANI
+ 0x75 LANG_HAWAIIAN
+ 0x76 LANG_LATIN
+ 0x77 LANG_SOMALI
+ 0x78 LANG_YI
+ 0x79 LANG_PAPIAMENTU
+*/
+/* Mingw headers don't have latest language and sublanguage codes. */
+# ifndef LANG_AFRIKAANS
+# define LANG_AFRIKAANS 0x36
+# endif
+# ifndef LANG_ALBANIAN
+# define LANG_ALBANIAN 0x1c
+# endif
+# ifndef LANG_AMHARIC
+# define LANG_AMHARIC 0x5e
+# endif
+# ifndef LANG_ARABIC
+# define LANG_ARABIC 0x01
+# endif
+# ifndef LANG_ARMENIAN
+# define LANG_ARMENIAN 0x2b
+# endif
+# ifndef LANG_ASSAMESE
+# define LANG_ASSAMESE 0x4d
+# endif
+# ifndef LANG_AZERI
+# define LANG_AZERI 0x2c
+# endif
+# ifndef LANG_BASQUE
+# define LANG_BASQUE 0x2d
+# endif
+# ifndef LANG_BELARUSIAN
+# define LANG_BELARUSIAN 0x23
+# endif
+# ifndef LANG_BENGALI
+# define LANG_BENGALI 0x45
+# endif
+# ifndef LANG_BURMESE
+# define LANG_BURMESE 0x55
+# endif
+# ifndef LANG_CAMBODIAN
+# define LANG_CAMBODIAN 0x53
+# endif
+# ifndef LANG_CATALAN
+# define LANG_CATALAN 0x03
+# endif
+# ifndef LANG_CHEROKEE
+# define LANG_CHEROKEE 0x5c
+# endif
+# ifndef LANG_DIVEHI
+# define LANG_DIVEHI 0x65
+# endif
+# ifndef LANG_EDO
+# define LANG_EDO 0x66
+# endif
+# ifndef LANG_ESTONIAN
+# define LANG_ESTONIAN 0x25
+# endif
+# ifndef LANG_FAEROESE
+# define LANG_FAEROESE 0x38
+# endif
+# ifndef LANG_FARSI
+# define LANG_FARSI 0x29
+# endif
+# ifndef LANG_FRISIAN
+# define LANG_FRISIAN 0x62
+# endif
+# ifndef LANG_FULFULDE
+# define LANG_FULFULDE 0x67
+# endif
+# ifndef LANG_GAELIC
+# define LANG_GAELIC 0x3c
+# endif
+# ifndef LANG_GALICIAN
+# define LANG_GALICIAN 0x56
+# endif
+# ifndef LANG_GEORGIAN
+# define LANG_GEORGIAN 0x37
+# endif
+# ifndef LANG_GUARANI
+# define LANG_GUARANI 0x74
+# endif
+# ifndef LANG_GUJARATI
+# define LANG_GUJARATI 0x47
+# endif
+# ifndef LANG_HAUSA
+# define LANG_HAUSA 0x68
+# endif
+# ifndef LANG_HAWAIIAN
+# define LANG_HAWAIIAN 0x75
+# endif
+# ifndef LANG_HEBREW
+# define LANG_HEBREW 0x0d
+# endif
+# ifndef LANG_HINDI
+# define LANG_HINDI 0x39
+# endif
+# ifndef LANG_IBIBIO
+# define LANG_IBIBIO 0x69
+# endif
+# ifndef LANG_IGBO
+# define LANG_IGBO 0x70
+# endif
+# ifndef LANG_INDONESIAN
+# define LANG_INDONESIAN 0x21
+# endif
+# ifndef LANG_INUKTITUT
+# define LANG_INUKTITUT 0x5d
+# endif
+# ifndef LANG_KANNADA
+# define LANG_KANNADA 0x4b
+# endif
+# ifndef LANG_KANURI
+# define LANG_KANURI 0x71
+# endif
+# ifndef LANG_KASHMIRI
+# define LANG_KASHMIRI 0x60
+# endif
+# ifndef LANG_KAZAK
+# define LANG_KAZAK 0x3f
+# endif
+# ifndef LANG_KONKANI
+# define LANG_KONKANI 0x57
+# endif
+# ifndef LANG_KYRGYZ
+# define LANG_KYRGYZ 0x40
+# endif
+# ifndef LANG_LAO
+# define LANG_LAO 0x54
+# endif
+# ifndef LANG_LATIN
+# define LANG_LATIN 0x76
+# endif
+# ifndef LANG_LATVIAN
+# define LANG_LATVIAN 0x26
+# endif
+# ifndef LANG_LITHUANIAN
+# define LANG_LITHUANIAN 0x27
+# endif
+# ifndef LANG_MACEDONIAN
+# define LANG_MACEDONIAN 0x2f
+# endif
+# ifndef LANG_MALAY
+# define LANG_MALAY 0x3e
+# endif
+# ifndef LANG_MALAYALAM
+# define LANG_MALAYALAM 0x4c
+# endif
+# ifndef LANG_MALTESE
+# define LANG_MALTESE 0x3a
+# endif
+# ifndef LANG_MANIPURI
+# define LANG_MANIPURI 0x58
+# endif
+# ifndef LANG_MARATHI
+# define LANG_MARATHI 0x4e
+# endif
+# ifndef LANG_MONGOLIAN
+# define LANG_MONGOLIAN 0x50
+# endif
+# ifndef LANG_NEPALI
+# define LANG_NEPALI 0x61
+# endif
+# ifndef LANG_ORIYA
+# define LANG_ORIYA 0x48
+# endif
+# ifndef LANG_OROMO
+# define LANG_OROMO 0x72
+# endif
+# ifndef LANG_PAPIAMENTU
+# define LANG_PAPIAMENTU 0x79
+# endif
+# ifndef LANG_PASHTO
+# define LANG_PASHTO 0x63
+# endif
+# ifndef LANG_PUNJABI
+# define LANG_PUNJABI 0x46
+# endif
+# ifndef LANG_RHAETO_ROMANCE
+# define LANG_RHAETO_ROMANCE 0x17
+# endif
+# ifndef LANG_SAAMI
+# define LANG_SAAMI 0x3b
+# endif
+# ifndef LANG_SANSKRIT
+# define LANG_SANSKRIT 0x4f
+# endif
+# ifndef LANG_SERBIAN
+# define LANG_SERBIAN 0x1a
+# endif
+# ifndef LANG_SINDHI
+# define LANG_SINDHI 0x59
+# endif
+# ifndef LANG_SINHALESE
+# define LANG_SINHALESE 0x5b
+# endif
+# ifndef LANG_SLOVAK
+# define LANG_SLOVAK 0x1b
+# endif
+# ifndef LANG_SOMALI
+# define LANG_SOMALI 0x77
+# endif
+# ifndef LANG_SORBIAN
+# define LANG_SORBIAN 0x2e
+# endif
+# ifndef LANG_SUTU
+# define LANG_SUTU 0x30
+# endif
+# ifndef LANG_SWAHILI
+# define LANG_SWAHILI 0x41
+# endif
+# ifndef LANG_SYRIAC
+# define LANG_SYRIAC 0x5a
+# endif
+# ifndef LANG_TAGALOG
+# define LANG_TAGALOG 0x64
+# endif
+# ifndef LANG_TAJIK
+# define LANG_TAJIK 0x28
+# endif
+# ifndef LANG_TAMAZIGHT
+# define LANG_TAMAZIGHT 0x5f
+# endif
+# ifndef LANG_TAMIL
+# define LANG_TAMIL 0x49
+# endif
+# ifndef LANG_TATAR
+# define LANG_TATAR 0x44
+# endif
+# ifndef LANG_TELUGU
+# define LANG_TELUGU 0x4a
+# endif
+# ifndef LANG_THAI
+# define LANG_THAI 0x1e
+# endif
+# ifndef LANG_TIBETAN
+# define LANG_TIBETAN 0x51
+# endif
+# ifndef LANG_TIGRINYA
+# define LANG_TIGRINYA 0x73
+# endif
+# ifndef LANG_TSONGA
+# define LANG_TSONGA 0x31
+# endif
+# ifndef LANG_TSWANA
+# define LANG_TSWANA 0x32
+# endif
+# ifndef LANG_TURKMEN
+# define LANG_TURKMEN 0x42
+# endif
+# ifndef LANG_UKRAINIAN
+# define LANG_UKRAINIAN 0x22
+# endif
+# ifndef LANG_URDU
+# define LANG_URDU 0x20
+# endif
+# ifndef LANG_UZBEK
+# define LANG_UZBEK 0x43
+# endif
+# ifndef LANG_VENDA
+# define LANG_VENDA 0x33
+# endif
+# ifndef LANG_VIETNAMESE
+# define LANG_VIETNAMESE 0x2a
+# endif
+# ifndef LANG_WELSH
+# define LANG_WELSH 0x52
+# endif
+# ifndef LANG_XHOSA
+# define LANG_XHOSA 0x34
+# endif
+# ifndef LANG_YI
+# define LANG_YI 0x78
+# endif
+# ifndef LANG_YIDDISH
+# define LANG_YIDDISH 0x3d
+# endif
+# ifndef LANG_YORUBA
+# define LANG_YORUBA 0x6a
+# endif
+# ifndef LANG_ZULU
+# define LANG_ZULU 0x35
+# endif
+# ifndef SUBLANG_ARABIC_SAUDI_ARABIA
+# define SUBLANG_ARABIC_SAUDI_ARABIA 0x01
+# endif
+# ifndef SUBLANG_ARABIC_IRAQ
+# define SUBLANG_ARABIC_IRAQ 0x02
+# endif
+# ifndef SUBLANG_ARABIC_EGYPT
+# define SUBLANG_ARABIC_EGYPT 0x03
+# endif
+# ifndef SUBLANG_ARABIC_LIBYA
+# define SUBLANG_ARABIC_LIBYA 0x04
+# endif
+# ifndef SUBLANG_ARABIC_ALGERIA
+# define SUBLANG_ARABIC_ALGERIA 0x05
+# endif
+# ifndef SUBLANG_ARABIC_MOROCCO
+# define SUBLANG_ARABIC_MOROCCO 0x06
+# endif
+# ifndef SUBLANG_ARABIC_TUNISIA
+# define SUBLANG_ARABIC_TUNISIA 0x07
+# endif
+# ifndef SUBLANG_ARABIC_OMAN
+# define SUBLANG_ARABIC_OMAN 0x08
+# endif
+# ifndef SUBLANG_ARABIC_YEMEN
+# define SUBLANG_ARABIC_YEMEN 0x09
+# endif
+# ifndef SUBLANG_ARABIC_SYRIA
+# define SUBLANG_ARABIC_SYRIA 0x0a
+# endif
+# ifndef SUBLANG_ARABIC_JORDAN
+# define SUBLANG_ARABIC_JORDAN 0x0b
+# endif
+# ifndef SUBLANG_ARABIC_LEBANON
+# define SUBLANG_ARABIC_LEBANON 0x0c
+# endif
+# ifndef SUBLANG_ARABIC_KUWAIT
+# define SUBLANG_ARABIC_KUWAIT 0x0d
+# endif
+# ifndef SUBLANG_ARABIC_UAE
+# define SUBLANG_ARABIC_UAE 0x0e
+# endif
+# ifndef SUBLANG_ARABIC_BAHRAIN
+# define SUBLANG_ARABIC_BAHRAIN 0x0f
+# endif
+# ifndef SUBLANG_ARABIC_QATAR
+# define SUBLANG_ARABIC_QATAR 0x10
+# endif
+# ifndef SUBLANG_AZERI_LATIN
+# define SUBLANG_AZERI_LATIN 0x01
+# endif
+# ifndef SUBLANG_AZERI_CYRILLIC
+# define SUBLANG_AZERI_CYRILLIC 0x02
+# endif
+# ifndef SUBLANG_BENGALI_INDIA
+# define SUBLANG_BENGALI_INDIA 0x00
+# endif
+# ifndef SUBLANG_BENGALI_BANGLADESH
+# define SUBLANG_BENGALI_BANGLADESH 0x01
+# endif
+# ifndef SUBLANG_CHINESE_MACAU
+# define SUBLANG_CHINESE_MACAU 0x05
+# endif
+# ifndef SUBLANG_ENGLISH_SOUTH_AFRICA
+# define SUBLANG_ENGLISH_SOUTH_AFRICA 0x07
+# endif
+# ifndef SUBLANG_ENGLISH_JAMAICA
+# define SUBLANG_ENGLISH_JAMAICA 0x08
+# endif
+# ifndef SUBLANG_ENGLISH_CARIBBEAN
+# define SUBLANG_ENGLISH_CARIBBEAN 0x09
+# endif
+# ifndef SUBLANG_ENGLISH_BELIZE
+# define SUBLANG_ENGLISH_BELIZE 0x0a
+# endif
+# ifndef SUBLANG_ENGLISH_TRINIDAD
+# define SUBLANG_ENGLISH_TRINIDAD 0x0b
+# endif
+# ifndef SUBLANG_ENGLISH_ZIMBABWE
+# define SUBLANG_ENGLISH_ZIMBABWE 0x0c
+# endif
+# ifndef SUBLANG_ENGLISH_PHILIPPINES
+# define SUBLANG_ENGLISH_PHILIPPINES 0x0d
+# endif
+# ifndef SUBLANG_ENGLISH_INDONESIA
+# define SUBLANG_ENGLISH_INDONESIA 0x0e
+# endif
+# ifndef SUBLANG_ENGLISH_HONGKONG
+# define SUBLANG_ENGLISH_HONGKONG 0x0f
+# endif
+# ifndef SUBLANG_ENGLISH_INDIA
+# define SUBLANG_ENGLISH_INDIA 0x10
+# endif
+# ifndef SUBLANG_ENGLISH_MALAYSIA
+# define SUBLANG_ENGLISH_MALAYSIA 0x11
+# endif
+# ifndef SUBLANG_ENGLISH_SINGAPORE
+# define SUBLANG_ENGLISH_SINGAPORE 0x12
+# endif
+# ifndef SUBLANG_FRENCH_LUXEMBOURG
+# define SUBLANG_FRENCH_LUXEMBOURG 0x05
+# endif
+# ifndef SUBLANG_FRENCH_MONACO
+# define SUBLANG_FRENCH_MONACO 0x06
+# endif
+# ifndef SUBLANG_FRENCH_WESTINDIES
+# define SUBLANG_FRENCH_WESTINDIES 0x07
+# endif
+# ifndef SUBLANG_FRENCH_REUNION
+# define SUBLANG_FRENCH_REUNION 0x08
+# endif
+# ifndef SUBLANG_FRENCH_CONGO
+# define SUBLANG_FRENCH_CONGO 0x09
+# endif
+# ifndef SUBLANG_FRENCH_SENEGAL
+# define SUBLANG_FRENCH_SENEGAL 0x0a
+# endif
+# ifndef SUBLANG_FRENCH_CAMEROON
+# define SUBLANG_FRENCH_CAMEROON 0x0b
+# endif
+# ifndef SUBLANG_FRENCH_COTEDIVOIRE
+# define SUBLANG_FRENCH_COTEDIVOIRE 0x0c
+# endif
+# ifndef SUBLANG_FRENCH_MALI
+# define SUBLANG_FRENCH_MALI 0x0d
+# endif
+# ifndef SUBLANG_FRENCH_MOROCCO
+# define SUBLANG_FRENCH_MOROCCO 0x0e
+# endif
+# ifndef SUBLANG_FRENCH_HAITI
+# define SUBLANG_FRENCH_HAITI 0x0f
+# endif
+# ifndef SUBLANG_GERMAN_LUXEMBOURG
+# define SUBLANG_GERMAN_LUXEMBOURG 0x04
+# endif
+# ifndef SUBLANG_GERMAN_LIECHTENSTEIN
+# define SUBLANG_GERMAN_LIECHTENSTEIN 0x05
+# endif
+# ifndef SUBLANG_KASHMIRI_INDIA
+# define SUBLANG_KASHMIRI_INDIA 0x02
+# endif
+# ifndef SUBLANG_MALAY_MALAYSIA
+# define SUBLANG_MALAY_MALAYSIA 0x01
+# endif
+# ifndef SUBLANG_MALAY_BRUNEI_DARUSSALAM
+# define SUBLANG_MALAY_BRUNEI_DARUSSALAM 0x02
+# endif
+# ifndef SUBLANG_NEPALI_INDIA
+# define SUBLANG_NEPALI_INDIA 0x02
+# endif
+# ifndef SUBLANG_PUNJABI_INDIA
+# define SUBLANG_PUNJABI_INDIA 0x00
+# endif
+# ifndef SUBLANG_PUNJABI_PAKISTAN
+# define SUBLANG_PUNJABI_PAKISTAN 0x01
+# endif
+# ifndef SUBLANG_ROMANIAN_ROMANIA
+# define SUBLANG_ROMANIAN_ROMANIA 0x00
+# endif
+# ifndef SUBLANG_ROMANIAN_MOLDOVA
+# define SUBLANG_ROMANIAN_MOLDOVA 0x01
+# endif
+# ifndef SUBLANG_SERBIAN_LATIN
+# define SUBLANG_SERBIAN_LATIN 0x02
+# endif
+# ifndef SUBLANG_SERBIAN_CYRILLIC
+# define SUBLANG_SERBIAN_CYRILLIC 0x03
+# endif
+# ifndef SUBLANG_SINDHI_INDIA
+# define SUBLANG_SINDHI_INDIA 0x00
+# endif
+# ifndef SUBLANG_SINDHI_PAKISTAN
+# define SUBLANG_SINDHI_PAKISTAN 0x01
+# endif
+# ifndef SUBLANG_SPANISH_GUATEMALA
+# define SUBLANG_SPANISH_GUATEMALA 0x04
+# endif
+# ifndef SUBLANG_SPANISH_COSTA_RICA
+# define SUBLANG_SPANISH_COSTA_RICA 0x05
+# endif
+# ifndef SUBLANG_SPANISH_PANAMA
+# define SUBLANG_SPANISH_PANAMA 0x06
+# endif
+# ifndef SUBLANG_SPANISH_DOMINICAN_REPUBLIC
+# define SUBLANG_SPANISH_DOMINICAN_REPUBLIC 0x07
+# endif
+# ifndef SUBLANG_SPANISH_VENEZUELA
+# define SUBLANG_SPANISH_VENEZUELA 0x08
+# endif
+# ifndef SUBLANG_SPANISH_COLOMBIA
+# define SUBLANG_SPANISH_COLOMBIA 0x09
+# endif
+# ifndef SUBLANG_SPANISH_PERU
+# define SUBLANG_SPANISH_PERU 0x0a
+# endif
+# ifndef SUBLANG_SPANISH_ARGENTINA
+# define SUBLANG_SPANISH_ARGENTINA 0x0b
+# endif
+# ifndef SUBLANG_SPANISH_ECUADOR
+# define SUBLANG_SPANISH_ECUADOR 0x0c
+# endif
+# ifndef SUBLANG_SPANISH_CHILE
+# define SUBLANG_SPANISH_CHILE 0x0d
+# endif
+# ifndef SUBLANG_SPANISH_URUGUAY
+# define SUBLANG_SPANISH_URUGUAY 0x0e
+# endif
+# ifndef SUBLANG_SPANISH_PARAGUAY
+# define SUBLANG_SPANISH_PARAGUAY 0x0f
+# endif
+# ifndef SUBLANG_SPANISH_BOLIVIA
+# define SUBLANG_SPANISH_BOLIVIA 0x10
+# endif
+# ifndef SUBLANG_SPANISH_EL_SALVADOR
+# define SUBLANG_SPANISH_EL_SALVADOR 0x11
+# endif
+# ifndef SUBLANG_SPANISH_HONDURAS
+# define SUBLANG_SPANISH_HONDURAS 0x12
+# endif
+# ifndef SUBLANG_SPANISH_NICARAGUA
+# define SUBLANG_SPANISH_NICARAGUA 0x13
+# endif
+# ifndef SUBLANG_SPANISH_PUERTO_RICO
+# define SUBLANG_SPANISH_PUERTO_RICO 0x14
+# endif
+# ifndef SUBLANG_SWEDISH_FINLAND
+# define SUBLANG_SWEDISH_FINLAND 0x02
+# endif
+# ifndef SUBLANG_TAMAZIGHT_ARABIC
+# define SUBLANG_TAMAZIGHT_ARABIC 0x01
+# endif
+# ifndef SUBLANG_TAMAZIGHT_LATIN
+# define SUBLANG_TAMAZIGHT_LATIN 0x02
+# endif
+# ifndef SUBLANG_TIGRINYA_ETHIOPIA
+# define SUBLANG_TIGRINYA_ETHIOPIA 0x00
+# endif
+# ifndef SUBLANG_TIGRINYA_ERITREA
+# define SUBLANG_TIGRINYA_ERITREA 0x01
+# endif
+# ifndef SUBLANG_URDU_PAKISTAN
+# define SUBLANG_URDU_PAKISTAN 0x01
+# endif
+# ifndef SUBLANG_URDU_INDIA
+# define SUBLANG_URDU_INDIA 0x02
+# endif
+# ifndef SUBLANG_UZBEK_LATIN
+# define SUBLANG_UZBEK_LATIN 0x01
+# endif
+# ifndef SUBLANG_UZBEK_CYRILLIC
+# define SUBLANG_UZBEK_CYRILLIC 0x02
+# endif
+#endif
+
+/* XPG3 defines the result of 'setlocale (category, NULL)' as:
+ "Directs 'setlocale()' to query 'category' and return the current
+ setting of 'local'."
+ However it does not specify the exact format. Neither do SUSV2 and
+ ISO C 99. So we can use this feature only on selected systems (e.g.
+ those using GNU C Library). */
+#if defined _LIBC || (defined __GNU_LIBRARY__ && __GNU_LIBRARY__ >= 2)
+# define HAVE_LOCALE_NULL
+#endif
+
+/* Determine the current locale's name, and canonicalize it into XPG syntax
+ language[_territory[.codeset]][@modifier]
+ The codeset part in the result is not reliable; the locale_charset()
+ should be used for codeset information instead.
+ The result must not be freed; it is statically allocated. */
+
+const char *
+_nl_locale_name (int category, const char *categoryname)
+{
+ const char *retval;
+
+#ifndef WIN32
+
+ /* Use the POSIX methods of looking to 'LC_ALL', 'LC_xxx', and 'LANG'.
+ On some systems this can be done by the 'setlocale' function itself. */
+# if defined HAVE_SETLOCALE && defined HAVE_LC_MESSAGES && defined HAVE_LOCALE_NULL
+ retval = setlocale (category, NULL);
+# else
+ /* Setting of LC_ALL overwrites all other. */
+ retval = getenv ("LC_ALL");
+ if (retval == NULL || retval[0] == '\0')
+ {
+ /* Next comes the name of the desired category. */
+ retval = getenv (categoryname);
+ if (retval == NULL || retval[0] == '\0')
+ {
+ /* Last possibility is the LANG environment variable. */
+ retval = getenv ("LANG");
+ if (retval == NULL || retval[0] == '\0')
+ /* We use C as the default domain. POSIX says this is
+ implementation defined. */
+ retval = "C";
+ }
+ }
+# endif
+
+ return retval;
+
+#else /* WIN32 */
+
+ /* Return an XPG style locale name language[_territory][@modifier].
+ Don't even bother determining the codeset; it's not useful in this
+ context, because message catalogs are not specific to a single
+ codeset. */
+
+ LCID lcid;
+ LANGID langid;
+ int primary, sub;
+
+ /* Let the user override the system settings through environment
+ variables, as on POSIX systems. */
+ retval = getenv ("LC_ALL");
+ if (retval != NULL && retval[0] != '\0')
+ return retval;
+ retval = getenv (categoryname);
+ if (retval != NULL && retval[0] != '\0')
+ return retval;
+ retval = getenv ("LANG");
+ if (retval != NULL && retval[0] != '\0')
+ return retval;
+
+ /* Use native Win32 API locale ID. */
+ lcid = GetThreadLocale ();
+
+ /* Strip off the sorting rules, keep only the language part. */
+ langid = LANGIDFROMLCID (lcid);
+
+ /* Split into language and territory part. */
+ primary = PRIMARYLANGID (langid);
+ sub = SUBLANGID (langid);
+
+ /* Dispatch on language.
+ See also http://www.unicode.org/unicode/onlinedat/languages.html .
+ For details about languages, see http://www.ethnologue.com/ . */
+ switch (primary)
+ {
+ case LANG_AFRIKAANS: return "af_ZA";
+ case LANG_ALBANIAN: return "sq_AL";
+ case LANG_AMHARIC: return "am_ET";
+ case LANG_ARABIC:
+ switch (sub)
+ {
+ case SUBLANG_ARABIC_SAUDI_ARABIA: return "ar_SA";
+ case SUBLANG_ARABIC_IRAQ: return "ar_IQ";
+ case SUBLANG_ARABIC_EGYPT: return "ar_EG";
+ case SUBLANG_ARABIC_LIBYA: return "ar_LY";
+ case SUBLANG_ARABIC_ALGERIA: return "ar_DZ";
+ case SUBLANG_ARABIC_MOROCCO: return "ar_MA";
+ case SUBLANG_ARABIC_TUNISIA: return "ar_TN";
+ case SUBLANG_ARABIC_OMAN: return "ar_OM";
+ case SUBLANG_ARABIC_YEMEN: return "ar_YE";
+ case SUBLANG_ARABIC_SYRIA: return "ar_SY";
+ case SUBLANG_ARABIC_JORDAN: return "ar_JO";
+ case SUBLANG_ARABIC_LEBANON: return "ar_LB";
+ case SUBLANG_ARABIC_KUWAIT: return "ar_KW";
+ case SUBLANG_ARABIC_UAE: return "ar_AE";
+ case SUBLANG_ARABIC_BAHRAIN: return "ar_BH";
+ case SUBLANG_ARABIC_QATAR: return "ar_QA";
+ }
+ return "ar";
+ case LANG_ARMENIAN: return "hy_AM";
+ case LANG_ASSAMESE: return "as_IN";
+ case LANG_AZERI:
+ switch (sub)
+ {
+ /* FIXME: Adjust this when Azerbaijani locales appear on Unix. */
+ case SUBLANG_AZERI_LATIN: return "az_AZ@latin";
+ case SUBLANG_AZERI_CYRILLIC: return "az_AZ@cyrillic";
+ }
+ return "az";
+ case LANG_BASQUE:
+ return "eu"; /* Ambiguous: could be "eu_ES" or "eu_FR". */
+ case LANG_BELARUSIAN: return "be_BY";
+ case LANG_BENGALI:
+ switch (sub)
+ {
+ case SUBLANG_BENGALI_INDIA: return "bn_IN";
+ case SUBLANG_BENGALI_BANGLADESH: return "bn_BD";
+ }
+ return "bn";
+ case LANG_BULGARIAN: return "bg_BG";
+ case LANG_BURMESE: return "my_MM";
+ case LANG_CAMBODIAN: return "km_KH";
+ case LANG_CATALAN: return "ca_ES";
+ case LANG_CHEROKEE: return "chr_US";
+ case LANG_CHINESE:
+ switch (sub)
+ {
+ case SUBLANG_CHINESE_TRADITIONAL: return "zh_TW";
+ case SUBLANG_CHINESE_SIMPLIFIED: return "zh_CN";
+ case SUBLANG_CHINESE_HONGKONG: return "zh_HK";
+ case SUBLANG_CHINESE_SINGAPORE: return "zh_SG";
+ case SUBLANG_CHINESE_MACAU: return "zh_MO";
+ }
+ return "zh";
+ case LANG_CROATIAN: /* LANG_CROATIAN == LANG_SERBIAN
+ * What used to be called Serbo-Croatian
+ * should really now be two separate
+ * languages because of political reasons.
+ * (Says tml, who knows nothing about Serbian
+ * or Croatian.)
+ * (I can feel those flames coming already.)
+ */
+ switch (sub)
+ {
+ case SUBLANG_DEFAULT: return "hr_HR";
+ case SUBLANG_SERBIAN_LATIN: return "sr_CS";
+ case SUBLANG_SERBIAN_CYRILLIC: return "sr_CS@cyrillic";
+ }
+ return "hr";
+ case LANG_CZECH: return "cs_CZ";
+ case LANG_DANISH: return "da_DK";
+ case LANG_DIVEHI: return "dv_MV";
+ case LANG_DUTCH:
+ switch (sub)
+ {
+ case SUBLANG_DUTCH: return "nl_NL";
+ case SUBLANG_DUTCH_BELGIAN: /* FLEMISH, VLAAMS */ return "nl_BE";
+ }
+ return "nl";
+ case LANG_EDO: return "bin_NG";
+ case LANG_ENGLISH:
+ switch (sub)
+ {
+ /* SUBLANG_ENGLISH_US == SUBLANG_DEFAULT. Heh. I thought
+ * English was the language spoken in England.
+ * Oh well.
+ */
+ case SUBLANG_ENGLISH_US: return "en_US";
+ case SUBLANG_ENGLISH_UK: return "en_GB";
+ case SUBLANG_ENGLISH_AUS: return "en_AU";
+ case SUBLANG_ENGLISH_CAN: return "en_CA";
+ case SUBLANG_ENGLISH_NZ: return "en_NZ";
+ case SUBLANG_ENGLISH_EIRE: return "en_IE";
+ case SUBLANG_ENGLISH_SOUTH_AFRICA: return "en_ZA";
+ case SUBLANG_ENGLISH_JAMAICA: return "en_JM";
+ case SUBLANG_ENGLISH_CARIBBEAN: return "en_GD"; /* Grenada? */
+ case SUBLANG_ENGLISH_BELIZE: return "en_BZ";
+ case SUBLANG_ENGLISH_TRINIDAD: return "en_TT";
+ case SUBLANG_ENGLISH_ZIMBABWE: return "en_ZW";
+ case SUBLANG_ENGLISH_PHILIPPINES: return "en_PH";
+ case SUBLANG_ENGLISH_INDONESIA: return "en_ID";
+ case SUBLANG_ENGLISH_HONGKONG: return "en_HK";
+ case SUBLANG_ENGLISH_INDIA: return "en_IN";
+ case SUBLANG_ENGLISH_MALAYSIA: return "en_MY";
+ case SUBLANG_ENGLISH_SINGAPORE: return "en_SG";
+ }
+ return "en";
+ case LANG_ESTONIAN: return "et_EE";
+ case LANG_FAEROESE: return "fo_FO";
+ case LANG_FARSI: return "fa_IR";
+ case LANG_FINNISH: return "fi_FI";
+ case LANG_FRENCH:
+ switch (sub)
+ {
+ case SUBLANG_FRENCH: return "fr_FR";
+ case SUBLANG_FRENCH_BELGIAN: /* WALLOON */ return "fr_BE";
+ case SUBLANG_FRENCH_CANADIAN: return "fr_CA";
+ case SUBLANG_FRENCH_SWISS: return "fr_CH";
+ case SUBLANG_FRENCH_LUXEMBOURG: return "fr_LU";
+ case SUBLANG_FRENCH_MONACO: return "fr_MC";
+ case SUBLANG_FRENCH_WESTINDIES: return "fr"; /* Caribbean? */
+ case SUBLANG_FRENCH_REUNION: return "fr_RE";
+ case SUBLANG_FRENCH_CONGO: return "fr_CG";
+ case SUBLANG_FRENCH_SENEGAL: return "fr_SN";
+ case SUBLANG_FRENCH_CAMEROON: return "fr_CM";
+ case SUBLANG_FRENCH_COTEDIVOIRE: return "fr_CI";
+ case SUBLANG_FRENCH_MALI: return "fr_ML";
+ case SUBLANG_FRENCH_MOROCCO: return "fr_MA";
+ case SUBLANG_FRENCH_HAITI: return "fr_HT";
+ }
+ return "fr";
+ case LANG_FRISIAN: return "fy_NL";
+ case LANG_FULFULDE:
+ /* Spoken in Nigeria, Guinea, Senegal, Mali, Niger, Cameroon, Benin. */
+ return "ff_NG";
+ case LANG_GAELIC:
+ switch (sub)
+ {
+ case 0x01: /* SCOTTISH */ return "gd_GB";
+ case 0x02: /* IRISH */ return "ga_IE";
+ }
+ return "C";
+ case LANG_GALICIAN: return "gl_ES";
+ case LANG_GEORGIAN: return "ka_GE";
+ case LANG_GERMAN:
+ switch (sub)
+ {
+ case SUBLANG_GERMAN: return "de_DE";
+ case SUBLANG_GERMAN_SWISS: return "de_CH";
+ case SUBLANG_GERMAN_AUSTRIAN: return "de_AT";
+ case SUBLANG_GERMAN_LUXEMBOURG: return "de_LU";
+ case SUBLANG_GERMAN_LIECHTENSTEIN: return "de_LI";
+ }
+ return "de";
+ case LANG_GREEK: return "el_GR";
+ case LANG_GUARANI: return "gn_PY";
+ case LANG_GUJARATI: return "gu_IN";
+ case LANG_HAUSA: return "ha_NG";
+ case LANG_HAWAIIAN:
+ /* FIXME: Do they mean Hawaiian ("haw_US", 1000 speakers)
+ or Hawaii Creole English ("cpe_US", 600000 speakers)? */
+ return "cpe_US";
+ case LANG_HEBREW: return "he_IL";
+ case LANG_HINDI: return "hi_IN";
+ case LANG_HUNGARIAN: return "hu_HU";
+ case LANG_IBIBIO: return "nic_NG";
+ case LANG_ICELANDIC: return "is_IS";
+ case LANG_IGBO: return "ig_NG";
+ case LANG_INDONESIAN: return "id_ID";
+ case LANG_INUKTITUT: return "iu_CA";
+ case LANG_ITALIAN:
+ switch (sub)
+ {
+ case SUBLANG_ITALIAN: return "it_IT";
+ case SUBLANG_ITALIAN_SWISS: return "it_CH";
+ }
+ return "it";
+ case LANG_JAPANESE: return "ja_JP";
+ case LANG_KANNADA: return "kn_IN";
+ case LANG_KANURI: return "kr_NG";
+ case LANG_KASHMIRI:
+ switch (sub)
+ {
+ case SUBLANG_DEFAULT: return "ks_PK";
+ case SUBLANG_KASHMIRI_INDIA: return "ks_IN";
+ }
+ return "ks";
+ case LANG_KAZAK: return "kk_KZ";
+ case LANG_KONKANI:
+ /* FIXME: Adjust this when such locales appear on Unix. */
+ return "kok_IN";
+ case LANG_KOREAN: return "ko_KR";
+ case LANG_KYRGYZ: return "ky_KG";
+ case LANG_LAO: return "lo_LA";
+ case LANG_LATIN: return "la_VA";
+ case LANG_LATVIAN: return "lv_LV";
+ case LANG_LITHUANIAN: return "lt_LT";
+ case LANG_MACEDONIAN: return "mk_MK";
+ case LANG_MALAY:
+ switch (sub)
+ {
+ case SUBLANG_MALAY_MALAYSIA: return "ms_MY";
+ case SUBLANG_MALAY_BRUNEI_DARUSSALAM: return "ms_BN";
+ }
+ return "ms";
+ case LANG_MALAYALAM: return "ml_IN";
+ case LANG_MALTESE: return "mt_MT";
+ case LANG_MANIPURI:
+ /* FIXME: Adjust this when such locales appear on Unix. */
+ return "mni_IN";
+ case LANG_MARATHI: return "mr_IN";
+ case LANG_MONGOLIAN:
+ return "mn"; /* Ambiguous: could be "mn_CN" or "mn_MN". */
+ case LANG_NEPALI:
+ switch (sub)
+ {
+ case SUBLANG_DEFAULT: return "ne_NP";
+ case SUBLANG_NEPALI_INDIA: return "ne_IN";
+ }
+ return "ne";
+ case LANG_NORWEGIAN:
+ switch (sub)
+ {
+ case SUBLANG_NORWEGIAN_BOKMAL: return "no_NO";
+ case SUBLANG_NORWEGIAN_NYNORSK: return "nn_NO";
+ }
+ return "no";
+ case LANG_ORIYA: return "or_IN";
+ case LANG_OROMO: return "om_ET";
+ case LANG_PAPIAMENTU: return "pap_AN";
+ case LANG_PASHTO:
+ return "ps"; /* Ambiguous: could be "ps_PK" or "ps_AF". */
+ case LANG_POLISH: return "pl_PL";
+ case LANG_PORTUGUESE:
+ switch (sub)
+ {
+ case SUBLANG_PORTUGUESE: return "pt_PT";
+ /* Hmm. SUBLANG_PORTUGUESE_BRAZILIAN == SUBLANG_DEFAULT.
+ Same phenomenon as SUBLANG_ENGLISH_US == SUBLANG_DEFAULT. */
+ case SUBLANG_PORTUGUESE_BRAZILIAN: return "pt_BR";
+ }
+ return "pt";
+ case LANG_PUNJABI:
+ switch (sub)
+ {
+ case SUBLANG_PUNJABI_INDIA: return "pa_IN"; /* Gurmukhi script */
+ case SUBLANG_PUNJABI_PAKISTAN: return "pa_PK"; /* Arabic script */
+ }
+ return "pa";
+ case LANG_RHAETO_ROMANCE: return "rm_CH";
+ case LANG_ROMANIAN:
+ switch (sub)
+ {
+ case SUBLANG_ROMANIAN_ROMANIA: return "ro_RO";
+ case SUBLANG_ROMANIAN_MOLDOVA: return "ro_MD";
+ }
+ return "ro";
+ case LANG_RUSSIAN:
+ return "ru"; /* Ambiguous: could be "ru_RU" or "ru_UA" or "ru_MD". */
+ case LANG_SAAMI: /* actually Northern Sami */ return "se_NO";
+ case LANG_SANSKRIT: return "sa_IN";
+ case LANG_SINDHI:
+ switch (sub)
+ {
+ case SUBLANG_SINDHI_INDIA: return "sd_IN";
+ case SUBLANG_SINDHI_PAKISTAN: return "sd_PK";
+ }
+ return "sd";
+ case LANG_SINHALESE: return "si_LK";
+ case LANG_SLOVAK: return "sk_SK";
+ case LANG_SLOVENIAN: return "sl_SI";
+ case LANG_SOMALI: return "so_SO";
+ case LANG_SORBIAN:
+ /* FIXME: Adjust this when such locales appear on Unix. */
+ return "wen_DE";
+ case LANG_SPANISH:
+ switch (sub)
+ {
+ case SUBLANG_SPANISH: return "es_ES";
+ case SUBLANG_SPANISH_MEXICAN: return "es_MX";
+ case SUBLANG_SPANISH_MODERN:
+ return "es_ES@modern"; /* not seen on Unix */
+ case SUBLANG_SPANISH_GUATEMALA: return "es_GT";
+ case SUBLANG_SPANISH_COSTA_RICA: return "es_CR";
+ case SUBLANG_SPANISH_PANAMA: return "es_PA";
+ case SUBLANG_SPANISH_DOMINICAN_REPUBLIC: return "es_DO";
+ case SUBLANG_SPANISH_VENEZUELA: return "es_VE";
+ case SUBLANG_SPANISH_COLOMBIA: return "es_CO";
+ case SUBLANG_SPANISH_PERU: return "es_PE";
+ case SUBLANG_SPANISH_ARGENTINA: return "es_AR";
+ case SUBLANG_SPANISH_ECUADOR: return "es_EC";
+ case SUBLANG_SPANISH_CHILE: return "es_CL";
+ case SUBLANG_SPANISH_URUGUAY: return "es_UY";
+ case SUBLANG_SPANISH_PARAGUAY: return "es_PY";
+ case SUBLANG_SPANISH_BOLIVIA: return "es_BO";
+ case SUBLANG_SPANISH_EL_SALVADOR: return "es_SV";
+ case SUBLANG_SPANISH_HONDURAS: return "es_HN";
+ case SUBLANG_SPANISH_NICARAGUA: return "es_NI";
+ case SUBLANG_SPANISH_PUERTO_RICO: return "es_PR";
+ }
+ return "es";
+ case LANG_SUTU: return "bnt_TZ"; /* or "st_LS" or "nso_ZA"? */
+ case LANG_SWAHILI: return "sw_KE";
+ case LANG_SWEDISH:
+ switch (sub)
+ {
+ case SUBLANG_DEFAULT: return "sv_SE";
+ case SUBLANG_SWEDISH_FINLAND: return "sv_FI";
+ }
+ return "sv";
+ case LANG_SYRIAC: return "syr_TR"; /* An extinct language. */
+ case LANG_TAGALOG: return "tl_PH";
+ case LANG_TAJIK: return "tg_TJ";
+ case LANG_TAMAZIGHT:
+ switch (sub)
+ {
+ /* FIXME: Adjust this when Tamazight locales appear on Unix. */
+ case SUBLANG_TAMAZIGHT_ARABIC: return "ber_MA@arabic";
+ case SUBLANG_TAMAZIGHT_LATIN: return "ber_MA@latin";
+ }
+ return "ber_MA";
+ case LANG_TAMIL:
+ return "ta"; /* Ambiguous: could be "ta_IN" or "ta_LK" or "ta_SG". */
+ case LANG_TATAR: return "tt_RU";
+ case LANG_TELUGU: return "te_IN";
+ case LANG_THAI: return "th_TH";
+ case LANG_TIBETAN: return "bo_CN";
+ case LANG_TIGRINYA:
+ switch (sub)
+ {
+ case SUBLANG_TIGRINYA_ETHIOPIA: return "ti_ET";
+ case SUBLANG_TIGRINYA_ERITREA: return "ti_ER";
+ }
+ return "ti";
+ case LANG_TSONGA: return "ts_ZA";
+ case LANG_TSWANA: return "tn_BW";
+ case LANG_TURKISH: return "tr_TR";
+ case LANG_TURKMEN: return "tk_TM";
+ case LANG_UKRAINIAN: return "uk_UA";
+ case LANG_URDU:
+ switch (sub)
+ {
+ case SUBLANG_URDU_PAKISTAN: return "ur_PK";
+ case SUBLANG_URDU_INDIA: return "ur_IN";
+ }
+ return "ur";
+ case LANG_UZBEK:
+ switch (sub)
+ {
+ case SUBLANG_UZBEK_LATIN: return "uz_UZ";
+ case SUBLANG_UZBEK_CYRILLIC: return "uz_UZ@cyrillic";
+ }
+ return "uz";
+ case LANG_VENDA: return "ve_ZA";
+ case LANG_VIETNAMESE: return "vi_VN";
+ case LANG_WELSH: return "cy_GB";
+ case LANG_XHOSA: return "xh_ZA";
+ case LANG_YI: return "sit_CN";
+ case LANG_YIDDISH: return "yi_IL";
+ case LANG_YORUBA: return "yo_NG";
+ case LANG_ZULU: return "zu_ZA";
+ default: return "C";
+ }
+
+#endif
+}
diff --git a/macros/texinfo/contrib/texinfo-hu/texinfo/intl/log.c b/macros/texinfo/contrib/texinfo-hu/texinfo/intl/log.c
new file mode 100644
index 0000000000..cb6076e80f
--- /dev/null
+++ b/macros/texinfo/contrib/texinfo-hu/texinfo/intl/log.c
@@ -0,0 +1,98 @@
+/* Log file output.
+ Copyright (C) 2003 Free Software Foundation, Inc.
+
+ This program is free software; you can redistribute it and/or modify it
+ under the terms of the GNU Library General Public License as published
+ 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
+ Library General Public License for more details.
+
+ You should have received a copy of the GNU Library General Public
+ License along with this program; if not, write to the Free Software
+ Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307,
+ USA. */
+
+/* Written by Bruno Haible <bruno@clisp.org>. */
+
+#ifdef HAVE_CONFIG_H
+# include <config.h>
+#endif
+
+#include <stdio.h>
+#include <stdlib.h>
+#include <string.h>
+
+/* Print an ASCII string with quotes and escape sequences where needed. */
+static void
+print_escaped (FILE *stream, const char *str)
+{
+ putc ('"', stream);
+ for (; *str != '\0'; str++)
+ if (*str == '\n')
+ {
+ fputs ("\\n\"", stream);
+ if (str[1] == '\0')
+ return;
+ fputs ("\n\"", stream);
+ }
+ else
+ {
+ if (*str == '"' || *str == '\\')
+ putc ('\\', stream);
+ putc (*str, stream);
+ }
+ putc ('"', stream);
+}
+
+/* Add to the log file an entry denoting a failed translation. */
+void
+_nl_log_untranslated (const char *logfilename, const char *domainname,
+ const char *msgid1, const char *msgid2, int plural)
+{
+ static char *last_logfilename = NULL;
+ static FILE *last_logfile = NULL;
+ FILE *logfile;
+
+ /* Can we reuse the last opened logfile? */
+ if (last_logfilename == NULL || strcmp (logfilename, last_logfilename) != 0)
+ {
+ /* Close the last used logfile. */
+ if (last_logfilename != NULL)
+ {
+ if (last_logfile != NULL)
+ {
+ fclose (last_logfile);
+ last_logfile = NULL;
+ }
+ free (last_logfilename);
+ last_logfilename = NULL;
+ }
+ /* Open the logfile. */
+ last_logfilename = (char *) malloc (strlen (logfilename) + 1);
+ if (last_logfilename == NULL)
+ return;
+ strcpy (last_logfilename, logfilename);
+ last_logfile = fopen (logfilename, "a");
+ if (last_logfile == NULL)
+ return;
+ }
+ logfile = last_logfile;
+
+ fprintf (logfile, "domain ");
+ print_escaped (logfile, domainname);
+ fprintf (logfile, "\nmsgid ");
+ print_escaped (logfile, msgid1);
+ if (plural)
+ {
+ fprintf (logfile, "\nmsgid_plural ");
+ print_escaped (logfile, msgid2);
+ fprintf (logfile, "\nmsgstr[0] \"\"\n");
+ }
+ else
+ fprintf (logfile, "\nmsgstr \"\"\n");
+ putc ('\n', logfile);
+}
diff --git a/macros/texinfo/contrib/texinfo-hu/texinfo/intl/ngettext.c b/macros/texinfo/contrib/texinfo-hu/texinfo/intl/ngettext.c
new file mode 100644
index 0000000000..e73e00c48b
--- /dev/null
+++ b/macros/texinfo/contrib/texinfo-hu/texinfo/intl/ngettext.c
@@ -0,0 +1,65 @@
+/* Implementation of ngettext(3) function.
+ Copyright (C) 1995, 1997, 2000-2003 Free Software Foundation, Inc.
+
+ This program is free software; you can redistribute it and/or modify it
+ under the terms of the GNU Library General Public License as published
+ 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
+ Library General Public License for more details.
+
+ You should have received a copy of the GNU Library General Public
+ License along with this program; if not, write to the Free Software
+ Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307,
+ USA. */
+
+#ifdef HAVE_CONFIG_H
+# include <config.h>
+#endif
+
+#ifdef _LIBC
+# define __need_NULL
+# include <stddef.h>
+#else
+# include <stdlib.h> /* Just for NULL. */
+#endif
+
+#include "gettextP.h"
+#ifdef _LIBC
+# include <libintl.h>
+#else
+# include "libgnuintl.h"
+#endif
+
+#include <locale.h>
+
+/* @@ end of prolog @@ */
+
+/* Names for the libintl functions are a problem. They must not clash
+ with existing names and they should follow ANSI C. But this source
+ code is also used in GNU C Library where the names have a __
+ prefix. So we have to make a difference here. */
+#ifdef _LIBC
+# define NGETTEXT __ngettext
+# define DCNGETTEXT __dcngettext
+#else
+# define NGETTEXT libintl_ngettext
+# define DCNGETTEXT libintl_dcngettext
+#endif
+
+/* Look up MSGID in the current default message catalog for the current
+ LC_MESSAGES locale. If not found, returns MSGID itself (the default
+ text). */
+char *
+NGETTEXT (const char *msgid1, const char *msgid2, unsigned long int n)
+{
+ return DCNGETTEXT (NULL, msgid1, msgid2, n, LC_MESSAGES);
+}
+
+#ifdef _LIBC
+/* Alias for function name in GNU C Library. */
+weak_alias (__ngettext, ngettext);
+#endif
diff --git a/macros/texinfo/contrib/texinfo-hu/texinfo/intl/os2compat.c b/macros/texinfo/contrib/texinfo-hu/texinfo/intl/os2compat.c
new file mode 100644
index 0000000000..c8dc33e7cf
--- /dev/null
+++ b/macros/texinfo/contrib/texinfo-hu/texinfo/intl/os2compat.c
@@ -0,0 +1,98 @@
+/* OS/2 compatibility functions.
+ Copyright (C) 2001-2002 Free Software Foundation, Inc.
+
+ This program is free software; you can redistribute it and/or modify it
+ under the terms of the GNU Library General Public License as published
+ 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
+ Library General Public License for more details.
+
+ You should have received a copy of the GNU Library General Public
+ License along with this program; if not, write to the Free Software
+ Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307,
+ USA. */
+
+#define OS2_AWARE
+#ifdef HAVE_CONFIG_H
+#include <config.h>
+#endif
+
+#include <stdlib.h>
+#include <string.h>
+#include <sys/param.h>
+
+/* A version of getenv() that works from DLLs */
+extern unsigned long DosScanEnv (const unsigned char *pszName, unsigned char **ppszValue);
+
+char *
+_nl_getenv (const char *name)
+{
+ unsigned char *value;
+ if (DosScanEnv (name, &value))
+ return NULL;
+ else
+ return value;
+}
+
+/* A fixed size buffer. */
+char libintl_nl_default_dirname[MAXPATHLEN+1];
+
+char *_nlos2_libdir = NULL;
+char *_nlos2_localealiaspath = NULL;
+char *_nlos2_localedir = NULL;
+
+static __attribute__((constructor)) void
+nlos2_initialize ()
+{
+ char *root = getenv ("UNIXROOT");
+ char *gnulocaledir = getenv ("GNULOCALEDIR");
+
+ _nlos2_libdir = gnulocaledir;
+ if (!_nlos2_libdir)
+ {
+ if (root)
+ {
+ size_t sl = strlen (root);
+ _nlos2_libdir = (char *) malloc (sl + strlen (LIBDIR) + 1);
+ memcpy (_nlos2_libdir, root, sl);
+ memcpy (_nlos2_libdir + sl, LIBDIR, strlen (LIBDIR) + 1);
+ }
+ else
+ _nlos2_libdir = LIBDIR;
+ }
+
+ _nlos2_localealiaspath = gnulocaledir;
+ if (!_nlos2_localealiaspath)
+ {
+ if (root)
+ {
+ size_t sl = strlen (root);
+ _nlos2_localealiaspath = (char *) malloc (sl + strlen (LOCALE_ALIAS_PATH) + 1);
+ memcpy (_nlos2_localealiaspath, root, sl);
+ memcpy (_nlos2_localealiaspath + sl, LOCALE_ALIAS_PATH, strlen (LOCALE_ALIAS_PATH) + 1);
+ }
+ else
+ _nlos2_localealiaspath = LOCALE_ALIAS_PATH;
+ }
+
+ _nlos2_localedir = gnulocaledir;
+ if (!_nlos2_localedir)
+ {
+ if (root)
+ {
+ size_t sl = strlen (root);
+ _nlos2_localedir = (char *) malloc (sl + strlen (LOCALEDIR) + 1);
+ memcpy (_nlos2_localedir, root, sl);
+ memcpy (_nlos2_localedir + sl, LOCALEDIR, strlen (LOCALEDIR) + 1);
+ }
+ else
+ _nlos2_localedir = LOCALEDIR;
+ }
+
+ if (strlen (_nlos2_localedir) <= MAXPATHLEN)
+ strcpy (libintl_nl_default_dirname, _nlos2_localedir);
+}
diff --git a/macros/texinfo/contrib/texinfo-hu/texinfo/intl/os2compat.h b/macros/texinfo/contrib/texinfo-hu/texinfo/intl/os2compat.h
new file mode 100644
index 0000000000..4f74e8c037
--- /dev/null
+++ b/macros/texinfo/contrib/texinfo-hu/texinfo/intl/os2compat.h
@@ -0,0 +1,46 @@
+/* OS/2 compatibility defines.
+ This file is intended to be included from config.h
+ Copyright (C) 2001-2002 Free Software Foundation, Inc.
+
+ This program is free software; you can redistribute it and/or modify it
+ under the terms of the GNU Library General Public License as published
+ 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
+ Library General Public License for more details.
+
+ You should have received a copy of the GNU Library General Public
+ License along with this program; if not, write to the Free Software
+ Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307,
+ USA. */
+
+/* When included from os2compat.h we need all the original definitions */
+#ifndef OS2_AWARE
+
+#undef LIBDIR
+#define LIBDIR _nlos2_libdir
+extern char *_nlos2_libdir;
+
+#undef LOCALEDIR
+#define LOCALEDIR _nlos2_localedir
+extern char *_nlos2_localedir;
+
+#undef LOCALE_ALIAS_PATH
+#define LOCALE_ALIAS_PATH _nlos2_localealiaspath
+extern char *_nlos2_localealiaspath;
+
+#endif
+
+#undef HAVE_STRCASECMP
+#define HAVE_STRCASECMP 1
+#define strcasecmp stricmp
+#define strncasecmp strnicmp
+
+/* We have our own getenv() which works even if library is compiled as DLL */
+#define getenv _nl_getenv
+
+/* Older versions of gettext used -1 as the value of LC_MESSAGES */
+#define LC_MESSAGES_COMPAT (-1)
diff --git a/macros/texinfo/contrib/texinfo-hu/texinfo/intl/osdep.c b/macros/texinfo/contrib/texinfo-hu/texinfo/intl/osdep.c
new file mode 100644
index 0000000000..b372598381
--- /dev/null
+++ b/macros/texinfo/contrib/texinfo-hu/texinfo/intl/osdep.c
@@ -0,0 +1,24 @@
+/* OS dependent parts of libintl.
+ Copyright (C) 2001-2002 Free Software Foundation, Inc.
+
+ This program is free software; you can redistribute it and/or modify it
+ under the terms of the GNU Library General Public License as published
+ 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
+ Library General Public License for more details.
+
+ You should have received a copy of the GNU Library General Public
+ License along with this program; if not, write to the Free Software
+ Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307,
+ USA. */
+
+#if defined __EMX__
+# include "os2compat.c"
+#else
+/* Avoid AIX compiler warning. */
+typedef int dummy;
+#endif
diff --git a/macros/texinfo/contrib/texinfo-hu/texinfo/intl/plural-exp.c b/macros/texinfo/contrib/texinfo-hu/texinfo/intl/plural-exp.c
new file mode 100644
index 0000000000..8c04e64265
--- /dev/null
+++ b/macros/texinfo/contrib/texinfo-hu/texinfo/intl/plural-exp.c
@@ -0,0 +1,154 @@
+/* Expression parsing for plural form selection.
+ Copyright (C) 2000-2001, 2003 Free Software Foundation, Inc.
+ Written by Ulrich Drepper <drepper@cygnus.com>, 2000.
+
+ This program is free software; you can redistribute it and/or modify it
+ under the terms of the GNU Library General Public License as published
+ 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
+ Library General Public License for more details.
+
+ You should have received a copy of the GNU Library General Public
+ License along with this program; if not, write to the Free Software
+ Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307,
+ USA. */
+
+#ifdef HAVE_CONFIG_H
+# include <config.h>
+#endif
+
+#include <ctype.h>
+#include <stdlib.h>
+#include <string.h>
+
+#include "plural-exp.h"
+
+#if (defined __GNUC__ && !defined __APPLE_CC__) \
+ || (defined __STDC_VERSION__ && __STDC_VERSION__ >= 199901L)
+
+/* These structs are the constant expression for the germanic plural
+ form determination. It represents the expression "n != 1". */
+static const struct expression plvar =
+{
+ .nargs = 0,
+ .operation = var,
+};
+static const struct expression plone =
+{
+ .nargs = 0,
+ .operation = num,
+ .val =
+ {
+ .num = 1
+ }
+};
+struct expression GERMANIC_PLURAL =
+{
+ .nargs = 2,
+ .operation = not_equal,
+ .val =
+ {
+ .args =
+ {
+ [0] = (struct expression *) &plvar,
+ [1] = (struct expression *) &plone
+ }
+ }
+};
+
+# define INIT_GERMANIC_PLURAL()
+
+#else
+
+/* For compilers without support for ISO C 99 struct/union initializers:
+ Initialization at run-time. */
+
+static struct expression plvar;
+static struct expression plone;
+struct expression GERMANIC_PLURAL;
+
+static void
+init_germanic_plural ()
+{
+ if (plone.val.num == 0)
+ {
+ plvar.nargs = 0;
+ plvar.operation = var;
+
+ plone.nargs = 0;
+ plone.operation = num;
+ plone.val.num = 1;
+
+ GERMANIC_PLURAL.nargs = 2;
+ GERMANIC_PLURAL.operation = not_equal;
+ GERMANIC_PLURAL.val.args[0] = &plvar;
+ GERMANIC_PLURAL.val.args[1] = &plone;
+ }
+}
+
+# define INIT_GERMANIC_PLURAL() init_germanic_plural ()
+
+#endif
+
+void
+internal_function
+EXTRACT_PLURAL_EXPRESSION (const char *nullentry, struct expression **pluralp,
+ unsigned long int *npluralsp)
+{
+ if (nullentry != NULL)
+ {
+ const char *plural;
+ const char *nplurals;
+
+ plural = strstr (nullentry, "plural=");
+ nplurals = strstr (nullentry, "nplurals=");
+ if (plural == NULL || nplurals == NULL)
+ goto no_plural;
+ else
+ {
+ char *endp;
+ unsigned long int n;
+ struct parse_args args;
+
+ /* First get the number. */
+ nplurals += 9;
+ while (*nplurals != '\0' && isspace ((unsigned char) *nplurals))
+ ++nplurals;
+ if (!(*nplurals >= '0' && *nplurals <= '9'))
+ goto no_plural;
+#if defined HAVE_STRTOUL || defined _LIBC
+ n = strtoul (nplurals, &endp, 10);
+#else
+ for (endp = nplurals, n = 0; *endp >= '0' && *endp <= '9'; endp++)
+ n = n * 10 + (*endp - '0');
+#endif
+ if (nplurals == endp)
+ goto no_plural;
+ *npluralsp = n;
+
+ /* Due to the restrictions bison imposes onto the interface of the
+ scanner function we have to put the input string and the result
+ passed up from the parser into the same structure which address
+ is passed down to the parser. */
+ plural += 7;
+ args.cp = plural;
+ if (PLURAL_PARSE (&args) != 0)
+ goto no_plural;
+ *pluralp = args.res;
+ }
+ }
+ else
+ {
+ /* By default we are using the Germanic form: singular form only
+ for `one', the plural form otherwise. Yes, this is also what
+ English is using since English is a Germanic language. */
+ no_plural:
+ INIT_GERMANIC_PLURAL ();
+ *pluralp = &GERMANIC_PLURAL;
+ *npluralsp = 2;
+ }
+}
diff --git a/macros/texinfo/contrib/texinfo-hu/texinfo/intl/plural-exp.h b/macros/texinfo/contrib/texinfo-hu/texinfo/intl/plural-exp.h
new file mode 100644
index 0000000000..49e2c5bfc6
--- /dev/null
+++ b/macros/texinfo/contrib/texinfo-hu/texinfo/intl/plural-exp.h
@@ -0,0 +1,118 @@
+/* Expression parsing and evaluation for plural form selection.
+ Copyright (C) 2000-2003 Free Software Foundation, Inc.
+ Written by Ulrich Drepper <drepper@cygnus.com>, 2000.
+
+ This program is free software; you can redistribute it and/or modify it
+ under the terms of the GNU Library General Public License as published
+ 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
+ Library General Public License for more details.
+
+ You should have received a copy of the GNU Library General Public
+ License along with this program; if not, write to the Free Software
+ Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307,
+ USA. */
+
+#ifndef _PLURAL_EXP_H
+#define _PLURAL_EXP_H
+
+#ifndef internal_function
+# define internal_function
+#endif
+
+#ifndef attribute_hidden
+# define attribute_hidden
+#endif
+
+
+/* This is the representation of the expressions to determine the
+ plural form. */
+struct expression
+{
+ int nargs; /* Number of arguments. */
+ enum operator
+ {
+ /* Without arguments: */
+ var, /* The variable "n". */
+ num, /* Decimal number. */
+ /* Unary operators: */
+ lnot, /* Logical NOT. */
+ /* Binary operators: */
+ mult, /* Multiplication. */
+ divide, /* Division. */
+ module, /* Modulo operation. */
+ plus, /* Addition. */
+ minus, /* Subtraction. */
+ less_than, /* Comparison. */
+ greater_than, /* Comparison. */
+ less_or_equal, /* Comparison. */
+ greater_or_equal, /* Comparison. */
+ equal, /* Comparison for equality. */
+ not_equal, /* Comparison for inequality. */
+ land, /* Logical AND. */
+ lor, /* Logical OR. */
+ /* Ternary operators: */
+ qmop /* Question mark operator. */
+ } operation;
+ union
+ {
+ unsigned long int num; /* Number value for `num'. */
+ struct expression *args[3]; /* Up to three arguments. */
+ } val;
+};
+
+/* This is the data structure to pass information to the parser and get
+ the result in a thread-safe way. */
+struct parse_args
+{
+ const char *cp;
+ struct expression *res;
+};
+
+
+/* Names for the libintl functions are a problem. This source code is used
+ 1. in the GNU C Library library,
+ 2. in the GNU libintl library,
+ 3. in the GNU gettext tools.
+ The function names in each situation must be different, to allow for
+ binary incompatible changes in 'struct expression'. Furthermore,
+ 1. in the GNU C Library library, the names have a __ prefix,
+ 2.+3. in the GNU libintl library and in the GNU gettext tools, the names
+ must follow ANSI C and not start with __.
+ So we have to distinguish the three cases. */
+#ifdef _LIBC
+# define FREE_EXPRESSION __gettext_free_exp
+# define PLURAL_PARSE __gettextparse
+# define GERMANIC_PLURAL __gettext_germanic_plural
+# define EXTRACT_PLURAL_EXPRESSION __gettext_extract_plural
+#elif defined (IN_LIBINTL)
+# define FREE_EXPRESSION libintl_gettext_free_exp
+# define PLURAL_PARSE libintl_gettextparse
+# define GERMANIC_PLURAL libintl_gettext_germanic_plural
+# define EXTRACT_PLURAL_EXPRESSION libintl_gettext_extract_plural
+#else
+# define FREE_EXPRESSION free_plural_expression
+# define PLURAL_PARSE parse_plural_expression
+# define GERMANIC_PLURAL germanic_plural
+# define EXTRACT_PLURAL_EXPRESSION extract_plural_expression
+#endif
+
+extern void FREE_EXPRESSION (struct expression *exp)
+ internal_function;
+extern int PLURAL_PARSE (void *arg);
+extern struct expression GERMANIC_PLURAL attribute_hidden;
+extern void EXTRACT_PLURAL_EXPRESSION (const char *nullentry,
+ struct expression **pluralp,
+ unsigned long int *npluralsp)
+ internal_function;
+
+#if !defined (_LIBC) && !defined (IN_LIBINTL)
+extern unsigned long int plural_eval (struct expression *pexp,
+ unsigned long int n);
+#endif
+
+#endif /* _PLURAL_EXP_H */
diff --git a/macros/texinfo/contrib/texinfo-hu/texinfo/intl/plural.c b/macros/texinfo/contrib/texinfo-hu/texinfo/intl/plural.c
new file mode 100644
index 0000000000..72494f9eb9
--- /dev/null
+++ b/macros/texinfo/contrib/texinfo-hu/texinfo/intl/plural.c
@@ -0,0 +1,1490 @@
+/* A Bison parser, made from plural.y
+ by GNU bison 1.35. */
+
+#define YYBISON 1 /* Identify Bison output. */
+
+#define yyparse __gettextparse
+#define yylex __gettextlex
+#define yyerror __gettexterror
+#define yylval __gettextlval
+#define yychar __gettextchar
+#define yydebug __gettextdebug
+#define yynerrs __gettextnerrs
+# define EQUOP2 257
+# define CMPOP2 258
+# define ADDOP2 259
+# define MULOP2 260
+# define NUMBER 261
+
+#line 1 "plural.y"
+
+/* Expression parsing for plural form selection.
+ Copyright (C) 2000-2001, 2003 Free Software Foundation, Inc.
+ Written by Ulrich Drepper <drepper@cygnus.com>, 2000.
+
+ This program is free software; you can redistribute it and/or modify it
+ under the terms of the GNU Library General Public License as published
+ 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
+ Library General Public License for more details.
+
+ You should have received a copy of the GNU Library General Public
+ License along with this program; if not, write to the Free Software
+ Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307,
+ USA. */
+
+/* The bison generated parser uses alloca. AIX 3 forces us to put this
+ declaration at the beginning of the file. The declaration in bison's
+ skeleton file comes too late. This must come before <config.h>
+ because <config.h> may include arbitrary system headers. */
+#if defined _AIX && !defined __GNUC__
+ #pragma alloca
+#endif
+
+#ifdef HAVE_CONFIG_H
+# include <config.h>
+#endif
+
+#include <stddef.h>
+#include <stdlib.h>
+#include "plural-exp.h"
+
+/* The main function generated by the parser is called __gettextparse,
+ but we want it to be called PLURAL_PARSE. */
+#ifndef _LIBC
+# define __gettextparse PLURAL_PARSE
+#endif
+
+#define YYLEX_PARAM &((struct parse_args *) arg)->cp
+#define YYPARSE_PARAM arg
+
+#line 49 "plural.y"
+#ifndef YYSTYPE
+typedef union {
+ unsigned long int num;
+ enum operator op;
+ struct expression *exp;
+} yystype;
+# define YYSTYPE yystype
+# define YYSTYPE_IS_TRIVIAL 1
+#endif
+#line 55 "plural.y"
+
+/* Prototypes for local functions. */
+static int yylex (YYSTYPE *lval, const char **pexp);
+static void yyerror (const char *str);
+
+/* Allocation of expressions. */
+
+static struct expression *
+new_exp (int nargs, enum operator op, struct expression * const *args)
+{
+ int i;
+ struct expression *newp;
+
+ /* If any of the argument could not be malloc'ed, just return NULL. */
+ for (i = nargs - 1; i >= 0; i--)
+ if (args[i] == NULL)
+ goto fail;
+
+ /* Allocate a new expression. */
+ newp = (struct expression *) malloc (sizeof (*newp));
+ if (newp != NULL)
+ {
+ newp->nargs = nargs;
+ newp->operation = op;
+ for (i = nargs - 1; i >= 0; i--)
+ newp->val.args[i] = args[i];
+ return newp;
+ }
+
+ fail:
+ for (i = nargs - 1; i >= 0; i--)
+ FREE_EXPRESSION (args[i]);
+
+ return NULL;
+}
+
+static inline struct expression *
+new_exp_0 (enum operator op)
+{
+ return new_exp (0, op, NULL);
+}
+
+static inline struct expression *
+new_exp_1 (enum operator op, struct expression *right)
+{
+ struct expression *args[1];
+
+ args[0] = right;
+ return new_exp (1, op, args);
+}
+
+static struct expression *
+new_exp_2 (enum operator op, struct expression *left, struct expression *right)
+{
+ struct expression *args[2];
+
+ args[0] = left;
+ args[1] = right;
+ return new_exp (2, op, args);
+}
+
+static inline struct expression *
+new_exp_3 (enum operator op, struct expression *bexp,
+ struct expression *tbranch, struct expression *fbranch)
+{
+ struct expression *args[3];
+
+ args[0] = bexp;
+ args[1] = tbranch;
+ args[2] = fbranch;
+ return new_exp (3, op, args);
+}
+
+#ifndef YYDEBUG
+# define YYDEBUG 0
+#endif
+
+
+
+#define YYFINAL 27
+#define YYFLAG -32768
+#define YYNTBASE 16
+
+/* YYTRANSLATE(YYLEX) -- Bison token number corresponding to YYLEX. */
+#define YYTRANSLATE(x) ((unsigned)(x) <= 261 ? yytranslate[x] : 18)
+
+/* YYTRANSLATE[YYLEX] -- Bison token number corresponding to YYLEX. */
+static const char yytranslate[] =
+{
+ 0, 2, 2, 2, 2, 2, 2, 2, 2, 2,
+ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
+ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
+ 2, 2, 2, 10, 2, 2, 2, 2, 5, 2,
+ 14, 15, 2, 2, 2, 2, 2, 2, 2, 2,
+ 2, 2, 2, 2, 2, 2, 2, 2, 12, 2,
+ 2, 2, 2, 3, 2, 2, 2, 2, 2, 2,
+ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
+ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
+ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
+ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
+ 13, 2, 2, 2, 2, 2, 2, 2, 2, 2,
+ 2, 2, 2, 2, 4, 2, 2, 2, 2, 2,
+ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
+ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
+ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
+ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
+ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
+ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
+ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
+ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
+ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
+ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
+ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
+ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
+ 2, 2, 2, 2, 2, 2, 1, 6, 7, 8,
+ 9, 11
+};
+
+#if YYDEBUG
+static const short yyprhs[] =
+{
+ 0, 0, 2, 8, 12, 16, 20, 24, 28, 32,
+ 35, 37, 39
+};
+static const short yyrhs[] =
+{
+ 17, 0, 17, 3, 17, 12, 17, 0, 17, 4,
+ 17, 0, 17, 5, 17, 0, 17, 6, 17, 0,
+ 17, 7, 17, 0, 17, 8, 17, 0, 17, 9,
+ 17, 0, 10, 17, 0, 13, 0, 11, 0, 14,
+ 17, 15, 0
+};
+
+#endif
+
+#if YYDEBUG
+/* YYRLINE[YYN] -- source line where rule number YYN was defined. */
+static const short yyrline[] =
+{
+ 0, 150, 158, 162, 166, 170, 174, 178, 182, 186,
+ 190, 194, 199
+};
+#endif
+
+
+#if (YYDEBUG) || defined YYERROR_VERBOSE
+
+/* YYTNAME[TOKEN_NUM] -- String name of the token TOKEN_NUM. */
+static const char *const yytname[] =
+{
+ "$", "error", "$undefined.", "'?'", "'|'", "'&'", "EQUOP2", "CMPOP2",
+ "ADDOP2", "MULOP2", "'!'", "NUMBER", "':'", "'n'", "'('", "')'",
+ "start", "exp", 0
+};
+#endif
+
+/* YYR1[YYN] -- Symbol number of symbol that rule YYN derives. */
+static const short yyr1[] =
+{
+ 0, 16, 17, 17, 17, 17, 17, 17, 17, 17,
+ 17, 17, 17
+};
+
+/* YYR2[YYN] -- Number of symbols composing right hand side of rule YYN. */
+static const short yyr2[] =
+{
+ 0, 1, 5, 3, 3, 3, 3, 3, 3, 2,
+ 1, 1, 3
+};
+
+/* YYDEFACT[S] -- default rule to reduce with in state S when YYTABLE
+ doesn't specify something else to do. Zero means the default is an
+ error. */
+static const short yydefact[] =
+{
+ 0, 0, 11, 10, 0, 1, 9, 0, 0, 0,
+ 0, 0, 0, 0, 0, 12, 0, 3, 4, 5,
+ 6, 7, 8, 0, 2, 0, 0, 0
+};
+
+static const short yydefgoto[] =
+{
+ 25, 5
+};
+
+static const short yypact[] =
+{
+ -9, -9,-32768,-32768, -9, 34,-32768, 11, -9, -9,
+ -9, -9, -9, -9, -9,-32768, 24, 39, 43, 16,
+ 26, -3,-32768, -9, 34, 21, 53,-32768
+};
+
+static const short yypgoto[] =
+{
+ -32768, -1
+};
+
+
+#define YYLAST 53
+
+
+static const short yytable[] =
+{
+ 6, 1, 2, 7, 3, 4, 14, 16, 17, 18,
+ 19, 20, 21, 22, 8, 9, 10, 11, 12, 13,
+ 14, 26, 24, 12, 13, 14, 15, 8, 9, 10,
+ 11, 12, 13, 14, 13, 14, 23, 8, 9, 10,
+ 11, 12, 13, 14, 10, 11, 12, 13, 14, 11,
+ 12, 13, 14, 27
+};
+
+static const short yycheck[] =
+{
+ 1, 10, 11, 4, 13, 14, 9, 8, 9, 10,
+ 11, 12, 13, 14, 3, 4, 5, 6, 7, 8,
+ 9, 0, 23, 7, 8, 9, 15, 3, 4, 5,
+ 6, 7, 8, 9, 8, 9, 12, 3, 4, 5,
+ 6, 7, 8, 9, 5, 6, 7, 8, 9, 6,
+ 7, 8, 9, 0
+};
+#define YYPURE 1
+
+/* -*-C-*- Note some compilers choke on comments on `#line' lines. */
+#line 3 "/usr/local/share/bison/bison.simple"
+
+/* Skeleton output parser for bison,
+
+ Copyright (C) 1984, 1989, 1990, 2000, 2001, 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 2, or (at your option)
+ any later version.
+
+ This program is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ GNU General Public License for more details.
+
+ You should have received a copy of the GNU General Public License
+ along with this program; if not, write to the Free Software
+ Foundation, Inc., 59 Temple Place - Suite 330,
+ Boston, MA 02111-1307, USA. */
+
+/* As a special exception, when this file is copied by Bison into a
+ Bison output file, you may use that output file without restriction.
+ This special exception was added by the Free Software Foundation
+ in version 1.24 of Bison. */
+
+/* This is the parser code that is written into each bison parser when
+ the %semantic_parser declaration is not specified in the grammar.
+ It was written by Richard Stallman by simplifying the hairy parser
+ used when %semantic_parser is specified. */
+
+/* All symbols defined below should begin with yy or YY, to avoid
+ infringing on user name space. This should be done even for local
+ variables, as they might otherwise be expanded by user macros.
+ There are some unavoidable exceptions within include files to
+ define necessary library symbols; they are noted "INFRINGES ON
+ USER NAME SPACE" below. */
+
+#if ! defined (yyoverflow) || defined (YYERROR_VERBOSE)
+
+/* The parser invokes alloca or malloc; define the necessary symbols. */
+
+# if YYSTACK_USE_ALLOCA
+# define YYSTACK_ALLOC alloca
+# else
+# ifndef YYSTACK_USE_ALLOCA
+# if defined (alloca) || defined (_ALLOCA_H)
+# define YYSTACK_ALLOC alloca
+# else
+# ifdef __GNUC__
+# define YYSTACK_ALLOC __builtin_alloca
+# endif
+# endif
+# endif
+# endif
+
+# ifdef YYSTACK_ALLOC
+ /* Pacify GCC's `empty if-body' warning. */
+# define YYSTACK_FREE(Ptr) do { /* empty */; } while (0)
+# else
+# if defined (__STDC__) || defined (__cplusplus)
+# include <stdlib.h> /* INFRINGES ON USER NAME SPACE */
+# define YYSIZE_T size_t
+# endif
+# define YYSTACK_ALLOC malloc
+# define YYSTACK_FREE free
+# endif
+#endif /* ! defined (yyoverflow) || defined (YYERROR_VERBOSE) */
+
+
+#if (! defined (yyoverflow) \
+ && (! defined (__cplusplus) \
+ || (YYLTYPE_IS_TRIVIAL && YYSTYPE_IS_TRIVIAL)))
+
+/* A type that is properly aligned for any stack member. */
+union yyalloc
+{
+ short yyss;
+ YYSTYPE yyvs;
+# if YYLSP_NEEDED
+ YYLTYPE yyls;
+# endif
+};
+
+/* The size of the maximum gap between one aligned stack and the next. */
+# define YYSTACK_GAP_MAX (sizeof (union yyalloc) - 1)
+
+/* The size of an array large to enough to hold all stacks, each with
+ N elements. */
+# if YYLSP_NEEDED
+# define YYSTACK_BYTES(N) \
+ ((N) * (sizeof (short) + sizeof (YYSTYPE) + sizeof (YYLTYPE)) \
+ + 2 * YYSTACK_GAP_MAX)
+# else
+# define YYSTACK_BYTES(N) \
+ ((N) * (sizeof (short) + sizeof (YYSTYPE)) \
+ + YYSTACK_GAP_MAX)
+# endif
+
+/* Copy COUNT objects from FROM to TO. The source and destination do
+ not overlap. */
+# ifndef YYCOPY
+# if 1 < __GNUC__
+# define YYCOPY(To, From, Count) \
+ __builtin_memcpy (To, From, (Count) * sizeof (*(From)))
+# else
+# define YYCOPY(To, From, Count) \
+ do \
+ { \
+ register YYSIZE_T yyi; \
+ for (yyi = 0; yyi < (Count); yyi++) \
+ (To)[yyi] = (From)[yyi]; \
+ } \
+ while (0)
+# endif
+# endif
+
+/* Relocate STACK from its old location to the new one. The
+ local variables YYSIZE and YYSTACKSIZE give the old and new number of
+ elements in the stack, and YYPTR gives the new location of the
+ stack. Advance YYPTR to a properly aligned location for the next
+ stack. */
+# define YYSTACK_RELOCATE(Stack) \
+ do \
+ { \
+ YYSIZE_T yynewbytes; \
+ YYCOPY (&yyptr->Stack, Stack, yysize); \
+ Stack = &yyptr->Stack; \
+ yynewbytes = yystacksize * sizeof (*Stack) + YYSTACK_GAP_MAX; \
+ yyptr += yynewbytes / sizeof (*yyptr); \
+ } \
+ while (0)
+
+#endif
+
+
+#if ! defined (YYSIZE_T) && defined (__SIZE_TYPE__)
+# define YYSIZE_T __SIZE_TYPE__
+#endif
+#if ! defined (YYSIZE_T) && defined (size_t)
+# define YYSIZE_T size_t
+#endif
+#if ! defined (YYSIZE_T)
+# if defined (__STDC__) || defined (__cplusplus)
+# include <stddef.h> /* INFRINGES ON USER NAME SPACE */
+# define YYSIZE_T size_t
+# endif
+#endif
+#if ! defined (YYSIZE_T)
+# define YYSIZE_T unsigned int
+#endif
+
+#define yyerrok (yyerrstatus = 0)
+#define yyclearin (yychar = YYEMPTY)
+#define YYEMPTY -2
+#define YYEOF 0
+#define YYACCEPT goto yyacceptlab
+#define YYABORT goto yyabortlab
+#define YYERROR goto yyerrlab1
+/* Like YYERROR except do call yyerror. This remains here temporarily
+ to ease the transition to the new meaning of YYERROR, for GCC.
+ Once GCC version 2 has supplanted version 1, this can go. */
+#define YYFAIL goto yyerrlab
+#define YYRECOVERING() (!!yyerrstatus)
+#define YYBACKUP(Token, Value) \
+do \
+ if (yychar == YYEMPTY && yylen == 1) \
+ { \
+ yychar = (Token); \
+ yylval = (Value); \
+ yychar1 = YYTRANSLATE (yychar); \
+ YYPOPSTACK; \
+ goto yybackup; \
+ } \
+ else \
+ { \
+ yyerror ("syntax error: cannot back up"); \
+ YYERROR; \
+ } \
+while (0)
+
+#define YYTERROR 1
+#define YYERRCODE 256
+
+
+/* YYLLOC_DEFAULT -- Compute the default location (before the actions
+ are run).
+
+ When YYLLOC_DEFAULT is run, CURRENT is set the location of the
+ first token. By default, to implement support for ranges, extend
+ its range to the last symbol. */
+
+#ifndef YYLLOC_DEFAULT
+# define YYLLOC_DEFAULT(Current, Rhs, N) \
+ Current.last_line = Rhs[N].last_line; \
+ Current.last_column = Rhs[N].last_column;
+#endif
+
+
+/* YYLEX -- calling `yylex' with the right arguments. */
+
+#if YYPURE
+# if YYLSP_NEEDED
+# ifdef YYLEX_PARAM
+# define YYLEX yylex (&yylval, &yylloc, YYLEX_PARAM)
+# else
+# define YYLEX yylex (&yylval, &yylloc)
+# endif
+# else /* !YYLSP_NEEDED */
+# ifdef YYLEX_PARAM
+# define YYLEX yylex (&yylval, YYLEX_PARAM)
+# else
+# define YYLEX yylex (&yylval)
+# endif
+# endif /* !YYLSP_NEEDED */
+#else /* !YYPURE */
+# define YYLEX yylex ()
+#endif /* !YYPURE */
+
+
+/* Enable debugging if requested. */
+#if YYDEBUG
+
+# ifndef YYFPRINTF
+# include <stdio.h> /* INFRINGES ON USER NAME SPACE */
+# define YYFPRINTF fprintf
+# endif
+
+# define YYDPRINTF(Args) \
+do { \
+ if (yydebug) \
+ YYFPRINTF Args; \
+} while (0)
+/* Nonzero means print parse trace. It is left uninitialized so that
+ multiple parsers can coexist. */
+int yydebug;
+#else /* !YYDEBUG */
+# define YYDPRINTF(Args)
+#endif /* !YYDEBUG */
+
+/* YYINITDEPTH -- initial size of the parser's stacks. */
+#ifndef YYINITDEPTH
+# define YYINITDEPTH 200
+#endif
+
+/* YYMAXDEPTH -- maximum size the stacks can grow to (effective only
+ if the built-in stack extension method is used).
+
+ Do not make this value too large; the results are undefined if
+ SIZE_MAX < YYSTACK_BYTES (YYMAXDEPTH)
+ evaluated with infinite-precision integer arithmetic. */
+
+#if YYMAXDEPTH == 0
+# undef YYMAXDEPTH
+#endif
+
+#ifndef YYMAXDEPTH
+# define YYMAXDEPTH 10000
+#endif
+
+#ifdef YYERROR_VERBOSE
+
+# ifndef yystrlen
+# if defined (__GLIBC__) && defined (_STRING_H)
+# define yystrlen strlen
+# else
+/* Return the length of YYSTR. */
+static YYSIZE_T
+# if defined (__STDC__) || defined (__cplusplus)
+yystrlen (const char *yystr)
+# else
+yystrlen (yystr)
+ const char *yystr;
+# endif
+{
+ register const char *yys = yystr;
+
+ while (*yys++ != '\0')
+ continue;
+
+ return yys - yystr - 1;
+}
+# endif
+# endif
+
+# ifndef yystpcpy
+# if defined (__GLIBC__) && defined (_STRING_H) && defined (_GNU_SOURCE)
+# define yystpcpy stpcpy
+# else
+/* Copy YYSRC to YYDEST, returning the address of the terminating '\0' in
+ YYDEST. */
+static char *
+# if defined (__STDC__) || defined (__cplusplus)
+yystpcpy (char *yydest, const char *yysrc)
+# else
+yystpcpy (yydest, yysrc)
+ char *yydest;
+ const char *yysrc;
+# endif
+{
+ register char *yyd = yydest;
+ register const char *yys = yysrc;
+
+ while ((*yyd++ = *yys++) != '\0')
+ continue;
+
+ return yyd - 1;
+}
+# endif
+# endif
+#endif
+
+#line 315 "/usr/local/share/bison/bison.simple"
+
+
+/* The user can define YYPARSE_PARAM as the name of an argument to be passed
+ into yyparse. The argument should have type void *.
+ It should actually point to an object.
+ Grammar actions can access the variable by casting it
+ to the proper pointer type. */
+
+#ifdef YYPARSE_PARAM
+# if defined (__STDC__) || defined (__cplusplus)
+# define YYPARSE_PARAM_ARG void *YYPARSE_PARAM
+# define YYPARSE_PARAM_DECL
+# else
+# define YYPARSE_PARAM_ARG YYPARSE_PARAM
+# define YYPARSE_PARAM_DECL void *YYPARSE_PARAM;
+# endif
+#else /* !YYPARSE_PARAM */
+# define YYPARSE_PARAM_ARG
+# define YYPARSE_PARAM_DECL
+#endif /* !YYPARSE_PARAM */
+
+/* Prevent warning if -Wstrict-prototypes. */
+#ifdef __GNUC__
+# ifdef YYPARSE_PARAM
+int yyparse (void *);
+# else
+int yyparse (void);
+# endif
+#endif
+
+/* YY_DECL_VARIABLES -- depending whether we use a pure parser,
+ variables are global, or local to YYPARSE. */
+
+#define YY_DECL_NON_LSP_VARIABLES \
+/* The lookahead symbol. */ \
+int yychar; \
+ \
+/* The semantic value of the lookahead symbol. */ \
+YYSTYPE yylval; \
+ \
+/* Number of parse errors so far. */ \
+int yynerrs;
+
+#if YYLSP_NEEDED
+# define YY_DECL_VARIABLES \
+YY_DECL_NON_LSP_VARIABLES \
+ \
+/* Location data for the lookahead symbol. */ \
+YYLTYPE yylloc;
+#else
+# define YY_DECL_VARIABLES \
+YY_DECL_NON_LSP_VARIABLES
+#endif
+
+
+/* If nonreentrant, generate the variables here. */
+
+#if !YYPURE
+YY_DECL_VARIABLES
+#endif /* !YYPURE */
+
+int
+yyparse (YYPARSE_PARAM_ARG)
+ YYPARSE_PARAM_DECL
+{
+ /* If reentrant, generate the variables here. */
+#if YYPURE
+ YY_DECL_VARIABLES
+#endif /* !YYPURE */
+
+ register int yystate;
+ register int yyn;
+ int yyresult;
+ /* Number of tokens to shift before error messages enabled. */
+ int yyerrstatus;
+ /* Lookahead token as an internal (translated) token number. */
+ int yychar1 = 0;
+
+ /* Three stacks and their tools:
+ `yyss': related to states,
+ `yyvs': related to semantic values,
+ `yyls': related to locations.
+
+ Refer to the stacks thru separate pointers, to allow yyoverflow
+ to reallocate them elsewhere. */
+
+ /* The state stack. */
+ short yyssa[YYINITDEPTH];
+ short *yyss = yyssa;
+ register short *yyssp;
+
+ /* The semantic value stack. */
+ YYSTYPE yyvsa[YYINITDEPTH];
+ YYSTYPE *yyvs = yyvsa;
+ register YYSTYPE *yyvsp;
+
+#if YYLSP_NEEDED
+ /* The location stack. */
+ YYLTYPE yylsa[YYINITDEPTH];
+ YYLTYPE *yyls = yylsa;
+ YYLTYPE *yylsp;
+#endif
+
+#if YYLSP_NEEDED
+# define YYPOPSTACK (yyvsp--, yyssp--, yylsp--)
+#else
+# define YYPOPSTACK (yyvsp--, yyssp--)
+#endif
+
+ YYSIZE_T yystacksize = YYINITDEPTH;
+
+
+ /* The variables used to return semantic value and location from the
+ action routines. */
+ YYSTYPE yyval;
+#if YYLSP_NEEDED
+ YYLTYPE yyloc;
+#endif
+
+ /* When reducing, the number of symbols on the RHS of the reduced
+ rule. */
+ int yylen;
+
+ YYDPRINTF ((stderr, "Starting parse\n"));
+
+ yystate = 0;
+ yyerrstatus = 0;
+ yynerrs = 0;
+ yychar = YYEMPTY; /* Cause a token to be read. */
+
+ /* Initialize stack pointers.
+ Waste one element of value and location stack
+ so that they stay on the same level as the state stack.
+ The wasted elements are never initialized. */
+
+ yyssp = yyss;
+ yyvsp = yyvs;
+#if YYLSP_NEEDED
+ yylsp = yyls;
+#endif
+ goto yysetstate;
+
+/*------------------------------------------------------------.
+| yynewstate -- Push a new state, which is found in yystate. |
+`------------------------------------------------------------*/
+ yynewstate:
+ /* In all cases, when you get here, the value and location stacks
+ have just been pushed. so pushing a state here evens the stacks.
+ */
+ yyssp++;
+
+ yysetstate:
+ *yyssp = yystate;
+
+ if (yyssp >= yyss + yystacksize - 1)
+ {
+ /* Get the current used size of the three stacks, in elements. */
+ YYSIZE_T yysize = yyssp - yyss + 1;
+
+#ifdef yyoverflow
+ {
+ /* Give user a chance to reallocate the stack. Use copies of
+ these so that the &'s don't force the real ones into
+ memory. */
+ YYSTYPE *yyvs1 = yyvs;
+ short *yyss1 = yyss;
+
+ /* Each stack pointer address is followed by the size of the
+ data in use in that stack, in bytes. */
+# if YYLSP_NEEDED
+ YYLTYPE *yyls1 = yyls;
+ /* This used to be a conditional around just the two extra args,
+ but that might be undefined if yyoverflow is a macro. */
+ yyoverflow ("parser stack overflow",
+ &yyss1, yysize * sizeof (*yyssp),
+ &yyvs1, yysize * sizeof (*yyvsp),
+ &yyls1, yysize * sizeof (*yylsp),
+ &yystacksize);
+ yyls = yyls1;
+# else
+ yyoverflow ("parser stack overflow",
+ &yyss1, yysize * sizeof (*yyssp),
+ &yyvs1, yysize * sizeof (*yyvsp),
+ &yystacksize);
+# endif
+ yyss = yyss1;
+ yyvs = yyvs1;
+ }
+#else /* no yyoverflow */
+# ifndef YYSTACK_RELOCATE
+ goto yyoverflowlab;
+# else
+ /* Extend the stack our own way. */
+ if (yystacksize >= YYMAXDEPTH)
+ goto yyoverflowlab;
+ yystacksize *= 2;
+ if (yystacksize > YYMAXDEPTH)
+ yystacksize = YYMAXDEPTH;
+
+ {
+ short *yyss1 = yyss;
+ union yyalloc *yyptr =
+ (union yyalloc *) YYSTACK_ALLOC (YYSTACK_BYTES (yystacksize));
+ if (! yyptr)
+ goto yyoverflowlab;
+ YYSTACK_RELOCATE (yyss);
+ YYSTACK_RELOCATE (yyvs);
+# if YYLSP_NEEDED
+ YYSTACK_RELOCATE (yyls);
+# endif
+# undef YYSTACK_RELOCATE
+ if (yyss1 != yyssa)
+ YYSTACK_FREE (yyss1);
+ }
+# endif
+#endif /* no yyoverflow */
+
+ yyssp = yyss + yysize - 1;
+ yyvsp = yyvs + yysize - 1;
+#if YYLSP_NEEDED
+ yylsp = yyls + yysize - 1;
+#endif
+
+ YYDPRINTF ((stderr, "Stack size increased to %lu\n",
+ (unsigned long int) yystacksize));
+
+ if (yyssp >= yyss + yystacksize - 1)
+ YYABORT;
+ }
+
+ YYDPRINTF ((stderr, "Entering state %d\n", yystate));
+
+ goto yybackup;
+
+
+/*-----------.
+| yybackup. |
+`-----------*/
+yybackup:
+
+/* Do appropriate processing given the current state. */
+/* Read a lookahead token if we need one and don't already have one. */
+/* yyresume: */
+
+ /* First try to decide what to do without reference to lookahead token. */
+
+ yyn = yypact[yystate];
+ if (yyn == YYFLAG)
+ goto yydefault;
+
+ /* Not known => get a lookahead token if don't already have one. */
+
+ /* yychar is either YYEMPTY or YYEOF
+ or a valid token in external form. */
+
+ if (yychar == YYEMPTY)
+ {
+ YYDPRINTF ((stderr, "Reading a token: "));
+ yychar = YYLEX;
+ }
+
+ /* Convert token to internal form (in yychar1) for indexing tables with */
+
+ if (yychar <= 0) /* This means end of input. */
+ {
+ yychar1 = 0;
+ yychar = YYEOF; /* Don't call YYLEX any more */
+
+ YYDPRINTF ((stderr, "Now at end of input.\n"));
+ }
+ else
+ {
+ yychar1 = YYTRANSLATE (yychar);
+
+#if YYDEBUG
+ /* We have to keep this `#if YYDEBUG', since we use variables
+ which are defined only if `YYDEBUG' is set. */
+ if (yydebug)
+ {
+ YYFPRINTF (stderr, "Next token is %d (%s",
+ yychar, yytname[yychar1]);
+ /* Give the individual parser a way to print the precise
+ meaning of a token, for further debugging info. */
+# ifdef YYPRINT
+ YYPRINT (stderr, yychar, yylval);
+# endif
+ YYFPRINTF (stderr, ")\n");
+ }
+#endif
+ }
+
+ yyn += yychar1;
+ if (yyn < 0 || yyn > YYLAST || yycheck[yyn] != yychar1)
+ goto yydefault;
+
+ yyn = yytable[yyn];
+
+ /* yyn is what to do for this token type in this state.
+ Negative => reduce, -yyn is rule number.
+ Positive => shift, yyn is new state.
+ New state is final state => don't bother to shift,
+ just return success.
+ 0, or most negative number => error. */
+
+ if (yyn < 0)
+ {
+ if (yyn == YYFLAG)
+ goto yyerrlab;
+ yyn = -yyn;
+ goto yyreduce;
+ }
+ else if (yyn == 0)
+ goto yyerrlab;
+
+ if (yyn == YYFINAL)
+ YYACCEPT;
+
+ /* Shift the lookahead token. */
+ YYDPRINTF ((stderr, "Shifting token %d (%s), ",
+ yychar, yytname[yychar1]));
+
+ /* Discard the token being shifted unless it is eof. */
+ if (yychar != YYEOF)
+ yychar = YYEMPTY;
+
+ *++yyvsp = yylval;
+#if YYLSP_NEEDED
+ *++yylsp = yylloc;
+#endif
+
+ /* Count tokens shifted since error; after three, turn off error
+ status. */
+ if (yyerrstatus)
+ yyerrstatus--;
+
+ yystate = yyn;
+ goto yynewstate;
+
+
+/*-----------------------------------------------------------.
+| yydefault -- do the default action for the current state. |
+`-----------------------------------------------------------*/
+yydefault:
+ yyn = yydefact[yystate];
+ if (yyn == 0)
+ goto yyerrlab;
+ goto yyreduce;
+
+
+/*-----------------------------.
+| yyreduce -- Do a reduction. |
+`-----------------------------*/
+yyreduce:
+ /* yyn is the number of a rule to reduce with. */
+ yylen = yyr2[yyn];
+
+ /* If YYLEN is nonzero, implement the default value of the action:
+ `$$ = $1'.
+
+ Otherwise, the following line sets YYVAL to the semantic value of
+ the lookahead token. This behavior is undocumented and Bison
+ users should not rely upon it. Assigning to YYVAL
+ unconditionally makes the parser a bit smaller, and it avoids a
+ GCC warning that YYVAL may be used uninitialized. */
+ yyval = yyvsp[1-yylen];
+
+#if YYLSP_NEEDED
+ /* Similarly for the default location. Let the user run additional
+ commands if for instance locations are ranges. */
+ yyloc = yylsp[1-yylen];
+ YYLLOC_DEFAULT (yyloc, (yylsp - yylen), yylen);
+#endif
+
+#if YYDEBUG
+ /* We have to keep this `#if YYDEBUG', since we use variables which
+ are defined only if `YYDEBUG' is set. */
+ if (yydebug)
+ {
+ int yyi;
+
+ YYFPRINTF (stderr, "Reducing via rule %d (line %d), ",
+ yyn, yyrline[yyn]);
+
+ /* Print the symbols being reduced, and their result. */
+ for (yyi = yyprhs[yyn]; yyrhs[yyi] > 0; yyi++)
+ YYFPRINTF (stderr, "%s ", yytname[yyrhs[yyi]]);
+ YYFPRINTF (stderr, " -> %s\n", yytname[yyr1[yyn]]);
+ }
+#endif
+
+ switch (yyn) {
+
+case 1:
+#line 151 "plural.y"
+{
+ if (yyvsp[0].exp == NULL)
+ YYABORT;
+ ((struct parse_args *) arg)->res = yyvsp[0].exp;
+ }
+ break;
+case 2:
+#line 159 "plural.y"
+{
+ yyval.exp = new_exp_3 (qmop, yyvsp[-4].exp, yyvsp[-2].exp, yyvsp[0].exp);
+ }
+ break;
+case 3:
+#line 163 "plural.y"
+{
+ yyval.exp = new_exp_2 (lor, yyvsp[-2].exp, yyvsp[0].exp);
+ }
+ break;
+case 4:
+#line 167 "plural.y"
+{
+ yyval.exp = new_exp_2 (land, yyvsp[-2].exp, yyvsp[0].exp);
+ }
+ break;
+case 5:
+#line 171 "plural.y"
+{
+ yyval.exp = new_exp_2 (yyvsp[-1].op, yyvsp[-2].exp, yyvsp[0].exp);
+ }
+ break;
+case 6:
+#line 175 "plural.y"
+{
+ yyval.exp = new_exp_2 (yyvsp[-1].op, yyvsp[-2].exp, yyvsp[0].exp);
+ }
+ break;
+case 7:
+#line 179 "plural.y"
+{
+ yyval.exp = new_exp_2 (yyvsp[-1].op, yyvsp[-2].exp, yyvsp[0].exp);
+ }
+ break;
+case 8:
+#line 183 "plural.y"
+{
+ yyval.exp = new_exp_2 (yyvsp[-1].op, yyvsp[-2].exp, yyvsp[0].exp);
+ }
+ break;
+case 9:
+#line 187 "plural.y"
+{
+ yyval.exp = new_exp_1 (lnot, yyvsp[0].exp);
+ }
+ break;
+case 10:
+#line 191 "plural.y"
+{
+ yyval.exp = new_exp_0 (var);
+ }
+ break;
+case 11:
+#line 195 "plural.y"
+{
+ if ((yyval.exp = new_exp_0 (num)) != NULL)
+ yyval.exp->val.num = yyvsp[0].num;
+ }
+ break;
+case 12:
+#line 200 "plural.y"
+{
+ yyval.exp = yyvsp[-1].exp;
+ }
+ break;
+}
+
+#line 705 "/usr/local/share/bison/bison.simple"
+
+
+ yyvsp -= yylen;
+ yyssp -= yylen;
+#if YYLSP_NEEDED
+ yylsp -= yylen;
+#endif
+
+#if YYDEBUG
+ if (yydebug)
+ {
+ short *yyssp1 = yyss - 1;
+ YYFPRINTF (stderr, "state stack now");
+ while (yyssp1 != yyssp)
+ YYFPRINTF (stderr, " %d", *++yyssp1);
+ YYFPRINTF (stderr, "\n");
+ }
+#endif
+
+ *++yyvsp = yyval;
+#if YYLSP_NEEDED
+ *++yylsp = yyloc;
+#endif
+
+ /* Now `shift' the result of the reduction. Determine what state
+ that goes to, based on the state we popped back to and the rule
+ number reduced by. */
+
+ yyn = yyr1[yyn];
+
+ yystate = yypgoto[yyn - YYNTBASE] + *yyssp;
+ if (yystate >= 0 && yystate <= YYLAST && yycheck[yystate] == *yyssp)
+ yystate = yytable[yystate];
+ else
+ yystate = yydefgoto[yyn - YYNTBASE];
+
+ goto yynewstate;
+
+
+/*------------------------------------.
+| yyerrlab -- here on detecting error |
+`------------------------------------*/
+yyerrlab:
+ /* If not already recovering from an error, report this error. */
+ if (!yyerrstatus)
+ {
+ ++yynerrs;
+
+#ifdef YYERROR_VERBOSE
+ yyn = yypact[yystate];
+
+ if (yyn > YYFLAG && yyn < YYLAST)
+ {
+ YYSIZE_T yysize = 0;
+ char *yymsg;
+ int yyx, yycount;
+
+ yycount = 0;
+ /* Start YYX at -YYN if negative to avoid negative indexes in
+ YYCHECK. */
+ for (yyx = yyn < 0 ? -yyn : 0;
+ yyx < (int) (sizeof (yytname) / sizeof (char *)); yyx++)
+ if (yycheck[yyx + yyn] == yyx)
+ yysize += yystrlen (yytname[yyx]) + 15, yycount++;
+ yysize += yystrlen ("parse error, unexpected ") + 1;
+ yysize += yystrlen (yytname[YYTRANSLATE (yychar)]);
+ yymsg = (char *) YYSTACK_ALLOC (yysize);
+ if (yymsg != 0)
+ {
+ char *yyp = yystpcpy (yymsg, "parse error, unexpected ");
+ yyp = yystpcpy (yyp, yytname[YYTRANSLATE (yychar)]);
+
+ if (yycount < 5)
+ {
+ yycount = 0;
+ for (yyx = yyn < 0 ? -yyn : 0;
+ yyx < (int) (sizeof (yytname) / sizeof (char *));
+ yyx++)
+ if (yycheck[yyx + yyn] == yyx)
+ {
+ const char *yyq = ! yycount ? ", expecting " : " or ";
+ yyp = yystpcpy (yyp, yyq);
+ yyp = yystpcpy (yyp, yytname[yyx]);
+ yycount++;
+ }
+ }
+ yyerror (yymsg);
+ YYSTACK_FREE (yymsg);
+ }
+ else
+ yyerror ("parse error; also virtual memory exhausted");
+ }
+ else
+#endif /* defined (YYERROR_VERBOSE) */
+ yyerror ("parse error");
+ }
+ goto yyerrlab1;
+
+
+/*--------------------------------------------------.
+| yyerrlab1 -- error raised explicitly by an action |
+`--------------------------------------------------*/
+yyerrlab1:
+ if (yyerrstatus == 3)
+ {
+ /* If just tried and failed to reuse lookahead token after an
+ error, discard it. */
+
+ /* return failure if at end of input */
+ if (yychar == YYEOF)
+ YYABORT;
+ YYDPRINTF ((stderr, "Discarding token %d (%s).\n",
+ yychar, yytname[yychar1]));
+ yychar = YYEMPTY;
+ }
+
+ /* Else will try to reuse lookahead token after shifting the error
+ token. */
+
+ yyerrstatus = 3; /* Each real token shifted decrements this */
+
+ goto yyerrhandle;
+
+
+/*-------------------------------------------------------------------.
+| yyerrdefault -- current state does not do anything special for the |
+| error token. |
+`-------------------------------------------------------------------*/
+yyerrdefault:
+#if 0
+ /* This is wrong; only states that explicitly want error tokens
+ should shift them. */
+
+ /* If its default is to accept any token, ok. Otherwise pop it. */
+ yyn = yydefact[yystate];
+ if (yyn)
+ goto yydefault;
+#endif
+
+
+/*---------------------------------------------------------------.
+| yyerrpop -- pop the current state because it cannot handle the |
+| error token |
+`---------------------------------------------------------------*/
+yyerrpop:
+ if (yyssp == yyss)
+ YYABORT;
+ yyvsp--;
+ yystate = *--yyssp;
+#if YYLSP_NEEDED
+ yylsp--;
+#endif
+
+#if YYDEBUG
+ if (yydebug)
+ {
+ short *yyssp1 = yyss - 1;
+ YYFPRINTF (stderr, "Error: state stack now");
+ while (yyssp1 != yyssp)
+ YYFPRINTF (stderr, " %d", *++yyssp1);
+ YYFPRINTF (stderr, "\n");
+ }
+#endif
+
+/*--------------.
+| yyerrhandle. |
+`--------------*/
+yyerrhandle:
+ yyn = yypact[yystate];
+ if (yyn == YYFLAG)
+ goto yyerrdefault;
+
+ yyn += YYTERROR;
+ if (yyn < 0 || yyn > YYLAST || yycheck[yyn] != YYTERROR)
+ goto yyerrdefault;
+
+ yyn = yytable[yyn];
+ if (yyn < 0)
+ {
+ if (yyn == YYFLAG)
+ goto yyerrpop;
+ yyn = -yyn;
+ goto yyreduce;
+ }
+ else if (yyn == 0)
+ goto yyerrpop;
+
+ if (yyn == YYFINAL)
+ YYACCEPT;
+
+ YYDPRINTF ((stderr, "Shifting error token, "));
+
+ *++yyvsp = yylval;
+#if YYLSP_NEEDED
+ *++yylsp = yylloc;
+#endif
+
+ yystate = yyn;
+ goto yynewstate;
+
+
+/*-------------------------------------.
+| yyacceptlab -- YYACCEPT comes here. |
+`-------------------------------------*/
+yyacceptlab:
+ yyresult = 0;
+ goto yyreturn;
+
+/*-----------------------------------.
+| yyabortlab -- YYABORT comes here. |
+`-----------------------------------*/
+yyabortlab:
+ yyresult = 1;
+ goto yyreturn;
+
+/*---------------------------------------------.
+| yyoverflowab -- parser overflow comes here. |
+`---------------------------------------------*/
+yyoverflowlab:
+ yyerror ("parser stack overflow");
+ yyresult = 2;
+ /* Fall through. */
+
+yyreturn:
+#ifndef yyoverflow
+ if (yyss != yyssa)
+ YYSTACK_FREE (yyss);
+#endif
+ return yyresult;
+}
+#line 205 "plural.y"
+
+
+void
+internal_function
+FREE_EXPRESSION (struct expression *exp)
+{
+ if (exp == NULL)
+ return;
+
+ /* Handle the recursive case. */
+ switch (exp->nargs)
+ {
+ case 3:
+ FREE_EXPRESSION (exp->val.args[2]);
+ /* FALLTHROUGH */
+ case 2:
+ FREE_EXPRESSION (exp->val.args[1]);
+ /* FALLTHROUGH */
+ case 1:
+ FREE_EXPRESSION (exp->val.args[0]);
+ /* FALLTHROUGH */
+ default:
+ break;
+ }
+
+ free (exp);
+}
+
+
+static int
+yylex (YYSTYPE *lval, const char **pexp)
+{
+ const char *exp = *pexp;
+ int result;
+
+ while (1)
+ {
+ if (exp[0] == '\0')
+ {
+ *pexp = exp;
+ return YYEOF;
+ }
+
+ if (exp[0] != ' ' && exp[0] != '\t')
+ break;
+
+ ++exp;
+ }
+
+ result = *exp++;
+ switch (result)
+ {
+ case '0': case '1': case '2': case '3': case '4':
+ case '5': case '6': case '7': case '8': case '9':
+ {
+ unsigned long int n = result - '0';
+ while (exp[0] >= '0' && exp[0] <= '9')
+ {
+ n *= 10;
+ n += exp[0] - '0';
+ ++exp;
+ }
+ lval->num = n;
+ result = NUMBER;
+ }
+ break;
+
+ case '=':
+ if (exp[0] == '=')
+ {
+ ++exp;
+ lval->op = equal;
+ result = EQUOP2;
+ }
+ else
+ result = YYERRCODE;
+ break;
+
+ case '!':
+ if (exp[0] == '=')
+ {
+ ++exp;
+ lval->op = not_equal;
+ result = EQUOP2;
+ }
+ break;
+
+ case '&':
+ case '|':
+ if (exp[0] == result)
+ ++exp;
+ else
+ result = YYERRCODE;
+ break;
+
+ case '<':
+ if (exp[0] == '=')
+ {
+ ++exp;
+ lval->op = less_or_equal;
+ }
+ else
+ lval->op = less_than;
+ result = CMPOP2;
+ break;
+
+ case '>':
+ if (exp[0] == '=')
+ {
+ ++exp;
+ lval->op = greater_or_equal;
+ }
+ else
+ lval->op = greater_than;
+ result = CMPOP2;
+ break;
+
+ case '*':
+ lval->op = mult;
+ result = MULOP2;
+ break;
+
+ case '/':
+ lval->op = divide;
+ result = MULOP2;
+ break;
+
+ case '%':
+ lval->op = module;
+ result = MULOP2;
+ break;
+
+ case '+':
+ lval->op = plus;
+ result = ADDOP2;
+ break;
+
+ case '-':
+ lval->op = minus;
+ result = ADDOP2;
+ break;
+
+ case 'n':
+ case '?':
+ case ':':
+ case '(':
+ case ')':
+ /* Nothing, just return the character. */
+ break;
+
+ case ';':
+ case '\n':
+ case '\0':
+ /* Be safe and let the user call this function again. */
+ --exp;
+ result = YYEOF;
+ break;
+
+ default:
+ result = YYERRCODE;
+#if YYDEBUG != 0
+ --exp;
+#endif
+ break;
+ }
+
+ *pexp = exp;
+
+ return result;
+}
+
+
+static void
+yyerror (const char *str)
+{
+ /* Do nothing. We don't print error messages here. */
+}
diff --git a/macros/texinfo/contrib/texinfo-hu/texinfo/intl/plural.y b/macros/texinfo/contrib/texinfo-hu/texinfo/intl/plural.y
new file mode 100644
index 0000000000..4d33bd7c71
--- /dev/null
+++ b/macros/texinfo/contrib/texinfo-hu/texinfo/intl/plural.y
@@ -0,0 +1,381 @@
+%{
+/* Expression parsing for plural form selection.
+ Copyright (C) 2000-2001, 2003 Free Software Foundation, Inc.
+ Written by Ulrich Drepper <drepper@cygnus.com>, 2000.
+
+ This program is free software; you can redistribute it and/or modify it
+ under the terms of the GNU Library General Public License as published
+ 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
+ Library General Public License for more details.
+
+ You should have received a copy of the GNU Library General Public
+ License along with this program; if not, write to the Free Software
+ Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307,
+ USA. */
+
+/* The bison generated parser uses alloca. AIX 3 forces us to put this
+ declaration at the beginning of the file. The declaration in bison's
+ skeleton file comes too late. This must come before <config.h>
+ because <config.h> may include arbitrary system headers. */
+#if defined _AIX && !defined __GNUC__
+ #pragma alloca
+#endif
+
+#ifdef HAVE_CONFIG_H
+# include <config.h>
+#endif
+
+#include <stddef.h>
+#include <stdlib.h>
+#include "plural-exp.h"
+
+/* The main function generated by the parser is called __gettextparse,
+ but we want it to be called PLURAL_PARSE. */
+#ifndef _LIBC
+# define __gettextparse PLURAL_PARSE
+#endif
+
+#define YYLEX_PARAM &((struct parse_args *) arg)->cp
+#define YYPARSE_PARAM arg
+%}
+%pure_parser
+%expect 7
+
+%union {
+ unsigned long int num;
+ enum operator op;
+ struct expression *exp;
+}
+
+%{
+/* Prototypes for local functions. */
+static int yylex (YYSTYPE *lval, const char **pexp);
+static void yyerror (const char *str);
+
+/* Allocation of expressions. */
+
+static struct expression *
+new_exp (int nargs, enum operator op, struct expression * const *args)
+{
+ int i;
+ struct expression *newp;
+
+ /* If any of the argument could not be malloc'ed, just return NULL. */
+ for (i = nargs - 1; i >= 0; i--)
+ if (args[i] == NULL)
+ goto fail;
+
+ /* Allocate a new expression. */
+ newp = (struct expression *) malloc (sizeof (*newp));
+ if (newp != NULL)
+ {
+ newp->nargs = nargs;
+ newp->operation = op;
+ for (i = nargs - 1; i >= 0; i--)
+ newp->val.args[i] = args[i];
+ return newp;
+ }
+
+ fail:
+ for (i = nargs - 1; i >= 0; i--)
+ FREE_EXPRESSION (args[i]);
+
+ return NULL;
+}
+
+static inline struct expression *
+new_exp_0 (enum operator op)
+{
+ return new_exp (0, op, NULL);
+}
+
+static inline struct expression *
+new_exp_1 (enum operator op, struct expression *right)
+{
+ struct expression *args[1];
+
+ args[0] = right;
+ return new_exp (1, op, args);
+}
+
+static struct expression *
+new_exp_2 (enum operator op, struct expression *left, struct expression *right)
+{
+ struct expression *args[2];
+
+ args[0] = left;
+ args[1] = right;
+ return new_exp (2, op, args);
+}
+
+static inline struct expression *
+new_exp_3 (enum operator op, struct expression *bexp,
+ struct expression *tbranch, struct expression *fbranch)
+{
+ struct expression *args[3];
+
+ args[0] = bexp;
+ args[1] = tbranch;
+ args[2] = fbranch;
+ return new_exp (3, op, args);
+}
+
+%}
+
+/* This declares that all operators have the same associativity and the
+ precedence order as in C. See [Harbison, Steele: C, A Reference Manual].
+ There is no unary minus and no bitwise operators.
+ Operators with the same syntactic behaviour have been merged into a single
+ token, to save space in the array generated by bison. */
+%right '?' /* ? */
+%left '|' /* || */
+%left '&' /* && */
+%left EQUOP2 /* == != */
+%left CMPOP2 /* < > <= >= */
+%left ADDOP2 /* + - */
+%left MULOP2 /* * / % */
+%right '!' /* ! */
+
+%token <op> EQUOP2 CMPOP2 ADDOP2 MULOP2
+%token <num> NUMBER
+%type <exp> exp
+
+%%
+
+start: exp
+ {
+ if ($1 == NULL)
+ YYABORT;
+ ((struct parse_args *) arg)->res = $1;
+ }
+ ;
+
+exp: exp '?' exp ':' exp
+ {
+ $$ = new_exp_3 (qmop, $1, $3, $5);
+ }
+ | exp '|' exp
+ {
+ $$ = new_exp_2 (lor, $1, $3);
+ }
+ | exp '&' exp
+ {
+ $$ = new_exp_2 (land, $1, $3);
+ }
+ | exp EQUOP2 exp
+ {
+ $$ = new_exp_2 ($2, $1, $3);
+ }
+ | exp CMPOP2 exp
+ {
+ $$ = new_exp_2 ($2, $1, $3);
+ }
+ | exp ADDOP2 exp
+ {
+ $$ = new_exp_2 ($2, $1, $3);
+ }
+ | exp MULOP2 exp
+ {
+ $$ = new_exp_2 ($2, $1, $3);
+ }
+ | '!' exp
+ {
+ $$ = new_exp_1 (lnot, $2);
+ }
+ | 'n'
+ {
+ $$ = new_exp_0 (var);
+ }
+ | NUMBER
+ {
+ if (($$ = new_exp_0 (num)) != NULL)
+ $$->val.num = $1;
+ }
+ | '(' exp ')'
+ {
+ $$ = $2;
+ }
+ ;
+
+%%
+
+void
+internal_function
+FREE_EXPRESSION (struct expression *exp)
+{
+ if (exp == NULL)
+ return;
+
+ /* Handle the recursive case. */
+ switch (exp->nargs)
+ {
+ case 3:
+ FREE_EXPRESSION (exp->val.args[2]);
+ /* FALLTHROUGH */
+ case 2:
+ FREE_EXPRESSION (exp->val.args[1]);
+ /* FALLTHROUGH */
+ case 1:
+ FREE_EXPRESSION (exp->val.args[0]);
+ /* FALLTHROUGH */
+ default:
+ break;
+ }
+
+ free (exp);
+}
+
+
+static int
+yylex (YYSTYPE *lval, const char **pexp)
+{
+ const char *exp = *pexp;
+ int result;
+
+ while (1)
+ {
+ if (exp[0] == '\0')
+ {
+ *pexp = exp;
+ return YYEOF;
+ }
+
+ if (exp[0] != ' ' && exp[0] != '\t')
+ break;
+
+ ++exp;
+ }
+
+ result = *exp++;
+ switch (result)
+ {
+ case '0': case '1': case '2': case '3': case '4':
+ case '5': case '6': case '7': case '8': case '9':
+ {
+ unsigned long int n = result - '0';
+ while (exp[0] >= '0' && exp[0] <= '9')
+ {
+ n *= 10;
+ n += exp[0] - '0';
+ ++exp;
+ }
+ lval->num = n;
+ result = NUMBER;
+ }
+ break;
+
+ case '=':
+ if (exp[0] == '=')
+ {
+ ++exp;
+ lval->op = equal;
+ result = EQUOP2;
+ }
+ else
+ result = YYERRCODE;
+ break;
+
+ case '!':
+ if (exp[0] == '=')
+ {
+ ++exp;
+ lval->op = not_equal;
+ result = EQUOP2;
+ }
+ break;
+
+ case '&':
+ case '|':
+ if (exp[0] == result)
+ ++exp;
+ else
+ result = YYERRCODE;
+ break;
+
+ case '<':
+ if (exp[0] == '=')
+ {
+ ++exp;
+ lval->op = less_or_equal;
+ }
+ else
+ lval->op = less_than;
+ result = CMPOP2;
+ break;
+
+ case '>':
+ if (exp[0] == '=')
+ {
+ ++exp;
+ lval->op = greater_or_equal;
+ }
+ else
+ lval->op = greater_than;
+ result = CMPOP2;
+ break;
+
+ case '*':
+ lval->op = mult;
+ result = MULOP2;
+ break;
+
+ case '/':
+ lval->op = divide;
+ result = MULOP2;
+ break;
+
+ case '%':
+ lval->op = module;
+ result = MULOP2;
+ break;
+
+ case '+':
+ lval->op = plus;
+ result = ADDOP2;
+ break;
+
+ case '-':
+ lval->op = minus;
+ result = ADDOP2;
+ break;
+
+ case 'n':
+ case '?':
+ case ':':
+ case '(':
+ case ')':
+ /* Nothing, just return the character. */
+ break;
+
+ case ';':
+ case '\n':
+ case '\0':
+ /* Be safe and let the user call this function again. */
+ --exp;
+ result = YYEOF;
+ break;
+
+ default:
+ result = YYERRCODE;
+#if YYDEBUG != 0
+ --exp;
+#endif
+ break;
+ }
+
+ *pexp = exp;
+
+ return result;
+}
+
+
+static void
+yyerror (const char *str)
+{
+ /* Do nothing. We don't print error messages here. */
+}
diff --git a/macros/texinfo/contrib/texinfo-hu/texinfo/intl/printf-args.c b/macros/texinfo/contrib/texinfo-hu/texinfo/intl/printf-args.c
new file mode 100644
index 0000000000..f6f3219e79
--- /dev/null
+++ b/macros/texinfo/contrib/texinfo-hu/texinfo/intl/printf-args.c
@@ -0,0 +1,119 @@
+/* Decomposed printf argument list.
+ Copyright (C) 1999, 2002-2003 Free Software Foundation, Inc.
+
+ This program is free software; you can redistribute it and/or modify it
+ under the terms of the GNU Library General Public License as published
+ 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
+ Library General Public License for more details.
+
+ You should have received a copy of the GNU Library General Public
+ License along with this program; if not, write to the Free Software
+ Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307,
+ USA. */
+
+#ifdef HAVE_CONFIG_H
+# include <config.h>
+#endif
+
+/* Specification. */
+#include "printf-args.h"
+
+#ifdef STATIC
+STATIC
+#endif
+int
+printf_fetchargs (va_list args, arguments *a)
+{
+ size_t i;
+ argument *ap;
+
+ for (i = 0, ap = &a->arg[0]; i < a->count; i++, ap++)
+ switch (ap->type)
+ {
+ case TYPE_SCHAR:
+ ap->a.a_schar = va_arg (args, /*signed char*/ int);
+ break;
+ case TYPE_UCHAR:
+ ap->a.a_uchar = va_arg (args, /*unsigned char*/ int);
+ break;
+ case TYPE_SHORT:
+ ap->a.a_short = va_arg (args, /*short*/ int);
+ break;
+ case TYPE_USHORT:
+ ap->a.a_ushort = va_arg (args, /*unsigned short*/ int);
+ break;
+ case TYPE_INT:
+ ap->a.a_int = va_arg (args, int);
+ break;
+ case TYPE_UINT:
+ ap->a.a_uint = va_arg (args, unsigned int);
+ break;
+ case TYPE_LONGINT:
+ ap->a.a_longint = va_arg (args, long int);
+ break;
+ case TYPE_ULONGINT:
+ ap->a.a_ulongint = va_arg (args, unsigned long int);
+ break;
+#ifdef HAVE_LONG_LONG
+ case TYPE_LONGLONGINT:
+ ap->a.a_longlongint = va_arg (args, long long int);
+ break;
+ case TYPE_ULONGLONGINT:
+ ap->a.a_ulonglongint = va_arg (args, unsigned long long int);
+ break;
+#endif
+ case TYPE_DOUBLE:
+ ap->a.a_double = va_arg (args, double);
+ break;
+#ifdef HAVE_LONG_DOUBLE
+ case TYPE_LONGDOUBLE:
+ ap->a.a_longdouble = va_arg (args, long double);
+ break;
+#endif
+ case TYPE_CHAR:
+ ap->a.a_char = va_arg (args, int);
+ break;
+#ifdef HAVE_WINT_T
+ case TYPE_WIDE_CHAR:
+ ap->a.a_wide_char = va_arg (args, wint_t);
+ break;
+#endif
+ case TYPE_STRING:
+ ap->a.a_string = va_arg (args, const char *);
+ break;
+#ifdef HAVE_WCHAR_T
+ case TYPE_WIDE_STRING:
+ ap->a.a_wide_string = va_arg (args, const wchar_t *);
+ break;
+#endif
+ case TYPE_POINTER:
+ ap->a.a_pointer = va_arg (args, void *);
+ break;
+ case TYPE_COUNT_SCHAR_POINTER:
+ ap->a.a_count_schar_pointer = va_arg (args, signed char *);
+ break;
+ case TYPE_COUNT_SHORT_POINTER:
+ ap->a.a_count_short_pointer = va_arg (args, short *);
+ break;
+ case TYPE_COUNT_INT_POINTER:
+ ap->a.a_count_int_pointer = va_arg (args, int *);
+ break;
+ case TYPE_COUNT_LONGINT_POINTER:
+ ap->a.a_count_longint_pointer = va_arg (args, long int *);
+ break;
+#ifdef HAVE_LONG_LONG
+ case TYPE_COUNT_LONGLONGINT_POINTER:
+ ap->a.a_count_longlongint_pointer = va_arg (args, long long int *);
+ break;
+#endif
+ default:
+ /* Unknown type. */
+ return -1;
+ }
+ return 0;
+}
diff --git a/macros/texinfo/contrib/texinfo-hu/texinfo/intl/printf-args.h b/macros/texinfo/contrib/texinfo-hu/texinfo/intl/printf-args.h
new file mode 100644
index 0000000000..f11e64c045
--- /dev/null
+++ b/macros/texinfo/contrib/texinfo-hu/texinfo/intl/printf-args.h
@@ -0,0 +1,137 @@
+/* Decomposed printf argument list.
+ Copyright (C) 1999, 2002-2003 Free Software Foundation, Inc.
+
+ This program is free software; you can redistribute it and/or modify it
+ under the terms of the GNU Library General Public License as published
+ 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
+ Library General Public License for more details.
+
+ You should have received a copy of the GNU Library General Public
+ License along with this program; if not, write to the Free Software
+ Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307,
+ USA. */
+
+#ifndef _PRINTF_ARGS_H
+#define _PRINTF_ARGS_H
+
+/* Get size_t. */
+#include <stddef.h>
+
+/* Get wchar_t. */
+#ifdef HAVE_WCHAR_T
+# include <stddef.h>
+#endif
+
+/* Get wint_t. */
+#ifdef HAVE_WINT_T
+# include <wchar.h>
+#endif
+
+/* Get va_list. */
+#include <stdarg.h>
+
+
+/* Argument types */
+typedef enum
+{
+ TYPE_NONE,
+ TYPE_SCHAR,
+ TYPE_UCHAR,
+ TYPE_SHORT,
+ TYPE_USHORT,
+ TYPE_INT,
+ TYPE_UINT,
+ TYPE_LONGINT,
+ TYPE_ULONGINT,
+#ifdef HAVE_LONG_LONG
+ TYPE_LONGLONGINT,
+ TYPE_ULONGLONGINT,
+#endif
+ TYPE_DOUBLE,
+#ifdef HAVE_LONG_DOUBLE
+ TYPE_LONGDOUBLE,
+#endif
+ TYPE_CHAR,
+#ifdef HAVE_WINT_T
+ TYPE_WIDE_CHAR,
+#endif
+ TYPE_STRING,
+#ifdef HAVE_WCHAR_T
+ TYPE_WIDE_STRING,
+#endif
+ TYPE_POINTER,
+ TYPE_COUNT_SCHAR_POINTER,
+ TYPE_COUNT_SHORT_POINTER,
+ TYPE_COUNT_INT_POINTER,
+ TYPE_COUNT_LONGINT_POINTER
+#ifdef HAVE_LONG_LONG
+, TYPE_COUNT_LONGLONGINT_POINTER
+#endif
+} arg_type;
+
+/* Polymorphic argument */
+typedef struct
+{
+ arg_type type;
+ union
+ {
+ signed char a_schar;
+ unsigned char a_uchar;
+ short a_short;
+ unsigned short a_ushort;
+ int a_int;
+ unsigned int a_uint;
+ long int a_longint;
+ unsigned long int a_ulongint;
+#ifdef HAVE_LONG_LONG
+ long long int a_longlongint;
+ unsigned long long int a_ulonglongint;
+#endif
+ float a_float;
+ double a_double;
+#ifdef HAVE_LONG_DOUBLE
+ long double a_longdouble;
+#endif
+ int a_char;
+#ifdef HAVE_WINT_T
+ wint_t a_wide_char;
+#endif
+ const char* a_string;
+#ifdef HAVE_WCHAR_T
+ const wchar_t* a_wide_string;
+#endif
+ void* a_pointer;
+ signed char * a_count_schar_pointer;
+ short * a_count_short_pointer;
+ int * a_count_int_pointer;
+ long int * a_count_longint_pointer;
+#ifdef HAVE_LONG_LONG
+ long long int * a_count_longlongint_pointer;
+#endif
+ }
+ a;
+}
+argument;
+
+typedef struct
+{
+ size_t count;
+ argument *arg;
+}
+arguments;
+
+
+/* Fetch the arguments, putting them into a. */
+#ifdef STATIC
+STATIC
+#else
+extern
+#endif
+int printf_fetchargs (va_list args, arguments *a);
+
+#endif /* _PRINTF_ARGS_H */
diff --git a/macros/texinfo/contrib/texinfo-hu/texinfo/intl/printf-parse.c b/macros/texinfo/contrib/texinfo-hu/texinfo/intl/printf-parse.c
new file mode 100644
index 0000000000..d19f903d72
--- /dev/null
+++ b/macros/texinfo/contrib/texinfo-hu/texinfo/intl/printf-parse.c
@@ -0,0 +1,537 @@
+/* Formatted output to strings.
+ Copyright (C) 1999-2000, 2002-2003 Free Software Foundation, Inc.
+
+ This program is free software; you can redistribute it and/or modify it
+ under the terms of the GNU Library General Public License as published
+ 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
+ Library General Public License for more details.
+
+ You should have received a copy of the GNU Library General Public
+ License along with this program; if not, write to the Free Software
+ Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307,
+ USA. */
+
+#ifdef HAVE_CONFIG_H
+# include <config.h>
+#endif
+
+/* Specification. */
+#if WIDE_CHAR_VERSION
+# include "wprintf-parse.h"
+#else
+# include "printf-parse.h"
+#endif
+
+/* Get size_t, NULL. */
+#include <stddef.h>
+
+/* Get intmax_t. */
+#if HAVE_STDINT_H_WITH_UINTMAX
+# include <stdint.h>
+#endif
+#if HAVE_INTTYPES_H_WITH_UINTMAX
+# include <inttypes.h>
+#endif
+
+/* malloc(), realloc(), free(). */
+#include <stdlib.h>
+
+/* Checked size_t computations. */
+#include "xsize.h"
+
+#if WIDE_CHAR_VERSION
+# define PRINTF_PARSE wprintf_parse
+# define CHAR_T wchar_t
+# define DIRECTIVE wchar_t_directive
+# define DIRECTIVES wchar_t_directives
+#else
+# define PRINTF_PARSE printf_parse
+# define CHAR_T char
+# define DIRECTIVE char_directive
+# define DIRECTIVES char_directives
+#endif
+
+#ifdef STATIC
+STATIC
+#endif
+int
+PRINTF_PARSE (const CHAR_T *format, DIRECTIVES *d, arguments *a)
+{
+ const CHAR_T *cp = format; /* pointer into format */
+ size_t arg_posn = 0; /* number of regular arguments consumed */
+ size_t d_allocated; /* allocated elements of d->dir */
+ size_t a_allocated; /* allocated elements of a->arg */
+ size_t max_width_length = 0;
+ size_t max_precision_length = 0;
+
+ d->count = 0;
+ d_allocated = 1;
+ d->dir = malloc (d_allocated * sizeof (DIRECTIVE));
+ if (d->dir == NULL)
+ /* Out of memory. */
+ return -1;
+
+ a->count = 0;
+ a_allocated = 0;
+ a->arg = NULL;
+
+#define REGISTER_ARG(_index_,_type_) \
+ { \
+ size_t n = (_index_); \
+ if (n >= a_allocated) \
+ { \
+ size_t memory_size; \
+ argument *memory; \
+ \
+ a_allocated = xtimes (a_allocated, 2); \
+ if (a_allocated <= n) \
+ a_allocated = xsum (n, 1); \
+ memory_size = xtimes (a_allocated, sizeof (argument)); \
+ if (size_overflow_p (memory_size)) \
+ /* Overflow, would lead to out of memory. */ \
+ goto error; \
+ memory = (a->arg \
+ ? realloc (a->arg, memory_size) \
+ : malloc (memory_size)); \
+ if (memory == NULL) \
+ /* Out of memory. */ \
+ goto error; \
+ a->arg = memory; \
+ } \
+ while (a->count <= n) \
+ a->arg[a->count++].type = TYPE_NONE; \
+ if (a->arg[n].type == TYPE_NONE) \
+ a->arg[n].type = (_type_); \
+ else if (a->arg[n].type != (_type_)) \
+ /* Ambiguous type for positional argument. */ \
+ goto error; \
+ }
+
+ while (*cp != '\0')
+ {
+ CHAR_T c = *cp++;
+ if (c == '%')
+ {
+ size_t arg_index = ARG_NONE;
+ DIRECTIVE *dp = &d->dir[d->count];/* pointer to next directive */
+
+ /* Initialize the next directive. */
+ dp->dir_start = cp - 1;
+ dp->flags = 0;
+ dp->width_start = NULL;
+ dp->width_end = NULL;
+ dp->width_arg_index = ARG_NONE;
+ dp->precision_start = NULL;
+ dp->precision_end = NULL;
+ dp->precision_arg_index = ARG_NONE;
+ dp->arg_index = ARG_NONE;
+
+ /* Test for positional argument. */
+ if (*cp >= '0' && *cp <= '9')
+ {
+ const CHAR_T *np;
+
+ for (np = cp; *np >= '0' && *np <= '9'; np++)
+ ;
+ if (*np == '$')
+ {
+ size_t n = 0;
+
+ for (np = cp; *np >= '0' && *np <= '9'; np++)
+ n = xsum (xtimes (n, 10), *np - '0');
+ if (n == 0)
+ /* Positional argument 0. */
+ goto error;
+ if (size_overflow_p (n))
+ /* n too large, would lead to out of memory later. */
+ goto error;
+ arg_index = n - 1;
+ cp = np + 1;
+ }
+ }
+
+ /* Read the flags. */
+ for (;;)
+ {
+ if (*cp == '\'')
+ {
+ dp->flags |= FLAG_GROUP;
+ cp++;
+ }
+ else if (*cp == '-')
+ {
+ dp->flags |= FLAG_LEFT;
+ cp++;
+ }
+ else if (*cp == '+')
+ {
+ dp->flags |= FLAG_SHOWSIGN;
+ cp++;
+ }
+ else if (*cp == ' ')
+ {
+ dp->flags |= FLAG_SPACE;
+ cp++;
+ }
+ else if (*cp == '#')
+ {
+ dp->flags |= FLAG_ALT;
+ cp++;
+ }
+ else if (*cp == '0')
+ {
+ dp->flags |= FLAG_ZERO;
+ cp++;
+ }
+ else
+ break;
+ }
+
+ /* Parse the field width. */
+ if (*cp == '*')
+ {
+ dp->width_start = cp;
+ cp++;
+ dp->width_end = cp;
+ if (max_width_length < 1)
+ max_width_length = 1;
+
+ /* Test for positional argument. */
+ if (*cp >= '0' && *cp <= '9')
+ {
+ const CHAR_T *np;
+
+ for (np = cp; *np >= '0' && *np <= '9'; np++)
+ ;
+ if (*np == '$')
+ {
+ size_t n = 0;
+
+ for (np = cp; *np >= '0' && *np <= '9'; np++)
+ n = xsum (xtimes (n, 10), *np - '0');
+ if (n == 0)
+ /* Positional argument 0. */
+ goto error;
+ if (size_overflow_p (n))
+ /* n too large, would lead to out of memory later. */
+ goto error;
+ dp->width_arg_index = n - 1;
+ cp = np + 1;
+ }
+ }
+ if (dp->width_arg_index == ARG_NONE)
+ {
+ dp->width_arg_index = arg_posn++;
+ if (dp->width_arg_index == ARG_NONE)
+ /* arg_posn wrapped around. */
+ goto error;
+ }
+ REGISTER_ARG (dp->width_arg_index, TYPE_INT);
+ }
+ else if (*cp >= '0' && *cp <= '9')
+ {
+ size_t width_length;
+
+ dp->width_start = cp;
+ for (; *cp >= '0' && *cp <= '9'; cp++)
+ ;
+ dp->width_end = cp;
+ width_length = dp->width_end - dp->width_start;
+ if (max_width_length < width_length)
+ max_width_length = width_length;
+ }
+
+ /* Parse the precision. */
+ if (*cp == '.')
+ {
+ cp++;
+ if (*cp == '*')
+ {
+ dp->precision_start = cp - 1;
+ cp++;
+ dp->precision_end = cp;
+ if (max_precision_length < 2)
+ max_precision_length = 2;
+
+ /* Test for positional argument. */
+ if (*cp >= '0' && *cp <= '9')
+ {
+ const CHAR_T *np;
+
+ for (np = cp; *np >= '0' && *np <= '9'; np++)
+ ;
+ if (*np == '$')
+ {
+ size_t n = 0;
+
+ for (np = cp; *np >= '0' && *np <= '9'; np++)
+ n = xsum (xtimes (n, 10), *np - '0');
+ if (n == 0)
+ /* Positional argument 0. */
+ goto error;
+ if (size_overflow_p (n))
+ /* n too large, would lead to out of memory
+ later. */
+ goto error;
+ dp->precision_arg_index = n - 1;
+ cp = np + 1;
+ }
+ }
+ if (dp->precision_arg_index == ARG_NONE)
+ {
+ dp->precision_arg_index = arg_posn++;
+ if (dp->precision_arg_index == ARG_NONE)
+ /* arg_posn wrapped around. */
+ goto error;
+ }
+ REGISTER_ARG (dp->precision_arg_index, TYPE_INT);
+ }
+ else
+ {
+ size_t precision_length;
+
+ dp->precision_start = cp - 1;
+ for (; *cp >= '0' && *cp <= '9'; cp++)
+ ;
+ dp->precision_end = cp;
+ precision_length = dp->precision_end - dp->precision_start;
+ if (max_precision_length < precision_length)
+ max_precision_length = precision_length;
+ }
+ }
+
+ {
+ arg_type type;
+
+ /* Parse argument type/size specifiers. */
+ {
+ int flags = 0;
+
+ for (;;)
+ {
+ if (*cp == 'h')
+ {
+ flags |= (1 << (flags & 1));
+ cp++;
+ }
+ else if (*cp == 'L')
+ {
+ flags |= 4;
+ cp++;
+ }
+ else if (*cp == 'l')
+ {
+ flags += 8;
+ cp++;
+ }
+#ifdef HAVE_INTMAX_T
+ else if (*cp == 'j')
+ {
+ if (sizeof (intmax_t) > sizeof (long))
+ {
+ /* intmax_t = long long */
+ flags += 16;
+ }
+ else if (sizeof (intmax_t) > sizeof (int))
+ {
+ /* intmax_t = long */
+ flags += 8;
+ }
+ cp++;
+ }
+#endif
+ else if (*cp == 'z' || *cp == 'Z')
+ {
+ /* 'z' is standardized in ISO C 99, but glibc uses 'Z'
+ because the warning facility in gcc-2.95.2 understands
+ only 'Z' (see gcc-2.95.2/gcc/c-common.c:1784). */
+ if (sizeof (size_t) > sizeof (long))
+ {
+ /* size_t = long long */
+ flags += 16;
+ }
+ else if (sizeof (size_t) > sizeof (int))
+ {
+ /* size_t = long */
+ flags += 8;
+ }
+ cp++;
+ }
+ else if (*cp == 't')
+ {
+ if (sizeof (ptrdiff_t) > sizeof (long))
+ {
+ /* ptrdiff_t = long long */
+ flags += 16;
+ }
+ else if (sizeof (ptrdiff_t) > sizeof (int))
+ {
+ /* ptrdiff_t = long */
+ flags += 8;
+ }
+ cp++;
+ }
+ else
+ break;
+ }
+
+ /* Read the conversion character. */
+ c = *cp++;
+ switch (c)
+ {
+ case 'd': case 'i':
+#ifdef HAVE_LONG_LONG
+ if (flags >= 16 || (flags & 4))
+ type = TYPE_LONGLONGINT;
+ else
+#endif
+ if (flags >= 8)
+ type = TYPE_LONGINT;
+ else if (flags & 2)
+ type = TYPE_SCHAR;
+ else if (flags & 1)
+ type = TYPE_SHORT;
+ else
+ type = TYPE_INT;
+ break;
+ case 'o': case 'u': case 'x': case 'X':
+#ifdef HAVE_LONG_LONG
+ if (flags >= 16 || (flags & 4))
+ type = TYPE_ULONGLONGINT;
+ else
+#endif
+ if (flags >= 8)
+ type = TYPE_ULONGINT;
+ else if (flags & 2)
+ type = TYPE_UCHAR;
+ else if (flags & 1)
+ type = TYPE_USHORT;
+ else
+ type = TYPE_UINT;
+ break;
+ case 'f': case 'F': case 'e': case 'E': case 'g': case 'G':
+ case 'a': case 'A':
+#ifdef HAVE_LONG_DOUBLE
+ if (flags >= 16 || (flags & 4))
+ type = TYPE_LONGDOUBLE;
+ else
+#endif
+ type = TYPE_DOUBLE;
+ break;
+ case 'c':
+ if (flags >= 8)
+#ifdef HAVE_WINT_T
+ type = TYPE_WIDE_CHAR;
+#else
+ goto error;
+#endif
+ else
+ type = TYPE_CHAR;
+ break;
+#ifdef HAVE_WINT_T
+ case 'C':
+ type = TYPE_WIDE_CHAR;
+ c = 'c';
+ break;
+#endif
+ case 's':
+ if (flags >= 8)
+#ifdef HAVE_WCHAR_T
+ type = TYPE_WIDE_STRING;
+#else
+ goto error;
+#endif
+ else
+ type = TYPE_STRING;
+ break;
+#ifdef HAVE_WCHAR_T
+ case 'S':
+ type = TYPE_WIDE_STRING;
+ c = 's';
+ break;
+#endif
+ case 'p':
+ type = TYPE_POINTER;
+ break;
+ case 'n':
+#ifdef HAVE_LONG_LONG
+ if (flags >= 16 || (flags & 4))
+ type = TYPE_COUNT_LONGLONGINT_POINTER;
+ else
+#endif
+ if (flags >= 8)
+ type = TYPE_COUNT_LONGINT_POINTER;
+ else if (flags & 2)
+ type = TYPE_COUNT_SCHAR_POINTER;
+ else if (flags & 1)
+ type = TYPE_COUNT_SHORT_POINTER;
+ else
+ type = TYPE_COUNT_INT_POINTER;
+ break;
+ case '%':
+ type = TYPE_NONE;
+ break;
+ default:
+ /* Unknown conversion character. */
+ goto error;
+ }
+ }
+
+ if (type != TYPE_NONE)
+ {
+ dp->arg_index = arg_index;
+ if (dp->arg_index == ARG_NONE)
+ {
+ dp->arg_index = arg_posn++;
+ if (dp->arg_index == ARG_NONE)
+ /* arg_posn wrapped around. */
+ goto error;
+ }
+ REGISTER_ARG (dp->arg_index, type);
+ }
+ dp->conversion = c;
+ dp->dir_end = cp;
+ }
+
+ d->count++;
+ if (d->count >= d_allocated)
+ {
+ size_t memory_size;
+ DIRECTIVE *memory;
+
+ d_allocated = xtimes (d_allocated, 2);
+ memory_size = xtimes (d_allocated, sizeof (DIRECTIVE));
+ if (size_overflow_p (memory_size))
+ /* Overflow, would lead to out of memory. */
+ goto error;
+ memory = realloc (d->dir, memory_size);
+ if (memory == NULL)
+ /* Out of memory. */
+ goto error;
+ d->dir = memory;
+ }
+ }
+ }
+ d->dir[d->count].dir_start = cp;
+
+ d->max_width_length = max_width_length;
+ d->max_precision_length = max_precision_length;
+ return 0;
+
+error:
+ if (a->arg)
+ free (a->arg);
+ if (d->dir)
+ free (d->dir);
+ return -1;
+}
+
+#undef DIRECTIVES
+#undef DIRECTIVE
+#undef CHAR_T
+#undef PRINTF_PARSE
diff --git a/macros/texinfo/contrib/texinfo-hu/texinfo/intl/printf-parse.h b/macros/texinfo/contrib/texinfo-hu/texinfo/intl/printf-parse.h
new file mode 100644
index 0000000000..8aec50e2a3
--- /dev/null
+++ b/macros/texinfo/contrib/texinfo-hu/texinfo/intl/printf-parse.h
@@ -0,0 +1,75 @@
+/* Parse printf format string.
+ Copyright (C) 1999, 2002-2003 Free Software Foundation, Inc.
+
+ This program is free software; you can redistribute it and/or modify it
+ under the terms of the GNU Library General Public License as published
+ 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
+ Library General Public License for more details.
+
+ You should have received a copy of the GNU Library General Public
+ License along with this program; if not, write to the Free Software
+ Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307,
+ USA. */
+
+#ifndef _PRINTF_PARSE_H
+#define _PRINTF_PARSE_H
+
+#include "printf-args.h"
+
+
+/* Flags */
+#define FLAG_GROUP 1 /* ' flag */
+#define FLAG_LEFT 2 /* - flag */
+#define FLAG_SHOWSIGN 4 /* + flag */
+#define FLAG_SPACE 8 /* space flag */
+#define FLAG_ALT 16 /* # flag */
+#define FLAG_ZERO 32
+
+/* arg_index value indicating that no argument is consumed. */
+#define ARG_NONE (~(size_t)0)
+
+/* A parsed directive. */
+typedef struct
+{
+ const char* dir_start;
+ const char* dir_end;
+ int flags;
+ const char* width_start;
+ const char* width_end;
+ size_t width_arg_index;
+ const char* precision_start;
+ const char* precision_end;
+ size_t precision_arg_index;
+ char conversion; /* d i o u x X f e E g G c s p n U % but not C S */
+ size_t arg_index;
+}
+char_directive;
+
+/* A parsed format string. */
+typedef struct
+{
+ size_t count;
+ char_directive *dir;
+ size_t max_width_length;
+ size_t max_precision_length;
+}
+char_directives;
+
+
+/* Parses the format string. Fills in the number N of directives, and fills
+ in directives[0], ..., directives[N-1], and sets directives[N].dir_start
+ to the end of the format string. Also fills in the arg_type fields of the
+ arguments and the needed count of arguments. */
+#ifdef STATIC
+STATIC
+#else
+extern
+#endif
+int printf_parse (const char *format, char_directives *d, arguments *a);
+
+#endif /* _PRINTF_PARSE_H */
diff --git a/macros/texinfo/contrib/texinfo-hu/texinfo/intl/printf.c b/macros/texinfo/contrib/texinfo-hu/texinfo/intl/printf.c
new file mode 100644
index 0000000000..878646c2de
--- /dev/null
+++ b/macros/texinfo/contrib/texinfo-hu/texinfo/intl/printf.c
@@ -0,0 +1,371 @@
+/* Formatted output to strings, using POSIX/XSI format strings with positions.
+ Copyright (C) 2003 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 Library 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
+ Library General Public License for more details.
+
+ You should have received a copy of the GNU Library General Public
+ License along with this program; if not, write to the Free Software
+ Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307,
+ USA. */
+
+#ifdef HAVE_CONFIG_H
+# include <config.h>
+#endif
+
+#ifdef __GNUC__
+# define alloca __builtin_alloca
+# define HAVE_ALLOCA 1
+#else
+# ifdef _MSC_VER
+# include <malloc.h>
+# define alloca _alloca
+# else
+# if defined HAVE_ALLOCA_H || defined _LIBC
+# include <alloca.h>
+# else
+# ifdef _AIX
+ #pragma alloca
+# else
+# ifndef alloca
+char *alloca ();
+# endif
+# endif
+# endif
+# endif
+#endif
+
+#include <stdio.h>
+
+#if !HAVE_POSIX_PRINTF
+
+#include <stdlib.h>
+#include <string.h>
+
+/* When building a DLL, we must export some functions. Note that because
+ the functions are only defined for binary backward compatibility, we
+ don't need to use __declspec(dllimport) in any case. */
+#if defined _MSC_VER && BUILDING_DLL
+# define DLL_EXPORTED __declspec(dllexport)
+#else
+# define DLL_EXPORTED
+#endif
+
+#define STATIC static
+
+/* Define auxiliary functions declared in "printf-args.h". */
+#include "printf-args.c"
+
+/* Define auxiliary functions declared in "printf-parse.h". */
+#include "printf-parse.c"
+
+/* Define functions declared in "vasnprintf.h". */
+#define vasnprintf libintl_vasnprintf
+#include "vasnprintf.c"
+#if 0 /* not needed */
+#define asnprintf libintl_asnprintf
+#include "asnprintf.c"
+#endif
+
+DLL_EXPORTED
+int
+libintl_vfprintf (FILE *stream, const char *format, va_list args)
+{
+ if (strchr (format, '$') == NULL)
+ return vfprintf (stream, format, args);
+ else
+ {
+ size_t length;
+ char *result = libintl_vasnprintf (NULL, &length, format, args);
+ int retval = -1;
+ if (result != NULL)
+ {
+ if (fwrite (result, 1, length, stream) == length)
+ retval = length;
+ free (result);
+ }
+ return retval;
+ }
+}
+
+DLL_EXPORTED
+int
+libintl_fprintf (FILE *stream, const char *format, ...)
+{
+ va_list args;
+ int retval;
+
+ va_start (args, format);
+ retval = libintl_vfprintf (stream, format, args);
+ va_end (args);
+ return retval;
+}
+
+DLL_EXPORTED
+int
+libintl_vprintf (const char *format, va_list args)
+{
+ return libintl_vfprintf (stdout, format, args);
+}
+
+DLL_EXPORTED
+int
+libintl_printf (const char *format, ...)
+{
+ va_list args;
+ int retval;
+
+ va_start (args, format);
+ retval = libintl_vprintf (format, args);
+ va_end (args);
+ return retval;
+}
+
+DLL_EXPORTED
+int
+libintl_vsprintf (char *resultbuf, const char *format, va_list args)
+{
+ if (strchr (format, '$') == NULL)
+ return vsprintf (resultbuf, format, args);
+ else
+ {
+ size_t length = (size_t) ~0 / (4 * sizeof (char));
+ char *result = libintl_vasnprintf (resultbuf, &length, format, args);
+ if (result != resultbuf)
+ {
+ free (result);
+ return -1;
+ }
+ else
+ return length;
+ }
+}
+
+DLL_EXPORTED
+int
+libintl_sprintf (char *resultbuf, const char *format, ...)
+{
+ va_list args;
+ int retval;
+
+ va_start (args, format);
+ retval = libintl_vsprintf (resultbuf, format, args);
+ va_end (args);
+ return retval;
+}
+
+#if HAVE_SNPRINTF
+
+# if HAVE_DECL__SNPRINTF
+ /* Windows. */
+# define system_vsnprintf _vsnprintf
+# else
+ /* Unix. */
+# define system_vsnprintf vsnprintf
+# endif
+
+DLL_EXPORTED
+int
+libintl_vsnprintf (char *resultbuf, size_t length, const char *format, va_list args)
+{
+ if (strchr (format, '$') == NULL)
+ return system_vsnprintf (resultbuf, length, format, args);
+ else
+ {
+ size_t maxlength = length;
+ char *result = libintl_vasnprintf (resultbuf, &length, format, args);
+ if (result != resultbuf)
+ {
+ if (maxlength > 0)
+ {
+ if (length < maxlength)
+ abort ();
+ memcpy (resultbuf, result, maxlength - 1);
+ resultbuf[maxlength - 1] = '\0';
+ }
+ free (result);
+ return -1;
+ }
+ else
+ return length;
+ }
+}
+
+DLL_EXPORTED
+int
+libintl_snprintf (char *resultbuf, size_t length, const char *format, ...)
+{
+ va_list args;
+ int retval;
+
+ va_start (args, format);
+ retval = libintl_vsnprintf (resultbuf, length, format, args);
+ va_end (args);
+ return retval;
+}
+
+#endif
+
+#if HAVE_ASPRINTF
+
+DLL_EXPORTED
+int
+libintl_vasprintf (char **resultp, const char *format, va_list args)
+{
+ size_t length;
+ char *result = libintl_vasnprintf (NULL, &length, format, args);
+ if (result == NULL)
+ return -1;
+ *resultp = result;
+ return length;
+}
+
+DLL_EXPORTED
+int
+libintl_asprintf (char **resultp, const char *format, ...)
+{
+ va_list args;
+ int retval;
+
+ va_start (args, format);
+ retval = libintl_vasprintf (resultp, format, args);
+ va_end (args);
+ return retval;
+}
+
+#endif
+
+#if HAVE_FWPRINTF
+
+#include <wchar.h>
+
+#define WIDE_CHAR_VERSION 1
+
+/* Define auxiliary functions declared in "wprintf-parse.h". */
+#include "printf-parse.c"
+
+/* Define functions declared in "vasnprintf.h". */
+#define vasnwprintf libintl_vasnwprintf
+#include "vasnprintf.c"
+#if 0 /* not needed */
+#define asnwprintf libintl_asnwprintf
+#include "asnprintf.c"
+#endif
+
+# if HAVE_DECL__SNWPRINTF
+ /* Windows. */
+# define system_vswprintf _vsnwprintf
+# else
+ /* Unix. */
+# define system_vswprintf vswprintf
+# endif
+
+DLL_EXPORTED
+int
+libintl_vfwprintf (FILE *stream, const wchar_t *format, va_list args)
+{
+ if (wcschr (format, '$') == NULL)
+ return vfwprintf (stream, format, args);
+ else
+ {
+ size_t length;
+ wchar_t *result = libintl_vasnwprintf (NULL, &length, format, args);
+ int retval = -1;
+ if (result != NULL)
+ {
+ size_t i;
+ for (i = 0; i < length; i++)
+ if (fputwc (result[i], stream) == WEOF)
+ break;
+ if (i == length)
+ retval = length;
+ free (result);
+ }
+ return retval;
+ }
+}
+
+DLL_EXPORTED
+int
+libintl_fwprintf (FILE *stream, const wchar_t *format, ...)
+{
+ va_list args;
+ int retval;
+
+ va_start (args, format);
+ retval = libintl_vfwprintf (stream, format, args);
+ va_end (args);
+ return retval;
+}
+
+DLL_EXPORTED
+int
+libintl_vwprintf (const wchar_t *format, va_list args)
+{
+ return libintl_vfwprintf (stdout, format, args);
+}
+
+DLL_EXPORTED
+int
+libintl_wprintf (const wchar_t *format, ...)
+{
+ va_list args;
+ int retval;
+
+ va_start (args, format);
+ retval = libintl_vwprintf (format, args);
+ va_end (args);
+ return retval;
+}
+
+DLL_EXPORTED
+int
+libintl_vswprintf (wchar_t *resultbuf, size_t length, const wchar_t *format, va_list args)
+{
+ if (wcschr (format, '$') == NULL)
+ return system_vswprintf (resultbuf, length, format, args);
+ else
+ {
+ size_t maxlength = length;
+ wchar_t *result = libintl_vasnwprintf (resultbuf, &length, format, args);
+ if (result != resultbuf)
+ {
+ if (maxlength > 0)
+ {
+ if (length < maxlength)
+ abort ();
+ memcpy (resultbuf, result, (maxlength - 1) * sizeof (wchar_t));
+ resultbuf[maxlength - 1] = 0;
+ }
+ free (result);
+ return -1;
+ }
+ else
+ return length;
+ }
+}
+
+DLL_EXPORTED
+int
+libintl_swprintf (wchar_t *resultbuf, size_t length, const wchar_t *format, ...)
+{
+ va_list args;
+ int retval;
+
+ va_start (args, format);
+ retval = libintl_vswprintf (resultbuf, length, format, args);
+ va_end (args);
+ return retval;
+}
+
+#endif
+
+#endif
diff --git a/macros/texinfo/contrib/texinfo-hu/texinfo/intl/ref-add.sin b/macros/texinfo/contrib/texinfo-hu/texinfo/intl/ref-add.sin
new file mode 100644
index 0000000000..167374e3c5
--- /dev/null
+++ b/macros/texinfo/contrib/texinfo-hu/texinfo/intl/ref-add.sin
@@ -0,0 +1,31 @@
+# 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 Library 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
+# Library General Public License for more details.
+#
+# You should have received a copy of the GNU Library General Public
+# License along with this program; if not, write to the Free Software
+# Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307,
+# 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/macros/texinfo/contrib/texinfo-hu/texinfo/intl/ref-del.sin b/macros/texinfo/contrib/texinfo-hu/texinfo/intl/ref-del.sin
new file mode 100644
index 0000000000..613cf37f3b
--- /dev/null
+++ b/macros/texinfo/contrib/texinfo-hu/texinfo/intl/ref-del.sin
@@ -0,0 +1,26 @@
+# 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 Library 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
+# Library General Public License for more details.
+#
+# You should have received a copy of the GNU Library General Public
+# License along with this program; if not, write to the Free Software
+# Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307,
+# 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/macros/texinfo/contrib/texinfo-hu/texinfo/intl/relocatable.c b/macros/texinfo/contrib/texinfo-hu/texinfo/intl/relocatable.c
new file mode 100644
index 0000000000..bf7c708548
--- /dev/null
+++ b/macros/texinfo/contrib/texinfo-hu/texinfo/intl/relocatable.c
@@ -0,0 +1,449 @@
+/* Provide relocatable packages.
+ Copyright (C) 2003 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 Library 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
+ Library General Public License for more details.
+
+ You should have received a copy of the GNU Library General Public
+ License along with this program; if not, write to the Free Software
+ Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307,
+ USA. */
+
+
+/* Tell glibc's <stdio.h> to provide a prototype for getline().
+ This must come before <config.h> because <config.h> may include
+ <features.h>, and once <features.h> has been included, it's too late. */
+#ifndef _GNU_SOURCE
+# define _GNU_SOURCE 1
+#endif
+
+#ifdef HAVE_CONFIG_H
+# include "config.h"
+#endif
+
+/* Specification. */
+#include "relocatable.h"
+
+#if ENABLE_RELOCATABLE
+
+#include <stddef.h>
+#include <stdio.h>
+#include <stdlib.h>
+#include <string.h>
+
+#ifdef NO_XMALLOC
+# define xmalloc malloc
+#else
+# include "xalloc.h"
+#endif
+
+#if defined _WIN32 || defined __WIN32__
+# define WIN32_LEAN_AND_MEAN
+# include <windows.h>
+#endif
+
+#if DEPENDS_ON_LIBCHARSET
+# include <libcharset.h>
+#endif
+#if DEPENDS_ON_LIBICONV && HAVE_ICONV
+# include <iconv.h>
+#endif
+#if DEPENDS_ON_LIBINTL && ENABLE_NLS
+# include <libintl.h>
+#endif
+
+/* Faked cheap 'bool'. */
+#undef bool
+#undef false
+#undef true
+#define bool int
+#define false 0
+#define true 1
+
+/* Pathname support.
+ ISSLASH(C) tests whether C is a directory separator character.
+ IS_PATH_WITH_DIR(P) tests whether P contains a directory specification.
+ */
+#if defined _WIN32 || defined __WIN32__ || defined __EMX__ || defined __DJGPP__
+ /* Win32, OS/2, DOS */
+# define ISSLASH(C) ((C) == '/' || (C) == '\\')
+# define HAS_DEVICE(P) \
+ ((((P)[0] >= 'A' && (P)[0] <= 'Z') || ((P)[0] >= 'a' && (P)[0] <= 'z')) \
+ && (P)[1] == ':')
+# define IS_PATH_WITH_DIR(P) \
+ (strchr (P, '/') != NULL || strchr (P, '\\') != NULL || HAS_DEVICE (P))
+# define FILESYSTEM_PREFIX_LEN(P) (HAS_DEVICE (P) ? 2 : 0)
+#else
+ /* Unix */
+# define ISSLASH(C) ((C) == '/')
+# define IS_PATH_WITH_DIR(P) (strchr (P, '/') != NULL)
+# define FILESYSTEM_PREFIX_LEN(P) 0
+#endif
+
+/* Original installation prefix. */
+static char *orig_prefix;
+static size_t orig_prefix_len;
+/* Current installation prefix. */
+static char *curr_prefix;
+static size_t curr_prefix_len;
+/* These prefixes do not end in a slash. Anything that will be concatenated
+ to them must start with a slash. */
+
+/* Sets the original and the current installation prefix of this module.
+ Relocation simply replaces a pathname starting with the original prefix
+ by the corresponding pathname with the current prefix instead. Both
+ prefixes should be directory names without trailing slash (i.e. use ""
+ instead of "/"). */
+static void
+set_this_relocation_prefix (const char *orig_prefix_arg,
+ const char *curr_prefix_arg)
+{
+ if (orig_prefix_arg != NULL && curr_prefix_arg != NULL
+ /* Optimization: if orig_prefix and curr_prefix are equal, the
+ relocation is a nop. */
+ && strcmp (orig_prefix_arg, curr_prefix_arg) != 0)
+ {
+ /* Duplicate the argument strings. */
+ char *memory;
+
+ orig_prefix_len = strlen (orig_prefix_arg);
+ curr_prefix_len = strlen (curr_prefix_arg);
+ memory = (char *) xmalloc (orig_prefix_len + 1 + curr_prefix_len + 1);
+#ifdef NO_XMALLOC
+ if (memory != NULL)
+#endif
+ {
+ memcpy (memory, orig_prefix_arg, orig_prefix_len + 1);
+ orig_prefix = memory;
+ memory += orig_prefix_len + 1;
+ memcpy (memory, curr_prefix_arg, curr_prefix_len + 1);
+ curr_prefix = memory;
+ return;
+ }
+ }
+ orig_prefix = NULL;
+ curr_prefix = NULL;
+ /* Don't worry about wasted memory here - this function is usually only
+ called once. */
+}
+
+/* Sets the original and the current installation prefix of the package.
+ Relocation simply replaces a pathname starting with the original prefix
+ by the corresponding pathname with the current prefix instead. Both
+ prefixes should be directory names without trailing slash (i.e. use ""
+ instead of "/"). */
+void
+set_relocation_prefix (const char *orig_prefix_arg, const char *curr_prefix_arg)
+{
+ set_this_relocation_prefix (orig_prefix_arg, curr_prefix_arg);
+
+ /* Now notify all dependent libraries. */
+#if DEPENDS_ON_LIBCHARSET
+ libcharset_set_relocation_prefix (orig_prefix_arg, curr_prefix_arg);
+#endif
+#if DEPENDS_ON_LIBICONV && HAVE_ICONV && _LIBICONV_VERSION >= 0x0109
+ libiconv_set_relocation_prefix (orig_prefix_arg, curr_prefix_arg);
+#endif
+#if DEPENDS_ON_LIBINTL && ENABLE_NLS && defined libintl_set_relocation_prefix
+ libintl_set_relocation_prefix (orig_prefix_arg, curr_prefix_arg);
+#endif
+}
+
+#if !defined IN_LIBRARY || (defined PIC && defined INSTALLDIR)
+
+/* Convenience function:
+ Computes the current installation prefix, based on the original
+ installation prefix, the original installation directory of a particular
+ file, and the current pathname of this file. Returns NULL upon failure. */
+#ifdef IN_LIBRARY
+#define compute_curr_prefix local_compute_curr_prefix
+static
+#endif
+const char *
+compute_curr_prefix (const char *orig_installprefix,
+ const char *orig_installdir,
+ const char *curr_pathname)
+{
+ const char *curr_installdir;
+ const char *rel_installdir;
+
+ if (curr_pathname == NULL)
+ return NULL;
+
+ /* Determine the relative installation directory, relative to the prefix.
+ This is simply the difference between orig_installprefix and
+ orig_installdir. */
+ if (strncmp (orig_installprefix, orig_installdir, strlen (orig_installprefix))
+ != 0)
+ /* Shouldn't happen - nothing should be installed outside $(prefix). */
+ return NULL;
+ rel_installdir = orig_installdir + strlen (orig_installprefix);
+
+ /* Determine the current installation directory. */
+ {
+ const char *p_base = curr_pathname + FILESYSTEM_PREFIX_LEN (curr_pathname);
+ const char *p = curr_pathname + strlen (curr_pathname);
+ char *q;
+
+ while (p > p_base)
+ {
+ p--;
+ if (ISSLASH (*p))
+ break;
+ }
+
+ q = (char *) xmalloc (p - curr_pathname + 1);
+#ifdef NO_XMALLOC
+ if (q == NULL)
+ return NULL;
+#endif
+ memcpy (q, curr_pathname, p - curr_pathname);
+ q[p - curr_pathname] = '\0';
+ curr_installdir = q;
+ }
+
+ /* Compute the current installation prefix by removing the trailing
+ rel_installdir from it. */
+ {
+ const char *rp = rel_installdir + strlen (rel_installdir);
+ const char *cp = curr_installdir + strlen (curr_installdir);
+ const char *cp_base =
+ curr_installdir + FILESYSTEM_PREFIX_LEN (curr_installdir);
+
+ while (rp > rel_installdir && cp > cp_base)
+ {
+ bool same = false;
+ const char *rpi = rp;
+ const char *cpi = cp;
+
+ while (rpi > rel_installdir && cpi > cp_base)
+ {
+ rpi--;
+ cpi--;
+ if (ISSLASH (*rpi) || ISSLASH (*cpi))
+ {
+ if (ISSLASH (*rpi) && ISSLASH (*cpi))
+ same = true;
+ break;
+ }
+#if defined _WIN32 || defined __WIN32__ || defined __EMX__ || defined __DJGPP__
+ /* Win32, OS/2, DOS - case insignificant filesystem */
+ if ((*rpi >= 'a' && *rpi <= 'z' ? *rpi - 'a' + 'A' : *rpi)
+ != (*cpi >= 'a' && *cpi <= 'z' ? *cpi - 'a' + 'A' : *cpi))
+ break;
+#else
+ if (*rpi != *cpi)
+ break;
+#endif
+ }
+ if (!same)
+ break;
+ /* The last pathname component was the same. opi and cpi now point
+ to the slash before it. */
+ rp = rpi;
+ cp = cpi;
+ }
+
+ if (rp > rel_installdir)
+ /* Unexpected: The curr_installdir does not end with rel_installdir. */
+ return NULL;
+
+ {
+ size_t curr_prefix_len = cp - curr_installdir;
+ char *curr_prefix;
+
+ curr_prefix = (char *) xmalloc (curr_prefix_len + 1);
+#ifdef NO_XMALLOC
+ if (curr_prefix == NULL)
+ return NULL;
+#endif
+ memcpy (curr_prefix, curr_installdir, curr_prefix_len);
+ curr_prefix[curr_prefix_len] = '\0';
+
+ return curr_prefix;
+ }
+ }
+}
+
+#endif /* !IN_LIBRARY || PIC */
+
+#if defined PIC && defined INSTALLDIR
+
+/* Full pathname of shared library, or NULL. */
+static char *shared_library_fullname;
+
+#if defined _WIN32 || defined __WIN32__
+
+/* Determine the full pathname of the shared library when it is loaded. */
+
+BOOL WINAPI
+DllMain (HINSTANCE module_handle, DWORD event, LPVOID reserved)
+{
+ (void) reserved;
+
+ if (event == DLL_PROCESS_ATTACH)
+ {
+ /* The DLL is being loaded into an application's address range. */
+ static char location[MAX_PATH];
+
+ if (!GetModuleFileName (module_handle, location, sizeof (location)))
+ /* Shouldn't happen. */
+ return FALSE;
+
+ if (!IS_PATH_WITH_DIR (location))
+ /* Shouldn't happen. */
+ return FALSE;
+
+ shared_library_fullname = strdup (location);
+ }
+
+ return TRUE;
+}
+
+#else /* Unix */
+
+static void
+find_shared_library_fullname ()
+{
+#if defined __linux__ && __GLIBC__ >= 2
+ /* Linux has /proc/self/maps. glibc 2 has the getline() function. */
+ FILE *fp;
+
+ /* Open the current process' maps file. It describes one VMA per line. */
+ fp = fopen ("/proc/self/maps", "r");
+ if (fp)
+ {
+ unsigned long address = (unsigned long) &find_shared_library_fullname;
+ for (;;)
+ {
+ unsigned long start, end;
+ int c;
+
+ if (fscanf (fp, "%lx-%lx", &start, &end) != 2)
+ break;
+ if (address >= start && address <= end - 1)
+ {
+ /* Found it. Now see if this line contains a filename. */
+ while (c = getc (fp), c != EOF && c != '\n' && c != '/')
+ continue;
+ if (c == '/')
+ {
+ size_t size;
+ int len;
+
+ ungetc (c, fp);
+ shared_library_fullname = NULL; size = 0;
+ len = getline (&shared_library_fullname, &size, fp);
+ if (len >= 0)
+ {
+ /* Success: filled shared_library_fullname. */
+ if (len > 0 && shared_library_fullname[len - 1] == '\n')
+ shared_library_fullname[len - 1] = '\0';
+ }
+ }
+ break;
+ }
+ while (c = getc (fp), c != EOF && c != '\n')
+ continue;
+ }
+ fclose (fp);
+ }
+#endif
+}
+
+#endif /* WIN32 / Unix */
+
+/* Return the full pathname of the current shared library.
+ Return NULL if unknown.
+ Guaranteed to work only on Linux and Woe32. */
+static char *
+get_shared_library_fullname ()
+{
+#if !(defined _WIN32 || defined __WIN32__)
+ static bool tried_find_shared_library_fullname;
+ if (!tried_find_shared_library_fullname)
+ {
+ find_shared_library_fullname ();
+ tried_find_shared_library_fullname = true;
+ }
+#endif
+ return shared_library_fullname;
+}
+
+#endif /* PIC */
+
+/* Returns the pathname, relocated according to the current installation
+ directory. */
+const char *
+relocate (const char *pathname)
+{
+#if defined PIC && defined INSTALLDIR
+ static int initialized;
+
+ /* Initialization code for a shared library. */
+ if (!initialized)
+ {
+ /* At this point, orig_prefix and curr_prefix likely have already been
+ set through the main program's set_program_name_and_installdir
+ function. This is sufficient in the case that the library has
+ initially been installed in the same orig_prefix. But we can do
+ better, to also cover the cases that 1. it has been installed
+ in a different prefix before being moved to orig_prefix and (later)
+ to curr_prefix, 2. unlike the program, it has not moved away from
+ orig_prefix. */
+ const char *orig_installprefix = INSTALLPREFIX;
+ const char *orig_installdir = INSTALLDIR;
+ const char *curr_prefix_better;
+
+ curr_prefix_better =
+ compute_curr_prefix (orig_installprefix, orig_installdir,
+ get_shared_library_fullname ());
+ if (curr_prefix_better == NULL)
+ curr_prefix_better = curr_prefix;
+
+ set_relocation_prefix (orig_installprefix, curr_prefix_better);
+
+ initialized = 1;
+ }
+#endif
+
+ /* Note: It is not necessary to perform case insensitive comparison here,
+ even for DOS-like filesystems, because the pathname argument was
+ typically created from the same Makefile variable as orig_prefix came
+ from. */
+ if (orig_prefix != NULL && curr_prefix != NULL
+ && strncmp (pathname, orig_prefix, orig_prefix_len) == 0)
+ {
+ if (pathname[orig_prefix_len] == '\0')
+ /* pathname equals orig_prefix. */
+ return curr_prefix;
+ if (ISSLASH (pathname[orig_prefix_len]))
+ {
+ /* pathname starts with orig_prefix. */
+ const char *pathname_tail = &pathname[orig_prefix_len];
+ char *result =
+ (char *) xmalloc (curr_prefix_len + strlen (pathname_tail) + 1);
+
+#ifdef NO_XMALLOC
+ if (result != NULL)
+#endif
+ {
+ memcpy (result, curr_prefix, curr_prefix_len);
+ strcpy (result + curr_prefix_len, pathname_tail);
+ return result;
+ }
+ }
+ }
+ /* Nothing to relocate. */
+ return pathname;
+}
+
+#endif
diff --git a/macros/texinfo/contrib/texinfo-hu/texinfo/intl/relocatable.h b/macros/texinfo/contrib/texinfo-hu/texinfo/intl/relocatable.h
new file mode 100644
index 0000000000..48c5b71e21
--- /dev/null
+++ b/macros/texinfo/contrib/texinfo-hu/texinfo/intl/relocatable.h
@@ -0,0 +1,77 @@
+/* Provide relocatable packages.
+ Copyright (C) 2003 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 Library 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
+ Library General Public License for more details.
+
+ You should have received a copy of the GNU Library General Public
+ License along with this program; if not, write to the Free Software
+ Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307,
+ USA. */
+
+#ifndef _RELOCATABLE_H
+#define _RELOCATABLE_H
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+
+/* This can be enabled through the configure --enable-relocatable option. */
+#if ENABLE_RELOCATABLE
+
+/* When building a DLL, we must export some functions. Note that because
+ this is a private .h file, we don't need to use __declspec(dllimport)
+ in any case. */
+#if defined _MSC_VER && BUILDING_DLL
+# define RELOCATABLE_DLL_EXPORTED __declspec(dllexport)
+#else
+# define RELOCATABLE_DLL_EXPORTED
+#endif
+
+/* Sets the original and the current installation prefix of the package.
+ Relocation simply replaces a pathname starting with the original prefix
+ by the corresponding pathname with the current prefix instead. Both
+ prefixes should be directory names without trailing slash (i.e. use ""
+ instead of "/"). */
+extern RELOCATABLE_DLL_EXPORTED void
+ set_relocation_prefix (const char *orig_prefix,
+ const char *curr_prefix);
+
+/* Returns the pathname, relocated according to the current installation
+ directory. */
+extern const char * relocate (const char *pathname);
+
+/* Memory management: relocate() leaks memory, because it has to construct
+ a fresh pathname. If this is a problem because your program calls
+ relocate() frequently, think about caching the result. */
+
+/* Convenience function:
+ Computes the current installation prefix, based on the original
+ installation prefix, the original installation directory of a particular
+ file, and the current pathname of this file. Returns NULL upon failure. */
+extern const char * compute_curr_prefix (const char *orig_installprefix,
+ const char *orig_installdir,
+ const char *curr_pathname);
+
+#else
+
+/* By default, we use the hardwired pathnames. */
+#define relocate(pathname) (pathname)
+
+#endif
+
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif /* _RELOCATABLE_H */
diff --git a/macros/texinfo/contrib/texinfo-hu/texinfo/intl/textdomain.c b/macros/texinfo/contrib/texinfo-hu/texinfo/intl/textdomain.c
new file mode 100644
index 0000000000..8745a8435e
--- /dev/null
+++ b/macros/texinfo/contrib/texinfo-hu/texinfo/intl/textdomain.c
@@ -0,0 +1,141 @@
+/* Implementation of the textdomain(3) function.
+ Copyright (C) 1995-1998, 2000-2003 Free Software Foundation, Inc.
+
+ This program is free software; you can redistribute it and/or modify it
+ under the terms of the GNU Library General Public License as published
+ 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
+ Library General Public License for more details.
+
+ You should have received a copy of the GNU Library General Public
+ License along with this program; if not, write to the Free Software
+ Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307,
+ USA. */
+
+#ifdef HAVE_CONFIG_H
+# include <config.h>
+#endif
+
+#include <stdlib.h>
+#include <string.h>
+
+#ifdef _LIBC
+# include <libintl.h>
+#else
+# include "libgnuintl.h"
+#endif
+#include "gettextP.h"
+
+#ifdef _LIBC
+/* We have to handle multi-threaded applications. */
+# include <bits/libc-lock.h>
+#else
+/* Provide dummy implementation if this is outside glibc. */
+# define __libc_rwlock_define(CLASS, NAME)
+# define __libc_rwlock_wrlock(NAME)
+# define __libc_rwlock_unlock(NAME)
+#endif
+
+/* The internal variables in the standalone libintl.a must have different
+ names than the internal variables in GNU libc, otherwise programs
+ using libintl.a cannot be linked statically. */
+#if !defined _LIBC
+# define _nl_default_default_domain libintl_nl_default_default_domain
+# define _nl_current_default_domain libintl_nl_current_default_domain
+#endif
+
+/* @@ end of prolog @@ */
+
+/* Name of the default text domain. */
+extern const char _nl_default_default_domain[] attribute_hidden;
+
+/* Default text domain in which entries for gettext(3) are to be found. */
+extern const char *_nl_current_default_domain attribute_hidden;
+
+
+/* Names for the libintl functions are a problem. They must not clash
+ with existing names and they should follow ANSI C. But this source
+ code is also used in GNU C Library where the names have a __
+ prefix. So we have to make a difference here. */
+#ifdef _LIBC
+# define TEXTDOMAIN __textdomain
+# ifndef strdup
+# define strdup(str) __strdup (str)
+# endif
+#else
+# define TEXTDOMAIN libintl_textdomain
+#endif
+
+/* Lock variable to protect the global data in the gettext implementation. */
+__libc_rwlock_define (extern, _nl_state_lock attribute_hidden)
+
+/* Set the current default message catalog to DOMAINNAME.
+ If DOMAINNAME is null, return the current default.
+ If DOMAINNAME is "", reset to the default of "messages". */
+char *
+TEXTDOMAIN (const char *domainname)
+{
+ char *new_domain;
+ char *old_domain;
+
+ /* A NULL pointer requests the current setting. */
+ if (domainname == NULL)
+ return (char *) _nl_current_default_domain;
+
+ __libc_rwlock_wrlock (_nl_state_lock);
+
+ old_domain = (char *) _nl_current_default_domain;
+
+ /* If domain name is the null string set to default domain "messages". */
+ if (domainname[0] == '\0'
+ || strcmp (domainname, _nl_default_default_domain) == 0)
+ {
+ _nl_current_default_domain = _nl_default_default_domain;
+ new_domain = (char *) _nl_current_default_domain;
+ }
+ else if (strcmp (domainname, old_domain) == 0)
+ /* This can happen and people will use it to signal that some
+ environment variable changed. */
+ new_domain = old_domain;
+ else
+ {
+ /* If the following malloc fails `_nl_current_default_domain'
+ will be NULL. This value will be returned and so signals we
+ are out of core. */
+#if defined _LIBC || defined HAVE_STRDUP
+ new_domain = strdup (domainname);
+#else
+ size_t len = strlen (domainname) + 1;
+ new_domain = (char *) malloc (len);
+ if (new_domain != NULL)
+ memcpy (new_domain, domainname, len);
+#endif
+
+ if (new_domain != NULL)
+ _nl_current_default_domain = new_domain;
+ }
+
+ /* We use this possibility to signal a change of the loaded catalogs
+ since this is most likely the case and there is no other easy we
+ to do it. Do it only when the call was successful. */
+ if (new_domain != NULL)
+ {
+ ++_nl_msg_cat_cntr;
+
+ if (old_domain != new_domain && old_domain != _nl_default_default_domain)
+ free (old_domain);
+ }
+
+ __libc_rwlock_unlock (_nl_state_lock);
+
+ return new_domain;
+}
+
+#ifdef _LIBC
+/* Alias for function name in GNU C Library. */
+weak_alias (__textdomain, textdomain);
+#endif
diff --git a/macros/texinfo/contrib/texinfo-hu/texinfo/intl/vasnprintf.c b/macros/texinfo/contrib/texinfo-hu/texinfo/intl/vasnprintf.c
new file mode 100644
index 0000000000..8a62282d73
--- /dev/null
+++ b/macros/texinfo/contrib/texinfo-hu/texinfo/intl/vasnprintf.c
@@ -0,0 +1,887 @@
+/* vsprintf with automatic memory allocation.
+ Copyright (C) 1999, 2002-2003 Free Software Foundation, Inc.
+
+ This program is free software; you can redistribute it and/or modify it
+ under the terms of the GNU Library General Public License as published
+ 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
+ Library General Public License for more details.
+
+ You should have received a copy of the GNU Library General Public
+ License along with this program; if not, write to the Free Software
+ Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307,
+ USA. */
+
+/* Tell glibc's <stdio.h> to provide a prototype for snprintf().
+ This must come before <config.h> because <config.h> may include
+ <features.h>, and once <features.h> has been included, it's too late. */
+#ifndef _GNU_SOURCE
+# define _GNU_SOURCE 1
+#endif
+
+#ifdef HAVE_CONFIG_H
+# include <config.h>
+#endif
+#ifndef IN_LIBINTL
+# include <alloca.h>
+#endif
+
+/* Specification. */
+#if WIDE_CHAR_VERSION
+# include "vasnwprintf.h"
+#else
+# include "vasnprintf.h"
+#endif
+
+#include <stdio.h> /* snprintf(), sprintf() */
+#include <stdlib.h> /* abort(), malloc(), realloc(), free() */
+#include <string.h> /* memcpy(), strlen() */
+#include <errno.h> /* errno */
+#include <limits.h> /* CHAR_BIT */
+#include <float.h> /* DBL_MAX_EXP, LDBL_MAX_EXP */
+#if WIDE_CHAR_VERSION
+# include "wprintf-parse.h"
+#else
+# include "printf-parse.h"
+#endif
+
+/* Checked size_t computations. */
+#include "xsize.h"
+
+#ifdef HAVE_WCHAR_T
+# ifdef HAVE_WCSLEN
+# define local_wcslen wcslen
+# else
+ /* Solaris 2.5.1 has wcslen() in a separate library libw.so. To avoid
+ a dependency towards this library, here is a local substitute.
+ Define this substitute only once, even if this file is included
+ twice in the same compilation unit. */
+# ifndef local_wcslen_defined
+# define local_wcslen_defined 1
+static size_t
+local_wcslen (const wchar_t *s)
+{
+ const wchar_t *ptr;
+
+ for (ptr = s; *ptr != (wchar_t) 0; ptr++)
+ ;
+ return ptr - s;
+}
+# endif
+# endif
+#endif
+
+#if WIDE_CHAR_VERSION
+# define VASNPRINTF vasnwprintf
+# define CHAR_T wchar_t
+# define DIRECTIVE wchar_t_directive
+# define DIRECTIVES wchar_t_directives
+# define PRINTF_PARSE wprintf_parse
+# define USE_SNPRINTF 1
+# if HAVE_DECL__SNWPRINTF
+ /* On Windows, the function swprintf() has a different signature than
+ on Unix; we use the _snwprintf() function instead. */
+# define SNPRINTF _snwprintf
+# else
+ /* Unix. */
+# define SNPRINTF swprintf
+# endif
+#else
+# define VASNPRINTF vasnprintf
+# define CHAR_T char
+# define DIRECTIVE char_directive
+# define DIRECTIVES char_directives
+# define PRINTF_PARSE printf_parse
+# define USE_SNPRINTF (HAVE_DECL__SNPRINTF || HAVE_SNPRINTF)
+# if HAVE_DECL__SNPRINTF
+ /* Windows. */
+# define SNPRINTF _snprintf
+# else
+ /* Unix. */
+# define SNPRINTF snprintf
+# endif
+#endif
+
+CHAR_T *
+VASNPRINTF (CHAR_T *resultbuf, size_t *lengthp, const CHAR_T *format, va_list args)
+{
+ DIRECTIVES d;
+ arguments a;
+
+ if (PRINTF_PARSE (format, &d, &a) < 0)
+ {
+ errno = EINVAL;
+ return NULL;
+ }
+
+#define CLEANUP() \
+ free (d.dir); \
+ if (a.arg) \
+ free (a.arg);
+
+ if (printf_fetchargs (args, &a) < 0)
+ {
+ CLEANUP ();
+ errno = EINVAL;
+ return NULL;
+ }
+
+ {
+ size_t buf_neededlength;
+ CHAR_T *buf;
+ CHAR_T *buf_malloced;
+ const CHAR_T *cp;
+ size_t i;
+ DIRECTIVE *dp;
+ /* Output string accumulator. */
+ CHAR_T *result;
+ size_t allocated;
+ size_t length;
+
+ /* Allocate a small buffer that will hold a directive passed to
+ sprintf or snprintf. */
+ buf_neededlength =
+ xsum4 (7, d.max_width_length, d.max_precision_length, 6);
+#if HAVE_ALLOCA
+ if (buf_neededlength < 4000 / sizeof (CHAR_T))
+ {
+ buf = (CHAR_T *) alloca (buf_neededlength * sizeof (CHAR_T));
+ buf_malloced = NULL;
+ }
+ else
+#endif
+ {
+ size_t buf_memsize = xtimes (buf_neededlength, sizeof (CHAR_T));
+ if (size_overflow_p (buf_memsize))
+ goto out_of_memory_1;
+ buf = (CHAR_T *) malloc (buf_memsize);
+ if (buf == NULL)
+ goto out_of_memory_1;
+ buf_malloced = buf;
+ }
+
+ if (resultbuf != NULL)
+ {
+ result = resultbuf;
+ allocated = *lengthp;
+ }
+ else
+ {
+ result = NULL;
+ allocated = 0;
+ }
+ length = 0;
+ /* Invariants:
+ result is either == resultbuf or == NULL or malloc-allocated.
+ If length > 0, then result != NULL. */
+
+ /* Ensures that allocated >= needed. Aborts through a jump to
+ out_of_memory if needed is SIZE_MAX or otherwise too big. */
+#define ENSURE_ALLOCATION(needed) \
+ if ((needed) > allocated) \
+ { \
+ size_t memory_size; \
+ CHAR_T *memory; \
+ \
+ allocated = (allocated > 0 ? xtimes (allocated, 2) : 12); \
+ if ((needed) > allocated) \
+ allocated = (needed); \
+ memory_size = xtimes (allocated, sizeof (CHAR_T)); \
+ if (size_overflow_p (memory_size)) \
+ goto out_of_memory; \
+ if (result == resultbuf || result == NULL) \
+ memory = (CHAR_T *) malloc (memory_size); \
+ else \
+ memory = (CHAR_T *) realloc (result, memory_size); \
+ if (memory == NULL) \
+ goto out_of_memory; \
+ if (result == resultbuf && length > 0) \
+ memcpy (memory, result, length * sizeof (CHAR_T)); \
+ result = memory; \
+ }
+
+ for (cp = format, i = 0, dp = &d.dir[0]; ; cp = dp->dir_end, i++, dp++)
+ {
+ if (cp != dp->dir_start)
+ {
+ size_t n = dp->dir_start - cp;
+ size_t augmented_length = xsum (length, n);
+
+ ENSURE_ALLOCATION (augmented_length);
+ memcpy (result + length, cp, n * sizeof (CHAR_T));
+ length = augmented_length;
+ }
+ if (i == d.count)
+ break;
+
+ /* Execute a single directive. */
+ if (dp->conversion == '%')
+ {
+ size_t augmented_length;
+
+ if (!(dp->arg_index == ARG_NONE))
+ abort ();
+ augmented_length = xsum (length, 1);
+ ENSURE_ALLOCATION (augmented_length);
+ result[length] = '%';
+ length = augmented_length;
+ }
+ else
+ {
+ if (!(dp->arg_index != ARG_NONE))
+ abort ();
+
+ if (dp->conversion == 'n')
+ {
+ switch (a.arg[dp->arg_index].type)
+ {
+ case TYPE_COUNT_SCHAR_POINTER:
+ *a.arg[dp->arg_index].a.a_count_schar_pointer = length;
+ break;
+ case TYPE_COUNT_SHORT_POINTER:
+ *a.arg[dp->arg_index].a.a_count_short_pointer = length;
+ break;
+ case TYPE_COUNT_INT_POINTER:
+ *a.arg[dp->arg_index].a.a_count_int_pointer = length;
+ break;
+ case TYPE_COUNT_LONGINT_POINTER:
+ *a.arg[dp->arg_index].a.a_count_longint_pointer = length;
+ break;
+#ifdef HAVE_LONG_LONG
+ case TYPE_COUNT_LONGLONGINT_POINTER:
+ *a.arg[dp->arg_index].a.a_count_longlongint_pointer = length;
+ break;
+#endif
+ default:
+ abort ();
+ }
+ }
+ else
+ {
+ arg_type type = a.arg[dp->arg_index].type;
+ CHAR_T *p;
+ unsigned int prefix_count;
+ int prefixes[2];
+#if !USE_SNPRINTF
+ size_t tmp_length;
+ CHAR_T tmpbuf[700];
+ CHAR_T *tmp;
+
+ /* Allocate a temporary buffer of sufficient size for calling
+ sprintf. */
+ {
+ size_t width;
+ size_t precision;
+
+ width = 0;
+ if (dp->width_start != dp->width_end)
+ {
+ if (dp->width_arg_index != ARG_NONE)
+ {
+ int arg;
+
+ if (!(a.arg[dp->width_arg_index].type == TYPE_INT))
+ abort ();
+ arg = a.arg[dp->width_arg_index].a.a_int;
+ width = (arg < 0 ? (unsigned int) (-arg) : arg);
+ }
+ else
+ {
+ const CHAR_T *digitp = dp->width_start;
+
+ do
+ width = xsum (xtimes (width, 10), *digitp++ - '0');
+ while (digitp != dp->width_end);
+ }
+ }
+
+ precision = 6;
+ if (dp->precision_start != dp->precision_end)
+ {
+ if (dp->precision_arg_index != ARG_NONE)
+ {
+ int arg;
+
+ if (!(a.arg[dp->precision_arg_index].type == TYPE_INT))
+ abort ();
+ arg = a.arg[dp->precision_arg_index].a.a_int;
+ precision = (arg < 0 ? 0 : arg);
+ }
+ else
+ {
+ const CHAR_T *digitp = dp->precision_start + 1;
+
+ precision = 0;
+ do
+ precision = xsum (xtimes (precision, 10), *digitp++ - '0');
+ while (digitp != dp->precision_end);
+ }
+ }
+
+ switch (dp->conversion)
+ {
+
+ case 'd': case 'i': case 'u':
+# ifdef HAVE_LONG_LONG
+ if (type == TYPE_LONGLONGINT || type == TYPE_ULONGLONGINT)
+ tmp_length =
+ (unsigned int) (sizeof (unsigned long long) * CHAR_BIT
+ * 0.30103 /* binary -> decimal */
+ * 2 /* estimate for FLAG_GROUP */
+ )
+ + 1 /* turn floor into ceil */
+ + 1; /* account for leading sign */
+ else
+# endif
+ if (type == TYPE_LONGINT || type == TYPE_ULONGINT)
+ tmp_length =
+ (unsigned int) (sizeof (unsigned long) * CHAR_BIT
+ * 0.30103 /* binary -> decimal */
+ * 2 /* estimate for FLAG_GROUP */
+ )
+ + 1 /* turn floor into ceil */
+ + 1; /* account for leading sign */
+ else
+ tmp_length =
+ (unsigned int) (sizeof (unsigned int) * CHAR_BIT
+ * 0.30103 /* binary -> decimal */
+ * 2 /* estimate for FLAG_GROUP */
+ )
+ + 1 /* turn floor into ceil */
+ + 1; /* account for leading sign */
+ break;
+
+ case 'o':
+# ifdef HAVE_LONG_LONG
+ if (type == TYPE_LONGLONGINT || type == TYPE_ULONGLONGINT)
+ tmp_length =
+ (unsigned int) (sizeof (unsigned long long) * CHAR_BIT
+ * 0.333334 /* binary -> octal */
+ )
+ + 1 /* turn floor into ceil */
+ + 1; /* account for leading sign */
+ else
+# endif
+ if (type == TYPE_LONGINT || type == TYPE_ULONGINT)
+ tmp_length =
+ (unsigned int) (sizeof (unsigned long) * CHAR_BIT
+ * 0.333334 /* binary -> octal */
+ )
+ + 1 /* turn floor into ceil */
+ + 1; /* account for leading sign */
+ else
+ tmp_length =
+ (unsigned int) (sizeof (unsigned int) * CHAR_BIT
+ * 0.333334 /* binary -> octal */
+ )
+ + 1 /* turn floor into ceil */
+ + 1; /* account for leading sign */
+ break;
+
+ case 'x': case 'X':
+# ifdef HAVE_LONG_LONG
+ if (type == TYPE_LONGLONGINT || type == TYPE_ULONGLONGINT)
+ tmp_length =
+ (unsigned int) (sizeof (unsigned long long) * CHAR_BIT
+ * 0.25 /* binary -> hexadecimal */
+ )
+ + 1 /* turn floor into ceil */
+ + 2; /* account for leading sign or alternate form */
+ else
+# endif
+ if (type == TYPE_LONGINT || type == TYPE_ULONGINT)
+ tmp_length =
+ (unsigned int) (sizeof (unsigned long) * CHAR_BIT
+ * 0.25 /* binary -> hexadecimal */
+ )
+ + 1 /* turn floor into ceil */
+ + 2; /* account for leading sign or alternate form */
+ else
+ tmp_length =
+ (unsigned int) (sizeof (unsigned int) * CHAR_BIT
+ * 0.25 /* binary -> hexadecimal */
+ )
+ + 1 /* turn floor into ceil */
+ + 2; /* account for leading sign or alternate form */
+ break;
+
+ case 'f': case 'F':
+# ifdef HAVE_LONG_DOUBLE
+ if (type == TYPE_LONGDOUBLE)
+ tmp_length =
+ (unsigned int) (LDBL_MAX_EXP
+ * 0.30103 /* binary -> decimal */
+ * 2 /* estimate for FLAG_GROUP */
+ )
+ + 1 /* turn floor into ceil */
+ + 10; /* sign, decimal point etc. */
+ else
+# endif
+ tmp_length =
+ (unsigned int) (DBL_MAX_EXP
+ * 0.30103 /* binary -> decimal */
+ * 2 /* estimate for FLAG_GROUP */
+ )
+ + 1 /* turn floor into ceil */
+ + 10; /* sign, decimal point etc. */
+ tmp_length = xsum (tmp_length, precision);
+ break;
+
+ case 'e': case 'E': case 'g': case 'G':
+ case 'a': case 'A':
+ tmp_length =
+ 12; /* sign, decimal point, exponent etc. */
+ tmp_length = xsum (tmp_length, precision);
+ break;
+
+ case 'c':
+# if defined HAVE_WINT_T && !WIDE_CHAR_VERSION
+ if (type == TYPE_WIDE_CHAR)
+ tmp_length = MB_CUR_MAX;
+ else
+# endif
+ tmp_length = 1;
+ break;
+
+ case 's':
+# ifdef HAVE_WCHAR_T
+ if (type == TYPE_WIDE_STRING)
+ {
+ tmp_length =
+ local_wcslen (a.arg[dp->arg_index].a.a_wide_string);
+
+# if !WIDE_CHAR_VERSION
+ tmp_length = xtimes (tmp_length, MB_CUR_MAX);
+# endif
+ }
+ else
+# endif
+ tmp_length = strlen (a.arg[dp->arg_index].a.a_string);
+ break;
+
+ case 'p':
+ tmp_length =
+ (unsigned int) (sizeof (void *) * CHAR_BIT
+ * 0.25 /* binary -> hexadecimal */
+ )
+ + 1 /* turn floor into ceil */
+ + 2; /* account for leading 0x */
+ break;
+
+ default:
+ abort ();
+ }
+
+ if (tmp_length < width)
+ tmp_length = width;
+
+ tmp_length = xsum (tmp_length, 1); /* account for trailing NUL */
+ }
+
+ if (tmp_length <= sizeof (tmpbuf) / sizeof (CHAR_T))
+ tmp = tmpbuf;
+ else
+ {
+ size_t tmp_memsize = xtimes (tmp_length, sizeof (CHAR_T));
+
+ if (size_overflow_p (tmp_memsize))
+ /* Overflow, would lead to out of memory. */
+ goto out_of_memory;
+ tmp = (CHAR_T *) malloc (tmp_memsize);
+ if (tmp == NULL)
+ /* Out of memory. */
+ goto out_of_memory;
+ }
+#endif
+
+ /* Construct the format string for calling snprintf or
+ sprintf. */
+ p = buf;
+ *p++ = '%';
+ if (dp->flags & FLAG_GROUP)
+ *p++ = '\'';
+ if (dp->flags & FLAG_LEFT)
+ *p++ = '-';
+ if (dp->flags & FLAG_SHOWSIGN)
+ *p++ = '+';
+ if (dp->flags & FLAG_SPACE)
+ *p++ = ' ';
+ if (dp->flags & FLAG_ALT)
+ *p++ = '#';
+ if (dp->flags & FLAG_ZERO)
+ *p++ = '0';
+ if (dp->width_start != dp->width_end)
+ {
+ size_t n = dp->width_end - dp->width_start;
+ memcpy (p, dp->width_start, n * sizeof (CHAR_T));
+ p += n;
+ }
+ if (dp->precision_start != dp->precision_end)
+ {
+ size_t n = dp->precision_end - dp->precision_start;
+ memcpy (p, dp->precision_start, n * sizeof (CHAR_T));
+ p += n;
+ }
+
+ switch (type)
+ {
+#ifdef HAVE_LONG_LONG
+ case TYPE_LONGLONGINT:
+ case TYPE_ULONGLONGINT:
+ *p++ = 'l';
+ /*FALLTHROUGH*/
+#endif
+ case TYPE_LONGINT:
+ case TYPE_ULONGINT:
+#ifdef HAVE_WINT_T
+ case TYPE_WIDE_CHAR:
+#endif
+#ifdef HAVE_WCHAR_T
+ case TYPE_WIDE_STRING:
+#endif
+ *p++ = 'l';
+ break;
+#ifdef HAVE_LONG_DOUBLE
+ case TYPE_LONGDOUBLE:
+ *p++ = 'L';
+ break;
+#endif
+ default:
+ break;
+ }
+ *p = dp->conversion;
+#if USE_SNPRINTF
+ p[1] = '%';
+ p[2] = 'n';
+ p[3] = '\0';
+#else
+ p[1] = '\0';
+#endif
+
+ /* Construct the arguments for calling snprintf or sprintf. */
+ prefix_count = 0;
+ if (dp->width_arg_index != ARG_NONE)
+ {
+ if (!(a.arg[dp->width_arg_index].type == TYPE_INT))
+ abort ();
+ prefixes[prefix_count++] = a.arg[dp->width_arg_index].a.a_int;
+ }
+ if (dp->precision_arg_index != ARG_NONE)
+ {
+ if (!(a.arg[dp->precision_arg_index].type == TYPE_INT))
+ abort ();
+ prefixes[prefix_count++] = a.arg[dp->precision_arg_index].a.a_int;
+ }
+
+#if USE_SNPRINTF
+ /* Prepare checking whether snprintf returns the count
+ via %n. */
+ ENSURE_ALLOCATION (xsum (length, 1));
+ result[length] = '\0';
+#endif
+
+ for (;;)
+ {
+ size_t maxlen;
+ int count;
+ int retcount;
+
+ maxlen = allocated - length;
+ count = -1;
+ retcount = 0;
+
+#if USE_SNPRINTF
+# define SNPRINTF_BUF(arg) \
+ switch (prefix_count) \
+ { \
+ case 0: \
+ retcount = SNPRINTF (result + length, maxlen, buf, \
+ arg, &count); \
+ break; \
+ case 1: \
+ retcount = SNPRINTF (result + length, maxlen, buf, \
+ prefixes[0], arg, &count); \
+ break; \
+ case 2: \
+ retcount = SNPRINTF (result + length, maxlen, buf, \
+ prefixes[0], prefixes[1], arg, \
+ &count); \
+ break; \
+ default: \
+ abort (); \
+ }
+#else
+# define SNPRINTF_BUF(arg) \
+ switch (prefix_count) \
+ { \
+ case 0: \
+ count = sprintf (tmp, buf, arg); \
+ break; \
+ case 1: \
+ count = sprintf (tmp, buf, prefixes[0], arg); \
+ break; \
+ case 2: \
+ count = sprintf (tmp, buf, prefixes[0], prefixes[1],\
+ arg); \
+ break; \
+ default: \
+ abort (); \
+ }
+#endif
+
+ switch (type)
+ {
+ case TYPE_SCHAR:
+ {
+ int arg = a.arg[dp->arg_index].a.a_schar;
+ SNPRINTF_BUF (arg);
+ }
+ break;
+ case TYPE_UCHAR:
+ {
+ unsigned int arg = a.arg[dp->arg_index].a.a_uchar;
+ SNPRINTF_BUF (arg);
+ }
+ break;
+ case TYPE_SHORT:
+ {
+ int arg = a.arg[dp->arg_index].a.a_short;
+ SNPRINTF_BUF (arg);
+ }
+ break;
+ case TYPE_USHORT:
+ {
+ unsigned int arg = a.arg[dp->arg_index].a.a_ushort;
+ SNPRINTF_BUF (arg);
+ }
+ break;
+ case TYPE_INT:
+ {
+ int arg = a.arg[dp->arg_index].a.a_int;
+ SNPRINTF_BUF (arg);
+ }
+ break;
+ case TYPE_UINT:
+ {
+ unsigned int arg = a.arg[dp->arg_index].a.a_uint;
+ SNPRINTF_BUF (arg);
+ }
+ break;
+ case TYPE_LONGINT:
+ {
+ long int arg = a.arg[dp->arg_index].a.a_longint;
+ SNPRINTF_BUF (arg);
+ }
+ break;
+ case TYPE_ULONGINT:
+ {
+ unsigned long int arg = a.arg[dp->arg_index].a.a_ulongint;
+ SNPRINTF_BUF (arg);
+ }
+ break;
+#ifdef HAVE_LONG_LONG
+ case TYPE_LONGLONGINT:
+ {
+ long long int arg = a.arg[dp->arg_index].a.a_longlongint;
+ SNPRINTF_BUF (arg);
+ }
+ break;
+ case TYPE_ULONGLONGINT:
+ {
+ unsigned long long int arg = a.arg[dp->arg_index].a.a_ulonglongint;
+ SNPRINTF_BUF (arg);
+ }
+ break;
+#endif
+ case TYPE_DOUBLE:
+ {
+ double arg = a.arg[dp->arg_index].a.a_double;
+ SNPRINTF_BUF (arg);
+ }
+ break;
+#ifdef HAVE_LONG_DOUBLE
+ case TYPE_LONGDOUBLE:
+ {
+ long double arg = a.arg[dp->arg_index].a.a_longdouble;
+ SNPRINTF_BUF (arg);
+ }
+ break;
+#endif
+ case TYPE_CHAR:
+ {
+ int arg = a.arg[dp->arg_index].a.a_char;
+ SNPRINTF_BUF (arg);
+ }
+ break;
+#ifdef HAVE_WINT_T
+ case TYPE_WIDE_CHAR:
+ {
+ wint_t arg = a.arg[dp->arg_index].a.a_wide_char;
+ SNPRINTF_BUF (arg);
+ }
+ break;
+#endif
+ case TYPE_STRING:
+ {
+ const char *arg = a.arg[dp->arg_index].a.a_string;
+ SNPRINTF_BUF (arg);
+ }
+ break;
+#ifdef HAVE_WCHAR_T
+ case TYPE_WIDE_STRING:
+ {
+ const wchar_t *arg = a.arg[dp->arg_index].a.a_wide_string;
+ SNPRINTF_BUF (arg);
+ }
+ break;
+#endif
+ case TYPE_POINTER:
+ {
+ void *arg = a.arg[dp->arg_index].a.a_pointer;
+ SNPRINTF_BUF (arg);
+ }
+ break;
+ default:
+ abort ();
+ }
+
+#if USE_SNPRINTF
+ /* Portability: Not all implementations of snprintf()
+ are ISO C 99 compliant. Determine the number of
+ bytes that snprintf() has produced or would have
+ produced. */
+ if (count >= 0)
+ {
+ /* Verify that snprintf() has NUL-terminated its
+ result. */
+ if (count < maxlen && result[length + count] != '\0')
+ abort ();
+ /* Portability hack. */
+ if (retcount > count)
+ count = retcount;
+ }
+ else
+ {
+ /* snprintf() doesn't understand the '%n'
+ directive. */
+ if (p[1] != '\0')
+ {
+ /* Don't use the '%n' directive; instead, look
+ at the snprintf() return value. */
+ p[1] = '\0';
+ continue;
+ }
+ else
+ {
+ /* Look at the snprintf() return value. */
+ if (retcount < 0)
+ {
+ /* HP-UX 10.20 snprintf() is doubly deficient:
+ It doesn't understand the '%n' directive,
+ *and* it returns -1 (rather than the length
+ that would have been required) when the
+ buffer is too small. */
+ size_t bigger_need =
+ xsum (xtimes (allocated, 2), 12);
+ ENSURE_ALLOCATION (bigger_need);
+ continue;
+ }
+ else
+ count = retcount;
+ }
+ }
+#endif
+
+ /* Attempt to handle failure. */
+ if (count < 0)
+ {
+ if (!(result == resultbuf || result == NULL))
+ free (result);
+ if (buf_malloced != NULL)
+ free (buf_malloced);
+ CLEANUP ();
+ errno = EINVAL;
+ return NULL;
+ }
+
+#if !USE_SNPRINTF
+ if (count >= tmp_length)
+ /* tmp_length was incorrectly calculated - fix the
+ code above! */
+ abort ();
+#endif
+
+ /* Make room for the result. */
+ if (count >= maxlen)
+ {
+ /* Need at least count bytes. But allocate
+ proportionally, to avoid looping eternally if
+ snprintf() reports a too small count. */
+ size_t n =
+ xmax (xsum (length, count), xtimes (allocated, 2));
+
+ ENSURE_ALLOCATION (n);
+#if USE_SNPRINTF
+ continue;
+#endif
+ }
+
+#if USE_SNPRINTF
+ /* The snprintf() result did fit. */
+#else
+ /* Append the sprintf() result. */
+ memcpy (result + length, tmp, count * sizeof (CHAR_T));
+ if (tmp != tmpbuf)
+ free (tmp);
+#endif
+
+ length += count;
+ break;
+ }
+ }
+ }
+ }
+
+ /* Add the final NUL. */
+ ENSURE_ALLOCATION (xsum (length, 1));
+ result[length] = '\0';
+
+ if (result != resultbuf && length + 1 < allocated)
+ {
+ /* Shrink the allocated memory if possible. */
+ CHAR_T *memory;
+
+ memory = (CHAR_T *) realloc (result, (length + 1) * sizeof (CHAR_T));
+ if (memory != NULL)
+ result = memory;
+ }
+
+ if (buf_malloced != NULL)
+ free (buf_malloced);
+ CLEANUP ();
+ *lengthp = length;
+ return result;
+
+ out_of_memory:
+ if (!(result == resultbuf || result == NULL))
+ free (result);
+ if (buf_malloced != NULL)
+ free (buf_malloced);
+ out_of_memory_1:
+ CLEANUP ();
+ errno = ENOMEM;
+ return NULL;
+ }
+}
+
+#undef SNPRINTF
+#undef USE_SNPRINTF
+#undef PRINTF_PARSE
+#undef DIRECTIVES
+#undef DIRECTIVE
+#undef CHAR_T
+#undef VASNPRINTF
diff --git a/macros/texinfo/contrib/texinfo-hu/texinfo/intl/vasnprintf.h b/macros/texinfo/contrib/texinfo-hu/texinfo/intl/vasnprintf.h
new file mode 100644
index 0000000000..65f1bc13dd
--- /dev/null
+++ b/macros/texinfo/contrib/texinfo-hu/texinfo/intl/vasnprintf.h
@@ -0,0 +1,61 @@
+/* vsprintf with automatic memory allocation.
+ Copyright (C) 2002-2003 Free Software Foundation, Inc.
+
+ This program is free software; you can redistribute it and/or modify it
+ under the terms of the GNU Library General Public License as published
+ 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
+ Library General Public License for more details.
+
+ You should have received a copy of the GNU Library General Public
+ License along with this program; if not, write to the Free Software
+ Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307,
+ USA. */
+
+#ifndef _VASNPRINTF_H
+#define _VASNPRINTF_H
+
+/* Get va_list. */
+#include <stdarg.h>
+
+/* Get size_t. */
+#include <stddef.h>
+
+#ifndef __attribute__
+/* This feature is available in gcc versions 2.5 and later. */
+# if __GNUC__ < 2 || (__GNUC__ == 2 && __GNUC_MINOR__ < 5) || __STRICT_ANSI__
+# 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
+
+/* Write formatted output to a string dynamically allocated with malloc().
+ You can pass a preallocated buffer for the result in RESULTBUF and its
+ size in *LENGTHP; otherwise you pass RESULTBUF = NULL.
+ If successful, return the address of the string (this may be = RESULTBUF
+ if no dynamic memory allocation was necessary) and set *LENGTHP to the
+ number of resulting bytes, excluding the trailing NUL. Upon error, set
+ errno and return NULL. */
+extern char * asnprintf (char *resultbuf, size_t *lengthp, const char *format, ...)
+ __attribute__ ((__format__ (__printf__, 3, 4)));
+extern char * vasnprintf (char *resultbuf, size_t *lengthp, const char *format, va_list args)
+ __attribute__ ((__format__ (__printf__, 3, 0)));
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif /* _VASNPRINTF_H */
diff --git a/macros/texinfo/contrib/texinfo-hu/texinfo/intl/vasnwprintf.h b/macros/texinfo/contrib/texinfo-hu/texinfo/intl/vasnwprintf.h
new file mode 100644
index 0000000000..d3cef4cbcd
--- /dev/null
+++ b/macros/texinfo/contrib/texinfo-hu/texinfo/intl/vasnwprintf.h
@@ -0,0 +1,46 @@
+/* vswprintf with automatic memory allocation.
+ Copyright (C) 2002-2003 Free Software Foundation, Inc.
+
+ This program is free software; you can redistribute it and/or modify it
+ under the terms of the GNU Library General Public License as published
+ 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
+ Library General Public License for more details.
+
+ You should have received a copy of the GNU Library General Public
+ License along with this program; if not, write to the Free Software
+ Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307,
+ USA. */
+
+#ifndef _VASNWPRINTF_H
+#define _VASNWPRINTF_H
+
+/* Get va_list. */
+#include <stdarg.h>
+
+/* Get wchar_t, size_t. */
+#include <stddef.h>
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+/* Write formatted output to a string dynamically allocated with malloc().
+ You can pass a preallocated buffer for the result in RESULTBUF and its
+ size in *LENGTHP; otherwise you pass RESULTBUF = NULL.
+ If successful, return the address of the string (this may be = RESULTBUF
+ if no dynamic memory allocation was necessary) and set *LENGTHP to the
+ number of resulting bytes, excluding the trailing NUL. Upon error, set
+ errno and return NULL. */
+extern wchar_t * asnwprintf (wchar_t *resultbuf, size_t *lengthp, const wchar_t *format, ...);
+extern wchar_t * vasnwprintf (wchar_t *resultbuf, size_t *lengthp, const wchar_t *format, va_list args);
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif /* _VASNWPRINTF_H */
diff --git a/macros/texinfo/contrib/texinfo-hu/texinfo/intl/wprintf-parse.h b/macros/texinfo/contrib/texinfo-hu/texinfo/intl/wprintf-parse.h
new file mode 100644
index 0000000000..24a2cfc28f
--- /dev/null
+++ b/macros/texinfo/contrib/texinfo-hu/texinfo/intl/wprintf-parse.h
@@ -0,0 +1,75 @@
+/* Parse printf format string.
+ Copyright (C) 1999, 2002-2003 Free Software Foundation, Inc.
+
+ This program is free software; you can redistribute it and/or modify it
+ under the terms of the GNU Library General Public License as published
+ 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
+ Library General Public License for more details.
+
+ You should have received a copy of the GNU Library General Public
+ License along with this program; if not, write to the Free Software
+ Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307,
+ USA. */
+
+#ifndef _WPRINTF_PARSE_H
+#define _WPRINTF_PARSE_H
+
+#include "printf-args.h"
+
+
+/* Flags */
+#define FLAG_GROUP 1 /* ' flag */
+#define FLAG_LEFT 2 /* - flag */
+#define FLAG_SHOWSIGN 4 /* + flag */
+#define FLAG_SPACE 8 /* space flag */
+#define FLAG_ALT 16 /* # flag */
+#define FLAG_ZERO 32
+
+/* arg_index value indicating that no argument is consumed. */
+#define ARG_NONE (~(size_t)0)
+
+/* A parsed directive. */
+typedef struct
+{
+ const wchar_t* dir_start;
+ const wchar_t* dir_end;
+ int flags;
+ const wchar_t* width_start;
+ const wchar_t* width_end;
+ size_t width_arg_index;
+ const wchar_t* precision_start;
+ const wchar_t* precision_end;
+ size_t precision_arg_index;
+ wchar_t conversion; /* d i o u x X f e E g G c s p n U % but not C S */
+ size_t arg_index;
+}
+wchar_t_directive;
+
+/* A parsed format string. */
+typedef struct
+{
+ size_t count;
+ wchar_t_directive *dir;
+ size_t max_width_length;
+ size_t max_precision_length;
+}
+wchar_t_directives;
+
+
+/* Parses the format string. Fills in the number N of directives, and fills
+ in directives[0], ..., directives[N-1], and sets directives[N].dir_start
+ to the end of the format string. Also fills in the arg_type fields of the
+ arguments and the needed count of arguments. */
+#ifdef STATIC
+STATIC
+#else
+extern
+#endif
+int wprintf_parse (const wchar_t *format, wchar_t_directives *d, arguments *a);
+
+#endif /* _WPRINTF_PARSE_H */
diff --git a/macros/texinfo/contrib/texinfo-hu/texinfo/intl/xsize.h b/macros/texinfo/contrib/texinfo-hu/texinfo/intl/xsize.h
new file mode 100644
index 0000000000..362e24b724
--- /dev/null
+++ b/macros/texinfo/contrib/texinfo-hu/texinfo/intl/xsize.h
@@ -0,0 +1,109 @@
+/* xsize.h -- Checked size_t computations.
+
+ Copyright (C) 2003 Free Software Foundation, Inc.
+
+ This program is free software; you can redistribute it and/or modify it
+ under the terms of the GNU Library General Public License as published
+ 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
+ Library General Public License for more details.
+
+ You should have received a copy of the GNU Library General Public
+ License along with this program; if not, write to the Free Software
+ Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307,
+ USA. */
+
+#ifndef _XSIZE_H
+#define _XSIZE_H
+
+/* Get size_t. */
+#include <stddef.h>
+
+/* Get SIZE_MAX. */
+#include <limits.h>
+#if HAVE_STDINT_H
+# include <stdint.h>
+#endif
+
+/* The size of memory objects is often computed through expressions of
+ type size_t. Example:
+ void* p = malloc (header_size + n * element_size).
+ These computations can lead to overflow. When this happens, malloc()
+ returns a piece of memory that is way too small, and the program then
+ crashes while attempting to fill the memory.
+ To avoid this, the functions and macros in this file check for overflow.
+ The convention is that SIZE_MAX represents overflow.
+ malloc (SIZE_MAX) is not guaranteed to fail -- think of a malloc
+ implementation that uses mmap --, it's recommended to use size_overflow_p()
+ or size_in_bounds_p() before invoking malloc().
+ The example thus becomes:
+ size_t size = xsum (header_size, xtimes (n, element_size));
+ void *p = (size_in_bounds_p (size) ? malloc (size) : NULL);
+*/
+
+/* Convert an arbitrary value >= 0 to type size_t. */
+#define xcast_size_t(N) \
+ ((N) <= SIZE_MAX ? (size_t) (N) : SIZE_MAX)
+
+/* Sum of two sizes, with overflow check. */
+static inline size_t
+#if __GNUC__ >= 3
+__attribute__ ((__pure__))
+#endif
+xsum (size_t size1, size_t size2)
+{
+ size_t sum = size1 + size2;
+ return (sum >= size1 ? sum : SIZE_MAX);
+}
+
+/* Sum of three sizes, with overflow check. */
+static inline size_t
+#if __GNUC__ >= 3
+__attribute__ ((__pure__))
+#endif
+xsum3 (size_t size1, size_t size2, size_t size3)
+{
+ return xsum (xsum (size1, size2), size3);
+}
+
+/* Sum of four sizes, with overflow check. */
+static inline size_t
+#if __GNUC__ >= 3
+__attribute__ ((__pure__))
+#endif
+xsum4 (size_t size1, size_t size2, size_t size3, size_t size4)
+{
+ return xsum (xsum (xsum (size1, size2), size3), size4);
+}
+
+/* Maximum of two sizes, with overflow check. */
+static inline size_t
+#if __GNUC__ >= 3
+__attribute__ ((__pure__))
+#endif
+xmax (size_t size1, size_t size2)
+{
+ /* No explicit check is needed here, because for any n:
+ max (SIZE_MAX, n) == SIZE_MAX and max (n, SIZE_MAX) == SIZE_MAX. */
+ return (size1 >= size2 ? size1 : size2);
+}
+
+/* Multiplication of a count with an element size, with overflow check.
+ The count must be >= 0 and the element size must be > 0.
+ This is a macro, not an inline function, so that it works correctly even
+ when N is of a wider tupe and N > SIZE_MAX. */
+#define xtimes(N, ELSIZE) \
+ ((N) <= SIZE_MAX / (ELSIZE) ? (size_t) (N) * (ELSIZE) : SIZE_MAX)
+
+/* Check for overflow. */
+#define size_overflow_p(SIZE) \
+ ((SIZE) == SIZE_MAX)
+/* Check against overflow. */
+#define size_in_bounds_p(SIZE) \
+ ((SIZE) != SIZE_MAX)
+
+#endif /* _XSIZE_H */
diff --git a/macros/texinfo/contrib/texinfo-hu/texinfo/lib/Makefile.am b/macros/texinfo/contrib/texinfo-hu/texinfo/lib/Makefile.am
new file mode 100644
index 0000000000..253adfca88
--- /dev/null
+++ b/macros/texinfo/contrib/texinfo-hu/texinfo/lib/Makefile.am
@@ -0,0 +1,26 @@
+# $Id: Makefile.am,v 1.7 2004/11/06 22:05:59 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
+INCLUDES = -I../intl
+
+# Don't need to list alloca.c, etc., Automake includes them.
+libtxi_a_SOURCES = getopt.c getopt.h getopt1.c getopt_.h getopt_int.h \
+ gettext.h \
+ strcase.h strdup.h substring.c system.h \
+ xalloc.h xexit.c xmalloc.c xstrdup.c
+libtxi_a_LIBADD = $(LIBOBJS) $(ALLOCA)
+libtxi_a_DEPENDENCIES = $(libtxi_a_LIBADD)
+
+## xx configure for bzero?, clib, other common stuff
+
+EXTRA_DIST = README
diff --git a/macros/texinfo/contrib/texinfo-hu/texinfo/lib/Makefile.in b/macros/texinfo/contrib/texinfo-hu/texinfo/lib/Makefile.in
new file mode 100644
index 0000000000..6d22149fe0
--- /dev/null
+++ b/macros/texinfo/contrib/texinfo-hu/texinfo/lib/Makefile.in
@@ -0,0 +1,474 @@
+# Makefile.in generated by automake 1.9.4 from Makefile.am.
+# @configure_input@
+
+# Copyright (C) 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002,
+# 2003, 2004 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 2004/11/06 22:05:59 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.
+
+SOURCES = $(libtxi_a_SOURCES)
+
+srcdir = @srcdir@
+top_srcdir = @top_srcdir@
+VPATH = @srcdir@
+pkgdatadir = $(datadir)/@PACKAGE@
+pkglibdir = $(libdir)/@PACKAGE@
+pkgincludedir = $(includedir)/@PACKAGE@
+top_builddir = ..
+am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd
+INSTALL = @INSTALL@
+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 \
+ alloca.c memcpy.c memmove.c mkstemp.c strcasecmp.c strdup.c \
+ strerror.c strncasecmp.c tempname.c
+ACLOCAL_M4 = $(top_srcdir)/aclocal.m4
+am__aclocal_m4_deps = $(top_srcdir)/m4/codeset.m4 \
+ $(top_srcdir)/m4/gettext.m4 $(top_srcdir)/m4/glibc21.m4 \
+ $(top_srcdir)/m4/iconv.m4 $(top_srcdir)/m4/intdiv0.m4 \
+ $(top_srcdir)/m4/intmax.m4 $(top_srcdir)/m4/inttypes-pri.m4 \
+ $(top_srcdir)/m4/inttypes.m4 $(top_srcdir)/m4/inttypes_h.m4 \
+ $(top_srcdir)/m4/lcmessage.m4 $(top_srcdir)/m4/lib-ld.m4 \
+ $(top_srcdir)/m4/lib-link.m4 $(top_srcdir)/m4/lib-prefix.m4 \
+ $(top_srcdir)/m4/longdouble.m4 $(top_srcdir)/m4/longlong.m4 \
+ $(top_srcdir)/m4/mkstemp.m4 $(top_srcdir)/m4/nls.m4 \
+ $(top_srcdir)/m4/onceonly_2_57.m4 $(top_srcdir)/m4/po.m4 \
+ $(top_srcdir)/m4/printf-posix.m4 $(top_srcdir)/m4/progtest.m4 \
+ $(top_srcdir)/m4/signed.m4 $(top_srcdir)/m4/size_max.m4 \
+ $(top_srcdir)/m4/stdint_h.m4 $(top_srcdir)/m4/strcase.m4 \
+ $(top_srcdir)/m4/uintmax_t.m4 $(top_srcdir)/m4/ulonglong.m4 \
+ $(top_srcdir)/m4/wchar_t.m4 $(top_srcdir)/m4/wint_t.m4 \
+ $(top_srcdir)/m4/xsize.m4 $(top_srcdir)/configure.ac
+am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \
+ $(ACLOCAL_M4)
+mkinstalldirs = $(SHELL) $(top_srcdir)/mkinstalldirs
+CONFIG_HEADER = $(top_builddir)/config.h
+CONFIG_CLEAN_FILES =
+LIBRARIES = $(noinst_LIBRARIES)
+AR = ar
+ARFLAGS = cru
+libtxi_a_AR = $(AR) $(ARFLAGS)
+am__DEPENDENCIES_1 = @LIBOBJS@
+am__DEPENDENCIES_2 = @ALLOCA@
+am_libtxi_a_OBJECTS = getopt.$(OBJEXT) getopt1.$(OBJEXT) \
+ substring.$(OBJEXT) xexit.$(OBJEXT) xmalloc.$(OBJEXT) \
+ xstrdup.$(OBJEXT)
+libtxi_a_OBJECTS = $(am_libtxi_a_OBJECTS)
+DEFAULT_INCLUDES = -I. -I$(srcdir) -I$(top_builddir)
+depcomp = $(SHELL) $(top_srcdir)/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@
+AMDEP_FALSE = @AMDEP_FALSE@
+AMDEP_TRUE = @AMDEP_TRUE@
+AMTAR = @AMTAR@
+AUTOCONF = @AUTOCONF@
+AUTOHEADER = @AUTOHEADER@
+AUTOMAKE = @AUTOMAKE@
+AWK = @AWK@
+BUILD_INCLUDED_LIBINTL = @BUILD_INCLUDED_LIBINTL@
+CATOBJEXT = @CATOBJEXT@
+CC = @CC@
+CCDEPMODE = @CCDEPMODE@
+CFLAGS = @CFLAGS@
+CPP = @CPP@
+CPPFLAGS = @CPPFLAGS@
+CYGPATH_W = @CYGPATH_W@
+DATADIRNAME = @DATADIRNAME@
+DEFS = @DEFS@
+DEPDIR = @DEPDIR@
+ECHO_C = @ECHO_C@
+ECHO_N = @ECHO_N@
+ECHO_T = @ECHO_T@
+EGREP = @EGREP@
+EXEEXT = @EXEEXT@
+GENCAT = @GENCAT@
+GLIBC21 = @GLIBC21@
+GMSGFMT = @GMSGFMT@
+HAVE_ASPRINTF = @HAVE_ASPRINTF@
+HAVE_POSIX_PRINTF = @HAVE_POSIX_PRINTF@
+HAVE_SNPRINTF = @HAVE_SNPRINTF@
+HAVE_WPRINTF = @HAVE_WPRINTF@
+HELP2MAN = @HELP2MAN@
+INSTALL_DATA = @INSTALL_DATA@
+INSTALL_PROGRAM = @INSTALL_PROGRAM@
+INSTALL_SCRIPT = @INSTALL_SCRIPT@
+INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@
+INSTALL_WARNINGS_FALSE = @INSTALL_WARNINGS_FALSE@
+INSTALL_WARNINGS_TRUE = @INSTALL_WARNINGS_TRUE@
+INSTOBJEXT = @INSTOBJEXT@
+INTLBISON = @INTLBISON@
+INTLLIBS = @INTLLIBS@
+INTLOBJS = @INTLOBJS@
+INTL_LIBTOOL_SUFFIX_PREFIX = @INTL_LIBTOOL_SUFFIX_PREFIX@
+LDFLAGS = @LDFLAGS@
+LIBICONV = @LIBICONV@
+LIBINTL = @LIBINTL@
+LIBOBJS = @LIBOBJS@
+LIBS = @LIBS@
+LTLIBICONV = @LTLIBICONV@
+LTLIBINTL = @LTLIBINTL@
+LTLIBOBJS = @LTLIBOBJS@
+MAINT = @MAINT@
+MAINTAINER_MODE_FALSE = @MAINTAINER_MODE_FALSE@
+MAINTAINER_MODE_TRUE = @MAINTAINER_MODE_TRUE@
+MAKEINFO = @MAKEINFO@
+MKINSTALLDIRS = @MKINSTALLDIRS@
+MSGFMT = @MSGFMT@
+MSGMERGE = @MSGMERGE@
+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@
+RANLIB = @RANLIB@
+SET_MAKE = @SET_MAKE@
+SHELL = @SHELL@
+STRIP = @STRIP@
+TERMLIBS = @TERMLIBS@
+TOOLS_ONLY_FALSE = @TOOLS_ONLY_FALSE@
+TOOLS_ONLY_TRUE = @TOOLS_ONLY_TRUE@
+USE_INCLUDED_LIBINTL = @USE_INCLUDED_LIBINTL@
+USE_NLS = @USE_NLS@
+VERSION = @VERSION@
+XGETTEXT = @XGETTEXT@
+ac_ct_CC = @ac_ct_CC@
+ac_ct_RANLIB = @ac_ct_RANLIB@
+ac_ct_STRIP = @ac_ct_STRIP@
+am__fastdepCC_FALSE = @am__fastdepCC_FALSE@
+am__fastdepCC_TRUE = @am__fastdepCC_TRUE@
+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@
+datadir = @datadir@
+exec_prefix = @exec_prefix@
+host = @host@
+host_alias = @host_alias@
+host_cpu = @host_cpu@
+host_os = @host_os@
+host_vendor = @host_vendor@
+includedir = @includedir@
+infodir = @infodir@
+install_sh = @install_sh@
+libdir = @libdir@
+libexecdir = @libexecdir@
+localstatedir = @localstatedir@
+mandir = @mandir@
+mkdir_p = @mkdir_p@
+native_tools = @native_tools@
+oldincludedir = @oldincludedir@
+prefix = @prefix@
+program_transform_name = @program_transform_name@
+sbindir = @sbindir@
+sharedstatedir = @sharedstatedir@
+sysconfdir = @sysconfdir@
+target_alias = @target_alias@
+noinst_LIBRARIES = libtxi.a
+INCLUDES = -I../intl
+
+# Don't need to list alloca.c, etc., Automake includes them.
+libtxi_a_SOURCES = getopt.c getopt.h getopt1.c getopt_.h getopt_int.h \
+ gettext.h \
+ strcase.h strdup.h substring.c system.h \
+ xalloc.h xexit.c xmalloc.c xstrdup.c
+
+libtxi_a_LIBADD = $(LIBOBJS) $(ALLOCA)
+libtxi_a_DEPENDENCIES = $(libtxi_a_LIBADD)
+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)/alloca.Po@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@$(DEPDIR)/memcpy.Po@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@$(DEPDIR)/memmove.Po@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@$(DEPDIR)/mkstemp.Po@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@$(DEPDIR)/strcasecmp.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)/strncasecmp.Po@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@$(DEPDIR)/tempname.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)/substring.Po@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/xexit.Po@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/xmalloc.Po@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/xstrdup.Po@am__quote@
+
+.c.o:
+@am__fastdepCC_TRUE@ if $(COMPILE) -MT $@ -MD -MP -MF "$(DEPDIR)/$*.Tpo" -c -o $@ $<; \
+@am__fastdepCC_TRUE@ then mv -f "$(DEPDIR)/$*.Tpo" "$(DEPDIR)/$*.Po"; else rm -f "$(DEPDIR)/$*.Tpo"; exit 1; fi
+@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@ if $(COMPILE) -MT $@ -MD -MP -MF "$(DEPDIR)/$*.Tpo" -c -o $@ `$(CYGPATH_W) '$<'`; \
+@am__fastdepCC_TRUE@ then mv -f "$(DEPDIR)/$*.Tpo" "$(DEPDIR)/$*.Po"; else rm -f "$(DEPDIR)/$*.Tpo"; exit 1; fi
+@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) '$<'`
+uninstall-info-am:
+
+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; } \
+ END { 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; } \
+ END { 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=; \
+ 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; } \
+ END { 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)'; for file in $$list; do \
+ case $$file in \
+ $(srcdir)/*) file=`echo "$$file" | sed "s|^$$srcdirstrip/||"`;; \
+ $(top_srcdir)/*) file=`echo "$$file" | sed "s|^$$topsrcdirstrip/|$(top_builddir)/|"`;; \
+ esac; \
+ if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \
+ dir=`echo "$$file" | sed -e 's,/[^/]*$$,,'`; \
+ if test "$$dir" != "$$file" && test "$$dir" != "."; then \
+ dir="/$$dir"; \
+ $(mkdir_p) "$(distdir)$$dir"; \
+ else \
+ dir=''; \
+ fi; \
+ if test -d $$d/$$file; then \
+ 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) ./$(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-exec-am:
+
+install-info: install-info-am
+
+install-man:
+
+installcheck-am:
+
+maintainer-clean: maintainer-clean-am
+ -rm -rf $(DEPDIR) ./$(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-info-am
+
+.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-exec install-exec-am install-info \
+ install-info-am install-man 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-info-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/macros/texinfo/contrib/texinfo-hu/texinfo/lib/README b/macros/texinfo/contrib/texinfo-hu/texinfo/lib/README
new file mode 100644
index 0000000000..643f9c1990
--- /dev/null
+++ b/macros/texinfo/contrib/texinfo-hu/texinfo/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/macros/texinfo/contrib/texinfo-hu/texinfo/lib/alloca.c b/macros/texinfo/contrib/texinfo-hu/texinfo/lib/alloca.c
new file mode 100644
index 0000000000..d1d54475bb
--- /dev/null
+++ b/macros/texinfo/contrib/texinfo-hu/texinfo/lib/alloca.c
@@ -0,0 +1,491 @@
+/* alloca.c -- allocate automatically reclaimed memory
+ (Mostly) portable public-domain implementation -- D A Gwyn
+
+ This implementation of the PWB library alloca function,
+ which is used to allocate space off the run-time stack so
+ that it is automatically reclaimed upon procedure exit,
+ was inspired by discussions with J. Q. Johnson of Cornell.
+ J.Otto Tennant <jot@cray.com> contributed the Cray support.
+
+ There are some preprocessor constants that can
+ be defined when compiling for your specific system, for
+ improved efficiency; however, the defaults should be okay.
+
+ The general concept of this implementation is to keep
+ track of all alloca-allocated blocks, and reclaim any
+ that are found to be deeper in the stack than the current
+ invocation. This heuristic does not reclaim storage as
+ soon as it becomes invalid, but it will do so eventually.
+
+ As a special case, alloca(0) reclaims storage without
+ allocating any. It is a good idea to use alloca(0) in
+ your main control loop, etc. to force garbage collection. */
+
+#ifdef HAVE_CONFIG_H
+# include <config.h>
+#endif
+
+#include <alloca.h>
+
+#include <string.h>
+#include <stdlib.h>
+
+#ifdef emacs
+# include "lisp.h"
+# include "blockinput.h"
+# ifdef EMACS_FREE
+# undef free
+# define free EMACS_FREE
+# endif
+#else
+# define memory_full() abort ()
+#endif
+
+/* If compiling with GCC 2, this file's not needed. */
+#if !defined (__GNUC__) || __GNUC__ < 2
+
+/* If someone has defined alloca as a macro,
+ there must be some other way alloca is supposed to work. */
+# ifndef alloca
+
+# ifdef emacs
+# ifdef static
+/* actually, only want this if static is defined as ""
+ -- this is for usg, in which emacs must undefine static
+ in order to make unexec workable
+ */
+# ifndef STACK_DIRECTION
+you
+lose
+-- must know STACK_DIRECTION at compile-time
+/* Using #error here is not wise since this file should work for
+ old and obscure compilers. */
+# endif /* STACK_DIRECTION undefined */
+# endif /* static */
+# endif /* emacs */
+
+/* If your stack is a linked list of frames, you have to
+ provide an "address metric" ADDRESS_FUNCTION macro. */
+
+# if defined (CRAY) && defined (CRAY_STACKSEG_END)
+long i00afunc ();
+# define ADDRESS_FUNCTION(arg) (char *) i00afunc (&(arg))
+# else
+# define ADDRESS_FUNCTION(arg) &(arg)
+# endif
+
+/* Define STACK_DIRECTION if you know the direction of stack
+ growth for your system; otherwise it will be automatically
+ deduced at run-time.
+
+ STACK_DIRECTION > 0 => grows toward higher addresses
+ STACK_DIRECTION < 0 => grows toward lower addresses
+ STACK_DIRECTION = 0 => direction of growth unknown */
+
+# ifndef STACK_DIRECTION
+# define STACK_DIRECTION 0 /* Direction unknown. */
+# endif
+
+# if STACK_DIRECTION != 0
+
+# define STACK_DIR STACK_DIRECTION /* Known at compile-time. */
+
+# else /* STACK_DIRECTION == 0; need run-time code. */
+
+static int stack_dir; /* 1 or -1 once known. */
+# define STACK_DIR stack_dir
+
+static void
+find_stack_direction (void)
+{
+ static char *addr = NULL; /* Address of first `dummy', once known. */
+ auto char dummy; /* To get stack address. */
+
+ if (addr == NULL)
+ { /* Initial entry. */
+ addr = ADDRESS_FUNCTION (dummy);
+
+ find_stack_direction (); /* Recurse once. */
+ }
+ else
+ {
+ /* Second entry. */
+ if (ADDRESS_FUNCTION (dummy) > addr)
+ stack_dir = 1; /* Stack grew upward. */
+ else
+ stack_dir = -1; /* Stack grew downward. */
+ }
+}
+
+# endif /* STACK_DIRECTION == 0 */
+
+/* An "alloca header" is used to:
+ (a) chain together all alloca'ed blocks;
+ (b) keep track of stack depth.
+
+ It is very important that sizeof(header) agree with malloc
+ alignment chunk size. The following default should work okay. */
+
+# ifndef ALIGN_SIZE
+# define ALIGN_SIZE sizeof(double)
+# endif
+
+typedef union hdr
+{
+ char align[ALIGN_SIZE]; /* To force sizeof(header). */
+ struct
+ {
+ union hdr *next; /* For chaining headers. */
+ char *deep; /* For stack depth measure. */
+ } h;
+} header;
+
+static header *last_alloca_header = NULL; /* -> last alloca header. */
+
+/* Return a pointer to at least SIZE bytes of storage,
+ which will be automatically reclaimed upon exit from
+ the procedure that called alloca. Originally, this space
+ was supposed to be taken from the current stack frame of the
+ caller, but that method cannot be made to work for some
+ implementations of C, for example under Gould's UTX/32. */
+
+void *
+alloca (size_t size)
+{
+ auto char probe; /* Probes stack depth: */
+ register char *depth = ADDRESS_FUNCTION (probe);
+
+# if STACK_DIRECTION == 0
+ if (STACK_DIR == 0) /* Unknown growth direction. */
+ find_stack_direction ();
+# endif
+
+ /* Reclaim garbage, defined as all alloca'd storage that
+ was allocated from deeper in the stack than currently. */
+
+ {
+ register header *hp; /* Traverses linked list. */
+
+# ifdef emacs
+ BLOCK_INPUT;
+# endif
+
+ for (hp = last_alloca_header; hp != NULL;)
+ if ((STACK_DIR > 0 && hp->h.deep > depth)
+ || (STACK_DIR < 0 && hp->h.deep < depth))
+ {
+ register header *np = hp->h.next;
+
+ free (hp); /* Collect garbage. */
+
+ hp = np; /* -> next header. */
+ }
+ else
+ break; /* Rest are not deeper. */
+
+ last_alloca_header = hp; /* -> last valid storage. */
+
+# ifdef emacs
+ UNBLOCK_INPUT;
+# endif
+ }
+
+ if (size == 0)
+ return NULL; /* No allocation required. */
+
+ /* Allocate combined header + user data storage. */
+
+ {
+ /* Address of header. */
+ register header *new;
+
+ size_t combined_size = sizeof (header) + size;
+ if (combined_size < sizeof (header))
+ memory_full ();
+
+ new = malloc (combined_size);
+
+ if (! new)
+ memory_full ();
+
+ new->h.next = last_alloca_header;
+ new->h.deep = depth;
+
+ last_alloca_header = new;
+
+ /* User storage begins just after header. */
+
+ return (void *) (new + 1);
+ }
+}
+
+# if defined (CRAY) && defined (CRAY_STACKSEG_END)
+
+# ifdef DEBUG_I00AFUNC
+# include <stdio.h>
+# endif
+
+# ifndef CRAY_STACK
+# define CRAY_STACK
+# ifndef CRAY2
+/* Stack structures for CRAY-1, CRAY X-MP, and CRAY Y-MP */
+struct stack_control_header
+ {
+ long shgrow:32; /* Number of times stack has grown. */
+ long shaseg:32; /* Size of increments to stack. */
+ long shhwm:32; /* High water mark of stack. */
+ long shsize:32; /* Current size of stack (all segments). */
+ };
+
+/* The stack segment linkage control information occurs at
+ the high-address end of a stack segment. (The stack
+ grows from low addresses to high addresses.) The initial
+ part of the stack segment linkage control information is
+ 0200 (octal) words. This provides for register storage
+ for the routine which overflows the stack. */
+
+struct stack_segment_linkage
+ {
+ long ss[0200]; /* 0200 overflow words. */
+ long sssize:32; /* Number of words in this segment. */
+ long ssbase:32; /* Offset to stack base. */
+ long:32;
+ long sspseg:32; /* Offset to linkage control of previous
+ segment of stack. */
+ long:32;
+ long sstcpt:32; /* Pointer to task common address block. */
+ long sscsnm; /* Private control structure number for
+ microtasking. */
+ long ssusr1; /* Reserved for user. */
+ long ssusr2; /* Reserved for user. */
+ long sstpid; /* Process ID for pid based multi-tasking. */
+ long ssgvup; /* Pointer to multitasking thread giveup. */
+ long sscray[7]; /* Reserved for Cray Research. */
+ long ssa0;
+ long ssa1;
+ long ssa2;
+ long ssa3;
+ long ssa4;
+ long ssa5;
+ long ssa6;
+ long ssa7;
+ long sss0;
+ long sss1;
+ long sss2;
+ long sss3;
+ long sss4;
+ long sss5;
+ long sss6;
+ long sss7;
+ };
+
+# else /* CRAY2 */
+/* The following structure defines the vector of words
+ returned by the STKSTAT library routine. */
+struct stk_stat
+ {
+ long now; /* Current total stack size. */
+ long maxc; /* Amount of contiguous space which would
+ be required to satisfy the maximum
+ stack demand to date. */
+ long high_water; /* Stack high-water mark. */
+ long overflows; /* Number of stack overflow ($STKOFEN) calls. */
+ long hits; /* Number of internal buffer hits. */
+ long extends; /* Number of block extensions. */
+ long stko_mallocs; /* Block allocations by $STKOFEN. */
+ long underflows; /* Number of stack underflow calls ($STKRETN). */
+ long stko_free; /* Number of deallocations by $STKRETN. */
+ long stkm_free; /* Number of deallocations by $STKMRET. */
+ long segments; /* Current number of stack segments. */
+ long maxs; /* Maximum number of stack segments so far. */
+ long pad_size; /* Stack pad size. */
+ long current_address; /* Current stack segment address. */
+ long current_size; /* Current stack segment size. This
+ number is actually corrupted by STKSTAT to
+ include the fifteen word trailer area. */
+ long initial_address; /* Address of initial segment. */
+ long initial_size; /* Size of initial segment. */
+ };
+
+/* The following structure describes the data structure which trails
+ any stack segment. I think that the description in 'asdef' is
+ out of date. I only describe the parts that I am sure about. */
+
+struct stk_trailer
+ {
+ long this_address; /* Address of this block. */
+ long this_size; /* Size of this block (does not include
+ this trailer). */
+ long unknown2;
+ long unknown3;
+ long link; /* Address of trailer block of previous
+ segment. */
+ long unknown5;
+ long unknown6;
+ long unknown7;
+ long unknown8;
+ long unknown9;
+ long unknown10;
+ long unknown11;
+ long unknown12;
+ long unknown13;
+ long unknown14;
+ };
+
+# endif /* CRAY2 */
+# endif /* not CRAY_STACK */
+
+# ifdef CRAY2
+/* Determine a "stack measure" for an arbitrary ADDRESS.
+ I doubt that "lint" will like this much. */
+
+static long
+i00afunc (long *address)
+{
+ struct stk_stat status;
+ struct stk_trailer *trailer;
+ long *block, size;
+ long result = 0;
+
+ /* We want to iterate through all of the segments. The first
+ step is to get the stack status structure. We could do this
+ more quickly and more directly, perhaps, by referencing the
+ $LM00 common block, but I know that this works. */
+
+ STKSTAT (&status);
+
+ /* Set up the iteration. */
+
+ trailer = (struct stk_trailer *) (status.current_address
+ + status.current_size
+ - 15);
+
+ /* There must be at least one stack segment. Therefore it is
+ a fatal error if "trailer" is null. */
+
+ if (trailer == 0)
+ abort ();
+
+ /* Discard segments that do not contain our argument address. */
+
+ while (trailer != 0)
+ {
+ block = (long *) trailer->this_address;
+ size = trailer->this_size;
+ if (block == 0 || size == 0)
+ abort ();
+ trailer = (struct stk_trailer *) trailer->link;
+ if ((block <= address) && (address < (block + size)))
+ break;
+ }
+
+ /* Set the result to the offset in this segment and add the sizes
+ of all predecessor segments. */
+
+ result = address - block;
+
+ if (trailer == 0)
+ {
+ return result;
+ }
+
+ do
+ {
+ if (trailer->this_size <= 0)
+ abort ();
+ result += trailer->this_size;
+ trailer = (struct stk_trailer *) trailer->link;
+ }
+ while (trailer != 0);
+
+ /* We are done. Note that if you present a bogus address (one
+ not in any segment), you will get a different number back, formed
+ from subtracting the address of the first block. This is probably
+ not what you want. */
+
+ return (result);
+}
+
+# else /* not CRAY2 */
+/* Stack address function for a CRAY-1, CRAY X-MP, or CRAY Y-MP.
+ Determine the number of the cell within the stack,
+ given the address of the cell. The purpose of this
+ routine is to linearize, in some sense, stack addresses
+ for alloca. */
+
+static long
+i00afunc (long address)
+{
+ long stkl = 0;
+
+ long size, pseg, this_segment, stack;
+ long result = 0;
+
+ struct stack_segment_linkage *ssptr;
+
+ /* Register B67 contains the address of the end of the
+ current stack segment. If you (as a subprogram) store
+ your registers on the stack and find that you are past
+ the contents of B67, you have overflowed the segment.
+
+ B67 also points to the stack segment linkage control
+ area, which is what we are really interested in. */
+
+ stkl = CRAY_STACKSEG_END ();
+ ssptr = (struct stack_segment_linkage *) stkl;
+
+ /* If one subtracts 'size' from the end of the segment,
+ one has the address of the first word of the segment.
+
+ If this is not the first segment, 'pseg' will be
+ nonzero. */
+
+ pseg = ssptr->sspseg;
+ size = ssptr->sssize;
+
+ this_segment = stkl - size;
+
+ /* It is possible that calling this routine itself caused
+ a stack overflow. Discard stack segments which do not
+ contain the target address. */
+
+ while (!(this_segment <= address && address <= stkl))
+ {
+# ifdef DEBUG_I00AFUNC
+ fprintf (stderr, "%011o %011o %011o\n", this_segment, address, stkl);
+# endif
+ if (pseg == 0)
+ break;
+ stkl = stkl - pseg;
+ ssptr = (struct stack_segment_linkage *) stkl;
+ size = ssptr->sssize;
+ pseg = ssptr->sspseg;
+ this_segment = stkl - size;
+ }
+
+ result = address - this_segment;
+
+ /* If you subtract pseg from the current end of the stack,
+ you get the address of the previous stack segment's end.
+ This seems a little convoluted to me, but I'll bet you save
+ a cycle somewhere. */
+
+ while (pseg != 0)
+ {
+# ifdef DEBUG_I00AFUNC
+ fprintf (stderr, "%011o %011o\n", pseg, size);
+# endif
+ stkl = stkl - pseg;
+ ssptr = (struct stack_segment_linkage *) stkl;
+ size = ssptr->sssize;
+ pseg = ssptr->sspseg;
+ result += size;
+ }
+ return (result);
+}
+
+# endif /* not CRAY2 */
+# endif /* CRAY */
+
+# endif /* no alloca */
+#endif /* not GCC version 2 */
diff --git a/macros/texinfo/contrib/texinfo-hu/texinfo/lib/getopt.c b/macros/texinfo/contrib/texinfo-hu/texinfo/lib/getopt.c
new file mode 100644
index 0000000000..95b3604f89
--- /dev/null
+++ b/macros/texinfo/contrib/texinfo-hu/texinfo/lib/getopt.c
@@ -0,0 +1,1234 @@
+/* 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
+ 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 2, or (at your option)
+ any later version.
+
+ This program is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ GNU General Public License for more details.
+
+ You should have received a copy of the GNU General Public License along
+ with this program; if not, write to the Free Software Foundation,
+ Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. */
+
+/* This tells Alpha OSF/1 not to define a getopt prototype in <stdio.h>.
+ Ditto for AIX 3.2 and <stdlib.h>. */
+#ifndef _NO_PROTO
+# define _NO_PROTO
+#endif
+
+#ifdef HAVE_CONFIG_H
+# include <config.h>
+#endif
+
+#include <stdio.h>
+
+/* This needs to come after some library #include
+ to get __GNU_LIBRARY__ defined. */
+#ifdef __GNU_LIBRARY__
+/* Don't include stdlib.h for non-GNU C libraries because some of them
+ contain conflicting prototypes for getopt. */
+# include <stdlib.h>
+# include <unistd.h>
+#endif /* GNU C library. */
+
+#include <string.h>
+
+#ifdef VMS
+# include <unixlib.h>
+#endif
+
+#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
+
+/* This version of `getopt' appears to the caller like standard Unix `getopt'
+ but it behaves differently for the user, since it allows the user
+ to intersperse the options with the other arguments.
+
+ As `getopt' 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.
+
+ Setting the environment variable POSIXLY_CORRECT disables permutation.
+ Then the 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.h"
+#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;
+
+
+#ifndef __GNU_LIBRARY__
+
+/* Avoid depending on library functions or files
+ whose names are inconsistent. */
+
+#ifndef getenv
+extern char *getenv ();
+#endif
+
+#endif /* not __GNU_LIBRARY__ */
+
+#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 *const *argv, const char *optstring,
+ 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 = !!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.
+
+ The elements of ARGV aren't really const, because we permute them.
+ But we pretend they're const in the prototype to be compatible
+ with other systems.
+
+ 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. */
+
+int
+_getopt_internal_r (int argc, char *const *argv, const char *optstring,
+ const struct option *longopts, int *longind,
+ int long_only, 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, 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;
+
+ if (_IO_fwide (stderr, 0) > 0)
+ __fwprintf (stderr, L"%s", buf);
+ else
+ fputs (buf, stderr);
+
+ ((_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;
+
+ if (_IO_fwide (stderr, 0) > 0)
+ __fwprintf (stderr, L"%s", buf);
+ else
+ fputs (buf, stderr);
+
+ ((_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;
+
+ if (_IO_fwide (stderr, 0) > 0)
+ __fwprintf (stderr, L"%s", buf);
+ else
+ fputs (buf, stderr);
+
+ ((_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;
+
+ if (_IO_fwide (stderr, 0) > 0)
+ __fwprintf (stderr, L"%s", buf);
+ else
+ fputs (buf, stderr);
+
+ ((_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;
+
+ if (_IO_fwide (stderr, 0) > 0)
+ __fwprintf (stderr, L"%s", buf);
+ else
+ fputs (buf, stderr);
+
+ ((_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;
+
+ if (_IO_fwide (stderr, 0) > 0)
+ __fwprintf (stderr, L"%s", buf);
+ else
+ fputs (buf, stderr);
+
+ ((_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;
+
+ if (_IO_fwide (stderr, 0) > 0)
+ __fwprintf (stderr, L"%s", buf);
+ else
+ fputs (buf, stderr);
+
+ ((_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;
+
+ if (_IO_fwide (stderr, 0) > 0)
+ __fwprintf (stderr, L"%s", buf);
+ else
+ fputs (buf, stderr);
+
+ ((_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;
+
+ if (_IO_fwide (stderr, 0) > 0)
+ __fwprintf (stderr, L"%s", buf);
+ else
+ fputs (buf, stderr);
+
+ ((_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;
+
+ if (_IO_fwide (stderr, 0) > 0)
+ __fwprintf (stderr, L"%s", buf);
+ else
+ fputs (buf, stderr);
+
+ ((_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 *const *argv, const char *optstring,
+ const struct option *longopts, int *longind, int long_only)
+{
+ int result;
+
+ getopt_data.optind = optind;
+ getopt_data.opterr = opterr;
+
+ result = _getopt_internal_r (argc, argv, optstring, longopts,
+ longind, long_only, &getopt_data);
+
+ optind = getopt_data.optind;
+ optarg = getopt_data.optarg;
+ optopt = getopt_data.optopt;
+
+ return result;
+}
+
+int
+getopt (int argc, char *const *argv, const char *optstring)
+{
+ return _getopt_internal (argc, argv, optstring,
+ (const struct option *) 0,
+ (int *) 0,
+ 0);
+}
+
+
+#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/macros/texinfo/contrib/texinfo-hu/texinfo/lib/getopt.h b/macros/texinfo/contrib/texinfo-hu/texinfo/lib/getopt.h
new file mode 100644
index 0000000000..993946b12c
--- /dev/null
+++ b/macros/texinfo/contrib/texinfo-hu/texinfo/lib/getopt.h
@@ -0,0 +1,10 @@
+/* getopt.h -- wrapper for gnulib getopt_.h.
+ $Id: getopt.h,v 1.6 2004/09/14 12:36:00 karl Exp $
+ Copyright (C) 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.
+*/
+
+#include "getopt_.h"
diff --git a/macros/texinfo/contrib/texinfo-hu/texinfo/lib/getopt1.c b/macros/texinfo/contrib/texinfo-hu/texinfo/lib/getopt1.c
new file mode 100644
index 0000000000..706f59c083
--- /dev/null
+++ b/macros/texinfo/contrib/texinfo-hu/texinfo/lib/getopt1.c
@@ -0,0 +1,171 @@
+/* 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
+ 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 2, or (at your option)
+ any later version.
+
+ This program is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ GNU General Public License for more details.
+
+ You should have received a copy of the GNU General Public License along
+ with this program; if not, write to the Free Software Foundation,
+ Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. */
+
+#ifdef HAVE_CONFIG_H
+#include <config.h>
+#endif
+
+#ifdef _LIBC
+# include <getopt.h>
+#else
+# 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 *const *argv, const char *options,
+ const struct option *long_options, int *opt_index)
+{
+ return _getopt_internal (argc, argv, options, long_options, opt_index, 0);
+}
+
+int
+_getopt_long_r (int argc, char *const *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, 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 *const *argv, const char *options,
+ const struct option *long_options, int *opt_index)
+{
+ return _getopt_internal (argc, argv, options, long_options, opt_index, 1);
+}
+
+int
+_getopt_long_only_r (int argc, char *const *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, 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/macros/texinfo/contrib/texinfo-hu/texinfo/lib/getopt_.h b/macros/texinfo/contrib/texinfo-hu/texinfo/lib/getopt_.h
new file mode 100644
index 0000000000..c61768c691
--- /dev/null
+++ b/macros/texinfo/contrib/texinfo-hu/texinfo/lib/getopt_.h
@@ -0,0 +1,176 @@
+/* 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 2, or (at your option)
+ any later version.
+
+ This program is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ GNU General Public License for more details.
+
+ You should have received a copy of the GNU General Public License along
+ with this program; if not, write to the Free Software Foundation,
+ Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. */
+
+#ifndef _GETOPT_H
+
+#ifndef __need_getopt
+# define _GETOPT_H 1
+#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 '\0'. This behavior is specific to the GNU
+ `getopt'. */
+
+#ifdef __GNU_LIBRARY__
+/* Many other libraries have conflicting prototypes for getopt, with
+ differences in the consts, in stdlib.h. To avoid compilation
+ errors, only prototype getopt for the GNU C library. */
+extern int getopt (int ___argc, char *const *___argv, const char *__shortopts)
+ __THROW;
+#else /* not __GNU_LIBRARY__ */
+extern int getopt ();
+#endif /* __GNU_LIBRARY__ */
+
+#ifndef __need_getopt
+extern int getopt_long (int ___argc, char *const *___argv,
+ const char *__shortopts,
+ const struct option *__longopts, int *__longind)
+ __THROW;
+extern int getopt_long_only (int ___argc, char *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/macros/texinfo/contrib/texinfo-hu/texinfo/lib/getopt_int.h b/macros/texinfo/contrib/texinfo-hu/texinfo/lib/getopt_int.h
new file mode 100644
index 0000000000..0c5eddeca9
--- /dev/null
+++ b/macros/texinfo/contrib/texinfo-hu/texinfo/lib/getopt_int.h
@@ -0,0 +1,129 @@
+/* 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 2, or (at your option)
+ any later version.
+
+ This program is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ GNU General Public License for more details.
+
+ You should have received a copy of the GNU General Public License along
+ with this program; if not, write to the Free Software Foundation,
+ Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. */
+
+#ifndef _GETOPT_INT_H
+#define _GETOPT_INT_H 1
+
+extern int _getopt_internal (int ___argc, char *const *___argv,
+ const char *__shortopts,
+ const struct option *__longopts, int *__longind,
+ int __long_only);
+
+
+/* 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.
+
+ 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. */
+ 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 *const *___argv,
+ const char *__shortopts,
+ const struct option *__longopts, int *__longind,
+ int __long_only, struct _getopt_data *__data);
+
+extern int _getopt_long_r (int ___argc, char *const *___argv,
+ const char *__shortopts,
+ const struct option *__longopts, int *__longind,
+ struct _getopt_data *__data);
+
+extern int _getopt_long_only_r (int ___argc, char *const *___argv,
+ const char *__shortopts,
+ const struct option *__longopts,
+ int *__longind,
+ struct _getopt_data *__data);
+
+#endif /* getopt_int.h */
diff --git a/macros/texinfo/contrib/texinfo-hu/texinfo/lib/gettext.h b/macros/texinfo/contrib/texinfo-hu/texinfo/lib/gettext.h
new file mode 100644
index 0000000000..835732e01f
--- /dev/null
+++ b/macros/texinfo/contrib/texinfo-hu/texinfo/lib/gettext.h
@@ -0,0 +1,68 @@
+/* Convenience header for conditional use of GNU <libintl.h>.
+ Copyright (C) 1995-1998, 2000-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 2, or (at your option)
+ any later version.
+
+ This program is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ GNU General Public License for more details.
+
+ You should have received a copy of the GNU General Public License along
+ with this program; if not, write to the Free Software Foundation,
+ Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. */
+
+#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>
+
+#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
+
+/* 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) ((const char *) (Msgid))
+# define dcgettext(Domainname, Msgid, Category) ((const char *) (Msgid))
+# define ngettext(Msgid1, Msgid2, N) \
+ ((N) == 1 ? (const char *) (Msgid1) : (const char *) (Msgid2))
+# define dngettext(Domainname, Msgid1, Msgid2, N) \
+ ((N) == 1 ? (const char *) (Msgid1) : (const char *) (Msgid2))
+# define dcngettext(Domainname, Msgid1, Msgid2, N, Category) \
+ ((N) == 1 ? (const char *) (Msgid1) : (const char *) (Msgid2))
+# define textdomain(Domainname) ((const char *) (Domainname))
+# define bindtextdomain(Domainname, Dirname) ((const char *) (Dirname))
+# define bind_textdomain_codeset(Domainname, Codeset) ((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
+
+#endif /* _LIBGETTEXT_H */
diff --git a/macros/texinfo/contrib/texinfo-hu/texinfo/lib/memcpy.c b/macros/texinfo/contrib/texinfo-hu/texinfo/lib/memcpy.c
new file mode 100644
index 0000000000..fdca8de2c8
--- /dev/null
+++ b/macros/texinfo/contrib/texinfo-hu/texinfo/lib/memcpy.c
@@ -0,0 +1,38 @@
+/* Copyright (C) 1995, 1997, 2000, 2003 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., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. */
+
+/* Written by Jim Meyering <meyering@na-net.ornl.gov>. */
+
+#if HAVE_CONFIG_H
+# include <config.h>
+#endif
+
+#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/macros/texinfo/contrib/texinfo-hu/texinfo/lib/memmove.c b/macros/texinfo/contrib/texinfo-hu/texinfo/lib/memmove.c
new file mode 100644
index 0000000000..79cc782739
--- /dev/null
+++ b/macros/texinfo/contrib/texinfo-hu/texinfo/lib/memmove.c
@@ -0,0 +1,28 @@
+/* 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>. */
+
+#if HAVE_CONFIG_H
+# include <config.h>
+#endif
+
+#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/macros/texinfo/contrib/texinfo-hu/texinfo/lib/mkstemp.c b/macros/texinfo/contrib/texinfo-hu/texinfo/lib/mkstemp.c
new file mode 100644
index 0000000000..f6312b6463
--- /dev/null
+++ b/macros/texinfo/contrib/texinfo-hu/texinfo/lib/mkstemp.c
@@ -0,0 +1,42 @@
+/* Copyright (C) 1998, 1999, 2001 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 2, or (at your option)
+ any later version.
+
+ This program is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ GNU General Public License for more details.
+
+ You should have received a copy of the GNU General Public License along
+ with this program; if not, write to the Free Software Foundation,
+ Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. */
+
+#include <config.h>
+
+/* Disable the definition of mkstemp to rpl_mkstemp (from config.h) in this
+ file. Otherwise, we'd get conflicting prototypes for rpl_mkstemp on
+ most systems. */
+#undef mkstemp
+
+#include <stdio.h>
+#include <stdlib.h>
+
+#ifndef __GT_FILE
+# define __GT_FILE 0
+#endif
+
+int __gen_tempname ();
+
+/* 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 filename unique.
+ Then open the file and return a fd. */
+int
+rpl_mkstemp (char *template)
+{
+ return __gen_tempname (template, __GT_FILE);
+}
diff --git a/macros/texinfo/contrib/texinfo-hu/texinfo/lib/strcase.h b/macros/texinfo/contrib/texinfo-hu/texinfo/lib/strcase.h
new file mode 100644
index 0000000000..f17e64832f
--- /dev/null
+++ b/macros/texinfo/contrib/texinfo-hu/texinfo/lib/strcase.h
@@ -0,0 +1,35 @@
+/* Case-insensitive string comparison functions.
+ Copyright (C) 1995-1996, 2001, 2003 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., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. */
+
+#ifndef _STRCASE_H
+#define _STRCASE_H
+
+#include <stddef.h>
+
+/* Compare 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 does not work correctly in multibyte locales. */
+extern int strcasecmp (const char *s1, const char *s2);
+
+/* Compare no more than N characters of 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 can not work correctly in multibyte locales. */
+extern int strncasecmp (const char *s1, const char *s2, size_t n);
+
+#endif /* _STRCASE_H */
diff --git a/macros/texinfo/contrib/texinfo-hu/texinfo/lib/strcasecmp.c b/macros/texinfo/contrib/texinfo-hu/texinfo/lib/strcasecmp.c
new file mode 100644
index 0000000000..cf4ab88dbd
--- /dev/null
+++ b/macros/texinfo/contrib/texinfo-hu/texinfo/lib/strcasecmp.c
@@ -0,0 +1,66 @@
+/* strcasecmp.c -- case insensitive string comparator
+ Copyright (C) 1998, 1999 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., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. */
+
+#if HAVE_CONFIG_H
+# include <config.h>
+#endif
+
+#ifdef LENGTH_LIMIT
+# define STRXCASECMP_FUNCTION strncasecmp
+# define STRXCASECMP_DECLARE_N , size_t n
+# define LENGTH_LIMIT_EXPR(Expr) Expr
+#else
+# define STRXCASECMP_FUNCTION strcasecmp
+# define STRXCASECMP_DECLARE_N /* empty */
+# define LENGTH_LIMIT_EXPR(Expr) 0
+#endif
+
+#include <stddef.h>
+#include <ctype.h>
+
+#define TOLOWER(Ch) (isupper (Ch) ? tolower (Ch) : (Ch))
+
+/* Compare {{no more than N characters of }}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. */
+
+int
+STRXCASECMP_FUNCTION (const char *s1, const char *s2 STRXCASECMP_DECLARE_N)
+{
+ register const unsigned char *p1 = (const unsigned char *) s1;
+ register const unsigned char *p2 = (const unsigned char *) s2;
+ unsigned char c1, c2;
+
+ if (p1 == p2 || LENGTH_LIMIT_EXPR (n == 0))
+ return 0;
+
+ do
+ {
+ c1 = TOLOWER (*p1);
+ c2 = TOLOWER (*p2);
+
+ if (LENGTH_LIMIT_EXPR (--n == 0) || c1 == '\0')
+ break;
+
+ ++p1;
+ ++p2;
+ }
+ while (c1 == c2);
+
+ return c1 - c2;
+}
diff --git a/macros/texinfo/contrib/texinfo-hu/texinfo/lib/strdup.c b/macros/texinfo/contrib/texinfo-hu/texinfo/lib/strdup.c
new file mode 100644
index 0000000000..8c88e310a5
--- /dev/null
+++ b/macros/texinfo/contrib/texinfo-hu/texinfo/lib/strdup.c
@@ -0,0 +1,56 @@
+/* Copyright (C) 1991, 1996, 1997, 1998, 2002, 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 2, or (at your option)
+ any later version.
+
+ This program is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ GNU General Public License for more details.
+
+ You should have received a copy of the GNU General Public License along
+ with this program; if not, write to the Free Software Foundation,
+ Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. */
+
+#ifdef HAVE_CONFIG_H
+# include <config.h>
+#endif
+
+#ifndef _LIBC
+/* Get specification. */
+# include "strdup.h"
+#endif
+
+#include <stdlib.h>
+#include <string.h>
+
+#undef __strdup
+#undef strdup
+
+#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/macros/texinfo/contrib/texinfo-hu/texinfo/lib/strdup.h b/macros/texinfo/contrib/texinfo-hu/texinfo/lib/strdup.h
new file mode 100644
index 0000000000..4dc6a391c8
--- /dev/null
+++ b/macros/texinfo/contrib/texinfo-hu/texinfo/lib/strdup.h
@@ -0,0 +1,29 @@
+/* strdup.h -- duplicate a string
+ Copyright (C) 2004 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., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. */
+
+#ifndef STRDUP_H_
+#define STRDUP_H_
+
+/* Get strdup declaration, if available. */
+#include <string.h>
+
+#if !HAVE_DECL_STRDUP && !defined strdup
+/* Duplicate S, returning an identical malloc'd string. */
+extern char *strdup (const char *s);
+#endif
+
+#endif /* STRDUP_H_ */
diff --git a/macros/texinfo/contrib/texinfo-hu/texinfo/lib/strerror.c b/macros/texinfo/contrib/texinfo-hu/texinfo/lib/strerror.c
new file mode 100644
index 0000000000..7c17f1fbef
--- /dev/null
+++ b/macros/texinfo/contrib/texinfo-hu/texinfo/lib/strerror.c
@@ -0,0 +1,49 @@
+/* strerror.c --- ANSI C compatible system error routine
+
+ Copyright (C) 1986, 1988, 1989, 1991, 2002, 2003 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., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. */
+
+#if HAVE_CONFIG_H
+# include <config.h>
+#endif
+
+#include <limits.h>
+
+/* Don't include <stdio.h>, since it may or may not declare
+ sys_errlist and its declarations may collide with ours. Just
+ declare the stuff that we need directly. Standard hosted C89
+ implementations define strerror and they don't need this strerror
+ function, so take some liberties with the standard to cater to
+ ancient or limited freestanding implementations. */
+int sprintf (char *, char const *, ...);
+extern int sys_nerr;
+extern char *sys_errlist[];
+
+char *
+strerror (int n)
+{
+ static char const fmt[] = "Unknown error (%d)";
+ static char mesg[sizeof fmt + sizeof n * CHAR_BIT / 3];
+
+ if (n < 0 || n >= sys_nerr)
+ {
+ sprintf (mesg, fmt, n);
+ return mesg;
+ }
+ else
+ return sys_errlist[n];
+}
diff --git a/macros/texinfo/contrib/texinfo-hu/texinfo/lib/strncasecmp.c b/macros/texinfo/contrib/texinfo-hu/texinfo/lib/strncasecmp.c
new file mode 100644
index 0000000000..68d95aacc0
--- /dev/null
+++ b/macros/texinfo/contrib/texinfo-hu/texinfo/lib/strncasecmp.c
@@ -0,0 +1,2 @@
+#define LENGTH_LIMIT
+#include "strcasecmp.c"
diff --git a/macros/texinfo/contrib/texinfo-hu/texinfo/lib/substring.c b/macros/texinfo/contrib/texinfo-hu/texinfo/lib/substring.c
new file mode 100644
index 0000000000..9e59fceefe
--- /dev/null
+++ b/macros/texinfo/contrib/texinfo-hu/texinfo/lib/substring.c
@@ -0,0 +1,35 @@
+/* substring.c -- extract substring.
+ $Id: substring.c,v 1.2 2004/04/11 17:56:46 karl Exp $
+
+ Copyright (C) 1999, 2004 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.,
+ 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. */
+
+#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/macros/texinfo/contrib/texinfo-hu/texinfo/lib/system.h b/macros/texinfo/contrib/texinfo-hu/texinfo/lib/system.h
new file mode 100644
index 0000000000..946eb3c810
--- /dev/null
+++ b/macros/texinfo/contrib/texinfo-hu/texinfo/lib/system.h
@@ -0,0 +1,291 @@
+/* system.h: system-dependent declarations; include this first.
+ $Id: system.h,v 1.12 2004/04/26 13:56:57 karl Exp $
+
+ Copyright (C) 1997, 1998, 1999, 2000, 2001, 2002, 2003, 2004 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., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. */
+
+#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
+
+/* We follow the order of header inclusion from Autoconf's
+ ac_includes_default, more or less. */
+#include <stdio.h>
+#include <sys/types.h>
+#include <ctype.h>
+
+/* All systems nowadays probably have these functions, but ... */
+#ifdef HAVE_LOCALE_H
+#include <locale.h>
+#endif
+#ifndef HAVE_SETLOCALE
+#define setlocale(category,locale) /* empty */
+#endif
+
+/* For gettext (NLS). */
+#define const
+#include "gettext.h"
+#undef const
+
+#define _(String) gettext (String)
+#define N_(String) (String)
+
+#ifdef STDC_HEADERS
+#define getopt system_getopt
+#include <stdlib.h>
+#undef getopt
+#else
+extern char *getenv ();
+#endif
+
+/* Don't use bcopy! Use memmove if source and destination may overlap,
+ memcpy otherwise. */
+#if HAVE_STRING_H
+# if !STDC_HEADERS && HAVE_MEMORY_H
+# include <memory.h>
+# endif
+# include <string.h>
+#endif
+
+#if HAVE_STRINGS_H
+/* Always include <strings.h> if we have it. This is because that's
+ what Autoconf's AC_CHECK_DECL does. On IBM AIX 4.2, strncasecmp is
+ only declared in strings.h. */
+# include <strings.h>
+#endif
+
+#if !HAVE_STRNCASECMP || !HAVE_STRCASECMP
+# include "strcase.h"
+#endif
+
+#if !HAVE_DECL_MEMCHR
+char *memchr ();
+#endif
+
+/* <unistd.h> defines _POSIX_VERSION, but Paul Eggert points out that is
+ only supposed to be used in user code, not other system headers. */
+#ifdef HAVE_UNISTD_H
+#include <unistd.h>
+#endif /* HAVE_UNISTD_H */
+
+#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_STRCASECMP
+extern int strcasecmp ();
+#endif
+
+#ifndef HAVE_DECL_STRNCASECMP
+extern int strncasecmp ();
+#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 ":"
+# else /* O_BINARY && !__CYGWIN__ */
+# define DEFAULT_TMPDIR "c:/"
+# define PATH_SEP ";"
+# endif /* O_BINARY && !__CYGWIN__ */
+ /* Back to any O_BINARY system. */
+# define FILENAME_CMP strcasecmp
+# define FILENAME_CMPN strncasecmp
+# 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]) || ((n)[0] && (n)[1] == ':'))
+# define PIPE_USE_FORK 0
+# define SET_BINARY(f) do {if (!isatty(f)) setmode(f,O_BINARY);} while(0)
+# define STRIP_DOT_EXE 1
+
+#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))
+
+#endif /* TEXINFO_SYSTEM_H */
diff --git a/macros/texinfo/contrib/texinfo-hu/texinfo/lib/tempname.c b/macros/texinfo/contrib/texinfo-hu/texinfo/lib/tempname.c
new file mode 100644
index 0000000000..b3d0874ce9
--- /dev/null
+++ b/macros/texinfo/contrib/texinfo-hu/texinfo/lib/tempname.c
@@ -0,0 +1,344 @@
+/* tempname.c - generate the name of a temporary file.
+
+ Copyright (C) 1991, 1992, 1993, 1994, 1995, 1996, 1997, 1998, 1999,
+ 2000, 2001, 2002, 2003 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., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. */
+
+#if HAVE_CONFIG_H
+# include <config.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>
+
+#if HAVE_FCNTL_H || _LIBC
+# include <fcntl.h>
+#endif
+
+#if HAVE_SYS_TIME_H || _LIBC
+# include <sys/time.h>
+#endif
+
+#if HAVE_STDINT_H || _LIBC
+# include <stdint.h>
+#endif
+#if HAVE_INTTYPES_H
+# include <inttypes.h>
+#endif
+
+#if HAVE_UNISTD_H || _LIBC
+# include <unistd.h>
+#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
+#if !S_IRUSR && S_IREAD
+# define S_IRUSR S_IREAD
+#endif
+#if !S_IRUSR
+# define S_IRUSR 00400
+#endif
+#if !S_IWUSR && S_IWRITE
+# define S_IWUSR S_IWRITE
+#endif
+#if !S_IWUSR
+# define S_IWUSR 00200
+#endif
+#if !S_IXUSR && S_IEXEC
+# define S_IXUSR S_IEXEC
+#endif
+#if !S_IXUSR
+# define S_IXUSR 00100
+#endif
+
+#if _LIBC
+# define struct_stat64 struct stat64
+#else
+# define struct_stat64 struct stat
+# define __getpid getpid
+# define __gettimeofday gettimeofday
+# define __mkdir mkdir
+# define __open open
+# define __open64 open
+# define __lxstat64(version, path, buf) lstat (path, buf)
+# define __xstat64(version, path, buf) stat (path, 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
+
+/* 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;
+}
+
+/* These are the characters used in temporary filenames. */
+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. */
+ unsigned int 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. */
+ unsigned int attempts = attempts_min < TMP_MAX ? TMP_MAX : attempts_min;
+
+ 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
+# if HAVE_GETTIMEOFDAY || _LIBC
+ {
+ struct timeval tv;
+ __gettimeofday (&tv, NULL);
+ random_time_bits = ((uint64_t) tv.tv_usec << 16) ^ tv.tv_sec;
+ }
+# else
+ random_time_bits = time (NULL);
+# endif
+#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 = __open (tmpl, O_RDWR | O_CREAT | O_EXCL, S_IRUSR | S_IWUSR);
+ break;
+
+ case __GT_BIGFILE:
+ fd = __open64 (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/macros/texinfo/contrib/texinfo-hu/texinfo/lib/xalloc.h b/macros/texinfo/contrib/texinfo-hu/texinfo/lib/xalloc.h
new file mode 100644
index 0000000000..d81f2a6764
--- /dev/null
+++ b/macros/texinfo/contrib/texinfo-hu/texinfo/lib/xalloc.h
@@ -0,0 +1,90 @@
+/* xalloc.h -- malloc with out-of-memory checking
+
+ Copyright (C) 1990, 1991, 1992, 1993, 1994, 1995, 1996, 1997, 1998,
+ 1999, 2000, 2003, 2004 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., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. */
+
+#ifndef XALLOC_H_
+# define XALLOC_H_
+
+# include <stddef.h>
+
+
+# ifdef __cplusplus
+extern "C" {
+# endif
+
+
+# ifndef __attribute__
+# if __GNUC__ < 2 || (__GNUC__ == 2 && __GNUC_MINOR__ < 8) || __STRICT_ANSI__
+# define __attribute__(x)
+# endif
+# endif
+
+# ifndef ATTRIBUTE_NORETURN
+# define ATTRIBUTE_NORETURN __attribute__ ((__noreturn__))
+# 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);
+void *xnmalloc (size_t n, size_t s);
+void *xzalloc (size_t s);
+void *xcalloc (size_t n, size_t s);
+void *xrealloc (void *p, size_t s);
+void *xnrealloc (void *p, size_t n, size_t s);
+void *x2realloc (void *p, size_t *pn);
+void *x2nrealloc (void *p, size_t *pn, size_t s);
+void *xclone (void const *p, size_t s);
+char *xstrdup (const char *str);
+
+/* 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))
+
+/* These macros are deprecated; they will go away soon, and are retained
+ temporarily only to ease conversion to the functions described above. */
+# define CCLONE(p, n) xclone (p, (n) * sizeof *(p))
+# define CLONE(p) xclone (p, sizeof *(p))
+# define NEW(type, var) type *var = xmalloc (sizeof (type))
+# define XCALLOC(type, n) xcalloc (n, sizeof (type))
+# define XMALLOC(type, n) xnmalloc (n, sizeof (type))
+# define XREALLOC(p, type, n) xnrealloc (p, n, sizeof (type))
+# define XFREE(p) free (p)
+
+
+# ifdef __cplusplus
+}
+# endif
+
+
+#endif /* !XALLOC_H_ */
diff --git a/macros/texinfo/contrib/texinfo-hu/texinfo/lib/xexit.c b/macros/texinfo/contrib/texinfo-hu/texinfo/lib/xexit.c
new file mode 100644
index 0000000000..53eb0fc1d6
--- /dev/null
+++ b/macros/texinfo/contrib/texinfo-hu/texinfo/lib/xexit.c
@@ -0,0 +1,87 @@
+/* xexit.c -- exit with attention to return values and closing stdout.
+ $Id: xexit.c,v 1.5 2004/04/11 17:56:46 karl Exp $
+
+ Copyright (C) 1999, 2003, 2004 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.,
+ 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. */
+
+#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/macros/texinfo/contrib/texinfo-hu/texinfo/lib/xmalloc.c b/macros/texinfo/contrib/texinfo-hu/texinfo/lib/xmalloc.c
new file mode 100644
index 0000000000..b91e4fce63
--- /dev/null
+++ b/macros/texinfo/contrib/texinfo-hu/texinfo/lib/xmalloc.c
@@ -0,0 +1,61 @@
+/* xmalloc.c -- safe versions of malloc and realloc.
+
+ Copyright (C) 1988, 1989, 1990, 1991, 1992, 1993, 2004 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., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
+
+ Written by Brian Fox (bfox@ai.mit.edu). */
+
+#if !defined (ALREADY_HAVE_XMALLOC)
+#include "system.h"
+
+static void
+memory_error_and_abort (const char *fname)
+{
+ fprintf (stderr, "%s: Out of virtual memory!\n", fname);
+ abort ();
+}
+
+/* Return a pointer to free()able block of memory large enough
+ to hold BYTES number of bytes. If the memory cannot be allocated,
+ print an error message and abort. */
+void *
+xmalloc (size_t bytes)
+{
+ void *temp = malloc (bytes);
+
+ if (!temp)
+ memory_error_and_abort ("xmalloc");
+ return (temp);
+}
+
+void *
+xrealloc (void *pointer, size_t bytes)
+{
+ void *temp;
+
+ if (!pointer)
+ temp = malloc (bytes);
+ else
+ temp = realloc (pointer, bytes);
+
+ if (!temp)
+ memory_error_and_abort ("xrealloc");
+
+ return (temp);
+}
+
+#endif /* !ALREADY_HAVE_XMALLOC */
diff --git a/macros/texinfo/contrib/texinfo-hu/texinfo/lib/xstrdup.c b/macros/texinfo/contrib/texinfo-hu/texinfo/lib/xstrdup.c
new file mode 100644
index 0000000000..1182c592ac
--- /dev/null
+++ b/macros/texinfo/contrib/texinfo-hu/texinfo/lib/xstrdup.c
@@ -0,0 +1,33 @@
+/* xstrdup.c -- copy a string with out of memory checking
+ Copyright (C) 1990, 1996, 1998, 2001, 2003 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., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. */
+
+#if HAVE_CONFIG_H
+# include <config.h>
+#endif
+
+/* Specification. */
+#include "xalloc.h"
+
+#include <string.h>
+
+/* Return a newly allocated copy of STRING. */
+
+char *
+xstrdup (const char *string)
+{
+ return strcpy (xmalloc (strlen (string) + 1), string);
+}
diff --git a/macros/texinfo/contrib/texinfo-hu/texinfo/m4/ChangeLog b/macros/texinfo/contrib/texinfo-hu/texinfo/m4/ChangeLog
new file mode 100644
index 0000000000..c039784841
--- /dev/null
+++ b/macros/texinfo/contrib/texinfo-hu/texinfo/m4/ChangeLog
@@ -0,0 +1,51 @@
+2004-02-05 gettextize <bug-gnu-gettext@gnu.org>
+
+ * po.m4: Upgrade to gettext-0.14.1.
+
+2003-12-20 gettextize <bug-gnu-gettext@gnu.org>
+
+ * printf-posix.m4: Upgrade to gettext-0.13.1.
+
+2003-12-13 gettextize <bug-gnu-gettext@gnu.org>
+
+ * intmax.m4: New file, from gettext-0.13.
+ * longdouble.m4: New file, from gettext-0.13.
+ * longlong.m4: New file, from gettext-0.13.
+ * printf-posix.m4: New file, from gettext-0.13.
+ * signed.m4: New file, from gettext-0.13.
+ * size_max.m4: New file, from gettext-0.13.
+ * wchar_t.m4: New file, from gettext-0.13.
+ * wint_t.m4: New file, from gettext-0.13.
+ * xsize.m4: New file, from gettext-0.13.
+ * Makefile.am (EXTRA_DIST): Add the new files.
+
+2003-05-29 gettextize <bug-gnu-gettext@gnu.org>
+
+ * gettext.m4: Upgrade to gettext-0.12.1.
+ * inttypes_h.m4: Upgrade to gettext-0.12.1.
+ * lib-ld.m4: Upgrade to gettext-0.12.1.
+ * lib-link.m4: Upgrade to gettext-0.12.1.
+ * lib-prefix.m4: Upgrade to gettext-0.12.1.
+ * nls.m4: New file, from gettext-0.12.1.
+ * po.m4: New file, from gettext-0.12.1.
+ * progtest.m4: Upgrade to gettext-0.12.1.
+ * stdint_h.m4: Upgrade to gettext-0.12.1.
+ * uintmax_t.m4: Upgrade to gettext-0.12.1.
+ * ulonglong.m4: Upgrade to gettext-0.12.1.
+ * Makefile.am (EXTRA_DIST): Add the new files.
+
+2002-09-20 gettextize <bug-gnu-gettext@gnu.org>
+
+ * gettext.m4: Upgrade to gettext-0.11.5.
+ * iconv.m4: Upgrade to gettext-0.11.5.
+ * intdiv0.m4: New file, from gettext-0.11.5.
+ * inttypes.m4: New file, from gettext-0.11.5.
+ * inttypes_h.m4: New file, from gettext-0.11.5.
+ * inttypes-pri.m4: New file, from gettext-0.11.5.
+ * isc-posix.m4: Upgrade to gettext-0.11.5.
+ * lcmessage.m4: Upgrade to gettext-0.11.5.
+ * lib-link.m4: Upgrade to gettext-0.11.5.
+ * stdint_h.m4: New file, from gettext-0.11.5.
+ * uintmax_t.m4: New file, from gettext-0.11.5.
+ * ulonglong.m4: New file, from gettext-0.11.5.
+ * Makefile.am (EXTRA_DIST): Add the new files.
diff --git a/macros/texinfo/contrib/texinfo-hu/texinfo/m4/Makefile.am b/macros/texinfo/contrib/texinfo-hu/texinfo/m4/Makefile.am
new file mode 100644
index 0000000000..0ace7ea70b
--- /dev/null
+++ b/macros/texinfo/contrib/texinfo-hu/texinfo/m4/Makefile.am
@@ -0,0 +1,24 @@
+EXTRA_DIST = intmax.m4 longdouble.m4 longlong.m4 printf-posix.m4 signed.m4 size_max.m4 wchar_t.m4 wint_t.m4 xsize.m4 nls.m4 po.m4 \
+ check-decl.m4 \
+ codeset.m4 \
+ gettext.m4 \
+ glibc21.m4 \
+ iconv.m4 \
+ intdiv0.m4 \
+ inttypes-pri.m4 \
+ inttypes.m4 \
+ inttypes_h.m4 \
+ isc-posix.m4 \
+ lcmessage.m4 \
+ lib-ld.m4 \
+ lib-link.m4 \
+ lib-prefix.m4 \
+ mkstemp.m4 \
+ onceonly.m4 \
+ onceonly_2_57.m4 \
+ prereq.m4 \
+ progtest.m4 \
+ stdint_h.m4 \
+ strcase.m4 \
+ uintmax_t.m4 \
+ ulonglong.m4
diff --git a/macros/texinfo/contrib/texinfo-hu/texinfo/m4/Makefile.in b/macros/texinfo/contrib/texinfo-hu/texinfo/m4/Makefile.in
new file mode 100644
index 0000000000..ac7e83ddd5
--- /dev/null
+++ b/macros/texinfo/contrib/texinfo-hu/texinfo/m4/Makefile.in
@@ -0,0 +1,360 @@
+# Makefile.in generated by automake 1.9.4 from Makefile.am.
+# @configure_input@
+
+# Copyright (C) 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002,
+# 2003, 2004 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@
+srcdir = @srcdir@
+top_srcdir = @top_srcdir@
+VPATH = @srcdir@
+pkgdatadir = $(datadir)/@PACKAGE@
+pkglibdir = $(libdir)/@PACKAGE@
+pkgincludedir = $(includedir)/@PACKAGE@
+top_builddir = ..
+am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd
+INSTALL = @INSTALL@
+install_sh_DATA = $(install_sh) -c -m 644
+install_sh_PROGRAM = $(install_sh) -c
+install_sh_SCRIPT = $(install_sh) -c
+INSTALL_HEADER = $(INSTALL_DATA)
+transform = $(program_transform_name)
+NORMAL_INSTALL = :
+PRE_INSTALL = :
+POST_INSTALL = :
+NORMAL_UNINSTALL = :
+PRE_UNINSTALL = :
+POST_UNINSTALL = :
+build_triplet = @build@
+host_triplet = @host@
+subdir = m4
+DIST_COMMON = $(srcdir)/Makefile.am $(srcdir)/Makefile.in ChangeLog
+ACLOCAL_M4 = $(top_srcdir)/aclocal.m4
+am__aclocal_m4_deps = $(top_srcdir)/m4/codeset.m4 \
+ $(top_srcdir)/m4/gettext.m4 $(top_srcdir)/m4/glibc21.m4 \
+ $(top_srcdir)/m4/iconv.m4 $(top_srcdir)/m4/intdiv0.m4 \
+ $(top_srcdir)/m4/intmax.m4 $(top_srcdir)/m4/inttypes-pri.m4 \
+ $(top_srcdir)/m4/inttypes.m4 $(top_srcdir)/m4/inttypes_h.m4 \
+ $(top_srcdir)/m4/lcmessage.m4 $(top_srcdir)/m4/lib-ld.m4 \
+ $(top_srcdir)/m4/lib-link.m4 $(top_srcdir)/m4/lib-prefix.m4 \
+ $(top_srcdir)/m4/longdouble.m4 $(top_srcdir)/m4/longlong.m4 \
+ $(top_srcdir)/m4/mkstemp.m4 $(top_srcdir)/m4/nls.m4 \
+ $(top_srcdir)/m4/onceonly_2_57.m4 $(top_srcdir)/m4/po.m4 \
+ $(top_srcdir)/m4/printf-posix.m4 $(top_srcdir)/m4/progtest.m4 \
+ $(top_srcdir)/m4/signed.m4 $(top_srcdir)/m4/size_max.m4 \
+ $(top_srcdir)/m4/stdint_h.m4 $(top_srcdir)/m4/strcase.m4 \
+ $(top_srcdir)/m4/uintmax_t.m4 $(top_srcdir)/m4/ulonglong.m4 \
+ $(top_srcdir)/m4/wchar_t.m4 $(top_srcdir)/m4/wint_t.m4 \
+ $(top_srcdir)/m4/xsize.m4 $(top_srcdir)/configure.ac
+am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \
+ $(ACLOCAL_M4)
+mkinstalldirs = $(SHELL) $(top_srcdir)/mkinstalldirs
+CONFIG_HEADER = $(top_builddir)/config.h
+CONFIG_CLEAN_FILES =
+SOURCES =
+DIST_SOURCES =
+DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST)
+ACLOCAL = @ACLOCAL@
+ALLOCA = @ALLOCA@
+AMDEP_FALSE = @AMDEP_FALSE@
+AMDEP_TRUE = @AMDEP_TRUE@
+AMTAR = @AMTAR@
+AUTOCONF = @AUTOCONF@
+AUTOHEADER = @AUTOHEADER@
+AUTOMAKE = @AUTOMAKE@
+AWK = @AWK@
+BUILD_INCLUDED_LIBINTL = @BUILD_INCLUDED_LIBINTL@
+CATOBJEXT = @CATOBJEXT@
+CC = @CC@
+CCDEPMODE = @CCDEPMODE@
+CFLAGS = @CFLAGS@
+CPP = @CPP@
+CPPFLAGS = @CPPFLAGS@
+CYGPATH_W = @CYGPATH_W@
+DATADIRNAME = @DATADIRNAME@
+DEFS = @DEFS@
+DEPDIR = @DEPDIR@
+ECHO_C = @ECHO_C@
+ECHO_N = @ECHO_N@
+ECHO_T = @ECHO_T@
+EGREP = @EGREP@
+EXEEXT = @EXEEXT@
+GENCAT = @GENCAT@
+GLIBC21 = @GLIBC21@
+GMSGFMT = @GMSGFMT@
+HAVE_ASPRINTF = @HAVE_ASPRINTF@
+HAVE_POSIX_PRINTF = @HAVE_POSIX_PRINTF@
+HAVE_SNPRINTF = @HAVE_SNPRINTF@
+HAVE_WPRINTF = @HAVE_WPRINTF@
+HELP2MAN = @HELP2MAN@
+INSTALL_DATA = @INSTALL_DATA@
+INSTALL_PROGRAM = @INSTALL_PROGRAM@
+INSTALL_SCRIPT = @INSTALL_SCRIPT@
+INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@
+INSTALL_WARNINGS_FALSE = @INSTALL_WARNINGS_FALSE@
+INSTALL_WARNINGS_TRUE = @INSTALL_WARNINGS_TRUE@
+INSTOBJEXT = @INSTOBJEXT@
+INTLBISON = @INTLBISON@
+INTLLIBS = @INTLLIBS@
+INTLOBJS = @INTLOBJS@
+INTL_LIBTOOL_SUFFIX_PREFIX = @INTL_LIBTOOL_SUFFIX_PREFIX@
+LDFLAGS = @LDFLAGS@
+LIBICONV = @LIBICONV@
+LIBINTL = @LIBINTL@
+LIBOBJS = @LIBOBJS@
+LIBS = @LIBS@
+LTLIBICONV = @LTLIBICONV@
+LTLIBINTL = @LTLIBINTL@
+LTLIBOBJS = @LTLIBOBJS@
+MAINT = @MAINT@
+MAINTAINER_MODE_FALSE = @MAINTAINER_MODE_FALSE@
+MAINTAINER_MODE_TRUE = @MAINTAINER_MODE_TRUE@
+MAKEINFO = @MAKEINFO@
+MKINSTALLDIRS = @MKINSTALLDIRS@
+MSGFMT = @MSGFMT@
+MSGMERGE = @MSGMERGE@
+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@
+RANLIB = @RANLIB@
+SET_MAKE = @SET_MAKE@
+SHELL = @SHELL@
+STRIP = @STRIP@
+TERMLIBS = @TERMLIBS@
+TOOLS_ONLY_FALSE = @TOOLS_ONLY_FALSE@
+TOOLS_ONLY_TRUE = @TOOLS_ONLY_TRUE@
+USE_INCLUDED_LIBINTL = @USE_INCLUDED_LIBINTL@
+USE_NLS = @USE_NLS@
+VERSION = @VERSION@
+XGETTEXT = @XGETTEXT@
+ac_ct_CC = @ac_ct_CC@
+ac_ct_RANLIB = @ac_ct_RANLIB@
+ac_ct_STRIP = @ac_ct_STRIP@
+am__fastdepCC_FALSE = @am__fastdepCC_FALSE@
+am__fastdepCC_TRUE = @am__fastdepCC_TRUE@
+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@
+datadir = @datadir@
+exec_prefix = @exec_prefix@
+host = @host@
+host_alias = @host_alias@
+host_cpu = @host_cpu@
+host_os = @host_os@
+host_vendor = @host_vendor@
+includedir = @includedir@
+infodir = @infodir@
+install_sh = @install_sh@
+libdir = @libdir@
+libexecdir = @libexecdir@
+localstatedir = @localstatedir@
+mandir = @mandir@
+mkdir_p = @mkdir_p@
+native_tools = @native_tools@
+oldincludedir = @oldincludedir@
+prefix = @prefix@
+program_transform_name = @program_transform_name@
+sbindir = @sbindir@
+sharedstatedir = @sharedstatedir@
+sysconfdir = @sysconfdir@
+target_alias = @target_alias@
+EXTRA_DIST = intmax.m4 longdouble.m4 longlong.m4 printf-posix.m4 signed.m4 size_max.m4 wchar_t.m4 wint_t.m4 xsize.m4 nls.m4 po.m4 \
+ check-decl.m4 \
+ codeset.m4 \
+ gettext.m4 \
+ glibc21.m4 \
+ iconv.m4 \
+ intdiv0.m4 \
+ inttypes-pri.m4 \
+ inttypes.m4 \
+ inttypes_h.m4 \
+ isc-posix.m4 \
+ lcmessage.m4 \
+ lib-ld.m4 \
+ lib-link.m4 \
+ lib-prefix.m4 \
+ mkstemp.m4 \
+ onceonly.m4 \
+ onceonly_2_57.m4 \
+ prereq.m4 \
+ progtest.m4 \
+ stdint_h.m4 \
+ strcase.m4 \
+ uintmax_t.m4 \
+ ulonglong.m4
+
+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 m4/Makefile'; \
+ cd $(top_srcdir) && \
+ $(AUTOMAKE) --gnu m4/Makefile
+.PRECIOUS: Makefile
+Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status
+ @case '$?' in \
+ *config.status*) \
+ cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh;; \
+ *) \
+ echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe)'; \
+ cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe);; \
+ esac;
+
+$(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES)
+ cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
+
+$(top_srcdir)/configure: @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
+uninstall-info-am:
+tags: TAGS
+TAGS:
+
+ctags: CTAGS
+CTAGS:
+
+
+distdir: $(DISTFILES)
+ @srcdirstrip=`echo "$(srcdir)" | sed 's|.|.|g'`; \
+ topsrcdirstrip=`echo "$(top_srcdir)" | sed 's|.|.|g'`; \
+ list='$(DISTFILES)'; for file in $$list; do \
+ case $$file in \
+ $(srcdir)/*) file=`echo "$$file" | sed "s|^$$srcdirstrip/||"`;; \
+ $(top_srcdir)/*) file=`echo "$$file" | sed "s|^$$topsrcdirstrip/|$(top_builddir)/|"`;; \
+ esac; \
+ if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \
+ dir=`echo "$$file" | sed -e 's,/[^/]*$$,,'`; \
+ if test "$$dir" != "$$file" && test "$$dir" != "."; then \
+ dir="/$$dir"; \
+ $(mkdir_p) "$(distdir)$$dir"; \
+ else \
+ dir=''; \
+ fi; \
+ if test -d $$d/$$file; then \
+ 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
+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-exec-am:
+
+install-info: install-info-am
+
+install-man:
+
+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: uninstall-info-am
+
+.PHONY: all all-am check 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-exec \
+ install-exec-am install-info install-info-am install-man \
+ install-strip installcheck installcheck-am installdirs \
+ maintainer-clean maintainer-clean-generic mostlyclean \
+ mostlyclean-generic pdf pdf-am ps ps-am uninstall uninstall-am \
+ uninstall-info-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/macros/texinfo/contrib/texinfo-hu/texinfo/m4/check-decl.m4 b/macros/texinfo/contrib/texinfo-hu/texinfo/m4/check-decl.m4
new file mode 100644
index 0000000000..d70e1c90f8
--- /dev/null
+++ b/macros/texinfo/contrib/texinfo-hu/texinfo/m4/check-decl.m4
@@ -0,0 +1,75 @@
+#serial 20
+
+dnl This is just a wrapper function to encapsulate this kludge.
+dnl Putting it in a separate file like this helps share it between
+dnl different packages.
+AC_DEFUN([gl_CHECK_DECLS],
+[
+ AC_REQUIRE([_gl_DECL_HEADERS])
+ AC_REQUIRE([AC_HEADER_TIME])
+ headers='
+#include <stdio.h>
+#include <string.h>
+#include <stdlib.h>
+
+#if HAVE_UNISTD_H
+# include <unistd.h>
+#endif
+
+#include <sys/types.h>
+#if TIME_WITH_SYS_TIME
+# include <sys/time.h>
+# include <time.h>
+#else
+# if HAVE_SYS_TIME_H
+# include <sys/time.h>
+# else
+# include <time.h>
+# endif
+#endif
+
+#if HAVE_UTMP_H
+# include <utmp.h>
+#endif
+
+#if HAVE_GRP_H
+# include <grp.h>
+#endif
+
+#if HAVE_PWD_H
+# include <pwd.h>
+#endif
+'
+
+ AC_CHECK_DECLS([
+ free,
+ getenv,
+ geteuid,
+ getgrgid,
+ getlogin,
+ getpwuid,
+ getuid,
+ getutent,
+ lseek,
+ malloc,
+ memchr,
+ memrchr,
+ nanosleep,
+ realloc,
+ stpcpy,
+ strndup,
+ strnlen,
+ strstr,
+ strtoul,
+ strtoull,
+ ttyname], , , $headers)
+])
+
+dnl FIXME: when autoconf has support for it.
+dnl This is a little helper so we can require these header checks.
+AC_DEFUN([_gl_DECL_HEADERS],
+[
+ AC_REQUIRE([AC_HEADER_STDC])
+ AC_CHECK_HEADERS(grp.h memory.h pwd.h string.h strings.h stdlib.h \
+ unistd.h sys/time.h utmp.h utmpx.h)
+])
diff --git a/macros/texinfo/contrib/texinfo-hu/texinfo/m4/codeset.m4 b/macros/texinfo/contrib/texinfo-hu/texinfo/m4/codeset.m4
new file mode 100644
index 0000000000..59535ebcff
--- /dev/null
+++ b/macros/texinfo/contrib/texinfo-hu/texinfo/m4/codeset.m4
@@ -0,0 +1,23 @@
+# codeset.m4 serial AM1 (gettext-0.10.40)
+dnl Copyright (C) 2000-2002 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 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);],
+ 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/macros/texinfo/contrib/texinfo-hu/texinfo/m4/gettext.m4 b/macros/texinfo/contrib/texinfo-hu/texinfo/m4/gettext.m4
new file mode 100644
index 0000000000..a9225d3771
--- /dev/null
+++ b/macros/texinfo/contrib/texinfo-hu/texinfo/m4/gettext.m4
@@ -0,0 +1,487 @@
+# gettext.m4 serial 29
+dnl Copyright (C) 1995-2003 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
+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.
+
+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], [no], [yes]))
+ define(gt_libtool_suffix_prefix, ifelse([$1], [use-libtool], [l], []))
+
+ 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 test "$gt_cv_func_gnugettext_libc" != "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 Set USE_NLS.
+ AM_NLS
+
+ ifelse(gt_included_intl, yes, [
+ BUILD_INCLUDED_LIBINTL=no
+ USE_INCLUDED_LIBINTL=no
+ ])
+ LIBINTL=
+ LTLIBINTL=
+ POSUB=
+
+ 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.
+
+ dnl Add a version number to the cache macros.
+ define([gt_api_version], ifelse([$2], [need-formatstring-macros], 3, ifelse([$2], [need-ngettext], 2, 1)))
+ define([gt_cv_func_gnugettext_libc], [gt_cv_func_gnugettext]gt_api_version[_libc])
+ define([gt_cv_func_gnugettext_libintl], [gt_cv_func_gnugettext]gt_api_version[_libintl])
+
+ AC_CACHE_CHECK([for GNU gettext in libc], gt_cv_func_gnugettext_libc,
+ [AC_TRY_LINK([#include <libintl.h>
+]ifelse([$2], [need-formatstring-macros],
+[#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
+], [])[extern int _nl_msg_cat_cntr;
+extern int *_nl_domain_bindings;],
+ [bindtextdomain ("", "");
+return (int) gettext ("")]ifelse([$2], [need-ngettext], [ + (int) ngettext ("", "", 0)], [])[ + _nl_msg_cat_cntr + *_nl_domain_bindings],
+ gt_cv_func_gnugettext_libc=yes,
+ gt_cv_func_gnugettext_libc=no)])
+
+ if test "$gt_cv_func_gnugettext_libc" != "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_cv_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>
+]ifelse([$2], [need-formatstring-macros],
+[#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
+], [])[extern int _nl_msg_cat_cntr;
+extern
+#ifdef __cplusplus
+"C"
+#endif
+const char *_nl_expand_alias ();],
+ [bindtextdomain ("", "");
+return (int) gettext ("")]ifelse([$2], [need-ngettext], [ + (int) ngettext ("", "", 0)], [])[ + _nl_msg_cat_cntr + *_nl_expand_alias (0)],
+ gt_cv_func_gnugettext_libintl=yes,
+ gt_cv_func_gnugettext_libintl=no)
+ dnl Now see whether libintl exists and depends on libiconv.
+ if test "$gt_cv_func_gnugettext_libintl" != yes && test -n "$LIBICONV"; then
+ LIBS="$LIBS $LIBICONV"
+ AC_TRY_LINK([#include <libintl.h>
+]ifelse([$2], [need-formatstring-macros],
+[#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
+], [])[extern int _nl_msg_cat_cntr;
+extern
+#ifdef __cplusplus
+"C"
+#endif
+const char *_nl_expand_alias ();],
+ [bindtextdomain ("", "");
+return (int) gettext ("")]ifelse([$2], [need-ngettext], [ + (int) ngettext ("", "", 0)], [])[ + _nl_msg_cat_cntr + *_nl_expand_alias (0)],
+ [LIBINTL="$LIBINTL $LIBICONV"
+ LTLIBINTL="$LTLIBINTL $LTLIBICONV"
+ gt_cv_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 test "$gt_cv_func_gnugettext_libc" = "yes" \
+ || { test "$gt_cv_func_gnugettext_libintl" = "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"
+ LTLIBINTL="ifelse([$3],[],\${top_builddir}/intl,[$3])/libintl.[]gt_libtool_suffix_prefix[]a $LTLIBICONV"
+ LIBS=`echo " $LIBS " | sed -e 's/ -lintl / /' -e 's/^ //' -e 's/ $//'`
+ fi
+
+ 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 "$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 test "$gt_cv_func_gnugettext_libintl" = "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 test "$gt_cv_func_gnugettext_libintl" = "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.
+ 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 Checks for all prerequisites of the intl subdirectory,
+dnl except for INTL_LIBTOOL_SUFFIX_PREFIX (and possibly LIBTOOL), INTLOBJS,
+dnl USE_INCLUDED_LIBINTL, BUILD_INCLUDED_LIBINTL.
+AC_DEFUN([AM_INTL_SUBDIR],
+[
+ AC_REQUIRE([AC_PROG_INSTALL])dnl
+ AC_REQUIRE([AM_MKINSTALLDIRS])dnl
+ AC_REQUIRE([AC_PROG_CC])dnl
+ AC_REQUIRE([AC_CANONICAL_HOST])dnl
+ AC_REQUIRE([AC_PROG_RANLIB])dnl
+ AC_REQUIRE([AC_ISC_POSIX])dnl
+ AC_REQUIRE([AC_HEADER_STDC])dnl
+ AC_REQUIRE([AC_C_CONST])dnl
+ AC_REQUIRE([bh_C_SIGNED])dnl
+ AC_REQUIRE([AC_C_INLINE])dnl
+ AC_REQUIRE([AC_TYPE_OFF_T])dnl
+ AC_REQUIRE([AC_TYPE_SIZE_T])dnl
+ AC_REQUIRE([gl_AC_TYPE_LONG_LONG])dnl
+ AC_REQUIRE([gt_TYPE_LONGDOUBLE])dnl
+ AC_REQUIRE([gt_TYPE_WCHAR_T])dnl
+ AC_REQUIRE([gt_TYPE_WINT_T])dnl
+ AC_REQUIRE([gl_AC_HEADER_INTTYPES_H])
+ AC_REQUIRE([gl_AC_HEADER_STDINT_H])
+ AC_REQUIRE([gt_TYPE_INTMAX_T])
+ AC_REQUIRE([gt_PRINTF_POSIX])
+ AC_REQUIRE([AC_FUNC_ALLOCA])dnl
+ AC_REQUIRE([AC_FUNC_MMAP])dnl
+ AC_REQUIRE([gl_GLIBC21])dnl
+ AC_REQUIRE([gt_INTDIV0])dnl
+ AC_REQUIRE([gl_AC_TYPE_UINTMAX_T])dnl
+ AC_REQUIRE([gt_HEADER_INTTYPES_H])dnl
+ AC_REQUIRE([gt_INTTYPES_PRI])dnl
+ AC_REQUIRE([gl_XSIZE])dnl
+
+ AC_CHECK_TYPE([ptrdiff_t], ,
+ [AC_DEFINE([ptrdiff_t], [long],
+ [Define as the type of the result of subtracting two pointers, if the system doesn't define it.])
+ ])
+ AC_CHECK_HEADERS([argz.h limits.h locale.h nl_types.h malloc.h stddef.h \
+stdlib.h string.h unistd.h sys/param.h])
+ AC_CHECK_FUNCS([asprintf fwprintf getcwd getegid geteuid getgid getuid \
+mempcpy munmap putenv setenv setlocale snprintf stpcpy strcasecmp strdup \
+strtoul tsearch wcslen __argz_count __argz_stringify __argz_next \
+__fsetlocking])
+
+ dnl Use the _snprintf function only if it is declared (because on NetBSD it
+ dnl is defined as a weak alias of snprintf; we prefer to use the latter).
+ gt_CHECK_DECL(_snprintf, [#include <stdio.h>])
+ gt_CHECK_DECL(_snwprintf, [#include <stdio.h>])
+
+ dnl Use the *_unlocked functions only if they are declared.
+ dnl (because some of them were defined without being declared in Solaris
+ dnl 2.5.1 but were removed in Solaris 2.6, whereas we want binaries built
+ dnl on Solaris 2.5.1 to run on Solaris 2.6).
+ dnl Don't use AC_CHECK_DECLS because it isn't supported in autoconf-2.13.
+ gt_CHECK_DECL(feof_unlocked, [#include <stdio.h>])
+ gt_CHECK_DECL(fgets_unlocked, [#include <stdio.h>])
+ gt_CHECK_DECL(getc_unlocked, [#include <stdio.h>])
+
+ case $gt_cv_func_printf_posix in
+ *yes) HAVE_POSIX_PRINTF=1 ;;
+ *) HAVE_POSIX_PRINTF=0 ;;
+ esac
+ AC_SUBST([HAVE_POSIX_PRINTF])
+ if test "$ac_cv_func_asprintf" = yes; then
+ HAVE_ASPRINTF=1
+ else
+ HAVE_ASPRINTF=0
+ fi
+ AC_SUBST([HAVE_ASPRINTF])
+ if test "$ac_cv_func_snprintf" = yes; then
+ HAVE_SNPRINTF=1
+ else
+ HAVE_SNPRINTF=0
+ fi
+ AC_SUBST([HAVE_SNPRINTF])
+ if test "$ac_cv_func_wprintf" = yes; then
+ HAVE_WPRINTF=1
+ else
+ HAVE_WPRINTF=0
+ fi
+ AC_SUBST([HAVE_WPRINTF])
+
+ AM_ICONV
+ AM_LANGINFO_CODESET
+ if test $ac_cv_header_locale_h = yes; then
+ AM_LC_MESSAGES
+ fi
+
+ dnl intl/plural.c is generated from intl/plural.y. It requires bison,
+ dnl because plural.y uses bison specific features. It requires at least
+ dnl bison-1.26 because earlier versions generate a plural.c that doesn't
+ dnl compile.
+ dnl bison is only needed for the maintainer (who touches plural.y). But in
+ dnl order to avoid separate Makefiles or --enable-maintainer-mode, we put
+ dnl the rule in general Makefile. Now, some people carelessly touch the
+ dnl files or have a broken "make" program, hence the plural.c rule will
+ dnl sometimes fire. To avoid an error, defines BISON to ":" if it is not
+ dnl present or too old.
+ AC_CHECK_PROGS([INTLBISON], [bison])
+ if test -z "$INTLBISON"; then
+ ac_verc_fail=yes
+ else
+ dnl Found it, now check the version.
+ AC_MSG_CHECKING([version of bison])
+changequote(<<,>>)dnl
+ ac_prog_version=`$INTLBISON --version 2>&1 | sed -n 's/^.*GNU Bison.* \([0-9]*\.[0-9.]*\).*$/\1/p'`
+ case $ac_prog_version in
+ '') ac_prog_version="v. ?.??, bad"; ac_verc_fail=yes;;
+ 1.2[6-9]* | 1.[3-9][0-9]* | [2-9].*)
+changequote([,])dnl
+ ac_prog_version="$ac_prog_version, ok"; ac_verc_fail=no;;
+ *) ac_prog_version="$ac_prog_version, bad"; ac_verc_fail=yes;;
+ esac
+ AC_MSG_RESULT([$ac_prog_version])
+ fi
+ if test $ac_verc_fail = yes; then
+ INTLBISON=:
+ fi
+])
+
+
+dnl gt_CHECK_DECL(FUNC, INCLUDES)
+dnl Check whether a function is declared.
+AC_DEFUN([gt_CHECK_DECL],
+[
+ AC_CACHE_CHECK([whether $1 is declared], ac_cv_have_decl_$1,
+ [AC_TRY_COMPILE([$2], [
+#ifndef $1
+ char *p = (char *) $1;
+#endif
+], ac_cv_have_decl_$1=yes, ac_cv_have_decl_$1=no)])
+ if test $ac_cv_have_decl_$1 = yes; then
+ gt_value=1
+ else
+ gt_value=0
+ fi
+ AC_DEFINE_UNQUOTED([HAVE_DECL_]translit($1, [a-z], [A-Z]), [$gt_value],
+ [Define to 1 if you have the declaration of `$1', and to 0 if you don't.])
+])
+
+
+dnl Usage: AM_GNU_GETTEXT_VERSION([gettext-version])
+AC_DEFUN([AM_GNU_GETTEXT_VERSION], [])
diff --git a/macros/texinfo/contrib/texinfo-hu/texinfo/m4/glibc21.m4 b/macros/texinfo/contrib/texinfo-hu/texinfo/m4/glibc21.m4
new file mode 100644
index 0000000000..32ca2242e0
--- /dev/null
+++ b/macros/texinfo/contrib/texinfo-hu/texinfo/m4/glibc21.m4
@@ -0,0 +1,32 @@
+# glibc21.m4 serial 3
+dnl Copyright (C) 2000-2002, 2004 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.
+
+# 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/macros/texinfo/contrib/texinfo-hu/texinfo/m4/iconv.m4 b/macros/texinfo/contrib/texinfo-hu/texinfo/m4/iconv.m4
new file mode 100644
index 0000000000..c5f3579827
--- /dev/null
+++ b/macros/texinfo/contrib/texinfo-hu/texinfo/m4/iconv.m4
@@ -0,0 +1,103 @@
+# iconv.m4 serial AM4 (gettext-0.11.3)
+dnl Copyright (C) 2000-2002 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 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).
+
+ 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_DEFINE(HAVE_ICONV, 1, [Define if you have the iconv() function.])
+ 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/macros/texinfo/contrib/texinfo-hu/texinfo/m4/intdiv0.m4 b/macros/texinfo/contrib/texinfo-hu/texinfo/m4/intdiv0.m4
new file mode 100644
index 0000000000..55dddcf1c2
--- /dev/null
+++ b/macros/texinfo/contrib/texinfo-hu/texinfo/m4/intdiv0.m4
@@ -0,0 +1,72 @@
+# intdiv0.m4 serial 1 (gettext-0.11.3)
+dnl Copyright (C) 2002 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 From Bruno Haible.
+
+AC_DEFUN([gt_INTDIV0],
+[
+ AC_REQUIRE([AC_PROG_CC])dnl
+ AC_REQUIRE([AC_CANONICAL_HOST])dnl
+
+ AC_CACHE_CHECK([whether integer division by zero raises SIGFPE],
+ gt_cv_int_divbyzero_sigfpe,
+ [
+ AC_TRY_RUN([
+#include <stdlib.h>
+#include <signal.h>
+
+static void
+#ifdef __cplusplus
+sigfpe_handler (int sig)
+#else
+sigfpe_handler (sig) int sig;
+#endif
+{
+ /* Exit with code 0 if SIGFPE, with code 1 if any other signal. */
+ exit (sig != SIGFPE);
+}
+
+int x = 1;
+int y = 0;
+int z;
+int nan;
+
+int main ()
+{
+ signal (SIGFPE, sigfpe_handler);
+/* IRIX and AIX (when "xlc -qcheck" is used) yield signal SIGTRAP. */
+#if (defined (__sgi) || defined (_AIX)) && defined (SIGTRAP)
+ signal (SIGTRAP, sigfpe_handler);
+#endif
+/* Linux/SPARC yields signal SIGILL. */
+#if defined (__sparc__) && defined (__linux__)
+ signal (SIGILL, sigfpe_handler);
+#endif
+
+ z = x / y;
+ nan = y / y;
+ exit (1);
+}
+], gt_cv_int_divbyzero_sigfpe=yes, gt_cv_int_divbyzero_sigfpe=no,
+ [
+ # Guess based on the CPU.
+ case "$host_cpu" in
+ alpha* | i[34567]86 | m68k | s390*)
+ gt_cv_int_divbyzero_sigfpe="guessing yes";;
+ *)
+ gt_cv_int_divbyzero_sigfpe="guessing no";;
+ esac
+ ])
+ ])
+ case "$gt_cv_int_divbyzero_sigfpe" in
+ *yes) value=1;;
+ *) value=0;;
+ esac
+ AC_DEFINE_UNQUOTED(INTDIV0_RAISES_SIGFPE, $value,
+ [Define if integer division by zero raises signal SIGFPE.])
+])
diff --git a/macros/texinfo/contrib/texinfo-hu/texinfo/m4/intmax.m4 b/macros/texinfo/contrib/texinfo-hu/texinfo/m4/intmax.m4
new file mode 100644
index 0000000000..80f6526c6d
--- /dev/null
+++ b/macros/texinfo/contrib/texinfo-hu/texinfo/m4/intmax.m4
@@ -0,0 +1,32 @@
+# intmax.m4 serial 2
+dnl Copyright (C) 2002-2004 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 From Bruno Haible.
+dnl Test whether the system has the 'intmax_t' type, but don't attempt to
+dnl find a replacement if it is lacking.
+
+AC_DEFUN([gt_TYPE_INTMAX_T],
+[
+ AC_REQUIRE([gl_AC_HEADER_INTTYPES_H])
+ AC_REQUIRE([gl_AC_HEADER_STDINT_H])
+ AC_CACHE_CHECK(for intmax_t, gt_cv_c_intmax_t,
+ [AC_TRY_COMPILE([
+#include <stddef.h>
+#include <stdlib.h>
+#if HAVE_STDINT_H_WITH_UINTMAX
+#include <stdint.h>
+#endif
+#if HAVE_INTTYPES_H_WITH_UINTMAX
+#include <inttypes.h>
+#endif
+], [intmax_t x = -1;], gt_cv_c_intmax_t=yes, gt_cv_c_intmax_t=no)])
+ if test $gt_cv_c_intmax_t = yes; then
+ AC_DEFINE(HAVE_INTMAX_T, 1,
+ [Define if you have the 'intmax_t' type in <stdint.h> or <inttypes.h>.])
+ fi
+])
diff --git a/macros/texinfo/contrib/texinfo-hu/texinfo/m4/inttypes-pri.m4 b/macros/texinfo/contrib/texinfo-hu/texinfo/m4/inttypes-pri.m4
new file mode 100644
index 0000000000..fd007c3128
--- /dev/null
+++ b/macros/texinfo/contrib/texinfo-hu/texinfo/m4/inttypes-pri.m4
@@ -0,0 +1,32 @@
+# inttypes-pri.m4 serial 1 (gettext-0.11.4)
+dnl Copyright (C) 1997-2002 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 From Bruno Haible.
+
+# Define PRI_MACROS_BROKEN if <inttypes.h> exists and defines the PRI*
+# macros to non-string values. This is the case on AIX 4.3.3.
+
+AC_DEFUN([gt_INTTYPES_PRI],
+[
+ AC_REQUIRE([gt_HEADER_INTTYPES_H])
+ if test $gt_cv_header_inttypes_h = yes; then
+ AC_CACHE_CHECK([whether the inttypes.h PRIxNN macros are broken],
+ gt_cv_inttypes_pri_broken,
+ [
+ AC_TRY_COMPILE([#include <inttypes.h>
+#ifdef PRId32
+char *p = PRId32;
+#endif
+], [], gt_cv_inttypes_pri_broken=no, gt_cv_inttypes_pri_broken=yes)
+ ])
+ fi
+ if test "$gt_cv_inttypes_pri_broken" = yes; then
+ AC_DEFINE_UNQUOTED(PRI_MACROS_BROKEN, 1,
+ [Define if <inttypes.h> exists and defines unusable PRI* macros.])
+ fi
+])
diff --git a/macros/texinfo/contrib/texinfo-hu/texinfo/m4/inttypes.m4 b/macros/texinfo/contrib/texinfo-hu/texinfo/m4/inttypes.m4
new file mode 100644
index 0000000000..ab370ffe00
--- /dev/null
+++ b/macros/texinfo/contrib/texinfo-hu/texinfo/m4/inttypes.m4
@@ -0,0 +1,27 @@
+# inttypes.m4 serial 1 (gettext-0.11.4)
+dnl Copyright (C) 1997-2002 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 From Paul Eggert.
+
+# Define HAVE_INTTYPES_H if <inttypes.h> exists and doesn't clash with
+# <sys/types.h>.
+
+AC_DEFUN([gt_HEADER_INTTYPES_H],
+[
+ AC_CACHE_CHECK([for inttypes.h], gt_cv_header_inttypes_h,
+ [
+ AC_TRY_COMPILE(
+ [#include <sys/types.h>
+#include <inttypes.h>],
+ [], gt_cv_header_inttypes_h=yes, gt_cv_header_inttypes_h=no)
+ ])
+ if test $gt_cv_header_inttypes_h = yes; then
+ AC_DEFINE_UNQUOTED(HAVE_INTTYPES_H, 1,
+ [Define if <inttypes.h> exists and doesn't clash with <sys/types.h>.])
+ fi
+])
diff --git a/macros/texinfo/contrib/texinfo-hu/texinfo/m4/inttypes_h.m4 b/macros/texinfo/contrib/texinfo-hu/texinfo/m4/inttypes_h.m4
new file mode 100644
index 0000000000..79bba8763e
--- /dev/null
+++ b/macros/texinfo/contrib/texinfo-hu/texinfo/m4/inttypes_h.m4
@@ -0,0 +1,28 @@
+# inttypes_h.m4 serial 6
+dnl Copyright (C) 1997-2004 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 From Paul Eggert.
+
+# Define HAVE_INTTYPES_H_WITH_UINTMAX if <inttypes.h> exists,
+# doesn't clash with <sys/types.h>, and declares uintmax_t.
+
+AC_DEFUN([gl_AC_HEADER_INTTYPES_H],
+[
+ AC_CACHE_CHECK([for inttypes.h], gl_cv_header_inttypes_h,
+ [AC_TRY_COMPILE(
+ [#include <sys/types.h>
+#include <inttypes.h>],
+ [uintmax_t i = (uintmax_t) -1;],
+ gl_cv_header_inttypes_h=yes,
+ gl_cv_header_inttypes_h=no)])
+ if test $gl_cv_header_inttypes_h = yes; then
+ AC_DEFINE_UNQUOTED(HAVE_INTTYPES_H_WITH_UINTMAX, 1,
+ [Define if <inttypes.h> exists, doesn't clash with <sys/types.h>,
+ and declares uintmax_t. ])
+ fi
+])
diff --git a/macros/texinfo/contrib/texinfo-hu/texinfo/m4/isc-posix.m4 b/macros/texinfo/contrib/texinfo-hu/texinfo/m4/isc-posix.m4
new file mode 100644
index 0000000000..1319dd1c70
--- /dev/null
+++ b/macros/texinfo/contrib/texinfo-hu/texinfo/m4/isc-posix.m4
@@ -0,0 +1,26 @@
+# isc-posix.m4 serial 2 (gettext-0.11.2)
+dnl Copyright (C) 1995-2002 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.
+
+# This file is not needed with autoconf-2.53 and newer. Remove it in 2005.
+
+# This test replaces the one in autoconf.
+# Currently this macro should have the same name as the autoconf macro
+# because gettext's gettext.m4 (distributed in the automake package)
+# still uses it. Otherwise, the use in gettext.m4 makes autoheader
+# give these diagnostics:
+# configure.in:556: AC_TRY_COMPILE was called before AC_ISC_POSIX
+# configure.in:556: AC_TRY_RUN was called before AC_ISC_POSIX
+
+undefine([AC_ISC_POSIX])
+
+AC_DEFUN([AC_ISC_POSIX],
+ [
+ dnl This test replaces the obsolescent AC_ISC_POSIX kludge.
+ AC_CHECK_LIB(cposix, strerror, [LIBS="$LIBS -lcposix"])
+ ]
+)
diff --git a/macros/texinfo/contrib/texinfo-hu/texinfo/m4/lcmessage.m4 b/macros/texinfo/contrib/texinfo-hu/texinfo/m4/lcmessage.m4
new file mode 100644
index 0000000000..ffd4008b82
--- /dev/null
+++ b/macros/texinfo/contrib/texinfo-hu/texinfo/m4/lcmessage.m4
@@ -0,0 +1,32 @@
+# lcmessage.m4 serial 3 (gettext-0.11.3)
+dnl Copyright (C) 1995-2002 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
+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.
+
+# Check whether LC_MESSAGES is available in <locale.h>.
+
+AC_DEFUN([AM_LC_MESSAGES],
+[
+ AC_CACHE_CHECK([for LC_MESSAGES], am_cv_val_LC_MESSAGES,
+ [AC_TRY_LINK([#include <locale.h>], [return LC_MESSAGES],
+ am_cv_val_LC_MESSAGES=yes, am_cv_val_LC_MESSAGES=no)])
+ if test $am_cv_val_LC_MESSAGES = yes; then
+ AC_DEFINE(HAVE_LC_MESSAGES, 1,
+ [Define if your <locale.h> file defines LC_MESSAGES.])
+ fi
+])
diff --git a/macros/texinfo/contrib/texinfo-hu/texinfo/m4/lib-ld.m4 b/macros/texinfo/contrib/texinfo-hu/texinfo/m4/lib-ld.m4
new file mode 100644
index 0000000000..38aeaec19f
--- /dev/null
+++ b/macros/texinfo/contrib/texinfo-hu/texinfo/m4/lib-ld.m4
@@ -0,0 +1,112 @@
+# lib-ld.m4 serial 3 (gettext-0.13)
+dnl Copyright (C) 1996-2003 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 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/macros/texinfo/contrib/texinfo-hu/texinfo/m4/lib-link.m4 b/macros/texinfo/contrib/texinfo-hu/texinfo/m4/lib-link.m4
new file mode 100644
index 0000000000..eeb200d266
--- /dev/null
+++ b/macros/texinfo/contrib/texinfo-hu/texinfo/m4/lib-link.m4
@@ -0,0 +1,551 @@
+# lib-link.m4 serial 4 (gettext-0.12)
+dnl Copyright (C) 2001-2003 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 From Bruno Haible.
+
+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.
+AC_DEFUN([AC_LIB_LINKFLAGS],
+[
+ AC_REQUIRE([AC_LIB_PREPARE_PREFIX])
+ AC_REQUIRE([AC_LIB_RPATH])
+ define([Name],[translit([$1],[./-], [___])])
+ define([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"
+ ])
+ LIB[]NAME="$ac_cv_lib[]Name[]_libs"
+ LTLIB[]NAME="$ac_cv_lib[]Name[]_ltlibs"
+ INC[]NAME="$ac_cv_lib[]Name[]_cppflags"
+ AC_LIB_APPENDTOVAR([CPPFLAGS], [$INC]NAME)
+ AC_SUBST([LIB]NAME)
+ AC_SUBST([LTLIB]NAME)
+ 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
+ undefine([Name])
+ undefine([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.
+AC_DEFUN([AC_LIB_HAVE_LINKFLAGS],
+[
+ AC_REQUIRE([AC_LIB_PREPARE_PREFIX])
+ AC_REQUIRE([AC_LIB_RPATH])
+ define([Name],[translit([$1],[./-], [___])])
+ define([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=
+ fi
+ AC_SUBST([HAVE_LIB]NAME)
+ AC_SUBST([LIB]NAME)
+ AC_SUBST([LTLIB]NAME)
+ undefine([Name])
+ undefine([NAME])
+])
+
+dnl Determine the platform dependent parameters needed to use rpath:
+dnl libext, shlibext, hardcode_libdir_flag_spec, hardcode_libdir_separator,
+dnl hardcode_direct, hardcode_minus_L.
+AC_DEFUN([AC_LIB_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"
+ libext="$acl_cv_libext"
+ shlibext="$acl_cv_shlibext"
+ hardcode_libdir_flag_spec="$acl_cv_hardcode_libdir_flag_spec"
+ hardcode_libdir_separator="$acl_cv_hardcode_libdir_separator"
+ hardcode_direct="$acl_cv_hardcode_direct"
+ 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_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.
+AC_DEFUN([AC_LIB_LINKFLAGS_BODY],
+[
+ define([NAME],[translit([$1],[abcdefghijklmnopqrstuvwxyz./-],
+ [ABCDEFGHIJKLMNOPQRSTUVWXYZ___])])
+ 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$1-prefix],
+[ --with-lib$1-prefix[=DIR] search for lib$1 in DIR/include and DIR/lib
+ --without-lib$1-prefix don't search for lib$1 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/lib"
+ 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=
+ 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=
+ if test $use_additional = yes; then
+ if test -n "$shlibext" && test -f "$additional_libdir/lib$name.$shlibext"; then
+ found_dir="$additional_libdir"
+ found_so="$additional_libdir/lib$name.$shlibext"
+ if test -f "$additional_libdir/lib$name.la"; then
+ found_la="$additional_libdir/lib$name.la"
+ fi
+ else
+ if test -f "$additional_libdir/lib$name.$libext"; then
+ found_dir="$additional_libdir"
+ found_a="$additional_libdir/lib$name.$libext"
+ if test -f "$additional_libdir/lib$name.la"; then
+ found_la="$additional_libdir/lib$name.la"
+ fi
+ 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//'`
+ if test -n "$shlibext" && test -f "$dir/lib$name.$shlibext"; then
+ found_dir="$dir"
+ found_so="$dir/lib$name.$shlibext"
+ if test -f "$dir/lib$name.la"; then
+ found_la="$dir/lib$name.la"
+ fi
+ else
+ if test -f "$dir/lib$name.$libext"; then
+ found_dir="$dir"
+ found_a="$dir/lib$name.$libext"
+ if test -f "$dir/lib$name.la"; then
+ found_la="$dir/lib$name.la"
+ fi
+ 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/lib"; 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 "$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 "$hardcode_libdir_flag_spec" && test "$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 "$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 $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
+ */lib | */lib/)
+ basedir=`echo "X$found_dir" | sed -e 's,^X,,' -e 's,/lib/*$,,'`
+ 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*) 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/lib"; then
+ haveit=
+ if test "X$additional_libdir" = "X/usr/local/lib"; then
+ if test -n "$GCC"; then
+ case $host_os in
+ linux*) 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 "$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:+$hardcode_libdir_separator}$found_dir"
+ done
+ dnl Note: hardcode_libdir_flag_spec uses $libdir and $wl.
+ acl_save_libdir="$libdir"
+ libdir="$alldirs"
+ eval flag=\"$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=\"$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
+])
+
+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
+])
diff --git a/macros/texinfo/contrib/texinfo-hu/texinfo/m4/lib-prefix.m4 b/macros/texinfo/contrib/texinfo-hu/texinfo/m4/lib-prefix.m4
new file mode 100644
index 0000000000..8aff5a9d20
--- /dev/null
+++ b/macros/texinfo/contrib/texinfo-hu/texinfo/m4/lib-prefix.m4
@@ -0,0 +1,155 @@
+# lib-prefix.m4 serial 3 (gettext-0.13)
+dnl Copyright (C) 2001-2003 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 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_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/lib"
+ 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*) 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/lib"; 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/lib"; 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"
+])
diff --git a/macros/texinfo/contrib/texinfo-hu/texinfo/m4/longdouble.m4 b/macros/texinfo/contrib/texinfo-hu/texinfo/m4/longdouble.m4
new file mode 100644
index 0000000000..1333d2f570
--- /dev/null
+++ b/macros/texinfo/contrib/texinfo-hu/texinfo/m4/longdouble.m4
@@ -0,0 +1,30 @@
+# longdouble.m4 serial 1 (gettext-0.12)
+dnl Copyright (C) 2002-2003 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 From Bruno Haible.
+dnl Test whether the compiler supports the 'long double' type.
+dnl Prerequisite: AC_PROG_CC
+
+AC_DEFUN([gt_TYPE_LONGDOUBLE],
+[
+ AC_CACHE_CHECK([for long double], gt_cv_c_long_double,
+ [if test "$GCC" = yes; then
+ gt_cv_c_long_double=yes
+ else
+ AC_TRY_COMPILE([
+ /* The Stardent Vistra knows sizeof(long double), but does not support it. */
+ long double foo = 0.0;
+ /* On Ultrix 4.3 cc, long double is 4 and double is 8. */
+ int array [2*(sizeof(long double) >= sizeof(double)) - 1];
+ ], ,
+ gt_cv_c_long_double=yes, gt_cv_c_long_double=no)
+ fi])
+ if test $gt_cv_c_long_double = yes; then
+ AC_DEFINE(HAVE_LONG_DOUBLE, 1, [Define if you have the 'long double' type.])
+ fi
+])
diff --git a/macros/texinfo/contrib/texinfo-hu/texinfo/m4/longlong.m4 b/macros/texinfo/contrib/texinfo-hu/texinfo/m4/longlong.m4
new file mode 100644
index 0000000000..028422b612
--- /dev/null
+++ b/macros/texinfo/contrib/texinfo-hu/texinfo/m4/longlong.m4
@@ -0,0 +1,25 @@
+# longlong.m4 serial 5
+dnl Copyright (C) 1999-2004 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 From Paul Eggert.
+
+# Define HAVE_LONG_LONG if 'long long' works.
+
+AC_DEFUN([gl_AC_TYPE_LONG_LONG],
+[
+ AC_CACHE_CHECK([for long long], ac_cv_type_long_long,
+ [AC_TRY_LINK([long long ll = 1LL; int i = 63;],
+ [long long llmax = (long long) -1;
+ return ll << i | ll >> i | llmax / ll | llmax % ll;],
+ ac_cv_type_long_long=yes,
+ ac_cv_type_long_long=no)])
+ if test $ac_cv_type_long_long = yes; then
+ AC_DEFINE(HAVE_LONG_LONG, 1,
+ [Define if you have the 'long long' type.])
+ fi
+])
diff --git a/macros/texinfo/contrib/texinfo-hu/texinfo/m4/mkstemp.m4 b/macros/texinfo/contrib/texinfo-hu/texinfo/m4/mkstemp.m4
new file mode 100644
index 0000000000..82e1ce5853
--- /dev/null
+++ b/macros/texinfo/contrib/texinfo-hu/texinfo/m4/mkstemp.m4
@@ -0,0 +1,66 @@
+#serial 6
+
+# 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],
+[dnl
+ AC_REPLACE_FUNCS(mkstemp)
+ if test $ac_cv_func_mkstemp = no; then
+ gl_cv_func_mkstemp_limitations=yes
+ else
+ AC_CACHE_CHECK([for mkstemp limitations],
+ gl_cv_func_mkstemp_limitations,
+ [
+ AC_TRY_RUN([
+# include <stdlib.h>
+ int main ()
+ {
+ int i;
+ for (i = 0; i < 70; i++)
+ {
+ char template[] = "conftestXXXXXX";
+ int fd = mkstemp (template);
+ if (fd == -1)
+ exit (1);
+ close (fd);
+ }
+ exit (0);
+ }
+ ],
+ gl_cv_func_mkstemp_limitations=no,
+ gl_cv_func_mkstemp_limitations=yes,
+ gl_cv_func_mkstemp_limitations=yes
+ )
+ ]
+ )
+ fi
+
+ if test $gl_cv_func_mkstemp_limitations = yes; then
+ AC_LIBOBJ(mkstemp)
+ AC_LIBOBJ(tempname)
+ AC_DEFINE(mkstemp, rpl_mkstemp,
+ [Define to rpl_mkstemp if the replacement function should be used.])
+ gl_PREREQ_MKSTEMP
+ gl_PREREQ_TEMPNAME
+ fi
+])
+
+# Prerequisites of lib/mkstemp.c.
+AC_DEFUN([gl_PREREQ_MKSTEMP],
+[
+])
+
+# Prerequisites of lib/tempname.c.
+AC_DEFUN([gl_PREREQ_TEMPNAME],
+[
+ AC_REQUIRE([AC_HEADER_STAT])
+ AC_CHECK_HEADERS_ONCE(fcntl.h sys/time.h unistd.h)
+ AC_CHECK_HEADERS(stdint.h)
+ AC_CHECK_FUNCS(__secure_getenv gettimeofday)
+ AC_CHECK_DECLS_ONCE(getenv)
+ AC_REQUIRE([gl_AC_TYPE_UINTMAX_T])
+])
diff --git a/macros/texinfo/contrib/texinfo-hu/texinfo/m4/nls.m4 b/macros/texinfo/contrib/texinfo-hu/texinfo/m4/nls.m4
new file mode 100644
index 0000000000..36bc49317c
--- /dev/null
+++ b/macros/texinfo/contrib/texinfo-hu/texinfo/m4/nls.m4
@@ -0,0 +1,49 @@
+# nls.m4 serial 1 (gettext-0.12)
+dnl Copyright (C) 1995-2003 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
+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_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)
+])
+
+AC_DEFUN([AM_MKINSTALLDIRS],
+[
+ dnl If the AC_CONFIG_AUX_DIR macro for autoconf is used we possibly
+ dnl find the mkinstalldirs script in another subdir but $(top_srcdir).
+ dnl Try to locate it.
+ MKINSTALLDIRS=
+ if test -n "$ac_aux_dir"; then
+ case "$ac_aux_dir" in
+ /*) MKINSTALLDIRS="$ac_aux_dir/mkinstalldirs" ;;
+ *) MKINSTALLDIRS="\$(top_builddir)/$ac_aux_dir/mkinstalldirs" ;;
+ esac
+ fi
+ if test -z "$MKINSTALLDIRS"; then
+ MKINSTALLDIRS="\$(top_srcdir)/mkinstalldirs"
+ fi
+ AC_SUBST(MKINSTALLDIRS)
+])
diff --git a/macros/texinfo/contrib/texinfo-hu/texinfo/m4/onceonly.m4 b/macros/texinfo/contrib/texinfo-hu/texinfo/m4/onceonly.m4
new file mode 100644
index 0000000000..f6fec37cbf
--- /dev/null
+++ b/macros/texinfo/contrib/texinfo-hu/texinfo/m4/onceonly.m4
@@ -0,0 +1,63 @@
+# onceonly.m4 serial 3
+dnl Copyright (C) 2002, 2003 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_HEADER_STDC]) like AC_HEADER_STDC
+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 Autoconf version 2.57 or newer is recommended.
+AC_PREREQ(2.54)
+
+# AC_CHECK_HEADERS_ONCE(HEADER1 HEADER2 ...) is a once-only variant of
+# AC_CHECK_HEADERS(HEADER1 HEADER2 ...).
+AC_DEFUN([AC_CHECK_HEADERS_ONCE], [
+ :
+ AC_FOREACH([gl_HEADER_NAME], [$1], [
+ AC_DEFUN([gl_CHECK_HEADER_]m4_quote(translit(defn([gl_HEADER_NAME]),
+ [-./], [___])), [
+ AC_CHECK_HEADERS(gl_HEADER_NAME)
+ ])
+ AC_REQUIRE([gl_CHECK_HEADER_]m4_quote(translit(gl_HEADER_NAME,
+ [-./], [___])))
+ ])
+])
+
+# AC_CHECK_FUNCS_ONCE(FUNC1 FUNC2 ...) is a once-only variant of
+# AC_CHECK_FUNCS(FUNC1 FUNC2 ...).
+AC_DEFUN([AC_CHECK_FUNCS_ONCE], [
+ :
+ AC_FOREACH([gl_FUNC_NAME], [$1], [
+ AC_DEFUN([gl_CHECK_FUNC_]defn([gl_FUNC_NAME]), [
+ AC_CHECK_FUNCS(defn([gl_FUNC_NAME]))
+ ])
+ AC_REQUIRE([gl_CHECK_FUNC_]defn([gl_FUNC_NAME]))
+ ])
+])
+
+# AC_CHECK_DECLS_ONCE(DECL1 DECL2 ...) is a once-only variant of
+# AC_CHECK_DECLS(DECL1, DECL2, ...).
+AC_DEFUN([AC_CHECK_DECLS_ONCE], [
+ :
+ AC_FOREACH([gl_DECL_NAME], [$1], [
+ AC_DEFUN([gl_CHECK_DECL_]defn([gl_DECL_NAME]), [
+ AC_CHECK_DECLS(defn([gl_DECL_NAME]))
+ ])
+ AC_REQUIRE([gl_CHECK_DECL_]defn([gl_DECL_NAME]))
+ ])
+])
diff --git a/macros/texinfo/contrib/texinfo-hu/texinfo/m4/onceonly_2_57.m4 b/macros/texinfo/contrib/texinfo-hu/texinfo/m4/onceonly_2_57.m4
new file mode 100644
index 0000000000..9fc510e06e
--- /dev/null
+++ b/macros/texinfo/contrib/texinfo-hu/texinfo/m4/onceonly_2_57.m4
@@ -0,0 +1,86 @@
+# onceonly_2_57.m4 serial 3
+dnl Copyright (C) 2002-2003 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_HEADER_STDC]) like AC_HEADER_STDC
+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 This is like onceonly.m4, except that it uses diversions to named sections
+dnl DEFAULTS and INIT_PREPARE in order to check all requested headers at once,
+dnl thus reducing the size of 'configure'. Works with autoconf-2.57. The
+dnl size reduction is ca. 9%.
+
+dnl Autoconf version 2.57 or newer is recommended.
+AC_PREREQ(2.54)
+
+# AC_CHECK_HEADERS_ONCE(HEADER1 HEADER2 ...) is a once-only variant of
+# AC_CHECK_HEADERS(HEADER1 HEADER2 ...).
+AC_DEFUN([AC_CHECK_HEADERS_ONCE], [
+ :
+ AC_FOREACH([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], [
+ :
+ AC_FOREACH([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], [
+ :
+ AC_FOREACH([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/macros/texinfo/contrib/texinfo-hu/texinfo/m4/po.m4 b/macros/texinfo/contrib/texinfo-hu/texinfo/m4/po.m4
new file mode 100644
index 0000000000..e161998818
--- /dev/null
+++ b/macros/texinfo/contrib/texinfo-hu/texinfo/m4/po.m4
@@ -0,0 +1,426 @@
+# po.m4 serial 3 (gettext-0.14)
+dnl Copyright (C) 1995-2003 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
+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.
+
+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_MKINSTALLDIRS])dnl
+ AC_REQUIRE([AM_NLS])dnl
+
+ 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 >/dev/null 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 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 >/dev/null 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 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 >/dev/null 2>&1], :)
+
+ dnl This could go away some day; the PATH_PROG_WITH_TEST already does it.
+ dnl Test whether we really found GNU msgfmt.
+ if test "$GMSGFMT" != ":"; then
+ dnl If it is no GNU msgfmt we define it as : so that the
+ dnl Makefiles still can work.
+ if $GMSGFMT --statistics /dev/null >/dev/null 2>&1 &&
+ (if $GMSGFMT --statistics /dev/null 2>&1 >/dev/null | grep usage >/dev/null; then exit 1; else exit 0; fi); then
+ : ;
+ else
+ GMSGFMT=`echo "$GMSGFMT" | sed -e 's,^.*/,,'`
+ AC_MSG_RESULT(
+ [found $GMSGFMT program is not GNU msgfmt; ignore it])
+ GMSGFMT=":"
+ fi
+ fi
+
+ dnl This could go away some day; the PATH_PROG_WITH_TEST already does it.
+ dnl Test whether we really found GNU xgettext.
+ if test "$XGETTEXT" != ":"; then
+ dnl If it is no GNU xgettext we define it as : so that the
+ dnl Makefiles still can work.
+ if $XGETTEXT --omit-header --copyright-holder= --msgid-bugs-address= /dev/null >/dev/null 2>&1 &&
+ (if $XGETTEXT --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
+ : ;
+ else
+ AC_MSG_RESULT(
+ [found xgettext program is not GNU xgettext; ignore it])
+ XGETTEXT=":"
+ fi
+ dnl Remove leftover from FreeBSD xgettext call.
+ rm -f messages.po
+ fi
+
+ AC_OUTPUT_COMMANDS([
+ 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
+ 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" "$ac_given_srcdir/$ac_dir/LINGUAS"`
+ # Hide the ALL_LINGUAS assigment from automake.
+ eval 'ALL_LINGUAS''=$ALL_LINGUAS_'
+ POMAKEFILEDEPS="$POMAKEFILEDEPS LINGUAS"
+ else
+ # The set of available languages was given in configure.in.
+ 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.
+ 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" "$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.
+ 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'`
+ 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'`
+ 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'`
+ 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"
+])
diff --git a/macros/texinfo/contrib/texinfo-hu/texinfo/m4/prereq.m4 b/macros/texinfo/contrib/texinfo-hu/texinfo/m4/prereq.m4
new file mode 100644
index 0000000000..e2588a29ed
--- /dev/null
+++ b/macros/texinfo/contrib/texinfo-hu/texinfo/m4/prereq.m4
@@ -0,0 +1,129 @@
+#serial 40
+
+dnl We use gl_ for non Autoconf macros.
+m4_pattern_forbid([^gl_[ABCDEFGHIJKLMNOPQRSTUVXYZ]])dnl
+
+# These are the prerequisite macros for files in the lib/
+# directory of the coreutils package.
+
+AC_DEFUN([gl_PREREQ],
+[
+ # We don't yet use c-stack.c.
+ # AC_REQUIRE([gl_C_STACK])
+
+ AC_REQUIRE([AM_FUNC_GETLINE])
+ AC_REQUIRE([AM_STDBOOL_H])
+ AC_REQUIRE([gl_FUNC_MKDIR_TRAILING_SLASH])
+ AC_REQUIRE([gl_FUNC_MKSTEMP])
+ AC_REQUIRE([gl_ALLOCSA])
+ AC_REQUIRE([gl_BACKUPFILE])
+ AC_REQUIRE([gl_CANON_HOST])
+ AC_REQUIRE([gl_CLOEXEC])
+ AC_REQUIRE([gl_CLOSEOUT])
+ AC_REQUIRE([gl_DIRNAME])
+ AC_REQUIRE([gl_ERROR])
+ AC_REQUIRE([gl_EXCLUDE])
+ AC_REQUIRE([gl_EXITFAIL])
+ AC_REQUIRE([gl_FILEBLOCKS])
+ AC_REQUIRE([gl_FILEMODE])
+ AC_REQUIRE([gl_FILE_TYPE])
+ AC_REQUIRE([gl_FSUSAGE])
+ AC_REQUIRE([gl_FUNC_ALLOCA])
+ AC_REQUIRE([gl_FUNC_ATEXIT])
+ AC_REQUIRE([gl_FUNC_DUP2])
+ AC_REQUIRE([gl_FUNC_EUIDACCESS])
+ AC_REQUIRE([gl_FUNC_FNMATCH_GNU])
+ AC_REQUIRE([gl_FUNC_GETHOSTNAME])
+ AC_REQUIRE([AC_FUNC_GETLOADAVG])
+ AC_REQUIRE([gl_FUNC_GETPASS])
+ AC_REQUIRE([gl_FUNC_GETUSERSHELL])
+ AC_REQUIRE([gl_FUNC_MEMCHR])
+ AC_REQUIRE([gl_FUNC_MEMCPY])
+ AC_REQUIRE([gl_FUNC_MEMMOVE])
+ AC_REQUIRE([gl_FUNC_MEMRCHR])
+ AC_REQUIRE([gl_FUNC_MEMSET])
+ AC_REQUIRE([gl_FUNC_MKTIME])
+ AC_REQUIRE([gl_FUNC_READLINK])
+ AC_REQUIRE([gl_FUNC_RMDIR])
+ AC_REQUIRE([gl_FUNC_RPMATCH])
+ AC_REQUIRE([gl_FUNC_SIG2STR])
+ AC_REQUIRE([gl_FUNC_STPCPY])
+ AC_REQUIRE([gl_FUNC_STRCSPN])
+ AC_REQUIRE([gl_FUNC_STRDUP])
+ AC_REQUIRE([gl_FUNC_STRNDUP])
+ AC_REQUIRE([gl_FUNC_STRNLEN])
+ AC_REQUIRE([gl_FUNC_STRPBRK])
+ AC_REQUIRE([gl_FUNC_STRSTR])
+ AC_REQUIRE([gl_FUNC_STRTOD])
+ AC_REQUIRE([gl_FUNC_STRTOIMAX])
+ AC_REQUIRE([gl_FUNC_STRTOLL])
+ AC_REQUIRE([gl_FUNC_STRTOL])
+ AC_REQUIRE([gl_FUNC_STRTOULL])
+ AC_REQUIRE([gl_FUNC_STRTOUL])
+ AC_REQUIRE([gl_FUNC_STRTOUMAX])
+ AC_REQUIRE([gl_FUNC_STRVERSCMP])
+ AC_REQUIRE([gl_FUNC_VASNPRINTF])
+ AC_REQUIRE([gl_FUNC_VASPRINTF])
+ AC_REQUIRE([gl_GETDATE])
+ AC_REQUIRE([gl_GETNDELIM2])
+ AC_REQUIRE([gl_GETOPT])
+ AC_REQUIRE([gl_GETPAGESIZE])
+ AC_REQUIRE([gl_GETUGROUPS])
+ AC_REQUIRE([gl_HARD_LOCALE])
+ AC_REQUIRE([gl_HASH])
+ AC_REQUIRE([gl_HUMAN])
+ AC_REQUIRE([gl_IDCACHE])
+ AC_REQUIRE([gl_INTTOSTR])
+ AC_REQUIRE([gl_LONG_OPTIONS])
+ AC_REQUIRE([gl_MAKEPATH])
+ AC_REQUIRE([gl_MBSWIDTH])
+ AC_REQUIRE([gl_MD5])
+ AC_REQUIRE([gl_MEMCOLL])
+ AC_REQUIRE([gl_MODECHANGE])
+ AC_REQUIRE([gl_MOUNTLIST])
+ AC_REQUIRE([gl_OBSTACK])
+ AC_REQUIRE([gl_PATHMAX])
+ AC_REQUIRE([gl_PATH_CONCAT])
+ AC_REQUIRE([gl_PHYSMEM])
+ AC_REQUIRE([gl_POSIXTM])
+ AC_REQUIRE([gl_POSIXVER])
+ AC_REQUIRE([gl_QUOTEARG])
+ AC_REQUIRE([gl_QUOTE])
+ AC_REQUIRE([gl_READTOKENS])
+ AC_REQUIRE([gl_READUTMP])
+ AC_REQUIRE([gl_REGEX])
+ AC_REQUIRE([gl_SAFE_READ])
+ AC_REQUIRE([gl_SAFE_WRITE])
+ AC_REQUIRE([gl_SAME])
+ AC_REQUIRE([gl_SAVEDIR])
+ AC_REQUIRE([gl_SAVE_CWD])
+ AC_REQUIRE([gl_SETTIME])
+ AC_REQUIRE([gl_SHA])
+ AC_REQUIRE([gl_STDIO_SAFER])
+ AC_REQUIRE([gl_STRCASE])
+ AC_REQUIRE([gl_TIMESPEC])
+ AC_REQUIRE([gl_UNICODEIO])
+ AC_REQUIRE([gl_UNISTD_SAFER])
+ AC_REQUIRE([gl_USERSPEC])
+ AC_REQUIRE([gl_UTIMECMP])
+ AC_REQUIRE([gl_UTIMENS])
+ AC_REQUIRE([gl_XALLOC])
+ AC_REQUIRE([gl_XGETCWD])
+ AC_REQUIRE([gl_XREADLINK])
+ AC_REQUIRE([gl_XSTRTOD])
+ AC_REQUIRE([gl_XSTRTOL])
+ AC_REQUIRE([gl_YESNO])
+ AC_REQUIRE([gl_FUNC_GLIBC_UNLOCKED_IO])
+ AC_REQUIRE([gl_FUNC_GNU_STRFTIME])
+ AC_REQUIRE([gl_FUNC_LSTAT])
+ AC_REQUIRE([AC_FUNC_MALLOC])
+ AC_REQUIRE([gl_FUNC_MEMCMP])
+ AC_REQUIRE([gl_FUNC_NANOSLEEP])
+ AC_REQUIRE([gl_FUNC_PUTENV])
+ AC_REQUIRE([AC_FUNC_REALLOC])
+ AC_REQUIRE([gl_FUNC_STAT])
+ AC_REQUIRE([gl_FUNC_UTIME])
+ AC_REQUIRE([gl_XSTRTOIMAX])
+ AC_REQUIRE([gl_XSTRTOUMAX])
+ AC_REQUIRE([vb_FUNC_RENAME])
+])
diff --git a/macros/texinfo/contrib/texinfo-hu/texinfo/m4/printf-posix.m4 b/macros/texinfo/contrib/texinfo-hu/texinfo/m4/printf-posix.m4
new file mode 100644
index 0000000000..186ba6a6d1
--- /dev/null
+++ b/macros/texinfo/contrib/texinfo-hu/texinfo/m4/printf-posix.m4
@@ -0,0 +1,46 @@
+# printf-posix.m4 serial 2 (gettext-0.13.1)
+dnl Copyright (C) 2003 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 From Bruno Haible.
+dnl Test whether the printf() function supports POSIX/XSI format strings with
+dnl positions.
+
+AC_DEFUN([gt_PRINTF_POSIX],
+[
+ AC_REQUIRE([AC_PROG_CC])
+ AC_CACHE_CHECK([whether printf() supports POSIX/XSI format strings],
+ gt_cv_func_printf_posix,
+ [
+ AC_TRY_RUN([
+#include <stdio.h>
+#include <string.h>
+/* The string "%2$d %1$d", with dollar characters protected from the shell's
+ dollar expansion (possibly an autoconf bug). */
+static char format[] = { '%', '2', '$', 'd', ' ', '%', '1', '$', 'd', '\0' };
+static char buf[100];
+int main ()
+{
+ sprintf (buf, format, 33, 55);
+ return (strcmp (buf, "55 33") != 0);
+}], gt_cv_func_printf_posix=yes, gt_cv_func_printf_posix=no,
+ [
+ AC_EGREP_CPP(notposix, [
+#if defined __NetBSD__ || defined _MSC_VER || defined __MINGW32__ || defined __CYGWIN__
+ notposix
+#endif
+ ], gt_cv_func_printf_posix="guessing no",
+ gt_cv_func_printf_posix="guessing yes")
+ ])
+ ])
+ case $gt_cv_func_printf_posix in
+ *yes)
+ AC_DEFINE(HAVE_POSIX_PRINTF, 1,
+ [Define if your printf() function supports format strings with positions.])
+ ;;
+ esac
+])
diff --git a/macros/texinfo/contrib/texinfo-hu/texinfo/m4/progtest.m4 b/macros/texinfo/contrib/texinfo-hu/texinfo/m4/progtest.m4
new file mode 100644
index 0000000000..8fe527cece
--- /dev/null
+++ b/macros/texinfo/contrib/texinfo-hu/texinfo/m4/progtest.m4
@@ -0,0 +1,91 @@
+# progtest.m4 serial 3 (gettext-0.12)
+dnl Copyright (C) 1996-2003 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
+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.
+
+# 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
+ 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/macros/texinfo/contrib/texinfo-hu/texinfo/m4/signed.m4 b/macros/texinfo/contrib/texinfo-hu/texinfo/m4/signed.m4
new file mode 100644
index 0000000000..dc1f54f106
--- /dev/null
+++ b/macros/texinfo/contrib/texinfo-hu/texinfo/m4/signed.m4
@@ -0,0 +1,19 @@
+# signed.m4 serial 1 (gettext-0.10.40)
+dnl Copyright (C) 2001-2002 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 From Bruno Haible.
+
+AC_DEFUN([bh_C_SIGNED],
+[
+ AC_CACHE_CHECK([for signed], bh_cv_c_signed,
+ [AC_TRY_COMPILE(, [signed char x;], bh_cv_c_signed=yes, bh_cv_c_signed=no)])
+ if test $bh_cv_c_signed = no; then
+ AC_DEFINE(signed, ,
+ [Define to empty if the C compiler doesn't support this keyword.])
+ fi
+])
diff --git a/macros/texinfo/contrib/texinfo-hu/texinfo/m4/size_max.m4 b/macros/texinfo/contrib/texinfo-hu/texinfo/m4/size_max.m4
new file mode 100644
index 0000000000..5762fc333c
--- /dev/null
+++ b/macros/texinfo/contrib/texinfo-hu/texinfo/m4/size_max.m4
@@ -0,0 +1,61 @@
+# size_max.m4 serial 2
+dnl Copyright (C) 2003 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 From Bruno Haible.
+
+AC_DEFUN([gl_SIZE_MAX],
+[
+ AC_CHECK_HEADERS(stdint.h)
+ dnl First test whether the system already has SIZE_MAX.
+ AC_MSG_CHECKING([for SIZE_MAX])
+ result=
+ AC_EGREP_CPP([Found it], [
+#include <limits.h>
+#if HAVE_STDINT_H
+#include <stdint.h>
+#endif
+#ifdef SIZE_MAX
+Found it
+#endif
+], result=yes)
+ if test -z "$result"; then
+ dnl Define it ourselves. Here we assume that the type 'size_t' is not wider
+ dnl than the type 'unsigned long'.
+ dnl The _AC_COMPUTE_INT macro works up to LONG_MAX, since it uses 'expr',
+ dnl which is guaranteed to work from LONG_MIN to LONG_MAX.
+ _AC_COMPUTE_INT([~(size_t)0 / 10], res_hi,
+ [#include <stddef.h>], result=?)
+ _AC_COMPUTE_INT([~(size_t)0 % 10], res_lo,
+ [#include <stddef.h>], result=?)
+ _AC_COMPUTE_INT([sizeof (size_t) <= sizeof (unsigned int)], fits_in_uint,
+ [#include <stddef.h>], result=?)
+ if test "$fits_in_uint" = 1; then
+ dnl Even though SIZE_MAX fits in an unsigned int, it must be of type
+ dnl 'unsigned long' if the type 'size_t' is the same as 'unsigned long'.
+ AC_TRY_COMPILE([#include <stddef.h>
+ extern size_t foo;
+ extern unsigned long foo;
+ ], [], fits_in_uint=0)
+ fi
+ if test -z "$result"; then
+ if test "$fits_in_uint" = 1; then
+ result="$res_hi$res_lo"U
+ else
+ result="$res_hi$res_lo"UL
+ fi
+ else
+ dnl Shouldn't happen, but who knows...
+ result='~(size_t)0'
+ fi
+ fi
+ AC_MSG_RESULT([$result])
+ if test "$result" != yes; then
+ AC_DEFINE_UNQUOTED([SIZE_MAX], [$result],
+ [Define as the maximum value of type 'size_t', if the system doesn't define it.])
+ fi
+])
diff --git a/macros/texinfo/contrib/texinfo-hu/texinfo/m4/stdint_h.m4 b/macros/texinfo/contrib/texinfo-hu/texinfo/m4/stdint_h.m4
new file mode 100644
index 0000000000..063c4344e3
--- /dev/null
+++ b/macros/texinfo/contrib/texinfo-hu/texinfo/m4/stdint_h.m4
@@ -0,0 +1,28 @@
+# stdint_h.m4 serial 5
+dnl Copyright (C) 1997-2004 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 From Paul Eggert.
+
+# Define HAVE_STDINT_H_WITH_UINTMAX if <stdint.h> exists,
+# doesn't clash with <sys/types.h>, and declares uintmax_t.
+
+AC_DEFUN([gl_AC_HEADER_STDINT_H],
+[
+ AC_CACHE_CHECK([for stdint.h], gl_cv_header_stdint_h,
+ [AC_TRY_COMPILE(
+ [#include <sys/types.h>
+#include <stdint.h>],
+ [uintmax_t i = (uintmax_t) -1;],
+ gl_cv_header_stdint_h=yes,
+ gl_cv_header_stdint_h=no)])
+ if test $gl_cv_header_stdint_h = yes; then
+ AC_DEFINE_UNQUOTED(HAVE_STDINT_H_WITH_UINTMAX, 1,
+ [Define if <stdint.h> exists, doesn't clash with <sys/types.h>,
+ and declares uintmax_t. ])
+ fi
+])
diff --git a/macros/texinfo/contrib/texinfo-hu/texinfo/m4/strcase.m4 b/macros/texinfo/contrib/texinfo-hu/texinfo/m4/strcase.m4
new file mode 100644
index 0000000000..3fd25d0ce9
--- /dev/null
+++ b/macros/texinfo/contrib/texinfo-hu/texinfo/m4/strcase.m4
@@ -0,0 +1,39 @@
+# strcase.m4 serial 1
+dnl Copyright (C) 2002 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.
+
+AC_DEFUN([gl_STRCASE],
+[
+ gl_FUNC_STRCASECMP
+ gl_FUNC_STRNCASECMP
+])
+
+AC_DEFUN([gl_FUNC_STRCASECMP],
+[
+ AC_REPLACE_FUNCS(strcasecmp)
+ if test $ac_cv_func_strcasecmp = no; then
+ gl_PREREQ_STRCASECMP
+ fi
+])
+
+AC_DEFUN([gl_FUNC_STRNCASECMP],
+[
+ AC_REPLACE_FUNCS(strncasecmp)
+ if test $ac_cv_func_strncasecmp = no; then
+ gl_PREREQ_STRNCASECMP
+ fi
+])
+
+# Prerequisites of lib/strcasecmp.c.
+AC_DEFUN([gl_PREREQ_STRCASECMP], [
+ :
+])
+
+# Prerequisites of lib/strncasecmp.c.
+AC_DEFUN([gl_PREREQ_STRNCASECMP], [
+ :
+])
diff --git a/macros/texinfo/contrib/texinfo-hu/texinfo/m4/uintmax_t.m4 b/macros/texinfo/contrib/texinfo-hu/texinfo/m4/uintmax_t.m4
new file mode 100644
index 0000000000..a2bc218ce7
--- /dev/null
+++ b/macros/texinfo/contrib/texinfo-hu/texinfo/m4/uintmax_t.m4
@@ -0,0 +1,32 @@
+# uintmax_t.m4 serial 9
+dnl Copyright (C) 1997-2004 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 From Paul Eggert.
+
+AC_PREREQ(2.13)
+
+# Define uintmax_t to 'unsigned long' or 'unsigned long long'
+# if it is not already defined in <stdint.h> or <inttypes.h>.
+
+AC_DEFUN([gl_AC_TYPE_UINTMAX_T],
+[
+ AC_REQUIRE([gl_AC_HEADER_INTTYPES_H])
+ AC_REQUIRE([gl_AC_HEADER_STDINT_H])
+ if test $gl_cv_header_inttypes_h = no && test $gl_cv_header_stdint_h = no; then
+ AC_REQUIRE([gl_AC_TYPE_UNSIGNED_LONG_LONG])
+ test $ac_cv_type_unsigned_long_long = yes \
+ && ac_type='unsigned long long' \
+ || ac_type='unsigned long'
+ AC_DEFINE_UNQUOTED(uintmax_t, $ac_type,
+ [Define to unsigned long or unsigned long long
+ if <stdint.h> and <inttypes.h> don't define.])
+ else
+ AC_DEFINE(HAVE_UINTMAX_T, 1,
+ [Define if you have the 'uintmax_t' type in <stdint.h> or <inttypes.h>.])
+ fi
+])
diff --git a/macros/texinfo/contrib/texinfo-hu/texinfo/m4/ulonglong.m4 b/macros/texinfo/contrib/texinfo-hu/texinfo/m4/ulonglong.m4
new file mode 100644
index 0000000000..1123ccb837
--- /dev/null
+++ b/macros/texinfo/contrib/texinfo-hu/texinfo/m4/ulonglong.m4
@@ -0,0 +1,25 @@
+# ulonglong.m4 serial 4
+dnl Copyright (C) 1999-2004 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 From Paul Eggert.
+
+# Define HAVE_UNSIGNED_LONG_LONG if 'unsigned long long' works.
+
+AC_DEFUN([gl_AC_TYPE_UNSIGNED_LONG_LONG],
+[
+ AC_CACHE_CHECK([for unsigned long long], ac_cv_type_unsigned_long_long,
+ [AC_TRY_LINK([unsigned long long ull = 1ULL; int i = 63;],
+ [unsigned long long ullmax = (unsigned long long) -1;
+ return ull << i | ull >> i | ullmax / ull | ullmax % ull;],
+ ac_cv_type_unsigned_long_long=yes,
+ ac_cv_type_unsigned_long_long=no)])
+ if test $ac_cv_type_unsigned_long_long = yes; then
+ AC_DEFINE(HAVE_UNSIGNED_LONG_LONG, 1,
+ [Define if you have the 'unsigned long long' type.])
+ fi
+])
diff --git a/macros/texinfo/contrib/texinfo-hu/texinfo/m4/wchar_t.m4 b/macros/texinfo/contrib/texinfo-hu/texinfo/m4/wchar_t.m4
new file mode 100644
index 0000000000..d8fd1ec5c3
--- /dev/null
+++ b/macros/texinfo/contrib/texinfo-hu/texinfo/m4/wchar_t.m4
@@ -0,0 +1,22 @@
+# wchar_t.m4 serial 1 (gettext-0.12)
+dnl Copyright (C) 2002-2003 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 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/macros/texinfo/contrib/texinfo-hu/texinfo/m4/wint_t.m4 b/macros/texinfo/contrib/texinfo-hu/texinfo/m4/wint_t.m4
new file mode 100644
index 0000000000..3d8d21594c
--- /dev/null
+++ b/macros/texinfo/contrib/texinfo-hu/texinfo/m4/wint_t.m4
@@ -0,0 +1,22 @@
+# wint_t.m4 serial 1 (gettext-0.12)
+dnl Copyright (C) 2003 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 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([#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/macros/texinfo/contrib/texinfo-hu/texinfo/m4/xsize.m4 b/macros/texinfo/contrib/texinfo-hu/texinfo/m4/xsize.m4
new file mode 100644
index 0000000000..9b7cf9b493
--- /dev/null
+++ b/macros/texinfo/contrib/texinfo-hu/texinfo/m4/xsize.m4
@@ -0,0 +1,14 @@
+# xsize.m4 serial 2
+dnl Copyright (C) 2003 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.
+
+AC_DEFUN([gl_XSIZE],
+[
+ dnl Prerequisites of lib/xsize.h.
+ AC_REQUIRE([gl_SIZE_MAX])
+ AC_CHECK_HEADERS(stdint.h)
+])
diff --git a/macros/texinfo/contrib/texinfo-hu/texinfo/makeinfo/Makefile.am b/macros/texinfo/contrib/texinfo-hu/texinfo/makeinfo/Makefile.am
new file mode 100644
index 0000000000..5f9f82dfd4
--- /dev/null
+++ b/macros/texinfo/contrib/texinfo-hu/texinfo/makeinfo/Makefile.am
@@ -0,0 +1,28 @@
+# $Id: Makefile.am,v 1.5 2004/04/11 17:56:46 karl 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
+INCLUDES = -I$(top_srcdir)/lib -I../intl -DLOCALEDIR=\"$(localedir)\"
+LDADD = ../lib/libtxi.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/macros/texinfo/contrib/texinfo-hu/texinfo/makeinfo/Makefile.in b/macros/texinfo/contrib/texinfo-hu/texinfo/makeinfo/Makefile.in
new file mode 100644
index 0000000000..fe059dd4fb
--- /dev/null
+++ b/macros/texinfo/contrib/texinfo-hu/texinfo/makeinfo/Makefile.in
@@ -0,0 +1,600 @@
+# Makefile.in generated by automake 1.9.4 from Makefile.am.
+# @configure_input@
+
+# Copyright (C) 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002,
+# 2003, 2004 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 2004/04/11 17:56:46 karl 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.
+
+SOURCES = $(makeinfo_SOURCES)
+
+srcdir = @srcdir@
+top_srcdir = @top_srcdir@
+VPATH = @srcdir@
+pkgdatadir = $(datadir)/@PACKAGE@
+pkglibdir = $(libdir)/@PACKAGE@
+pkgincludedir = $(includedir)/@PACKAGE@
+top_builddir = ..
+am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd
+INSTALL = @INSTALL@
+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)/m4/codeset.m4 \
+ $(top_srcdir)/m4/gettext.m4 $(top_srcdir)/m4/glibc21.m4 \
+ $(top_srcdir)/m4/iconv.m4 $(top_srcdir)/m4/intdiv0.m4 \
+ $(top_srcdir)/m4/intmax.m4 $(top_srcdir)/m4/inttypes-pri.m4 \
+ $(top_srcdir)/m4/inttypes.m4 $(top_srcdir)/m4/inttypes_h.m4 \
+ $(top_srcdir)/m4/lcmessage.m4 $(top_srcdir)/m4/lib-ld.m4 \
+ $(top_srcdir)/m4/lib-link.m4 $(top_srcdir)/m4/lib-prefix.m4 \
+ $(top_srcdir)/m4/longdouble.m4 $(top_srcdir)/m4/longlong.m4 \
+ $(top_srcdir)/m4/mkstemp.m4 $(top_srcdir)/m4/nls.m4 \
+ $(top_srcdir)/m4/onceonly_2_57.m4 $(top_srcdir)/m4/po.m4 \
+ $(top_srcdir)/m4/printf-posix.m4 $(top_srcdir)/m4/progtest.m4 \
+ $(top_srcdir)/m4/signed.m4 $(top_srcdir)/m4/size_max.m4 \
+ $(top_srcdir)/m4/stdint_h.m4 $(top_srcdir)/m4/strcase.m4 \
+ $(top_srcdir)/m4/uintmax_t.m4 $(top_srcdir)/m4/ulonglong.m4 \
+ $(top_srcdir)/m4/wchar_t.m4 $(top_srcdir)/m4/wint_t.m4 \
+ $(top_srcdir)/m4/xsize.m4 $(top_srcdir)/configure.ac
+am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \
+ $(ACLOCAL_M4)
+mkinstalldirs = $(SHELL) $(top_srcdir)/mkinstalldirs
+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 $(am__DEPENDENCIES_1)
+DEFAULT_INCLUDES = -I. -I$(srcdir) -I$(top_builddir)
+depcomp = $(SHELL) $(top_srcdir)/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-exec-recursive install-info-recursive \
+ install-recursive installcheck-recursive installdirs-recursive \
+ pdf-recursive ps-recursive uninstall-info-recursive \
+ uninstall-recursive
+ETAGS = etags
+CTAGS = ctags
+DIST_SUBDIRS = $(SUBDIRS)
+DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST)
+ACLOCAL = @ACLOCAL@
+ALLOCA = @ALLOCA@
+AMDEP_FALSE = @AMDEP_FALSE@
+AMDEP_TRUE = @AMDEP_TRUE@
+AMTAR = @AMTAR@
+AUTOCONF = @AUTOCONF@
+AUTOHEADER = @AUTOHEADER@
+AUTOMAKE = @AUTOMAKE@
+AWK = @AWK@
+BUILD_INCLUDED_LIBINTL = @BUILD_INCLUDED_LIBINTL@
+CATOBJEXT = @CATOBJEXT@
+CC = @CC@
+CCDEPMODE = @CCDEPMODE@
+CFLAGS = @CFLAGS@
+CPP = @CPP@
+CPPFLAGS = @CPPFLAGS@
+CYGPATH_W = @CYGPATH_W@
+DATADIRNAME = @DATADIRNAME@
+DEFS = @DEFS@
+DEPDIR = @DEPDIR@
+ECHO_C = @ECHO_C@
+ECHO_N = @ECHO_N@
+ECHO_T = @ECHO_T@
+EGREP = @EGREP@
+EXEEXT = @EXEEXT@
+GENCAT = @GENCAT@
+GLIBC21 = @GLIBC21@
+GMSGFMT = @GMSGFMT@
+HAVE_ASPRINTF = @HAVE_ASPRINTF@
+HAVE_POSIX_PRINTF = @HAVE_POSIX_PRINTF@
+HAVE_SNPRINTF = @HAVE_SNPRINTF@
+HAVE_WPRINTF = @HAVE_WPRINTF@
+HELP2MAN = @HELP2MAN@
+INSTALL_DATA = @INSTALL_DATA@
+INSTALL_PROGRAM = @INSTALL_PROGRAM@
+INSTALL_SCRIPT = @INSTALL_SCRIPT@
+INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@
+INSTALL_WARNINGS_FALSE = @INSTALL_WARNINGS_FALSE@
+INSTALL_WARNINGS_TRUE = @INSTALL_WARNINGS_TRUE@
+INSTOBJEXT = @INSTOBJEXT@
+INTLBISON = @INTLBISON@
+INTLLIBS = @INTLLIBS@
+INTLOBJS = @INTLOBJS@
+INTL_LIBTOOL_SUFFIX_PREFIX = @INTL_LIBTOOL_SUFFIX_PREFIX@
+LDFLAGS = @LDFLAGS@
+LIBICONV = @LIBICONV@
+LIBINTL = @LIBINTL@
+LIBOBJS = @LIBOBJS@
+LIBS = @LIBS@
+LTLIBICONV = @LTLIBICONV@
+LTLIBINTL = @LTLIBINTL@
+LTLIBOBJS = @LTLIBOBJS@
+MAINT = @MAINT@
+MAINTAINER_MODE_FALSE = @MAINTAINER_MODE_FALSE@
+MAINTAINER_MODE_TRUE = @MAINTAINER_MODE_TRUE@
+MAKEINFO = @MAKEINFO@
+MKINSTALLDIRS = @MKINSTALLDIRS@
+MSGFMT = @MSGFMT@
+MSGMERGE = @MSGMERGE@
+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@
+RANLIB = @RANLIB@
+SET_MAKE = @SET_MAKE@
+SHELL = @SHELL@
+STRIP = @STRIP@
+TERMLIBS = @TERMLIBS@
+TOOLS_ONLY_FALSE = @TOOLS_ONLY_FALSE@
+TOOLS_ONLY_TRUE = @TOOLS_ONLY_TRUE@
+USE_INCLUDED_LIBINTL = @USE_INCLUDED_LIBINTL@
+USE_NLS = @USE_NLS@
+VERSION = @VERSION@
+XGETTEXT = @XGETTEXT@
+ac_ct_CC = @ac_ct_CC@
+ac_ct_RANLIB = @ac_ct_RANLIB@
+ac_ct_STRIP = @ac_ct_STRIP@
+am__fastdepCC_FALSE = @am__fastdepCC_FALSE@
+am__fastdepCC_TRUE = @am__fastdepCC_TRUE@
+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@
+datadir = @datadir@
+exec_prefix = @exec_prefix@
+host = @host@
+host_alias = @host_alias@
+host_cpu = @host_cpu@
+host_os = @host_os@
+host_vendor = @host_vendor@
+includedir = @includedir@
+infodir = @infodir@
+install_sh = @install_sh@
+libdir = @libdir@
+libexecdir = @libexecdir@
+localstatedir = @localstatedir@
+mandir = @mandir@
+mkdir_p = @mkdir_p@
+native_tools = @native_tools@
+oldincludedir = @oldincludedir@
+prefix = @prefix@
+program_transform_name = @program_transform_name@
+sbindir = @sbindir@
+sharedstatedir = @sharedstatedir@
+sysconfdir = @sysconfdir@
+target_alias = @target_alias@
+localedir = $(datadir)/locale
+INCLUDES = -I$(top_srcdir)/lib -I../intl -DLOCALEDIR=\"$(localedir)\"
+LDADD = ../lib/libtxi.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_LDFLAGS) $(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@ if $(COMPILE) -MT $@ -MD -MP -MF "$(DEPDIR)/$*.Tpo" -c -o $@ $<; \
+@am__fastdepCC_TRUE@ then mv -f "$(DEPDIR)/$*.Tpo" "$(DEPDIR)/$*.Po"; else rm -f "$(DEPDIR)/$*.Tpo"; exit 1; fi
+@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@ if $(COMPILE) -MT $@ -MD -MP -MF "$(DEPDIR)/$*.Tpo" -c -o $@ `$(CYGPATH_W) '$<'`; \
+@am__fastdepCC_TRUE@ then mv -f "$(DEPDIR)/$*.Tpo" "$(DEPDIR)/$*.Po"; else rm -f "$(DEPDIR)/$*.Tpo"; exit 1; fi
+@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) '$<'`
+uninstall-info-am:
+
+# 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):
+ @set fnord $$MAKEFLAGS; amf=$$2; \
+ 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) \
+ || case "$$amf" in *=*) exit 1;; *k*) fail=yes;; *) exit 1;; esac; \
+ done; \
+ if test "$$dot_seen" = "no"; then \
+ $(MAKE) $(AM_MAKEFLAGS) "$$target-am" || exit 1; \
+ fi; test -z "$$fail"
+
+mostlyclean-recursive clean-recursive distclean-recursive \
+maintainer-clean-recursive:
+ @set fnord $$MAKEFLAGS; amf=$$2; \
+ 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) \
+ || case "$$amf" in *=*) exit 1;; *k*) fail=yes;; *) exit 1;; esac; \
+ 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; } \
+ END { 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; } \
+ END { 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=; \
+ 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; } \
+ END { 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)'; for file in $$list; do \
+ case $$file in \
+ $(srcdir)/*) file=`echo "$$file" | sed "s|^$$srcdirstrip/||"`;; \
+ $(top_srcdir)/*) file=`echo "$$file" | sed "s|^$$topsrcdirstrip/|$(top_builddir)/|"`;; \
+ esac; \
+ if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \
+ dir=`echo "$$file" | sed -e 's,/[^/]*$$,,'`; \
+ if test "$$dir" != "$$file" && test "$$dir" != "."; then \
+ dir="/$$dir"; \
+ $(mkdir_p) "$(distdir)$$dir"; \
+ else \
+ dir=''; \
+ fi; \
+ if test -d $$d/$$file; then \
+ 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" \
+ 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-exec-am: install-binPROGRAMS
+
+install-info: install-info-recursive
+
+install-man:
+
+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 uninstall-info-am
+
+uninstall-info: uninstall-info-recursive
+
+.PHONY: $(RECURSIVE_TARGETS) CTAGS GTAGS all all-am check check-am \
+ clean clean-binPROGRAMS clean-generic clean-recursive ctags \
+ ctags-recursive distclean distclean-compile distclean-generic \
+ distclean-recursive distclean-tags distdir dvi dvi-am html \
+ html-am info info-am install install-am install-binPROGRAMS \
+ install-data install-data-am install-exec install-exec-am \
+ install-info install-info-am install-man install-strip \
+ installcheck installcheck-am installdirs installdirs-am \
+ maintainer-clean maintainer-clean-generic \
+ maintainer-clean-recursive mostlyclean mostlyclean-compile \
+ mostlyclean-generic mostlyclean-recursive pdf pdf-am ps ps-am \
+ tags tags-recursive uninstall uninstall-am \
+ uninstall-binPROGRAMS uninstall-info-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/macros/texinfo/contrib/texinfo-hu/texinfo/makeinfo/README b/macros/texinfo/contrib/texinfo-hu/texinfo/makeinfo/README
new file mode 100644
index 0000000000..17c437170b
--- /dev/null
+++ b/macros/texinfo/contrib/texinfo-hu/texinfo/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/macros/texinfo/contrib/texinfo-hu/texinfo/makeinfo/cmds.c b/macros/texinfo/contrib/texinfo-hu/texinfo/makeinfo/cmds.c
new file mode 100644
index 0000000000..87ac7bb80d
--- /dev/null
+++ b/macros/texinfo/contrib/texinfo-hu/texinfo/makeinfo/cmds.c
@@ -0,0 +1,1883 @@
+/* cmds.c -- Texinfo commands.
+ $Id: cmds.c,v 1.55 2004/12/14 00:15:36 karl Exp $
+
+ Copyright (C) 1998, 1999, 2000, 2001, 2002, 2003, 2004 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., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. */
+
+#include "system.h"
+#include "cmds.h"
+#include "defun.h"
+#include "files.h"
+#include "footnote.h"
+#include "html.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
+
+/* Options. */
+static void cm_exampleindent (void),
+ cm_firstparagraphindent (void),
+ cm_paragraphindent (void),
+ cm_novalidate (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 },
+ { "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 },
+ { "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 },
+ { "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 },
+ { "evenheading", cm_ignore_line, NO_BRACE_ARGS },
+ { "everyfooting", cm_ignore_line, NO_BRACE_ARGS },
+ { "everyheading", 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 },
+ { "footnote", cm_footnote, NO_BRACE_ARGS}, /* self-arg eater */
+ { "footnotestyle", cm_footnotestyle, NO_BRACE_ARGS },
+ { "format", cm_format, NO_BRACE_ARGS },
+ { "ftable", cm_ftable, NO_BRACE_ARGS },
+ { "group", cm_group, NO_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 },
+ { "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 },
+ { "oddheading", 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 },
+ { "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 },
+ { "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 ('*');
+ }
+}
+
+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)");
+ }
+}
+
+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 && 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[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_char ('`');
+ add_word ("<samp>");
+ }
+ insert_html_tag_with_attribute (arg, "span", "class=\"%s\"",command);
+ if (arg == END)
+ {
+ add_word ("</samp>");
+ if (STREQ (command, "samp")) add_char ('\'');
+ }
+ }
+ }
+ else
+ {
+ extern int printing_index;
+
+ 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. @strong{Nota}, say, does not cause the problem. */
+ 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
+ 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. */
+ extern int printing_index;
+ 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. */
+ extern int printing_index;
+ 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. */
+ extern int printing_index;
+ 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. */
+ extern int printing_index;
+ 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. */
+ extern int printing_index;
+ 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). */
+void
+cm_tie (int arg)
+{
+ if (arg == START)
+ {
+ cm_w (START);
+ add_char (' ');
+ }
+ else
+ 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_begin_document (current_output_filename);
+ 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 (lines && html && !executing_string)
+ html_output_head ();
+
+ 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)
+ {
+ kill_self_indent (-1); /* make sure there's no indentation */
+ insert_string ("INFO-DIR-SECTION ");
+ insert_string (line);
+ insert ('\n');
+ }
+
+ 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;
+ 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;
+
+ if (length < (fill_column - fudge_factor))
+ {
+ line = xmalloc (1 + length);
+ memcpy (line, (char *)(output_paragraph + start), length);
+
+ i = (fill_column - fudge_factor - length) / 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');
+ }
+}
+
+/* Show what an expression returns. */
+void
+cm_result (int arg)
+{
+ if (arg == END)
+ add_word (html ? "=&gt;" : "=>");
+}
+
+/* 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. */
+
+ 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. */
+ filename = text_expansion (arg);
+ 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 %c%s"), COMMAND_PREFIX, command);
+
+ 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[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)
+ {
+ 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);
+ }
+}
diff --git a/macros/texinfo/contrib/texinfo-hu/texinfo/makeinfo/cmds.h b/macros/texinfo/contrib/texinfo-hu/texinfo/makeinfo/cmds.h
new file mode 100644
index 0000000000..68245505b5
--- /dev/null
+++ b/macros/texinfo/contrib/texinfo-hu/texinfo/makeinfo/cmds.h
@@ -0,0 +1,213 @@
+/* cmds.h -- declarations for cmds.c.
+ $Id: cmds.h,v 1.9 2004/11/26 00:48:35 karl Exp $
+
+ Copyright (C) 1998, 1999, 2002, 2003, 2004 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.,
+ 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. */
+
+#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_bullet (int arg),
+ 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_minus (int arg),
+ cm_point (int arg),
+ cm_print (int arg),
+ cm_punct (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/macros/texinfo/contrib/texinfo-hu/texinfo/makeinfo/defun.c b/macros/texinfo/contrib/texinfo-hu/texinfo/makeinfo/defun.c
new file mode 100644
index 0000000000..0323353edf
--- /dev/null
+++ b/macros/texinfo/contrib/texinfo-hu/texinfo/makeinfo/defun.c
@@ -0,0 +1,720 @@
+/* defun.c -- @defun and friends.
+ $Id: defun.c,v 1.11 2004/04/11 17:56:46 karl Exp $
+
+ Copyright (C) 1998, 1999, 2000, 2001, 2002, 2003, 2004 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., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. */
+
+#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 (int type)
+{
+ int 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 (int type, int x_p)
+{
+ int 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 (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 = _("Function");
+ break;
+ case defmac:
+ category = _("Macro");
+ break;
+ case defspec:
+ category = _("Special Form");
+ break;
+ case defvar:
+ case deftypevar:
+ category = _("Variable");
+ break;
+ case defopt:
+ category = _("User Option");
+ break;
+ case defivar:
+ case deftypeivar:
+ category = _("Instance Variable");
+ break;
+ case defmethod:
+ case deftypemethod:
+ category = _("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, _("of"), type_name,
+ defined_name);
+ break;
+ case deftypecv:
+ case deftypeivar:
+ execute_string (" --- %s %s %s: %s %s", category, _("of"), type_name,
+ type_name2, defined_name);
+ break;
+ case defop:
+ execute_string (" --- %s %s %s: %s", category, _("on"), type_name,
+ defined_name);
+ break;
+ case deftypeop:
+ execute_string (" --- %s %s %s: %s %s", category, _("on"), type_name,
+ type_name2, defined_name);
+ break;
+ case deftypemethod:
+ execute_string (" --- %s %s %s: %s %s", category, _("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, _("of"), type_name);
+ break;
+
+ case defop:
+ case deftypemethod:
+ case deftypeop:
+ execute_string ("--- %s %s %s: ", category, _("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, _("of"),
+ type_name);
+ break;
+ case defop:
+ case deftypeop:
+ case deftypemethod:
+ execute_string ("@findex %s %s %s\n", defined_name, _("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)
+{
+ int type;
+ char *base_command = xstrdup (command); /* command with any `x' removed */
+ 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/macros/texinfo/contrib/texinfo-hu/texinfo/makeinfo/defun.h b/macros/texinfo/contrib/texinfo-hu/texinfo/makeinfo/defun.h
new file mode 100644
index 0000000000..9af73ec4a5
--- /dev/null
+++ b/macros/texinfo/contrib/texinfo-hu/texinfo/makeinfo/defun.h
@@ -0,0 +1,31 @@
+/* defun.h -- declaration for defuns.
+ $Id: defun.h,v 1.2 2004/04/11 17:56:47 karl Exp $
+
+ Copyright (C) 1999 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., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
+
+ 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 (int type);
+extern void cm_defun (void);
+
+#endif /* !DEFUN_H */
+
diff --git a/macros/texinfo/contrib/texinfo-hu/texinfo/makeinfo/files.c b/macros/texinfo/contrib/texinfo-hu/texinfo/makeinfo/files.c
new file mode 100644
index 0000000000..db112262ee
--- /dev/null
+++ b/macros/texinfo/contrib/texinfo-hu/texinfo/makeinfo/files.c
@@ -0,0 +1,784 @@
+/* files.c -- file-related functions for makeinfo.
+ $Id: files.c,v 1.5 2004/07/27 00:06:31 karl Exp $
+
+ Copyright (C) 1998, 1999, 2000, 2001, 2002, 2003, 2004 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., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. */
+
+#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)
+ 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/macros/texinfo/contrib/texinfo-hu/texinfo/makeinfo/files.h b/macros/texinfo/contrib/texinfo-hu/texinfo/makeinfo/files.h
new file mode 100644
index 0000000000..0943663467
--- /dev/null
+++ b/macros/texinfo/contrib/texinfo-hu/texinfo/makeinfo/files.h
@@ -0,0 +1,70 @@
+/* files.h -- declarations for files.c.
+ $Id: files.h,v 1.4 2004/07/27 00:06:31 karl Exp $
+
+ Copyright (C) 1998, 2002, 2004 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., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
+ */
+
+#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/macros/texinfo/contrib/texinfo-hu/texinfo/makeinfo/float.c b/macros/texinfo/contrib/texinfo-hu/texinfo/makeinfo/float.c
new file mode 100644
index 0000000000..b2c9a3367c
--- /dev/null
+++ b/macros/texinfo/contrib/texinfo-hu/texinfo/makeinfo/float.c
@@ -0,0 +1,430 @@
+/* float.c -- float environment functions.
+ $Id: float.c,v 1.8 2004/07/05 22:23:22 karl Exp $
+
+ Copyright (C) 2003, 2004 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., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
+
+ 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))
+ {
+ 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 (strlen (temp->title) > 0)
+ {
+ if (strlen (float_type) > 0
+ || strlen (temp->id) > 0)
+ insert_string (": ");
+
+ execute_string ("%s", temp->title);
+ }
+
+ add_word ("</a>");
+
+ add_html_block_elt ("</li>\n");
+ }
+ else
+ {
+ char *entry;
+ char *raw_entry;
+ char *title = expansion (temp->title, 0);
+
+ 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 (title)
+ + sizeof (": "));
+
+ sprintf (raw_entry, "%s %s", float_type, temp->number);
+
+ if (strlen (title) > 0)
+ strcat (raw_entry, ": ");
+
+ number_len = strlen (raw_entry);
+
+ len = strlen (title) + strlen (raw_entry);
+
+ /* If we have a @shortcaption, try it if @caption is
+ too long to fit on a line. */
+ if (len + aux_chars_len > column_width
+ && strlen (temp->shorttitle) > 0)
+ title = expansion (temp->shorttitle, 0);
+
+ strcat (raw_entry, title);
+ 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 (title) > 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);
+ free (title);
+ }
+ }
+ 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/macros/texinfo/contrib/texinfo-hu/texinfo/makeinfo/float.h b/macros/texinfo/contrib/texinfo-hu/texinfo/makeinfo/float.h
new file mode 100644
index 0000000000..be9deb5809
--- /dev/null
+++ b/macros/texinfo/contrib/texinfo-hu/texinfo/makeinfo/float.h
@@ -0,0 +1,56 @@
+/* float.h -- declarations for the float environment.
+ $Id: float.h,v 1.5 2004/04/11 17:56:47 karl Exp $
+
+ Copyright (C) 2003, 2004 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., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
+
+ 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/macros/texinfo/contrib/texinfo-hu/texinfo/makeinfo/footnote.c b/macros/texinfo/contrib/texinfo-hu/texinfo/makeinfo/footnote.c
new file mode 100644
index 0000000000..e5a7f4c08f
--- /dev/null
+++ b/macros/texinfo/contrib/texinfo-hu/texinfo/makeinfo/footnote.c
@@ -0,0 +1,391 @@
+/* footnote.c -- footnotes for Texinfo.
+ $Id: footnote.c,v 1.7 2004/04/11 17:56:47 karl Exp $
+
+ Copyright (C) 1998, 1999, 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 2, or (at your option)
+ any later version.
+
+ This program is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ GNU General Public License for more details.
+
+ You should have received a copy of the GNU General Public License
+ along with this program; if not, write to the Free Software Foundation,
+ Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. */
+
+#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 (strcasecmp (string, "separate") == 0)
+ footnote_style = separate_node;
+ else if (strcasecmp (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_word ("<hr></div>");
+ close_paragraph ();
+ free (array);
+
+ in_fixed_width_font = save_in_fixed_width_font;
+ }
+
+ free_pending_notes ();
+}
diff --git a/macros/texinfo/contrib/texinfo-hu/texinfo/makeinfo/footnote.h b/macros/texinfo/contrib/texinfo-hu/texinfo/makeinfo/footnote.h
new file mode 100644
index 0000000000..e4f95102c5
--- /dev/null
+++ b/macros/texinfo/contrib/texinfo-hu/texinfo/makeinfo/footnote.h
@@ -0,0 +1,38 @@
+/* footnote.h -- declarations for footnote.c.
+ $Id: footnote.h,v 1.2 2004/04/11 17:56:47 karl Exp $
+
+ Copyright (C) 1998, 1999, 2000, 2001, 2002, 2003, 2004 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., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
+ */
+
+#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/macros/texinfo/contrib/texinfo-hu/texinfo/makeinfo/html.c b/macros/texinfo/contrib/texinfo-hu/texinfo/makeinfo/html.c
new file mode 100644
index 0000000000..be2c136d41
--- /dev/null
+++ b/macros/texinfo/contrib/texinfo-hu/texinfo/makeinfo/html.c
@@ -0,0 +1,822 @@
+/* html.c -- html-related utilities.
+ $Id: html.c,v 1.28 2004/12/06 01:13:06 karl Exp $
+
+ Copyright (C) 1999, 2000, 2001, 2002, 2003, 2004 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., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. */
+
+#include "system.h"
+#include "cmds.h"
+#include "files.h"
+#include "html.h"
+#include "lang.h"
+#include "makeinfo.h"
+#include "node.h"
+#include "sectioning.h"
+
+
+/* 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);
+ 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;
+ }
+
+ /* 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_output_head_p = 0;
+int html_title_written = 0;
+
+void
+html_output_head (void)
+{
+ static const char *html_title = NULL;
+ char *encoding;
+
+ if (html_output_head_p)
+ return;
+ html_output_head_p = 1;
+
+ 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 *) _("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");
+ }
+
+ 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++]);
+ free (string);
+ 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 = "";
+ 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 (output_paragraph[check_position-1] != '>' && check_position > 0)
+ 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 (output_paragraph[check_position-1] != '<' && check_position > 0)
+ 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
+ && !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 (!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)
+ 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)
+ {
+ add_html_elt ("<link ");
+ add_word_args ("%s", attributes);
+ add_word_args (" href=\"");
+ add_anchor_name (nodename, 1);
+ add_word_args ("\" title=\"%s\">\n", nodename);
+ }
+}
+
+/* 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");
+ }
+
+ for (; *name; name++)
+ {
+ if (cr_or_whitespace (*name))
+ add_char ('-');
+
+ else if (!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 ("_00%x", (unsigned char) *name);
+
+ else if (old && !URL_SAFE_CHAR (*name) && !OLD_URL_SAFE_CHAR (*name))
+ /* Different output convention, but still cast as above. */
+ 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 (strcasecmp (nodename, "(dir)") == 0)
+ /* Strip the parens, but keep the original letter-case. */
+ add_word_args ("%.3s", nodename + 1);
+ else if (strcasecmp (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] to _00xx, 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++)
+ {
+ 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 (strcasecmp (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 (strcasecmp (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/macros/texinfo/contrib/texinfo-hu/texinfo/makeinfo/html.h b/macros/texinfo/contrib/texinfo-hu/texinfo/makeinfo/html.h
new file mode 100644
index 0000000000..d2b5411282
--- /dev/null
+++ b/macros/texinfo/contrib/texinfo-hu/texinfo/makeinfo/html.h
@@ -0,0 +1,65 @@
+/* html.h -- declarations for html-related utilities.
+ $Id: html.h,v 1.6 2004/11/30 02:03:23 karl Exp $
+
+ Copyright (C) 1999, 2000, 2002, 2004 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., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. */
+
+#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 the <head>. */
+extern int html_output_head_p;
+
+/* Nonzero if we have output a title, from @titlefont or @settitle. */
+extern int html_title_written;
+
+/* 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 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/macros/texinfo/contrib/texinfo-hu/texinfo/makeinfo/index.c b/macros/texinfo/contrib/texinfo-hu/texinfo/makeinfo/index.c
new file mode 100644
index 0000000000..710e8b6855
--- /dev/null
+++ b/macros/texinfo/contrib/texinfo-hu/texinfo/makeinfo/index.c
@@ -0,0 +1,964 @@
+/* index.c -- indexing for Texinfo.
+ $Id: index.c,v 1.17 2004/11/30 02:03:23 karl Exp $
+
+ Copyright (C) 1998, 1999, 2002, 2003, 2004 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., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. */
+
+#include "system.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"
+
+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". */
+INDEX_ELT **the_indices = NULL;
+
+/* 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;
+
+/* How to compare index entries for sorting. May be set to strcoll. */
+int (*index_compare_fn) (const char *a, const char *b) = strcasecmp;
+
+/* Function to compare index entries for sorting. (Calls
+ `index_compare_fn' above.) */
+int index_element_compare (const void *element1, const void *element2);
+
+/* 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");
+}
+
+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;
+}
+
+static void
+insert_index_output_line_no (int line_number, int output_line_number_len)
+{
+ int last_column;
+ 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 = output_paragraph_offset - i;
+ }
+
+ if (last_column + strlen (out_line_no_str) > fill_column)
+ {
+ insert ('\n');
+ last_column = 0;
+ }
+
+ while (last_column + strlen (out_line_no_str) < fill_column)
+ {
+ insert (' ');
+ last_column++;
+ }
+
+ insert_string (out_line_no_str);
+ insert ('\n');
+
+ free (out_line_no_str);
+}
+
+/* Nonzero means that we are in the middle of printing an index. */
+int printing_index = 0;
+
+/* 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 && !docbook)
+ {
+ xml_insert_element (PRINTINDEX, START);
+ 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 ();
+ if (docbook)
+ xml_begin_index ();
+
+ 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;
+
+ 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>");
+ }
+ else if (xml && docbook)
+ {
+ /* In the DocBook case, the expanded index entry is not
+ good for us, since it was expanded for non-DocBook mode
+ inside sort_index. So we send the original entry text
+ to be used with execute_string. */
+ xml_insert_indexentry (index->entry_text, index_node);
+ }
+ else
+ {
+ unsigned new_length = strlen (index->entry);
+
+ 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)
+ {
+ sprintf (line, "* %-37s ", index->entry);
+ line[2 + strlen (index->entry)] = ':';
+ insert_string (line);
+ /* Make sure any non-macros in the node name are expanded. */
+ 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/macros/texinfo/contrib/texinfo-hu/texinfo/makeinfo/index.h b/macros/texinfo/contrib/texinfo-hu/texinfo/makeinfo/index.h
new file mode 100644
index 0000000000..3ff723daa1
--- /dev/null
+++ b/macros/texinfo/contrib/texinfo-hu/texinfo/makeinfo/index.h
@@ -0,0 +1,93 @@
+/* index.h -- declarations for index.c.
+ $Id: index.h,v 1.2 2004/04/11 17:56:47 karl Exp $
+
+ Copyright (C) 1998, 99 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., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. */
+
+#ifndef INDEX_H
+#define INDEX_H
+
+#include "makeinfo.h"
+#include "cmds.h"
+
+/* 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);
+
+extern int defined_indices;
+extern int printing_index;
+extern int index_counter;
+
+INDEX_ELT *index_list (char *name);
+
+#endif /* !INDEX_H */
diff --git a/macros/texinfo/contrib/texinfo-hu/texinfo/makeinfo/insertion.c b/macros/texinfo/contrib/texinfo-hu/texinfo/makeinfo/insertion.c
new file mode 100644
index 0000000000..05a20440eb
--- /dev/null
+++ b/macros/texinfo/contrib/texinfo-hu/texinfo/makeinfo/insertion.c
@@ -0,0 +1,2376 @@
+/* insertion.c -- insertions for Texinfo.
+ $Id: insertion.c,v 1.55 2004/11/11 18:34:28 karl Exp $
+
+ Copyright (C) 1998, 1999, 2000, 2001, 2002, 2003, 2004 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., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. */
+
+#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;
+
+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. */
+static 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;
+ 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 (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;
+ insert_string ("START-INFO-DIR-ENTRY\n");
+ 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 = xstrdup ("@bullet");
+ }
+ }
+
+ 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 (int type)
+{
+ int 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[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)
+ 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. */
+ kill_self_indent (default_indentation_increment);
+ 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[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[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[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[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;
+ }
+
+ 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[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[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[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[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 (int 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
+
+ We cannot simply copy input stream onto output stream; as 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;
+ int save_escape_html = escape_html;
+
+ 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;
+
+ /* No indentation: this is verbatim after all
+ If you want indent, enclose @verbatim in @example
+ current_indent += default_indentation_increment;
+ */
+
+ 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);
+ escape_html = 0;
+ add_word ("<![CDATA[");
+ }
+
+ 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)
+ {
+ add_word ("]]>");
+ xml_insert_element (VERBATIM, END);
+ escape_html = save_escape_html;
+ }
+
+ 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;
+ int 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 ())
+ {
+ output_column = current_indent - 2;
+ indent (output_column);
+
+ /* 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 (' ');
+ output_column++;
+ }
+ 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/macros/texinfo/contrib/texinfo-hu/texinfo/makeinfo/insertion.h b/macros/texinfo/contrib/texinfo-hu/texinfo/makeinfo/insertion.h
new file mode 100644
index 0000000000..ace55716f2
--- /dev/null
+++ b/macros/texinfo/contrib/texinfo-hu/texinfo/makeinfo/insertion.h
@@ -0,0 +1,78 @@
+/* insertion.h -- declarations for insertion.c.
+ $Id: insertion.h,v 1.10 2004/04/11 17:56:47 karl Exp $
+
+ Copyright (C) 1998, 1999, 2001, 2002, 2003 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., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. */
+
+#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
+};
+
+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);
+#endif /* !INSERTION_H */
diff --git a/macros/texinfo/contrib/texinfo-hu/texinfo/makeinfo/lang.c b/macros/texinfo/contrib/texinfo-hu/texinfo/makeinfo/lang.c
new file mode 100644
index 0000000000..c72e8dbc63
--- /dev/null
+++ b/macros/texinfo/contrib/texinfo-hu/texinfo/makeinfo/lang.c
@@ -0,0 +1,1020 @@
+/* lang.c -- language-dependent support.
+ $Id: lang.c,v 1.14 2004/11/22 23:57:33 karl Exp $
+
+ Copyright (C) 1999, 2000, 2001, 2002, 2003, 2004 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., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
+
+ 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"
+
+/* Current document encoding. */
+encoding_code_type document_encoding_code = no_encoding;
+
+/* Current language code; default is English. */
+language_code_type language_code = en;
+
+/* By default, unsupported encoding is an empty string. */
+char *unknown_encoding = NULL;
+
+static iso_map_type us_ascii_map [] = {{NULL, 0, 0}}; /* ASCII map is trivial */
+
+/* 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 },
+ { "Aacute", 0xC1, 0x00C1 },
+ { "Acirc", 0xC2, 0x00C2 },
+ { "Atilde", 0xC3, 0x00C3 },
+ { "Auml", 0xC4, 0x00C4 },
+ { "Aring", 0xC5, 0x00C5 },
+ { "AElig", 0xC6, 0x00C6 },
+ { "Ccedil", 0xC7, 0x00C7 },
+ { "Ccedil", 0xC7, 0x00C7 },
+ { "Egrave", 0xC8, 0x00C8 },
+ { "Eacute", 0xC9, 0x00C9 },
+ { "Ecirc", 0xCA, 0x00CA },
+ { "Euml", 0xCB, 0x00CB },
+ { "Igrave", 0xCC, 0x00CC },
+ { "Iacute", 0xCD, 0x00CD },
+ { "Icirc", 0xCE, 0x00CE },
+ { "Iuml", 0xCF, 0x00CF },
+ { "ETH", 0xD0, 0x00D0 },
+ { "Ntilde", 0xD1, 0x00D1 },
+ { "Ograve", 0xD2, 0x00D2 },
+ { "Oacute", 0xD3, 0x00D3 },
+ { "Ocirc", 0xD4, 0x00D4 },
+ { "Otilde", 0xD5, 0x00D5 },
+ { "Ouml", 0xD6, 0x00D6 },
+ { "times", 0xD7, 0x00D7 },
+ { "Oslash", 0xD8, 0x00D8 },
+ { "Ugrave", 0xD9, 0x00D9 },
+ { "Uacute", 0xDA, 0x00DA },
+ { "Ucirc", 0xDB, 0x00DB },
+ { "Uuml", 0xDC, 0x00DC },
+ { "Yacute", 0xDD, 0x00DD },
+ { "THORN", 0xDE, 0x00DE },
+ { "szlig", 0xDF, 0x00DF },
+ { "agrave", 0xE0, 0x00E0 },
+ { "aacute", 0xE1, 0x00E1 },
+ { "acirc", 0xE2, 0x00E2 },
+ { "atilde", 0xE3, 0x00E3 },
+ { "auml", 0xE4, 0x00E4 },
+ { "aring", 0xE5, 0x00E5 },
+ { "aelig", 0xE6, 0x00E6 },
+ { "ccedil", 0xE7, 0x00E7 },
+ { "egrave", 0xE8, 0x00E8 },
+ { "eacute", 0xE9, 0x00E9 },
+ { "ecirc", 0xEA, 0x00EA },
+ { "euml", 0xEB, 0x00EB },
+ { "igrave", 0xEC, 0x00EC },
+ { "iacute", 0xED, 0x00ED },
+ { "icirc", 0xEE, 0x00EE },
+ { "iuml", 0xEF, 0x00EF },
+ { "eth", 0xF0, 0x00F0 },
+ { "ntilde", 0xF1, 0x00F1 },
+ { "ograve", 0xF2, 0x00F2 },
+ { "oacute", 0xF3, 0x00F3 },
+ { "ocirc", 0xF4, 0x00F4 },
+ { "otilde", 0xF5, 0x00F5 },
+ { "ouml", 0xF6, 0x00F6 },
+ { "divide", 0xF7, 0x00F7 },
+ { "oslash", 0xF8, 0x00F8 },
+ { "ugrave", 0xF9, 0x00F9 },
+ { "uacute", 0xFA, 0x00FA },
+ { "ucirc", 0xFB, 0x00FB },
+ { "uuml", 0xFC, 0x00FC },
+ { "yacute", 0xFD, 0x00FD },
+ { "thorn", 0xFE, 0x00FE },
+ { "yuml", 0xFF, 0x00FF },
+ { 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 are abbreviated
+ from the official Unicode names, 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 },
+ { "sect", 0xA7, 0x00A7 },
+ { "scaron", 0xA8, 0x0161 },
+ { "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 },
+ { "micro", 0xB5, 0x00B5 },
+ { "para", 0xB6, 0x00B6 },
+ { "middot", 0xB7, 0x00B7 },
+ { "zcaron", 0xB8, 0x017E },
+ { "sup1", 0xB9, 0x00B9 },
+ { "ordm", 0xBA, 0x00BA },
+ { "raquo", 0xBB, 0x00BB },
+ { "OElig", 0xBC, 0x0152 },
+ { "oelig", 0xBD, 0x0153 },
+ { "Yuml", 0xBE, 0x0178 },
+ { "iquest", 0xBF, 0x00BF },
+ { "Agrave", 0xC0, 0x00C0 },
+ { "Aacute", 0xC1, 0x00C1 },
+ { "Acirc", 0xC2, 0x00C2 },
+ { "Atilde", 0xC3, 0x00C3 },
+ { "Auml", 0xC4, 0x00C4 },
+ { "Aring", 0xC5, 0x00C5 },
+ { "AElig", 0xC6, 0x00C6 },
+ { "Ccedil", 0xC7, 0x00C7 },
+ { "Ccedil", 0xC7, 0x00C7 },
+ { "Egrave", 0xC8, 0x00C8 },
+ { "Eacute", 0xC9, 0x00C9 },
+ { "Ecirc", 0xCA, 0x00CA },
+ { "Euml", 0xCB, 0x00CB },
+ { "Igrave", 0xCC, 0x00CC },
+ { "Iacute", 0xCD, 0x00CD },
+ { "Icirc", 0xCE, 0x00CE },
+ { "Iuml", 0xCF, 0x00CF },
+ { "ETH", 0xD0, 0x00D0 },
+ { "Ntilde", 0xD1, 0x00D1 },
+ { "Ograve", 0xD2, 0x00D2 },
+ { "Oacute", 0xD3, 0x00D3 },
+ { "Ocirc", 0xD4, 0x00D4 },
+ { "Otilde", 0xD5, 0x00D5 },
+ { "Ouml", 0xD6, 0x00D6 },
+ { "times", 0xD7, 0x00D7 },
+ { "Oslash", 0xD8, 0x00D8 },
+ { "Ugrave", 0xD9, 0x00D9 },
+ { "Uacute", 0xDA, 0x00DA },
+ { "Ucirc", 0xDB, 0x00DB },
+ { "Uuml", 0xDC, 0x00DC },
+ { "Yacute", 0xDD, 0x00DD },
+ { "THORN", 0xDE, 0x00DE },
+ { "szlig", 0xDF, 0x00DF },
+ { "agrave", 0xE0, 0x00E0 },
+ { "aacute", 0xE1, 0x00E1 },
+ { "acirc", 0xE2, 0x00E2 },
+ { "atilde", 0xE3, 0x00E3 },
+ { "auml", 0xE4, 0x00E4 },
+ { "aring", 0xE5, 0x00E5 },
+ { "aelig", 0xE6, 0x00E6 },
+ { "ccedil", 0xE7, 0x00E7 },
+ { "egrave", 0xE8, 0x00E8 },
+ { "eacute", 0xE9, 0x00E9 },
+ { "ecirc", 0xEA, 0x00EA },
+ { "euml", 0xEB, 0x00EB },
+ { "igrave", 0xEC, 0x00EC },
+ { "iacute", 0xED, 0x00ED },
+ { "icirc", 0xEE, 0x00EE },
+ { "iuml", 0xEF, 0x00EF },
+ { "eth", 0xF0, 0x00F0 },
+ { "ntilde", 0xF1, 0x00F1 },
+ { "ograve", 0xF2, 0x00F2 },
+ { "oacute", 0xF3, 0x00F3 },
+ { "ocirc", 0xF4, 0x00F4 },
+ { "otilde", 0xF5, 0x00F5 },
+ { "ouml", 0xF6, 0x00F6 },
+ { "divide", 0xF7, 0x00F7 },
+ { "oslash", 0xF8, 0x00F8 },
+ { "ugrave", 0xF9, 0x00F9 },
+ { "uacute", 0xFA, 0x00FA },
+ { "ucirc", 0xFB, 0x00FB },
+ { "uuml", 0xFC, 0x00FC },
+ { "yacute", 0xFD, 0x00FD },
+ { "thorn", 0xFE, 0x00FE },
+ { "yuml", 0xFF, 0x00FF },
+ { 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!)
+ http://people.ssh.fi/mtr/genscript/88592.txt
+
+ * (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 }, /* LATIN CAPITAL LETTER A WITH OGONEK */
+ { "", 0xA2, 0x02D8 }, /* BREVE */
+ { "", 0xA3, 0x0141 }, /* LATIN CAPITAL LETTER L WITH STROKE */
+ { "curren", 0xA4, 0x00A4 }, /* CURRENCY SIGN */
+ { "", 0xA5, 0x013D }, /* LATIN CAPITAL LETTER L WITH CARON */
+ { "", 0xA6, 0x015A }, /* LATIN CAPITAL LETTER S WITH ACUTE */
+ { "sect", 0xA7, 0x00A7 }, /* SECTION SIGN */
+ { "uml", 0xA8, 0x00A8 }, /* DIAERESIS */
+ { "", 0xA9, 0x0160 }, /* LATIN CAPITAL LETTER S WITH CARON */
+ { "", 0xAA, 0x015E }, /* LATIN CAPITAL LETTER S WITH CEDILLA */
+ { "", 0xAB, 0x0164 }, /* LATIN CAPITAL LETTER T WITH CARON */
+ { "", 0xAC, 0x0179 }, /* LATIN CAPITAL LETTER Z WITH ACUTE */
+ { "shy", 0xAD, 0x00AD }, /* SOFT HYPHEN */
+ { "", 0xAE, 0x017D }, /* LATIN CAPITAL LETTER Z WITH CARON */
+ { "", 0xAF, 0x017B }, /* LATIN CAPITAL LETTER Z WITH DOT ABOVE */
+ { "deg", 0xB0, 0x00B0 }, /* DEGREE SIGN */
+ { "", 0xB1, 0x0105 }, /* LATIN SMALL LETTER A WITH OGONEK */
+ { "", 0xB2, 0x02DB }, /* OGONEK */
+ { "", 0xB3, 0x0142 }, /* LATIN SMALL LETTER L WITH STROKE */
+ { "acute", 0xB4, 0x00B4 }, /* ACUTE ACCENT */
+ { "", 0xB5, 0x013E }, /* LATIN SMALL LETTER L WITH CARON */
+ { "", 0xB6, 0x015B }, /* LATIN SMALL LETTER S WITH ACUTE */
+ { "", 0xB7, 0x02C7 }, /* CARON (Mandarin Chinese third tone) */
+ { "cedil", 0xB8, 0x00B8 }, /* CEDILLA */
+ { "", 0xB9, 0x0161 }, /* LATIN SMALL LETTER S WITH CARON */
+ { "", 0xBA, 0x015F }, /* LATIN SMALL LETTER S WITH CEDILLA */
+ { "", 0xBB, 0x0165 }, /* LATIN SMALL LETTER T WITH CARON */
+ { "", 0xBC, 0x017A }, /* LATIN SMALL LETTER Z WITH ACUTE */
+ { "", 0xBD, 0x02DD }, /* DOUBLE ACUTE ACCENT */
+ { "", 0xBE, 0x017E }, /* LATIN SMALL LETTER Z WITH CARON */
+ { "", 0xBF, 0x017C }, /* LATIN SMALL LETTER Z WITH DOT ABOVE */
+ { "", 0xC0, 0x0154 }, /* LATIN CAPITAL LETTER R WITH ACUTE */
+ { "", 0xC1, 0x00C1 }, /* LATIN CAPITAL LETTER A WITH ACUTE */
+ { "", 0xC2, 0x00C2 }, /* LATIN CAPITAL LETTER A WITH CIRCUMFLEX */
+ { "", 0xC3, 0x0102 }, /* LATIN CAPITAL LETTER A WITH BREVE */
+ { "", 0xC4, 0x00C4 }, /* LATIN CAPITAL LETTER A WITH DIAERESIS */
+ { "", 0xC5, 0x0139 }, /* LATIN CAPITAL LETTER L WITH ACUTE */
+ { "", 0xC6, 0x0106 }, /* LATIN CAPITAL LETTER C WITH ACUTE */
+ { "", 0xC7, 0x00C7 }, /* LATIN CAPITAL LETTER C WITH CEDILLA */
+ { "", 0xC8, 0x010C }, /* LATIN CAPITAL LETTER C WITH CARON */
+ { "", 0xC9, 0x00C9 }, /* LATIN CAPITAL LETTER E WITH ACUTE */
+ { "", 0xCA, 0x0118 }, /* LATIN CAPITAL LETTER E WITH OGONEK */
+ { "", 0xCB, 0x00CB }, /* LATIN CAPITAL LETTER E WITH DIAERESIS */
+ { "", 0xCC, 0x011A }, /* LATIN CAPITAL LETTER E WITH CARON */
+ { "", 0xCD, 0x00CD }, /* LATIN CAPITAL LETTER I WITH ACUTE */
+ { "", 0xCE, 0x00CE }, /* LATIN CAPITAL LETTER I WITH CIRCUMFLEX */
+ { "", 0xCF, 0x010E }, /* LATIN CAPITAL LETTER D WITH CARON */
+ { "", 0xD0, 0x0110 }, /* LATIN CAPITAL LETTER D WITH STROKE */
+ { "", 0xD1, 0x0143 }, /* LATIN CAPITAL LETTER N WITH ACUTE */
+ { "", 0xD2, 0x0147 }, /* LATIN CAPITAL LETTER N WITH CARON */
+ { "", 0xD3, 0x00D3 }, /* LATIN CAPITAL LETTER O WITH ACUTE */
+ { "", 0xD4, 0x00D4 }, /* LATIN CAPITAL LETTER O WITH CIRCUMFLEX */
+ { "", 0xD5, 0x0150 }, /* LATIN CAPITAL LETTER O WITH DOUBLE ACUTE */
+ { "", 0xD6, 0x00D6 }, /* LATIN CAPITAL LETTER O WITH DIAERESIS */
+ { "times", 0xD7, 0x00D7 }, /* MULTIPLICATION SIGN */
+ { "", 0xD8, 0x0158 }, /* LATIN CAPITAL LETTER R WITH CARON */
+ { "", 0xD9, 0x016E }, /* LATIN CAPITAL LETTER U WITH RING ABOVE */
+ { "", 0xDA, 0x00DA }, /* LATIN CAPITAL LETTER U WITH ACUTE */
+ { "", 0xDB, 0x0170 }, /* LATIN CAPITAL LETTER U WITH DOUBLE ACUTE */
+ { "", 0xDC, 0x00DC }, /* LATIN CAPITAL LETTER U WITH DIAERESIS */
+ { "", 0xDD, 0x00DD }, /* LATIN CAPITAL LETTER Y WITH ACUTE */
+ { "", 0xDE, 0x0162 }, /* LATIN CAPITAL LETTER T WITH CEDILLA */
+ { "", 0xDF, 0x00DF }, /* LATIN SMALL LETTER SHARP S (German) */
+ { "", 0xE0, 0x0155 }, /* LATIN SMALL LETTER R WITH ACUTE */
+ { "", 0xE1, 0x00E1 }, /* LATIN SMALL LETTER A WITH ACUTE */
+ { "", 0xE2, 0x00E2 }, /* LATIN SMALL LETTER A WITH CIRCUMFLEX */
+ { "", 0xE3, 0x0103 }, /* LATIN SMALL LETTER A WITH BREVE */
+ { "", 0xE4, 0x00E4 }, /* LATIN SMALL LETTER A WITH DIAERESIS */
+ { "", 0xE5, 0x013A }, /* LATIN SMALL LETTER L WITH ACUTE */
+ { "", 0xE6, 0x0107 }, /* LATIN SMALL LETTER C WITH ACUTE */
+ { "", 0xE7, 0x00E7 }, /* LATIN SMALL LETTER C WITH CEDILLA */
+ { "", 0xE8, 0x010D }, /* LATIN SMALL LETTER C WITH CARON */
+ { "", 0xE9, 0x00E9 }, /* LATIN SMALL LETTER E WITH ACUTE */
+ { "", 0xEA, 0x0119 }, /* LATIN SMALL LETTER E WITH OGONEK */
+ { "", 0xEB, 0x00EB }, /* LATIN SMALL LETTER E WITH DIAERESIS */
+ { "", 0xEC, 0x011B }, /* LATIN SMALL LETTER E WITH CARON */
+ { "", 0xED, 0x00ED }, /* LATIN SMALL LETTER I WITH ACUTE */
+ { "", 0xEE, 0x00EE }, /* LATIN SMALL LETTER I WITH CIRCUMFLEX */
+ { "", 0xEF, 0x010F }, /* LATIN SMALL LETTER D WITH CARON */
+ { "", 0xF0, 0x0111 }, /* LATIN SMALL LETTER D WITH STROKE */
+ { "", 0xF1, 0x0144 }, /* LATIN SMALL LETTER N WITH ACUTE */
+ { "", 0xF2, 0x0148 }, /* LATIN SMALL LETTER N WITH CARON */
+ { "", 0xF3, 0x00F3 }, /* LATIN SMALL LETTER O WITH ACUTE */
+ { "", 0xF4, 0x00F4 }, /* LATIN SMALL LETTER O WITH CIRCUMFLEX */
+ { "", 0xF5, 0x0151 }, /* LATIN SMALL LETTER O WITH DOUBLE ACUTE */
+ { "", 0xF6, 0x00F6 }, /* LATIN SMALL LETTER O WITH DIAERESIS */
+ { "divide", 0xF7, 0x00F7 }, /* DIVISION SIGN */
+ { "", 0xF8, 0x0159 }, /* LATIN SMALL LETTER R WITH CARON */
+ { "", 0xF9, 0x016F }, /* LATIN SMALL LETTER U WITH RING ABOVE */
+ { "", 0xFA, 0x00FA }, /* LATIN SMALL LETTER U WITH ACUTE */
+ { "", 0xFB, 0x0171 }, /* LATIN SMALL LETTER U WITH DOUBLE ACUTE */
+ { "", 0xFC, 0x00FC }, /* LATIN SMALL LETTER U WITH DIAERESIS */
+ { "", 0xFD, 0x00FD }, /* LATIN SMALL LETTER Y WITH ACUTE */
+ { "", 0xFE, 0x0163 }, /* LATIN SMALL LETTER T WITH CEDILLA */
+ { "", 0xFF, 0x02D9 }, /* DOT ABOVE (Mandarin Chinese light tone) */
+ { NULL, 0, 0 }
+};
+
+encoding_type encoding_table[] = {
+ { no_encoding, "(no encoding)", NULL },
+ { US_ASCII, "US-ASCII", us_ascii_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 },
+ { last_encoding_code, NULL, NULL }
+};
+
+
+language_type language_table[] = {
+ { aa, "aa", "Afar" },
+ { ab, "ab", "Abkhazian" },
+ { af, "af", "Afrikaans" },
+ { am, "am", "Amharic" },
+ { ar, "ar", "Arabic" },
+ { as, "as", "Assamese" },
+ { ay, "ay", "Aymara" },
+ { az, "az", "Azerbaijani" },
+ { ba, "ba", "Bashkir" },
+ { be, "be", "Byelorussian" },
+ { bg, "bg", "Bulgarian" },
+ { bh, "bh", "Bihari" },
+ { bi, "bi", "Bislama" },
+ { bn, "bn", "Bengali; Bangla" },
+ { bo, "bo", "Tibetan" },
+ { br, "br", "Breton" },
+ { ca, "ca", "Catalan" },
+ { co, "co", "Corsican" },
+ { cs, "cs", "Czech" },
+ { cy, "cy", "Welsh" },
+ { da, "da", "Danish" },
+ { de, "de", "German" },
+ { dz, "dz", "Bhutani" },
+ { el, "el", "Greek" },
+ { en, "en", "English" },
+ { eo, "eo", "Esperanto" },
+ { es, "es", "Spanish" },
+ { et, "et", "Estonian" },
+ { eu, "eu", "Basque" },
+ { fa, "fa", "Persian" },
+ { fi, "fi", "Finnish" },
+ { fj, "fj", "Fiji" },
+ { fo, "fo", "Faroese" },
+ { fr, "fr", "French" },
+ { fy, "fy", "Frisian" },
+ { ga, "ga", "Irish" },
+ { gd, "gd", "Scots Gaelic" },
+ { gl, "gl", "Galician" },
+ { gn, "gn", "Guarani" },
+ { gu, "gu", "Gujarati" },
+ { ha, "ha", "Hausa" },
+ { he, "he", "Hebrew" } /* (formerly iw) */,
+ { hi, "hi", "Hindi" },
+ { hr, "hr", "Croatian" },
+ { hu, "hu", "Hungarian" },
+ { hy, "hy", "Armenian" },
+ { ia, "ia", "Interlingua" },
+ { id, "id", "Indonesian" } /* (formerly in) */,
+ { ie, "ie", "Interlingue" },
+ { ik, "ik", "Inupiak" },
+ { is, "is", "Icelandic" },
+ { it, "it", "Italian" },
+ { iu, "iu", "Inuktitut" },
+ { ja, "ja", "Japanese" },
+ { jw, "jw", "Javanese" },
+ { ka, "ka", "Georgian" },
+ { kk, "kk", "Kazakh" },
+ { kl, "kl", "Greenlandic" },
+ { km, "km", "Cambodian" },
+ { kn, "kn", "Kannada" },
+ { ko, "ko", "Korean" },
+ { ks, "ks", "Kashmiri" },
+ { ku, "ku", "Kurdish" },
+ { ky, "ky", "Kirghiz" },
+ { la, "la", "Latin" },
+ { ln, "ln", "Lingala" },
+ { lo, "lo", "Laothian" },
+ { lt, "lt", "Lithuanian" },
+ { lv, "lv", "Latvian, Lettish" },
+ { mg, "mg", "Malagasy" },
+ { 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" },
+ { ne, "ne", "Nepali" },
+ { nl, "nl", "Dutch" },
+ { no, "no", "Norwegian" },
+ { oc, "oc", "Occitan" },
+ { om, "om", "(Afan) Oromo" },
+ { or, "or", "Oriya" },
+ { pa, "pa", "Punjabi" },
+ { pl, "pl", "Polish" },
+ { ps, "ps", "Pashto, Pushto" },
+ { pt, "pt", "Portuguese" },
+ { qu, "qu", "Quechua" },
+ { rm, "rm", "Rhaeto-Romance" },
+ { rn, "rn", "Kirundi" },
+ { ro, "ro", "Romanian" },
+ { ru, "ru", "Russian" },
+ { rw, "rw", "Kinyarwanda" },
+ { sa, "sa", "Sanskrit" },
+ { sd, "sd", "Sindhi" },
+ { sg, "sg", "Sangro" },
+ { sh, "sh", "Serbo-Croatian" },
+ { si, "si", "Sinhalese" },
+ { sk, "sk", "Slovak" },
+ { sl, "sl", "Slovenian" },
+ { sm, "sm", "Samoan" },
+ { sn, "sn", "Shona" },
+ { so, "so", "Somali" },
+ { sq, "sq", "Albanian" },
+ { sr, "sr", "Serbian" },
+ { ss, "ss", "Siswati" },
+ { st, "st", "Sesotho" },
+ { 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", "Setswana" },
+ { to, "to", "Tonga" },
+ { tr, "tr", "Turkish" },
+ { ts, "ts", "Tsonga" },
+ { tt, "tt", "Tatar" },
+ { tw, "tw", "Twi" },
+ { ug, "ug", "Uighur" },
+ { uk, "uk", "Ukrainian" },
+ { ur, "ur", "Urdu" },
+ { uz, "uz", "Uzbek" },
+ { vi, "vi", "Vietnamese" },
+ { vo, "vo", "Volapuk" },
+ { wo, "wo", "Wolof" },
+ { xh, "xh", "Xhosa" },
+ { yi, "yi", "Yiddish" } /* (formerly ji) */,
+ { yo, "yo", "Yoruba" },
+ { za, "za", "Zhuang" },
+ { zh, "zh", "Chinese" },
+ { zu, "zu", "Zulu" },
+ { last_language_code, NULL, NULL }
+};
+
+/* @documentlanguage. Maybe we'll do something useful with this in the
+ future. For now, we just recognize it. */
+
+/* XML documents can make use of this data. Unfortunately, it clashes with
+ the structure currently used. So instead of enclosing content into
+ a language block, we just output an empty element. Anyways, a stream based
+ parser can make good use of it. */
+void
+cm_documentlanguage (void)
+{
+ language_code_type c;
+ char *lang_arg;
+
+ /* Read the line with the language code on it. */
+ get_rest_of_line (0, &lang_arg);
+
+ /* Linear search is fine these days. */
+ for (c = aa; c != last_language_code; c++)
+ {
+ if (strcmp (lang_arg, 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"), lang_arg);
+
+ if (xml && !docbook)
+ {
+ xml_insert_element_with_attribute (DOCUMENTLANGUAGE, START, "xml:lang=\"%s\"", lang_arg);
+ xml_insert_element (DOCUMENTLANGUAGE, END);
+ }
+
+ free (lang_arg);
+}
+
+
+
+/* Search through the encoding table for the given character, returning
+ its equivalent. */
+
+static int
+cm_search_iso_map (char *html)
+{
+ 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 (strcasecmp (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 ("");
+}
+
+
+/* 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)
+ {
+ /* 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_char (encoding_table[document_encoding_code].isotab[rc].bytecode);
+ 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 (';');
+ }
+ }
+}
+
+
+static void
+cm_accent_generic_no_headers (int arg, int start, int end, int single,
+ char *html_solo)
+{
+ if (arg == END)
+ {
+ if (no_encoding)
+ add_char (single);
+ else
+ {
+ int rc;
+ char *buffer = xmalloc (1 + strlen (html_solo) + 1);
+ buffer[0] = output_paragraph[end - 1];
+ buffer[1] = 0;
+ strcat (buffer, html_solo);
+
+ rc = cm_search_iso_map (buffer);
+ if (rc >= 0)
+ /* A little bit tricky ;-)
+ Here we replace the character which has
+ been inserted in read_command with
+ the value we have found in converting table
+ Does there exist a better way to do this? kama. */
+ output_paragraph[end - 1]
+ = encoding_table[document_encoding_code].isotab[rc].bytecode;
+ 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, "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
+ 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/macros/texinfo/contrib/texinfo-hu/texinfo/makeinfo/lang.h b/macros/texinfo/contrib/texinfo-hu/texinfo/makeinfo/lang.h
new file mode 100644
index 0000000000..b231455a6e
--- /dev/null
+++ b/macros/texinfo/contrib/texinfo-hu/texinfo/makeinfo/lang.h
@@ -0,0 +1,148 @@
+/* lang.h -- declarations for language codes etc.
+ $Id: lang.h,v 1.6 2004/04/11 17:56:47 karl Exp $
+
+ Copyright (C) 1999, 2001, 2002, 2003 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., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
+
+ 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
+ * Actually we don't currently support this (may be in the future) ;-)
+ * These code are the ISO-639 two letter codes.
+ */
+typedef enum
+{
+ 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,
+ 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,
+ 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 */
+} 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);
+
+#endif /* not LANG_H */
diff --git a/macros/texinfo/contrib/texinfo-hu/texinfo/makeinfo/macro.c b/macros/texinfo/contrib/texinfo-hu/texinfo/makeinfo/macro.c
new file mode 100644
index 0000000000..65ac0dac8f
--- /dev/null
+++ b/macros/texinfo/contrib/texinfo-hu/texinfo/makeinfo/macro.c
@@ -0,0 +1,1108 @@
+/* macro.c -- user-defined macros for Texinfo.
+ $Id: macro.c,v 1.6 2004/04/11 17:56:47 karl Exp $
+
+ Copyright (C) 1998, 1999, 2002, 2003 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., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. */
+
+#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->inhibited = 0;
+ def->flags = flags;
+}
+
+
+char **
+get_brace_args (int quote_single)
+{
+ 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_single) ||
+ ((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[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->flags & ME_QUOTE_ARG);
+}
+
+/* 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;
+ int num_args;
+ char *execution_string = NULL;
+ int start_line = line_number;
+
+ /* Find out how many arguments this macro definition takes. */
+ num_args = array_len (def->arglist);
+
+ /* Gather the arguments present on the line if there are any. */
+ arglist = get_macro_args (def);
+
+ if (num_args < 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;
+ }
+ }
+ }
+
+ /* If we have exactly one argument, do @quote-arg implicitly. Not
+ only does this match TeX's behavior (which can't feasibly be
+ changed), but it's a good idea. */
+ if (arglist_index == 1)
+ flags |= ME_QUOTE_ARG;
+ }
+
+ /* 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])))
+ {
+ 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])))
+ {
+ for (i = 10; whitespace (line[i]); i++);
+ strcpy (line, line + i);
+
+ if (arglist && arglist[0] && !arglist[1])
+ {
+ flags |= ME_QUOTE_ARG;
+ if (!*line)
+ {
+ free (line);
+ continue;
+ }
+ }
+ else
+ line_error (_("@quote-arg only useful for single-argument macros"));
+ }
+
+ 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, opcol_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;
+ opcol_orig = output_column;
+ 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;
+ output_column = opcol_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/macros/texinfo/contrib/texinfo-hu/texinfo/makeinfo/macro.h b/macros/texinfo/contrib/texinfo-hu/texinfo/makeinfo/macro.h
new file mode 100644
index 0000000000..fbc0e59e65
--- /dev/null
+++ b/macros/texinfo/contrib/texinfo-hu/texinfo/makeinfo/macro.h
@@ -0,0 +1,77 @@
+/* macro.h -- declarations for macro.c.
+ $Id: macro.h,v 1.2 2004/04/11 17:56:47 karl Exp $
+
+ Copyright (C) 1998, 99 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., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
+ */
+
+#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. */
+ 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, ME_QUOTE_ARG, etc. */
+} MACRO_DEF;
+
+/* flags for MACRO_DEF */
+#define ME_RECURSE 0x01
+#define ME_QUOTE_ARG 0x02
+
+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);
+extern char **get_brace_args (int quote_single);
+
+#endif /* not MACRO_H */
diff --git a/macros/texinfo/contrib/texinfo-hu/texinfo/makeinfo/makeinfo.c b/macros/texinfo/contrib/texinfo-hu/texinfo/makeinfo/makeinfo.c
new file mode 100644
index 0000000000..22ed4c4fd9
--- /dev/null
+++ b/macros/texinfo/contrib/texinfo-hu/texinfo/makeinfo/makeinfo.c
@@ -0,0 +1,4157 @@
+/* makeinfo -- convert Texinfo source into other formats.
+ $Id: makeinfo.c,v 1.74 2004/12/19 17:15:42 karl Exp $
+
+ Copyright (C) 1987, 1992, 1993, 1994, 1995, 1996, 1997, 1998, 1999,
+ 2000, 2001, 2002, 2003, 2004 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., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
+
+ Original author of makeinfo: Brian Fox (bfox@ai.mit.edu). */
+
+#include "system.h"
+#include "getopt.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;
+
+#define INITIAL_PARAGRAPH_SPACE 5000
+int paragraph_buffer_len = INITIAL_PARAGRAPH_SPACE;
+
+/* 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;
+
+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 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\
+ --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\
+ --reference-limit=NUM warn about at most NUM references (default %d).\n\
+ -v, --verbose explain what is being done.\n\
+ --version display version information and exit.\n"),
+ max_error_level, reference_warning_limit);
+ 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 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 (directory if split HTML),\n\
+"));
+
+ printf (_("\
+Options for Info and plain text:\n\
+ --enable-encoding output accented and special characters in\n\
+ Info output based on @documentencoding.\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\n\
+ in which they are defined (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\
+"));
+
+ 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);
+}
+
+struct option long_options[] =
+{
+ { "commands-in-node-names", 0, &expensive_validation, 1 },
+ { "css-include", 1, 0, 'C' },
+ { "docbook", 0, 0, 'd' },
+ { "enable-encoding", 0, &enable_encoding, 1 },
+ { "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 },
+ { "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'},
+ { "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 */
+ 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 '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 '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 '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': /* --reference-limit */
+ if (sscanf (optarg, "%d", &reference_warning_limit) != 1)
+ {
+ fprintf (stderr,
+ _("%s: %s arg must be numeric, not `%s'.\n"),
+ progname, "--reference-limit", optarg);
+ usage (1);
+ }
+ 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 ("");
+ puts ("Copyright (C) 2004 Free Software Foundation, Inc.");
+ printf (_("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"));
+ 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)
+ convert_from_file (argv[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 hueristic. */
+ 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 file 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][0] && strrchr (filename, '.'))
+ {
+ fs_error (filename);
+ free (filename);
+ return;
+ }
+ }
+
+ if (!suffixes[i])
+ {
+ fs_error (name);
+ free (filename);
+ return;
+ }
+
+ input_filename = filename;
+
+ 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 (xml && !docbook)
+ xml_begin_document (filename_part (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;
+ }
+
+ /* 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++;
+ }
+
+ /* html fixxme: should output this as trailer on first page. */
+ if (!no_headers && !html && !xml)
+ add_word_args (_("This is %s, produced by makeinfo version %s from %s.\n"),
+ output_filename, VERSION, input_filename);
+
+ close_paragraph ();
+
+ 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 ();
+ }
+
+ /* maybe we want local variables in info output. */
+ {
+ char *trailer = info_trailer ();
+ if (!xml && !docbook && trailer)
+ {
+ if (html)
+ insert_string ("<!--");
+ insert_string (trailer);
+ free (trailer);
+ if (html)
+ insert_string ("\n-->\n");
+ }
+ }
+
+ /* Write stuff makeinfo generates after @bye, ie. info_trailer. */
+ flush_output ();
+
+ if (output_stream != stdout)
+ fclose (output_stream);
+
+ /* 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);
+ }
+
+ 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);
+ }
+ }
+ 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;
+}
+
+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)
+{
+ free (output_paragraph);
+ output_paragraph = xmalloc (paragraph_buffer_len);
+ output_paragraph[0] = 0;
+ output_paragraph_offset = 0;
+ output_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[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 = command ? xstrdup (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;
+ }
+ }
+}
+
+static int
+get_char_len (int character)
+{
+ /* Return the printed length of the character. */
+ int len;
+
+ switch (character)
+ {
+ case '\t':
+ len = (output_column + 8) & 0xf7;
+ if (len > fill_column)
+ len = fill_column - output_column;
+ else
+ len = len - output_column;
+ break;
+
+ case '\n':
+ len = fill_column - output_column;
+ break;
+
+ default:
+ /* ASCII control characters appear as two characters in the output
+ (e.g., ^A). But characters with the high bit set are just one
+ on suitable terminals, so don't count them as two for line
+ breaking purposes. */
+ if (0 <= character && character < ' ')
+ len = 2;
+ else
+ len = 1;
+ }
+ return len;
+}
+
+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;
+}
+
+
+/* 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')
+ {
+ must_start_paragraph = 0;
+ line_already_broken = 0; /* The line is no longer broken. */
+ if (current_indent > output_column)
+ {
+ indent (current_indent - output_column);
+ output_column = current_indent;
+ }
+ }
+
+ 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 = META (' '); /* unmeta-d 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 ();
+ }
+
+ output_column = 0;
+
+ if (!no_indent && paragraph_is_open)
+ indent (output_column = current_indent);
+ break;
+ }
+ else if (end_of_sentence_p ())
+ /* CHARACTER is newline, and filling is enabled. */
+ {
+ insert (' ');
+ output_column++;
+ 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 (' ');
+ output_column++;
+ }
+ break;
+
+ default: /* not at newline */
+ {
+ int len = get_char_len (character);
+ int suppress_insert = 0;
+
+ if ((character == ' ') && (last_char_was_newline))
+ {
+ if (!paragraph_is_open)
+ {
+ pending_indent++;
+ return;
+ }
+ }
+
+ /* This is sad, but it seems 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 html <head> `just in time'. */
+ if ((executing_macro || !executing_string)
+ && !only_macro_expansion
+ && html && !html_output_head_p && !defining_copying ())
+ html_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_column += len;
+ if (output_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);
+ }
+ output_column = 0;
+ while (temp < output_paragraph_offset)
+ output_column +=
+ get_char_len (output_paragraph[temp++]);
+ output_column += len;
+ 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)
+ {
+ output_column = 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. This might be problematic, since the
+ 0x80 character may be used in 8-bit character sets. Sigh.
+ In any case, 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] & meta_character_bit))
+ {
+ int temp = UNMETA (output_paragraph[i]);
+ if (temp == ' ')
+ output_paragraph[i] &= 0x7f;
+ }
+ }
+
+ fwrite (output_paragraph, 1, output_paragraph_offset, output_stream);
+
+ output_position += output_paragraph_offset;
+ 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
+ {
+ /* 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. */
+ if (current_indent < output_column)
+ kill_self_indent (output_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 seperation. We have <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;
+ output_column = 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. */
+static void
+do_flush_right_indentation (void)
+{
+ char *temp;
+ int temp_len;
+
+ kill_self_indent (-1);
+
+ if (output_paragraph[0] != '\n')
+ {
+ output_paragraph[output_paragraph_offset] = 0;
+
+ if (output_paragraph_offset < fill_column)
+ {
+ int i;
+
+ if (fill_column >= paragraph_buffer_len)
+ output_paragraph =
+ xrealloc (output_paragraph,
+ (paragraph_buffer_len += fill_column));
+
+ temp_len = strlen ((char *)output_paragraph);
+ temp = xmalloc (temp_len + 1);
+ memcpy (temp, (char *)output_paragraph, temp_len);
+
+ for (i = 0; i < fill_column - output_paragraph_offset; i++)
+ output_paragraph[i] = ' ';
+
+ memcpy ((char *)output_paragraph + i, temp, temp_len);
+ free (temp);
+ output_paragraph_offset = fill_column;
+ 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)
+ {
+ 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;
+
+ if (amount_to_indent >= output_column)
+ {
+ amount_to_indent -= output_column;
+ indent (amount_to_indent);
+ output_column += amount_to_indent;
+ }
+ }
+ }
+ 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 where to start. */
+int
+search_forward (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;
+}
+
+/* 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;
+ char *fullname = xmalloc (strlen (name_arg)
+ + (ext_arg && *ext_arg ? strlen (ext_arg) + 1: 4) + 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) {
+ 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
+ { /* Try to open foo.EXT or foo.txt. */
+ FILE *image_file;
+ char *txtpath = NULL;
+ char *txtname = xmalloc (strlen (name_arg)
+ + (ext_arg && *ext_arg
+ ? strlen (ext_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)
+ add_word_args (" alt=\"%s\"", alt_arg);
+ }
+
+ 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 (0);
+
+ if (arglist)
+ {
+ if (array_len (arglist) > 1)
+ {
+ if ((strcasecmp (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_column -= end_pos - start_pos;
+ 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 ();
+}
+
+/* FIXME: this is an arbitrary limit. */
+#define EXECUTE_STRING_MAX 16*1024
+
+/* 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;
+
+ 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;
+
+ 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;
+ int saved_output_column = output_column;
+
+ /* 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;
+ output_column = saved_output_column;
+
+ 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;
+}
diff --git a/macros/texinfo/contrib/texinfo-hu/texinfo/makeinfo/makeinfo.h b/macros/texinfo/contrib/texinfo-hu/texinfo/makeinfo/makeinfo.h
new file mode 100644
index 0000000000..de4d423708
--- /dev/null
+++ b/macros/texinfo/contrib/texinfo-hu/texinfo/makeinfo/makeinfo.h
@@ -0,0 +1,386 @@
+/* makeinfo.h -- declarations for Makeinfo.
+ $Id: makeinfo.h,v 1.17 2004/11/30 02:03:23 karl Exp $
+
+ Copyright (C) 1996, 1997, 1998, 1999, 2000, 2001, 2002, 2003, 2004 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., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
+
+ 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. */
+DECLARE (unsigned char *, output_paragraph, NULL);
+
+/* Offset into OUTPUT_PARAGRAPH. */
+DECLARE (int, output_paragraph_offset, 0);
+
+/* The output paragraph "cursor" horizontal position. */
+DECLARE (int, output_column, 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 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 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 true 8-bit output for Info and plain text.
+ (--enable-encoding) */
+DECLARE (int, enable_encoding, 0);
+
+/* 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);
+
+/* 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);
+
+/* Maximum number of references to a single node before complaining.
+ (--reference-limit) */
+DECLARE (int, reference_warning_limit, 1000);
+
+/* 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 control_character_bit 0x40 /* %01000000, must be off. */
+#define meta_character_bit 0x080/* %10000000, must be on. */
+#define CTL(c) ((c) & (~control_character_bit))
+#define UNCTL(c) coerce_to_upper(((c)|control_character_bit))
+#define META(c) ((c) | (meta_character_bit))
+#define UNMETA(c) ((c) & (~meta_character_bit))
+
+#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) (isalnum (ch))
+
+#define COMMAND_PREFIX '@'
+
+#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;
+
+/* 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),
+ add_html_elt (char *string);
+
+extern int get_until (char *match, char **string),
+ set_paragraph_indent (char *string),
+ self_delimiting (int character),
+ search_forward (char *string, int from),
+ search_forward_until_pos (char *string, int from, int end_pos),
+ next_nonwhitespace_character (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/macros/texinfo/contrib/texinfo-hu/texinfo/makeinfo/multi.c b/macros/texinfo/contrib/texinfo-hu/texinfo/makeinfo/multi.c
new file mode 100644
index 0000000000..06c548fb5e
--- /dev/null
+++ b/macros/texinfo/contrib/texinfo-hu/texinfo/makeinfo/multi.c
@@ -0,0 +1,638 @@
+/* multi.c -- multiple-column tables (@multitable) for makeinfo.
+ $Id: multi.c,v 1.8 2004/04/11 17:56:47 karl Exp $
+
+ Copyright (C) 1996, 1997, 1998, 1999, 2000, 2001, 2002, 2004 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., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
+
+ Originally written by phr@gnu.org (Paul Rubin). */
+
+#include "system.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 @@ */
+struct env
+{
+ unsigned char *output_paragraph;
+ int output_paragraph_offset;
+ int meta_char_pos;
+ int output_column;
+ int paragraph_is_open;
+ 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->meta_char_pos = meta_char_pos;
+ e->output_column = output_column;
+ e->paragraph_is_open = paragraph_is_open;
+ 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;
+ meta_char_pos = e->meta_char_pos;
+ output_column = e->output_column;
+ paragraph_is_open = e->paragraph_is_open;
+ 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[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++) {
+ if (envs[i].output_paragraph_offset)
+ while (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));
+ }
+ offset[i] += j + 1; /* skip last text plus skip the newline */
+
+ /* Do not output trailing blanks if we're in the last column and
+ there will be no trailing |. */
+ if (i < last_column && !vsep)
+ for (; j <= envs[i].fill_column; j++)
+ out_char (' ');
+ if (vsep)
+ out_char ('|'); /* draw column separator */
+ }
+ 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/macros/texinfo/contrib/texinfo-hu/texinfo/makeinfo/multi.h b/macros/texinfo/contrib/texinfo-hu/texinfo/makeinfo/multi.h
new file mode 100644
index 0000000000..64311e0f2b
--- /dev/null
+++ b/macros/texinfo/contrib/texinfo-hu/texinfo/makeinfo/multi.h
@@ -0,0 +1,28 @@
+/* multi.h -- declarations for multi.c.
+ $Id: multi.h,v 1.1 2004/04/11 17:56:47 karl Exp $
+
+ Copyright (C) 2004 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., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
+ */
+
+#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/macros/texinfo/contrib/texinfo-hu/texinfo/makeinfo/node.c b/macros/texinfo/contrib/texinfo-hu/texinfo/makeinfo/node.c
new file mode 100644
index 0000000000..07a37fede2
--- /dev/null
+++ b/macros/texinfo/contrib/texinfo-hu/texinfo/makeinfo/node.c
@@ -0,0 +1,1943 @@
+/* node.c -- nodes for Texinfo.
+ $Id: node.c,v 1.27 2004/12/20 23:56:07 karl Exp $
+
+ Copyright (C) 1998, 1999, 2000, 2001, 2002, 2003, 2004 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., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. */
+
+#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 (strcasecmp (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 && 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 || strcasecmp (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_document (current_output_filename);
+ 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, 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
+ && strcasecmp (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");
+ html_output_head_p = 0; /* so that we generate HTML preamble */
+ html_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");
+ html_output_head_p = 0; /* so that we generate HTML preamble */
+ html_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? */
+ || strcasecmp (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");
+ /* The <p> avoids the links area running on with old Lynxen. */
+ add_word_args ("<p>%s\n", splitting ? "" : "<hr>");
+
+ /* 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);
+
+ if (next)
+ {
+ tem = expansion (next, 0);
+ add_word ((char *) _("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 *) _("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 *) _("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)
+ 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)
+ 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)
+ {
+ xml_insert_element_with_attribute (ANCHOR, START, "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 _("Menu");
+ case followed_reference:
+ return _("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, _("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, _("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)
+ && strcasecmp (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, _("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;
+ }
+
+ /* Special hack. If the node in question appears to have
+ been referenced more than REFERENCE_WARNING_LIMIT times,
+ give a warning. */
+ if (tags->touched > reference_warning_limit)
+ {
+ input_filename = tags->filename;
+ line_number = tags->line_no;
+ warning (_("node `%s' has been referenced %d times"),
+ tags->node, tags->touched);
+ }
+
+ 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 (strcasecmp (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/macros/texinfo/contrib/texinfo-hu/texinfo/makeinfo/node.h b/macros/texinfo/contrib/texinfo-hu/texinfo/makeinfo/node.h
new file mode 100644
index 0000000000..766c503456
--- /dev/null
+++ b/macros/texinfo/contrib/texinfo-hu/texinfo/makeinfo/node.h
@@ -0,0 +1,129 @@
+/* node.h -- declarations for Node.
+ $Id: node.h,v 1.2 2004/04/11 17:56:47 karl Exp $
+
+ Copyright (C) 1996, 1997, 1998, 1999, 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 2, or (at your option)
+ any later version.
+
+ This program is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ GNU General Public License for more details.
+
+ You should have received a copy of the GNU General Public License
+ along with this program; if not, write to the Free Software
+ Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
+
+ 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/macros/texinfo/contrib/texinfo-hu/texinfo/makeinfo/sectioning.c b/macros/texinfo/contrib/texinfo-hu/texinfo/makeinfo/sectioning.c
new file mode 100644
index 0000000000..ce32aeb3a7
--- /dev/null
+++ b/macros/texinfo/contrib/texinfo-hu/texinfo/makeinfo/sectioning.c
@@ -0,0 +1,831 @@
+/* sectioning.c -- for @chapter, @section, ..., @contents ...
+ $Id: sectioning.c,v 1.25 2004/07/05 22:23:23 karl Exp $
+
+ Copyright (C) 1999, 2001, 2002, 2003, 2004 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., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
+
+ 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 (starting_pos, 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 (starting_pos + sizeof (a_name) - 1,
+ 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 (starting_pos, 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/macros/texinfo/contrib/texinfo-hu/texinfo/makeinfo/sectioning.h b/macros/texinfo/contrib/texinfo-hu/texinfo/makeinfo/sectioning.h
new file mode 100644
index 0000000000..8c3f220165
--- /dev/null
+++ b/macros/texinfo/contrib/texinfo-hu/texinfo/makeinfo/sectioning.h
@@ -0,0 +1,103 @@
+/* sectioning.h -- all related stuff @chapter, @section... @contents
+ $Id: sectioning.h,v 1.5 2004/04/11 17:56:47 karl Exp $
+
+ Copyright (C) 1999, 2003 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., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
+
+ 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/macros/texinfo/contrib/texinfo-hu/texinfo/makeinfo/tests/Makefile.am b/macros/texinfo/contrib/texinfo-hu/texinfo/makeinfo/tests/Makefile.am
new file mode 100644
index 0000000000..6e58451b06
--- /dev/null
+++ b/macros/texinfo/contrib/texinfo-hu/texinfo/makeinfo/tests/Makefile.am
@@ -0,0 +1,36 @@
+# $Id: Makefile.am,v 1.5 2004/04/11 17:56:47 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 \
+ 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 \
+ top \
+ twofiles
+
+noinst_SCRIPTS = $(TESTS)
+
+EXTRA_DIST = $(noinst_SCRIPTS) \
+ accent.txi accentenc.txi accent-text.txi \
+ cond.txi copying.txi \
+ defxcond.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 \
+ top.txi # top2.txi
diff --git a/macros/texinfo/contrib/texinfo-hu/texinfo/makeinfo/tests/Makefile.in b/macros/texinfo/contrib/texinfo-hu/texinfo/makeinfo/tests/Makefile.in
new file mode 100644
index 0000000000..35a0d9f9a3
--- /dev/null
+++ b/macros/texinfo/contrib/texinfo-hu/texinfo/makeinfo/tests/Makefile.in
@@ -0,0 +1,447 @@
+# Makefile.in generated by automake 1.9.4 from Makefile.am.
+# @configure_input@
+
+# Copyright (C) 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002,
+# 2003, 2004 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 2004/04/11 17:56:47 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.
+
+srcdir = @srcdir@
+top_srcdir = @top_srcdir@
+VPATH = @srcdir@
+pkgdatadir = $(datadir)/@PACKAGE@
+pkglibdir = $(libdir)/@PACKAGE@
+pkgincludedir = $(includedir)/@PACKAGE@
+top_builddir = ../..
+am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd
+INSTALL = @INSTALL@
+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)/m4/codeset.m4 \
+ $(top_srcdir)/m4/gettext.m4 $(top_srcdir)/m4/glibc21.m4 \
+ $(top_srcdir)/m4/iconv.m4 $(top_srcdir)/m4/intdiv0.m4 \
+ $(top_srcdir)/m4/intmax.m4 $(top_srcdir)/m4/inttypes-pri.m4 \
+ $(top_srcdir)/m4/inttypes.m4 $(top_srcdir)/m4/inttypes_h.m4 \
+ $(top_srcdir)/m4/lcmessage.m4 $(top_srcdir)/m4/lib-ld.m4 \
+ $(top_srcdir)/m4/lib-link.m4 $(top_srcdir)/m4/lib-prefix.m4 \
+ $(top_srcdir)/m4/longdouble.m4 $(top_srcdir)/m4/longlong.m4 \
+ $(top_srcdir)/m4/mkstemp.m4 $(top_srcdir)/m4/nls.m4 \
+ $(top_srcdir)/m4/onceonly_2_57.m4 $(top_srcdir)/m4/po.m4 \
+ $(top_srcdir)/m4/printf-posix.m4 $(top_srcdir)/m4/progtest.m4 \
+ $(top_srcdir)/m4/signed.m4 $(top_srcdir)/m4/size_max.m4 \
+ $(top_srcdir)/m4/stdint_h.m4 $(top_srcdir)/m4/strcase.m4 \
+ $(top_srcdir)/m4/uintmax_t.m4 $(top_srcdir)/m4/ulonglong.m4 \
+ $(top_srcdir)/m4/wchar_t.m4 $(top_srcdir)/m4/wint_t.m4 \
+ $(top_srcdir)/m4/xsize.m4 $(top_srcdir)/configure.ac
+am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \
+ $(ACLOCAL_M4)
+mkinstalldirs = $(SHELL) $(top_srcdir)/mkinstalldirs
+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@
+AMDEP_FALSE = @AMDEP_FALSE@
+AMDEP_TRUE = @AMDEP_TRUE@
+AMTAR = @AMTAR@
+AUTOCONF = @AUTOCONF@
+AUTOHEADER = @AUTOHEADER@
+AUTOMAKE = @AUTOMAKE@
+AWK = @AWK@
+BUILD_INCLUDED_LIBINTL = @BUILD_INCLUDED_LIBINTL@
+CATOBJEXT = @CATOBJEXT@
+CC = @CC@
+CCDEPMODE = @CCDEPMODE@
+CFLAGS = @CFLAGS@
+CPP = @CPP@
+CPPFLAGS = @CPPFLAGS@
+CYGPATH_W = @CYGPATH_W@
+DATADIRNAME = @DATADIRNAME@
+DEFS = @DEFS@
+DEPDIR = @DEPDIR@
+ECHO_C = @ECHO_C@
+ECHO_N = @ECHO_N@
+ECHO_T = @ECHO_T@
+EGREP = @EGREP@
+EXEEXT = @EXEEXT@
+GENCAT = @GENCAT@
+GLIBC21 = @GLIBC21@
+GMSGFMT = @GMSGFMT@
+HAVE_ASPRINTF = @HAVE_ASPRINTF@
+HAVE_POSIX_PRINTF = @HAVE_POSIX_PRINTF@
+HAVE_SNPRINTF = @HAVE_SNPRINTF@
+HAVE_WPRINTF = @HAVE_WPRINTF@
+HELP2MAN = @HELP2MAN@
+INSTALL_DATA = @INSTALL_DATA@
+INSTALL_PROGRAM = @INSTALL_PROGRAM@
+INSTALL_SCRIPT = @INSTALL_SCRIPT@
+INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@
+INSTALL_WARNINGS_FALSE = @INSTALL_WARNINGS_FALSE@
+INSTALL_WARNINGS_TRUE = @INSTALL_WARNINGS_TRUE@
+INSTOBJEXT = @INSTOBJEXT@
+INTLBISON = @INTLBISON@
+INTLLIBS = @INTLLIBS@
+INTLOBJS = @INTLOBJS@
+INTL_LIBTOOL_SUFFIX_PREFIX = @INTL_LIBTOOL_SUFFIX_PREFIX@
+LDFLAGS = @LDFLAGS@
+LIBICONV = @LIBICONV@
+LIBINTL = @LIBINTL@
+LIBOBJS = @LIBOBJS@
+LIBS = @LIBS@
+LTLIBICONV = @LTLIBICONV@
+LTLIBINTL = @LTLIBINTL@
+LTLIBOBJS = @LTLIBOBJS@
+MAINT = @MAINT@
+MAINTAINER_MODE_FALSE = @MAINTAINER_MODE_FALSE@
+MAINTAINER_MODE_TRUE = @MAINTAINER_MODE_TRUE@
+MAKEINFO = @MAKEINFO@
+MKINSTALLDIRS = @MKINSTALLDIRS@
+MSGFMT = @MSGFMT@
+MSGMERGE = @MSGMERGE@
+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@
+RANLIB = @RANLIB@
+SET_MAKE = @SET_MAKE@
+SHELL = @SHELL@
+STRIP = @STRIP@
+TERMLIBS = @TERMLIBS@
+TOOLS_ONLY_FALSE = @TOOLS_ONLY_FALSE@
+TOOLS_ONLY_TRUE = @TOOLS_ONLY_TRUE@
+USE_INCLUDED_LIBINTL = @USE_INCLUDED_LIBINTL@
+USE_NLS = @USE_NLS@
+VERSION = @VERSION@
+XGETTEXT = @XGETTEXT@
+ac_ct_CC = @ac_ct_CC@
+ac_ct_RANLIB = @ac_ct_RANLIB@
+ac_ct_STRIP = @ac_ct_STRIP@
+am__fastdepCC_FALSE = @am__fastdepCC_FALSE@
+am__fastdepCC_TRUE = @am__fastdepCC_TRUE@
+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@
+datadir = @datadir@
+exec_prefix = @exec_prefix@
+host = @host@
+host_alias = @host_alias@
+host_cpu = @host_cpu@
+host_os = @host_os@
+host_vendor = @host_vendor@
+includedir = @includedir@
+infodir = @infodir@
+install_sh = @install_sh@
+libdir = @libdir@
+libexecdir = @libexecdir@
+localstatedir = @localstatedir@
+mandir = @mandir@
+mkdir_p = @mkdir_p@
+native_tools = @native_tools@
+oldincludedir = @oldincludedir@
+prefix = @prefix@
+program_transform_name = @program_transform_name@
+sbindir = @sbindir@
+sharedstatedir = @sharedstatedir@
+sysconfdir = @sysconfdir@
+target_alias = @target_alias@
+TESTS = accent accentenc \
+ cond \
+ copying \
+ defxcond \
+ 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 \
+ top \
+ twofiles
+
+noinst_SCRIPTS = $(TESTS)
+EXTRA_DIST = $(noinst_SCRIPTS) \
+ accent.txi accentenc.txi accent-text.txi \
+ cond.txi copying.txi \
+ defxcond.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 \
+ 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
+uninstall-info-am:
+tags: TAGS
+TAGS:
+
+ctags: CTAGS
+CTAGS:
+
+
+check-TESTS: $(TESTS)
+ @failed=0; all=0; xfail=0; xpass=0; skip=0; \
+ 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 \
+ *" $$tst "*) \
+ 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 \
+ *" $$tst "*) \
+ 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)'; for file in $$list; do \
+ case $$file in \
+ $(srcdir)/*) file=`echo "$$file" | sed "s|^$$srcdirstrip/||"`;; \
+ $(top_srcdir)/*) file=`echo "$$file" | sed "s|^$$topsrcdirstrip/|$(top_builddir)/|"`;; \
+ esac; \
+ if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \
+ dir=`echo "$$file" | sed -e 's,/[^/]*$$,,'`; \
+ if test "$$dir" != "$$file" && test "$$dir" != "."; then \
+ dir="/$$dir"; \
+ $(mkdir_p) "$(distdir)$$dir"; \
+ else \
+ dir=''; \
+ fi; \
+ if test -d $$d/$$file; then \
+ 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-exec-am:
+
+install-info: install-info-am
+
+install-man:
+
+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: uninstall-info-am
+
+.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-exec install-exec-am install-info install-info-am \
+ install-man install-strip installcheck installcheck-am \
+ installdirs maintainer-clean maintainer-clean-generic \
+ mostlyclean mostlyclean-generic pdf pdf-am ps ps-am uninstall \
+ uninstall-am uninstall-info-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/macros/texinfo/contrib/texinfo-hu/texinfo/makeinfo/tests/accent b/macros/texinfo/contrib/texinfo-hu/texinfo/makeinfo/tests/accent
new file mode 100644
index 0000000000..16c69e8e0d
--- /dev/null
+++ b/macros/texinfo/contrib/texinfo-hu/texinfo/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/macros/texinfo/contrib/texinfo-hu/texinfo/makeinfo/tests/accent-text.txi b/macros/texinfo/contrib/texinfo-hu/texinfo/makeinfo/tests/accent-text.txi
new file mode 100644
index 0000000000..4d9ef3ca58
--- /dev/null
+++ b/macros/texinfo/contrib/texinfo-hu/texinfo/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/macros/texinfo/contrib/texinfo-hu/texinfo/makeinfo/tests/accent.txi b/macros/texinfo/contrib/texinfo-hu/texinfo/makeinfo/tests/accent.txi
new file mode 100644
index 0000000000..3c52a90bde
--- /dev/null
+++ b/macros/texinfo/contrib/texinfo-hu/texinfo/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/macros/texinfo/contrib/texinfo-hu/texinfo/makeinfo/tests/accentenc b/macros/texinfo/contrib/texinfo-hu/texinfo/makeinfo/tests/accentenc
new file mode 100644
index 0000000000..be842c368b
--- /dev/null
+++ b/macros/texinfo/contrib/texinfo-hu/texinfo/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/macros/texinfo/contrib/texinfo-hu/texinfo/makeinfo/tests/accentenc.txi b/macros/texinfo/contrib/texinfo-hu/texinfo/makeinfo/tests/accentenc.txi
new file mode 100644
index 0000000000..b6e209c64f
--- /dev/null
+++ b/macros/texinfo/contrib/texinfo-hu/texinfo/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/macros/texinfo/contrib/texinfo-hu/texinfo/makeinfo/tests/cond b/macros/texinfo/contrib/texinfo-hu/texinfo/makeinfo/tests/cond
new file mode 100644
index 0000000000..24a1cd4cb3
--- /dev/null
+++ b/macros/texinfo/contrib/texinfo-hu/texinfo/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 ' text.' cond.out | wc -l` -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 ' text.' cond.out | wc -l` -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 ' text.' cond.out | wc -l` -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 ' text.' cond.out | wc -l` -eq 5 || exit 3
+
+rm -f cond.out cond.info
diff --git a/macros/texinfo/contrib/texinfo-hu/texinfo/makeinfo/tests/cond.txi b/macros/texinfo/contrib/texinfo-hu/texinfo/makeinfo/tests/cond.txi
new file mode 100644
index 0000000000..b60242322d
--- /dev/null
+++ b/macros/texinfo/contrib/texinfo-hu/texinfo/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/macros/texinfo/contrib/texinfo-hu/texinfo/makeinfo/tests/copying b/macros/texinfo/contrib/texinfo-hu/texinfo/makeinfo/tests/copying
new file mode 100644
index 0000000000..4fa77d607d
--- /dev/null
+++ b/macros/texinfo/contrib/texinfo-hu/texinfo/makeinfo/tests/copying
@@ -0,0 +1,13 @@
+#!/bin/sh
+# $Id: copying,v 1.2 2004/04/20 13:26:00 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/macros/texinfo/contrib/texinfo-hu/texinfo/makeinfo/tests/copying.txi b/macros/texinfo/contrib/texinfo-hu/texinfo/makeinfo/tests/copying.txi
new file mode 100644
index 0000000000..3b83679505
--- /dev/null
+++ b/macros/texinfo/contrib/texinfo-hu/texinfo/makeinfo/tests/copying.txi
@@ -0,0 +1,4 @@
+\input texinfo @c -*-texinfo-*-
+@copying
+@end copying
+@bye
diff --git a/macros/texinfo/contrib/texinfo-hu/texinfo/makeinfo/tests/defxcond b/macros/texinfo/contrib/texinfo-hu/texinfo/makeinfo/tests/defxcond
new file mode 100644
index 0000000000..e48986785d
--- /dev/null
+++ b/macros/texinfo/contrib/texinfo-hu/texinfo/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/macros/texinfo/contrib/texinfo-hu/texinfo/makeinfo/tests/defxcond.txi b/macros/texinfo/contrib/texinfo-hu/texinfo/makeinfo/tests/defxcond.txi
new file mode 100644
index 0000000000..a7af9e21e7
--- /dev/null
+++ b/macros/texinfo/contrib/texinfo-hu/texinfo/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/macros/texinfo/contrib/texinfo-hu/texinfo/makeinfo/tests/html-docdesc b/macros/texinfo/contrib/texinfo-hu/texinfo/makeinfo/tests/html-docdesc
new file mode 100644
index 0000000000..59df74e411
--- /dev/null
+++ b/macros/texinfo/contrib/texinfo-hu/texinfo/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/macros/texinfo/contrib/texinfo-hu/texinfo/makeinfo/tests/html-docdesc.txi b/macros/texinfo/contrib/texinfo-hu/texinfo/makeinfo/tests/html-docdesc.txi
new file mode 100644
index 0000000000..0b328dacd2
--- /dev/null
+++ b/macros/texinfo/contrib/texinfo-hu/texinfo/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/macros/texinfo/contrib/texinfo-hu/texinfo/makeinfo/tests/html-extrali b/macros/texinfo/contrib/texinfo-hu/texinfo/makeinfo/tests/html-extrali
new file mode 100644
index 0000000000..c3ec9ca08d
--- /dev/null
+++ b/macros/texinfo/contrib/texinfo-hu/texinfo/makeinfo/tests/html-extrali
@@ -0,0 +1,15 @@
+#!/bin/sh
+# Test no extra <li> from @menu.
+
+: ${srcdir=.}
+
+li_count=`../makeinfo --no-split --html -o - $srcdir/html-extrali.txi 2>/dev/null \
+| grep '<li>' \
+| wc -l`
+
+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/macros/texinfo/contrib/texinfo-hu/texinfo/makeinfo/tests/html-extrali.txi b/macros/texinfo/contrib/texinfo-hu/texinfo/makeinfo/tests/html-extrali.txi
new file mode 100644
index 0000000000..d0c17e9878
--- /dev/null
+++ b/macros/texinfo/contrib/texinfo-hu/texinfo/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/macros/texinfo/contrib/texinfo-hu/texinfo/makeinfo/tests/html-manuals b/macros/texinfo/contrib/texinfo-hu/texinfo/makeinfo/tests/html-manuals
new file mode 100644
index 0000000000..2ba24f34a4
--- /dev/null
+++ b/macros/texinfo/contrib/texinfo-hu/texinfo/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/macros/texinfo/contrib/texinfo-hu/texinfo/makeinfo/tests/html-min b/macros/texinfo/contrib/texinfo-hu/texinfo/makeinfo/tests/html-min
new file mode 100644
index 0000000000..948071a991
--- /dev/null
+++ b/macros/texinfo/contrib/texinfo-hu/texinfo/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/macros/texinfo/contrib/texinfo-hu/texinfo/makeinfo/tests/html-min.txi b/macros/texinfo/contrib/texinfo-hu/texinfo/makeinfo/tests/html-min.txi
new file mode 100644
index 0000000000..116519e061
--- /dev/null
+++ b/macros/texinfo/contrib/texinfo-hu/texinfo/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/macros/texinfo/contrib/texinfo-hu/texinfo/makeinfo/tests/html-para b/macros/texinfo/contrib/texinfo-hu/texinfo/makeinfo/tests/html-para
new file mode 100644
index 0000000000..a9ea2b5a9b
--- /dev/null
+++ b/macros/texinfo/contrib/texinfo-hu/texinfo/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/macros/texinfo/contrib/texinfo-hu/texinfo/makeinfo/tests/html-para.txi b/macros/texinfo/contrib/texinfo-hu/texinfo/makeinfo/tests/html-para.txi
new file mode 100644
index 0000000000..c6e34fd251
--- /dev/null
+++ b/macros/texinfo/contrib/texinfo-hu/texinfo/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/macros/texinfo/contrib/texinfo-hu/texinfo/makeinfo/tests/html-title b/macros/texinfo/contrib/texinfo-hu/texinfo/makeinfo/tests/html-title
new file mode 100644
index 0000000000..54badd51fa
--- /dev/null
+++ b/macros/texinfo/contrib/texinfo-hu/texinfo/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/macros/texinfo/contrib/texinfo-hu/texinfo/makeinfo/tests/html-title.txi b/macros/texinfo/contrib/texinfo-hu/texinfo/makeinfo/tests/html-title.txi
new file mode 100644
index 0000000000..2e2f25c579
--- /dev/null
+++ b/macros/texinfo/contrib/texinfo-hu/texinfo/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/macros/texinfo/contrib/texinfo-hu/texinfo/makeinfo/tests/html-top b/macros/texinfo/contrib/texinfo-hu/texinfo/makeinfo/tests/html-top
new file mode 100644
index 0000000000..038404a49d
--- /dev/null
+++ b/macros/texinfo/contrib/texinfo-hu/texinfo/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/macros/texinfo/contrib/texinfo-hu/texinfo/makeinfo/tests/html-top.txi b/macros/texinfo/contrib/texinfo-hu/texinfo/makeinfo/tests/html-top.txi
new file mode 100644
index 0000000000..ade7214b0c
--- /dev/null
+++ b/macros/texinfo/contrib/texinfo-hu/texinfo/makeinfo/tests/html-top.txi
@@ -0,0 +1,7 @@
+\input texinfo
+@setfilename top.info
+
+@node start
+@top
+
+@bye
diff --git a/macros/texinfo/contrib/texinfo-hu/texinfo/makeinfo/tests/incl-incl.txi b/macros/texinfo/contrib/texinfo-hu/texinfo/makeinfo/tests/incl-incl.txi
new file mode 100644
index 0000000000..4efea48431
--- /dev/null
+++ b/macros/texinfo/contrib/texinfo-hu/texinfo/makeinfo/tests/incl-incl.txi
@@ -0,0 +1 @@
+This is the @emph{included} file (include-value2.txi).
diff --git a/macros/texinfo/contrib/texinfo-hu/texinfo/makeinfo/tests/include-value b/macros/texinfo/contrib/texinfo-hu/texinfo/makeinfo/tests/include-value
new file mode 100644
index 0000000000..2c4ca60eff
--- /dev/null
+++ b/macros/texinfo/contrib/texinfo-hu/texinfo/makeinfo/tests/include-value
@@ -0,0 +1,22 @@
+#!/bin/sh
+# $Id: include-value,v 1.3 2004/04/11 17:56:47 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 _included_ include-value.info | wc -l`
+ test $count = 3 || exit_status=`expr $exit_status + 1`
+
+ count=`grep '{included}' include-value.info | wc -l`
+ test $count = 3 || exit_status=`expr $exit_status + 1`
+fi
+
+rm -f include-value.info
+exit $exit_status
diff --git a/macros/texinfo/contrib/texinfo-hu/texinfo/makeinfo/tests/include-value.txi b/macros/texinfo/contrib/texinfo-hu/texinfo/makeinfo/tests/include-value.txi
new file mode 100644
index 0000000000..1c7f9b93d1
--- /dev/null
+++ b/macros/texinfo/contrib/texinfo-hu/texinfo/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/macros/texinfo/contrib/texinfo-hu/texinfo/makeinfo/tests/macro-at b/macros/texinfo/contrib/texinfo-hu/texinfo/makeinfo/tests/macro-at
new file mode 100644
index 0000000000..a9dfdab3be
--- /dev/null
+++ b/macros/texinfo/contrib/texinfo-hu/texinfo/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/macros/texinfo/contrib/texinfo-hu/texinfo/makeinfo/tests/macro-at.txi b/macros/texinfo/contrib/texinfo-hu/texinfo/makeinfo/tests/macro-at.txi
new file mode 100644
index 0000000000..24b9101345
--- /dev/null
+++ b/macros/texinfo/contrib/texinfo-hu/texinfo/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/macros/texinfo/contrib/texinfo-hu/texinfo/makeinfo/tests/menu-whitespace b/macros/texinfo/contrib/texinfo-hu/texinfo/makeinfo/tests/menu-whitespace
new file mode 100644
index 0000000000..a01a38d5c0
--- /dev/null
+++ b/macros/texinfo/contrib/texinfo-hu/texinfo/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/macros/texinfo/contrib/texinfo-hu/texinfo/makeinfo/tests/menu-whitespace.txi b/macros/texinfo/contrib/texinfo-hu/texinfo/makeinfo/tests/menu-whitespace.txi
new file mode 100644
index 0000000000..fd1c39f7eb
--- /dev/null
+++ b/macros/texinfo/contrib/texinfo-hu/texinfo/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/macros/texinfo/contrib/texinfo-hu/texinfo/makeinfo/tests/no-headers b/macros/texinfo/contrib/texinfo-hu/texinfo/makeinfo/tests/no-headers
new file mode 100644
index 0000000000..e0718713f3
--- /dev/null
+++ b/macros/texinfo/contrib/texinfo-hu/texinfo/makeinfo/tests/no-headers
@@ -0,0 +1,9 @@
+#!/bin/sh
+# Test that info.texi works with --no-headers (this includes node
+# pointer defaulting).
+
+unset TEXINFO_OUTPUT
+: ${srcdir=.}
+docdir=$srcdir/../../doc
+
+../makeinfo --no-headers -o /dev/null -I$docdir info.texi
diff --git a/macros/texinfo/contrib/texinfo-hu/texinfo/makeinfo/tests/node-expand b/macros/texinfo/contrib/texinfo-hu/texinfo/makeinfo/tests/node-expand
new file mode 100644
index 0000000000..26dee24647
--- /dev/null
+++ b/macros/texinfo/contrib/texinfo-hu/texinfo/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/macros/texinfo/contrib/texinfo-hu/texinfo/makeinfo/tests/node-expand.txi b/macros/texinfo/contrib/texinfo-hu/texinfo/makeinfo/tests/node-expand.txi
new file mode 100644
index 0000000000..c31be5a4eb
--- /dev/null
+++ b/macros/texinfo/contrib/texinfo-hu/texinfo/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/macros/texinfo/contrib/texinfo-hu/texinfo/makeinfo/tests/node-value b/macros/texinfo/contrib/texinfo-hu/texinfo/makeinfo/tests/node-value
new file mode 100644
index 0000000000..aff0be22de
--- /dev/null
+++ b/macros/texinfo/contrib/texinfo-hu/texinfo/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/macros/texinfo/contrib/texinfo-hu/texinfo/makeinfo/tests/node-value.txi b/macros/texinfo/contrib/texinfo-hu/texinfo/makeinfo/tests/node-value.txi
new file mode 100644
index 0000000000..ba1173f9a8
--- /dev/null
+++ b/macros/texinfo/contrib/texinfo-hu/texinfo/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/macros/texinfo/contrib/texinfo-hu/texinfo/makeinfo/tests/node-whitespace b/macros/texinfo/contrib/texinfo-hu/texinfo/makeinfo/tests/node-whitespace
new file mode 100644
index 0000000000..e480108988
--- /dev/null
+++ b/macros/texinfo/contrib/texinfo-hu/texinfo/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/macros/texinfo/contrib/texinfo-hu/texinfo/makeinfo/tests/node-whitespace.txi b/macros/texinfo/contrib/texinfo-hu/texinfo/makeinfo/tests/node-whitespace.txi
new file mode 100644
index 0000000000..04f0339a8c
--- /dev/null
+++ b/macros/texinfo/contrib/texinfo-hu/texinfo/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/macros/texinfo/contrib/texinfo-hu/texinfo/makeinfo/tests/top b/macros/texinfo/contrib/texinfo-hu/texinfo/makeinfo/tests/top
new file mode 100644
index 0000000000..c1288f39fe
--- /dev/null
+++ b/macros/texinfo/contrib/texinfo-hu/texinfo/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/macros/texinfo/contrib/texinfo-hu/texinfo/makeinfo/tests/top.txi b/macros/texinfo/contrib/texinfo-hu/texinfo/makeinfo/tests/top.txi
new file mode 100644
index 0000000000..e8c3cbbc07
--- /dev/null
+++ b/macros/texinfo/contrib/texinfo-hu/texinfo/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/macros/texinfo/contrib/texinfo-hu/texinfo/makeinfo/tests/twofiles b/macros/texinfo/contrib/texinfo-hu/texinfo/makeinfo/tests/twofiles
new file mode 100644
index 0000000000..22c477c9d5
--- /dev/null
+++ b/macros/texinfo/contrib/texinfo-hu/texinfo/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/macros/texinfo/contrib/texinfo-hu/texinfo/makeinfo/toc.c b/macros/texinfo/contrib/texinfo-hu/texinfo/makeinfo/toc.c
new file mode 100644
index 0000000000..fa3d8e0738
--- /dev/null
+++ b/macros/texinfo/contrib/texinfo-hu/texinfo/makeinfo/toc.c
@@ -0,0 +1,388 @@
+/* toc.c -- table of contents handling.
+ $Id: toc.c,v 1.6 2004/04/11 17:56:47 karl Exp $
+
+ Copyright (C) 1999, 2000, 2001, 2002, 2003 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., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
+
+ 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 *tocname_and_node, *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);
+ }
+ /* Sigh... Need to HTML-escape the expanded node name like
+ add_anchor_name does, except that we are not writing this to
+ the output, so can't use add_anchor_name... */
+ /* The factor 5 in the next allocation is because the maximum
+ expansion of HTML-escaping is for the & character, which is
+ output as "&amp;". 2 is for "> that separates node from tocname. */
+ d = tocname_and_node = (char *)xmalloc (2 + 5 * strlen (expanded_node)
+ + strlen (tocname) + 1);
+ if (!anchor)
+ {
+ for (; *s; s++)
+ {
+ if (cr_or_whitespace (*s))
+ *d++ = '-';
+ else if (! URL_SAFE_CHAR (*s))
+ {
+ sprintf (d, "_00%x", (unsigned char) *s);
+ /* do this manually since sprintf returns char * on
+ SunOS 4 and other old systems. */
+ while (*d)
+ d++;
+ }
+ else
+ *d++ = *s;
+ }
+ strcpy (d, "\">");
+ }
+ else
+ /* Section outside any node, they provided explicit anchor. */
+ strcpy (d, anchor);
+ strcat (d, tocname);
+ free (tocname); /* it was malloc'ed by substring() */
+ free (expanded_node);
+ toc_entry_alist[toc_counter]->name = tocname_and_node;
+ }
+ 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", _("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);
+ }
+ 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 *) _("Table of Contents"));
+ insert ('\n');
+ for (i = 0; i < strlen (_("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", _("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 *) _("Short Contents"));
+ insert ('\n');
+ for (i = 0; i < strlen (_("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/macros/texinfo/contrib/texinfo-hu/texinfo/makeinfo/toc.h b/macros/texinfo/contrib/texinfo-hu/texinfo/makeinfo/toc.h
new file mode 100644
index 0000000000..854f6fc7dd
--- /dev/null
+++ b/macros/texinfo/contrib/texinfo-hu/texinfo/makeinfo/toc.h
@@ -0,0 +1,45 @@
+/* toc.h -- table of contents handling.
+ $Id: toc.h,v 1.2 2004/04/11 17:56:47 karl Exp $
+
+ Copyright (C) 1999 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., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
+
+ 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/macros/texinfo/contrib/texinfo-hu/texinfo/makeinfo/xml.c b/macros/texinfo/contrib/texinfo-hu/texinfo/makeinfo/xml.c
new file mode 100644
index 0000000000..cdbec1fc52
--- /dev/null
+++ b/macros/texinfo/contrib/texinfo-hu/texinfo/makeinfo/xml.c
@@ -0,0 +1,2328 @@
+/* xml.c -- xml output.
+ $Id: xml.c,v 1.52 2004/12/19 17:02:23 karl Exp $
+
+ Copyright (C) 2001, 2002, 2003, 2004 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., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
+
+ 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"
+
+/* Options */
+int xml_index_divisions = 1;
+
+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 },
+
+ { "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 },
+
+ { "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, 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 */
+
+ { "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 */
+ { "", 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, 1, 0 }, /* PRINTINDEX */
+ { "", 0, 1, 0 }, /* LISTOFFLOATS */
+ { "", 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) */
+
+ { "blockquote", 1, 0, 0 }, /* DEFINITION */
+ { "screen", 0, 0, 1 }, /* DEFINITIONTERM */
+ { "", 0, 0, 0 }, /* DEFINITIONITEM (xml) */
+ { "", 0, 0, 0 }, /* DEFCATEGORY (xml) */
+ { "function", 0, 0, 0 }, /* DEFFUNCTION */
+ { "varname", 0, 0, 0 }, /* DEFVARIABLE */
+ { "varname", 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 */
+
+ { "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;
+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;
+
+char *
+xml_id (char *id)
+{
+ char *tem = xmalloc (strlen (id) + 1);
+ char *p = tem;
+ strcpy (tem, id);
+ while (*p)
+ { /* Check if a character is allowed in ID attributes. This list differs
+ slightly from XML specs that it doesn't contain underscores.
+ See http://xml.coverpages.org/sgmlsyn/sgmlsyn.htm, ``9.3 Name'' */
+ if (!strchr ("abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789-.", *p))
+ *p = '-';
+ p++;
+ }
+ p = tem;
+ /* First character can only be a letter. */
+ if (!strchr ("abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ", *p))
+ *p = 'i';
+ return tem;
+}
+
+int
+xml_element (char *name)
+{
+ int i;
+ for (i=0; i<=PARA; i++)
+ {
+ if (strcasecmp (name, texinfoml_element_list[i].name) == 0)
+ return i;
+ }
+ printf ("Error xml_element\n");
+ return -1;
+}
+
+void
+xml_begin_document (char *output_filename)
+{
+ 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 (language_code != last_language_code)
+ {
+ if (docbook)
+ xml_insert_element_with_attribute (TEXINFO, START, "lang=\"%s\"", 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_filename);
+ xml_insert_element (SETFILENAME, END);
+ }
+}
+
+/* */
+static int element_stack[256];
+static int element_stack_index = 0;
+
+static int
+xml_current_element (void)
+{
+ 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)
+ printf ("*** stack overflow (%d - %s) ***\n",
+ element_stack_index,
+ xml_element_list[elt].name);
+}
+
+static void
+xml_pop_current_element (void)
+{
+ element_stack_index--;
+ if (element_stack_index < 0)
+ printf ("*** stack underflow (%d - %d) ***\n",
+ element_stack_index,
+ xml_current_element());
+}
+
+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[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 (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)
+ {
+ 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 ();
+
+ 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[output_paragraph_offset-1] == '\n')
+ output_paragraph_offset--;
+
+ /* And eat whitespace before </entry> in @multitables. */
+ if (arg == END && elt == ENTRY)
+ while (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 (!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 (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 == '\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 (strcasecmp (type, "tip") == 0)
+ xml_insert_element (TIP, arg);
+ else if (strcasecmp (type, "note") == 0)
+ xml_insert_element (NOTE, arg);
+ else if (strcasecmp (type, "important") == 0)
+ xml_insert_element (IMPORTANT, arg);
+ else if (strcasecmp (type, "warning") == 0)
+ xml_insert_element (WARNING, arg);
+ else if (strcasecmp (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)
+ {
+ xml_insert_element (ITEMIZE, START);
+ xml_table_level ++;
+ xml_in_item[xml_table_level] = 0;
+ 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);
+ }
+ 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;
+ }
+ 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)
+{
+ typedef struct xml_index_title {
+ struct xml_index_title *next;
+ char *title;
+ } XML_INDEX_TITLE;
+
+ static XML_INDEX_TITLE *xml_index_titles = NULL;
+
+ if (!handling_delayed_writes)
+ { /* We assume that we just opened a section, and so that the last output is
+ <SECTION ID="node-name"><TITLE>Title</TITLE>
+ where SECTION can be CHAPTER, ... */
+
+ XML_INDEX_TITLE *new = xmalloc (sizeof (XML_INDEX_TITLE));
+ xml_section *temp = last_section;
+
+ int l = output_paragraph_offset-xml_last_section_output_position;
+ char *tmp = xmalloc (l+1);
+ char *p = tmp;
+ strncpy (tmp, (char *) output_paragraph, l);
+
+ /* We remove <SECTION */
+ tmp[l] = '\0';
+ while (*p != '<')
+ p++;
+ while (*p != ' ')
+ p++;
+ /* ... and its label attribute. */
+ if (strncmp (p, " label=", 7) == 0)
+ {
+ p++;
+ while (*p != ' ')
+ p++;
+ }
+
+ output_paragraph_offset = xml_last_section_output_position;
+ xml_last_section_output_position = 0;
+
+ xml_pop_current_element (); /* remove section element from elements stack */
+
+ if (last_section)
+ last_section = last_section->prev; /* remove section from sections stack */
+ if (temp)
+ {
+ free (temp->name);
+ free (temp);
+ }
+
+ new->title = xstrdup (p);
+ new->next = xml_index_titles;
+ xml_index_titles = new;
+ }
+ else
+ {
+ static int xml_index_titles_reversed = 0;
+
+ if (!xml_index_titles_reversed)
+ {
+ xml_index_titles = (XML_INDEX_TITLE *) reverse_list
+ ((GENERIC_LIST *) xml_index_titles);
+ xml_index_titles_reversed = 1;
+ }
+
+ /* We put <INDEX> */
+ xml_insert_element (PRINTINDEX, START);
+ if (xml_index_titles)
+ {
+ /* Remove the final > */
+ output_paragraph_offset--;
+ /* and put ID="node-name"><TITLE>Title</TITLE> */
+ insert_string (xml_index_titles->title);
+ free (xml_index_titles->title);
+ xml_index_titles = xml_index_titles->next;
+ }
+
+ if (xml_index_divisions)
+ {
+ xml_insert_element (INDEXDIV, START);
+ indexdivempty = 1;
+ }
+ }
+}
+
+void
+xml_end_index (void)
+{
+ xml_close_indexentry ();
+ if (xml_index_divisions)
+ xml_insert_element (INDEXDIV, END);
+ 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_insert_indexentry (char *entry, char *node)
+{
+ char *primary = NULL, *secondary;
+ if (xml_index_divisions)
+ xml_index_divide (entry);
+
+ indexdivempty = 0;
+ if (strstr (entry+1, INDEX_SEP))
+ {
+ primary = xmalloc (strlen (entry) + 1);
+ strcpy (primary, entry);
+ secondary = strstr (primary+1, INDEX_SEP);
+ *secondary = '\0';
+ secondary += strlen (INDEX_SEP);
+
+ if (in_secondary && strcmp (primary, index_primary) == 0)
+ {
+ xml_insert_element (SECONDARYIE, END);
+ xml_insert_element (SECONDARYIE, START);
+ execute_string ("%s", secondary);
+ }
+ else
+ {
+ xml_close_indexentry ();
+ xml_insert_element (INDEXENTRY, START);
+ in_indexentry = 1;
+ xml_insert_element (PRIMARYIE, START);
+ execute_string ("%s", primary);
+ xml_insert_element (PRIMARYIE, END);
+ xml_insert_element (SECONDARYIE, START);
+ execute_string ("%s", secondary);
+ in_secondary = 1;
+ }
+ }
+ else
+ {
+ xml_close_indexentry ();
+ xml_insert_element (INDEXENTRY, START);
+ in_indexentry = 1;
+ xml_insert_element (PRIMARYIE, START);
+ execute_string ("%s", entry);
+ }
+ add_word (", ");
+
+ /* Don't link to @unnumbered sections directly.
+ We are disabling warnings temporarily, otherwise these xrefs
+ will cause bogus warnings about missing punctuation. */
+ {
+ extern int print_warnings;
+ int save_print_warnings = print_warnings;
+ print_warnings = 0;
+ execute_string ("%cxref{%s}", COMMAND_PREFIX, xstrdup (node));
+ print_warnings = save_print_warnings;
+ }
+
+ if (primary)
+ {
+ strcpy (index_primary, primary);
+ /* xml_insert_element (SECONDARYIE, END);*/
+ /* *(secondary-1) = ',';*/ /* necessary ? */
+ free (primary);
+ }
+ else
+ xml_insert_element (PRIMARYIE, END);
+
+ /* xml_insert_element (INDEXENTRY, 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;
+ 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. */
+ 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/macros/texinfo/contrib/texinfo-hu/texinfo/makeinfo/xml.h b/macros/texinfo/contrib/texinfo-hu/texinfo/makeinfo/xml.h
new file mode 100644
index 0000000000..f82b483e38
--- /dev/null
+++ b/macros/texinfo/contrib/texinfo-hu/texinfo/makeinfo/xml.h
@@ -0,0 +1,159 @@
+/* xml.h -- xml output declarations.
+ $Id: xml.h,v 1.24 2004/11/26 00:48:35 karl Exp $
+
+ Copyright (C) 2001, 2002, 2003, 2004 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., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
+
+ Originally written by Philippe Martin <feloy@free.fr>. */
+
+#ifndef XML_H
+#define XML_H
+
+/* Options. */
+
+/* Separate index entries into divisions for each letters. */
+extern int xml_index_divisions;
+extern int xml_sort_index;
+
+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,
+ 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,
+ 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_indexentry (char *entry, char *node),
+ 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 (char *output_filename),
+ 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/macros/texinfo/contrib/texinfo-hu/texinfo/makeinfo/xref.c b/macros/texinfo/contrib/texinfo-hu/texinfo/makeinfo/xref.c
new file mode 100644
index 0000000000..314d4a0fb6
--- /dev/null
+++ b/macros/texinfo/contrib/texinfo-hu/texinfo/makeinfo/xref.c
@@ -0,0 +1,620 @@
+/* xref.c -- cross references for Texinfo.
+ $Id: xref.c,v 1.4 2004/12/21 17:28:35 karl Exp $
+
+ Copyright (C) 2004 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., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. */
+
+#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 *) _("see ") : (char *) _("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 (_("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 ? _("see ") : _("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 ? _("see ") : _("See "));
+ }
+ else
+ add_word_args ("%s", px_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);
+ }
+}
+
+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 *) _("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)
+ {
+ extern int printing_index;
+ 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\"",
+ text_expansion (url));
+ 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)
+ {
+ xml_insert_element_with_attribute (EMAIL, START, "url=\"mailto:%s\"", addr);
+ if (*name)
+ execute_string ("%s", name);
+ xml_insert_element (EMAIL, 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/macros/texinfo/contrib/texinfo-hu/texinfo/makeinfo/xref.h b/macros/texinfo/contrib/texinfo-hu/texinfo/makeinfo/xref.h
new file mode 100644
index 0000000000..8f2711b63a
--- /dev/null
+++ b/macros/texinfo/contrib/texinfo-hu/texinfo/makeinfo/xref.h
@@ -0,0 +1,30 @@
+/* xref.h -- declarations for the cross references.
+ $Id: xref.h,v 1.1 2004/04/11 17:56:47 karl Exp $
+
+ Copyright (C) 2004 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., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. */
+
+#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/macros/texinfo/contrib/texinfo-hu/texinfo/missing b/macros/texinfo/contrib/texinfo-hu/texinfo/missing
new file mode 100644
index 0000000000..64b5f901dd
--- /dev/null
+++ b/macros/texinfo/contrib/texinfo-hu/texinfo/missing
@@ -0,0 +1,353 @@
+#! /bin/sh
+# Common stub for a few missing GNU programs while installing.
+
+scriptversion=2004-09-07.08
+
+# Copyright (C) 1996, 1997, 1999, 2000, 2002, 2003, 2004
+# 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., 59 Temple Place - Suite 330, Boston, MA
+# 02111-1307, 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=:
+
+# 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'
+ 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 0
+ ;;
+
+ -v|--v|--ve|--ver|--vers|--versi|--versio|--version)
+ echo "missing $scriptversion (GNU Automake)"
+ exit 0
+ ;;
+
+ -*)
+ 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 's/.*--output[ =]*\([^ ]*\).*/\1/p'`
+ test -z "$file" && file=`echo "$*" | sed -n 's/.*-o[ ]*\([^ ]*\).*/\1/p'`
+ 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 [ $# -ne 1 ]; then
+ eval LASTARG="\${$#}"
+ case "$LASTARG" in
+ *.y)
+ SRCFILE=`echo "$LASTARG" | sed 's/y$/c/'`
+ if [ -f "$SRCFILE" ]; then
+ cp "$SRCFILE" y.tab.c
+ fi
+ SRCFILE=`echo "$LASTARG" | sed 's/y$/h/'`
+ if [ -f "$SRCFILE" ]; then
+ cp "$SRCFILE" y.tab.h
+ fi
+ ;;
+ esac
+ fi
+ if [ ! -f y.tab.h ]; then
+ echo >y.tab.h
+ fi
+ if [ ! -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 [ $# -ne 1 ]; then
+ eval LASTARG="\${$#}"
+ case "$LASTARG" in
+ *.l)
+ SRCFILE=`echo "$LASTARG" | sed 's/l$/c/'`
+ if [ -f "$SRCFILE" ]; then
+ cp "$SRCFILE" lex.yy.c
+ fi
+ ;;
+ esac
+ fi
+ if [ ! -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 's/.*-o \([^ ]*\).*/\1/p'`
+ if test -z "$file"; then
+ file=`echo "$*" | sed -n 's/.*--output=\([^ ]*\).*/\1/p'`
+ fi
+ if [ -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."
+ file=`echo "$*" | sed -n 's/.*-o \([^ ]*\).*/\1/p'`
+ if test -z "$file"; then
+ file=`echo "$*" | sed 's/.* \([^ ]*\) *$/\1/'`
+ file=`sed -n '/^@setfilename/ { s/.* \([^ ]*\) *$/\1/; p; q; }' $file`
+ fi
+ 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/macros/texinfo/contrib/texinfo-hu/texinfo/mkinstalldirs b/macros/texinfo/contrib/texinfo-hu/texinfo/mkinstalldirs
new file mode 100644
index 0000000000..6fbe5e1176
--- /dev/null
+++ b/macros/texinfo/contrib/texinfo-hu/texinfo/mkinstalldirs
@@ -0,0 +1,150 @@
+#! /bin/sh
+# mkinstalldirs --- make directory hierarchy
+
+scriptversion=2004-02-15.20
+
+# Original author: Noah Friedman <friedman@prep.ai.mit.edu>
+# Created: 1993-05-16
+# Public domain.
+#
+# This file is maintained in Automake, please report
+# bugs to <bug-automake@gnu.org> or send patches to
+# <automake-patches@gnu.org>.
+
+errstatus=0
+dirmode=""
+
+usage="\
+Usage: mkinstalldirs [-h] [--help] [--version] [-m MODE] DIR ...
+
+Create each directory DIR (with mode MODE, if specified), including all
+leading file name components.
+
+Report bugs to <bug-automake@gnu.org>."
+
+# process command line arguments
+while test $# -gt 0 ; do
+ case $1 in
+ -h | --help | --h*) # -h for help
+ echo "$usage"
+ exit 0
+ ;;
+ -m) # -m PERM arg
+ shift
+ test $# -eq 0 && { echo "$usage" 1>&2; exit 1; }
+ dirmode=$1
+ shift
+ ;;
+ --version)
+ echo "$0 $scriptversion"
+ exit 0
+ ;;
+ --) # stop option processing
+ shift
+ break
+ ;;
+ -*) # unknown option
+ echo "$usage" 1>&2
+ exit 1
+ ;;
+ *) # first non-opt arg
+ break
+ ;;
+ esac
+done
+
+for file
+do
+ if test -d "$file"; then
+ shift
+ else
+ break
+ fi
+done
+
+case $# in
+ 0) exit 0 ;;
+esac
+
+# Solaris 8's mkdir -p isn't thread-safe. If you mkdir -p a/b and
+# mkdir -p a/c at the same time, both will detect that a is missing,
+# one will create a, then the other will try to create a and die with
+# a "File exists" error. This is a problem when calling mkinstalldirs
+# from a parallel make. We use --version in the probe to restrict
+# ourselves to GNU mkdir, which is thread-safe.
+case $dirmode in
+ '')
+ if mkdir -p --version . >/dev/null 2>&1 && test ! -d ./--version; then
+ echo "mkdir -p -- $*"
+ exec mkdir -p -- "$@"
+ else
+ # On NextStep and OpenStep, the `mkdir' command does not
+ # recognize any option. It will interpret all options as
+ # directories to create, and then abort because `.' already
+ # exists.
+ test -d ./-p && rmdir ./-p
+ test -d ./--version && rmdir ./--version
+ fi
+ ;;
+ *)
+ if mkdir -m "$dirmode" -p --version . >/dev/null 2>&1 &&
+ test ! -d ./--version; then
+ echo "mkdir -m $dirmode -p -- $*"
+ exec mkdir -m "$dirmode" -p -- "$@"
+ else
+ # Clean up after NextStep and OpenStep mkdir.
+ for d in ./-m ./-p ./--version "./$dirmode";
+ do
+ test -d $d && rmdir $d
+ done
+ fi
+ ;;
+esac
+
+for file
+do
+ set fnord `echo ":$file" | sed -ne 's/^:\//#/;s/^://;s/\// /g;s/^#/\//;p'`
+ shift
+
+ pathcomp=
+ for d
+ do
+ pathcomp="$pathcomp$d"
+ case $pathcomp in
+ -*) pathcomp=./$pathcomp ;;
+ esac
+
+ if test ! -d "$pathcomp"; then
+ echo "mkdir $pathcomp"
+
+ mkdir "$pathcomp" || lasterr=$?
+
+ if test ! -d "$pathcomp"; then
+ errstatus=$lasterr
+ else
+ if test ! -z "$dirmode"; then
+ echo "chmod $dirmode $pathcomp"
+ lasterr=""
+ chmod "$dirmode" "$pathcomp" || lasterr=$?
+
+ if test ! -z "$lasterr"; then
+ errstatus=$lasterr
+ fi
+ fi
+ fi
+ fi
+
+ pathcomp="$pathcomp/"
+ done
+done
+
+exit $errstatus
+
+# Local Variables:
+# mode: shell-script
+# sh-indentation: 2
+# eval: (add-hook 'write-file-hooks 'time-stamp)
+# time-stamp-start: "scriptversion="
+# time-stamp-format: "%:y-%02m-%02d.%02H"
+# time-stamp-end: "$"
+# End:
diff --git a/macros/texinfo/contrib/texinfo-hu/texinfo/new/README.txt b/macros/texinfo/contrib/texinfo-hu/texinfo/new/README.txt
new file mode 100644
index 0000000000..0064c2bbf5
--- /dev/null
+++ b/macros/texinfo/contrib/texinfo-hu/texinfo/new/README.txt
@@ -0,0 +1,46 @@
+readme.txt
+
+Hungarian (magyar) TEX macro definitions for texinfo.tex.
+This is read when a source document says: @documentlanguage hu
+
+By Lajos Voz\'arik.
+
+$Id: txi-hu.tex,v 1.01. 2007/06/11 12:45:59 vozarik Exp $
+mailto: Lajos Vozaarik, techn@toolstyle.hu
+
+Copyright (C) 2007 Free Software Foundation.
+
+
+Installation: simple copying txi-hu.tex
+~~~~~~~~~~~~ and huhyp.tex
+ files to texinfo directories.
+
+Usage: @documentlanguage hu
+~~~~~~
+
+This redefine texinfo macros for Hungarian language, see txi_hu.pdf file.
+
+
+Filelist:
+~~~~~~~~~
+
+CT.BAT shell bat for emTeX and MikTeX
+HDR0.mac header file for simplified generate title page and set-up
+HUHYP.TEX hungarian hyphenation file
+INFO.TCP conversion binaries
+INFO.TXT conversion source, see [1]
+README.TXT short description
+TEXCONV.EXE convert tex file to tex(info)
+TXI-HU.TEX macro file for Hungarian language
+TXI_HU.PDF brief documentation
+TXI_HU.TXT documentation source
+
+
+
+________________________
+Taths all, folks.
+
+
+Brgds
+
+Vozárik Lajos
diff --git a/macros/texinfo/contrib/texinfo-hu/texinfo/new/ct.bat b/macros/texinfo/contrib/texinfo-hu/texinfo/new/ct.bat
new file mode 100644
index 0000000000..4cebea69c4
--- /dev/null
+++ b/macros/texinfo/contrib/texinfo-hu/texinfo/new/ct.bat
@@ -0,0 +1,8 @@
+@echo off
+texconv -i info.tcp %1.txt %1.tex
+tex %1.tex
+rem texindex %1.cp
+rem tex %1.txi
+rem dvips %1.dvi
+rem gs386 -q -dNOPAUSE -sDEVICE#pdfwrite -sOutputFile#%1.pdf %1.ps -c quit
+
diff --git a/macros/texinfo/contrib/texinfo-hu/texinfo/new/file_id.diz b/macros/texinfo/contrib/texinfo-hu/texinfo/new/file_id.diz
new file mode 100644
index 0000000000..775a158b3c
--- /dev/null
+++ b/macros/texinfo/contrib/texinfo-hu/texinfo/new/file_id.diz
@@ -0,0 +1,9 @@
+
+Hungarian (magyar) TEX macro definitions for texinfo.tex.
+This is read when a source document says: @documentlanguage hu
+
+By Vozárik Lajos
+
+$Id: txi-hu.tex,v 1.01. 2007/06/11 12:45:59 vozarik Exp $
+mailto: Lajos Vozaarik, techn@toolstyle.hu
+***
diff --git a/macros/texinfo/contrib/texinfo-hu/texinfo/new/hdr0.mac b/macros/texinfo/contrib/texinfo-hu/texinfo/new/hdr0.mac
new file mode 100644
index 0000000000..28f2393cc6
--- /dev/null
+++ b/macros/texinfo/contrib/texinfo-hu/texinfo/new/hdr0.mac
@@ -0,0 +1,37 @@
+@c \input texinfo
+@c header file for txi-hu.txi file
+@finalout
+@setfilename txi_hu
+@documentlanguage hu
+@tex
+@include macros.tex
+@end tex
+@paragraphindent 0
+@afourpaper
+@frenchspacing on
+@set edition 1.
+@set update-date @hudate
+@set cim Texinfo Package for Hungarian Language
+@tex
+\global\chapheadingskip = 28pt plus 4pt minus 2pt
+\global\secheadingskip = 12pt plus 3pt minus 2pt
+\global\subsecheadingskip = 9pt plus 2pt minus 2pt
+\global\parskip = 4pt
+@end tex
+@setchapternewpage on
+@titlepage
+@hrule height 2pt width @hsize
+@bigskip
+@centerline{@titlefont{txi-hu.tex:}}
+@bigskip
+@title @value{cim}
+@subtitle A Texinfo magyar@'@i{}t@'asa
+@subtitle @value{edition} kiad@'as.
+@subtitle @value{update-date}
+@author Lajos Voz@'arik
+@page
+@vskip 0pt plus 1filll
+@c @include copyright
+@page
+@end titlepage
+@c @bye \ No newline at end of file
diff --git a/macros/texinfo/contrib/texinfo-hu/texinfo/new/huhyp.tex b/macros/texinfo/contrib/texinfo-hu/texinfo/new/huhyp.tex
new file mode 100644
index 0000000000..9950407bd6
--- /dev/null
+++ b/macros/texinfo/contrib/texinfo-hu/texinfo/new/huhyp.tex
@@ -0,0 +1,67 @@
+%%% 00-11-28 20:01:29 cp437-cwi
+%%% hyphenation file for Hungarian language
+%%%
+%%% $Id: huhyp.tex, v 1.01. 2007/06/10 19:07:59 vozarik Exp $
+%%%% mailto: Lajos Vozaarik, techn@toolstyle.hu
+%%%
+%%% Elv laszt si kiv‚telsz¢t r;
+%%% azon szavak, amit a TeX nem j¢l v laszt el, vagy nyelvtani okokb¢l
+%%% t”bb helyen lehet elt”rni a szavakat, mint az nyomtat sban eszt‚tikus
+%%% lenne.
+%%% Igy p‚ld ul _nyelvtanilag_ ez korrekt:
+%%% e-lek-tro-ni-kus e-set-le-ges
+%%% de _tipogr fiailag_ csak ez lehet:
+%%% elek-tro-ni-kus eset-le-ges
+%%% ^ ^
+%%% |
+%%% breaking not allowed end of line
+%%%
+%%% Soha ne hagyjunk 1 karaktert a sor v‚g‚n, m‚g akkor sem, ha az
+%%% nyelvtanilag helyes lenne.
+%%%
+\message{Last updated: 10-06-07}
+\hyphenation{a-da-to-kat
+ak-kor ala-cso-nyabb al-kal-maz-hat-juk al-kal-maz-ni al-kal-ma-zott
+bal-eset
+be-kap-csol be-kap-csol-ja be-mu-tat-ja be-nyo-mott
+bi-lin-csel-ve
+csa-va-rok csa-va-roz-va csi-szo-la-ti csi-szo-la-tok
+elek-tro-ni-kus
+el-he-lyez-ve el-mon-dot-tak egy-sze-res eset-ben
+eset-le-ges eset-le-ge-sen
+ez-alatt
+fel-a-da-to-kat fel-ada-tok-kal
+fel-csa-va-roz-zuk fel-sze-rel-ve
+fo-lya-mat fo-lya-ma-tot
+gon-dol-juk
+hagy-ni hasz-no-sab-bak
+he-lye-ket hen-ger-ben hid-ra-u-li-kus
+in-ter-pre-ter
+kap-cso-lat-ban kap-csol-ja
+ke-reszt-met-szete ki-fej-lesz-tett
+las-sab-ban leg-ma-ga-sabb leg-mo-der-nebb leg-na-gyobb le-kap-csol-ja
+le-kap-csolt
+lel-ki-is-me-re-tes le-nyom-va
+lo-gi-kai
+mak-rosz-ko-pi-kus meg-is-mer-ni meg-ve-zetve mik-rosz-ko-pi-kus
+meg-ha-lad-ja
+mun-ka-da-rab mun-ka-terv
+na-gyobb ne-he-zebb Ne-he-zebb
+nyit-ja
+nyom-juk nyom-ta-tott
+ott-ho-ni
+pa-pu-csok pa-ran-cso-kat
+plasz-ti-kus
+prog-ra-mok
+rend-sze-rek
+so-ha-sem
+sza-bad sza-ba-don sza-ka-szok-ban szak-em-ber
+szeg-nye-reg sze-rel-ve sze-re-pe
+sze-rint
+szer-ke-ze-tek szer-ke-ze-ti
+szi-ge-te-let-len szint-je szisz-te-ma-ti-kus
+szta-ti-kus
+ten-gelyt
+ugyan-azt u-gyan-o-lyan
+ven-ni ve-zet-ve vi-szont
+vo-nal-ra}
diff --git a/macros/texinfo/contrib/texinfo-hu/texinfo/new/info.tcp b/macros/texinfo/contrib/texinfo-hu/texinfo/new/info.tcp
new file mode 100644
index 0000000000..7e716a6dbd
--- /dev/null
+++ b/macros/texinfo/contrib/texinfo-hu/texinfo/new/info.tcp
Binary files differ
diff --git a/macros/texinfo/contrib/texinfo-hu/texinfo/new/info.txt b/macros/texinfo/contrib/texinfo-hu/texinfo/new/info.txt
new file mode 100644
index 0000000000..b5ad099f9a
--- /dev/null
+++ b/macros/texinfo/contrib/texinfo-hu/texinfo/new/info.txt
@@ -0,0 +1,68 @@
+%
+% info.tcp
+%
+^^80 -> @v{S}
+^^81 -> @"u
+^^82 -> @'e
+^^83 -> @v{C}
+^^84 -> @"a
+^^85 -> @v{D}
+^^86 -> @v{u}
+^^87 -> @v{T}
+^^88 -> @v{s}
+^^89 -> @v{c}
+^^8a -> @'d
+^^8b -> @v{U}
+^^8c -> @'t
+^^8d -> @'I
+^^8e -> @"A
+^^8f -> @'A
+^^90 -> @'E
+^^91 -> @ss{}
+^^92 -> @AE{}
+^^93 -> @H{o}
+^^94 -> @"o
+^^95 -> @'O
+^^96 -> @H{u}
+^^97 -> @'U
+^^98 -> @H{U}
+^^99 -> @"O
+^^9a -> @"U
+^^9b -> @o{}
+^^9c -> @pounds{}
+^^9d -> @O{}
+^^a0 -> @'a
+^^a1 -> @'@i{}
+^^a2 -> @'o
+^^a3 -> @'u
+^^a4 -> @ n
+^^a5 -> @ N
+^^a6 -> @b{a}
+^^a7 -> @H{O}
+^^b5 -> @'A
+^^b6 -> @^A
+^^b7 -> @`A
+^^b8 -> @copyright{}
+^^bd -> @hbox{rm@rlap/c}
+^^c6 -> @~a
+^^c7 -> @ A
+^^d2 -> @^E
+^^d3 -> @"E
+^^d4 -> @`E
+^^d6 -> @'I
+^^d7 -> @^I
+^^d8 -> @"I
+^^de -> @`I
+^^e0 -> @'O
+^^e1 -> @ss{}
+^^e2 -> @H{O}
+^^e3 -> @`O
+^^e4 -> @ o
+^^e5 -> @ O
+^^e9 -> @'U
+^^ea -> @H{U}
+^^eb -> @`U
+^^ec -> @'y
+^^ed -> @'Y
+^^f4 -> @P{}
+^^f5 -> @S{}
diff --git a/macros/texinfo/contrib/texinfo-hu/texinfo/new/txi-hu.tex b/macros/texinfo/contrib/texinfo-hu/texinfo/new/txi-hu.tex
new file mode 100644
index 0000000000..1dd39dba38
--- /dev/null
+++ b/macros/texinfo/contrib/texinfo-hu/texinfo/new/txi-hu.tex
@@ -0,0 +1,396 @@
+% Hungarian (magyar) TEX macro definitions for texinfo.tex.
+% This is read when a source document says: @documentlanguage hu
+%
+% $Id: txi-en.tex,v 1.01. 2007/05/04 20:50:59 vozarik Exp $
+% mailto: Lajos Vozaarik, techn@toolstyle.hu
+% v 1.03. 17-06-07 21:18:38
+%
+% Copyright (C) 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 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., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
+%%%
+%%% Preface
+%%% Hungarian language NOT an simple and easy language. Include numerous
+%%% exceptions, agglutinations and archaic.
+%%% The full language is an expection, i think.
+%%% I'm adding numerous macros and rewritten some parts to easier working.
+%%%
+%%% Comments: %%% it is my comment, % it is original...
+
+\def\txi_hu_version{1.03. }
+\message{^^J Loading txi-hu [version v. \txi_hu_version],}
+%%% User defined hyphenation
+\message{hyphenation,}
+\include huhyp.tex
+%%%
+%%% Dotless i and dotless j macros, used for accents.
+%%% Correctly working, but _not_ tested with all cmXXX-fonts.
+%%% If don't working with Your cmXXX-font, please drop me a line.
+%%% For accessing long i, simple type @'@{i}   la TeX...,
+%%% it is ONE easy way moving text from TeX to texinfo and vice versa.
+%%% Example:
+%%% @tex
+%%% Put here (or inputting) Your Hungarian accented TeX-text,
+%%% without texinfo conversion.
+%%% color = sz\'\{i}n
+%%% colours = sz\'\{i}nek
+%%% hearth = sz\'\{i}v, etc.
+%%% @end tex
+%%%
+\gdef\imacro{\char16{}}
+\gdef\jmacro{\char17{}}
+%%% undefining \i macro. Unnfortunatelly, texinfo use this macro for
+%%% formatting, and \imacro don't ToC-ing...
+\gdef\i{\relax}
+\global\chardef\i="10 \chardef\j="11 % dotless letters
+%%%
+\message{fixed words,}
+%%%
+%%% Set up fixed words for Hungarian (magyar) language.
+%%%
+\gdef\putwordAppendix{\appendixname}
+\gdef\putwordChapter{fejezet}
+\gdef\putwordDefmac{Makr\'o}
+\gdef\putwordDefopt{Felhaszn\'al\'oi opci\'o}
+\gdef\putwordDeffunc{Funkci\'o}
+\gdef\putwordDefspec{Speci\'alis forma}
+\gdef\putwordDefvar{V\'altoz\'o}
+\gdef\putwordEquation{k\'eplet}
+\gdef\putwordfile{f\'ajl}
+\gdef\putwordIndexIsEmpty{(\"Ures index)}
+\gdef\putwordIndexNonexistent{(Neml\'etez\H{o} index)}
+\def\putwordInfo{Info}
+\gdef\putwordNoTitle{Nincs c\'\i{}m}
+\gdef\putwordpage{oldal}
+\gdef\putwordsection{r\'esz}
+\gdef\putwordSection{r\'esz}
+\gdef\putwordsee{l\'asd }
+\gdef\putwordSee{L\'asd }
+\gdef\putwordseeAlso{l. m\'eg: }
+\gdef\putwordTOC{Tartalomjegyz\'ek}
+\gdef\putwordShortTOC{\'Attekint\'es}
+%%%
+\gdef\abstractname{Kivonat}
+%%% for example: 2. fggel‚k
+\gdef\appendixname{f\"uggel\'ek}
+%%% if exist only one: Fggel‚k
+\gdef\Appendixname{F\"uggel\'ek}
+\gdef\bibname{Irodalom}
+\gdef\Bibname{Irodalomjegyz\'ek}
+\gdef\docsize{A dokument\'aci\'o terjedelme:}
+%%% for example: 2. mell‚klet
+\gdef\enclname{mell\'eklet}
+%%% if exist only one: Mell‚klet
+\gdef\Enclname{Mell\'eklet}
+\gdef\figurename{\'abra}
+\gdef\figures{\'Abr\'ak}
+\gdef\glossname{Kislexikon}
+\gdef\introname{Bevezet\'es}
+\gdef\proofname{Bizony\'\i{}t\'as}
+\gdef\headtoname{C\'\i{}mzett}
+\gdef\indexname{T\'argymutat\'o}
+\gdef\listfigurename{\'Abr\'ak jegyz\'eke}
+\gdef\listtablename{T\'abl\'azatok jegyz\'eke}
+\gdef\prefacename{El\H osz\'o}
+\gdef\refname{Hivatkoz\'asok}
+\gdef\tablename{t\'abl\'azat}
+%%%
+%%% untranslated def`s -- next time Gadget, next time...
+%%%
+\gdef\putwordin{in}
+\gdef\putwordInstanceVariableof{Instance Variable of}
+\gdef\putwordMethodon{Method on}
+\gdef\putwordof{of}
+\gdef\putwordon{on}
+%%%
+\message{date and time stamp,}
+%%%
+%%% Translation between numbers and characters
+%%%
+\gdef\arabic#1{\ifnum #1 > 0 \number #1 \fi} %%% Ki¡r s arab sz mmal
+\gdef\roman#1{\romannumeral #1} %%% Ki¡r s kisbet–s r¢mai sz mmal
+\gdef\Roman#1{\expandafter %%% Ki¡r s nagybet–s
+ \uppercase %%% r¢mai sz mmal
+ \expandafter{\romannumeral #1}}
+%%%
+%%% 1--26-ig kis/nagybet–vel ¡r. alph{1}==a; Alph{1}==A
+\gdef\alph#1{\ifcase#1\or a\or b\or c\or d\or e\or f\or g\or h\or i\or j\or
+ k\or l\or m\or n\or o\or p\or q\or r\or s\or t\or u\or v\or w\or x\or y\or
+ z\fi}
+\gdef\Alph#1{\ifcase#1\or A\or B\or C\or D\or E\or F\or G\or H\or I\or J\or
+ K\or L\or M\or N\or O\or P\or Q\or R\or S\or T\or U\or V\or W\or X\or Y\or
+ Z\fi}
+%%%
+%%% Traditional Hungarian date notation
+%%% 4-04-07 == 2007. IV. 4.
+%%%
+\gdef\hudate{ %%% Mai d tum
+ \number\year.
+ \Roman{\number\month.}
+ %%% \space %%% A pont ut n tenne
+ \ifcase\day\or
+ 1.\or 2.\or 3.\or 4.\or 5.\or
+ 6.\or 7.\or 8.\or 9.\or 10.\or
+ 11.\or 12.\or 13.\or 14.\or 15.\or
+ 16.\or 17.\or 18.\or 19.\or 20.\or
+ 21.\or 22.\or 23.\or 24.\or 25.\or
+ 26.\or 27.\or 28.\or 29.\or 30.\or
+ 31.\fi
+}
+%%%
+%%% first word/or title ONLY, otherwise lowercase
+%%%
+\gdef\putwordMJan{Janu\'ar}
+\gdef\putwordMFeb{Febru\'ar}
+\gdef\putwordMMar{M\'arcius}
+\gdef\putwordMApr{\'Aprilis}
+\gdef\putwordMMay{M\'ajus}
+\gdef\putwordMJun{J\'unius}
+\gdef\putwordMJul{J\'ulius}
+\gdef\putwordMAug{Augusztus}
+\gdef\putwordMSep{Szeptember}
+\gdef\putwordMOct{Okt\'ober}
+\gdef\putwordMNov{November}
+\gdef\putwordMDec{December}
+%%%
+%%% Date stamp
+%%% Produces y-m-d style of output.
+%%% 4-05-07 == 2007. m\'ajus 4.
+%%%
+\gdef\Today{\number\year. \ifcase\month\or % Mai d tum
+ janu\'ar\or febru\'ar\or m\'arcius\or
+ \'aprilis\or m\'ajus\or j\'unius\or
+ j\'ulius\or augusztus\or szeptember\or
+ okt\'ober\or november\or december\fi
+ \space\ifcase\day\or
+ 1.\or 2.\or 3.\or 4.\or 5.\or
+ 6.\or 7.\or 8.\or 9.\or 10.\or
+ 11.\or 12.\or 13.\or 14.\or 15.\or
+ 16.\or 17.\or 18.\or 19.\or 20.\or
+ 21.\or 22.\or 23.\or 24.\or 25.\or
+ 26.\or 27.\or 28.\or 29.\or 30.\or
+ 31.\fi}
+%%%
+%%% Letter style date stamp
+%%% 4-05-07 == 2007. m\'ajus 4-\'en
+%%% example:
+%%% Best regars, anonymus. Bodega-bay, 2007. m\'ajus 4-\'en
+%%%
+\gdef\ondate{ %%% (Kelt) ... -‚n, - n
+ \number\year. \ifcase\month\or
+ janu\'ar\or febru\'ar\or m\'arcius\or
+ \'aprilis\or m\'ajus\or j\'unius\or
+ j\'ulius\or augusztus\or szeptember\or
+ okt\'ober\or november\or december\fi
+ \space\ifcase\day\or
+ 1-j\'en\or 2-\'an\or 3-\'an\or 4-\'en\or 5-\'en\or
+ 6-\'an\or 7-\'en\or 8-\'an\or 9-\'en\or 10-\'en\or
+ 11-\'en\or 12-\'en\or 13-\'an\or 14-\'en\or 15-\'en\or
+ 16-\'an\or 17-\'en\or 18-\'an\or 19-\'en\or 20-\'an\or
+ 21-\'en\or 22-\'en\or 23-\'an\or 24-\'en\or 25-\'en\or
+ 26-\'an\or 27-\'en\or 28-\'an\or 29-\'en\or 30-\'an\or
+ 31-\'en\fi}
+%%%
+%%% Uncomment only one line, please.
+\gdef\today{\hudate}
+%%% \gdef\today{\ondate}
+%%% \gdef\today{\Today}
+%%%
+%%% Patch & new macros
+%%%
+%%% en dash for correct Hungarian notation
+%%% en dash, magyar hi. szt.-i gondolatjel
+\gdef\ndash{\thinspace{--}\hskip.16667em\relax}
+%%%
+%%% Read the toc-file. Patch...
+\gdef\readtocfile{
+ \setupdatafile
+ %%% \activecatcodes
+ \begingroup
+ %%% enable both (plain and info) macro formats
+ %%% while reading .toc-file
+ \catcode`\\=0 \catcode`\{=1 \catcode`\}=2
+ \catcode`\@=0 \catcode`\^=7
+ \input \jobname.toc
+ \endgroup
+}
+%%%
+\message{chapter and section defs.,}
+%%% Chapter defs.
+%%%
+%%% Patch for Hungarian language ONLY
+%%%
+%%% in English Hungarian notation
+%%% ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+%%% Chapter 1 --> 1. fejezet
+%%% Appendix A --> A f\"{u}ggel\'ek, but 1. f\"{u}ggel\'ek
+\gdef\unnumbered #1{
+ \def\toctype{unnchap}
+ \gdef\thischapter{}
+ \chapheading{#1}
+ \writetocentry{\toctype}{#1}{\folio}
+ %%% \message{^^J #1}
+}
+%%%
+\global\secno=0
+\global\subsecno=0
+\global\subsubsecno=0
+\global\chapno=0
+%%%
+\gdef\chapterzzz #1{
+ \global\secno=0
+ \global\subsecno=0
+ \global\subsubsecno=0
+ \global\advance\chapno by 1
+ \gdef\thischapter{\the\chapno. \putwordChapter}
+ \gdef\chaplevelprefix{\the\chapno.}
+ \resetallfloatnos
+ \message{^^J\the\chapno. \putwordChapter}
+ \chapmacro{#1}{Ynumbered}{\the\chapno.}
+}
+%%%
+\gdef\chapmacro#1#2#3{%
+ \pchapsepmacro
+ {%
+ \chapfonts \rm
+ %
+ % Have to define \thissection 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\thissection{#1}%
+ \gdef\thischaptername{#1}%
+ %
+ % Only insert the separating space if we have a chapter/appendix
+ % number, and don't print the unnumbered ``number''.
+ \def\temptype{#2}%
+ \ifx\temptype\Ynothingkeyword
+ \setbox0 = \hbox{}%
+ \def\toctype{unnchap}%
+ \gdef\thischapternum{}%
+ \gdef\thischapter{#1}%
+ \else\ifx\temptype\Yomitfromtockeyword
+ \setbox0 = \hbox{}% contents like unnumbered, but no toc entry
+ \def\toctype{omit}%
+ \gdef\thischapternum{}%
+ \gdef\thischapter{}%
+ \else\ifx\temptype\Yappendixkeyword
+ \setbox0 = \hbox{#3\space\putwordAppendix{}:\enspace}%
+ \def\toctype{app}%
+ \xdef\thischapternum{\appendixletter}%
+ % We don't substitute the actual chapter name into \thischapter
+ % because we don't want its macros evaluated now. And we don't
+ % use \thissection because that changes with each section.
+ %
+ \gdef\thischapter{\appendixletter \putwordAppendix{}:
+ \noexpand\thischaptername}%
+ \else
+ \setbox0 = \hbox{#3\enspace}%
+ \def\toctype{numchap}%
+ \def\thischapternum{\the\chapno}%
+ \gdef\thischapter{\the\chapno{}. \putwordChapter{}: #1}%
+ \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.
+ \vbox{\hyphenpenalty=10000 \tolerance=5000 \parindent=0pt \raggedright
+ \hangindent=\wd0 \centerparametersmaybe
+ \unhbox0 #1\par}%
+ }%
+ \nobreak\bigskip % no page break after a chapter title
+ \nobreak
+}
+%%%
+%%% Lettered appendix = A. fggel‚k: Blahblahh
+%%% ONLY ONE Appendix: @unnumbered @putwordAppendix
+%%%
+\gdef\appendixzzz #1{
+ \global\chapno=0
+ \global\secno=0
+ \global\subsecno=0
+ \global\subsubsecno=0
+ \global\advance\appendixno by 1
+ \gdef\chaplevelprefix{\appendixletter}
+ \gdef\thischapter{\chaplevelprefix.\space\putwordAppendix}
+ \resetallfloatnos
+ \message{^^J\appendixletter.\space fuggelek}
+ \chapmacro{#1}{Yappendix}{\appendixletter.}
+}
+%%%
+%%% A._f\"{u}ggel\'ek (or unused 1._f\"{u}ggel\'ek, )
+%%% changed order
+%%%
+\gdef\appendixbox#1{%
+ \setbox0 = \hbox{M \putwordAppendix{}}%
+ \hbox to \wd0{#1\space\putwordAppendix{}\hss}}
+%%%
+%%% dotted sections: 1.1._Title
+%%%
+\gdef\seczzz#1{%
+ \global\subsecno=0 \global\subsubsecno=0 \global\advance\secno by 1
+ \sectionheading{#1}{sec}{Ynumbered}{\the\chapno.\the\secno.}%
+}
+%%%
+%%% appendixsec: B.1._Title
+%%%
+\gdef\appendixsectionzzz#1{%
+ \global\subsecno=0 \global\subsubsecno=0 \global\advance\secno by 1
+ \sectionheading{#1}{sec}{Yappendix}{\appendixletter.\the\secno.}%
+}
+%%%
+%%% subsections: 1.1.1._Subtitle
+%%%
+\gdef\numberedsubseczzz#1{%
+ \global\subsubsecno=0 \global\advance\subsecno by 1
+ \sectionheading{#1}{subsec}{Ynumbered}{\the\chapno.\the\secno.\the\subsecno.}%
+}
+%%%
+%%% appendixsubsec: B.1.1._Subtitle
+%%%
+\gdef\appendixsubseczzz#1{%
+ \global\subsubsecno=0 \global\advance\subsecno by 1
+ \sectionheading{#1}{subsec}{Yappendix}%
+ {\appendixletter.\the\secno.\the\subsecno.}%
+}
+%%%
+%%% subsubsections: 1.1.1.1._Subsubtitle
+%%%
+\gdef\numberedsubsubseczzz#1{%
+ \global\advance\subsubsecno by 1
+ \sectionheading{#1}{subsubsec}{Ynumbered}%
+ {\the\chapno.\the\secno.\the\subsecno.\the\subsubsecno.}%
+}
+%%%
+%%% appendixsubsubsec: B.1.1.1._Subsubtitle
+%%%
+\def\appendixsubsubseczzz#1{%
+ \global\advance\subsubsecno by 1
+ \sectionheading{#1}{subsubsec}{Yappendix}%
+ {\appendixletter.\the\secno.\the\subsecno.\the\subsubsecno.}%
+}
+\message{ ...done.^^J The current Language is: Hungarian.^^J}
+%%%
+%%% /* eof */ %%%
+%%% \ No newline at end of file
diff --git a/macros/texinfo/contrib/texinfo-hu/texinfo/new/txi_hu.pdf b/macros/texinfo/contrib/texinfo-hu/texinfo/new/txi_hu.pdf
new file mode 100644
index 0000000000..813f99c820
--- /dev/null
+++ b/macros/texinfo/contrib/texinfo-hu/texinfo/new/txi_hu.pdf
Binary files differ
diff --git a/macros/texinfo/contrib/texinfo-hu/texinfo/new/txi_hu.txt b/macros/texinfo/contrib/texinfo-hu/texinfo/new/txi_hu.txt
new file mode 100644
index 0000000000..6ee59e9f12
--- /dev/null
+++ b/macros/texinfo/contrib/texinfo-hu/texinfo/new/txi_hu.txt
@@ -0,0 +1,513 @@
+\input stables
+\input texinfo
+@include hdr0.mac
+@include bibtexi.mac
+@opencaption
+@frenchspacing on
+@headings off
+@headrule=0
+
+@unnumbered @prefacename
+@settitle @thischapter
+@headings after
+A Unix rendszerek  ltal nos c‚l£ dokumentumk‚sz¡t“ rendszere a @code{texinfo}
+csomag, amely minden disztrib£ci¢ r‚sze. Seg¡ts‚g‚vel k”nnyen k‚sz¡thetnk
+k‚zik”nyveket tartalomjegyz‚kkel, t rgymutat¢val, kislexikonnal, stb., de ¡rhatunk
+vele r”vid le¡r sokat, vagy programok dokument ci¢it. A keletkezett
+nyomtatott output min“s‚ge messze meghaladja azt, amit ma egy titk rn“i
+rendszeren el lehetne k‚sz¡teni. Ez a le¡r s is a @code{texinfo} magyar¡tott
+v ltozat val k‚szlt.@*
+Ugyancsak a @code{texinfo} seg¡ts‚g‚vel k‚szlnek azok a hipertext f jlok (on-line
+k‚zik”nyvek), amelyek a k‚perny“n megtekinthet“k@footnote{Linux alatt p‚ld ul
+a @code{tkInfo} seg¡ts‚g‚vel}.
+Nincs szks‚g arra, hogy kl”n f jlt k‚sz¡tsnk a nyomtatott dokument ci¢
+el“ ll¡t s hoz ‚s egy m sikat a k‚perny“n megjelen“ informci¢knak. pp
+ellenkez“leg: a @code{texinfo} mindkett“ el“ ll¡t s hoz ugyanazt a forr ssz”veget
+haszn lja. Fentiek miatt elterjedten haszn lj k, f“k‚nt angol nyelvterleten.
+Magyar nyelv– alkalmaz s nak ezideig g tat szabott a fejezetek, alfejezetek
+sz moz sa ‚s a hossz£ ¡-bet– hi nya.
+@*
+Jelen le¡r s c‚lja a magyar¡t s ismertet‚se.
+@space
+@vfill
+@supereject
+
+@chapter Helyes¡r si ‚s jel”l‚si elt‚r‚sek
+@headrule=1
+Az angol nyelv nemcsak a nyelvtani szerkezet‚ben t‚r el a magyar
+nyelvt“l, hanem a nyomtatott sz”vegben szok sos jel”l‚si konvenci¢iban
+is. gy p‚ld ul az angolban mindig nagybet–kkel ¡rjuk a
+r”v¡d¡t‚seket ‚s kifejez‚seket, mint p‚ld ul: Fig(s)., Sect. valamint a
+k‚pal ¡r s, t bl zat, pap¡r, bizony¡t s, angol neveit, ha sz mokkal egytt
+haszn ljuk.
+
+A legfontosabb elt‚r‚sek az @emph{1. t bl zatban} tal lhat¢k.
+@sp1
+@smallskip
+@begintable
+Angol @vt Magyar@elt
+Part 1 | 1. r‚sz@el
+Chapter 1 | 1. fejezet@el
+Section 1 | 1. szakasz @el
+Appendix | Fggel‚k @el
+Appendix 1| 1. fggel‚k@el
+Table 1 | 1. t bl zat@el
+Fig 1 | 1.  bra @el
+04.09.2004| 2004.@thinspace{}IX.@thinspace{}4.@el
+--- em-dash | csak angol id‚zetben@el
+-- en-dash | 85--90 @el
+-- en-dash | Budapest@ndash{}B‚cs @el
+``quoted text''| ,,id‚zet''@endtable
+@hucaption{Jel”l‚si elt‚r‚sek}
+@medskip
+@space
+@vfill
+@supereject
+
+
+@chapter A txi-hu.tex csomag
+
+@global@advance@footnoteno by 1
+A @code{texinfo} magyar nyelv– haszn lat hoz szks‚g van a @code{txi-hu.tex} csomag
+bet”lt‚s‚re.
+
+
+@section Telep¡t‚s
+
+Legegyszer–bb a teljes @code{texinfo} csomagot £jratelep¡teni abban az esetben,
+ha annak verzi¢sz ma 4.8. alatt van. A verzi¢sz mot futtat skor k‚perny“re
+¡rja, de megtekinthet“ a futtat skor keletkezett @code{.log} f jlban is.
+
+A friss¡t‚s manu lisan is megoldhat¢, ehhez csak a k”vetkez“ k‚t f jlt kell a
+@code{texinfo} k”nyvt r ba bem solnunk:@footnote{Unix alatt a jogosults gokat
+is be kell  ll¡tani, l. @code{chmod}}
+@example
+ txi-hu.tex
+ huhyp.tex
+@end example
+@sp 1
+em@TeX@space alatt szks‚gnk lesz m‚g az @code{info.tcp} ‚s a @code{convert.bat}
+ llom nyokra is. A sz”veg manipul l s t ‚s a c¡mlap gener l s t k”nny¡ti meg
+a @code{hdr0.mac}  llom ny haszn lata.
+
+
+@section Futtat s
+
+A telep¡t‚s ut n a magyar nyelvi v ltozat nem aktiv l¢dik automatikusan, hanem
+az eredeti angol nyelv– v ltozat lesz akt¡v. Az aktiv l shoz a dokumentumnak
+tartalmaznia kell a k”vetkez“ sort:
+@cindex documentlanguage
+@example
+@@documentlanguage hu
+@end example
+
+Ennek hat s ra t”lt“dik be a @code{txi-hu.tex}  llom ny, ami elv‚gzi a
+@code{texinfo} magyar¡t s t.
+Automatikus bet”lt‚s val¢sul meg a @code{hdr0.mac}  llom nyon keresztl.
+Bet”lt‚s folyamata k”zben a k”vetkez“ zenet jelenik meg a k‚perny“n:
+@cartouche
+@example
+ Loading txi-hu [version v. 1.0], hyphenation, (huhyp.tex
+Last updated: 27-01-02) fixed words, date and time stamp, captions,
+chapter and section defs.,
+ ...done.
+ The current Language is: Hungarian.)
+@end example
+@end cartouche
+
+
+@section Sz”vegbevitel
+
+Az eredeti @code{texinfo} eset‚n az ¡-bet– bevitel‚vel k‚t probl‚ma volt:
+@itemize @bullet
+@item kl”n makr¢t tartalmaz az ¡-bet– bevitel‚re, amivel
+n‚ha gondok akadnak a tartalomjegyz‚k helyes megjelen¡t‚s‚n‚l.
+@item plain @TeX-b“l csak konverzi¢val lehet  tvenni a sz”veget, mert a plain
+ezt haszn lja:
+@example
+ \'\i@{@}
+@end example
+@end itemize
+A probl‚ma megold s ra a @code{texinfo}-t £gy  ll¡tottam  t, hogy az
+¡-bet–t ebben a form ban fogadja el:
+@example
+ @@'@@i@{@}
+@end example
+@page
+
+A be¡r s  talak¡t s n‚lkl is megoldhat¢, ha a sz”veget a @code{@@tex--@@endtex}
+makr¢k k”z‚ tesszk, ¡gy nincs szks‚g a sz”veg  talak¡t s ra:
+@example
+ @@tex
+ sz\'\i@{@}nek
+ @@endtex
+@end example
+
+Hosszabb sz”veg bevitele ¡gy nagyon k‚nyelmetlen. L‚nyegesen k”nnyebb egy
+sz”vegszerkeszt“be ¡rni a sz”veget, majd azt egy seg‚dprogrammal a @TeX@space
+r‚sz‚re  talak¡tani. Ehhez haszn lhatjuk az @emTeX @code{texconv}
+@cindex texconv
+programj t vagy a @code{hion}
+@cindex hion
+seg‚dprogramot is@footnote{A @code{@@documentencoding} makr¢
+nem haszn lhat¢ egys‚gesen a magyar sz”vegek bevitel‚re, mert sokf‚le,
+elt‚r“ k¢dlap alatt k‚szlnek/k‚szltek sz”vegek, mint pl.: CWI, 852, 1250,
+1251, latin1, latin2, UNICODE, stb.}.
+
+
+@section Elv laszt s
+
+Az eredeti @code{texinfo} a magyar szavakat nem minden esetben v lasztja el
+helyesen, mivel az elv laszt si szab lyok angol nyelvre ‚rv‚nyesek. A
+legnagyobb probl‚m t a kett“z”tt k‚tjegy– szavak elv laszt sa okozza.
+A probl‚m t csak r‚szben oldja meg a @code{@@patterns} defin¡ci¢  t¡r sa,
+mivel m‚g ezt is sz mos kiv‚tellel kell kieg‚sz¡teni, pl.: @emph{ablakveg}.
+Makacs esetben a sz¢rend megv ltoztat sa seg¡thet, de ez sem minden esetben
+j rhat¢ £t, pl. id‚zetekn‚l. Ez‚rt az ‚kezetes szavakban megjel”lhetjk az
+elv laszt si helyeket@ndash{}ahol a @TeX@space elv laszthatja@ndash{}a
+k”vetkez“ m¢don:
+@example
+ k”@@-vet@@-ke@@-zett
+@end example
+Az elv laszt s csak a megjel”lt helyeken j”het l‚tre, azok k”zl is csak
+a legjobban illeszked“ ment‚n t”ri el a sz¢t.Az ”sszes t”bbi jel”l‚s
+figyelmen k¡vl lesz hagyva ‚s nyomtat sban sem jelenik meg.@*
+kezet n‚lkli szavak elv laszt sa teljesen hasonl¢ m¢don t”rt‚nik. Az‚rt,
+hogy egy sz¢ minden el“fordul s n l ne kelljen kl”n megjel”lni az
+elv laszt si helyeket, a gyakrabban haszn lt ‚kezet n‚lkli szavakat
+felvehetjk egy elv laszt si kiv‚telsz¢t rba.
+@cindex elv laszt si kiv‚telsz¢t r
+Egy ilyen b“v¡thet“
+kiv‚telsz¢t r tal lhat¢ a @code{huhyp.tex}  llom nyban. Ezt haszn ljuk abban
+az esetben is, ha a sz¢ elv laszt sa nyelvtanilag helyes ugyan, de nem
+szeretn‚nk, hogy az elv lasztott sz¢b¢l a sor v‚g‚n csak egyetlen karakter
+maradjon, vagy az £j sorba csak egyetlen bet–t vigyen  t.
+Futtat skor automatikusan bet”lt“dik ‚s fut s k”zben a mem¢ri ban marad.
+E sz¢t rak m‚ret‚t  ltal ban a rendelkez‚sre  ll¢ @TeX-mem¢ria korl tozza.
+T‚mak”r”k szerint t”bb sz¢t rat is l‚trehozhatunk, p‚ld ul programoz shoz,
+biol¢giai, g‚pipari, stb. terletekhez ‚s mindig csak az aktu list haszn ljuk.
+Sajnos az ilyen sz¢t rakba utas¡t s (makro) nem ¡rhat¢ be.
+@sp 1
+@cindex \hyphenation
+A sz¢t rak fel‚p¡t‚se egyszer–:
+@example
+ \hyphenation{<lista>}
+@end example
+
+A fel‚p¡t‚s a @code{huhyp.tex}  llom nyban tanulm nyozhat¢. Tapasztalatok
+szerint kb. 500 szavas sz¢t r bet”lt‚se m‚g nem okoz mem¢riagondot. Ez t”bb,
+mint elegend“, hiszen ez a sz¢t r csak azokat a szavakat tartalmazza, amit a
+@TeX@space nem tud helyesen elv lasztani.
+
+
+@section Fejezetek ‚s szakaszok
+
+Az eredeti angol @code{texinfo} angol jel”l‚st haszn l a fejezetek ‚s
+szakaszok sz moz s ra:
+@example
+ Chapter 1 Sample-title
+ 1.1 Section
+ 1.1.1 Subsection
+ 1.1.1.1 Sub-subsection
+ Appenddix A Sample-title
+ A.1 Section
+ A.1.1 Subsection
+ A.1.1.1 Sub-subsection
+@end example
+Ez a magyar jel”l‚si rendszernek nem felel meg, ez‚rt a magyar helyes¡r s
+szerinti c¡mk‚z‚si rendszert alkalmazzzuk. A fejezetek, szakaszok, stb.
+jel”l‚sei nem v ltoztak, csup n a magyar¡t¢ csomag cser‚li le a helyes¡r snak
+megfelel“en.
+@example
+ @@chapter Els@"o fejezet
+@end example
+
+Ugyancsak m¢dos¡t sra kerlt a tartalomjegyz‚k is, valamint a @code{hdr0.mac}
+ llom ny a sz¢k”z”k m‚ret‚t is a magyar szab lyoknak megfelel“en  ll¡tja be.
+
+
+@section T bl zatok ‚s  br k sz moz sa
+
+T bl zatok sz moz s hoz el“sz”r az @code{@@opencaption} utas¡t st kell haszn lni.
+Ennek hat s ra nyit¢dik meg az a f jl, amibe a t bl zatok adatait fogja ¡rni.
+Egy adott t bl zat sorsz m nak, c¡m‚nek ‚s oldalsz m nak ki¡r sa a
+@code{@@hucaption} utas¡t s hat s ra t”rt‚nik meg, mik”zben ugyanez az utas¡t s a
+sz”vegben is elhelyezi -- a magyar helyes¡r s szerint -- ugyanezt a c¡mk‚t:
+@example
+@@hucaption@{A drozof¡li k szexu lis aktivit sa@}
+@end example
+
+A c¡mk‚t ‚s a t bl zatot aj nlatos k”z”s dobozba tenni, kln”sen akkor, ha a
+t bl zat nem a laptk”r k”zep‚n van.
+
+P‚lda:@*
+@hucaption{A drozof¡li k szexu lis aktivit sa a cefre alkoholtatalm nak fggv‚ny‚ben}
+
+
+A t bl zatok jegyz‚k‚nek visszaolvas sa a @code{listcaptions} utas¡t ssal t”rt‚nik.
+
+@space
+@vfill
+@supereject
+
+
+@chapter Parancsreferencia
+
+Ez a r‚sz r”viden ismerteti a magyar¡t shoz haszn lt makr¢kat.
+
+@table @code
+@item @@abstractname
+Kivonat
+
+@item @@alph @var{num}
+Sz mok kisbet–re val¢ konverzi¢j t v‚gzi.@*
+@verbatim
+@alph{4}
+@end verbatim
+@result @alph{4}
+
+@item @@Alph @var{num}
+Sz mok nagybet–re val¢ konverzi¢j t v‚gzi.
+@verbatim
+@Alph{4}
+@end verbatim
+@result @Alph{4}
+
+@item @@appendixname
+fggel‚k. Akkor haszn ljuk, ha t”bb is van a dokumentumban,
+pl.: 2. fggel‚k.
+
+@item @@Appendixname
+Fggel‚k. Akkor haszn ljuk, ha csak egy van a dokumentumban.
+@verbatim
+@unnumbered @appendixname
+@end verbatim
+
+@item @@arabic @var{num}
+Ki¡r s arab sz mmal.
+
+@item @@bibname
+Irodalom
+
+@item @@Bibname
+Irodalomjegyz‚k
+
+@item @@docsize
+@ii{A dokument ci¢ terjedelme:} sz”veget ¡rja ki.
+
+@item @@enclname
+mell‚klet, l. fggel‚k.
+
+@item @@Enclname
+Mell‚klet, l. Fggel‚k.
+
+@item @@figurename
+ bra
+
+@item @@figures
+br k
+
+@item @@glossname
+Kislexikon
+
+@item @@headtoname
+C¡mzett
+
+@item @@hucaption
+Magyar helyes¡r s szerinti t bl zatc¡mk‚z‚s. A c¡mk‚t ‚s a t bl zatot k”z”s dobozba
+kell tenni. Hozz adja az aktu lis t bl zat sz m t, c¡m‚t ‚s oldalsz m t a
+t bl zatok jegyz‚k‚hez.
+
+@item @@hudate
+D tum ki¡r sa a magyar szok soknak megfelel“en, ‚v-H•-nap form ban, ahol az ‚v
+n‚gy sz mjeggyel, a h¢nap r¢mai nagybet–vel, a napok vezet“ null k n‚lkl
+lesznek ki¡rva.
+@example
+@@hudate.
+@end example
+@result @hudate
+
+@item @@imacro
+Pont n‚lkli i-bet– ki¡r s ra szolg l. Egyes t bl zatokban csak ezzel lehet
+hossz£ ¡-t ¡rni.
+
+@item @@indexname
+A @ii{T rgymutat¢} sz”veget ¡rja ki.
+
+@item @@introname
+A @ii{Bevezet‚s} sz”veget ¡rja ki.
+
+@item @@jmacro
+Pont n‚lkli j-bet– ki¡r s ra szolg l.
+
+@item @@listcaptions
+A t bl zatok jegyz‚k‚t illeszti be.
+
+@item @@listfigurenames
+Az @ii{br k jegyz‚ke} sz”veget ¡rja ki.
+@verbatim
+@unnumbered @listfigurenames
+@end verbatim
+
+@item @@listtablename
+A @ii{T bl zatok jegyz‚ke} sz”veget ¡rja ki.
+@verbatim
+@unnumbered @listtablename
+@end verbatim
+
+@item @@ndash
+En-dash jelet -- rajzol. A @emph{--} -t“l annyiban t‚r el, hogy mindk‚t
+oldal n van egy-egy @code{\thinspace}.
+
+@item @@ondate
+Az aktu lis d tum ki¡r sa a keltez‚shez szok sos, - n, -‚n, ... v‚gz“d‚ssel.
+@example
+Kelt Miskolcon, @@ondate.
+@end example
+@result Kelt Miskolcon, @ondate.
+@item @@opencaption
+T bl zatok jegy‚k‚nek f jlba ¡r s t ind¡tja el.
+
+@item @@pages @var{text}
+Az id‚zett sz”veg ezen az oldalon, oldalakon tal lhat¢.
+@item @@prefacename
+Az @ii{El“sz¢} sz”veget ¡rja ki.
+@example
+@@unnumbered @@prefacename
+@end example
+
+@item @@proofname
+A @ii{Bizony¡t s} sz”veget ¡rja ki.
+
+@item @@proofname
+Bizony¡t s
+
+@item @@refname
+A @ii{Hivatkoz sok} sz”veget ¡rja ki.
+
+@item @@roman @var{num}
+A param‚terk‚nt megadott sz mot kisbet–s r¢mai sz mmal ¡rja ki.
+@verbatim
+@roman{19}
+@end verbatim
+@result @roman{19}
+
+@item @@Roman @var{num}
+A param‚terk‚nt megadott sz mot nagybet–s r¢mai sz mmal ¡rja ki.
+@verbatim
+@Roman{19}
+@end verbatim
+@result @Roman{19}
+
+@item @@tablename
+A @ii{t bl zat} sz”veget ¡rja ki.
+
+@item @@tblnum
+Automatikus t bl zatsz moz s. A @var{TblNum} v ltoz¢ ‚rt‚k‚t minden ki¡r s
+ut n eggyel megn”veli.
+
+@item @@Today
+Az aktu lis d tum ki¡r sa, ‚v-h¢nap_neve-nap form ban, magyar nyelven.
+@verbatim
+@Today
+@end verbatim
+@result @Today
+@end table
+
+
+@section tdefini lt makr¢k
+
+@verbatim
+%%%
+%%% Set up fixed words for Hungarian (magyar) language.
+%%%
+\gdef\putwordAppendix{f\"uggel\'ek}
+\gdef\putwordChapter{fejezet}
+\gdef\putwordDefmac{Makr\'o}
+\gdef\putwordDefopt{Felhaszn\'al\'oi opci\'o}
+\gdef\putwordDeffunc{Funkci\'o}
+\gdef\putwordDefspec{Speci\'alis forma}
+\gdef\putwordDefvar{V\'altoz\'o}
+\gdef\putwordEquation{k\'eplet}
+\gdef\putwordfile{f\'ajl}
+\gdef\putwordIndexIsEmpty{(\"Ures index)}
+\gdef\putwordIndexNonexistent{(Neml\'etez\H{o} index)}
+\def\putwordInfo{Info}
+\gdef\putwordNoTitle{Nincs c\'\i{}m}
+\gdef\putwordpage{oldal}
+\gdef\putwordsection{r\'esz}
+\gdef\putwordSection{r\'esz}
+\gdef\putwordsee{l\'asd }
+\gdef\putwordSee{l. m\'eg: }
+\gdef\putwordTOC{Tartalomjegyz\'ek}
+\gdef\putwordShortTOC{\'Attekint\'es}
+%%%
+@end verbatim
+@space
+@page
+
+
+@appendix P‚lda k”rnyezet
+
+Ebben a r‚szben egy p‚ld t mutatunk be sz”vegf jl t”rdel‚s‚re.
+
+@appendixsec Shell program
+Az al bbi shell program MS-DOS ‚s Windows alatt futtathat¢.
+
+@cartouche
+@example
+@@echo off
+texconv -i info.tcp %1.txt %1.txi
+tex %1.txi
+texindex %1.cp
+tex %1.txi
+dvips %1.dvi
+rem gs386 -q -dNOPAUSE -sDEVICE#pdfwrite -sOutputFile#%1.pdf %1.ps -c quit
+@end example
+@end cartouche
+
+
+@appendixsec Egy minimum tex-f jl
+
+Egy dokumentumnak minimum az al bbi sorokat kell tartalmaznia a sikeres futtat shoz.
+
+@verbatim
+\input texinfo
+@documentlanguage hu
+Ide ker@"ul a sz@"oveg.
+@bye
+@end verbatim
+
+
+@appendixsec A @code{hdr0.mac} f jl
+
+A @code{hdr0.mac} f jl tartalmazza a dokumentum  ltal nos be ll¡t sait ‚s a
+c¡moldalt.
+@endrule
+@space
+@vfill
+@supereject
+
+
+@headings off
+@bibheader{@bibname}
+@bref
+@by{Bujdos¢ Gy”ngyi@ndash{}Fazekas Attila} @yr{1995} @book{@TeX@space{}kezd“l‚p‚sek}
+@publ{Tertia Kiad¢} @publaddr{Debrecen, Hungary} @endref
+@bref
+@by{Chassel, Robert J.@ndash{}Stallman, Richard M.} @yr{2004} @book{Texinfo}
+@publ{Free Software Foundation} @publaddr{Boston, USA} @endref
+@bref
+@by{Gyurgy k J nos} @yr{2000} @book{Szerkeszt“k ‚s szerz“k k‚zik”nyve}
+@publ{Osiris Kiad¢} @publaddr{Budapest, Hungary} @pages{121-126}@endref
+@bref
+@by{Magyar Tudom nyos Akad‚mia} @yr{1994} @book{A magyar helyes¡r s szab lyai}
+@publ{Akad‚miai Kiad¢} @publaddr{Budapest, Hungary} @endref
+
+@listcaptions
+@headings off
+
+@contents
+@headings off
+
+@bye
diff --git a/macros/texinfo/contrib/texinfo-hu/texinfo/po/ChangeLog b/macros/texinfo/contrib/texinfo-hu/texinfo/po/ChangeLog
new file mode 100644
index 0000000000..b965d4e334
--- /dev/null
+++ b/macros/texinfo/contrib/texinfo-hu/texinfo/po/ChangeLog
@@ -0,0 +1,14 @@
+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/macros/texinfo/contrib/texinfo-hu/texinfo/po/LINGUAS b/macros/texinfo/contrib/texinfo-hu/texinfo/po/LINGUAS
new file mode 100644
index 0000000000..295325dee2
--- /dev/null
+++ b/macros/texinfo/contrib/texinfo-hu/texinfo/po/LINGUAS
@@ -0,0 +1,19 @@
+cs
+da
+de
+de_AT
+eo
+fr
+he
+hr
+ja
+nl
+nb
+no
+pl
+ro
+ru
+sv
+tr
+zh_CN
+zh_TW
diff --git a/macros/texinfo/contrib/texinfo-hu/texinfo/po/Makefile.in.in b/macros/texinfo/contrib/texinfo-hu/texinfo/po/Makefile.in.in
new file mode 100644
index 0000000000..53efc5e16e
--- /dev/null
+++ b/macros/texinfo/contrib/texinfo-hu/texinfo/po/Makefile.in.in
@@ -0,0 +1,366 @@
+# Makefile for PO directory in any package using GNU gettext.
+# Copyright (C) 1995-1997, 2000-2004 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.14
+
+PACKAGE = @PACKAGE@
+VERSION = @VERSION@
+
+SHELL = /bin/sh
+@SET_MAKE@
+
+srcdir = @srcdir@
+top_srcdir = @top_srcdir@
+VPATH = @srcdir@
+
+prefix = @prefix@
+exec_prefix = @exec_prefix@
+datadir = @datadir@
+localedir = $(datadir)/locale
+gettextsrcdir = $(datadir)/gettext/po
+
+INSTALL = @INSTALL@
+INSTALL_DATA = @INSTALL_DATA@
+MKINSTALLDIRS = @MKINSTALLDIRS@
+mkinstalldirs = $(SHELL) $(MKINSTALLDIRS)
+
+GMSGFMT = @GMSGFMT@
+MSGFMT = @MSGFMT@
+XGETTEXT = @XGETTEXT@
+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 $(DOMAIN).pot stamp-po \
+$(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: all-@USE_NLS@
+
+all-yes: stamp-po
+all-no:
+
+# 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 -z "$(GMOFILES)" || $(MAKE) $(GMOFILES)
+ @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
+ $(XGETTEXT) --default-domain=$(DOMAIN) --directory=$(top_srcdir) \
+ --add-comments=TRANSLATORS: $(XGETTEXT_OPTIONS) \
+ --files-from=$(srcdir)/POTFILES.in \
+ --copyright-holder='$(COPYRIGHT_HOLDER)' \
+ --msgid-bugs-address='$(MSGID_BUGS_ADDRESS)'
+ 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 \
+ $(mkinstalldirs) $(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
+ $(mkinstalldirs) $(DESTDIR)$(datadir)
+ @catalogs='$(CATALOGS)'; \
+ for cat in $$catalogs; do \
+ cat=`basename $$cat`; \
+ lang=`echo $$cat | sed -e 's/\.gmo$$//'`; \
+ dir=$(localedir)/$$lang/LC_MESSAGES; \
+ $(mkinstalldirs) $(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 \
+ $(mkinstalldirs) $(DESTDIR)$(gettextsrcdir); \
+ else \
+ : ; \
+ fi
+installdirs-data-no:
+installdirs-data-yes:
+ $(mkinstalldirs) $(DESTDIR)$(datadir)
+ @catalogs='$(CATALOGS)'; \
+ for cat in $$catalogs; do \
+ cat=`basename $$cat`; \
+ lang=`echo $$cat | sed -e 's/\.gmo$$//'`; \
+ dir=$(localedir)/$$lang/LC_MESSAGES; \
+ $(mkinstalldirs) $(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: $(DISTFILES)
+ dists="$(DISTFILES)"; \
+ if test "$(PACKAGE)" = "gettext-tools"; then \
+ dists="$$dists Makevars.template"; \
+ 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); \
+ else \
+ cp -p $(srcdir)/$$file $(distdir); \
+ 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 $(top_builddir)/config.status @POMAKEFILEDEPS@
+ cd $(top_builddir) \
+ && CONFIG_FILES=$(subdir)/$@.in CONFIG_HEADERS= \
+ $(SHELL) ./config.status
+
+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/macros/texinfo/contrib/texinfo-hu/texinfo/po/Makevars b/macros/texinfo/contrib/texinfo-hu/texinfo/po/Makevars
new file mode 100644
index 0000000000..cf1c228c12
--- /dev/null
+++ b/macros/texinfo/contrib/texinfo-hu/texinfo/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_
+
+# 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/macros/texinfo/contrib/texinfo-hu/texinfo/po/POTFILES.in b/macros/texinfo/contrib/texinfo-hu/texinfo/po/POTFILES.in
new file mode 100644
index 0000000000..e19e34e7f7
--- /dev/null
+++ b/macros/texinfo/contrib/texinfo-hu/texinfo/po/POTFILES.in
@@ -0,0 +1,47 @@
+# 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.
+#
+# List of source files containing translatable strings.
+# The last line must not be a comment.
+
+info/echo-area.c
+info/footnotes.c
+info/footnotes.h
+info/indices.c
+info/info.c
+info/info.h
+info/infodoc.c
+info/infokey.c
+info/infomap.c
+info/m-x.c
+info/makedoc.c
+info/nodemenu.c
+info/pcterm.c
+info/session.c
+info/tilde.c
+info/variables.c
+info/window.c
+lib/getopt.c
+lib/system.h
+makeinfo/cmds.c
+makeinfo/defun.c
+makeinfo/files.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/toc.c
+makeinfo/xml.c
+util/install-info.c
+util/texindex.c
diff --git a/macros/texinfo/contrib/texinfo-hu/texinfo/po/Rules-quot b/macros/texinfo/contrib/texinfo-hu/texinfo/po/Rules-quot
new file mode 100644
index 0000000000..9c2a995e30
--- /dev/null
+++ b/macros/texinfo/contrib/texinfo-hu/texinfo/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/macros/texinfo/contrib/texinfo-hu/texinfo/po/boldquot.sed b/macros/texinfo/contrib/texinfo-hu/texinfo/po/boldquot.sed
new file mode 100644
index 0000000000..4b937aa517
--- /dev/null
+++ b/macros/texinfo/contrib/texinfo-hu/texinfo/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/macros/texinfo/contrib/texinfo-hu/texinfo/po/cs.gmo b/macros/texinfo/contrib/texinfo-hu/texinfo/po/cs.gmo
new file mode 100644
index 0000000000..03297906b1
--- /dev/null
+++ b/macros/texinfo/contrib/texinfo-hu/texinfo/po/cs.gmo
Binary files differ
diff --git a/macros/texinfo/contrib/texinfo-hu/texinfo/po/cs.po b/macros/texinfo/contrib/texinfo-hu/texinfo/po/cs.po
new file mode 100644
index 0000000000..14c7d5ef5b
--- /dev/null
+++ b/macros/texinfo/contrib/texinfo-hu/texinfo/po/cs.po
@@ -0,0 +1,3206 @@
+# 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: 2004-12-21 16:20-0800\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"
+
+#: info/echo-area.c:284 info/session.c:689
+msgid "Move forward a character"
+msgstr "Posun na následující znak"
+
+#: info/echo-area.c:296 info/session.c:705
+msgid "Move backward a character"
+msgstr "Posun na pøedcházející znak"
+
+#: info/echo-area.c:308
+msgid "Move to the start of this line"
+msgstr "Pøesun na zaèátek tohoto øádku"
+
+#: info/echo-area.c:313
+msgid "Move to the end of this line"
+msgstr "Pøesun na konec tohoto øádku"
+
+#: info/echo-area.c:321 info/session.c:723
+msgid "Move forward a word"
+msgstr "Posun na následující slovo"
+
+#: info/echo-area.c:361 info/session.c:772
+msgid "Move backward a word"
+msgstr "Posun na pøedcházející slovo"
+
+#: info/echo-area.c:401
+msgid "Delete the character under the cursor"
+msgstr "Smazání znaku pod kurzorem"
+
+#: info/echo-area.c:431
+msgid "Delete the character behind the cursor"
+msgstr "Smazání prvního znaku vlevo od kurzoru"
+
+#: info/echo-area.c:452
+msgid "Cancel or quit operation"
+msgstr "Zru¹ení nebo pøeru¹ení operace"
+
+#: info/echo-area.c:467
+msgid "Accept (or force completion of) this line"
+msgstr "Akceptování (nebo vnucené dokonèení) tohoto øádku"
+
+#: info/echo-area.c:472
+msgid "Insert next character verbatim"
+msgstr "Vlo¾ení dal¹ího znaku bez interpretace jeho funkce"
+
+#: info/echo-area.c:480
+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:653
+msgid "Kill the word preceding the cursor"
+msgstr "Smazání slova, od zaèátku slova do kurzoru"
+
+#: info/echo-area.c:868 info/echo-area.c:924
+msgid "No completions"
+msgstr "Doplnìní neexistují"
+
+#: info/echo-area.c:870
+msgid "Not complete"
+msgstr "Nekompletní"
+
+#: info/echo-area.c:911
+msgid "List possible completions"
+msgstr "Seznam mo¾ných doplnìní"
+
+#: info/echo-area.c:928
+msgid "Sole completion"
+msgstr "Jedinné doplnìní"
+
+#: info/echo-area.c:937
+msgid "One completion:\n"
+msgstr "Jedno doplnìní:\n"
+
+#: info/echo-area.c:938
+#, c-format
+msgid "%d completions:\n"
+msgstr "%d doplnìní:\n"
+
+#: info/echo-area.c:1085
+msgid "Insert completion"
+msgstr "Vlo¾ení doplnìní"
+
+#: info/echo-area.c:1220
+msgid "Building completions..."
+msgstr "Hledám doplnìní..."
+
+#: info/echo-area.c:1340
+msgid "Scroll the completions window"
+msgstr "Odrolování obsahu okna s doplnìními"
+
+#: info/footnotes.c:213
+msgid "Footnotes could not be displayed"
+msgstr "Poznámky pod èarou nelze zobrazit"
+
+#: info/footnotes.c:239
+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:172
+msgid "Look up a string in the index for this file"
+msgstr "Vyhledání øetìzce v rejstøíku tohoto souboru"
+
+#: info/indices.c:199
+msgid "Finding index entries..."
+msgstr "Jsou hledány polo¾ky rejstøíku..."
+
+#: info/indices.c:207
+msgid "No indices found."
+msgstr "®ádný rejstøík nebyl nalezen."
+
+#: info/indices.c:217
+msgid "Index entry: "
+msgstr "Polo¾ka rejstøíku: "
+
+#: info/indices.c:325
+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:335
+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:342
+msgid "No index entries."
+msgstr "Nejsou polo¾ky rejstøíku."
+
+#: info/indices.c:375
+#, fuzzy, c-format
+msgid "No %sindex entries containing `%s'."
+msgstr "Ji¾ není %spolo¾ka rejstøíku, která obsahuje \"%s\"."
+
+#: info/indices.c:376
+msgid "more "
+msgstr "dal¹í "
+
+#: info/indices.c:386
+msgid "CAN'T SEE THIS"
+msgstr "TOTO NELZE VIDÌT"
+
+#: info/indices.c:422
+#, 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:541
+#, fuzzy, c-format
+msgid "Scanning indices of `%s'..."
+msgstr "Prohledávám tyto rejstøíky \"%s\"..."
+
+#: info/indices.c:596
+#, c-format
+msgid "No available info files have `%s' in their indices."
+msgstr ""
+
+#: info/indices.c:622
+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:626
+msgid "Index apropos: "
+msgstr "Hledat v rejstøíku odkaz na:"
+
+#: info/indices.c:654
+#, 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:295 makeinfo/makeinfo.c:766 util/install-info.c:1266
+#: util/texindex.c:343
+#, fuzzy, c-format
+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"
+
+#: info/info.c:498
+#, 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:590
+msgid " -b, --speech-friendly be friendly to speech synthesizers.\n"
+msgstr ""
+
+#: info/info.c:597
+#, fuzzy, c-format
+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 -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"
+
+#: info/info.c:635 info/infokey.c:918 makeinfo/makeinfo.c:465
+#: util/install-info.c:466 util/texindex.c:292
+#, 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:669
+#, c-format
+msgid "Cannot find node `%s'."
+msgstr "Uzel `%s' nelze nalézt."
+
+#: info/info.c:670
+#, c-format
+msgid "Cannot find node `(%s)%s'."
+msgstr "Uzel `(%s)%s' nelze nalézt."
+
+#: info/info.c:671
+msgid "Cannot find a window!"
+msgstr "Nelze nalézt okno!"
+
+#: info/info.c:672
+msgid "Point doesn't appear within this window's node!"
+msgstr "Bod se nevyskutuje v oknì tohoto uzlu!"
+
+#: info/info.c:673
+msgid "Cannot delete the last window."
+msgstr "Poslední okno nelze smazat."
+
+#: info/info.c:674
+msgid "No menu in this node."
+msgstr "V tomto uzlu není menu."
+
+#: info/info.c:675
+msgid "No footnotes in this node."
+msgstr "V tomto nejsou poznámky pod èarou."
+
+#: info/info.c:676
+msgid "No cross references in this node."
+msgstr "V tomto uzlu není køí¾ový odkaz."
+
+#: info/info.c:677
+#, c-format
+msgid "No `%s' pointer for this node."
+msgstr "Pro tento uzel není `%s' ukazatel."
+
+#: info/info.c:678
+#, 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:679
+#, 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:680
+msgid "You are already at the last page of this node."
+msgstr "Ji¾ jste na poslední stránce tohoto uzlu."
+
+#: info/info.c:681
+msgid "You are already at the first page of this node."
+msgstr "Ji¾ jste na první stránce tohoto uzlu."
+
+#: info/info.c:682
+msgid "Only one window."
+msgstr "Pouze jedno okno."
+
+#: info/info.c:683
+msgid "Resulting window would be too small."
+msgstr "Výsledné okno by bylo pøíli¹ malé."
+
+#: info/info.c:684
+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:46 info/infodoc.c:95
+#, fuzzy
+msgid ""
+"Basic Commands in Info Windows\n"
+"******************************\n"
+msgstr "Základní pøíkazy v Info oknech\n"
+
+#: info/infodoc.c:49
+#, fuzzy
+msgid "\\%-10[quit-help] Quit this help.\n"
+msgstr " %-10s Ukonèení prohlí¾ení nápovìdy.\n"
+
+#: info/infodoc.c:50
+#, fuzzy
+msgid "\\%-10[quit] Quit Info altogether.\n"
+msgstr " %-10s Celkové ukonèení Infa.\n"
+
+#: info/infodoc.c:51
+#, fuzzy
+msgid "\\%-10[get-info-help-node] Invoke the Info tutorial.\n"
+msgstr " %-10s Vyvolání prùvodce Infem.\n"
+
+# Udìlat patch na podtr¾ení
+#: info/infodoc.c:53 info/infodoc.c:102
+#, fuzzy
+msgid ""
+"Selecting other nodes:\n"
+"----------------------\n"
+msgstr "Výbìr dal¹ích uzlù:\n"
+
+#: info/infodoc.c:55
+#, fuzzy
+msgid "\\%-10[next-node] Move to the \"next\" node of this node.\n"
+msgstr " %-10s Pøesun na \"dal¹í\" uzel tohoto uzlu.\n"
+
+#: info/infodoc.c:56
+#, fuzzy
+msgid "\\%-10[prev-node] Move to the \"previous\" node of this node.\n"
+msgstr " %-10s Pøesun na \"pøedchozí\" uzel tohoto uzlu.\n"
+
+#: info/infodoc.c:57
+#, fuzzy
+msgid "\\%-10[up-node] Move \"up\" from this node.\n"
+msgstr " %-10s Pøesun \"nahoru\" z aktuálního uzlu.\n"
+
+#: info/infodoc.c:58
+#, fuzzy
+msgid ""
+"\\%-10[menu-item] 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:60
+#, fuzzy
+msgid ""
+"\\%-10[xref-item] 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:61
+#, fuzzy
+msgid "\\%-10[history-node] 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:62
+#, fuzzy
+msgid ""
+"\\%-10[move-to-next-xref] 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:63
+#, fuzzy
+msgid ""
+"\\%-10[move-to-prev-xref] Skip to previous hypertext link within this "
+"node.\n"
+msgstr " %-10s Skok na následující hypertextový odkaz v tomto uzlu.\n"
+
+#: info/infodoc.c:64
+#, fuzzy
+msgid ""
+"\\%-10[select-reference-this-line] Follow the hypertext link under cursor.\n"
+msgstr " %-10s Následování hypertextového odkazu pod kurzorem.\n"
+
+#: info/infodoc.c:65
+#, 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"
+
+#: info/infodoc.c:66
+#, 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"
+
+#: info/infodoc.c:68 info/infodoc.c:116
+#, fuzzy
+msgid ""
+"Moving within a node:\n"
+"---------------------\n"
+msgstr "Pøesun uvnitø uzlu:\n"
+
+#: info/infodoc.c:70
+#, 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:71
+#, 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:72
+#, fuzzy
+msgid "\\%-10[next-line] Scroll forward 1 line.\n"
+msgstr " %-10s Posun o jeden øádek dopøedu.\n"
+
+#: info/infodoc.c:73
+#, fuzzy
+msgid "\\%-10[prev-line] Scroll backward 1 line.\n"
+msgstr " %-10s Posun o jeden øádek dozadu.\n"
+
+#: info/infodoc.c:74
+#, fuzzy
+msgid "\\%-10[scroll-forward] Scroll forward a page.\n"
+msgstr " %-10s Následující stránka.\n"
+
+#: info/infodoc.c:75
+#, fuzzy
+msgid "\\%-10[scroll-backward] Scroll backward a page.\n"
+msgstr " %-10s Pøedchozí stránka.\n"
+
+#: info/infodoc.c:77 info/infodoc.c:125
+#, fuzzy
+msgid ""
+"Other commands:\n"
+"---------------\n"
+msgstr "Dal¹í pøíkazy:\n"
+
+#: info/infodoc.c:79
+#, 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"
+
+#: info/infodoc.c:80
+#, fuzzy
+msgid "\\%-10[last-menu-item] Pick last item in node's menu.\n"
+msgstr " %-10s Zobrazení poslední polo¾ky menu uzlu.\n"
+
+#: info/infodoc.c:81
+#, fuzzy
+msgid ""
+"\\%-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"
+msgstr " uzlu, na který ukazuje první nalezená polo¾ka.\n"
+
+#: info/infodoc.c:83
+#, 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"
+
+#: info/infodoc.c:85
+#, 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"
+
+#: info/infodoc.c:87
+#, 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"
+
+#: info/infodoc.c:98
+#, c-format
+msgid " %-10s Quit this help.\n"
+msgstr " %-10s Ukonèení prohlí¾ení nápovìdy.\n"
+
+#: info/infodoc.c:99
+#, c-format
+msgid " %-10s Quit Info altogether.\n"
+msgstr " %-10s Celkové ukonèení Infa.\n"
+
+#: info/infodoc.c:100
+#, c-format
+msgid " %-10s Invoke the Info tutorial.\n"
+msgstr " %-10s Vyvolání prùvodce Infem.\n"
+
+#: info/infodoc.c:104
+#, 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:105
+#, 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:106
+#, c-format
+msgid " %-10s Move `up' from this node.\n"
+msgstr " %-10s Pøesun \"nahoru\" z aktuálního uzlu.\n"
+
+#: info/infodoc.c:107
+#, c-format
+msgid " %-10s Pick menu item specified by name.\n"
+msgstr " %-10s Vybrání polo¾ky menu zadané pomocí názvu.\n"
+
+#: info/infodoc.c:108
+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"
+
+#: info/infodoc.c:109
+#, 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:110
+#, 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:111
+#, 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:112
+#, 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:113
+#, 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:114
+#, 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:118
+#, c-format
+msgid " %-10s Scroll forward a page.\n"
+msgstr " %-10s Následující stránka.\n"
+
+#: info/infodoc.c:119
+#, c-format
+msgid " %-10s Scroll backward a page.\n"
+msgstr " %-10s Pøedchozí stránka.\n"
+
+#: info/infodoc.c:120
+#, 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:121
+#, c-format
+msgid " %-10s Go to the end of this node.\n"
+msgstr " %-10s Pøesun na konec tohoto uzlu.\n"
+
+#: info/infodoc.c:122
+#, c-format
+msgid " %-10s Scroll forward 1 line.\n"
+msgstr " %-10s Posun o jeden øádek dopøedu.\n"
+
+#: info/infodoc.c:123
+#, c-format
+msgid " %-10s Scroll backward 1 line.\n"
+msgstr " %-10s Posun o jeden øádek dozadu.\n"
+
+#: info/infodoc.c:127
+#, 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:128
+#, c-format
+msgid " %-10s Pick last item in node's menu.\n"
+msgstr " %-10s Zobrazení poslední polo¾ky menu uzlu.\n"
+
+#: info/infodoc.c:129
+#, c-format
+msgid ""
+" %-10s Search for a specified string in the index entries of this Info\n"
+msgstr ""
+" %-10s Hledání zadaného øetìzce v rejstøíku tohoto Info souboru a výbìr\n"
+
+#: info/infodoc.c:130
+msgid ""
+" 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:131
+#, c-format
+msgid " %-10s Move to node specified by name.\n"
+msgstr " %-10s Pøesun na uzel zadaný pomocí jména.\n"
+
+#: info/infodoc.c:132
+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"
+
+#: info/infodoc.c:133
+#, fuzzy, c-format
+msgid " %-10s Search forward for a specified string,\n"
+msgstr " %-10s Hledání zadaného øetìzce v tomto Info souboru.\n"
+
+#: info/infodoc.c:134 info/infodoc.c:136
+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"
+
+#: info/infodoc.c:135
+#, fuzzy, c-format
+msgid " %-10s Search backward for a specified string\n"
+msgstr " %-10s Hledání zadaného øetìzce v tomto Info souboru.\n"
+
+#: info/infodoc.c:316
+msgid "The current search path is:\n"
+msgstr "Aktuální hledací cesta je:\n"
+
+#: info/infodoc.c:320
+msgid ""
+"Commands available in Info windows:\n"
+"\n"
+msgstr "Pøíkazy dostupné v Info oknech:\n"
+
+#: info/infodoc.c:324
+msgid ""
+"Commands available in the echo area:\n"
+"\n"
+msgstr "Pøíkazy dostupné v zobrazovacím poli:\n"
+
+#: info/infodoc.c:347
+#, 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:351
+#, 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:375
+msgid "--- Use `\\[history-node]' or `\\[kill-node]' to exit ---\n"
+msgstr ""
+"--- Pou¾ijte `\\[history-node]' nebo `\\[kill-node]' pro ukonèení ---\n"
+
+#: info/infodoc.c:485
+msgid "Display help message"
+msgstr "Zobrazení nápovìdy"
+
+#: info/infodoc.c:503
+msgid "Visit Info node `(info)Help'"
+msgstr "Zobrazení Info uzlu `(info)Help'"
+
+#: info/infodoc.c:641
+msgid "Print documentation for KEY"
+msgstr "Zobrazení dokumentace ke KLÁVESE"
+
+#: info/infodoc.c:653
+#, c-format
+msgid "Describe key: %s"
+msgstr "Popis klávesy: %s"
+
+#: info/infodoc.c:664
+#, c-format
+msgid "ESC %s is undefined."
+msgstr "ESC %s je nedefinováno."
+
+#: info/infodoc.c:680 info/infodoc.c:709
+#, c-format
+msgid "%s is undefined."
+msgstr "%s je nedefinováno."
+
+#: info/infodoc.c:730
+#, c-format
+msgid "%s is defined to %s."
+msgstr "Klávesa %s je definována pro pøíkaz %s."
+
+#: info/infodoc.c:1153
+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:1157
+msgid "Where is command: "
+msgstr "Kde je pøíkaz: "
+
+#: info/infodoc.c:1179
+#, c-format
+msgid "`%s' is not on any keys"
+msgstr "Pøíkaz `%s' není na ¾ádné klávese"
+
+#: info/infodoc.c:1186
+#, 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:1190
+#, c-format
+msgid "%s can be invoked via %s."
+msgstr "Pøíkaz %s mù¾e být vyvolán pomocí %s."
+
+#: info/infodoc.c:1195
+#, c-format
+msgid "There is no function named `%s'"
+msgstr "Funkce `%s' není známa"
+
+#: info/infokey.c:145
+#, c-format
+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 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"
+
+#: 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:1500
+#, c-format
+msgid "Ignoring invalid infokey file `%s' - too small"
+msgstr ""
+
+#: info/infomap.c:1503
+#, c-format
+msgid "Ignoring invalid infokey file `%s' - too big"
+msgstr ""
+
+#: info/infomap.c:1516
+#, c-format
+msgid "Error reading infokey file `%s' - short read"
+msgstr ""
+
+#: info/infomap.c:1535
+#, c-format
+msgid ""
+"Invalid infokey file `%s' (bad magic numbers) -- run infokey to update it"
+msgstr ""
+
+#: info/infomap.c:1544
+#, c-format
+msgid "Your infokey file `%s' is out of date -- run infokey to update it"
+msgstr ""
+
+#: info/infomap.c:1560
+#, c-format
+msgid ""
+"Invalid infokey file `%s' (bad section length) -- run infokey to update it"
+msgstr ""
+
+#: info/infomap.c:1581
+#, c-format
+msgid ""
+"Invalid infokey file `%s' (bad section code) -- run infokey to update it"
+msgstr ""
+
+#: info/infomap.c:1716
+msgid "Bad data in infokey file -- some key bindings ignored"
+msgstr ""
+
+#: info/infomap.c:1766
+msgid "Bad data in infokey file -- some var settings ignored"
+msgstr ""
+
+#: info/m-x.c:69
+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:73
+msgid "Describe command: "
+msgstr "Popis pøíkazu: "
+
+#: info/m-x.c:96
+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:140
+msgid "Cannot execute an `echo-area' command here."
+msgstr "Pøíkaz zobrazovacího pole nelze vykonat zde."
+
+#: info/m-x.c:154
+#, fuzzy, c-format
+msgid "Undefined command: %s"
+msgstr "Neznámý pøíkaz `%s'"
+
+#: info/m-x.c:160
+msgid "Set the height of the displayed window"
+msgstr "Nastavení vý¹ky obrazovky"
+
+#: info/m-x.c:173
+#, c-format
+msgid "Set screen height to (%d): "
+msgstr "Vý¹ka obrazovky (%d): "
+
+#: info/makedoc.c:162 info/makedoc.c:170
+#, 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:550
+#, c-format
+msgid "Couldn't manipulate the file %s.\n"
+msgstr "Se souborem %s nelze pracovat.\n"
+
+#: info/nodemenu.c:31
+msgid ""
+"\n"
+"* Menu:\n"
+" (File)Node Lines Size Containing File\n"
+" ---------- ----- ---- ---------------"
+msgstr ""
+"\n"
+"* Menu:\n"
+" (Soubor)Uzel Øádkù Velikost Soubor\n"
+" ------------ ----- -------- ------"
+
+#: info/nodemenu.c:202
+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:224
+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:304
+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:317
+msgid "Select visited node: "
+msgstr "Vyberte nav¹tívený uzel: "
+
+#: info/nodemenu.c:337 info/session.c:2264
+#, c-format
+msgid "The reference disappeared! (%s)."
+msgstr "Odkaz se ztratil! (%s)."
+
+#: info/session.c:162
+#, 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:620
+msgid "Move down to the next line"
+msgstr "Posun dolù na dal¹í øádek"
+
+#: info/session.c:635
+msgid "Move up to the previous line"
+msgstr "Posun nahoru na pøedchozí øádek"
+
+#: info/session.c:650
+msgid "Move to the end of the line"
+msgstr "Pøesun na konec øádku"
+
+#: info/session.c:670
+msgid "Move to the start of the line"
+msgstr "Pøesun na zaèátek øádku"
+
+#: info/session.c:860 makeinfo/node.c:1424
+msgid "Next"
+msgstr "Dal¹í"
+
+#: info/session.c:863
+msgid "Following Next node..."
+msgstr "Pøechod na dal¹í uzel..."
+
+#: info/session.c:881
+msgid "Selecting first menu item..."
+msgstr "Zobrazování první polo¾ky menu..."
+
+#: info/session.c:893
+msgid "Selecting Next node..."
+msgstr "Zobrazování dal¹ího uzlu..."
+
+#: info/session.c:964
+#, c-format
+msgid "Moving Up %d time(s), then Next."
+msgstr "Pøesouvání %d krát nahoru, potom na dal¹í."
+
+#: info/session.c:988
+msgid "No more nodes within this document."
+msgstr "V tomto dokumentu ji¾ nejsou dal¹í uzly."
+
+#: info/session.c:1011
+msgid "No `Prev' for this node."
+msgstr "Pro tento uzel není pøedchozí uzel."
+
+#: info/session.c:1014 info/session.c:1073
+msgid "Moving Prev in this window."
+msgstr "Pøesun na pøedchozí uzel v tomto oknì."
+
+#: info/session.c:1030
+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:1034
+msgid "Moving Up in this window."
+msgstr "Pøesun nahoru v tomto oknì."
+
+#: info/session.c:1084
+msgid "Moving to `Prev's last menu item."
+msgstr "Pøesun na poslední polo¾ku menu pøedchozího uzlu."
+
+#: info/session.c:1095
+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:1111
+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:1205
+msgid "Scroll forward in this window"
+msgstr "Posun o stránku dolù v tomto oknì"
+
+#: info/session.c:1213
+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:1221
+#, fuzzy
+msgid "Scroll forward in this window staying within node"
+msgstr "Posun o stránku dolù v tomto oknì"
+
+#: info/session.c:1229
+#, 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:1237
+msgid "Scroll backward in this window"
+msgstr "Posun o stránku nahoru v tomto oknì"
+
+#: info/session.c:1245
+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:1254
+#, fuzzy
+msgid "Scroll backward in this window staying within node"
+msgstr "Posun o stránku nahoru v tomto oknì"
+
+#: info/session.c:1262
+#, 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:1270
+msgid "Move to the start of this node"
+msgstr "Posun na zaèátek tohoto uzlu"
+
+#: info/session.c:1277
+msgid "Move to the end of this node"
+msgstr "Posun na konec tohoto uzlu"
+
+#: info/session.c:1284
+msgid "Scroll down by lines"
+msgstr "Posun dolù po øádcích"
+
+#: info/session.c:1301
+msgid "Scroll up by lines"
+msgstr "Posun nahoru po øádcích"
+
+#: info/session.c:1319
+msgid "Scroll down by half screen size"
+msgstr "Posun dolù o polovinu velikosti obrazovky"
+
+#: info/session.c:1345
+msgid "Scroll up by half screen size"
+msgstr "Posun nahoru o polovinu velikosti obrazovky"
+
+#: info/session.c:1374
+msgid "Select the next window"
+msgstr "Výbìr následujícího okna"
+
+#: info/session.c:1413
+msgid "Select the previous window"
+msgstr "Výbìr pøedchozího okna"
+
+#: info/session.c:1464
+msgid "Split the current window"
+msgstr "Rozdìlení aktuálního okna"
+
+#: info/session.c:1545
+msgid "Delete the current window"
+msgstr "Smazání aktuálního okna"
+
+#: info/session.c:1553
+msgid "Cannot delete a permanent window"
+msgstr "Permanentní okno nelze smazat"
+
+#: info/session.c:1585
+msgid "Delete all other windows"
+msgstr "Smazání v¹ech ostatních oknen"
+
+#: info/session.c:1631
+msgid "Scroll the other window"
+msgstr "Posun druhého okna o stránku dolù"
+
+#: info/session.c:1652
+msgid "Scroll the other window backward"
+msgstr "Posun druhého okna o stránku zpìt"
+
+#: info/session.c:1658
+msgid "Grow (or shrink) this window"
+msgstr "Zmìna velikosti okna"
+
+#: info/session.c:1669
+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:1676
+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:1848
+msgid "Select the Next node"
+msgstr "Zobrazení následujícího uzlu"
+
+#: info/session.c:1856
+msgid "Select the Prev node"
+msgstr "Zobrazení pøedchozího uzlu"
+
+#: info/session.c:1864
+msgid "Select the Up node"
+msgstr "Zobrazení vy¹¹ího uzlu"
+
+#: info/session.c:1871
+msgid "Select the last node in this file"
+msgstr "Zobrazení posledního uzlu v tomto souboru"
+
+#: info/session.c:1898 info/session.c:1931
+msgid "This window has no additional nodes"
+msgstr "Toto okno nemá více dal¹ích uzlù"
+
+#: info/session.c:1904
+msgid "Select the first node in this file"
+msgstr "Zobrazení prvního uzlu v tomto souboru"
+
+#: info/session.c:1938
+msgid "Select the last item in this node's menu"
+msgstr "Zobrazení poslední polo¾ky menu tohoto uzlu"
+
+#: info/session.c:1944
+msgid "Select this menu item"
+msgstr "Zobrazení této polo¾ky menu"
+
+#: info/session.c:1977
+#, c-format
+msgid "There aren't %d items in this menu."
+msgstr "V tomto menu není %d. polo¾ka"
+
+#: info/session.c:2171 info/session.c:2172
+#, c-format
+msgid "Menu item (%s): "
+msgstr "Polo¾ka menu (%s): "
+
+#: info/session.c:2175
+msgid "Menu item: "
+msgstr "Polo¾ka menu: "
+
+#: info/session.c:2182 info/session.c:2183
+#, c-format
+msgid "Follow xref (%s): "
+msgstr "Následování køí¾ového odkazu (%s): "
+
+#: info/session.c:2186
+msgid "Follow xref: "
+msgstr "Následování køí¾ového odkazu: "
+
+#: info/session.c:2315
+msgid "Read a menu item and select its node"
+msgstr "Zadání jména polo¾ky menu a následné zobrazení"
+
+#: info/session.c:2323
+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:2329
+msgid "Move to the start of this node's menu"
+msgstr "Pøesun na zaèátek menu tohoto uzlu"
+
+#: info/session.c:2353
+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:2381
+msgid "Read a node name and select it"
+msgstr "Zadání jména uzlu a jeho následné zobrazení"
+
+#: info/session.c:2436 info/session.c:2441
+msgid "Goto node: "
+msgstr "Pøesun na uzel: "
+
+#: info/session.c:2505
+#, c-format
+msgid "No menu in node `%s'."
+msgstr "V uzlu `%s' není menu."
+
+#: info/session.c:2551
+#, c-format
+msgid "No menu item `%s' in node `%s'."
+msgstr "Polo¾ka menu `%s' v uzlu `%s' není."
+
+#: info/session.c:2581
+#, 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:2631
+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:2633
+msgid "Follow menus: "
+msgstr "Následování menu: "
+
+#: info/session.c:2826
+msgid "Find the node describing program invocation"
+msgstr "Nalezení uzlu popisujícího pøepínaèe programu"
+
+#: info/session.c:2828
+#, c-format
+msgid "Find Invocation node of [%s]: "
+msgstr "Nalezení uzlu s pøepínaèi programu [%s]: "
+
+#: info/session.c:2866
+msgid "Read a manpage reference and select it"
+msgstr "Zadání jména manuálové stránky a následné zobrazení"
+
+#: info/session.c:2870
+msgid "Get Manpage: "
+msgstr "Manuálová stránka: "
+
+#: info/session.c:2900
+msgid "Select the node `Top' in this file"
+msgstr "Zobrazení nejvy¹¹ího uzlu v tomto souboru"
+
+#: info/session.c:2906
+msgid "Select the node `(dir)'"
+msgstr "Zobrazení uzlu `(dir)'"
+
+#: info/session.c:2923 info/session.c:2925
+#, c-format
+msgid "Kill node (%s): "
+msgstr "Zru¹ení uzlu (%s): "
+
+#: info/session.c:2977
+#, c-format
+msgid "Cannot kill node `%s'"
+msgstr "Uzel `%s' nelze zru¹it"
+
+#: info/session.c:2987
+msgid "Cannot kill the last node"
+msgstr "Poslední uzel nelze zru¹it"
+
+#: info/session.c:3073
+msgid "Select the most recently selected node"
+msgstr "Zobrazení poslední dobou nejvíce nav¹tìvovaných uzlù"
+
+#: info/session.c:3079
+msgid "Kill this node"
+msgstr "Zru¹ení tohoto uzlu"
+
+#: info/session.c:3087
+msgid "Read the name of a file and select it"
+msgstr "Zadání jména souboru a jeho následné zobrazení"
+
+#: info/session.c:3091
+msgid "Find file: "
+msgstr "Nalezení souboru: "
+
+#: info/session.c:3108
+#, c-format
+msgid "Cannot find `%s'."
+msgstr "Nelze najít `%s'."
+
+#: info/session.c:3151 info/session.c:3269
+#, c-format
+msgid "Could not create output file `%s'."
+msgstr "Výstupní soubor `%s' nelze vytvoøit."
+
+#: info/session.c:3165 info/session.c:3287 info/session.c:3347
+msgid "Done."
+msgstr "Dokonèeno."
+
+#: info/session.c:3220
+#, c-format
+msgid "Writing node %s..."
+msgstr "Zapisování uzlu %s..."
+
+#: info/session.c:3296
+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:3331
+#, c-format
+msgid "Cannot open pipe to `%s'."
+msgstr "Rouru do `%s' nelze otevøít."
+
+#: info/session.c:3337
+#, c-format
+msgid "Printing node %s..."
+msgstr "Probíhá tisk uzlu %s..."
+
+#: info/session.c:3567
+#, c-format
+msgid "Searching subfile %s ..."
+msgstr "Probíhá hledání podsouboru %s..."
+
+#: info/session.c:3619
+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:3626
+msgid "Read a string and search for it"
+msgstr "Pøeètení øetìzce a jeho vyhledání"
+
+#: info/session.c:3634
+msgid "Read a string and search backward for it"
+msgstr "Pøeètení øetìzce a jeho vyhledání (zpìtné)"
+
+#: info/session.c:3670 info/session.c:3677
+#, c-format
+msgid "%s%sfor string [%s]: "
+msgstr "%s%søetìzce [%s]: "
+
+#: info/session.c:3671 info/session.c:3678
+msgid "Search backward"
+msgstr "Zpìtné hledání"
+
+#: info/session.c:3672 info/session.c:3678
+msgid "Search"
+msgstr "Hledání"
+
+#: info/session.c:3673 info/session.c:3679
+msgid " case-sensitively "
+msgstr " (velikost rozhoduje)"
+
+#: info/session.c:3674 info/session.c:3679
+msgid " "
+msgstr " "
+
+#: info/session.c:3718
+msgid "Search failed."
+msgstr "Nebylo nalezeno."
+
+#: info/session.c:3736
+msgid "Repeat last search in the same direction"
+msgstr "Opakování posledního hledání tím samým smìrem"
+
+#: info/session.c:3739 info/session.c:3749
+msgid "No previous search string"
+msgstr "Není pøedchozí hledaný øetìzec"
+
+#: info/session.c:3746
+msgid "Repeat last search in the reverse direction"
+msgstr "Opakování posledního hledání opaèným smìrem"
+
+#: info/session.c:3765 info/session.c:3771
+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:3851
+msgid "I-search backward: "
+msgstr "zpìtné interaktivní hledání: "
+
+#: info/session.c:3853
+msgid "I-search: "
+msgstr "interaktivní hledání: "
+
+#: info/session.c:3878 info/session.c:3880
+msgid "Failing "
+msgstr "Bezvýsledné "
+
+#: info/session.c:4340
+msgid "Move to the previous cross reference"
+msgstr "Pøesun na pøedcházející køí¾ový odkaz"
+
+#: info/session.c:4349
+msgid "Move to the next cross reference"
+msgstr "Pøesun na následující køí¾ový odkaz"
+
+#: info/session.c:4359
+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:4382
+msgid "Cancel current operation"
+msgstr "Zru¹ení aktuální operace"
+
+#: info/session.c:4389
+msgid "Quit"
+msgstr "Ukonèení operace"
+
+#: info/session.c:4398
+msgid "Move the cursor to a specific line of the window"
+msgstr "Pøesun kurzoru na zadaný øádek okna"
+
+#: info/session.c:4430
+msgid "Redraw the display"
+msgstr "Pøekreslení obrazovky"
+
+#: info/session.c:4467
+msgid "Quit using Info"
+msgstr "Ukonèení Infa"
+
+#: info/session.c:4480
+msgid "Run command bound to this key's lowercase variant"
+msgstr ""
+
+#: info/session.c:4491
+#, c-format
+msgid "Unknown command (%s)."
+msgstr "Neznámý pøíkaz (%s)."
+
+#: info/session.c:4494
+#, c-format
+msgid "\"%s\" is invalid"
+msgstr "Sekvence kláves \"%s\" je neplatná"
+
+#: info/session.c:4495
+#, fuzzy, c-format
+msgid "`%s' is invalid"
+msgstr "Sekvence kláves \"%s\" je neplatná"
+
+#: info/session.c:4709
+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:4718
+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:4733
+msgid "Internally used by \\[universal-argument]"
+msgstr "Vnitønì u¾íváno funkcí \\[universal-argument]"
+
+#: info/tilde.c:338
+#, 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:64
+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:68
+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:74
+msgid "Explain the use of a variable"
+msgstr "Zobrazení popisu promìnné"
+
+#: info/variables.c:80
+msgid "Describe variable: "
+msgstr "Popis promìnné: "
+
+#: info/variables.c:99
+msgid "Set the value of an Info variable"
+msgstr "Nastavení hodnoty Info promìnné"
+
+#: info/variables.c:105
+msgid "Set variable: "
+msgstr "Nastavení promìnné: "
+
+#: info/variables.c:123
+#, c-format
+msgid "Set %s to value (%d): "
+msgstr "Nastavení promìnné %s na hodnotu (%d): "
+
+#: info/variables.c:164
+#, c-format
+msgid "Set %s to value (%s): "
+msgstr "Nastavení promìnné %s na hodnotu (%s): "
+
+#: info/window.c:1138
+msgid "--*** Tags out of Date ***"
+msgstr "--*** Znaèky jsou zastatalé ***"
+
+#: info/window.c:1149
+msgid "-----Info: (), lines ----, "
+msgstr "-----Info: (), øádkù ----, "
+
+#: info/window.c:1156
+#, c-format
+msgid "-%s---Info: %s, %d lines --%s--"
+msgstr "-%s---Info: %s, øádkù: %d --%s--"
+
+#: info/window.c:1160
+#, c-format
+msgid "-%s%s-Info: (%s)%s, %d lines --%s--"
+msgstr "-%s%s-Info: (%s)%s, øádkù: %d --%s--"
+
+#: info/window.c:1167
+#, c-format
+msgid " Subfile: %s"
+msgstr " Podsoubor: %s"
+
+#: lib/getopt.c:551 lib/getopt.c:570
+#, c-format
+msgid "%s: option `%s' is ambiguous\n"
+msgstr "%s: pøepínaè `%s' není jednoznaèný\n"
+
+#: lib/getopt.c:603 lib/getopt.c:607
+#, 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"
+
+#: lib/getopt.c:616 lib/getopt.c:621
+#, 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"
+
+#: lib/getopt.c:667 lib/getopt.c:689 lib/getopt.c:1020 lib/getopt.c:1042
+#, c-format
+msgid "%s: option `%s' requires an argument\n"
+msgstr "%s: pøepínaè `%s' vy¾aduje argument\n"
+
+#: lib/getopt.c:727 lib/getopt.c:730
+#, c-format
+msgid "%s: unrecognized option `--%s'\n"
+msgstr "%s: neznámý pøepínaè `--%s'\n"
+
+#: lib/getopt.c:738 lib/getopt.c:741
+#, c-format
+msgid "%s: unrecognized option `%c%s'\n"
+msgstr "%s: neznámý pøepínaè `%c%s'\n"
+
+#: lib/getopt.c:796 lib/getopt.c:799
+#, c-format
+msgid "%s: illegal option -- %c\n"
+msgstr "%s: neznámý pøepínaè -- %c\n"
+
+#: lib/getopt.c:805 lib/getopt.c:808
+#, c-format
+msgid "%s: invalid option -- %c\n"
+msgstr "%s: neznámý pøepínaè -- %c\n"
+
+#: lib/getopt.c:863 lib/getopt.c:882 lib/getopt.c:1095 lib/getopt.c:1116
+#, c-format
+msgid "%s: option requires an argument -- %c\n"
+msgstr "%s: pøepínaè vy¾aduje argument -- %c\n"
+
+#: lib/getopt.c:935 lib/getopt.c:954
+#, c-format
+msgid "%s: option `-W %s' is ambiguous\n"
+msgstr "%s: pøepínaè `-W %s' není jednoznaèný\n"
+
+#: lib/getopt.c:978 lib/getopt.c:999
+#, 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"
+
+#: makeinfo/cmds.c:520 makeinfo/cmds.c:542
+#, fuzzy, c-format
+msgid "arguments to @%s ignored"
+msgstr "©patný argument pro %c%s"
+
+#: makeinfo/cmds.c:585
+msgid "January"
+msgstr "Leden"
+
+#: makeinfo/cmds.c:585
+msgid "February"
+msgstr "Únor"
+
+#: makeinfo/cmds.c:585
+msgid "March"
+msgstr "Bøezen"
+
+#: makeinfo/cmds.c:585
+msgid "April"
+msgstr "Duben"
+
+#: makeinfo/cmds.c:585
+msgid "May"
+msgstr "Kvìten"
+
+#: makeinfo/cmds.c:586
+msgid "June"
+msgstr "Èerven"
+
+#: makeinfo/cmds.c:586
+msgid "July"
+msgstr "Èervenec"
+
+#: makeinfo/cmds.c:586
+msgid "August"
+msgstr "Srpen"
+
+#: makeinfo/cmds.c:586
+msgid "September"
+msgstr "Záøí"
+
+#: makeinfo/cmds.c:586
+msgid "October"
+msgstr "Øíjen"
+
+#: makeinfo/cmds.c:587
+msgid "November"
+msgstr "Listopad"
+
+#: makeinfo/cmds.c:587
+msgid "December"
+msgstr "Prosinec"
+
+#: makeinfo/cmds.c:936
+#, c-format
+msgid "unlikely character %c in @var"
+msgstr "nepravdìpodobný znak %c ve @var"
+
+#: makeinfo/cmds.c:979
+msgid "@sc argument all uppercase, thus no effect"
+msgstr "@sc argument je celý velkými písmeny, zbyteènì"
+
+#: makeinfo/cmds.c:1034
+#, fuzzy, c-format
+msgid "`{' expected, but saw `%c'"
+msgstr "`@end' vy¾aduje `%s', ale vidí `%s'"
+
+#: makeinfo/cmds.c:1074
+msgid "end of file inside verb block"
+msgstr ""
+
+#: makeinfo/cmds.c:1082
+#, fuzzy, c-format
+msgid "`}' expected, but saw `%c'"
+msgstr "`@end' vy¾aduje `%s', ale vidí `%s'"
+
+#: makeinfo/cmds.c:1112
+msgid ""
+"@strong{Note...} produces a spurious cross-reference in Info; reword to "
+"avoid that"
+msgstr ""
+
+#: makeinfo/cmds.c:1305
+#, c-format
+msgid "%c%s is obsolete"
+msgstr "Pøíkaz %c%s je zastaralý"
+
+#: makeinfo/cmds.c:1414
+#, c-format
+msgid "@sp requires a positive numeric argument, not `%s'"
+msgstr "@sp vy¾aduje kladný èíselný argument a ne `%s'"
+
+#: makeinfo/cmds.c:1763 makeinfo/cmds.c:1819 makeinfo/footnote.c:82
+#, c-format
+msgid "Bad argument to %c%s"
+msgstr "©patný argument pro %c%s"
+
+#: makeinfo/cmds.c:1773 makeinfo/makeinfo.c:4142
+msgid "asis"
+msgstr "asis"
+
+#: makeinfo/cmds.c:1775 makeinfo/cmds.c:1805 makeinfo/makeinfo.c:4144
+msgid "none"
+msgstr "none"
+
+#: makeinfo/cmds.c:1789
+#, fuzzy, c-format
+msgid "Bad argument to @%s"
+msgstr "©patný argument pro %c%s"
+
+#: makeinfo/cmds.c:1803
+msgid "insert"
+msgstr ""
+
+#: makeinfo/defun.c:84
+msgid "Missing `}' in @def arg"
+msgstr "Chybìjící `}' v argumentu @def"
+
+#: makeinfo/defun.c:403
+msgid "Function"
+msgstr "Funkce"
+
+#: makeinfo/defun.c:406
+msgid "Macro"
+msgstr "Makro"
+
+#: makeinfo/defun.c:409
+msgid "Special Form"
+msgstr "Speciální forma"
+
+#: makeinfo/defun.c:413
+msgid "Variable"
+msgstr "Promìnná"
+
+#: makeinfo/defun.c:416
+msgid "User Option"
+msgstr "U¾ivatelská volba"
+
+#: makeinfo/defun.c:420
+msgid "Instance Variable"
+msgstr "Instance promìnné"
+
+#: makeinfo/defun.c:424
+msgid "Method"
+msgstr "Metoda"
+
+#: makeinfo/defun.c:500 makeinfo/defun.c:505 makeinfo/defun.c:545
+#: makeinfo/defun.c:644 makeinfo/xml.c:2229
+msgid "of"
+msgstr "z"
+
+#: makeinfo/defun.c:509 makeinfo/defun.c:513 makeinfo/defun.c:517
+#: makeinfo/defun.c:551 makeinfo/defun.c:650 makeinfo/xml.c:2234
+msgid "on"
+msgstr ""
+
+#: makeinfo/defun.c:711
+#, c-format
+msgid "Must be in `@%s' environment to use `@%s'"
+msgstr ""
+
+#: makeinfo/files.c:435
+#, c-format
+msgid "%s: getwd: %s, %s\n"
+msgstr "%s: getwd: %s, %s\n"
+
+#: makeinfo/files.c:638
+#, c-format
+msgid "`%s' omitted before output filename"
+msgstr ""
+
+#: makeinfo/files.c:646
+#, c-format
+msgid "`%s' omitted since writing to stdout"
+msgstr ""
+
+#: makeinfo/files.c:694
+msgid "Output buffer not empty."
+msgstr ""
+
+#: makeinfo/footnote.c:150
+#, c-format
+msgid "`%c%s' needs an argument `{...}', not just `%s'"
+msgstr "`%c%s' potøebuje argument `{...}' a ne pouze `%s'"
+
+#: makeinfo/footnote.c:165
+#, c-format
+msgid "No closing brace for footnote `%s'"
+msgstr "Chybí uzavírací závorka pro poznámku pod èarou `%s'"
+
+#: makeinfo/footnote.c:198
+msgid "Footnote defined without parent node"
+msgstr "Poznámka pod èarou definována bez rodièovského uzlu"
+
+#: makeinfo/footnote.c:210
+#, fuzzy
+msgid "Footnotes inside footnotes are not allowed"
+msgstr "Poznámka pod èarou definována bez rodièovského uzlu"
+
+#: makeinfo/footnote.c:302 makeinfo/index.c:189
+msgid "Footnotes"
+msgstr "Poznámky pod èarou"
+
+#: makeinfo/html.c:87
+#, c-format
+msgid "%s: could not open --css-file: %s"
+msgstr ""
+
+#: makeinfo/html.c:172
+#, c-format
+msgid "%s:%d: --css-file ended in comment"
+msgstr ""
+
+#: makeinfo/html.c:207
+msgid "Untitled"
+msgstr "Neoznaèeno"
+
+#: makeinfo/html.c:422
+msgid "[unexpected] no html tag to pop"
+msgstr ""
+
+#: makeinfo/html.c:752
+#, fuzzy, c-format
+msgid "[unexpected] invalid node name: `%s'"
+msgstr "%s: neznámý pøepínaè `--%s'\n"
+
+#: makeinfo/index.c:169
+#, c-format
+msgid "Unknown index `%s'"
+msgstr "Neznámý rejstøík `%s'"
+
+#: makeinfo/index.c:234
+#, c-format
+msgid "Info cannot handle `:' in index entry `%s'"
+msgstr ""
+
+#: makeinfo/index.c:412
+#, c-format
+msgid "Index `%s' already exists"
+msgstr "Rejstøík `%s' ji¾ existuje"
+
+#: makeinfo/index.c:455
+#, 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:661
+msgid "(line )"
+msgstr ""
+
+#: makeinfo/index.c:669
+#, c-format
+msgid "(line %*d)"
+msgstr ""
+
+#: makeinfo/index.c:750
+#, c-format
+msgid "Unknown index `%s' in @printindex"
+msgstr "Neznámý rejstøík `%s' v @printindex"
+
+#: makeinfo/index.c:819
+#, 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:822 makeinfo/index.c:858
+msgid "(outside of any node)"
+msgstr "(mimo v¹echny uzly)"
+
+#: makeinfo/index.c:919 makeinfo/index.c:925
+msgid "See "
+msgstr "Viz"
+
+#: makeinfo/insertion.c:160
+msgid "@item not allowed in argument to @itemize"
+msgstr ""
+
+#: makeinfo/insertion.c:238
+msgid "Broken-Type in insertion_type_pname"
+msgstr "Chybný typ v insertion_type_pname"
+
+#: makeinfo/insertion.c:334
+msgid "Enumeration stack overflow"
+msgstr "Výpoèetní zásobník pøetekl"
+
+#: makeinfo/insertion.c:366
+#, c-format
+msgid "lettering overflow, restarting at %c"
+msgstr "písmenkování pøeteklo, znovu zaèínám na %c"
+
+#: makeinfo/insertion.c:631
+#, c-format
+msgid "%s requires an argument: the formatter for %citem"
+msgstr "%s vy¾aduje argument : formátovaè pro %citem"
+
+#: makeinfo/insertion.c:719
+#, c-format
+msgid "%cfloat environments cannot be nested"
+msgstr ""
+
+#: makeinfo/insertion.c:973
+#, c-format
+msgid "`@end' expected `%s', but saw `%s'"
+msgstr "`@end' vy¾aduje `%s', ale vidí `%s'"
+
+#: makeinfo/insertion.c:1337
+#, c-format
+msgid "No matching `%cend %s'"
+msgstr "Chybí odpovídající `%cend %s'"
+
+#: makeinfo/insertion.c:1592
+#, c-format
+msgid "%s requires letter or digit"
+msgstr "%s vy¾aduje písmeno nebo èíslici"
+
+#: makeinfo/insertion.c:1687
+msgid "end of file inside verbatim block"
+msgstr ""
+
+#: makeinfo/insertion.c:1913
+#, fuzzy, c-format
+msgid "@%s not meaningful outside `@float' environment"
+msgstr "@%s není myslitelné uvnitø `@%s' bloku"
+
+#: makeinfo/insertion.c:1949
+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:1950
+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:1962
+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:2018
+#, c-format
+msgid "@%s not meaningful outside `@titlepage' and `@quotation' environments"
+msgstr ""
+
+#: makeinfo/insertion.c:2032
+#, fuzzy, c-format
+msgid "@%s not meaningful outside `@titlepage' environment"
+msgstr "@%s není myslitelné uvnitø `@%s' bloku"
+
+#: makeinfo/insertion.c:2063
+#, c-format
+msgid "Unmatched `%c%s'"
+msgstr "Nepárový `%c%s'"
+
+#: makeinfo/insertion.c:2068
+#, c-format
+msgid "`%c%s' needs something after it"
+msgstr "`%c%s' potøebuje nìjaký argument"
+
+#: makeinfo/insertion.c:2074
+#, fuzzy, c-format
+msgid "Bad argument `%s' to `@%s', using `%s'"
+msgstr "Chybný argument pro `%s', `%s', pou¾ívám `%s'"
+
+#: makeinfo/insertion.c:2171
+#, c-format
+msgid "@%s not meaningful inside `@%s' block"
+msgstr "@%s není myslitelné uvnitø `@%s' bloku"
+
+#: makeinfo/insertion.c:2180
+#, c-format
+msgid "@itemx not meaningful inside `%s' block"
+msgstr "@itemx není myslitelný uvnitø `%s' bloku"
+
+#: makeinfo/insertion.c:2356
+#, c-format
+msgid "%c%s found outside of an insertion block"
+msgstr "%c%s nalezen mimo vkládaný blok"
+
+#: makeinfo/lang.c:580
+#, 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:655
+#, fuzzy, c-format
+msgid "unrecognized encoding name `%s'"
+msgstr "%s: neznámý pøepínaè `--%s'\n"
+
+#: makeinfo/lang.c:663
+#, c-format
+msgid "sorry, encoding `%s' not supported"
+msgstr ""
+
+#: makeinfo/lang.c:715
+#, c-format
+msgid "invalid encoded character `%s'"
+msgstr ""
+
+#: makeinfo/lang.c:1009
+#, 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:1013
+#, 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:355
+#, 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:586
+#, c-format
+msgid "%cend macro not found"
+msgstr "%cend makro nebylo nalezeno"
+
+#: makeinfo/macro.c:624
+msgid "@quote-arg only useful for single-argument macros"
+msgstr "@quote-arg je u¾iteèné pouze pro jedno-argumentová makra"
+
+#: makeinfo/macro.c:660
+#, c-format
+msgid "mismatched @end %s with @%s"
+msgstr "pomíchané @end %s s @%s"
+
+#: makeinfo/makeinfo.c:184
+#, c-format
+msgid "Too many errors! Gave up.\n"
+msgstr "Pøíli¹ mnoho chyb! Konec.\n"
+
+#: makeinfo/makeinfo.c:302
+#, c-format
+msgid "%s:%d: warning: "
+msgstr "%s:%d: varování: "
+
+#: makeinfo/makeinfo.c:321 makeinfo/makeinfo.c:2260
+#, c-format
+msgid "Misplaced %c"
+msgstr "©patnì umístìný znak %c"
+
+#: makeinfo/makeinfo.c:340
+#, 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:343
+#, fuzzy, c-format
+msgid "Usage: %s [OPTION]... TEXINFO-FILE...\n"
+msgstr "Pou¾ití: %s [PØEPÍNAÈ]... SOUBOR...\n"
+
+#: makeinfo/makeinfo.c:346
+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:350
+#, c-format
+msgid ""
+"General options:\n"
+" --error-limit=NUM quit after NUM errors (default %d).\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"
+" --reference-limit=NUM warn about at most NUM references (default %"
+"d).\n"
+" -v, --verbose explain what is being done.\n"
+" --version display version information and exit.\n"
+msgstr ""
+
+#: makeinfo/makeinfo.c:364
+#, 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:372
+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 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 (directory if split HTML),\n"
+msgstr ""
+
+#: makeinfo/makeinfo.c:386
+#, c-format
+msgid ""
+"Options for Info and plain text:\n"
+" --enable-encoding output accented and special characters in\n"
+" Info output based on @documentencoding.\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\n"
+" in which they are defined (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:403
+msgid ""
+"Options for HTML:\n"
+" --css-include=FILE include FILE in HTML <style> output;\n"
+" read stdin if FILE is -.\n"
+msgstr ""
+
+#: makeinfo/makeinfo.c:409
+#, 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:416
+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:425
+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:444
+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:452
+#, 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:603
+#, c-format
+msgid "%s: Ignoring unrecognized TEXINFO_OUTPUT_FORMAT value `%s'.\n"
+msgstr ""
+
+#: makeinfo/makeinfo.c:647 makeinfo/makeinfo.c:673 makeinfo/makeinfo.c:692
+#: makeinfo/makeinfo.c:722 makeinfo/makeinfo.c:743
+#, 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:660
+#, 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:665
+#, 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:707
+#, 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:732
+#, 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:806
+#, c-format
+msgid "%s: missing file argument.\n"
+msgstr "%s: chybí argument jména souboru.\n"
+
+#: makeinfo/makeinfo.c:997 makeinfo/makeinfo.c:3991
+#, c-format
+msgid "Multiline command %c%s used improperly"
+msgstr ""
+
+#: makeinfo/makeinfo.c:1000
+#, c-format
+msgid "Expected `%s'"
+msgstr "Oèekáváno `%s'"
+
+#: makeinfo/makeinfo.c:1479
+#, c-format
+msgid "Can't create directory `%s': %s"
+msgstr ""
+
+#: makeinfo/makeinfo.c:1525
+#, c-format
+msgid "No `%s' found in `%s'"
+msgstr "Soubor `%s' nenalezen v `%s'"
+
+#: makeinfo/makeinfo.c:1605
+#, 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:1638
+#, c-format
+msgid "Making %s file `%s' from `%s'.\n"
+msgstr "Vytváøím %s soubor `%s' ze souboru `%s'.\n"
+
+#: makeinfo/makeinfo.c:1673
+#, c-format
+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"
+
+#: makeinfo/makeinfo.c:1709
+#, 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:1773
+#, 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:2034
+#, c-format
+msgid "Unknown command `%s'"
+msgstr "Neznámý pøíkaz `%s'"
+
+#: makeinfo/makeinfo.c:2056
+#, 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:2314
+#, fuzzy, c-format
+msgid "%c%s expected braces"
+msgstr "%c%s oèekáváno `{...}'"
+
+#: makeinfo/makeinfo.c:2327
+msgid "Unmatched }"
+msgstr "Nepárová }"
+
+#: makeinfo/makeinfo.c:2375
+msgid "NO_NAME!"
+msgstr "Funkce neexistuje!"
+
+#: makeinfo/makeinfo.c:2396
+#, c-format
+msgid "%c%s missing close brace"
+msgstr "%c%s chybìjící uzavírací závorka"
+
+#: makeinfo/makeinfo.c:3309
+#, 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:3315
+#, fuzzy, c-format
+msgid "No such file `%s'"
+msgstr "Soubor `%s' nenalezen v `%s'"
+
+#: makeinfo/makeinfo.c:3447
+#, 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:3456
+msgid "@image missing filename argument"
+msgstr "pøíkaz @image postrádá jméno souboru"
+
+#: makeinfo/makeinfo.c:3675
+#, c-format
+msgid "undefined flag: %s"
+msgstr ""
+
+#: makeinfo/makeinfo.c:3676
+#, c-format
+msgid "{No value for `%s'}"
+msgstr "{Pro `%s' není hodnota}"
+
+#: makeinfo/makeinfo.c:3728
+#, c-format
+msgid "%c%s requires a name"
+msgstr "%c%s po¾aduje jméno"
+
+#: makeinfo/makeinfo.c:3834
+#, c-format
+msgid "Reached eof before matching @end %s"
+msgstr "Vstupní soubor skonèil a pøíkaz `@end %s' nebyl nalezen"
+
+#: makeinfo/makeinfo.c:4082
+#, 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:254
+#, c-format
+msgid "ignoring stray text `%s' after @multitable"
+msgstr "ignoruji zbloudilý text `%s' po pøíkazu @multitable"
+
+#: makeinfo/multi.c:393
+#, 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:555
+#, fuzzy, c-format
+msgid "[unexpected] cannot select column #%d in multitable"
+msgstr "sloupec #%d v multitabulce nelze vybrat"
+
+#: makeinfo/multi.c:584
+msgid "ignoring @tab outside of multitable"
+msgstr "pøíkaz `@tab' ignorován, je mimo multitabulku"
+
+#: makeinfo/multi.c:632
+#, c-format
+msgid "** Multicolumn output from last row:\n"
+msgstr "** Vícesloupcový výstup z posledního øádku:\n"
+
+#: makeinfo/multi.c:635
+#, c-format
+msgid "* column #%d: output = %s\n"
+msgstr "* sloupec #%d: výstup = %s\n"
+
+#: makeinfo/node.c:280
+#, c-format
+msgid "Node `%s' previously defined at line %d"
+msgstr "Uzel `%s' ji¾ byl definován na øádku %d"
+
+#: makeinfo/node.c:648
+#, c-format
+msgid "Formatting node %s...\n"
+msgstr "Formátování uzlu %s...\n"
+
+#: makeinfo/node.c:716
+#, 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:879
+#, 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:920 makeinfo/node.c:1151
+#, c-format
+msgid "Anchor `%s' and node `%s' map to the same file name"
+msgstr ""
+
+#: makeinfo/node.c:923
+msgid "This @anchor command ignored; references to it will not work"
+msgstr ""
+
+#: makeinfo/node.c:925 makeinfo/node.c:1154
+msgid "Rename this anchor or use the `--no-split' option"
+msgstr ""
+
+#: makeinfo/node.c:955
+#, c-format
+msgid "Unexpected string at end of split-HTML file `%s'"
+msgstr ""
+
+#: makeinfo/node.c:991
+msgid "Next:"
+msgstr "Dal¹í:"
+
+#: makeinfo/node.c:1007
+msgid "Previous:"
+msgstr "Pøedchozí:"
+
+#: makeinfo/node.c:1021
+msgid "Up:"
+msgstr "Nahoru:"
+
+#: makeinfo/node.c:1148
+#, c-format
+msgid "Anchors `%s' and `%s' map to the same file name"
+msgstr ""
+
+#: makeinfo/node.c:1153
+msgid "@anchor command ignored; references to it will not work"
+msgstr ""
+
+#: makeinfo/node.c:1347
+#, 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:1363
+msgid "Menu"
+msgstr "Menu"
+
+#: makeinfo/node.c:1365
+msgid "Cross"
+msgstr "Odkaz"
+
+#: makeinfo/node.c:1447
+#, 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:1450
+#, c-format
+msgid "This node (%s) has the bad Prev"
+msgstr "Tento uzel (%s) má chybný odkaz na pøedchozí uzel"
+
+#: makeinfo/node.c:1462
+msgid "Prev"
+msgstr "Pøedchozí"
+
+#: makeinfo/node.c:1505
+#, c-format
+msgid "Prev field of node `%s' not pointed to"
+msgstr "Pøedchozí uzel uzlu `%s' neukazuje na tento"
+
+#: makeinfo/node.c:1509
+#, 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:1521
+#, c-format
+msgid "`%s' has no Up field (perhaps incorrect sectioning?)"
+msgstr ""
+
+#: makeinfo/node.c:1524
+msgid "Up"
+msgstr "Nahoru"
+
+#: makeinfo/node.c:1590
+#, 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:1619
+#, c-format
+msgid "node `%s' has been referenced %d times"
+msgstr "na uzel `%s' se bylo odkazováno %d krát"
+
+#: makeinfo/node.c:1633
+#, c-format
+msgid "unreferenced node `%s'"
+msgstr "uzel `%s' - nesmìøuje na nìj ¾ádný odkaz"
+
+#: makeinfo/node.c:1723
+#, c-format
+msgid "Removing %s\n"
+msgstr ""
+
+#: makeinfo/node.c:1727
+#, 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:562
+#, c-format
+msgid "Internal error (search_sectioning) \"%s\"!"
+msgstr "Interní chyba (hledání sekcí) \"%s\"!"
+
+#: makeinfo/sectioning.c:623
+#, c-format
+msgid "%c%s is obsolete; use %c%s instead"
+msgstr "%c%s je zastaralý; pou¾ijte %c%s"
+
+#: makeinfo/sectioning.c:639
+#, c-format
+msgid "Node with %ctop as a section already exists"
+msgstr "Uzel s %ctop jako sekcí ji¾ existuje"
+
+#: makeinfo/sectioning.c:647
+#, c-format
+msgid "Here is the %ctop node"
+msgstr "Ji¾ zde je nejvy¹¹í (%ctop) uzel"
+
+#: makeinfo/sectioning.c:663
+#, 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/toc.c:197 makeinfo/toc.c:271 makeinfo/toc.c:273
+msgid "Table of Contents"
+msgstr "Obsah"
+
+#: makeinfo/toc.c:304 makeinfo/toc.c:337 makeinfo/toc.c:339
+msgid "Short Contents"
+msgstr "Krátký obsah"
+
+#: makeinfo/xml.c:1605
+#, c-format
+msgid "@image file `%s' unreadable: %s"
+msgstr "soubor `%s' v pøíkazu @image je neèitelný: %s"
+
+#: makeinfo/xml.c:2097
+msgid ""
+"@headitem as the last item of @multitable produces invalid Docbook documents"
+msgstr ""
+
+#: util/install-info.c:154
+#, c-format
+msgid "%s: warning: "
+msgstr "%s: varování: "
+
+#: util/install-info.c:203
+#, c-format
+msgid " for %s"
+msgstr " pro %s"
+
+#: util/install-info.c:426
+#, 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"
+
+#: util/install-info.c:434
+#, fuzzy, c-format
+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 ""
+"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"
+
+#: util/install-info.c:488
+#, 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"
+
+#: util/install-info.c:513
+#, 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"
+
+#: util/install-info.c:600
+#, c-format
+msgid "%s: empty file"
+msgstr "%s: prázdný soubor"
+
+#: util/install-info.c:913 util/install-info.c:953
+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"
+
+#: util/install-info.c:948
+msgid "END-INFO-DIR-ENTRY without matching START-INFO-DIR-ENTRY"
+msgstr "END-INFO-DIR-ENTRY bez pøedchozího START-INFO-DIR-ENTRY"
+
+#: util/install-info.c:1191 util/install-info.c:1201
+#, c-format
+msgid "%s: already have dir file: %s\n"
+msgstr ""
+
+#: util/install-info.c:1236
+#, c-format
+msgid "%s: Specify the Info file only once.\n"
+msgstr "%s: Info soubor zadejte pouze jednou.\n"
+
+#: util/install-info.c:1284
+#, c-format
+msgid "excess command line argument `%s'"
+msgstr "nadbyteèný argument `%s' v pøíkazovém øádku"
+
+#: util/install-info.c:1288
+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."
+
+#: util/install-info.c:1291
+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"
+
+#: util/install-info.c:1313
+#, c-format
+msgid "no info dir entry in `%s'"
+msgstr "v Info adresáøi `%s' není ¾ádná polo¾ka"
+
+#: util/install-info.c:1426
+#, c-format
+msgid "menu item `%s' already exists, for file `%s'"
+msgstr "polo¾ka menu `%s' ji¾ pro soubor `%s' existuje"
+
+#: util/install-info.c:1449
+#, c-format
+msgid "no entries found for `%s'; nothing deleted"
+msgstr "pro `%s' nebyly nalezeny ¾ádné polo¾ky"
+
+#: util/texindex.c:252
+msgid "display this help and exit"
+msgstr "vypí¹e tuto nápovìdu a skonèí"
+
+#: util/texindex.c:254
+msgid "keep temporary files around after processing"
+msgstr "zanechá doèasné soubory po ukonèení"
+
+#: util/texindex.c:256
+msgid "do not keep temporary files around after processing (default)"
+msgstr "nezanechá doèasné soubory po ukonèení"
+
+#: util/texindex.c:258
+msgid "send output to FILE"
+msgstr "zapí¹e výstup do SOUBORu"
+
+#: util/texindex.c:260
+msgid "display version information and exit"
+msgstr "vypí¹e oznaèení verze a skonèí"
+
+#: util/texindex.c:270
+#, c-format
+msgid "Usage: %s [OPTION]... FILE...\n"
+msgstr "Pou¾ití: %s [PØEPÍNAÈ]... SOUBOR...\n"
+
+#: util/texindex.c:271
+#, 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:274
+#, 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:276
+#, c-format
+msgid ""
+"\n"
+"Options:\n"
+msgstr ""
+"\n"
+"Pøepínaèe:\n"
+
+#: util/texindex.c:876 util/texindex.c:910 util/texindex.c:983
+#: util/texindex.c:1011
+#, c-format
+msgid "%s: not a texinfo index file"
+msgstr "%s: není texinfovský rejstøík"
+
+#: util/texindex.c:968
+#, c-format
+msgid "failure reopening %s"
+msgstr "soubor %s nepovedlo se znovu otevøít"
+
+#: util/texindex.c:1218
+#, c-format
+msgid "No page number in %s"
+msgstr "Na %s není èíslo stránky"
+
+#: util/texindex.c:1291
+#, 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"
+
+#~ 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 "see "
+#~ msgstr "viz"
+
+#~ msgid "`.' or `,' must follow cross reference, not %c"
+#~ msgstr "`.' nebo `,' musí následovat za køí¾ovým odkazem, ale ne za %c"
+
+#~ 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"
+
+#~ msgid "virtual memory exhausted"
+#~ msgstr "virtuální pamì» vyèerpána"
+
+#, 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 "\\%-10[scroll-forward] Scroll forward 1 line.\n"
+#~ msgstr " %-10s Posun o jeden øádek dopøedu.\n"
+
+#, fuzzy
+#~ msgid "\\%-10[scroll-backward] Scroll backward 1 line.\n"
+#~ msgstr " %-10s Posun o jeden øádek dozadu.\n"
+
+#, 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/macros/texinfo/contrib/texinfo-hu/texinfo/po/da.gmo b/macros/texinfo/contrib/texinfo-hu/texinfo/po/da.gmo
new file mode 100644
index 0000000000..55e147567a
--- /dev/null
+++ b/macros/texinfo/contrib/texinfo-hu/texinfo/po/da.gmo
Binary files differ
diff --git a/macros/texinfo/contrib/texinfo-hu/texinfo/po/da.po b/macros/texinfo/contrib/texinfo-hu/texinfo/po/da.po
new file mode 100644
index 0000000000..1b5524a8bc
--- /dev/null
+++ b/macros/texinfo/contrib/texinfo-hu/texinfo/po/da.po
@@ -0,0 +1,3101 @@
+# 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: 2004-12-21 16:20-0800\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"
+
+#: info/echo-area.c:284 info/session.c:689
+msgid "Move forward a character"
+msgstr "Gå et tegn frem"
+
+#: info/echo-area.c:296 info/session.c:705
+msgid "Move backward a character"
+msgstr "Gå et tegn tilbage"
+
+#: info/echo-area.c:308
+msgid "Move to the start of this line"
+msgstr "Gå til starten af linjen"
+
+#: info/echo-area.c:313
+msgid "Move to the end of this line"
+msgstr "Gå til slutning af linjen"
+
+#: info/echo-area.c:321 info/session.c:723
+msgid "Move forward a word"
+msgstr "Ryk et ord frem"
+
+#: info/echo-area.c:361 info/session.c:772
+msgid "Move backward a word"
+msgstr "Ryk et ord tilbage"
+
+#: info/echo-area.c:401
+msgid "Delete the character under the cursor"
+msgstr "Slet tegnet under markøren"
+
+#: info/echo-area.c:431
+msgid "Delete the character behind the cursor"
+msgstr "Slet tegnet efter markøren"
+
+#: info/echo-area.c:452
+msgid "Cancel or quit operation"
+msgstr "Afbryd eller afslut aktivitet"
+
+#: info/echo-area.c:467
+msgid "Accept (or force completion of) this line"
+msgstr "Acceptér (eller gennemtving afslutning af) linjen"
+
+#: info/echo-area.c:472
+msgid "Insert next character verbatim"
+msgstr "Indsæt næste tegn råt"
+
+#: info/echo-area.c:480
+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:653
+msgid "Kill the word preceding the cursor"
+msgstr "Slet ordet før markøren"
+
+#: info/echo-area.c:868 info/echo-area.c:924
+msgid "No completions"
+msgstr "Ingen afslutninger"
+
+#: info/echo-area.c:870
+msgid "Not complete"
+msgstr "Ikke afsluttet"
+
+#: info/echo-area.c:911
+msgid "List possible completions"
+msgstr "Vis mulige afslutninger"
+
+#: info/echo-area.c:928
+msgid "Sole completion"
+msgstr "Eneste afslutning"
+
+#: info/echo-area.c:937
+msgid "One completion:\n"
+msgstr "Én afslutning:\n"
+
+#: info/echo-area.c:938
+#, c-format
+msgid "%d completions:\n"
+msgstr "%d afslutninger:\n"
+
+#: info/echo-area.c:1085
+msgid "Insert completion"
+msgstr "Indsæt afslutning"
+
+#: info/echo-area.c:1220
+msgid "Building completions..."
+msgstr "Opbygger afslutninger..."
+
+#: info/echo-area.c:1340
+msgid "Scroll the completions window"
+msgstr "Rul afslutningsvinduet"
+
+#: info/footnotes.c:213
+msgid "Footnotes could not be displayed"
+msgstr "Fodnoter kunne ikke vises"
+
+#: info/footnotes.c:239
+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:172
+msgid "Look up a string in the index for this file"
+msgstr "Slå en tekst op i denne fils indeks."
+
+#: info/indices.c:199
+msgid "Finding index entries..."
+msgstr "Finder indeksindgange..."
+
+#: info/indices.c:207
+msgid "No indices found."
+msgstr "Fandt intet indeks."
+
+#: info/indices.c:217
+msgid "Index entry: "
+msgstr "Indeksindgang:"
+
+#: info/indices.c:325
+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:335
+msgid "No previous index search string."
+msgstr "Ingen tidligere indeks søgetekst"
+
+#: info/indices.c:342
+msgid "No index entries."
+msgstr "Ingen indeksindgange."
+
+#: info/indices.c:375
+#, fuzzy, c-format
+msgid "No %sindex entries containing `%s'."
+msgstr "Ingen %sindeksindgange indeholder \"%s\"."
+
+#: info/indices.c:376
+msgid "more "
+msgstr "mere "
+
+#: info/indices.c:386
+msgid "CAN'T SEE THIS"
+msgstr "KAN IKKE SE DETTE"
+
+#: info/indices.c:422
+#, 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:541
+#, fuzzy, c-format
+msgid "Scanning indices of `%s'..."
+msgstr "Skimmer \"%s\"'s indekser..."
+
+#: info/indices.c:596
+#, 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:622
+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:626
+msgid "Index apropos: "
+msgstr "Indeks apropos:"
+
+#: info/indices.c:654
+#, 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:295 makeinfo/makeinfo.c:766 util/install-info.c:1266
+#: util/texindex.c:343
+#, fuzzy, c-format
+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"
+
+#: info/info.c:498
+#, c-format
+msgid "no index entries found for `%s'\n"
+msgstr "ingen indeksindgange blev fundet for '%s'\n"
+
+#: info/info.c:590
+msgid " -b, --speech-friendly be friendly to speech synthesizers.\n"
+msgstr " -b, --speech-friendly vær talesyntese-venlig.\n"
+
+#: info/info.c:597
+#, fuzzy, c-format
+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 -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"
+
+#: info/info.c:635 info/infokey.c:918 makeinfo/makeinfo.c:465
+#: util/install-info.c:466 util/texindex.c:292
+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:669
+#, c-format
+msgid "Cannot find node `%s'."
+msgstr "Kan ikke finde emnet '%s'."
+
+#: info/info.c:670
+#, c-format
+msgid "Cannot find node `(%s)%s'."
+msgstr "Kan ikke finde emnet '(%s)%s'."
+
+#: info/info.c:671
+msgid "Cannot find a window!"
+msgstr "Kan ikke finde et vindue!"
+
+#: info/info.c:672
+msgid "Point doesn't appear within this window's node!"
+msgstr "Punktet optræder ikke i dette vindues emne!"
+
+#: info/info.c:673
+msgid "Cannot delete the last window."
+msgstr "Kan ikke slette det sidste vindue."
+
+#: info/info.c:674
+msgid "No menu in this node."
+msgstr "Ingen menu i dette emne."
+
+#: info/info.c:675
+msgid "No footnotes in this node."
+msgstr "Ingen fodnoter i dette emne."
+
+#: info/info.c:676
+msgid "No cross references in this node."
+msgstr "Ingen krydsreferencer i dette emne."
+
+#: info/info.c:677
+#, c-format
+msgid "No `%s' pointer for this node."
+msgstr "Ingen '%s'-peger mod dette emne."
+
+#: info/info.c:678
+#, c-format
+msgid "Unknown Info command `%c'; try `?' for help."
+msgstr "Ukendt Info kommando '%c'; prøv '?' for hjælp."
+
+#: info/info.c:679
+#, 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:680
+msgid "You are already at the last page of this node."
+msgstr "Du er i forvejen ved emnets sidste side."
+
+#: info/info.c:681
+msgid "You are already at the first page of this node."
+msgstr "Du er i forvejen ved emnets første side."
+
+#: info/info.c:682
+msgid "Only one window."
+msgstr "Kun ét vindue."
+
+#: info/info.c:683
+msgid "Resulting window would be too small."
+msgstr "Det resulterende vindue ville være for lille."
+
+#: info/info.c:684
+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:46 info/infodoc.c:95
+msgid ""
+"Basic Commands in Info Windows\n"
+"******************************\n"
+msgstr ""
+"Grundlæggende kommandoer i Info-vinduer\n"
+"***************************************\n"
+
+#: info/infodoc.c:49
+msgid "\\%-10[quit-help] Quit this help.\n"
+msgstr "\\%-10[quit-help] Afslut denne hjælp.\n"
+
+#: info/infodoc.c:50
+msgid "\\%-10[quit] Quit Info altogether.\n"
+msgstr "\\%-10[quit] Afslut hele Info-programmet.\n"
+
+#: info/infodoc.c:51
+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:53 info/infodoc.c:102
+msgid ""
+"Selecting other nodes:\n"
+"----------------------\n"
+msgstr ""
+"Valg af ander emnder:\n"
+"---------------------\n"
+
+#: info/infodoc.c:55
+msgid "\\%-10[next-node] Move to the \"next\" node of this node.\n"
+msgstr "\\%-10[next-node] Flyt til emnet 'næste' i dette emne.\n"
+
+#: info/infodoc.c:56
+msgid "\\%-10[prev-node] Move to the \"previous\" node of this node.\n"
+msgstr "\\%-10[prev-node] Flyt til emnet 'Forrige' i dette emne.\n"
+
+#: info/infodoc.c:57
+msgid "\\%-10[up-node] Move \"up\" from this node.\n"
+msgstr "\\%-10[up-node] Flyt til emnet 'Op' i dette emne.\n"
+
+#: info/infodoc.c:58
+msgid ""
+"\\%-10[menu-item] 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:60
+msgid ""
+"\\%-10[xref-item] Follow a cross reference. Reads name of reference.\n"
+msgstr ""
+"\\%-10[xref-item] Følg en krydshenvisning. Indlæser referencens navn.\n"
+
+#: info/infodoc.c:61
+msgid "\\%-10[history-node] Move 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
+msgid ""
+"\\%-10[move-to-next-xref] Skip to next hypertext link within this node.\n"
+msgstr ""
+"\\%-10[move-to-next-xref] Hop til næste hypertekst-henvisning i dette "
+"emne.\n"
+
+#: info/infodoc.c:63
+msgid ""
+"\\%-10[move-to-prev-xref] Skip to previous hypertext link within this "
+"node.\n"
+msgstr ""
+"\\%-10[move-to-prev-xref] Hop til næste hypertekst-henvisning i dette "
+"emne.\n"
+
+#: info/infodoc.c:64
+msgid ""
+"\\%-10[select-reference-this-line] Follow the hypertext link under cursor.\n"
+msgstr ""
+"\\%-10[select-reference-this-line] Følg hypertekst-henvisningen under "
+"markøren.\n"
+
+#: info/infodoc.c:65
+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"
+
+#: info/infodoc.c:66
+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"
+
+#: info/infodoc.c:68 info/infodoc.c:116
+msgid ""
+"Moving within a node:\n"
+"---------------------\n"
+msgstr ""
+"Bevægelser indenfor et emne:\n"
+"----------------------------\n"
+
+#: info/infodoc.c:70
+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:71
+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:72
+msgid "\\%-10[next-line] Scroll forward 1 line.\n"
+msgstr "\\%-10[næste linje] Rul 1 linje frem.\n"
+
+#: info/infodoc.c:73
+msgid "\\%-10[prev-line] Scroll backward 1 line.\n"
+msgstr "\\%-10[forrige linje] Rul en linje tilbage.\n"
+
+#: info/infodoc.c:74
+msgid "\\%-10[scroll-forward] Scroll forward a page.\n"
+msgstr "\\%-10[scroll-forward] Rul en side frem.\n"
+
+#: info/infodoc.c:75
+msgid "\\%-10[scroll-backward] Scroll backward a page.\n"
+msgstr "\\%-10[scroll-backward] Rul en side tilbage.\n"
+
+#: info/infodoc.c:77 info/infodoc.c:125
+msgid ""
+"Other commands:\n"
+"---------------\n"
+msgstr ""
+"Andre kommandoer:\n"
+"-----------------\n"
+
+#: info/infodoc.c:79
+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"
+
+#: info/infodoc.c:80
+msgid "\\%-10[last-menu-item] Pick last item in node's menu.\n"
+msgstr "\\%-10[last-menu-item] Vælg sidste punkt i emnets menu.\n"
+
+#: info/infodoc.c:81
+msgid ""
+"\\%-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"
+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:83
+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"
+
+#: info/infodoc.c:85
+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"
+
+#: info/infodoc.c:87
+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"
+
+#: info/infodoc.c:98
+#, c-format
+msgid " %-10s Quit this help.\n"
+msgstr " %-10s Afslut hjælp.\n"
+
+#: info/infodoc.c:99
+#, c-format
+msgid " %-10s Quit Info altogether.\n"
+msgstr " %-10s Afslut hele Info-programmet.\n"
+
+#: info/infodoc.c:100
+#, c-format
+msgid " %-10s Invoke the Info tutorial.\n"
+msgstr " %-10s Kør info introduktionen.\n"
+
+#: info/infodoc.c:104
+#, 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:105
+#, 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:106
+#, c-format
+msgid " %-10s Move `up' from this node.\n"
+msgstr " %-10s Gå et niveau op.\n"
+
+#: info/infodoc.c:107
+#, c-format
+msgid " %-10s Pick menu item specified by name.\n"
+msgstr " %-10s Vælg menupunkt angivet ved navn.\n"
+
+#: info/infodoc.c:108
+msgid " Picking a menu item causes another node to be selected.\n"
+msgstr " Valg af menupunkt vælger et andet emne.\n"
+
+#: info/infodoc.c:109
+#, 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:110
+#, 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:111
+#, 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:112
+#, 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:113
+#, 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:114
+#, 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:118
+#, c-format
+msgid " %-10s Scroll forward a page.\n"
+msgstr " %-10s Rul en side frem.\n"
+
+#: info/infodoc.c:119
+#, c-format
+msgid " %-10s Scroll backward a page.\n"
+msgstr " %-10s Rul en side tilbage.\n"
+
+#: info/infodoc.c:120
+#, c-format
+msgid " %-10s Go to the beginning of this node.\n"
+msgstr " %-10s Gå til starten af emnet.\n"
+
+#: info/infodoc.c:121
+#, c-format
+msgid " %-10s Go to the end of this node.\n"
+msgstr " %-10s Gå til enden af emnet.\n"
+
+#: info/infodoc.c:122
+#, c-format
+msgid " %-10s Scroll forward 1 line.\n"
+msgstr " %-10s Rul 1 linje frem.\n"
+
+#: info/infodoc.c:123
+#, c-format
+msgid " %-10s Scroll backward 1 line.\n"
+msgstr " %-10s Rul en linje tilbage.\n"
+
+#: info/infodoc.c:127
+#, 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:128
+#, 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:129
+#, c-format
+msgid ""
+" %-10s Search for a specified string in the index entries of this Info\n"
+msgstr ""
+" %-10s Søg efter en angivet tekst i denne Info-fils indeksindgange,\n"
+
+#: info/infodoc.c:130
+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"
+
+#: info/infodoc.c:131
+#, c-format
+msgid " %-10s Move to node specified by name.\n"
+msgstr " %-10s Gå til emne angivet ved navn.\n"
+
+#: info/infodoc.c:132
+msgid ""
+" You may include a filename as well, as in (FILENAME)NODENAME.\n"
+msgstr " Du kan også medtage filnavn, som (FILNAVN)EMNENAVN.\n"
+
+#: info/infodoc.c:133
+#, c-format
+msgid " %-10s Search forward for a specified string,\n"
+msgstr " %-10s Søg fremad efter en given streng,\n"
+
+#: info/infodoc.c:134 info/infodoc.c:136
+msgid ""
+" and select the node in which the next occurrence is found.\n"
+msgstr " og vælg emne med den næste forekomst.\n"
+
+#: info/infodoc.c:135
+#, c-format
+msgid " %-10s Search backward for a specified string\n"
+msgstr " %-10s Søg baglæns efter en given streng\n"
+
+#: info/infodoc.c:316
+msgid "The current search path is:\n"
+msgstr "Den nuværende søgesti er:\n"
+
+#: info/infodoc.c:320
+msgid ""
+"Commands available in Info windows:\n"
+"\n"
+msgstr ""
+"Tilgængelige kommandoer i infovinduer:\n"
+"\n"
+
+#: info/infodoc.c:324
+msgid ""
+"Commands available in the echo area:\n"
+"\n"
+msgstr ""
+"Tilgængelige kommandoer i ekko-område:\n"
+"\n"
+
+#: info/infodoc.c:347
+#, 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:351
+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:375
+msgid "--- Use `\\[history-node]' or `\\[kill-node]' to exit ---\n"
+msgstr ""
+"--- Benyt '\\[history-node]' eller '\\[kill-node]' for at afslutte ---\n"
+
+#: info/infodoc.c:485
+msgid "Display help message"
+msgstr "Vis hjælp"
+
+#: info/infodoc.c:503
+msgid "Visit Info node `(info)Help'"
+msgstr "Besøg infoemnet '(info)Help'"
+
+#: info/infodoc.c:641
+msgid "Print documentation for KEY"
+msgstr "Vis dokumentation for TAST"
+
+#: info/infodoc.c:653
+#, c-format
+msgid "Describe key: %s"
+msgstr "Beskriv tast: %s"
+
+#: info/infodoc.c:664
+#, c-format
+msgid "ESC %s is undefined."
+msgstr "ESC %s er ikke defineret."
+
+#: info/infodoc.c:680 info/infodoc.c:709
+#, c-format
+msgid "%s is undefined."
+msgstr "%s er ikke defineret."
+
+#: info/infodoc.c:730
+#, c-format
+msgid "%s is defined to %s."
+msgstr "%s er defineret til %s."
+
+#: info/infodoc.c:1153
+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:1157
+msgid "Where is command: "
+msgstr "Hvor er kommando: "
+
+#: info/infodoc.c:1179
+#, c-format
+msgid "`%s' is not on any keys"
+msgstr "'%s' er ikke på nogen taster"
+
+#: info/infodoc.c:1186
+#, c-format
+msgid "%s can only be invoked via %s."
+msgstr "%s kan kun udføres via %s."
+
+#: info/infodoc.c:1190
+#, c-format
+msgid "%s can be invoked via %s."
+msgstr "%s kan udføres via %s."
+
+#: info/infodoc.c:1195
+#, c-format
+msgid "There is no function named `%s'"
+msgstr "Der er ingen funktion kaldet '%s'"
+
+#: info/infokey.c:145
+#, c-format
+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"
+"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"
+
+#: 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:1500
+#, c-format
+msgid "Ignoring invalid infokey file `%s' - too small"
+msgstr "Ignorerer ugyldig infokey-fil '%s' - for lille"
+
+#: info/infomap.c:1503
+#, c-format
+msgid "Ignoring invalid infokey file `%s' - too big"
+msgstr "Ignorerer ugyldig infokey-fil '%s' - for stor"
+
+#: info/infomap.c:1516
+#, c-format
+msgid "Error reading infokey file `%s' - short read"
+msgstr "Fejl under læsning af infokey-fil '%s' - \"short read\""
+
+#: info/infomap.c:1535
+#, 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:1544
+#, 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:1560
+#, 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:1581
+#, 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:1716
+msgid "Bad data in infokey file -- some key bindings ignored"
+msgstr "Ugyldige data i infokey-fil -- visse tastebindinger blev ignoreret"
+
+#: info/infomap.c:1766
+msgid "Bad data in infokey file -- some var settings ignored"
+msgstr ""
+"Ugyldige data i infokey-fil -- visse variabelindstillinger blev ignoreret"
+
+#: info/m-x.c:69
+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:73
+msgid "Describe command: "
+msgstr "Beskriv kommando: "
+
+#: info/m-x.c:96
+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:140
+msgid "Cannot execute an `echo-area' command here."
+msgstr "Kan ikke udføre en 'ekko-område'-kommando her."
+
+#: info/m-x.c:154
+#, fuzzy, c-format
+msgid "Undefined command: %s"
+msgstr "Ukendt kommando '%s'"
+
+#: info/m-x.c:160
+msgid "Set the height of the displayed window"
+msgstr "Sæt højden på det viste vindue"
+
+#: info/m-x.c:173
+#, c-format
+msgid "Set screen height to (%d): "
+msgstr "Sæt skærmhøjden til (%d): "
+
+#: info/makedoc.c:162 info/makedoc.c:170
+#, 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:550
+#, c-format
+msgid "Couldn't manipulate the file %s.\n"
+msgstr "Kunne ikke bearbejde filen %s.\n"
+
+#: info/nodemenu.c:31
+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:202
+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:224
+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:304
+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:317
+msgid "Select visited node: "
+msgstr "Vælg besøgt emne: "
+
+#: info/nodemenu.c:337 info/session.c:2264
+#, c-format
+msgid "The reference disappeared! (%s)."
+msgstr "Referencen forsvandt! (%s)."
+
+#: info/session.c:162
+#, 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:620
+msgid "Move down to the next line"
+msgstr "Gå ned til næste linje"
+
+#: info/session.c:635
+msgid "Move up to the previous line"
+msgstr "Gå op til forrige linje"
+
+#: info/session.c:650
+msgid "Move to the end of the line"
+msgstr "Gå til linjeslutning"
+
+#: info/session.c:670
+msgid "Move to the start of the line"
+msgstr "Gå til linjestart"
+
+#: info/session.c:860 makeinfo/node.c:1424
+msgid "Next"
+msgstr "Næste"
+
+#: info/session.c:863
+msgid "Following Next node..."
+msgstr "Følger emnet Næste..."
+
+#: info/session.c:881
+msgid "Selecting first menu item..."
+msgstr "Vælger første menupunkt..."
+
+#: info/session.c:893
+msgid "Selecting Next node..."
+msgstr "Vælger emnet 'Næste'..."
+
+#: info/session.c:964
+#, c-format
+msgid "Moving Up %d time(s), then Next."
+msgstr "Går 'Op' %d gang(e), derefter 'Næste'."
+
+#: info/session.c:988
+msgid "No more nodes within this document."
+msgstr "Ikke flere emner i dette dokument."
+
+#: info/session.c:1011
+msgid "No `Prev' for this node."
+msgstr "Ingen 'Forrige' i dette emne."
+
+#: info/session.c:1014 info/session.c:1073
+msgid "Moving Prev in this window."
+msgstr "Går til 'Forrige' i dette vindue."
+
+#: info/session.c:1030
+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:1034
+msgid "Moving Up in this window."
+msgstr "Går 'Op' i dette vindue."
+
+#: info/session.c:1084
+msgid "Moving to `Prev's last menu item."
+msgstr "Går til 'Forrige's sidste menupunkt."
+
+#: info/session.c:1095
+msgid "Move forwards or down through node structure"
+msgstr "Gå frem eller ned gennem emne-strukturen"
+
+#: info/session.c:1111
+msgid "Move backwards or up through node structure"
+msgstr "Gå tilbage eller op gennem emne-strukturen"
+
+#: info/session.c:1205
+msgid "Scroll forward in this window"
+msgstr "Rul tilbage i vinduet"
+
+#: info/session.c:1213
+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:1221
+msgid "Scroll forward in this window staying within node"
+msgstr "Rul frem i vinduet i samme emne"
+
+#: info/session.c:1229
+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:1237
+msgid "Scroll backward in this window"
+msgstr "Rul tilbage i vinduet"
+
+#: info/session.c:1245
+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:1254
+msgid "Scroll backward in this window staying within node"
+msgstr "Rul tilbage i vinduet indenfor samme emne"
+
+#: info/session.c:1262
+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:1270
+msgid "Move to the start of this node"
+msgstr "Gå til starten af dette emne"
+
+#: info/session.c:1277
+msgid "Move to the end of this node"
+msgstr "Gå til slutningen af dette emne"
+
+#: info/session.c:1284
+msgid "Scroll down by lines"
+msgstr "Rul N linjer ned"
+
+#: info/session.c:1301
+msgid "Scroll up by lines"
+msgstr "Rul N linjer op"
+
+#: info/session.c:1319
+msgid "Scroll down by half screen size"
+msgstr "Rul en halv skærmstørrelse ned"
+
+#: info/session.c:1345
+msgid "Scroll up by half screen size"
+msgstr "Rul en halv skærmstørrelse op"
+
+#: info/session.c:1374
+msgid "Select the next window"
+msgstr "Vælg det næste vindue"
+
+#: info/session.c:1413
+msgid "Select the previous window"
+msgstr "Vælg det forrige vindue"
+
+#: info/session.c:1464
+msgid "Split the current window"
+msgstr "Opdel nuværende vindue"
+
+#: info/session.c:1545
+msgid "Delete the current window"
+msgstr "Slet nuværende vindue"
+
+#: info/session.c:1553
+msgid "Cannot delete a permanent window"
+msgstr "Kan ikke slette et permanent vindue"
+
+#: info/session.c:1585
+msgid "Delete all other windows"
+msgstr "Slet alle andre vinduer"
+
+#: info/session.c:1631
+msgid "Scroll the other window"
+msgstr "Rul det andet vindue"
+
+#: info/session.c:1652
+msgid "Scroll the other window backward"
+msgstr "Rul det andet vindue baglæns"
+
+#: info/session.c:1658
+msgid "Grow (or shrink) this window"
+msgstr "Forstør (eller formindsk) dette vindue"
+
+#: info/session.c:1669
+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:1676
+msgid "Toggle the state of line wrapping in the current window"
+msgstr "Vælg/fravælg linjeombrydning i nuværende vindue"
+
+#: info/session.c:1848
+msgid "Select the Next node"
+msgstr "Vælg emnet Næste"
+
+#: info/session.c:1856
+msgid "Select the Prev node"
+msgstr "Vælg emnet Forrige"
+
+#: info/session.c:1864
+msgid "Select the Up node"
+msgstr "Vælg emnet 'Op'"
+
+#: info/session.c:1871
+msgid "Select the last node in this file"
+msgstr "Vælg det sidste emne i filen"
+
+#: info/session.c:1898 info/session.c:1931
+msgid "This window has no additional nodes"
+msgstr "Dette vindue har ingen yderligere emner"
+
+#: info/session.c:1904
+msgid "Select the first node in this file"
+msgstr "Vælg det første emne i filen"
+
+#: info/session.c:1938
+msgid "Select the last item in this node's menu"
+msgstr "Vælg det sidste punkt i emnets menu"
+
+#: info/session.c:1944
+msgid "Select this menu item"
+msgstr "Vælg dette menupunkt"
+
+#: info/session.c:1977
+#, c-format
+msgid "There aren't %d items in this menu."
+msgstr "Der er ikke %d punkter i denne menu."
+
+#: info/session.c:2171 info/session.c:2172
+#, c-format
+msgid "Menu item (%s): "
+msgstr "Menupunkt (%s): "
+
+#: info/session.c:2175
+msgid "Menu item: "
+msgstr "Menupunkt: "
+
+#: info/session.c:2182 info/session.c:2183
+#, c-format
+msgid "Follow xref (%s): "
+msgstr "Følg krydsreference (%s): "
+
+#: info/session.c:2186
+msgid "Follow xref: "
+msgstr "Følg krydsreference: "
+
+#: info/session.c:2315
+msgid "Read a menu item and select its node"
+msgstr "Indlæs et menupunkt og vælg dets emne"
+
+#: info/session.c:2323
+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:2329
+msgid "Move to the start of this node's menu"
+msgstr "Flyt til starten af dette emnes menu"
+
+#: info/session.c:2353
+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:2381
+msgid "Read a node name and select it"
+msgstr "Indlæs et emnenavn og vælg det"
+
+#: info/session.c:2436 info/session.c:2441
+msgid "Goto node: "
+msgstr "Gå til emne: "
+
+#: info/session.c:2505
+#, c-format
+msgid "No menu in node `%s'."
+msgstr "Ingen menu i emne '%s'."
+
+#: info/session.c:2551
+#, c-format
+msgid "No menu item `%s' in node `%s'."
+msgstr "Intet menupunkt '%s' i emne '%s'."
+
+#: info/session.c:2581
+#, 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:2631
+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:2633
+msgid "Follow menus: "
+msgstr "Følg menuer: "
+
+#: info/session.c:2826
+msgid "Find the node describing program invocation"
+msgstr "Find emnet, der beskriver hvordan programmet startes"
+
+#: info/session.c:2828
+#, c-format
+msgid "Find Invocation node of [%s]: "
+msgstr "Find programstart emne for [%s]: "
+
+#: info/session.c:2866
+msgid "Read a manpage reference and select it"
+msgstr "Indlæs en man-side reference og vælg den"
+
+#: info/session.c:2870
+msgid "Get Manpage: "
+msgstr "Hent man-side: "
+
+#: info/session.c:2900
+msgid "Select the node `Top' in this file"
+msgstr "Vælg emnet 'Top' i filen"
+
+#: info/session.c:2906
+msgid "Select the node `(dir)'"
+msgstr "Vælg emnet '(katalog)'"
+
+#: info/session.c:2923 info/session.c:2925
+#, c-format
+msgid "Kill node (%s): "
+msgstr "Fjern emne (%s): "
+
+#: info/session.c:2977
+#, c-format
+msgid "Cannot kill node `%s'"
+msgstr "Kan ikke fjerne emnet '%s'"
+
+#: info/session.c:2987
+msgid "Cannot kill the last node"
+msgstr "Kan ikke fjerne det sidste emne"
+
+#: info/session.c:3073
+msgid "Select the most recently selected node"
+msgstr "Vælg det sidst valgt emne"
+
+#: info/session.c:3079
+msgid "Kill this node"
+msgstr "Fjern dette emne"
+
+#: info/session.c:3087
+msgid "Read the name of a file and select it"
+msgstr "Indlæs et filnavn og vælg det"
+
+#: info/session.c:3091
+msgid "Find file: "
+msgstr "Find fil: "
+
+#: info/session.c:3108
+#, c-format
+msgid "Cannot find `%s'."
+msgstr "Kan ikke finde '%s'."
+
+#: info/session.c:3151 info/session.c:3269
+#, c-format
+msgid "Could not create output file `%s'."
+msgstr "Kunne ikke oprette uddatafil '%s'."
+
+#: info/session.c:3165 info/session.c:3287 info/session.c:3347
+msgid "Done."
+msgstr "Færdig."
+
+#: info/session.c:3220
+#, c-format
+msgid "Writing node %s..."
+msgstr "Skriver emnet %s..."
+
+#: info/session.c:3296
+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:3331
+#, c-format
+msgid "Cannot open pipe to `%s'."
+msgstr "Kan ikke åbne videreførsel til '%s'."
+
+#: info/session.c:3337
+#, c-format
+msgid "Printing node %s..."
+msgstr "Udskriver emnet %s..."
+
+#: info/session.c:3567
+#, c-format
+msgid "Searching subfile %s ..."
+msgstr "Leder efter underfilen %s ..."
+
+#: info/session.c:3619
+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:3626
+msgid "Read a string and search for it"
+msgstr "Indlæs en tekst og søg for den"
+
+#: info/session.c:3634
+msgid "Read a string and search backward for it"
+msgstr "Indlæs en tekst og søg baglæns efter den"
+
+#: info/session.c:3670 info/session.c:3677
+#, c-format
+msgid "%s%sfor string [%s]: "
+msgstr "%s%sefter tekst [%s]: "
+
+#: info/session.c:3671 info/session.c:3678
+msgid "Search backward"
+msgstr "Søg baglæns"
+
+#: info/session.c:3672 info/session.c:3678
+msgid "Search"
+msgstr "Søg"
+
+#: info/session.c:3673 info/session.c:3679
+msgid " case-sensitively "
+msgstr " versalfølsomt"
+
+#: info/session.c:3674 info/session.c:3679
+msgid " "
+msgstr " "
+
+#: info/session.c:3718
+msgid "Search failed."
+msgstr "Søgning mislykkedes."
+
+#: info/session.c:3736
+msgid "Repeat last search in the same direction"
+msgstr "Gentag sidste søgning i samme retning"
+
+#: info/session.c:3739 info/session.c:3749
+msgid "No previous search string"
+msgstr "Ingen tidligere søgetekst"
+
+#: info/session.c:3746
+msgid "Repeat last search in the reverse direction"
+msgstr "Gentag sidste søgning i modsat retning"
+
+#: info/session.c:3765 info/session.c:3771
+msgid "Search interactively for a string as you type it"
+msgstr "Søg interaktivt efter en tekst, mens du skriver den"
+
+#: info/session.c:3851
+msgid "I-search backward: "
+msgstr "I-søgning baglæns: "
+
+#: info/session.c:3853
+msgid "I-search: "
+msgstr "I-søgning: "
+
+#: info/session.c:3878 info/session.c:3880
+msgid "Failing "
+msgstr "Fejler "
+
+#: info/session.c:4340
+msgid "Move to the previous cross reference"
+msgstr "Gå til foregående krydsreference"
+
+#: info/session.c:4349
+msgid "Move to the next cross reference"
+msgstr "Gå til næste krydsreference"
+
+#: info/session.c:4359
+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:4382
+msgid "Cancel current operation"
+msgstr "Afbryd nuværende aktivitet"
+
+#: info/session.c:4389
+msgid "Quit"
+msgstr "Afslut"
+
+#: info/session.c:4398
+msgid "Move the cursor to a specific line of the window"
+msgstr "Flyt markør til bestemt linje i vinduet"
+
+#: info/session.c:4430
+msgid "Redraw the display"
+msgstr "Gentegn skærmen"
+
+#: info/session.c:4467
+msgid "Quit using Info"
+msgstr "Afslut info"
+
+#: info/session.c:4480
+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:4491
+#, c-format
+msgid "Unknown command (%s)."
+msgstr "Ukendt kommando (%s)."
+
+#: info/session.c:4494
+#, c-format
+msgid "\"%s\" is invalid"
+msgstr "\"%s\" er ugyldig"
+
+#: info/session.c:4495
+#, fuzzy, c-format
+msgid "`%s' is invalid"
+msgstr "\"%s\" er ugyldig"
+
+#: info/session.c:4709
+msgid "Add this digit to the current numeric argument"
+msgstr "Tilføj dette tegn til det nuværende numeriske parameter"
+
+#: info/session.c:4718
+msgid "Start (or multiply by 4) the current numeric argument"
+msgstr "Start (eller gang med 4) det nuværende numeriske parameter"
+
+#: info/session.c:4733
+msgid "Internally used by \\[universal-argument]"
+msgstr "Bruges internt af \\[universal-argument]"
+
+#: info/tilde.c:338
+#, 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:64
+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:68
+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:74
+msgid "Explain the use of a variable"
+msgstr "Forklar brugen af en variabel"
+
+#: info/variables.c:80
+msgid "Describe variable: "
+msgstr "Beskriv variabel: "
+
+#: info/variables.c:99
+msgid "Set the value of an Info variable"
+msgstr "Sæt værdien af en Info-variabel"
+
+#: info/variables.c:105
+msgid "Set variable: "
+msgstr "Sæt variabel: "
+
+#: info/variables.c:123
+#, c-format
+msgid "Set %s to value (%d): "
+msgstr "Sæt %s til værdien (%d): "
+
+#: info/variables.c:164
+#, c-format
+msgid "Set %s to value (%s): "
+msgstr "Sæt %s til værdien (%s): "
+
+#: info/window.c:1138
+msgid "--*** Tags out of Date ***"
+msgstr "--*** Mærker (tags) er forældede ***"
+
+#: info/window.c:1149
+msgid "-----Info: (), lines ----, "
+msgstr "-----Info: (), linjer ---, "
+
+#: info/window.c:1156
+#, c-format
+msgid "-%s---Info: %s, %d lines --%s--"
+msgstr "-%s---Info: %s, %d linjer -%s--"
+
+#: info/window.c:1160
+#, c-format
+msgid "-%s%s-Info: (%s)%s, %d lines --%s--"
+msgstr "-%s%s-Info: (%s)%s, %d linjer -%s--"
+
+#: info/window.c:1167
+#, c-format
+msgid " Subfile: %s"
+msgstr " Underfil: %s"
+
+#: lib/getopt.c:551 lib/getopt.c:570
+#, c-format
+msgid "%s: option `%s' is ambiguous\n"
+msgstr "%s: tilvalg '%s' er flertydig\n"
+
+#: lib/getopt.c:603 lib/getopt.c:607
+#, c-format
+msgid "%s: option `--%s' doesn't allow an argument\n"
+msgstr "%s: tilvalg '--%s' tillader ikke en parameter\n"
+
+#: lib/getopt.c:616 lib/getopt.c:621
+#, c-format
+msgid "%s: option `%c%s' doesn't allow an argument\n"
+msgstr "%s: tilvalg '%c%s' tillader ikke en parameter\n"
+
+#: lib/getopt.c:667 lib/getopt.c:689 lib/getopt.c:1020 lib/getopt.c:1042
+#, c-format
+msgid "%s: option `%s' requires an argument\n"
+msgstr "%s: tilvalg '%s' kræver en parameter\n"
+
+#: lib/getopt.c:727 lib/getopt.c:730
+#, c-format
+msgid "%s: unrecognized option `--%s'\n"
+msgstr "%s: ukendt tilvalg '--%s'\n"
+
+#: lib/getopt.c:738 lib/getopt.c:741
+#, c-format
+msgid "%s: unrecognized option `%c%s'\n"
+msgstr "%s: ukendt tilvalg '%c%s'\n"
+
+#: lib/getopt.c:796 lib/getopt.c:799
+#, c-format
+msgid "%s: illegal option -- %c\n"
+msgstr "%s: ugyldigt tilvalg -- %c\n"
+
+#: lib/getopt.c:805 lib/getopt.c:808
+#, c-format
+msgid "%s: invalid option -- %c\n"
+msgstr "%s: ugyldigt tilvalg -- %c\n"
+
+#: lib/getopt.c:863 lib/getopt.c:882 lib/getopt.c:1095 lib/getopt.c:1116
+#, c-format
+msgid "%s: option requires an argument -- %c\n"
+msgstr "%s: tilvalg kræver en parameter -- %c\n"
+
+#: lib/getopt.c:935 lib/getopt.c:954
+#, c-format
+msgid "%s: option `-W %s' is ambiguous\n"
+msgstr "%s: tilvalg '-W %s' er flertydigt\n"
+
+#: lib/getopt.c:978 lib/getopt.c:999
+#, c-format
+msgid "%s: option `-W %s' doesn't allow an argument\n"
+msgstr "%s: tilvalg '-W %s' tillader ikke en parameter\n"
+
+#: makeinfo/cmds.c:520 makeinfo/cmds.c:542
+#, fuzzy, c-format
+msgid "arguments to @%s ignored"
+msgstr "Ugyldigt argument til %c%s"
+
+#: makeinfo/cmds.c:585
+msgid "January"
+msgstr "januar"
+
+#: makeinfo/cmds.c:585
+msgid "February"
+msgstr "februar"
+
+#: makeinfo/cmds.c:585
+msgid "March"
+msgstr "marts"
+
+#: makeinfo/cmds.c:585
+msgid "April"
+msgstr "april"
+
+#: makeinfo/cmds.c:585
+msgid "May"
+msgstr "maj"
+
+#: makeinfo/cmds.c:586
+msgid "June"
+msgstr "juni"
+
+#: makeinfo/cmds.c:586
+msgid "July"
+msgstr "juli"
+
+#: makeinfo/cmds.c:586
+msgid "August"
+msgstr "august"
+
+#: makeinfo/cmds.c:586
+msgid "September"
+msgstr "september"
+
+#: makeinfo/cmds.c:586
+msgid "October"
+msgstr "oktober"
+
+#: makeinfo/cmds.c:587
+msgid "November"
+msgstr "november"
+
+#: makeinfo/cmds.c:587
+msgid "December"
+msgstr "december"
+
+#: makeinfo/cmds.c:936
+#, c-format
+msgid "unlikely character %c in @var"
+msgstr "usandsynligt tegn %c i @var"
+
+#: makeinfo/cmds.c:979
+msgid "@sc argument all uppercase, thus no effect"
+msgstr "@sc parameter er kun versaler, derfor ingen virkning"
+
+#: makeinfo/cmds.c:1034
+#, c-format
+msgid "`{' expected, but saw `%c'"
+msgstr "'{' forventedes, men fandt '%c'"
+
+#: makeinfo/cmds.c:1074
+msgid "end of file inside verb block"
+msgstr "filslutning inden i en verb-blok"
+
+#: makeinfo/cmds.c:1082
+#, c-format
+msgid "`}' expected, but saw `%c'"
+msgstr "'}' forventedes, men fandt '%c'"
+
+#: makeinfo/cmds.c:1112
+msgid ""
+"@strong{Note...} produces a spurious cross-reference in Info; reword to "
+"avoid that"
+msgstr ""
+
+#: makeinfo/cmds.c:1305
+#, c-format
+msgid "%c%s is obsolete"
+msgstr "%c%s er forældet"
+
+#: makeinfo/cmds.c:1414
+#, c-format
+msgid "@sp requires a positive numeric argument, not `%s'"
+msgstr "@sp kræver et positivt tal, ikke '%s'"
+
+#: makeinfo/cmds.c:1763 makeinfo/cmds.c:1819 makeinfo/footnote.c:82
+#, c-format
+msgid "Bad argument to %c%s"
+msgstr "Ugyldigt argument til %c%s"
+
+#: makeinfo/cmds.c:1773 makeinfo/makeinfo.c:4142
+msgid "asis"
+msgstr "asis"
+
+#: makeinfo/cmds.c:1775 makeinfo/cmds.c:1805 makeinfo/makeinfo.c:4144
+msgid "none"
+msgstr "none"
+
+#: makeinfo/cmds.c:1789
+#, fuzzy, c-format
+msgid "Bad argument to @%s"
+msgstr "Ugyldigt argument til %c%s"
+
+#: makeinfo/cmds.c:1803
+msgid "insert"
+msgstr ""
+
+#: makeinfo/defun.c:84
+msgid "Missing `}' in @def arg"
+msgstr "Manglende '}' i @def parameter"
+
+#: makeinfo/defun.c:403
+msgid "Function"
+msgstr "Funktion"
+
+#: makeinfo/defun.c:406
+msgid "Macro"
+msgstr "Makro"
+
+#: makeinfo/defun.c:409
+msgid "Special Form"
+msgstr "Specialform"
+
+#: makeinfo/defun.c:413
+msgid "Variable"
+msgstr "Variabel"
+
+#: makeinfo/defun.c:416
+msgid "User Option"
+msgstr "Brugerfunktion"
+
+#: makeinfo/defun.c:420
+msgid "Instance Variable"
+msgstr "Instansvariabel"
+
+#: makeinfo/defun.c:424
+msgid "Method"
+msgstr "Metode"
+
+#: makeinfo/defun.c:500 makeinfo/defun.c:505 makeinfo/defun.c:545
+#: makeinfo/defun.c:644 makeinfo/xml.c:2229
+msgid "of"
+msgstr "for"
+
+#: makeinfo/defun.c:509 makeinfo/defun.c:513 makeinfo/defun.c:517
+#: makeinfo/defun.c:551 makeinfo/defun.c:650 makeinfo/xml.c:2234
+msgid "on"
+msgstr "på"
+
+#: 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:435
+#, c-format
+msgid "%s: getwd: %s, %s\n"
+msgstr "%s: getwd: %s, %s\n"
+
+#: makeinfo/files.c:638
+#, c-format
+msgid "`%s' omitted before output filename"
+msgstr ""
+
+#: makeinfo/files.c:646
+#, c-format
+msgid "`%s' omitted since writing to stdout"
+msgstr ""
+
+#: makeinfo/files.c:694
+msgid "Output buffer not empty."
+msgstr ""
+
+#: makeinfo/footnote.c:150
+#, 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:165
+#, c-format
+msgid "No closing brace for footnote `%s'"
+msgstr "Ingen slutparentes for fodnote '%s'"
+
+#: makeinfo/footnote.c:198
+msgid "Footnote defined without parent node"
+msgstr "Fodnote defineret uden forældre-emne"
+
+#: makeinfo/footnote.c:210
+msgid "Footnotes inside footnotes are not allowed"
+msgstr "Fodnoter indeni fodnoter er ikke tilladt"
+
+#: makeinfo/footnote.c:302 makeinfo/index.c:189
+msgid "Footnotes"
+msgstr "Fodnoter"
+
+#: makeinfo/html.c:87
+#, c-format
+msgid "%s: could not open --css-file: %s"
+msgstr ""
+
+#: makeinfo/html.c:172
+#, c-format
+msgid "%s:%d: --css-file ended in comment"
+msgstr ""
+
+#: makeinfo/html.c:207
+msgid "Untitled"
+msgstr "Uden titel"
+
+#: makeinfo/html.c:422
+msgid "[unexpected] no html tag to pop"
+msgstr "[uventet] ingen html-mærker at \"pop\"'e"
+
+#: makeinfo/html.c:752
+#, c-format
+msgid "[unexpected] invalid node name: `%s'"
+msgstr "[uventet] ugyldigt emnenavn: '%s'"
+
+#: makeinfo/index.c:169
+#, c-format
+msgid "Unknown index `%s'"
+msgstr "Ukendt indeks '%s'"
+
+#: makeinfo/index.c:234
+#, c-format
+msgid "Info cannot handle `:' in index entry `%s'"
+msgstr "Info kan ikke håndtere ':' i indeksindgangen '%s'"
+
+#: makeinfo/index.c:412
+#, c-format
+msgid "Index `%s' already exists"
+msgstr "Indeks '%s' eksisterer allerede"
+
+#: makeinfo/index.c:455
+#, c-format
+msgid "Unknown index `%s' and/or `%s' in @synindex"
+msgstr "Ukendt indeks '%s' og/eller '%s' i @synindex"
+
+#: makeinfo/index.c:661
+msgid "(line )"
+msgstr ""
+
+#: makeinfo/index.c:669
+#, c-format
+msgid "(line %*d)"
+msgstr ""
+
+#: makeinfo/index.c:750
+#, c-format
+msgid "Unknown index `%s' in @printindex"
+msgstr "Ukendt indeks '%s' i @printindex"
+
+#: makeinfo/index.c:819
+#, c-format
+msgid "Entry for index `%s' outside of any node"
+msgstr "Indgang til indeks '%s' udenfor et emne"
+
+#: makeinfo/index.c:822 makeinfo/index.c:858
+msgid "(outside of any node)"
+msgstr "(udenfor et emne)"
+
+#: makeinfo/index.c:919 makeinfo/index.c:925
+msgid "See "
+msgstr "Se "
+
+#: makeinfo/insertion.c:160
+msgid "@item not allowed in argument to @itemize"
+msgstr ""
+
+#: makeinfo/insertion.c:238
+msgid "Broken-Type in insertion_type_pname"
+msgstr "Broken-Type i insertion_type_pname"
+
+#: makeinfo/insertion.c:334
+msgid "Enumeration stack overflow"
+msgstr "Overløb i optællingsstak (enumeration stack)"
+
+#: makeinfo/insertion.c:366
+#, c-format
+msgid "lettering overflow, restarting at %c"
+msgstr "bogstavsoverløb, genstarter ved %c"
+
+#: makeinfo/insertion.c:631
+#, c-format
+msgid "%s requires an argument: the formatter for %citem"
+msgstr "%s kræver en parameter: formatteringen for %citem"
+
+#: makeinfo/insertion.c:719
+#, c-format
+msgid "%cfloat environments cannot be nested"
+msgstr ""
+
+#: makeinfo/insertion.c:973
+#, c-format
+msgid "`@end' expected `%s', but saw `%s'"
+msgstr "'@end' forventede '%s', men fandt '%s'"
+
+#: makeinfo/insertion.c:1337
+#, c-format
+msgid "No matching `%cend %s'"
+msgstr "Mangler en tilsvarende '%cend %s'"
+
+#: makeinfo/insertion.c:1592
+#, c-format
+msgid "%s requires letter or digit"
+msgstr "%s kræver et bogstav eller ciffer"
+
+#: makeinfo/insertion.c:1687
+msgid "end of file inside verbatim block"
+msgstr "filslutning indeni en verbatim-blok"
+
+#: makeinfo/insertion.c:1913
+#, fuzzy, c-format
+msgid "@%s not meaningful outside `@float' environment"
+msgstr "@%s giver ingen mening i en '@%s'-blok"
+
+#: makeinfo/insertion.c:1949
+msgid "@menu seen before first @node, creating `Top' node"
+msgstr "@menu fundet før første @node, opretter 'Top' emne"
+
+#: makeinfo/insertion.c:1950
+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:1962
+msgid "@detailmenu seen before first node, creating `Top' node"
+msgstr "@detailmenu fundet før første emne, opretter emnet 'Top'"
+
+#: makeinfo/insertion.c:2018
+#, c-format
+msgid "@%s not meaningful outside `@titlepage' and `@quotation' environments"
+msgstr ""
+
+#: makeinfo/insertion.c:2032
+#, fuzzy, c-format
+msgid "@%s not meaningful outside `@titlepage' environment"
+msgstr "@%s giver ingen mening i en '@%s'-blok"
+
+#: makeinfo/insertion.c:2063
+#, c-format
+msgid "Unmatched `%c%s'"
+msgstr "Uparret '%c%s'"
+
+#: makeinfo/insertion.c:2068
+#, c-format
+msgid "`%c%s' needs something after it"
+msgstr "'%c%s' kræver noget efterfølgende"
+
+#: makeinfo/insertion.c:2074
+#, fuzzy, c-format
+msgid "Bad argument `%s' to `@%s', using `%s'"
+msgstr "Ugyldigt parameter '%s', '%s', benytter '%s'"
+
+#: makeinfo/insertion.c:2171
+#, c-format
+msgid "@%s not meaningful inside `@%s' block"
+msgstr "@%s giver ingen mening i en '@%s'-blok"
+
+#: makeinfo/insertion.c:2180
+#, c-format
+msgid "@itemx not meaningful inside `%s' block"
+msgstr "@itemx giver ingen mening i en '%s'-blok"
+
+#: makeinfo/insertion.c:2356
+#, c-format
+msgid "%c%s found outside of an insertion block"
+msgstr "%c%s fundet udenfor en indsætningsblok"
+
+#: makeinfo/lang.c:580
+#, c-format
+msgid "%s is not a valid ISO 639 language code"
+msgstr "%s er ikke en gyldig ISO 639 sprogkode"
+
+#: makeinfo/lang.c:655
+#, fuzzy, c-format
+msgid "unrecognized encoding name `%s'"
+msgstr "ukendt indkodningsnavn '%s'"
+
+#: makeinfo/lang.c:663
+#, c-format
+msgid "sorry, encoding `%s' not supported"
+msgstr "beklager, indkodningen '%s' understøttes ikke"
+
+#: makeinfo/lang.c:715
+#, c-format
+msgid "invalid encoded character `%s'"
+msgstr "ugyldig indkodet tegn '%s'"
+
+#: makeinfo/lang.c:1009
+#, 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:1013
+#, 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:355
+#, 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:586
+#, c-format
+msgid "%cend macro not found"
+msgstr "%cend makro ikke fundet"
+
+#: makeinfo/macro.c:624
+msgid "@quote-arg only useful for single-argument macros"
+msgstr "@quote-arg kan kun bruges til makroer med et enkelt parameter"
+
+#: makeinfo/macro.c:660
+#, c-format
+msgid "mismatched @end %s with @%s"
+msgstr "uparret @end %s med @%s"
+
+#: makeinfo/makeinfo.c:184
+#, c-format
+msgid "Too many errors! Gave up.\n"
+msgstr "For mange fejl! Gav op.\n"
+
+#: makeinfo/makeinfo.c:302
+#, c-format
+msgid "%s:%d: warning: "
+msgstr "%s:%d: advarsel: "
+
+#: makeinfo/makeinfo.c:321 makeinfo/makeinfo.c:2260
+#, c-format
+msgid "Misplaced %c"
+msgstr "Fejlplaceret %c"
+
+#: makeinfo/makeinfo.c:340
+#, c-format
+msgid "Try `%s --help' for more information.\n"
+msgstr "Prøv '%s --help' for mere information.\n"
+
+#: makeinfo/makeinfo.c:343
+#, c-format
+msgid "Usage: %s [OPTION]... TEXINFO-FILE...\n"
+msgstr "Brug: %s [TILVALG]... TEXINFO-FIL...\n"
+
+#: makeinfo/makeinfo.c:346
+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:350
+#, c-format
+msgid ""
+"General options:\n"
+" --error-limit=NUM quit after NUM errors (default %d).\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"
+" --reference-limit=NUM warn about at most NUM references (default %"
+"d).\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:364
+#, 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:372
+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 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 (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:386
+#, c-format
+msgid ""
+"Options for Info and plain text:\n"
+" --enable-encoding output accented and special characters in\n"
+" Info output based on @documentencoding.\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\n"
+" in which they are defined (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:403
+msgid ""
+"Options for HTML:\n"
+" --css-include=FILE include FILE in HTML <style> output;\n"
+" read stdin if FILE is -.\n"
+msgstr ""
+
+#: makeinfo/makeinfo.c:409
+#, 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:416
+#, 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:425
+#, 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:444
+#, 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:452
+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:603
+#, c-format
+msgid "%s: Ignoring unrecognized TEXINFO_OUTPUT_FORMAT value `%s'.\n"
+msgstr ""
+
+#: makeinfo/makeinfo.c:647 makeinfo/makeinfo.c:673 makeinfo/makeinfo.c:692
+#: makeinfo/makeinfo.c:722 makeinfo/makeinfo.c:743
+#, 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:660
+#, fuzzy, c-format
+msgid "%s: could not open macro expansion output `%s'"
+msgstr "Kunne ikke åbne makroudfoldelses-uddata '%s'"
+
+#: makeinfo/makeinfo.c:665
+#, fuzzy, c-format
+msgid "%s: ignoring second macro expansion output `%s'.\n"
+msgstr "Kunne ikke åbne makroudfoldelses-uddata '%s'"
+
+#: makeinfo/makeinfo.c:707
+#, 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:732
+#, 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:806
+#, c-format
+msgid "%s: missing file argument.\n"
+msgstr "%s: mangler filparameter.\n"
+
+#: makeinfo/makeinfo.c:997 makeinfo/makeinfo.c:3991
+#, c-format
+msgid "Multiline command %c%s used improperly"
+msgstr ""
+
+#: makeinfo/makeinfo.c:1000
+#, c-format
+msgid "Expected `%s'"
+msgstr "Forventede '%s'"
+
+#: makeinfo/makeinfo.c:1479
+#, c-format
+msgid "Can't create directory `%s': %s"
+msgstr "Kan ikke oprette kataloget '%s': %s"
+
+#: makeinfo/makeinfo.c:1525
+#, c-format
+msgid "No `%s' found in `%s'"
+msgstr "Ingen '%s' fundet i '%s'"
+
+#: makeinfo/makeinfo.c:1605
+#, 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:1638
+#, c-format
+msgid "Making %s file `%s' from `%s'.\n"
+msgstr "Producerer %s file '%s' ud fra '%s'.\n"
+
+#: makeinfo/makeinfo.c:1673
+#, c-format
+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"
+
+#: makeinfo/makeinfo.c:1709
+#, 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:1773
+#, 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:2034
+#, c-format
+msgid "Unknown command `%s'"
+msgstr "Ukendt kommando '%s'"
+
+#: makeinfo/makeinfo.c:2056
+#, 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:2314
+#, fuzzy, c-format
+msgid "%c%s expected braces"
+msgstr "%c%s forventede '{...}'"
+
+#: makeinfo/makeinfo.c:2327
+msgid "Unmatched }"
+msgstr "Uparret }"
+
+#: makeinfo/makeinfo.c:2375
+msgid "NO_NAME!"
+msgstr "INTET_NAVN!"
+
+#: makeinfo/makeinfo.c:2396
+#, c-format
+msgid "%c%s missing close brace"
+msgstr "%c%s mangler højre parentes"
+
+#: makeinfo/makeinfo.c:3309
+#, c-format
+msgid "@image file `%s' (for HTML) not readable: %s"
+msgstr "@image-fil '%s' (for HTML) er ulæselig: %s"
+
+#: makeinfo/makeinfo.c:3315
+#, fuzzy, c-format
+msgid "No such file `%s'"
+msgstr "Ingen '%s' fundet i '%s'"
+
+#: makeinfo/makeinfo.c:3447
+#, c-format
+msgid "@image file `%s' (for text) unreadable: %s"
+msgstr "@image-fil '%s' (for tekst) er ulæselig: %s"
+
+#: makeinfo/makeinfo.c:3456
+msgid "@image missing filename argument"
+msgstr "@image mangler filnavnsparameter"
+
+#: makeinfo/makeinfo.c:3675
+#, c-format
+msgid "undefined flag: %s"
+msgstr ""
+
+#: makeinfo/makeinfo.c:3676
+#, c-format
+msgid "{No value for `%s'}"
+msgstr "{Ingen værdi for '%s'}"
+
+#: makeinfo/makeinfo.c:3728
+#, c-format
+msgid "%c%s requires a name"
+msgstr "%c%s kræver et navn"
+
+#: makeinfo/makeinfo.c:3834
+#, c-format
+msgid "Reached eof before matching @end %s"
+msgstr "Nåede filslutning før samhørende @end %s"
+
+#: makeinfo/makeinfo.c:4082
+#, 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:254
+#, c-format
+msgid "ignoring stray text `%s' after @multitable"
+msgstr "ignorerer vildfaren tekst '%s' efter @multitable"
+
+#: makeinfo/multi.c:393
+#, c-format
+msgid "Too many columns in multitable item (max %d)"
+msgstr "For mange søjler i 'multitable' element (maks %d)"
+
+#: makeinfo/multi.c:555
+#, c-format
+msgid "[unexpected] cannot select column #%d in multitable"
+msgstr "[uventet] Kan ikke vælge kolonne %d i 'multitable'"
+
+#: makeinfo/multi.c:584
+msgid "ignoring @tab outside of multitable"
+msgstr "ignorerer @tab udenfor 'multitable'"
+
+#: makeinfo/multi.c:632
+#, c-format
+msgid "** Multicolumn output from last row:\n"
+msgstr "** Flerkolonne uddata fra sidste række:\n"
+
+#: makeinfo/multi.c:635
+#, c-format
+msgid "* column #%d: output = %s\n"
+msgstr "* kolonne %d: uddata = %s\n"
+
+#: makeinfo/node.c:280
+#, c-format
+msgid "Node `%s' previously defined at line %d"
+msgstr "Emne '%s' er tidligere defineret på linje %d"
+
+#: makeinfo/node.c:648
+#, c-format
+msgid "Formatting node %s...\n"
+msgstr "Formatterer emne %s...\n"
+
+#: makeinfo/node.c:716
+#, 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:879
+#, c-format
+msgid "No node name specified for `%c%s' command"
+msgstr "Intet emnenavn angivet for '%c%s'-kommandoen"
+
+#: makeinfo/node.c:920 makeinfo/node.c:1151
+#, 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:923
+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:925 makeinfo/node.c:1154
+msgid "Rename this anchor or use the `--no-split' option"
+msgstr "Omdøb dette mål eller brug tilvalget '--no-split'"
+
+#: makeinfo/node.c:955
+#, 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:991
+msgid "Next:"
+msgstr "Næste:"
+
+#: makeinfo/node.c:1007
+msgid "Previous:"
+msgstr "Forrige:"
+
+#: makeinfo/node.c:1021
+msgid "Up:"
+msgstr "Op:"
+
+#: makeinfo/node.c:1148
+#, 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:1153
+msgid "@anchor command ignored; references to it will not work"
+msgstr "@anchor-kommandoen ignoreres. Referencer til den vil ikke fungere"
+
+#: makeinfo/node.c:1347
+#, fuzzy, c-format
+msgid "%s reference to nonexistent node `%s' (perhaps incorrect sectioning?)"
+msgstr "%s reference til ikke-eksisterende emne '%s'"
+
+#: makeinfo/node.c:1363
+msgid "Menu"
+msgstr "Menu"
+
+#: makeinfo/node.c:1365
+msgid "Cross"
+msgstr "Kryds"
+
+#: makeinfo/node.c:1447
+#, 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:1450
+#, c-format
+msgid "This node (%s) has the bad Prev"
+msgstr "Dette emne (%s) har den ugyldige 'Forrige'"
+
+#: makeinfo/node.c:1462
+msgid "Prev"
+msgstr "Forrige"
+
+#: makeinfo/node.c:1505
+#, c-format
+msgid "Prev field of node `%s' not pointed to"
+msgstr "Feltet 'Forrige' i emne '%s' bliver ikke peget på"
+
+#: makeinfo/node.c:1509
+#, c-format
+msgid "This node (%s) has the bad Next"
+msgstr "Dette emne (%s) har den ugyldige 'Næste'-felt"
+
+#: makeinfo/node.c:1521
+#, c-format
+msgid "`%s' has no Up field (perhaps incorrect sectioning?)"
+msgstr ""
+
+#: makeinfo/node.c:1524
+msgid "Up"
+msgstr "Op"
+
+#: makeinfo/node.c:1590
+#, 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:1619
+#, c-format
+msgid "node `%s' has been referenced %d times"
+msgstr "emne '%s' blev refereret %d gange"
+
+#: makeinfo/node.c:1633
+#, c-format
+msgid "unreferenced node `%s'"
+msgstr "ikke-refereret emne '%s'"
+
+#: makeinfo/node.c:1723
+#, c-format
+msgid "Removing %s\n"
+msgstr ""
+
+#: makeinfo/node.c:1727
+#, 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:562
+#, c-format
+msgid "Internal error (search_sectioning) \"%s\"!"
+msgstr "Intern fejl (search_sectioning) \"%s\"!"
+
+#: makeinfo/sectioning.c:623
+#, 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:639
+#, c-format
+msgid "Node with %ctop as a section already exists"
+msgstr "Emne med %ctop som sektion eksisterer allerede"
+
+#: makeinfo/sectioning.c:647
+#, c-format
+msgid "Here is the %ctop node"
+msgstr "Her er %ctop-emnet"
+
+#: makeinfo/sectioning.c:663
+#, c-format
+msgid "%ctop used before %cnode, defaulting to %s"
+msgstr "%ctop benyttet før %cnode, benytter forvalget %s"
+
+#: makeinfo/toc.c:197 makeinfo/toc.c:271 makeinfo/toc.c:273
+msgid "Table of Contents"
+msgstr "Indhold"
+
+#: makeinfo/toc.c:304 makeinfo/toc.c:337 makeinfo/toc.c:339
+msgid "Short Contents"
+msgstr "Kort indhold"
+
+#: makeinfo/xml.c:1605
+#, c-format
+msgid "@image file `%s' unreadable: %s"
+msgstr "@image-fil '%s' er ulæselig: %s"
+
+#: makeinfo/xml.c:2097
+msgid ""
+"@headitem as the last item of @multitable produces invalid Docbook documents"
+msgstr ""
+
+#: util/install-info.c:154
+#, c-format
+msgid "%s: warning: "
+msgstr "%s: advarsel: "
+
+#: util/install-info.c:203
+#, c-format
+msgid " for %s"
+msgstr " for %s"
+
+#: util/install-info.c:426
+#, c-format
+msgid "\tTry `%s --help' for a complete list of options.\n"
+msgstr "\tPrøv '%s --help' for en komplet tilvalgsliste.\n"
+
+#: util/install-info.c:434
+#, c-format
+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 ""
+"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"
+
+#: util/install-info.c:488
+#, 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"
+
+#: util/install-info.c:513
+#, 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"
+
+#: util/install-info.c:600
+#, c-format
+msgid "%s: empty file"
+msgstr "%s: tom fil"
+
+#: util/install-info.c:913 util/install-info.c:953
+msgid "START-INFO-DIR-ENTRY without matching END-INFO-DIR-ENTRY"
+msgstr "START-INFO-DIR-ENTRY uden tilhørende END-INFO-DIR-ENTRY"
+
+#: util/install-info.c:948
+msgid "END-INFO-DIR-ENTRY without matching START-INFO-DIR-ENTRY"
+msgstr "END-INFO-DIR-ENTRY uden tilhørende START-INFO-DIR-ENTRY"
+
+#: util/install-info.c:1191 util/install-info.c:1201
+#, c-format
+msgid "%s: already have dir file: %s\n"
+msgstr ""
+
+#: util/install-info.c:1236
+#, c-format
+msgid "%s: Specify the Info file only once.\n"
+msgstr "%s: Angiv kun Info-filen én gang.\n"
+
+#: util/install-info.c:1284
+#, c-format
+msgid "excess command line argument `%s'"
+msgstr "overskydende kommandolinjeparameter '%s'"
+
+#: util/install-info.c:1288
+msgid "No input file specified; try --help for more information."
+msgstr "Ingen inddatafil angivet; prøv --help for mere information."
+
+#: util/install-info.c:1291
+msgid "No dir file specified; try --help for more information."
+msgstr "Intet katalog angivet; prøv --help for mere information."
+
+#: util/install-info.c:1313
+#, c-format
+msgid "no info dir entry in `%s'"
+msgstr "ingen infokatalog-indgang i '%s'"
+
+#: util/install-info.c:1426
+#, c-format
+msgid "menu item `%s' already exists, for file `%s'"
+msgstr "menupunkt '%s' eksisterer allerede i filen '%s'"
+
+#: util/install-info.c:1449
+#, c-format
+msgid "no entries found for `%s'; nothing deleted"
+msgstr "ingen indgange fundet for '%s'; intet slettet"
+
+#: util/texindex.c:252
+msgid "display this help and exit"
+msgstr "viser denne hjælp og afslutter"
+
+#: util/texindex.c:254
+msgid "keep temporary files around after processing"
+msgstr "efterlad midlertidige filer"
+
+#: util/texindex.c:256
+msgid "do not keep temporary files around after processing (default)"
+msgstr "efterlad ikke midlertidige filer (standard)"
+
+#: util/texindex.c:258
+msgid "send output to FILE"
+msgstr "send uddata til FIL"
+
+#: util/texindex.c:260
+msgid "display version information and exit"
+msgstr "vis versions-information og afslut"
+
+#: util/texindex.c:270
+#, c-format
+msgid "Usage: %s [OPTION]... FILE...\n"
+msgstr "Brug: %s [TILVALG]... FIL...\n"
+
+#: util/texindex.c:271
+#, 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:274
+#, 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:276
+#, c-format
+msgid ""
+"\n"
+"Options:\n"
+msgstr ""
+"\n"
+"Tilvalg:\n"
+
+#: util/texindex.c:876 util/texindex.c:910 util/texindex.c:983
+#: util/texindex.c:1011
+#, c-format
+msgid "%s: not a texinfo index file"
+msgstr "%s: ikke en texinfo indeksfil"
+
+#: util/texindex.c:968
+#, c-format
+msgid "failure reopening %s"
+msgstr "kunne ikke åbne %s"
+
+#: util/texindex.c:1218
+#, c-format
+msgid "No page number in %s"
+msgstr "Intet sidenummer i %s"
+
+#: util/texindex.c:1291
+#, 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 "%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 "First argument to cross-reference may not be empty"
+#~ msgstr "Første parameter i krydsreferencen må ikke være tom"
+
+#~ msgid "see "
+#~ msgstr "se "
+
+#~ msgid "`.' or `,' must follow cross reference, not %c"
+#~ msgstr "en krydsreference må efterfølges af '.' eller ',', ikke %c"
+
+#~ msgid "First argument to @inforef may not be empty"
+#~ msgstr "Første parameter i @inforef må ikke være tom"
+
+#~ 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 "virtual memory exhausted"
+#~ msgstr "virtuel hukommelse opbrugt"
+
+#~ 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"
+
+#~ msgid "\\%-10[scroll-forward] Scroll forward 1 line.\n"
+#~ msgstr "\\%-10[scroll-forward] Rul 1 linje frem.\n"
+
+#~ msgid "\\%-10[scroll-backward] Scroll backward 1 line.\n"
+#~ msgstr "\\%-10[scroll-backward] Rul en linje tilbage.\n"
diff --git a/macros/texinfo/contrib/texinfo-hu/texinfo/po/de.gmo b/macros/texinfo/contrib/texinfo-hu/texinfo/po/de.gmo
new file mode 100644
index 0000000000..af525d76fe
--- /dev/null
+++ b/macros/texinfo/contrib/texinfo-hu/texinfo/po/de.gmo
Binary files differ
diff --git a/macros/texinfo/contrib/texinfo-hu/texinfo/po/de.po b/macros/texinfo/contrib/texinfo-hu/texinfo/po/de.po
new file mode 100644
index 0000000000..6a63baa753
--- /dev/null
+++ b/macros/texinfo/contrib/texinfo-hu/texinfo/po/de.po
@@ -0,0 +1,3267 @@
+# German messages for GNU Texinfo
+# Copyright © 2004 Free Software Foundation, Inc.
+# Michael Piefel <piefel@informatik.hu-berlin.de>, 2001, 2002, 2003, 2004.
+# Karl Eichwalder <ke@gnu.franken.de>, 1999, 2000.
+# Karl Eichwalder <ke@suse.de>, 1997, 1998, 1999.
+# Karl Eichwalder <ke@ke.Central.DE>, 1996.
+#
+# 2004-03-31
+# Along with this new update, I changed the quotes to
+# „German“ as opposed to »French« quotes.
+# MPi
+#
+# 2003-06-01
+# All translations revised for current CVS.
+# wl
+#
+# 2001-05-14
+# Update: version 4.0b
+# 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-10-07 20:56:42 CEST
+# Update: version 4.0
+# -ke-
+#
+# 1999-08-18 07:48:14 CEST
+# Update: version 3.12q.
+# -ke-
+#
+# 1999-07-28 08:56:22 CEST
+# Update: version 3.12n.
+# -ke-
+#
+# 1999-04-20 21:51:54 CEST
+# Update: version 3.12h.
+# reuse getopt translations from wget.
+# -ke-
+#
+# 1999-02-06 20:24:24 MET
+# Update: version 3.12c.
+# -ke-
+#
+# 1998-05-03 12:25:13 MEST
+# Cosmetic changes.
+# -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.7.91\n"
+"Report-Msgid-Bugs-To: bug-texinfo@gnu.org\n"
+"POT-Creation-Date: 2004-12-21 16:20-0800\n"
+"PO-Revision-Date: 2004-12-13 11:53 +0100\n"
+"Last-Translator: Michael Piefel <piefel@informatik.hu-berlin.de>\n"
+"Language-Team: German <de@li.org>\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8-bit\n"
+
+#: info/echo-area.c:284 info/session.c:689
+msgid "Move forward a character"
+msgstr "Ein Zeichen vorgehen"
+
+#: info/echo-area.c:296 info/session.c:705
+msgid "Move backward a character"
+msgstr "Ein Zeichen zurückgehen"
+
+#: info/echo-area.c:308
+msgid "Move to the start of this line"
+msgstr "Zum Anfang dieser Zeile bewegen"
+
+#: info/echo-area.c:313
+msgid "Move to the end of this line"
+msgstr "Zum Ende dieser Zeile bewegen"
+
+#: info/echo-area.c:321 info/session.c:723
+msgid "Move forward a word"
+msgstr "Ein Wort vorgehen"
+
+#: info/echo-area.c:361 info/session.c:772
+msgid "Move backward a word"
+msgstr "Ein Wort zurückgehen"
+
+#: info/echo-area.c:401
+msgid "Delete the character under the cursor"
+msgstr "Das Zeichen unter dem Cursor löschen"
+
+#: info/echo-area.c:431
+msgid "Delete the character behind the cursor"
+msgstr "Das Zeichen links vom Cursor löschen"
+
+#: info/echo-area.c:452
+msgid "Cancel or quit operation"
+msgstr "Operation abbrechen oder beenden"
+
+#: info/echo-area.c:467
+msgid "Accept (or force completion of) this line"
+msgstr "Akzeptiere diese Zeile (oder erzwinge ihre Vervollständigung)"
+
+#: info/echo-area.c:472
+msgid "Insert next character verbatim"
+msgstr "Das nächste Zeichen wörtlich eingeben"
+
+#: info/echo-area.c:480
+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:653
+msgid "Kill the word preceding the cursor"
+msgstr "Das dem Cursor vorangehende Wort löschen"
+
+#: info/echo-area.c:868 info/echo-area.c:924
+msgid "No completions"
+msgstr "Keine Vervollständigungen"
+
+#: info/echo-area.c:870
+msgid "Not complete"
+msgstr "Nicht vollständig"
+
+#: info/echo-area.c:911
+msgid "List possible completions"
+msgstr "Mögliche Vervollständigungen auflisten"
+
+#: info/echo-area.c:928
+msgid "Sole completion"
+msgstr "Einzige Vervollständigung"
+
+#: info/echo-area.c:937
+msgid "One completion:\n"
+msgstr "Eine Vervollständigung:\n"
+
+#: info/echo-area.c:938
+#, c-format
+msgid "%d completions:\n"
+msgstr "%d Vervollständigungen:\n"
+
+#: info/echo-area.c:1085
+msgid "Insert completion"
+msgstr "Vervollständigung einfügen"
+
+#: info/echo-area.c:1220
+msgid "Building completions..."
+msgstr "Vervollständigungen werden erstellt..."
+
+#: info/echo-area.c:1340
+msgid "Scroll the completions window"
+msgstr "Im Vervollständigungs-Fenster blättern"
+
+#: info/footnotes.c:213
+msgid "Footnotes could not be displayed"
+msgstr "Fußnoten können nicht angezeigt werden"
+
+#: info/footnotes.c:239
+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:172
+msgid "Look up a string in the index for this file"
+msgstr "Eine Zeichenkette im Index dieser Datei suchen"
+
+#: info/indices.c:199
+msgid "Finding index entries..."
+msgstr "Index-Einträge werden gesucht..."
+
+#: info/indices.c:207
+msgid "No indices found."
+msgstr "Keine Indizes gefunden."
+
+#: info/indices.c:217
+msgid "Index entry: "
+msgstr "Index-Eintrag: "
+
+#: info/indices.c:325
+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:335
+msgid "No previous index search string."
+msgstr "Keine vorherige zu suchende Index-Zeichenkette."
+
+#: info/indices.c:342
+msgid "No index entries."
+msgstr "Keine Index-Einträge."
+
+# checkit
+# kann im Deutschen nachgebildet werden, aber... -ke-
+#: info/indices.c:375
+#, c-format
+msgid "No %sindex entries containing `%s'."
+msgstr "Keine %sindex-Einträge enthalten „%s“."
+
+#: info/indices.c:376
+msgid "more "
+msgstr "weiteren "
+
+#: info/indices.c:386
+msgid "CAN'T SEE THIS"
+msgstr "DIES IST NICHT ZU SEHEN"
+
+#: info/indices.c:422
+#, 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:541
+#, c-format
+msgid "Scanning indices of `%s'..."
+msgstr "Indizes von „%s“ werden durchsucht..."
+
+#: info/indices.c:596
+#, 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:622
+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:626
+msgid "Index apropos: "
+msgstr "Index-Apropos: "
+
+#: info/indices.c:654
+#, 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"
+
+# Hier de-Standard-Formulierung einsetzen!
+#: info/info.c:295 makeinfo/makeinfo.c:766 util/install-info.c:1266
+#: util/texindex.c:343
+#, c-format
+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 ""
+"Es gibt KEINERLEI Garantie. Sie können diese Software unter den\n"
+"Bedingungen der GNU General Public License weiterverteilen.\n"
+"Für weiterführende Informationen zu diesen Fragen\n"
+"konsultieren Sie bitte die Datei namens COPYING.\n"
+
+#: info/info.c:498
+#, c-format
+msgid "no index entries found for `%s'\n"
+msgstr "Keine Indexeinträge für „%s“ gefunden\n"
+
+#: info/info.c:590
+msgid " -b, --speech-friendly be friendly to speech synthesizers.\n"
+msgstr " -b, --speech-friendly zu Sprachsynthesizern freundlich sein.\n"
+
+# Die "." am Zeilenende habe ich entfernt. -ke-
+#: info/info.c:597
+#, c-format
+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 -f ./foo.info show file ./foo.info, not searching dir\n"
+msgstr ""
+"Aufruf: %s [OPTION]... [INFO-DATEI [MENU-EINTRAG...]]\n"
+"\n"
+"Zum Lesen von Dokumentation, die im Info-Format vorliegt.\n"
+"\n"
+"Optionen:\n"
+" --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\n"
+" -h, --help diese Hilfe anzeigen\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\n"
+" -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\n"
+" zum Knoten mit den Optionen für den "
+"Befehlsaufruf\n"
+" gehen\n"
+"%s --subnodes Menüeinträge rekursiv ausgeben\n"
+" -w, --where, --location physischen Ort des Info-Datei anzeigen\n"
+" --vi-keys Tastenbindungen ähnlich zu vi und less benutzen\n"
+" --version Programmversion anzeigen\n"
+"\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.\n"
+"\n"
+"Beispiele:\n"
+" info das oberste „dir“-Menü 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 -f ./foo.info datei ./foo.info anzeigen\n"
+
+#: info/info.c:635 info/infokey.c:918 makeinfo/makeinfo.c:465
+#: util/install-info.c:466 util/texindex.c:292
+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:669
+#, c-format
+msgid "Cannot find node `%s'."
+msgstr "Knoten „%s“ nicht gefunden."
+
+#: info/info.c:670
+#, c-format
+msgid "Cannot find node `(%s)%s'."
+msgstr "Knoten „(%s)%s“ nicht gefunden."
+
+#: info/info.c:671
+msgid "Cannot find a window!"
+msgstr "Kein Fenster gefunden!"
+
+#: info/info.c:672
+msgid "Point doesn't appear within this window's node!"
+msgstr "Momentane Position erscheint nicht in dem Knoten dieses Fensters!"
+
+#: info/info.c:673
+msgid "Cannot delete the last window."
+msgstr "Kann das letzte Fenster nicht löschen!"
+
+#: info/info.c:674
+msgid "No menu in this node."
+msgstr "Kein Menü in diesem Knoten."
+
+#: info/info.c:675
+msgid "No footnotes in this node."
+msgstr "Keine Fußnoten in diesem Knoten."
+
+#: info/info.c:676
+msgid "No cross references in this node."
+msgstr "Keine Querverweise in diesem Knoten."
+
+#: info/info.c:677
+#, c-format
+msgid "No `%s' pointer for this node."
+msgstr "Kein „%s“-Verweis für diesem Knoten."
+
+#: info/info.c:678
+#, c-format
+msgid "Unknown Info command `%c'; try `?' for help."
+msgstr "Unbekannter Info-Befehl „%c“. „?“ eingeben, um Hilfe zu bekommen."
+
+#: info/info.c:679
+#, 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:680
+msgid "You are already at the last page of this node."
+msgstr "Sie sind bereits auf der letzten Seite dieses Knotens."
+
+#: info/info.c:681
+msgid "You are already at the first page of this node."
+msgstr "Sie sind bereits auf der ersten Seite dieses Knotens."
+
+#: info/info.c:682
+msgid "Only one window."
+msgstr "Nur ein Fenster."
+
+#: info/info.c:683
+msgid "Resulting window would be too small."
+msgstr "Das entstehende Fenster wäre zu klein."
+
+#: info/info.c:684
+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:46 info/infodoc.c:95
+msgid ""
+"Basic Commands in Info Windows\n"
+"******************************\n"
+msgstr ""
+"Grundbefehle in Info-Fenstern\n"
+"*****************************\n"
+
+#: info/infodoc.c:49
+msgid "\\%-10[quit-help] Quit this help.\n"
+msgstr "\\%-10[quit-help] Diese Hilfe verlassen. \n"
+
+#: info/infodoc.c:50
+msgid "\\%-10[quit] Quit Info altogether.\n"
+msgstr "\\%-10[quit] Info gänzlich beenden.\n"
+
+#: info/infodoc.c:51
+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:53 info/infodoc.c:102
+msgid ""
+"Selecting other nodes:\n"
+"----------------------\n"
+msgstr ""
+"Andere Knoten wählen:\n"
+"---------------------\n"
+
+#: info/infodoc.c:55
+msgid "\\%-10[next-node] Move to the \"next\" node of this node.\n"
+msgstr ""
+"\\%-10[next-node] Zum nächsten Knoten („next“) dieses Knotens gehen.\n"
+
+#: info/infodoc.c:56
+msgid "\\%-10[prev-node] Move to the \"previous\" node of this node.\n"
+msgstr ""
+"\\%-10[prev-node] Zum vorherigen Knoten („prev“) dieses Knotens gehen.\n"
+
+#: info/infodoc.c:57
+msgid "\\%-10[up-node] Move \"up\" from this node.\n"
+msgstr "\\%-10[up-node] Von diesem Knoten aus aufwärts („up“) gehen.\n"
+
+#: info/infodoc.c:58
+msgid ""
+"\\%-10[menu-item] Pick menu item specified by name.\n"
+" Picking a menu item causes another node to be selected.\n"
+msgstr ""
+"\\%-10[menu-item] Einen Menüeintrag nach dem Namen auswählen.\n"
+" Auswahl eines Menüeintrags führt zu Auswahl eines anderen\n"
+" Knotens.\n"
+
+#: info/infodoc.c:60
+msgid ""
+"\\%-10[xref-item] Follow a cross reference. Reads name of reference.\n"
+msgstr ""
+"\\%-10[xref-item] Einem Querverweis folgen. Liest den Namen des Verweises.\n"
+
+#: info/infodoc.c:61
+msgid "\\%-10[history-node] Move to the last node seen in this window.\n"
+msgstr ""
+"\\%-10[history-node] Zum letzten in diesem Fenster schon besuchten Knoten "
+"gehen.\n"
+
+#: info/infodoc.c:62
+msgid ""
+"\\%-10[move-to-next-xref] Skip to next hypertext link within this node.\n"
+msgstr ""
+"\\%-10[move-to-next-xref] Zur nächsten Verknüpfung auf dieser Seite "
+"springen.\n"
+
+#: info/infodoc.c:63
+msgid ""
+"\\%-10[move-to-prev-xref] Skip to previous hypertext link within this "
+"node.\n"
+msgstr ""
+"\\%-10[move-to-prev-xref] Zur vorigen Verknüpfung auf dieser Seite "
+"springen.\n"
+
+#: info/infodoc.c:64
+msgid ""
+"\\%-10[select-reference-this-line] Follow the hypertext link under cursor.\n"
+msgstr ""
+"\\%-10[select-reference-this-line] Der Verknüpfung unter dem Cursor "
+"folgen.\n"
+
+#: info/infodoc.c:65
+msgid ""
+"\\%-10[dir-node] Move to the `directory' node. Equivalent to `\\[goto-"
+"node] (DIR)'.\n"
+msgstr ""
+"\\%-10[dir-node] Zum „directory“-Knoten springen. Das gleiche wie „\\[goto-"
+"node] (DIR)“.\n"
+
+#: info/infodoc.c:66
+msgid ""
+"\\%-10[top-node] Move to the Top node. Equivalent to `\\[goto-node] Top'.\n"
+msgstr ""
+"\\%-10[top-node] Zum obersten Knoten springen. Das gleiche wie „\\[goto-"
+"node] Top“.\n"
+
+#: info/infodoc.c:68 info/infodoc.c:116
+msgid ""
+"Moving within a node:\n"
+"---------------------\n"
+msgstr ""
+"Bewegung innerhalb eines Knotens:\n"
+"---------------------------------\n"
+
+#: info/infodoc.c:70
+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:71
+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:72
+msgid "\\%-10[next-line] Scroll forward 1 line.\n"
+msgstr "\\%-10[next-line] Eine Zeile vorblättern.\n"
+
+#: info/infodoc.c:73
+msgid "\\%-10[prev-line] Scroll backward 1 line.\n"
+msgstr "\\%-10[prev-line] Eine Zeile zurückblättern.\n"
+
+#: info/infodoc.c:74
+msgid "\\%-10[scroll-forward] Scroll forward a page.\n"
+msgstr "\\%-10[scroll-forward] Eine Seite vorblättern.\n"
+
+#: info/infodoc.c:75
+msgid "\\%-10[scroll-backward] Scroll backward a page.\n"
+msgstr "\\%-10[scroll-backward] Eine Seite zurückblättern.\n"
+
+#: info/infodoc.c:77 info/infodoc.c:125
+msgid ""
+"Other commands:\n"
+"---------------\n"
+msgstr ""
+"Weitere Befehle:\n"
+"----------------\n"
+
+#: info/infodoc.c:79
+msgid "\\%-10[menu-digit] Pick first ... ninth item in node's menu.\n"
+msgstr ""
+"\\%-10[menu-digit] Ersten ... neunten Eintrag aus dem Menü des Knotens "
+"wählen.\n"
+
+#: info/infodoc.c:80
+msgid "\\%-10[last-menu-item] Pick last item in node's menu.\n"
+msgstr ""
+"\\%-10[last-menu-item] Letzten Eintrag aus dem Menü des Knotens wählen.\n"
+
+#: info/infodoc.c:81
+msgid ""
+"\\%-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"
+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:83
+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] Knoten nach Namen auswählen und dorthin springen. Ein\n"
+" Dateiname kann mit angegeben werden, also (DATEI)KNOTENNAME.\n"
+
+#: info/infodoc.c:85
+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] Angegebene Zeichenkette in Vorwärtsrichtung suchen und den\n"
+" Knoten wählen, in dem der nächste Eintrag gefunden wurde.\n"
+
+#: info/infodoc.c:87
+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] Angegebene Zeichenkette in Rückwärtsrichtung "
+"suchen\n"
+" und den Knoten wählen, in dem der nächste Eintrag gefunden\n"
+" wurde.\n"
+
+#: info/infodoc.c:98
+#, c-format
+msgid " %-10s Quit this help.\n"
+msgstr " %-10s Diese Hilfe verlassen.\n"
+
+#: info/infodoc.c:99
+#, c-format
+msgid " %-10s Quit Info altogether.\n"
+msgstr " %-10s Info gänzlich beenden.\n"
+
+#: info/infodoc.c:100
+#, c-format
+msgid " %-10s Invoke the Info tutorial.\n"
+msgstr " %-10s Das Info-Tutorial aufrufen.\n"
+
+#: info/infodoc.c:104
+#, 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:105
+#, 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:106
+#, c-format
+msgid " %-10s Move `up' from this node.\n"
+msgstr " %-10s Von diesem Knoten aus aufwärts („up“) gehen.\n"
+
+#: info/infodoc.c:107
+#, c-format
+msgid " %-10s Pick menu item specified by name.\n"
+msgstr " %-10s Einen Menüeintrag nach dem Namen auswählen.\n"
+
+#: info/infodoc.c:108
+msgid " Picking a menu item causes another node to be selected.\n"
+msgstr ""
+" Auswahl eines Menüeintrags führt zu Auswahl eines anderen\n"
+" Knotens.\n"
+
+#: info/infodoc.c:109
+#, 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:110
+#, 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:111
+#, 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:112
+#, c-format
+msgid " %-10s Follow the hypertext link under cursor.\n"
+msgstr " %-10s Der Verknüpfung unter dem Cursor folgen.\n"
+
+#: info/infodoc.c:113
+#, 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:114
+#, 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:118
+#, c-format
+msgid " %-10s Scroll forward a page.\n"
+msgstr " %-10s Eine Seite vorblättern.\n"
+
+#: info/infodoc.c:119
+#, c-format
+msgid " %-10s Scroll backward a page.\n"
+msgstr " %-10s Eine Seite zurückblättern.\n"
+
+#: info/infodoc.c:120
+#, c-format
+msgid " %-10s Go to the beginning of this node.\n"
+msgstr " %-10s Zum Anfang dieses Knotens gehen.\n"
+
+#: info/infodoc.c:121
+#, c-format
+msgid " %-10s Go to the end of this node.\n"
+msgstr " %-10s Zum Ende dieses Knotens gehen.\n"
+
+#: info/infodoc.c:122
+#, c-format
+msgid " %-10s Scroll forward 1 line.\n"
+msgstr " %-10s Eine Zeile vorblättern.\n"
+
+#: info/infodoc.c:123
+#, c-format
+msgid " %-10s Scroll backward 1 line.\n"
+msgstr " %-10s Eine Zeile zurückblättern.\n"
+
+#: info/infodoc.c:127
+#, 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:128
+#, 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:129
+#, c-format
+msgid ""
+" %-10s Search for a specified string in the index entries of this Info\n"
+msgstr ""
+" %-10s Eine Zeichenkette in den Indexeinträgen dieser Info-Datei suchen\n"
+
+#: info/infodoc.c:130
+msgid ""
+" file, and select the node referenced by the first entry "
+"found.\n"
+msgstr ""
+" und zu dem Knoten springen, auf den der erste gefundene\n"
+" Eintrag verweist.\n"
+
+#: info/infodoc.c:131
+#, c-format
+msgid " %-10s Move to node specified by name.\n"
+msgstr " %-10s Knoten nach Namen auswählen und dorthin springen. Ein\n"
+
+#: info/infodoc.c:132
+msgid ""
+" You may include a filename as well, as in (FILENAME)NODENAME.\n"
+msgstr ""
+" Dateiname kann mit angegeben werden, also (DATEI)KNOTENNAME.\n"
+
+#: info/infodoc.c:133
+#, c-format
+msgid " %-10s Search forward for a specified string,\n"
+msgstr ""
+" %-10s Angegebene Zeichenkette in Vorwärtsrichtung suchen und den Knoten\n"
+
+#: info/infodoc.c:134 info/infodoc.c:136
+msgid ""
+" and select the node in which the next occurrence is found.\n"
+msgstr " wählen, in dem der nächste Eintrag gefunden wurde.\n"
+
+#: info/infodoc.c:135
+#, c-format
+msgid " %-10s Search backward for a specified string\n"
+msgstr " %-10s Angegebene Zeichenkette in Rückwärtsrichtung suchen\n"
+
+#: info/infodoc.c:316
+msgid "The current search path is:\n"
+msgstr "Der momentane Suchpfad ist:\n"
+
+#: info/infodoc.c:320
+msgid ""
+"Commands available in Info windows:\n"
+"\n"
+msgstr ""
+"Befehle, die in Info-Fenstern verfügbar sind:\n"
+"\n"
+
+#: info/infodoc.c:324
+msgid ""
+"Commands available in the echo area:\n"
+"\n"
+msgstr ""
+"Befehle, die im Echo-Bereich verfügbar sind:\n"
+"\n"
+
+#: info/infodoc.c:347
+#, 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:351
+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:375
+msgid "--- Use `\\[history-node]' or `\\[kill-node]' to exit ---\n"
+msgstr ""
+"--- „\\[history-node]“ oder „\\[kill-node]“ benutzen, um zu beenden ---\n"
+
+#: info/infodoc.c:485
+msgid "Display help message"
+msgstr "Diesen Hilfe-Text anzeigen"
+
+#: info/infodoc.c:503
+msgid "Visit Info node `(info)Help'"
+msgstr "Info-Knoten „(info)Help“ besuchen"
+
+#: info/infodoc.c:641
+msgid "Print documentation for KEY"
+msgstr "Dokumentation für KEY ausgeben"
+
+#: info/infodoc.c:653
+#, c-format
+msgid "Describe key: %s"
+msgstr "Beschreibe Taste: %s"
+
+#: info/infodoc.c:664
+#, c-format
+msgid "ESC %s is undefined."
+msgstr "ESC %s ist nicht definiert."
+
+#: info/infodoc.c:680 info/infodoc.c:709
+#, c-format
+msgid "%s is undefined."
+msgstr "%s ist nicht definiert."
+
+#: info/infodoc.c:730
+#, c-format
+msgid "%s is defined to %s."
+msgstr "%s ist definiert als %s."
+
+#: info/infodoc.c:1153
+msgid "Show what to type to execute a given command"
+msgstr "Anzeigen, was einzugeben ist, um einen gegebenen Befehl auszuführen"
+
+#: info/infodoc.c:1157
+msgid "Where is command: "
+msgstr "Wo ist der Befehl: "
+
+#: info/infodoc.c:1179
+#, c-format
+msgid "`%s' is not on any keys"
+msgstr "Keine Taste mit „%s“ belegt"
+
+#: info/infodoc.c:1186
+#, c-format
+msgid "%s can only be invoked via %s."
+msgstr "%s kann nur durch %s aufgerufen werden."
+
+#: info/infodoc.c:1190
+#, c-format
+msgid "%s can be invoked via %s."
+msgstr "%s kann durch %s aufgerufen werden."
+
+#: info/infodoc.c:1195
+#, c-format
+msgid "There is no function named `%s'"
+msgstr "Es gibt keine Funktion mit Namen „%s“"
+
+# Hier de-Standard-Formulierung einsetzen!
+#: info/infokey.c:145
+#, c-format
+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"
+"Es gibt KEINERLEI Garantie. Sie können diese Software unter den\n"
+"Bedingungen der GNU General Public License weiterverteilen.\n"
+"Für weiterführende Informationen zu diesen Fragen\n"
+"konsultieren Sie bitte die Datei namens COPYING.\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 ""
+"Auruf: %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:1500
+#, 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:1503
+#, 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:1516
+#, c-format
+msgid "Error reading infokey file `%s' - short read"
+msgstr "Fehler beim Lesen der Infokey-Datei „%s“ - zu kurzes Lesen"
+
+#: info/infomap.c:1535
+#, 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:1544
+#, 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:1560
+#, 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:1581
+#, 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:1716
+msgid "Bad data in infokey file -- some key bindings ignored"
+msgstr ""
+"Fehlerhafte Daten in Infokey-Datei -- einige Tastaturbindungen ignoriert"
+
+#: info/infomap.c:1766
+msgid "Bad data in infokey file -- some var settings ignored"
+msgstr ""
+"Fehlerhafte Daten in Infokey-Datei -- einige Variableneinstellungen ignoriert"
+
+#: info/m-x.c:69
+msgid "Read the name of an Info command and describe it"
+msgstr "Namen eines Info-Befehls lesen und beschreiben"
+
+#: info/m-x.c:73
+msgid "Describe command: "
+msgstr "Beschreibe den Befehl: "
+
+#: info/m-x.c:96
+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:140
+msgid "Cannot execute an `echo-area' command here."
+msgstr "Befehl für Echo-Bereich hier nicht ausführbar."
+
+#: info/m-x.c:154
+#, c-format
+msgid "Undefined command: %s"
+msgstr "Undefinierter Befehl: %s"
+
+#: info/m-x.c:160
+msgid "Set the height of the displayed window"
+msgstr "Höhe des angezeigten Fensters setzen"
+
+#: info/m-x.c:173
+#, c-format
+msgid "Set screen height to (%d): "
+msgstr "Setze Bildschirm-Höhe auf (%d): "
+
+#: info/makedoc.c:162 info/makedoc.c:170
+#, 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:550
+#, c-format
+msgid "Couldn't manipulate the file %s.\n"
+msgstr "Datei „%s“ ist nicht veränderbar.\n"
+
+#: info/nodemenu.c:31
+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:202
+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:224
+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:304
+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:317
+msgid "Select visited node: "
+msgstr "Wähle besuchten Knoten aus: "
+
+#: info/nodemenu.c:337 info/session.c:2264
+#, c-format
+msgid "The reference disappeared! (%s)."
+msgstr "Der Verweis ist verschwunden! (%s)."
+
+#: info/session.c:162
+#, 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:620
+msgid "Move down to the next line"
+msgstr "Eine Zeile nach unten bewegen"
+
+#: info/session.c:635
+msgid "Move up to the previous line"
+msgstr "Eine Zeile nach oben bewegen"
+
+#: info/session.c:650
+msgid "Move to the end of the line"
+msgstr "Zum Ende dieser Zeile bewegen"
+
+#: info/session.c:670
+msgid "Move to the start of the line"
+msgstr "Zum Anfang der Zeile bewegen"
+
+#: info/session.c:860 makeinfo/node.c:1424
+msgid "Next"
+msgstr "nächstes"
+
+#: info/session.c:863
+msgid "Following Next node..."
+msgstr "Folge „nächsten“ (Next) Knoten..."
+
+#: info/session.c:881
+msgid "Selecting first menu item..."
+msgstr "Wähle ersten Menüeintrag aus..."
+
+#: info/session.c:893
+msgid "Selecting Next node..."
+msgstr "Wähle „nächsten“ (Next) Knoten aus..."
+
+#: info/session.c:964
+#, c-format
+msgid "Moving Up %d time(s), then Next."
+msgstr "Bewege %d mal „aufwärts“ (Up), dann „nächstes“ (Next)."
+
+#: info/session.c:988
+msgid "No more nodes within this document."
+msgstr "Keine weiteren Knoten in diesem Dokument."
+
+#: info/session.c:1011
+msgid "No `Prev' for this node."
+msgstr "Kein „voriges“ (Prev) für diesem Knoten."
+
+#: info/session.c:1014 info/session.c:1073
+msgid "Moving Prev in this window."
+msgstr "Adjustiere „vorigen“ Knoten (Prev) in diesem Fenster."
+
+#: info/session.c:1030
+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:1034
+msgid "Moving Up in this window."
+msgstr "Adjustiere „aufwärts“ (Up) in diesem Fenster."
+
+#: info/session.c:1084
+msgid "Moving to `Prev's last menu item."
+msgstr "Bewege zum letzten Menüeintrag von „voriges“ (Prev)."
+
+#: info/session.c:1095
+msgid "Move forwards or down through node structure"
+msgstr "Vorwärts oder abwärts durch die Knotenstruktur bewegen"
+
+#: info/session.c:1111
+msgid "Move backwards or up through node structure"
+msgstr "Zurück oder aufwärts durch die Knotenstruktur bewegen"
+
+#: info/session.c:1205
+msgid "Scroll forward in this window"
+msgstr "In diesem Fenster vorwärts blättern"
+
+#: info/session.c:1213
+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:1221
+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:1229
+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:1237
+msgid "Scroll backward in this window"
+msgstr "In diesem Fenster zurückblättern"
+
+#: info/session.c:1245
+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:1254
+msgid "Scroll backward in this window staying within node"
+msgstr "In diesem Fenster zurückblättern ohne den Knoten zu verlassen"
+
+#: info/session.c:1262
+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:1270
+msgid "Move to the start of this node"
+msgstr "Zum Anfang dieses Knotens bewegen"
+
+#: info/session.c:1277
+msgid "Move to the end of this node"
+msgstr "Zum Ende dieses Knotens bewegen"
+
+#: info/session.c:1284
+msgid "Scroll down by lines"
+msgstr "Zeilenweise vorblättern"
+
+#: info/session.c:1301
+msgid "Scroll up by lines"
+msgstr "Zeilenweise zurück blättern"
+
+#: info/session.c:1319
+msgid "Scroll down by half screen size"
+msgstr "Einen halben Bildschirm vorblättern"
+
+#: info/session.c:1345
+msgid "Scroll up by half screen size"
+msgstr "Einen halben Bildschirm zurückblättern"
+
+#: info/session.c:1374
+msgid "Select the next window"
+msgstr "Das nächste Fenster auswählen"
+
+#: info/session.c:1413
+msgid "Select the previous window"
+msgstr "Das vorige Fenster auswählen"
+
+#: info/session.c:1464
+msgid "Split the current window"
+msgstr "Aktuelles Fenster unterteilen"
+
+#: info/session.c:1545
+msgid "Delete the current window"
+msgstr "Aktuelles Fenster löschen"
+
+#: info/session.c:1553
+msgid "Cannot delete a permanent window"
+msgstr "Ein permanentes Fenster kann nicht gelöscht werden"
+
+#: info/session.c:1585
+msgid "Delete all other windows"
+msgstr "Alle anderen Fenster löschen"
+
+#: info/session.c:1631
+msgid "Scroll the other window"
+msgstr "Im anderen Fenster vorblättern"
+
+#: info/session.c:1652
+msgid "Scroll the other window backward"
+msgstr "Im anderen Fenster zurück blättern"
+
+#: info/session.c:1658
+msgid "Grow (or shrink) this window"
+msgstr "Aktuelles Fenster vergrößern (oder verkleinern)"
+
+#: info/session.c:1669
+msgid "Divide the available screen space among the visible windows"
+msgstr ""
+"Den vorhandenen Bildschirmplatz unter allen sichtbaren Fenstern aufteilen"
+
+#: info/session.c:1676
+msgid "Toggle the state of line wrapping in the current window"
+msgstr "Den Status des Zeilenumbruchs im aktuellen Fenster umschalten"
+
+#: info/session.c:1848
+msgid "Select the Next node"
+msgstr "Den „nächsten“ Knoten (Next) auswählen"
+
+#: info/session.c:1856
+msgid "Select the Prev node"
+msgstr "Den „vorigen“ Knoten (Prev) auswählen"
+
+#: info/session.c:1864
+msgid "Select the Up node"
+msgstr "Den übergeordneten Knoten auswählen („aufwärts“, Up)"
+
+#: info/session.c:1871
+msgid "Select the last node in this file"
+msgstr "Den letzten Knoten dieser Datei auswählen"
+
+#: info/session.c:1898 info/session.c:1931
+msgid "This window has no additional nodes"
+msgstr "Dieses Fenster hat keine weiteren Knoten"
+
+#: info/session.c:1904
+msgid "Select the first node in this file"
+msgstr "Den ersten Knoten dieser Datei auswählen"
+
+#: info/session.c:1938
+msgid "Select the last item in this node's menu"
+msgstr "Den letzten Menüeintrag dieses Knotens auswählen"
+
+#: info/session.c:1944
+msgid "Select this menu item"
+msgstr "Diesen Menüeintrag auswählen"
+
+#: info/session.c:1977
+#, c-format
+msgid "There aren't %d items in this menu."
+msgstr "Es sind keine %d Einträge in diesem Menü."
+
+#: info/session.c:2171 info/session.c:2172
+#, c-format
+msgid "Menu item (%s): "
+msgstr "Menüeintrag (%s): "
+
+#: info/session.c:2175
+msgid "Menu item: "
+msgstr "Menüeintrag: "
+
+#: info/session.c:2182 info/session.c:2183
+#, c-format
+msgid "Follow xref (%s): "
+msgstr "Folge xref (%s): "
+
+#: info/session.c:2186
+msgid "Follow xref: "
+msgstr "Folge xref: "
+
+#: info/session.c:2315
+msgid "Read a menu item and select its node"
+msgstr "Einen Menüeintrag lesen und seinen Knoten auswählen"
+
+#: info/session.c:2323
+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:2329
+msgid "Move to the start of this node's menu"
+msgstr "Zum Anfang des Menüs dieses Knotens bewegen"
+
+#: info/session.c:2353
+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:2381
+msgid "Read a node name and select it"
+msgstr "Den Namen eines Knotens lesen und diesen auswählen"
+
+#: info/session.c:2436 info/session.c:2441
+msgid "Goto node: "
+msgstr "Gehe zu Knoten: "
+
+#: info/session.c:2505
+#, c-format
+msgid "No menu in node `%s'."
+msgstr "Kein Menü im Knoten „%s“."
+
+#: info/session.c:2551
+#, c-format
+msgid "No menu item `%s' in node `%s'."
+msgstr "Kein Menüeintrag „%s“ im Knoten „%s“."
+
+#: info/session.c:2581
+#, 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:2631
+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:2633
+msgid "Follow menus: "
+msgstr "Folge Menüs: "
+
+#: info/session.c:2826
+msgid "Find the node describing program invocation"
+msgstr "Den Knoten finden, der den Programmaufruf beschreibt"
+
+#: info/session.c:2828
+#, c-format
+msgid "Find Invocation node of [%s]: "
+msgstr "Finde den Programmaufruf-Knoten von [%s]: "
+
+#: info/session.c:2866
+msgid "Read a manpage reference and select it"
+msgstr "Einen Verweis auf eine Manpage lesen und diese auswählen"
+
+#: info/session.c:2870
+msgid "Get Manpage: "
+msgstr "Hole Manpage: "
+
+#: info/session.c:2900
+msgid "Select the node `Top' in this file"
+msgstr "Den Knoten „Top“ dieser Datei auswählen"
+
+#: info/session.c:2906
+msgid "Select the node `(dir)'"
+msgstr "Den Knoten „(dir)“ auswählen"
+
+#: info/session.c:2923 info/session.c:2925
+#, c-format
+msgid "Kill node (%s): "
+msgstr "Lösche Information über Knoten (%s): "
+
+#: info/session.c:2977
+#, c-format
+msgid "Cannot kill node `%s'"
+msgstr "Kann Information über Knoten „%s“ nicht löschen"
+
+#: info/session.c:2987
+msgid "Cannot kill the last node"
+msgstr "Information über den letzten Knoten kann nicht gelöscht werden"
+
+#: info/session.c:3073
+msgid "Select the most recently selected node"
+msgstr "Den zuletzt gewählten Knoten auswählen"
+
+#: info/session.c:3079
+msgid "Kill this node"
+msgstr "Information über diesen Knoten löschen"
+
+#: info/session.c:3087
+msgid "Read the name of a file and select it"
+msgstr "Den Namen einer Datei lesen und diese auswählen"
+
+#: info/session.c:3091
+msgid "Find file: "
+msgstr "Finde Datei: "
+
+#: info/session.c:3108
+#, c-format
+msgid "Cannot find `%s'."
+msgstr "Kann „%s“ nicht finden."
+
+#: info/session.c:3151 info/session.c:3269
+#, c-format
+msgid "Could not create output file `%s'."
+msgstr "Ausgabe-Datei „%s“ kann nicht angelegt werden."
+
+#: info/session.c:3165 info/session.c:3287 info/session.c:3347
+msgid "Done."
+msgstr "Fertig."
+
+#: info/session.c:3220
+#, c-format
+msgid "Writing node %s..."
+msgstr "Knoten „%s“ wird geschrieben..."
+
+#: info/session.c:3296
+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:3331
+#, c-format
+msgid "Cannot open pipe to `%s'."
+msgstr "Kann Daten nicht nach „%s“ weiterreichen (mittels einer Pipe)."
+
+#: info/session.c:3337
+#, c-format
+msgid "Printing node %s..."
+msgstr "Knoten „%s“ wird gedruckt..."
+
+#: info/session.c:3567
+#, c-format
+msgid "Searching subfile %s ..."
+msgstr "Unterdatei „%s“ wird durchsucht..."
+
+#: info/session.c:3619
+msgid "Read a string and search for it case-sensitively"
+msgstr ""
+"Eine Zeichenkette einlesen und danach gemäß Groß-/Kleinschreibung suchen"
+
+#: info/session.c:3626
+msgid "Read a string and search for it"
+msgstr "Eine Zeichenkette einlesen und danach suchen"
+
+#: info/session.c:3634
+msgid "Read a string and search backward for it"
+msgstr "Eine Zeichenkette einlesen und danach in Rückwärtsrichtung suchen"
+
+#: info/session.c:3670 info/session.c:3677
+#, c-format
+msgid "%s%sfor string [%s]: "
+msgstr "%s%snach Zeichenkette [%s]: "
+
+#: info/session.c:3671 info/session.c:3678
+msgid "Search backward"
+msgstr "Suche in Rückwärtsrichtung "
+
+#: info/session.c:3672 info/session.c:3678
+msgid "Search"
+msgstr "Suche"
+
+#: info/session.c:3673 info/session.c:3679
+msgid " case-sensitively "
+msgstr " gemäß Groß-/Kleinschreibung "
+
+#: info/session.c:3674 info/session.c:3679
+msgid " "
+msgstr " "
+
+#: info/session.c:3718
+msgid "Search failed."
+msgstr "Suche fehlgeschlagen."
+
+#: info/session.c:3736
+msgid "Repeat last search in the same direction"
+msgstr "Letzte Suche in der gleichen Richtung wiederholen"
+
+#: info/session.c:3739 info/session.c:3749
+msgid "No previous search string"
+msgstr "Keine vorherige Such-Zeichenkette."
+
+#: info/session.c:3746
+msgid "Repeat last search in the reverse direction"
+msgstr "Letzte Suche in der entgegengesetzten Richtung wiederholen"
+
+#: info/session.c:3765 info/session.c:3771
+msgid "Search interactively for a string as you type it"
+msgstr "Interaktiv eine Zeichenkette während der Eingabe suchen"
+
+#: info/session.c:3851
+msgid "I-search backward: "
+msgstr "Interactive Suche in Rückwärtsrichtung: "
+
+#: info/session.c:3853
+msgid "I-search: "
+msgstr "Interaktive Suche: "
+
+# checkit
+#: info/session.c:3878 info/session.c:3880
+msgid "Failing "
+msgstr "Fehlgeschlagen "
+
+#: info/session.c:4340
+msgid "Move to the previous cross reference"
+msgstr "Zum vorigen Querverweis bewegen"
+
+#: info/session.c:4349
+msgid "Move to the next cross reference"
+msgstr "Zum nächsten Querverweis bewegen"
+
+#: info/session.c:4359
+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:4382
+msgid "Cancel current operation"
+msgstr "Momentane Operation abbrechen"
+
+#: info/session.c:4389
+msgid "Quit"
+msgstr "Beenden"
+
+#: info/session.c:4398
+msgid "Move the cursor to a specific line of the window"
+msgstr "Den Cursor zu einer bestimmten Zeile des Fensters bewegen"
+
+#: info/session.c:4430
+msgid "Redraw the display"
+msgstr "Anzeige erneut darstellen"
+
+#: info/session.c:4467
+msgid "Quit using Info"
+msgstr "Info beenden"
+
+#: info/session.c:4480
+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:4491
+#, c-format
+msgid "Unknown command (%s)."
+msgstr "Unbekannter Befehl (%s)."
+
+#: info/session.c:4494
+#, c-format
+msgid "\"%s\" is invalid"
+msgstr "„%s“ ist ungültig"
+
+#: info/session.c:4495
+#, c-format
+msgid "`%s' is invalid"
+msgstr "„%s“ ist ungültig"
+
+#: info/session.c:4709
+msgid "Add this digit to the current numeric argument"
+msgstr "Diese Zahl dem aktuellen numerischen Argument hinzufügen"
+
+#: info/session.c:4718
+msgid "Start (or multiply by 4) the current numeric argument"
+msgstr "Beginne (oder multipliziere mit 4) das aktuelle numerische Argument"
+
+#: info/session.c:4733
+msgid "Internally used by \\[universal-argument]"
+msgstr "Intern verwendet von \\[universal-argument]"
+
+#: info/tilde.c:338
+#, 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:64
+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:68
+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:74
+msgid "Explain the use of a variable"
+msgstr "Den Zweck einer Variablen erklären"
+
+#: info/variables.c:80
+msgid "Describe variable: "
+msgstr "Beschreibe Variable: "
+
+#: info/variables.c:99
+msgid "Set the value of an Info variable"
+msgstr "Den Wert einer Info-Variablen setzen"
+
+#: info/variables.c:105
+msgid "Set variable: "
+msgstr "Setze Variable: "
+
+#: info/variables.c:123
+#, c-format
+msgid "Set %s to value (%d): "
+msgstr "Setze %s auf den Wert (%d): "
+
+#: info/variables.c:164
+#, c-format
+msgid "Set %s to value (%s): "
+msgstr "Setze %s auf den Wert (%s): "
+
+#: info/window.c:1138
+msgid "--*** Tags out of Date ***"
+msgstr "--*** Tags veraltet ***"
+
+#: info/window.c:1149
+msgid "-----Info: (), lines ----, "
+msgstr "-----Info: (), Zeilen ----, "
+
+#: info/window.c:1156
+#, c-format
+msgid "-%s---Info: %s, %d lines --%s--"
+msgstr "-%s---Info: %s, %d Zeilen --%s--"
+
+#: info/window.c:1160
+#, c-format
+msgid "-%s%s-Info: (%s)%s, %d lines --%s--"
+msgstr "-%s%s-Info: (%s)%s, %d Zeilen --%s--"
+
+#: info/window.c:1167
+#, c-format
+msgid " Subfile: %s"
+msgstr " Unterdatei: %s"
+
+#: lib/getopt.c:551 lib/getopt.c:570
+#, c-format
+msgid "%s: option `%s' is ambiguous\n"
+msgstr "%s: Option „%s“ ist nicht eindeutig\n"
+
+#: lib/getopt.c:603 lib/getopt.c:607
+#, c-format
+msgid "%s: option `--%s' doesn't allow an argument\n"
+msgstr "%s: Option „--%s“ erlaubt kein Argument\n"
+
+#: lib/getopt.c:616 lib/getopt.c:621
+#, c-format
+msgid "%s: option `%c%s' doesn't allow an argument\n"
+msgstr "%s: Option „%c%s“ erlaubt kein Argument\n"
+
+#: lib/getopt.c:667 lib/getopt.c:689 lib/getopt.c:1020 lib/getopt.c:1042
+#, c-format
+msgid "%s: option `%s' requires an argument\n"
+msgstr "%s: Option „%s“ benötigt ein Argument\n"
+
+#: lib/getopt.c:727 lib/getopt.c:730
+#, c-format
+msgid "%s: unrecognized option `--%s'\n"
+msgstr "%s: nicht erkannte Option „--%s“\n"
+
+#: lib/getopt.c:738 lib/getopt.c:741
+#, c-format
+msgid "%s: unrecognized option `%c%s'\n"
+msgstr "%s: nicht erkannte Option „%c%s“\n"
+
+#: lib/getopt.c:796 lib/getopt.c:799
+#, c-format
+msgid "%s: illegal option -- %c\n"
+msgstr "%s: ungültige Option -- %c\n"
+
+#: lib/getopt.c:805 lib/getopt.c:808
+#, c-format
+msgid "%s: invalid option -- %c\n"
+msgstr "%s: ungültige Option -- %c\n"
+
+#: lib/getopt.c:863 lib/getopt.c:882 lib/getopt.c:1095 lib/getopt.c:1116
+#, c-format
+msgid "%s: option requires an argument -- %c\n"
+msgstr "%s: Option benötigt ein Argument -- %c\n"
+
+#: lib/getopt.c:935 lib/getopt.c:954
+#, c-format
+msgid "%s: option `-W %s' is ambiguous\n"
+msgstr "%s: Option „-W %s“ ist nicht eindeutig\n"
+
+#: lib/getopt.c:978 lib/getopt.c:999
+#, c-format
+msgid "%s: option `-W %s' doesn't allow an argument\n"
+msgstr "%s: Option „-W %s“ erlaubt kein Argument\n"
+
+#: makeinfo/cmds.c:520 makeinfo/cmds.c:542
+#, c-format
+msgid "arguments to @%s ignored"
+msgstr "Argumente zu @%s ignoriert"
+
+#: makeinfo/cmds.c:585
+msgid "January"
+msgstr "Januar"
+
+#: makeinfo/cmds.c:585
+msgid "February"
+msgstr "Februar"
+
+#: makeinfo/cmds.c:585
+msgid "March"
+msgstr "März"
+
+#: makeinfo/cmds.c:585
+msgid "April"
+msgstr "April"
+
+#: makeinfo/cmds.c:585
+msgid "May"
+msgstr "Mai"
+
+#: makeinfo/cmds.c:586
+msgid "June"
+msgstr "Juni"
+
+#: makeinfo/cmds.c:586
+msgid "July"
+msgstr "Juli"
+
+#: makeinfo/cmds.c:586
+msgid "August"
+msgstr "August"
+
+#: makeinfo/cmds.c:586
+msgid "September"
+msgstr "September"
+
+#: makeinfo/cmds.c:586
+msgid "October"
+msgstr "Oktober"
+
+#: makeinfo/cmds.c:587
+msgid "November"
+msgstr "November"
+
+#: makeinfo/cmds.c:587
+msgid "December"
+msgstr "Dezember"
+
+#: makeinfo/cmds.c:936
+#, c-format
+msgid "unlikely character %c in @var"
+msgstr "wahrscheinlich falsches Zeichen „%c“ in @var"
+
+#: makeinfo/cmds.c:979
+msgid "@sc argument all uppercase, thus no effect"
+msgstr "Argument von @sc besteht nur aus Großbuchstaben, somit keine Wirkung"
+
+#: makeinfo/cmds.c:1034
+#, c-format
+msgid "`{' expected, but saw `%c'"
+msgstr "„{“ erwartet, jedoch „%c“ bekommen"
+
+#: makeinfo/cmds.c:1074
+msgid "end of file inside verb block"
+msgstr "Dateiende innerhalb eines @verb-Blocks"
+
+#: makeinfo/cmds.c:1082
+#, c-format
+msgid "`}' expected, but saw `%c'"
+msgstr "„}“ erwartet, jedoch „%c“ bekommen"
+
+#: makeinfo/cmds.c:1112
+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:1305
+#, c-format
+msgid "%c%s is obsolete"
+msgstr "%c%s ist obsolet"
+
+#: makeinfo/cmds.c:1414
+#, c-format
+msgid "@sp requires a positive numeric argument, not `%s'"
+msgstr "@sp erfordert ein positives numerisches Argument, nicht „%s“"
+
+#: makeinfo/cmds.c:1763 makeinfo/cmds.c:1819 makeinfo/footnote.c:82
+#, c-format
+msgid "Bad argument to %c%s"
+msgstr "Fehlerhaftes Argument zu %c%s"
+
+#: makeinfo/cmds.c:1773 makeinfo/makeinfo.c:4142
+msgid "asis"
+msgstr "genau"
+
+#: makeinfo/cmds.c:1775 makeinfo/cmds.c:1805 makeinfo/makeinfo.c:4144
+msgid "none"
+msgstr "kein"
+
+#: makeinfo/cmds.c:1789
+#, c-format
+msgid "Bad argument to @%s"
+msgstr "Fehlerhafte Argumente zu @%s"
+
+#: makeinfo/cmds.c:1803
+msgid "insert"
+msgstr "Einfügen"
+
+#: makeinfo/defun.c:84
+msgid "Missing `}' in @def arg"
+msgstr "Fehlende „}“ bei @def Argument"
+
+#: makeinfo/defun.c:403
+msgid "Function"
+msgstr "Funktion"
+
+#: makeinfo/defun.c:406
+msgid "Macro"
+msgstr "Makro"
+
+# checkit
+#: makeinfo/defun.c:409
+msgid "Special Form"
+msgstr "Spezielle Form"
+
+#: makeinfo/defun.c:413
+msgid "Variable"
+msgstr "Variable"
+
+#: makeinfo/defun.c:416
+msgid "User Option"
+msgstr "Nutzeroption"
+
+# checkit
+# What does this mean? -ke-
+#: makeinfo/defun.c:420
+msgid "Instance Variable"
+msgstr "Instance Variable"
+
+#: makeinfo/defun.c:424
+msgid "Method"
+msgstr "Methode"
+
+#: makeinfo/defun.c:500 makeinfo/defun.c:505 makeinfo/defun.c:545
+#: makeinfo/defun.c:644 makeinfo/xml.c:2229
+msgid "of"
+msgstr "aus"
+
+#: makeinfo/defun.c:509 makeinfo/defun.c:513 makeinfo/defun.c:517
+#: makeinfo/defun.c:551 makeinfo/defun.c:650 makeinfo/xml.c:2234
+msgid "on"
+msgstr "ein"
+
+#: 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:435
+#, c-format
+msgid "%s: getwd: %s, %s\n"
+msgstr "%s: getwd: %s, %s\n"
+
+#: makeinfo/files.c:638
+#, c-format
+msgid "`%s' omitted before output filename"
+msgstr "„%s“ weggelassen vor Ausgabedateiname"
+
+#: makeinfo/files.c:646
+#, c-format
+msgid "`%s' omitted since writing to stdout"
+msgstr "„%s“ weggelassen, da in Standardausgabe geschrieben wird"
+
+#: makeinfo/files.c:694
+msgid "Output buffer not empty."
+msgstr "Ausgabepuffer nicht leer."
+
+#: makeinfo/footnote.c:150
+#, c-format
+msgid "`%c%s' needs an argument `{...}', not just `%s'"
+msgstr "„%c%s“ benötigt ein Argument „{...}“, nicht nur „%s“"
+
+#: makeinfo/footnote.c:165
+#, c-format
+msgid "No closing brace for footnote `%s'"
+msgstr "Keine schließende Klammer für Fußnote „%s“"
+
+#: makeinfo/footnote.c:198
+msgid "Footnote defined without parent node"
+msgstr "Fußnote außerhalb eines Elternknotens definiert"
+
+#: makeinfo/footnote.c:210
+msgid "Footnotes inside footnotes are not allowed"
+msgstr "Fußnoten innerhalb von Fußnoten sind nicht erlaubt"
+
+# HTML
+#: makeinfo/footnote.c:302 makeinfo/index.c:189
+msgid "Footnotes"
+msgstr "Fu&szlig;noten"
+
+#: makeinfo/html.c:87
+#, c-format
+msgid "%s: could not open --css-file: %s"
+msgstr "%s: Konnte CSS-Datei nicht öffnen: %s"
+
+#: makeinfo/html.c:172
+#, c-format
+msgid "%s:%d: --css-file ended in comment"
+msgstr "%s:%d: CSS-Datei endete inmitten eines Kommentars"
+
+#: makeinfo/html.c:207
+msgid "Untitled"
+msgstr "Ohne Titel"
+
+#: makeinfo/html.c:422
+msgid "[unexpected] no html tag to pop"
+msgstr "[unerwartet] kein HTML-Tag für Pop-Operation"
+
+#: makeinfo/html.c:752
+#, c-format
+msgid "[unexpected] invalid node name: `%s'"
+msgstr "[unerwartet] ungültiger Knotenname: „%s“"
+
+#: makeinfo/index.c:169
+#, c-format
+msgid "Unknown index `%s'"
+msgstr "Unbekannter Index „%s“"
+
+#: makeinfo/index.c:234
+#, c-format
+msgid "Info cannot handle `:' in index entry `%s'"
+msgstr "Info kann nicht mit „:“ im Indexeintrag „%s“ umgehen"
+
+#: makeinfo/index.c:412
+#, c-format
+msgid "Index `%s' already exists"
+msgstr "Index „%s“ existiert bereits"
+
+#: makeinfo/index.c:455
+#, c-format
+msgid "Unknown index `%s' and/or `%s' in @synindex"
+msgstr "Unbekannter Index „%s“ und/oder „%s“ in @synindex"
+
+#: makeinfo/index.c:661
+msgid "(line )"
+msgstr "(Zeile )"
+
+#: makeinfo/index.c:669
+#, c-format
+msgid "(line %*d)"
+msgstr "(Zeile %*d)"
+
+#: makeinfo/index.c:750
+#, c-format
+msgid "Unknown index `%s' in @printindex"
+msgstr "Unbekannter Index „%s“ in @printindex"
+
+#: makeinfo/index.c:819
+#, c-format
+msgid "Entry for index `%s' outside of any node"
+msgstr "Eintrag für Index „%s“ außerhalb jeglichen Knotens"
+
+#: makeinfo/index.c:822 makeinfo/index.c:858
+msgid "(outside of any node)"
+msgstr "(außerhalb jeglichen Knotens)"
+
+#: makeinfo/index.c:919 makeinfo/index.c:925
+msgid "See "
+msgstr "Siehe "
+
+#: makeinfo/insertion.c:160
+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:238
+msgid "Broken-Type in insertion_type_pname"
+msgstr "„Broken-Type“ bei „insertion_type_pname“"
+
+#: makeinfo/insertion.c:334
+msgid "Enumeration stack overflow"
+msgstr "Überlauf bei den Zahlen der Aufzählung"
+
+#: makeinfo/insertion.c:366
+#, 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:631
+#, 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:719
+#, c-format
+msgid "%cfloat environments cannot be nested"
+msgstr "%cfloat-Umgebungen können nicht verschachtelt sein"
+
+#: makeinfo/insertion.c:973
+#, c-format
+msgid "`@end' expected `%s', but saw `%s'"
+msgstr "„@end“ erwartete „%s“, bekam jedoch „%s“"
+
+#: makeinfo/insertion.c:1337
+#, c-format
+msgid "No matching `%cend %s'"
+msgstr "Kein übereinstimmendes „%cend %s“"
+
+#: makeinfo/insertion.c:1592
+#, c-format
+msgid "%s requires letter or digit"
+msgstr "%s benötigt einen Buchstaben oder eine Zahl"
+
+#: makeinfo/insertion.c:1687
+msgid "end of file inside verbatim block"
+msgstr "Dateiende innerhalb eines „Verbatim“-Blocks"
+
+#: makeinfo/insertion.c:1913
+#, c-format
+msgid "@%s not meaningful outside `@float' environment"
+msgstr "@%s nicht sinnvoll außerhalb einer „@float“-Umgebung"
+
+#: makeinfo/insertion.c:1949
+msgid "@menu seen before first @node, creating `Top' node"
+msgstr "@menu vor ersten @node gefunden. „Top“-Knoten wird angelegt"
+
+#: makeinfo/insertion.c:1950
+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:1962
+msgid "@detailmenu seen before first node, creating `Top' node"
+msgstr "@detailmenu vor ersten @node gefunden. „Top“-Knoten wird angelegt"
+
+#: makeinfo/insertion.c:2018
+#, 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:2032
+#, c-format
+msgid "@%s not meaningful outside `@titlepage' environment"
+msgstr "@%s nicht sinnvoll außerhalb einer „@titlepage“-Umgebung"
+
+#: makeinfo/insertion.c:2063
+#, c-format
+msgid "Unmatched `%c%s'"
+msgstr "Nicht übereinstimmendes „%c%s“"
+
+#: makeinfo/insertion.c:2068
+#, c-format
+msgid "`%c%s' needs something after it"
+msgstr "„%c%s“ benötigt etwas nachfolgendes"
+
+#: makeinfo/insertion.c:2074
+#, c-format
+msgid "Bad argument `%s' to `@%s', using `%s'"
+msgstr "Fehlerhaftes Argument „%s“ zu „@%s“, benutze „%s“"
+
+#: makeinfo/insertion.c:2171
+#, c-format
+msgid "@%s not meaningful inside `@%s' block"
+msgstr "@%s nicht sinnvoll innerhalb eines „@%s“-Blocks"
+
+#: makeinfo/insertion.c:2180
+#, c-format
+msgid "@itemx not meaningful inside `%s' block"
+msgstr "@itemx nicht sinnvoll innerhalb eines „%s“-Blocks"
+
+# checkit
+#: makeinfo/insertion.c:2356
+#, c-format
+msgid "%c%s found outside of an insertion block"
+msgstr "%c%s außerhalb eines Einfügungsblocks gefunden"
+
+#: makeinfo/lang.c:580
+#, 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:655
+#, c-format
+msgid "unrecognized encoding name `%s'"
+msgstr "nicht erkannter Kodierungsname „%s“"
+
+#: makeinfo/lang.c:663
+#, c-format
+msgid "sorry, encoding `%s' not supported"
+msgstr "Kodierung „%s“ wird leider nicht unterstützt."
+
+#: makeinfo/lang.c:715
+#, c-format
+msgid "invalid encoded character `%s'"
+msgstr "Ungültiges kodiertes Zeichen: „%s“"
+
+#: makeinfo/lang.c:1009
+#, 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:1013
+#, 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:355
+#, 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:586
+#, c-format
+msgid "%cend macro not found"
+msgstr "%cend Makro nicht gefunden"
+
+#: makeinfo/macro.c:624
+msgid "@quote-arg only useful for single-argument macros"
+msgstr "@quote-Argument nur sinnvoll, wenn das Makro nur ein Argument hat"
+
+#: makeinfo/macro.c:660
+#, c-format
+msgid "mismatched @end %s with @%s"
+msgstr "@end %s stimmt nicht mit @%s überein"
+
+#: makeinfo/makeinfo.c:184
+#, c-format
+msgid "Too many errors! Gave up.\n"
+msgstr "Zu viele Fehler! Abbruch.\n"
+
+#: makeinfo/makeinfo.c:302
+#, c-format
+msgid "%s:%d: warning: "
+msgstr "%s:%d: Warnung: "
+
+#: makeinfo/makeinfo.c:321 makeinfo/makeinfo.c:2260
+#, c-format
+msgid "Misplaced %c"
+msgstr "Fehlplazierte %c"
+
+#: makeinfo/makeinfo.c:340
+#, c-format
+msgid "Try `%s --help' for more information.\n"
+msgstr "„%s --help“ gibt weitere Informationen.\n"
+
+#: makeinfo/makeinfo.c:343
+#, c-format
+msgid "Usage: %s [OPTION]... TEXINFO-FILE...\n"
+msgstr "Aufruf: %s [OPTION]... TEXINFO-DATEI...\n"
+
+#: makeinfo/makeinfo.c:346
+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:350
+#, c-format
+msgid ""
+"General options:\n"
+" --error-limit=NUM quit after NUM errors (default %d).\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"
+" --reference-limit=NUM warn about at most NUM references (default %"
+"d).\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"
+" --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"
+" --reference-limit=ZAHL warne bei höchstens ZAHL Verweisen (Standard %"
+"d)\n"
+" -v, --verbose ausführlich die Bearbeitungschritte anzeigen\n"
+" --version Programmversion anzeigen und beenden\n"
+
+#: makeinfo/makeinfo.c:364
+#, 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:372
+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 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 (directory if split HTML),\n"
+msgstr ""
+"Allgemeine Ausgabe-Optionen:\n"
+" -E, --macro-expand DATEI originalen Quelltext mit expandierten Makros "
+"nach\n"
+" DATEI ausgeben, dabei @setfilename ignorieren\n"
+" --no-headers Knoten-Unterteiler, „Knoten:“-Kopfzeilen und "
+"Menüs\n"
+" unterdrücken in Info-Ausgabe (also nur Text\n"
+" erstellen) oder HTML (also kürzere Ausgabe);\n"
+" außerdem in die Standardausgabe schreiben\n"
+" --no-split Aufteilen langer Info-Dateien oder das Erzeugen\n"
+" einer HTML-Datei je Knoten unterdrücken\n"
+" --number-sections Kapitel-, Abschnitt- und Anhangzählungen "
+"ausgeben\n"
+" -o, --output=DATEI Ausgabe nach DATEI (bzw. Verzeichnis wenn\n"
+" aufgeteiltes HTML)\n"
+
+#: makeinfo/makeinfo.c:386
+#, c-format
+msgid ""
+"Options for Info and plain text:\n"
+" --enable-encoding output accented and special characters in\n"
+" Info output based on @documentencoding.\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\n"
+" in which they are defined (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"
+" --enable-encoding akzentuierte und spezielle Zeichen in die "
+"Info-\n"
+" Ausgabe gemäß @documentencoding ausgeben\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:403
+msgid ""
+"Options for HTML:\n"
+" --css-include=FILE include FILE in HTML <style> output;\n"
+" read stdin if FILE is -.\n"
+msgstr ""
+"Optionen für HTML:\n"
+" --css-include=DATEI DATEI in HTML-<style>-Ausgabe einfügen;\n"
+" aus Standardeingabe, wenn DATEI „-“ ist\n"
+
+#: makeinfo/makeinfo.c:409
+#, 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:416
+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:425
+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:444
+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"
+
+# Die "." am Zeilenende habe ich entfernt. -ke-
+#: makeinfo/makeinfo.c:452
+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\n"
+" 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\n"
+" 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:603
+#, 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:647 makeinfo/makeinfo.c:673 makeinfo/makeinfo.c:692
+#: makeinfo/makeinfo.c:722 makeinfo/makeinfo.c:743
+#, 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:660
+#, 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:665
+#, c-format
+msgid "%s: ignoring second macro expansion output `%s'.\n"
+msgstr "%s: ignoriere zweite Makro-Expansions-Ausgabedatei „%s“.\n"
+
+#: makeinfo/makeinfo.c:707
+#, 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:732
+#, 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:806
+#, c-format
+msgid "%s: missing file argument.\n"
+msgstr "%s: Datei-Angabe fehlt.\n"
+
+#: makeinfo/makeinfo.c:997 makeinfo/makeinfo.c:3991
+#, c-format
+msgid "Multiline command %c%s used improperly"
+msgstr "Mehrzeilen-Befehl %c%s inkorrekt verwendet"
+
+#: makeinfo/makeinfo.c:1000
+#, c-format
+msgid "Expected `%s'"
+msgstr "Habe „%s“ erwartet"
+
+#: makeinfo/makeinfo.c:1479
+#, c-format
+msgid "Can't create directory `%s': %s"
+msgstr "Kann Verzeichnis „%s“ nicht anlegen: %s"
+
+#: makeinfo/makeinfo.c:1525
+#, c-format
+msgid "No `%s' found in `%s'"
+msgstr "Kein „%s“ in „%s“ gefunden"
+
+#: makeinfo/makeinfo.c:1605
+#, 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:1638
+#, c-format
+msgid "Making %s file `%s' from `%s'.\n"
+msgstr "%s-Datei „%s“ von „%s“ wird erzeugt.\n"
+
+#: makeinfo/makeinfo.c:1673
+#, c-format
+msgid "This is %s, produced by makeinfo version %s from %s.\n"
+msgstr "Dies ist %s, hergestellt von Makeinfo Version %s aus %s.\n"
+
+#: makeinfo/makeinfo.c:1709
+#, c-format
+msgid ""
+"%s: Removing macro output file `%s' due to errors; use --force to preserve.\n"
+msgstr ""
+"%s: Entferne Makro-Ausgabe-Datei „%s“ wegen Fehler; --force benutzen, um "
+"Datei beizubehalten.\n"
+
+#: makeinfo/makeinfo.c:1773
+#, c-format
+msgid "%s: Removing output file `%s' due to errors; use --force to preserve.\n"
+msgstr ""
+"%s: Entferne Ausgabe-Datei „%s“ wegen Fehler; --force benutzen, um diese "
+"beizubehalten.\n"
+
+#: makeinfo/makeinfo.c:2034
+#, c-format
+msgid "Unknown command `%s'"
+msgstr "Unbekannter Befehl „%s“"
+
+#: makeinfo/makeinfo.c:2056
+#, 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:2314
+#, c-format
+msgid "%c%s expected braces"
+msgstr "%c%s erwartete geschweifte Klammern"
+
+#: makeinfo/makeinfo.c:2327
+msgid "Unmatched }"
+msgstr "Nicht übereinstimmende }"
+
+#: makeinfo/makeinfo.c:2375
+msgid "NO_NAME!"
+msgstr "Kein_NAME!"
+
+#: makeinfo/makeinfo.c:2396
+#, c-format
+msgid "%c%s missing close brace"
+msgstr "%c%s fehlende schließende Klammer"
+
+#: makeinfo/makeinfo.c:3309
+#, c-format
+msgid "@image file `%s' (for HTML) not readable: %s"
+msgstr "@image-Datei „%s“ (für HTML) nicht lesbar: %s"
+
+#: makeinfo/makeinfo.c:3315
+#, c-format
+msgid "No such file `%s'"
+msgstr "Kein Datei namens „%s“"
+
+#: makeinfo/makeinfo.c:3447
+#, c-format
+msgid "@image file `%s' (for text) unreadable: %s"
+msgstr "@image-Datei „%s“ (für Text) nicht lesbar: %s"
+
+#: makeinfo/makeinfo.c:3456
+msgid "@image missing filename argument"
+msgstr "@image fehlt als Argument ein Dateiname"
+
+#: makeinfo/makeinfo.c:3675
+#, c-format
+msgid "undefined flag: %s"
+msgstr "undefiniertes Flag: %s"
+
+# checkit
+#: makeinfo/makeinfo.c:3676
+#, c-format
+msgid "{No value for `%s'}"
+msgstr "{Kein Wert für „%s“}"
+
+#: makeinfo/makeinfo.c:3728
+#, c-format
+msgid "%c%s requires a name"
+msgstr "%c%s erfordert einen Namen"
+
+#: makeinfo/makeinfo.c:3834
+#, c-format
+msgid "Reached eof before matching @end %s"
+msgstr "Dateiende vor erforderlichem „@end %s“ erreicht"
+
+#: makeinfo/makeinfo.c:4082
+#, 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:254
+#, c-format
+msgid "ignoring stray text `%s' after @multitable"
+msgstr "nicht interpretierbarer Text „%s“ nach @multitable wird ignoriert"
+
+#: makeinfo/multi.c:393
+#, c-format
+msgid "Too many columns in multitable item (max %d)"
+msgstr "Zu viele Spalten im „@multitable“-Eintrag (maximal %d)"
+
+#: makeinfo/multi.c:555
+#, c-format
+msgid "[unexpected] cannot select column #%d in multitable"
+msgstr "[unerwartet] Spalte %d kann in „multitable“ nicht ausgewählt werden"
+
+#: makeinfo/multi.c:584
+msgid "ignoring @tab outside of multitable"
+msgstr "@tab außerhalb einer „multitable“ wird ignoriert"
+
+# checkit
+#: makeinfo/multi.c:632
+#, c-format
+msgid "** Multicolumn output from last row:\n"
+msgstr "** Mehrspalten-Ausgabe von der letzten Zeile:\n"
+
+#: makeinfo/multi.c:635
+#, c-format
+msgid "* column #%d: output = %s\n"
+msgstr "* Spalte %d: Ausgabe = %s\n"
+
+#: makeinfo/node.c:280
+#, c-format
+msgid "Node `%s' previously defined at line %d"
+msgstr "Knoten „%s“ bereits in Zeile %d definiert"
+
+#: makeinfo/node.c:648
+#, c-format
+msgid "Formatting node %s...\n"
+msgstr "Knoten „%s“ wird formatiert...\n"
+
+#: makeinfo/node.c:716
+#, 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:879
+#, c-format
+msgid "No node name specified for `%c%s' command"
+msgstr "Kein Knotenname für den Befehl „%c%s“ angegeben"
+
+#: makeinfo/node.c:920 makeinfo/node.c:1151
+#, 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:923
+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:925 makeinfo/node.c:1154
+msgid "Rename this anchor or use the `--no-split' option"
+msgstr "Entweder diesen Anker umbenennen oder Option „--no-split“ verwenden"
+
+#: makeinfo/node.c:955
+#, c-format
+msgid "Unexpected string at end of split-HTML file `%s'"
+msgstr "Unerwartete Zeichenkette am Ende der gesplitteten HTML-Datei „%s“"
+
+# HTML
+#: makeinfo/node.c:991
+msgid "Next:"
+msgstr "n&auml;chstes:"
+
+#: makeinfo/node.c:1007
+msgid "Previous:"
+msgstr "voriges:"
+
+# HTML
+#: makeinfo/node.c:1021
+msgid "Up:"
+msgstr "aufw&auml;rts:"
+
+#: makeinfo/node.c:1148
+#, 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:1153
+msgid "@anchor command ignored; references to it will not work"
+msgstr ""
+"@anchor-Befehl wird ignoriert, da Referenzen auf ihn nicht funktionieren"
+
+#: makeinfo/node.c:1347
+#, 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:1363
+msgid "Menu"
+msgstr "Menü"
+
+#: makeinfo/node.c:1365
+msgid "Cross"
+msgstr "Quer"
+
+#: makeinfo/node.c:1447
+#, 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:1450
+#, 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:1462
+msgid "Prev"
+msgstr "voriges"
+
+#: makeinfo/node.c:1505
+#, 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:1509
+#, 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:1521
+#, 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:1524
+msgid "Up"
+msgstr "aufwärts"
+
+#: makeinfo/node.c:1590
+#, 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:1619
+#, c-format
+msgid "node `%s' has been referenced %d times"
+msgstr "Knoten „%s“ wurde %d mal referenziert"
+
+#: makeinfo/node.c:1633
+#, c-format
+msgid "unreferenced node `%s'"
+msgstr "Nicht referenzierter Knoten „%s“"
+
+#: makeinfo/node.c:1723
+#, c-format
+msgid "Removing %s\n"
+msgstr "Entferne %s\n"
+
+#: makeinfo/node.c:1727
+#, 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:562
+#, c-format
+msgid "Internal error (search_sectioning) \"%s\"!"
+msgstr "Interner Fehler (search_sectioning) „%s“!"
+
+#: makeinfo/sectioning.c:623
+#, c-format
+msgid "%c%s is obsolete; use %c%s instead"
+msgstr "%c%s ist obsolet; %c%s stattdessen benutzen"
+
+#: makeinfo/sectioning.c:639
+#, c-format
+msgid "Node with %ctop as a section already exists"
+msgstr "Knoten mit %ctop als Abschnitt exisiert bereits"
+
+#: makeinfo/sectioning.c:647
+#, c-format
+msgid "Here is the %ctop node"
+msgstr "Hier ist der %ctop-Knoten"
+
+#: makeinfo/sectioning.c:663
+#, c-format
+msgid "%ctop used before %cnode, defaulting to %s"
+msgstr "%ctop vor %cnode benutzt, Voreinstellung %s wird genommen"
+
+#: makeinfo/toc.c:197 makeinfo/toc.c:271 makeinfo/toc.c:273
+msgid "Table of Contents"
+msgstr "Inhaltsverzeichnis"
+
+#: makeinfo/toc.c:304 makeinfo/toc.c:337 makeinfo/toc.c:339
+msgid "Short Contents"
+msgstr "Inhalt in Kurzform"
+
+#: makeinfo/xml.c:1605
+#, c-format
+msgid "@image file `%s' unreadable: %s"
+msgstr "@image-Datei „%s“ nicht lesbar: %s"
+
+#: makeinfo/xml.c:2097
+msgid ""
+"@headitem as the last item of @multitable produces invalid Docbook documents"
+msgstr ""
+"@headitem als letztes Element von @multitable erzeugt ungültige Docbook-"
+"Dokumente"
+
+#: util/install-info.c:154
+#, c-format
+msgid "%s: warning: "
+msgstr "%s: Warnung: "
+
+#: util/install-info.c:203
+#, c-format
+msgid " for %s"
+msgstr " für %s"
+
+#: util/install-info.c:426
+#, c-format
+msgid "\tTry `%s --help' for a complete list of options.\n"
+msgstr "\t„%s --help“ gibt weitere Informationen.\n"
+
+# Die "." am Zeilenende habe ich entfernt. -ke-
+#: util/install-info.c:434
+#, c-format
+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 ""
+"Aufruf: %s [OPTION]... [INFO-DATEI [VERZ-DATEI]]\n"
+"\n"
+"„dir“-Einträge von der INFO-DATEI in der Info-Verzeichnis-Datei VERZ-DATEI\n"
+"installieren oder löschen.\n"
+"\n"
+"Optionen:\n"
+" --delete vorhandene Einträge für INFO-DATEI aus VERZ-DATEI "
+"löschen;\n"
+" keine neuen Einträge einfügen\n"
+" --dir-file=NAME Name der Info-Verzeichnis-Datei angeben. Gleichbedeutend\n"
+" mit dem VERZ-DATEI-Argument\n"
+" --entry=TEXT TEXT als einen Info-Verzeichnis-Eintrag einfügen. TEXT\n"
+" soll die Form einer Zeile eines Info-Menüeintrags "
+"haben,\n"
+" zuzüglich mehrerer Extra-Zeilen (oder keiner), die mit\n"
+" Leerraum („whitespace“) beginnen. Wenn mehr als ein\n"
+" Eintrag angegeben wird, werden alle hinzugefügt. Wenn\n"
+" kein Eintrag angegeben wird, wird der Eintragstext der\n"
+" Info-Datei selbst entnommen.\n"
+" --help diese Hilfe zeigen\n"
+" --info-file=DATEI Info-Datei angeben, die im Verzeichnis zu installieren "
+"ist.\n"
+" Gleichbedeutend mit dem INFO-DATEI-Argument\n"
+" --info-dir=VERZ wie --dir-file=VERZ/dir\n"
+" --item=TEXT wie --entry TEXT\n"
+" Ein Info-Verzeichnis-Eintrag ist nämlich ein "
+"Menüeintrag.\n"
+" --quiet Warnungen unterdrücken\n"
+" --remove wie --delete\n"
+" --section=ABSCHN die Einträge dieser Datei in den Abschnitt ABSCHN 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"
+" --version Programmversion anzeigen\n"
+
+#: util/install-info.c:488
+#, 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"
+
+#: util/install-info.c:513
+#, 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"
+
+#: util/install-info.c:600
+#, c-format
+msgid "%s: empty file"
+msgstr "%s: leere Datei"
+
+#: util/install-info.c:913 util/install-info.c:953
+msgid "START-INFO-DIR-ENTRY without matching END-INFO-DIR-ENTRY"
+msgstr "START-INFO-DIR-ENTRY ohne END-INFO-DIR-ENTRY"
+
+#: util/install-info.c:948
+msgid "END-INFO-DIR-ENTRY without matching START-INFO-DIR-ENTRY"
+msgstr "END-INFO-DIR-ENTRY ohne START-INFO-DIR-ENTRY"
+
+#: util/install-info.c:1191 util/install-info.c:1201
+#, c-format
+msgid "%s: already have dir file: %s\n"
+msgstr "%s: Verzeichnisdatei schon vorhanden: %s\n"
+
+#: util/install-info.c:1236
+#, c-format
+msgid "%s: Specify the Info file only once.\n"
+msgstr "%s: Info-Datei nur einmal angeben.\n"
+
+#: util/install-info.c:1284
+#, c-format
+msgid "excess command line argument `%s'"
+msgstr "überflüssiges Kommandozeilen-Argument „%s“ wird übergangen"
+
+#: util/install-info.c:1288
+msgid "No input file specified; try --help for more information."
+msgstr "Keine Eingabe-Datei angegeben; „--help“ gibt weitere Informationen."
+
+#: util/install-info.c:1291
+msgid "No dir file specified; try --help for more information."
+msgstr "Keine dir-Datei angegeben; „--help“ gibt weitere Informationen."
+
+#: util/install-info.c:1313
+#, c-format
+msgid "no info dir entry in `%s'"
+msgstr "Kein Info-Verzeichnis-Eintrag in „%s“"
+
+#: util/install-info.c:1426
+#, c-format
+msgid "menu item `%s' already exists, for file `%s'"
+msgstr "Menüeintrag „%s“ bereits vorhanden, und zwar für Datei „%s“"
+
+#: util/install-info.c:1449
+#, c-format
+msgid "no entries found for `%s'; nothing deleted"
+msgstr "keine Einträge für „%s“ gefunden; nichts entfernt"
+
+#: util/texindex.c:252
+msgid "display this help and exit"
+msgstr "diese Hilfe anzeigen"
+
+#: util/texindex.c:254
+msgid "keep temporary files around after processing"
+msgstr "temporäre Dateien nach Programmende nicht entfernen"
+
+#: util/texindex.c:256
+msgid "do not keep temporary files around after processing (default)"
+msgstr "temporäre Dateien nach Programmende entfernen (Standard)"
+
+#: util/texindex.c:258
+msgid "send output to FILE"
+msgstr "Ausgabe nach DATEI schicken"
+
+#: util/texindex.c:260
+msgid "display version information and exit"
+msgstr "Programmversion anzeigen"
+
+#: util/texindex.c:270
+#, c-format
+msgid "Usage: %s [OPTION]... FILE...\n"
+msgstr "Aufruf: %s [OPTION]... DATEI...\n"
+
+#: util/texindex.c:271
+#, 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:274
+#, 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:276
+#, c-format
+msgid ""
+"\n"
+"Options:\n"
+msgstr ""
+"\n"
+"Optionen:\n"
+
+#: util/texindex.c:876 util/texindex.c:910 util/texindex.c:983
+#: util/texindex.c:1011
+#, c-format
+msgid "%s: not a texinfo index file"
+msgstr "%s: keine Texinfo-Indexdatei"
+
+#: util/texindex.c:968
+#, c-format
+msgid "failure reopening %s"
+msgstr "Fehler beim Wiederöffnen von „%s“"
+
+#: util/texindex.c:1218
+#, c-format
+msgid "No page number in %s"
+msgstr "Keine Seitenzahl in %s"
+
+#: util/texindex.c:1291
+#, c-format
+msgid "entry %s follows an entry with a secondary name"
+msgstr "Eintrag „%s“ direkt nach einem Untereintrag"
+
+#~ msgid "\"\" is invalid"
+#~ msgstr "„“ ist ungültig"
+
+#~ msgid "File exists, but is not a directory"
+#~ msgstr "Datei existiert, ist aber kein Verzeichnis"
+
+#~ msgid "First argument to cross-reference may not be empty"
+#~ msgstr "Erstes Argument für Querverweis darf nicht leer sein."
+
+#~ msgid "see "
+#~ msgstr "siehe "
+
+#~ msgid "`.' or `,' must follow cross reference, not %c"
+#~ msgstr "„.“ or „,“ muss einem Querverweis folgen, nicht %c"
+
+#~ msgid "First argument to @inforef may not be empty"
+#~ msgstr "Erstes Argument für @inforef darf nicht leer sein."
+
+#~ 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"
+
+# checkit
+#~ msgid "virtual memory exhausted"
+#~ msgstr "kein Speicher mehr"
+
+#~ 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/macros/texinfo/contrib/texinfo-hu/texinfo/po/de_AT.gmo b/macros/texinfo/contrib/texinfo-hu/texinfo/po/de_AT.gmo
new file mode 100644
index 0000000000..2e74709de3
--- /dev/null
+++ b/macros/texinfo/contrib/texinfo-hu/texinfo/po/de_AT.gmo
Binary files differ
diff --git a/macros/texinfo/contrib/texinfo-hu/texinfo/po/de_AT.po b/macros/texinfo/contrib/texinfo-hu/texinfo/po/de_AT.po
new file mode 100644
index 0000000000..51e8201c4c
--- /dev/null
+++ b/macros/texinfo/contrib/texinfo-hu/texinfo/po/de_AT.po
@@ -0,0 +1,2788 @@
+# 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: 2004-12-21 16:20-0800\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"
+
+#: info/echo-area.c:284 info/session.c:689
+msgid "Move forward a character"
+msgstr ""
+
+#: info/echo-area.c:296 info/session.c:705
+msgid "Move backward a character"
+msgstr ""
+
+#: info/echo-area.c:308
+msgid "Move to the start of this line"
+msgstr ""
+
+#: info/echo-area.c:313
+msgid "Move to the end of this line"
+msgstr ""
+
+#: info/echo-area.c:321 info/session.c:723
+msgid "Move forward a word"
+msgstr ""
+
+#: info/echo-area.c:361 info/session.c:772
+msgid "Move backward a word"
+msgstr ""
+
+#: info/echo-area.c:401
+msgid "Delete the character under the cursor"
+msgstr ""
+
+#: info/echo-area.c:431
+msgid "Delete the character behind the cursor"
+msgstr ""
+
+#: info/echo-area.c:452
+msgid "Cancel or quit operation"
+msgstr ""
+
+#: info/echo-area.c:467
+msgid "Accept (or force completion of) this line"
+msgstr ""
+
+#: info/echo-area.c:472
+msgid "Insert next character verbatim"
+msgstr ""
+
+#: info/echo-area.c:480
+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:653
+msgid "Kill the word preceding the cursor"
+msgstr ""
+
+#: info/echo-area.c:868 info/echo-area.c:924
+msgid "No completions"
+msgstr ""
+
+#: info/echo-area.c:870
+msgid "Not complete"
+msgstr ""
+
+#: info/echo-area.c:911
+msgid "List possible completions"
+msgstr ""
+
+#: info/echo-area.c:928
+msgid "Sole completion"
+msgstr ""
+
+#: info/echo-area.c:937
+msgid "One completion:\n"
+msgstr ""
+
+#: info/echo-area.c:938
+#, c-format
+msgid "%d completions:\n"
+msgstr ""
+
+#: info/echo-area.c:1085
+msgid "Insert completion"
+msgstr ""
+
+#: info/echo-area.c:1220
+msgid "Building completions..."
+msgstr ""
+
+#: info/echo-area.c:1340
+msgid "Scroll the completions window"
+msgstr ""
+
+#: info/footnotes.c:213
+msgid "Footnotes could not be displayed"
+msgstr ""
+
+#: info/footnotes.c:239
+msgid "Show the footnotes associated with this node in another window"
+msgstr ""
+
+#: info/footnotes.h:26
+msgid "---------- Footnotes ----------"
+msgstr ""
+
+#: info/indices.c:172
+msgid "Look up a string in the index for this file"
+msgstr ""
+
+#: info/indices.c:199
+msgid "Finding index entries..."
+msgstr ""
+
+#: info/indices.c:207
+msgid "No indices found."
+msgstr ""
+
+#: info/indices.c:217
+msgid "Index entry: "
+msgstr ""
+
+#: info/indices.c:325
+msgid ""
+"Go to the next matching index item from the last `\\[index-search]' command"
+msgstr ""
+
+#: info/indices.c:335
+msgid "No previous index search string."
+msgstr ""
+
+#: info/indices.c:342
+msgid "No index entries."
+msgstr ""
+
+#: info/indices.c:375
+#, c-format
+msgid "No %sindex entries containing `%s'."
+msgstr ""
+
+#: info/indices.c:376
+msgid "more "
+msgstr ""
+
+#: info/indices.c:386
+msgid "CAN'T SEE THIS"
+msgstr ""
+
+#: info/indices.c:422
+#, c-format
+msgid "Found `%s' in %s. (`\\[next-index-match]' tries to find next.)"
+msgstr ""
+
+#: info/indices.c:541
+#, c-format
+msgid "Scanning indices of `%s'..."
+msgstr ""
+
+#: info/indices.c:596
+#, c-format
+msgid "No available info files have `%s' in their indices."
+msgstr ""
+
+#: info/indices.c:622
+msgid "Grovel all known info file's indices for a string and build a menu"
+msgstr ""
+
+#: info/indices.c:626
+msgid "Index apropos: "
+msgstr ""
+
+#: info/indices.c:654
+#, 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:295 makeinfo/makeinfo.c:766 util/install-info.c:1266
+#: util/texindex.c:343
+#, c-format
+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 ""
+
+#: info/info.c:498
+#, c-format
+msgid "no index entries found for `%s'\n"
+msgstr ""
+
+#: info/info.c:590
+msgid " -b, --speech-friendly be friendly to speech synthesizers.\n"
+msgstr ""
+
+#: info/info.c:597
+#, c-format
+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 -f ./foo.info show file ./foo.info, not searching dir\n"
+msgstr ""
+
+#: info/info.c:635 info/infokey.c:918 makeinfo/makeinfo.c:465
+#: util/install-info.c:466 util/texindex.c:292
+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:669
+#, c-format
+msgid "Cannot find node `%s'."
+msgstr ""
+
+#: info/info.c:670
+#, c-format
+msgid "Cannot find node `(%s)%s'."
+msgstr ""
+
+#: info/info.c:671
+msgid "Cannot find a window!"
+msgstr ""
+
+#: info/info.c:672
+msgid "Point doesn't appear within this window's node!"
+msgstr ""
+
+#: info/info.c:673
+msgid "Cannot delete the last window."
+msgstr ""
+
+#: info/info.c:674
+msgid "No menu in this node."
+msgstr ""
+
+#: info/info.c:675
+msgid "No footnotes in this node."
+msgstr ""
+
+#: info/info.c:676
+msgid "No cross references in this node."
+msgstr ""
+
+#: info/info.c:677
+#, c-format
+msgid "No `%s' pointer for this node."
+msgstr ""
+
+#: info/info.c:678
+#, c-format
+msgid "Unknown Info command `%c'; try `?' for help."
+msgstr ""
+
+#: info/info.c:679
+#, c-format
+msgid "Terminal type `%s' is not smart enough to run Info."
+msgstr ""
+
+#: info/info.c:680
+msgid "You are already at the last page of this node."
+msgstr ""
+
+#: info/info.c:681
+msgid "You are already at the first page of this node."
+msgstr ""
+
+#: info/info.c:682
+msgid "Only one window."
+msgstr ""
+
+#: info/info.c:683
+msgid "Resulting window would be too small."
+msgstr ""
+
+#: info/info.c:684
+msgid "Not enough room for a help window, please delete a window."
+msgstr ""
+
+#: info/infodoc.c:46 info/infodoc.c:95
+msgid ""
+"Basic Commands in Info Windows\n"
+"******************************\n"
+msgstr ""
+
+#: info/infodoc.c:49
+msgid "\\%-10[quit-help] Quit this help.\n"
+msgstr ""
+
+#: info/infodoc.c:50
+msgid "\\%-10[quit] Quit Info altogether.\n"
+msgstr ""
+
+#: info/infodoc.c:51
+msgid "\\%-10[get-info-help-node] Invoke the Info tutorial.\n"
+msgstr ""
+
+#: info/infodoc.c:53 info/infodoc.c:102
+msgid ""
+"Selecting other nodes:\n"
+"----------------------\n"
+msgstr ""
+
+#: info/infodoc.c:55
+msgid "\\%-10[next-node] Move to the \"next\" node of this node.\n"
+msgstr ""
+
+#: info/infodoc.c:56
+msgid "\\%-10[prev-node] Move to the \"previous\" node of this node.\n"
+msgstr ""
+
+#: info/infodoc.c:57
+msgid "\\%-10[up-node] Move \"up\" from this node.\n"
+msgstr ""
+
+#: info/infodoc.c:58
+msgid ""
+"\\%-10[menu-item] Pick menu item specified by name.\n"
+" Picking a menu item causes another node to be selected.\n"
+msgstr ""
+
+#: info/infodoc.c:60
+msgid ""
+"\\%-10[xref-item] Follow a cross reference. Reads name of reference.\n"
+msgstr ""
+
+#: info/infodoc.c:61
+msgid "\\%-10[history-node] Move to the last node seen in this window.\n"
+msgstr ""
+
+#: info/infodoc.c:62
+msgid ""
+"\\%-10[move-to-next-xref] Skip to next hypertext link within this node.\n"
+msgstr ""
+
+#: info/infodoc.c:63
+msgid ""
+"\\%-10[move-to-prev-xref] Skip to previous hypertext link within this "
+"node.\n"
+msgstr ""
+
+#: info/infodoc.c:64
+msgid ""
+"\\%-10[select-reference-this-line] Follow the hypertext link under cursor.\n"
+msgstr ""
+
+#: info/infodoc.c:65
+msgid ""
+"\\%-10[dir-node] Move to the `directory' node. Equivalent to `\\[goto-"
+"node] (DIR)'.\n"
+msgstr ""
+
+#: info/infodoc.c:66
+msgid ""
+"\\%-10[top-node] Move to the Top node. Equivalent to `\\[goto-node] Top'.\n"
+msgstr ""
+
+#: info/infodoc.c:68 info/infodoc.c:116
+msgid ""
+"Moving within a node:\n"
+"---------------------\n"
+msgstr ""
+
+#: info/infodoc.c:70
+msgid "\\%-10[beginning-of-node] Go to the beginning of this node.\n"
+msgstr ""
+
+#: info/infodoc.c:71
+msgid "\\%-10[end-of-node] Go to the end of this node.\n"
+msgstr ""
+
+#: info/infodoc.c:72
+msgid "\\%-10[next-line] Scroll forward 1 line.\n"
+msgstr ""
+
+#: info/infodoc.c:73
+msgid "\\%-10[prev-line] Scroll backward 1 line.\n"
+msgstr ""
+
+#: info/infodoc.c:74
+msgid "\\%-10[scroll-forward] Scroll forward a page.\n"
+msgstr ""
+
+#: info/infodoc.c:75
+msgid "\\%-10[scroll-backward] Scroll backward a page.\n"
+msgstr ""
+
+#: info/infodoc.c:77 info/infodoc.c:125
+msgid ""
+"Other commands:\n"
+"---------------\n"
+msgstr ""
+
+#: info/infodoc.c:79
+msgid "\\%-10[menu-digit] Pick first ... ninth item in node's menu.\n"
+msgstr ""
+
+#: info/infodoc.c:80
+msgid "\\%-10[last-menu-item] Pick last item in node's menu.\n"
+msgstr ""
+
+#: info/infodoc.c:81
+msgid ""
+"\\%-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"
+msgstr ""
+
+#: info/infodoc.c:83
+msgid ""
+"\\%-10[goto-node] Move to node specified by name.\n"
+" You may include a filename as well, as in (FILENAME)NODENAME.\n"
+msgstr ""
+
+#: info/infodoc.c:85
+msgid ""
+"\\%-10[search] Search forward for a specified string\n"
+" and select the node in which the next occurrence is found.\n"
+msgstr ""
+
+#: info/infodoc.c:87
+msgid ""
+"\\%-10[search-backward] Search backward for a specified string\n"
+" and select the node in which the previous occurrence is "
+"found.\n"
+msgstr ""
+
+#: info/infodoc.c:98
+#, c-format
+msgid " %-10s Quit this help.\n"
+msgstr ""
+
+#: info/infodoc.c:99
+#, c-format
+msgid " %-10s Quit Info altogether.\n"
+msgstr ""
+
+#: info/infodoc.c:100
+#, c-format
+msgid " %-10s Invoke the Info tutorial.\n"
+msgstr ""
+
+#: info/infodoc.c:104
+#, c-format
+msgid " %-10s Move to the `next' node of this node.\n"
+msgstr ""
+
+#: info/infodoc.c:105
+#, c-format
+msgid " %-10s Move to the `previous' node of this node.\n"
+msgstr ""
+
+#: info/infodoc.c:106
+#, c-format
+msgid " %-10s Move `up' from this node.\n"
+msgstr ""
+
+#: info/infodoc.c:107
+#, c-format
+msgid " %-10s Pick menu item specified by name.\n"
+msgstr ""
+
+#: info/infodoc.c:108
+msgid " Picking a menu item causes another node to be selected.\n"
+msgstr ""
+
+#: info/infodoc.c:109
+#, c-format
+msgid " %-10s Follow a cross reference. Reads name of reference.\n"
+msgstr ""
+
+#: info/infodoc.c:110
+#, c-format
+msgid " %-10s Move to the last node seen in this window.\n"
+msgstr ""
+
+#: info/infodoc.c:111
+#, c-format
+msgid " %-10s Skip to next hypertext link within this node.\n"
+msgstr ""
+
+#: info/infodoc.c:112
+#, c-format
+msgid " %-10s Follow the hypertext link under cursor.\n"
+msgstr ""
+
+#: info/infodoc.c:113
+#, c-format
+msgid " %-10s Move to the `directory' node. Equivalent to `g (DIR)'.\n"
+msgstr ""
+
+#: info/infodoc.c:114
+#, c-format
+msgid " %-10s Move to the Top node. Equivalent to `g Top'.\n"
+msgstr ""
+
+#: info/infodoc.c:118
+#, c-format
+msgid " %-10s Scroll forward a page.\n"
+msgstr ""
+
+#: info/infodoc.c:119
+#, c-format
+msgid " %-10s Scroll backward a page.\n"
+msgstr ""
+
+#: info/infodoc.c:120
+#, c-format
+msgid " %-10s Go to the beginning of this node.\n"
+msgstr ""
+
+#: info/infodoc.c:121
+#, c-format
+msgid " %-10s Go to the end of this node.\n"
+msgstr ""
+
+#: info/infodoc.c:122
+#, c-format
+msgid " %-10s Scroll forward 1 line.\n"
+msgstr ""
+
+#: info/infodoc.c:123
+#, c-format
+msgid " %-10s Scroll backward 1 line.\n"
+msgstr ""
+
+#: info/infodoc.c:127
+#, c-format
+msgid " %-10s Pick first ... ninth item in node's menu.\n"
+msgstr ""
+
+#: info/infodoc.c:128
+#, c-format
+msgid " %-10s Pick last item in node's menu.\n"
+msgstr ""
+
+#: info/infodoc.c:129
+#, c-format
+msgid ""
+" %-10s Search for a specified string in the index entries of this Info\n"
+msgstr ""
+
+#: info/infodoc.c:130
+msgid ""
+" file, and select the node referenced by the first entry "
+"found.\n"
+msgstr ""
+
+#: info/infodoc.c:131
+#, c-format
+msgid " %-10s Move to node specified by name.\n"
+msgstr ""
+
+#: info/infodoc.c:132
+msgid ""
+" You may include a filename as well, as in (FILENAME)NODENAME.\n"
+msgstr ""
+
+#: info/infodoc.c:133
+#, c-format
+msgid " %-10s Search forward for a specified string,\n"
+msgstr ""
+
+#: info/infodoc.c:134 info/infodoc.c:136
+msgid ""
+" and select the node in which the next occurrence is found.\n"
+msgstr ""
+
+#: info/infodoc.c:135
+#, c-format
+msgid " %-10s Search backward for a specified string\n"
+msgstr ""
+
+#: info/infodoc.c:316
+msgid "The current search path is:\n"
+msgstr ""
+
+#: info/infodoc.c:320
+msgid ""
+"Commands available in Info windows:\n"
+"\n"
+msgstr ""
+
+#: info/infodoc.c:324
+msgid ""
+"Commands available in the echo area:\n"
+"\n"
+msgstr ""
+
+#: info/infodoc.c:347
+#, c-format
+msgid ""
+"The following commands can only be invoked via %s:\n"
+"\n"
+msgstr ""
+
+#: info/infodoc.c:351
+msgid ""
+"The following commands cannot be invoked at all:\n"
+"\n"
+msgstr ""
+
+#: info/infodoc.c:375
+msgid "--- Use `\\[history-node]' or `\\[kill-node]' to exit ---\n"
+msgstr ""
+
+#: info/infodoc.c:485
+msgid "Display help message"
+msgstr ""
+
+#: info/infodoc.c:503
+msgid "Visit Info node `(info)Help'"
+msgstr ""
+
+#: info/infodoc.c:641
+msgid "Print documentation for KEY"
+msgstr ""
+
+#: info/infodoc.c:653
+#, c-format
+msgid "Describe key: %s"
+msgstr ""
+
+#: info/infodoc.c:664
+#, c-format
+msgid "ESC %s is undefined."
+msgstr ""
+
+#: info/infodoc.c:680 info/infodoc.c:709
+#, c-format
+msgid "%s is undefined."
+msgstr ""
+
+#: info/infodoc.c:730
+#, c-format
+msgid "%s is defined to %s."
+msgstr ""
+
+#: info/infodoc.c:1153
+msgid "Show what to type to execute a given command"
+msgstr ""
+
+#: info/infodoc.c:1157
+msgid "Where is command: "
+msgstr ""
+
+#: info/infodoc.c:1179
+#, c-format
+msgid "`%s' is not on any keys"
+msgstr ""
+
+#: info/infodoc.c:1186
+#, c-format
+msgid "%s can only be invoked via %s."
+msgstr ""
+
+#: info/infodoc.c:1190
+#, c-format
+msgid "%s can be invoked via %s."
+msgstr ""
+
+#: info/infodoc.c:1195
+#, c-format
+msgid "There is no function named `%s'"
+msgstr ""
+
+#: info/infokey.c:145
+#, c-format
+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 ""
+
+#: 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:1500
+#, c-format
+msgid "Ignoring invalid infokey file `%s' - too small"
+msgstr ""
+
+#: info/infomap.c:1503
+#, c-format
+msgid "Ignoring invalid infokey file `%s' - too big"
+msgstr ""
+
+#: info/infomap.c:1516
+#, c-format
+msgid "Error reading infokey file `%s' - short read"
+msgstr ""
+
+#: info/infomap.c:1535
+#, c-format
+msgid ""
+"Invalid infokey file `%s' (bad magic numbers) -- run infokey to update it"
+msgstr ""
+
+#: info/infomap.c:1544
+#, c-format
+msgid "Your infokey file `%s' is out of date -- run infokey to update it"
+msgstr ""
+
+#: info/infomap.c:1560
+#, c-format
+msgid ""
+"Invalid infokey file `%s' (bad section length) -- run infokey to update it"
+msgstr ""
+
+#: info/infomap.c:1581
+#, c-format
+msgid ""
+"Invalid infokey file `%s' (bad section code) -- run infokey to update it"
+msgstr ""
+
+#: info/infomap.c:1716
+msgid "Bad data in infokey file -- some key bindings ignored"
+msgstr ""
+
+#: info/infomap.c:1766
+msgid "Bad data in infokey file -- some var settings ignored"
+msgstr ""
+
+#: info/m-x.c:69
+msgid "Read the name of an Info command and describe it"
+msgstr ""
+
+#: info/m-x.c:73
+msgid "Describe command: "
+msgstr ""
+
+#: info/m-x.c:96
+msgid "Read a command name in the echo area and execute it"
+msgstr ""
+
+#: info/m-x.c:140
+msgid "Cannot execute an `echo-area' command here."
+msgstr ""
+
+#: info/m-x.c:154
+#, c-format
+msgid "Undefined command: %s"
+msgstr ""
+
+#: info/m-x.c:160
+msgid "Set the height of the displayed window"
+msgstr ""
+
+#: info/m-x.c:173
+#, c-format
+msgid "Set screen height to (%d): "
+msgstr ""
+
+#: info/makedoc.c:162 info/makedoc.c:170
+#, c-format
+msgid ""
+" Source files groveled to make this file include:\n"
+"\n"
+msgstr ""
+
+#: info/makedoc.c:550
+#, c-format
+msgid "Couldn't manipulate the file %s.\n"
+msgstr ""
+
+#: info/nodemenu.c:31
+msgid ""
+"\n"
+"* Menu:\n"
+" (File)Node Lines Size Containing File\n"
+" ---------- ----- ---- ---------------"
+msgstr ""
+
+#: info/nodemenu.c:202
+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:224
+msgid "Make a window containing a menu of all of the currently visited nodes"
+msgstr ""
+
+#: info/nodemenu.c:304
+msgid "Select a node which has been previously visited in a visible window"
+msgstr ""
+
+#: info/nodemenu.c:317
+msgid "Select visited node: "
+msgstr ""
+
+#: info/nodemenu.c:337 info/session.c:2264
+#, c-format
+msgid "The reference disappeared! (%s)."
+msgstr ""
+
+#: info/session.c:162
+#, c-format
+msgid ""
+"Welcome to Info version %s. Type \\[get-help-window] for help, \\[menu-item] "
+"for menu item."
+msgstr ""
+
+#: info/session.c:620
+msgid "Move down to the next line"
+msgstr ""
+
+#: info/session.c:635
+msgid "Move up to the previous line"
+msgstr ""
+
+#: info/session.c:650
+msgid "Move to the end of the line"
+msgstr ""
+
+#: info/session.c:670
+msgid "Move to the start of the line"
+msgstr ""
+
+#: info/session.c:860 makeinfo/node.c:1424
+msgid "Next"
+msgstr ""
+
+#: info/session.c:863
+msgid "Following Next node..."
+msgstr ""
+
+#: info/session.c:881
+msgid "Selecting first menu item..."
+msgstr ""
+
+#: info/session.c:893
+msgid "Selecting Next node..."
+msgstr ""
+
+#: info/session.c:964
+#, c-format
+msgid "Moving Up %d time(s), then Next."
+msgstr ""
+
+#: info/session.c:988
+msgid "No more nodes within this document."
+msgstr ""
+
+#: info/session.c:1011
+msgid "No `Prev' for this node."
+msgstr ""
+
+#: info/session.c:1014 info/session.c:1073
+msgid "Moving Prev in this window."
+msgstr ""
+
+#: info/session.c:1030
+msgid "No `Prev' or `Up' for this node within this document."
+msgstr ""
+
+#: info/session.c:1034
+msgid "Moving Up in this window."
+msgstr ""
+
+#: info/session.c:1084
+msgid "Moving to `Prev's last menu item."
+msgstr ""
+
+#: info/session.c:1095
+msgid "Move forwards or down through node structure"
+msgstr ""
+
+#: info/session.c:1111
+msgid "Move backwards or up through node structure"
+msgstr ""
+
+#: info/session.c:1205
+msgid "Scroll forward in this window"
+msgstr ""
+
+#: info/session.c:1213
+msgid "Scroll forward in this window and set default window size"
+msgstr ""
+
+#: info/session.c:1221
+msgid "Scroll forward in this window staying within node"
+msgstr ""
+
+#: info/session.c:1229
+msgid ""
+"Scroll forward in this window staying within node and set default window size"
+msgstr ""
+
+#: info/session.c:1237
+msgid "Scroll backward in this window"
+msgstr ""
+
+#: info/session.c:1245
+msgid "Scroll backward in this window and set default window size"
+msgstr ""
+
+#: info/session.c:1254
+msgid "Scroll backward in this window staying within node"
+msgstr ""
+
+#: info/session.c:1262
+msgid ""
+"Scroll backward in this window staying within node and set default window "
+"size"
+msgstr ""
+
+#: info/session.c:1270
+msgid "Move to the start of this node"
+msgstr ""
+
+#: info/session.c:1277
+msgid "Move to the end of this node"
+msgstr ""
+
+#: info/session.c:1284
+msgid "Scroll down by lines"
+msgstr ""
+
+#: info/session.c:1301
+msgid "Scroll up by lines"
+msgstr ""
+
+#: info/session.c:1319
+msgid "Scroll down by half screen size"
+msgstr ""
+
+#: info/session.c:1345
+msgid "Scroll up by half screen size"
+msgstr ""
+
+#: info/session.c:1374
+msgid "Select the next window"
+msgstr ""
+
+#: info/session.c:1413
+msgid "Select the previous window"
+msgstr ""
+
+#: info/session.c:1464
+msgid "Split the current window"
+msgstr ""
+
+#: info/session.c:1545
+msgid "Delete the current window"
+msgstr ""
+
+#: info/session.c:1553
+msgid "Cannot delete a permanent window"
+msgstr ""
+
+#: info/session.c:1585
+msgid "Delete all other windows"
+msgstr ""
+
+#: info/session.c:1631
+msgid "Scroll the other window"
+msgstr ""
+
+#: info/session.c:1652
+msgid "Scroll the other window backward"
+msgstr ""
+
+#: info/session.c:1658
+msgid "Grow (or shrink) this window"
+msgstr ""
+
+#: info/session.c:1669
+msgid "Divide the available screen space among the visible windows"
+msgstr ""
+
+#: info/session.c:1676
+msgid "Toggle the state of line wrapping in the current window"
+msgstr ""
+
+#: info/session.c:1848
+msgid "Select the Next node"
+msgstr ""
+
+#: info/session.c:1856
+msgid "Select the Prev node"
+msgstr ""
+
+#: info/session.c:1864
+msgid "Select the Up node"
+msgstr ""
+
+#: info/session.c:1871
+msgid "Select the last node in this file"
+msgstr ""
+
+#: info/session.c:1898 info/session.c:1931
+msgid "This window has no additional nodes"
+msgstr ""
+
+#: info/session.c:1904
+msgid "Select the first node in this file"
+msgstr ""
+
+#: info/session.c:1938
+msgid "Select the last item in this node's menu"
+msgstr ""
+
+#: info/session.c:1944
+msgid "Select this menu item"
+msgstr ""
+
+#: info/session.c:1977
+#, c-format
+msgid "There aren't %d items in this menu."
+msgstr ""
+
+#: info/session.c:2171 info/session.c:2172
+#, c-format
+msgid "Menu item (%s): "
+msgstr ""
+
+#: info/session.c:2175
+msgid "Menu item: "
+msgstr ""
+
+#: info/session.c:2182 info/session.c:2183
+#, c-format
+msgid "Follow xref (%s): "
+msgstr ""
+
+#: info/session.c:2186
+msgid "Follow xref: "
+msgstr ""
+
+#: info/session.c:2315
+msgid "Read a menu item and select its node"
+msgstr ""
+
+#: info/session.c:2323
+msgid "Read a footnote or cross reference and select its node"
+msgstr ""
+
+#: info/session.c:2329
+msgid "Move to the start of this node's menu"
+msgstr ""
+
+#: info/session.c:2353
+msgid "Visit as many menu items at once as possible"
+msgstr ""
+
+#: info/session.c:2381
+msgid "Read a node name and select it"
+msgstr ""
+
+#: info/session.c:2436 info/session.c:2441
+msgid "Goto node: "
+msgstr ""
+
+#: info/session.c:2505
+#, c-format
+msgid "No menu in node `%s'."
+msgstr ""
+
+#: info/session.c:2551
+#, c-format
+msgid "No menu item `%s' in node `%s'."
+msgstr ""
+
+#: info/session.c:2581
+#, c-format
+msgid "Unable to find node referenced by `%s' in `%s'."
+msgstr ""
+
+#: info/session.c:2631
+msgid "Read a list of menus starting from dir and follow them"
+msgstr ""
+
+#: info/session.c:2633
+msgid "Follow menus: "
+msgstr ""
+
+#: info/session.c:2826
+msgid "Find the node describing program invocation"
+msgstr ""
+
+#: info/session.c:2828
+#, c-format
+msgid "Find Invocation node of [%s]: "
+msgstr ""
+
+#: info/session.c:2866
+msgid "Read a manpage reference and select it"
+msgstr ""
+
+#: info/session.c:2870
+msgid "Get Manpage: "
+msgstr ""
+
+#: info/session.c:2900
+msgid "Select the node `Top' in this file"
+msgstr ""
+
+#: info/session.c:2906
+msgid "Select the node `(dir)'"
+msgstr ""
+
+#: info/session.c:2923 info/session.c:2925
+#, c-format
+msgid "Kill node (%s): "
+msgstr ""
+
+#: info/session.c:2977
+#, c-format
+msgid "Cannot kill node `%s'"
+msgstr ""
+
+#: info/session.c:2987
+msgid "Cannot kill the last node"
+msgstr ""
+
+#: info/session.c:3073
+msgid "Select the most recently selected node"
+msgstr ""
+
+#: info/session.c:3079
+msgid "Kill this node"
+msgstr ""
+
+#: info/session.c:3087
+msgid "Read the name of a file and select it"
+msgstr ""
+
+#: info/session.c:3091
+msgid "Find file: "
+msgstr ""
+
+#: info/session.c:3108
+#, c-format
+msgid "Cannot find `%s'."
+msgstr ""
+
+#: info/session.c:3151 info/session.c:3269
+#, c-format
+msgid "Could not create output file `%s'."
+msgstr ""
+
+#: info/session.c:3165 info/session.c:3287 info/session.c:3347
+msgid "Done."
+msgstr ""
+
+#: info/session.c:3220
+#, c-format
+msgid "Writing node %s..."
+msgstr ""
+
+#: info/session.c:3296
+msgid "Pipe the contents of this node through INFO_PRINT_COMMAND"
+msgstr ""
+
+#: info/session.c:3331
+#, c-format
+msgid "Cannot open pipe to `%s'."
+msgstr ""
+
+#: info/session.c:3337
+#, c-format
+msgid "Printing node %s..."
+msgstr ""
+
+#: info/session.c:3567
+#, c-format
+msgid "Searching subfile %s ..."
+msgstr ""
+
+#: info/session.c:3619
+msgid "Read a string and search for it case-sensitively"
+msgstr ""
+
+#: info/session.c:3626
+msgid "Read a string and search for it"
+msgstr ""
+
+#: info/session.c:3634
+msgid "Read a string and search backward for it"
+msgstr ""
+
+#: info/session.c:3670 info/session.c:3677
+#, c-format
+msgid "%s%sfor string [%s]: "
+msgstr ""
+
+#: info/session.c:3671 info/session.c:3678
+msgid "Search backward"
+msgstr ""
+
+#: info/session.c:3672 info/session.c:3678
+msgid "Search"
+msgstr ""
+
+#: info/session.c:3673 info/session.c:3679
+msgid " case-sensitively "
+msgstr ""
+
+#: info/session.c:3674 info/session.c:3679
+msgid " "
+msgstr ""
+
+#: info/session.c:3718
+msgid "Search failed."
+msgstr ""
+
+#: info/session.c:3736
+msgid "Repeat last search in the same direction"
+msgstr ""
+
+#: info/session.c:3739 info/session.c:3749
+msgid "No previous search string"
+msgstr ""
+
+#: info/session.c:3746
+msgid "Repeat last search in the reverse direction"
+msgstr ""
+
+#: info/session.c:3765 info/session.c:3771
+msgid "Search interactively for a string as you type it"
+msgstr ""
+
+#: info/session.c:3851
+msgid "I-search backward: "
+msgstr ""
+
+#: info/session.c:3853
+msgid "I-search: "
+msgstr ""
+
+#: info/session.c:3878 info/session.c:3880
+msgid "Failing "
+msgstr ""
+
+#: info/session.c:4340
+msgid "Move to the previous cross reference"
+msgstr ""
+
+#: info/session.c:4349
+msgid "Move to the next cross reference"
+msgstr ""
+
+#: info/session.c:4359
+msgid "Select reference or menu item appearing on this line"
+msgstr ""
+
+#: info/session.c:4382
+msgid "Cancel current operation"
+msgstr ""
+
+#: info/session.c:4389
+msgid "Quit"
+msgstr ""
+
+#: info/session.c:4398
+msgid "Move the cursor to a specific line of the window"
+msgstr ""
+
+#: info/session.c:4430
+msgid "Redraw the display"
+msgstr ""
+
+#: info/session.c:4467
+msgid "Quit using Info"
+msgstr ""
+
+#: info/session.c:4480
+msgid "Run command bound to this key's lowercase variant"
+msgstr ""
+
+#: info/session.c:4491
+#, c-format
+msgid "Unknown command (%s)."
+msgstr ""
+
+#: info/session.c:4494
+#, c-format
+msgid "\"%s\" is invalid"
+msgstr ""
+
+#: info/session.c:4495
+#, c-format
+msgid "`%s' is invalid"
+msgstr ""
+
+#: info/session.c:4709
+msgid "Add this digit to the current numeric argument"
+msgstr ""
+
+#: info/session.c:4718
+msgid "Start (or multiply by 4) the current numeric argument"
+msgstr ""
+
+#: info/session.c:4733
+msgid "Internally used by \\[universal-argument]"
+msgstr ""
+
+#: info/tilde.c:338
+#, 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:64
+msgid "The number lines to scroll when the cursor moves out of the window"
+msgstr ""
+
+#: info/variables.c:68
+msgid "When \"On\", Info accepts and displays ISO Latin characters"
+msgstr ""
+
+#: info/variables.c:74
+msgid "Explain the use of a variable"
+msgstr ""
+
+#: info/variables.c:80
+msgid "Describe variable: "
+msgstr ""
+
+#: info/variables.c:99
+msgid "Set the value of an Info variable"
+msgstr ""
+
+#: info/variables.c:105
+msgid "Set variable: "
+msgstr ""
+
+#: info/variables.c:123
+#, c-format
+msgid "Set %s to value (%d): "
+msgstr ""
+
+#: info/variables.c:164
+#, c-format
+msgid "Set %s to value (%s): "
+msgstr ""
+
+#: info/window.c:1138
+msgid "--*** Tags out of Date ***"
+msgstr ""
+
+#: info/window.c:1149
+msgid "-----Info: (), lines ----, "
+msgstr ""
+
+#: info/window.c:1156
+#, c-format
+msgid "-%s---Info: %s, %d lines --%s--"
+msgstr ""
+
+#: info/window.c:1160
+#, c-format
+msgid "-%s%s-Info: (%s)%s, %d lines --%s--"
+msgstr ""
+
+#: info/window.c:1167
+#, c-format
+msgid " Subfile: %s"
+msgstr ""
+
+#: lib/getopt.c:551 lib/getopt.c:570
+#, c-format
+msgid "%s: option `%s' is ambiguous\n"
+msgstr ""
+
+#: lib/getopt.c:603 lib/getopt.c:607
+#, c-format
+msgid "%s: option `--%s' doesn't allow an argument\n"
+msgstr ""
+
+#: lib/getopt.c:616 lib/getopt.c:621
+#, c-format
+msgid "%s: option `%c%s' doesn't allow an argument\n"
+msgstr ""
+
+#: lib/getopt.c:667 lib/getopt.c:689 lib/getopt.c:1020 lib/getopt.c:1042
+#, c-format
+msgid "%s: option `%s' requires an argument\n"
+msgstr ""
+
+#: lib/getopt.c:727 lib/getopt.c:730
+#, c-format
+msgid "%s: unrecognized option `--%s'\n"
+msgstr ""
+
+#: lib/getopt.c:738 lib/getopt.c:741
+#, c-format
+msgid "%s: unrecognized option `%c%s'\n"
+msgstr ""
+
+#: lib/getopt.c:796 lib/getopt.c:799
+#, c-format
+msgid "%s: illegal option -- %c\n"
+msgstr ""
+
+#: lib/getopt.c:805 lib/getopt.c:808
+#, c-format
+msgid "%s: invalid option -- %c\n"
+msgstr ""
+
+#: lib/getopt.c:863 lib/getopt.c:882 lib/getopt.c:1095 lib/getopt.c:1116
+#, c-format
+msgid "%s: option requires an argument -- %c\n"
+msgstr ""
+
+#: lib/getopt.c:935 lib/getopt.c:954
+#, c-format
+msgid "%s: option `-W %s' is ambiguous\n"
+msgstr ""
+
+#: lib/getopt.c:978 lib/getopt.c:999
+#, c-format
+msgid "%s: option `-W %s' doesn't allow an argument\n"
+msgstr ""
+
+#: makeinfo/cmds.c:520 makeinfo/cmds.c:542
+#, c-format
+msgid "arguments to @%s ignored"
+msgstr ""
+
+#: makeinfo/cmds.c:585
+msgid "January"
+msgstr "Jänner"
+
+#: makeinfo/cmds.c:585
+msgid "February"
+msgstr ""
+
+#: makeinfo/cmds.c:585
+msgid "March"
+msgstr ""
+
+#: makeinfo/cmds.c:585
+msgid "April"
+msgstr ""
+
+#: makeinfo/cmds.c:585
+msgid "May"
+msgstr ""
+
+#: makeinfo/cmds.c:586
+msgid "June"
+msgstr ""
+
+#: makeinfo/cmds.c:586
+msgid "July"
+msgstr ""
+
+#: makeinfo/cmds.c:586
+msgid "August"
+msgstr ""
+
+#: makeinfo/cmds.c:586
+msgid "September"
+msgstr ""
+
+#: makeinfo/cmds.c:586
+msgid "October"
+msgstr ""
+
+#: makeinfo/cmds.c:587
+msgid "November"
+msgstr ""
+
+#: makeinfo/cmds.c:587
+msgid "December"
+msgstr ""
+
+#: makeinfo/cmds.c:936
+#, c-format
+msgid "unlikely character %c in @var"
+msgstr ""
+
+#: makeinfo/cmds.c:979
+msgid "@sc argument all uppercase, thus no effect"
+msgstr ""
+
+#: makeinfo/cmds.c:1034
+#, c-format
+msgid "`{' expected, but saw `%c'"
+msgstr ""
+
+#: makeinfo/cmds.c:1074
+msgid "end of file inside verb block"
+msgstr ""
+
+#: makeinfo/cmds.c:1082
+#, c-format
+msgid "`}' expected, but saw `%c'"
+msgstr ""
+
+#: makeinfo/cmds.c:1112
+msgid ""
+"@strong{Note...} produces a spurious cross-reference in Info; reword to "
+"avoid that"
+msgstr ""
+
+#: makeinfo/cmds.c:1305
+#, c-format
+msgid "%c%s is obsolete"
+msgstr ""
+
+#: makeinfo/cmds.c:1414
+#, c-format
+msgid "@sp requires a positive numeric argument, not `%s'"
+msgstr ""
+
+#: makeinfo/cmds.c:1763 makeinfo/cmds.c:1819 makeinfo/footnote.c:82
+#, c-format
+msgid "Bad argument to %c%s"
+msgstr ""
+
+#: makeinfo/cmds.c:1773 makeinfo/makeinfo.c:4142
+msgid "asis"
+msgstr ""
+
+#: makeinfo/cmds.c:1775 makeinfo/cmds.c:1805 makeinfo/makeinfo.c:4144
+msgid "none"
+msgstr ""
+
+#: makeinfo/cmds.c:1789
+#, c-format
+msgid "Bad argument to @%s"
+msgstr ""
+
+#: makeinfo/cmds.c:1803
+msgid "insert"
+msgstr ""
+
+#: makeinfo/defun.c:84
+msgid "Missing `}' in @def arg"
+msgstr ""
+
+#: makeinfo/defun.c:403
+msgid "Function"
+msgstr ""
+
+#: makeinfo/defun.c:406
+msgid "Macro"
+msgstr ""
+
+#: makeinfo/defun.c:409
+msgid "Special Form"
+msgstr ""
+
+#: makeinfo/defun.c:413
+msgid "Variable"
+msgstr ""
+
+#: makeinfo/defun.c:416
+msgid "User Option"
+msgstr ""
+
+#: makeinfo/defun.c:420
+msgid "Instance Variable"
+msgstr ""
+
+#: makeinfo/defun.c:424
+msgid "Method"
+msgstr ""
+
+#: makeinfo/defun.c:500 makeinfo/defun.c:505 makeinfo/defun.c:545
+#: makeinfo/defun.c:644 makeinfo/xml.c:2229
+msgid "of"
+msgstr ""
+
+#: makeinfo/defun.c:509 makeinfo/defun.c:513 makeinfo/defun.c:517
+#: makeinfo/defun.c:551 makeinfo/defun.c:650 makeinfo/xml.c:2234
+msgid "on"
+msgstr ""
+
+#: makeinfo/defun.c:711
+#, c-format
+msgid "Must be in `@%s' environment to use `@%s'"
+msgstr ""
+
+#: makeinfo/files.c:435
+#, c-format
+msgid "%s: getwd: %s, %s\n"
+msgstr ""
+
+#: makeinfo/files.c:638
+#, c-format
+msgid "`%s' omitted before output filename"
+msgstr ""
+
+#: makeinfo/files.c:646
+#, c-format
+msgid "`%s' omitted since writing to stdout"
+msgstr ""
+
+#: makeinfo/files.c:694
+msgid "Output buffer not empty."
+msgstr ""
+
+#: makeinfo/footnote.c:150
+#, c-format
+msgid "`%c%s' needs an argument `{...}', not just `%s'"
+msgstr ""
+
+#: makeinfo/footnote.c:165
+#, c-format
+msgid "No closing brace for footnote `%s'"
+msgstr ""
+
+#: makeinfo/footnote.c:198
+msgid "Footnote defined without parent node"
+msgstr ""
+
+#: makeinfo/footnote.c:210
+msgid "Footnotes inside footnotes are not allowed"
+msgstr ""
+
+#: makeinfo/footnote.c:302 makeinfo/index.c:189
+msgid "Footnotes"
+msgstr ""
+
+#: makeinfo/html.c:87
+#, c-format
+msgid "%s: could not open --css-file: %s"
+msgstr ""
+
+#: makeinfo/html.c:172
+#, c-format
+msgid "%s:%d: --css-file ended in comment"
+msgstr ""
+
+#: makeinfo/html.c:207
+msgid "Untitled"
+msgstr ""
+
+#: makeinfo/html.c:422
+msgid "[unexpected] no html tag to pop"
+msgstr ""
+
+#: makeinfo/html.c:752
+#, c-format
+msgid "[unexpected] invalid node name: `%s'"
+msgstr ""
+
+#: makeinfo/index.c:169
+#, c-format
+msgid "Unknown index `%s'"
+msgstr ""
+
+#: makeinfo/index.c:234
+#, c-format
+msgid "Info cannot handle `:' in index entry `%s'"
+msgstr ""
+
+#: makeinfo/index.c:412
+#, c-format
+msgid "Index `%s' already exists"
+msgstr ""
+
+#: makeinfo/index.c:455
+#, c-format
+msgid "Unknown index `%s' and/or `%s' in @synindex"
+msgstr ""
+
+#: makeinfo/index.c:661
+msgid "(line )"
+msgstr ""
+
+#: makeinfo/index.c:669
+#, c-format
+msgid "(line %*d)"
+msgstr ""
+
+#: makeinfo/index.c:750
+#, c-format
+msgid "Unknown index `%s' in @printindex"
+msgstr ""
+
+#: makeinfo/index.c:819
+#, c-format
+msgid "Entry for index `%s' outside of any node"
+msgstr ""
+
+#: makeinfo/index.c:822 makeinfo/index.c:858
+msgid "(outside of any node)"
+msgstr ""
+
+#: makeinfo/index.c:919 makeinfo/index.c:925
+msgid "See "
+msgstr ""
+
+#: makeinfo/insertion.c:160
+msgid "@item not allowed in argument to @itemize"
+msgstr ""
+
+#: makeinfo/insertion.c:238
+msgid "Broken-Type in insertion_type_pname"
+msgstr ""
+
+#: makeinfo/insertion.c:334
+msgid "Enumeration stack overflow"
+msgstr ""
+
+#: makeinfo/insertion.c:366
+#, c-format
+msgid "lettering overflow, restarting at %c"
+msgstr ""
+
+#: makeinfo/insertion.c:631
+#, c-format
+msgid "%s requires an argument: the formatter for %citem"
+msgstr ""
+
+#: makeinfo/insertion.c:719
+#, c-format
+msgid "%cfloat environments cannot be nested"
+msgstr ""
+
+#: makeinfo/insertion.c:973
+#, c-format
+msgid "`@end' expected `%s', but saw `%s'"
+msgstr ""
+
+#: makeinfo/insertion.c:1337
+#, c-format
+msgid "No matching `%cend %s'"
+msgstr ""
+
+#: makeinfo/insertion.c:1592
+#, c-format
+msgid "%s requires letter or digit"
+msgstr ""
+
+#: makeinfo/insertion.c:1687
+msgid "end of file inside verbatim block"
+msgstr ""
+
+#: makeinfo/insertion.c:1913
+#, c-format
+msgid "@%s not meaningful outside `@float' environment"
+msgstr ""
+
+#: makeinfo/insertion.c:1949
+msgid "@menu seen before first @node, creating `Top' node"
+msgstr ""
+
+#: makeinfo/insertion.c:1950
+msgid ""
+"perhaps your @top node should be wrapped in @ifnottex rather than @ifinfo?"
+msgstr ""
+
+#: makeinfo/insertion.c:1962
+msgid "@detailmenu seen before first node, creating `Top' node"
+msgstr ""
+
+#: makeinfo/insertion.c:2018
+#, c-format
+msgid "@%s not meaningful outside `@titlepage' and `@quotation' environments"
+msgstr ""
+
+#: makeinfo/insertion.c:2032
+#, c-format
+msgid "@%s not meaningful outside `@titlepage' environment"
+msgstr ""
+
+#: makeinfo/insertion.c:2063
+#, c-format
+msgid "Unmatched `%c%s'"
+msgstr ""
+
+#: makeinfo/insertion.c:2068
+#, c-format
+msgid "`%c%s' needs something after it"
+msgstr ""
+
+#: makeinfo/insertion.c:2074
+#, c-format
+msgid "Bad argument `%s' to `@%s', using `%s'"
+msgstr ""
+
+#: makeinfo/insertion.c:2171
+#, c-format
+msgid "@%s not meaningful inside `@%s' block"
+msgstr ""
+
+#: makeinfo/insertion.c:2180
+#, c-format
+msgid "@itemx not meaningful inside `%s' block"
+msgstr ""
+
+#: makeinfo/insertion.c:2356
+#, c-format
+msgid "%c%s found outside of an insertion block"
+msgstr ""
+
+#: makeinfo/lang.c:580
+#, c-format
+msgid "%s is not a valid ISO 639 language code"
+msgstr ""
+
+#: makeinfo/lang.c:655
+#, c-format
+msgid "unrecognized encoding name `%s'"
+msgstr ""
+
+#: makeinfo/lang.c:663
+#, c-format
+msgid "sorry, encoding `%s' not supported"
+msgstr ""
+
+#: makeinfo/lang.c:715
+#, c-format
+msgid "invalid encoded character `%s'"
+msgstr ""
+
+#: makeinfo/lang.c:1009
+#, c-format
+msgid "%c%s expects `i' or `j' as argument, not `%c'"
+msgstr ""
+
+#: makeinfo/lang.c:1013
+#, 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:355
+#, 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:586
+#, c-format
+msgid "%cend macro not found"
+msgstr ""
+
+#: makeinfo/macro.c:624
+msgid "@quote-arg only useful for single-argument macros"
+msgstr ""
+
+#: makeinfo/macro.c:660
+#, c-format
+msgid "mismatched @end %s with @%s"
+msgstr ""
+
+#: makeinfo/makeinfo.c:184
+#, c-format
+msgid "Too many errors! Gave up.\n"
+msgstr ""
+
+#: makeinfo/makeinfo.c:302
+#, c-format
+msgid "%s:%d: warning: "
+msgstr ""
+
+#: makeinfo/makeinfo.c:321 makeinfo/makeinfo.c:2260
+#, c-format
+msgid "Misplaced %c"
+msgstr ""
+
+#: makeinfo/makeinfo.c:340
+#, c-format
+msgid "Try `%s --help' for more information.\n"
+msgstr ""
+
+#: makeinfo/makeinfo.c:343
+#, c-format
+msgid "Usage: %s [OPTION]... TEXINFO-FILE...\n"
+msgstr ""
+
+#: makeinfo/makeinfo.c:346
+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:350
+#, c-format
+msgid ""
+"General options:\n"
+" --error-limit=NUM quit after NUM errors (default %d).\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"
+" --reference-limit=NUM warn about at most NUM references (default %"
+"d).\n"
+" -v, --verbose explain what is being done.\n"
+" --version display version information and exit.\n"
+msgstr ""
+
+#: makeinfo/makeinfo.c:364
+#, 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:372
+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 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 (directory if split HTML),\n"
+msgstr ""
+
+#: makeinfo/makeinfo.c:386
+#, c-format
+msgid ""
+"Options for Info and plain text:\n"
+" --enable-encoding output accented and special characters in\n"
+" Info output based on @documentencoding.\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\n"
+" in which they are defined (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:403
+msgid ""
+"Options for HTML:\n"
+" --css-include=FILE include FILE in HTML <style> output;\n"
+" read stdin if FILE is -.\n"
+msgstr ""
+
+#: makeinfo/makeinfo.c:409
+#, 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:416
+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:425
+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:444
+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:452
+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:603
+#, c-format
+msgid "%s: Ignoring unrecognized TEXINFO_OUTPUT_FORMAT value `%s'.\n"
+msgstr ""
+
+#: makeinfo/makeinfo.c:647 makeinfo/makeinfo.c:673 makeinfo/makeinfo.c:692
+#: makeinfo/makeinfo.c:722 makeinfo/makeinfo.c:743
+#, c-format
+msgid "%s: %s arg must be numeric, not `%s'.\n"
+msgstr ""
+
+#: makeinfo/makeinfo.c:660
+#, c-format
+msgid "%s: could not open macro expansion output `%s'"
+msgstr ""
+
+#: makeinfo/makeinfo.c:665
+#, c-format
+msgid "%s: ignoring second macro expansion output `%s'.\n"
+msgstr ""
+
+#: makeinfo/makeinfo.c:707
+#, c-format
+msgid "%s: --paragraph-indent arg must be numeric/`none'/`asis', not `%s'.\n"
+msgstr ""
+
+#: makeinfo/makeinfo.c:732
+#, c-format
+msgid "%s: --footnote-style arg must be `separate' or `end', not `%s'.\n"
+msgstr ""
+
+#: makeinfo/makeinfo.c:806
+#, c-format
+msgid "%s: missing file argument.\n"
+msgstr ""
+
+#: makeinfo/makeinfo.c:997 makeinfo/makeinfo.c:3991
+#, c-format
+msgid "Multiline command %c%s used improperly"
+msgstr ""
+
+#: makeinfo/makeinfo.c:1000
+#, c-format
+msgid "Expected `%s'"
+msgstr ""
+
+#: makeinfo/makeinfo.c:1479
+#, c-format
+msgid "Can't create directory `%s': %s"
+msgstr ""
+
+#: makeinfo/makeinfo.c:1525
+#, c-format
+msgid "No `%s' found in `%s'"
+msgstr ""
+
+#: makeinfo/makeinfo.c:1605
+#, c-format
+msgid "%s: Skipping macro expansion to stdout as Info output is going there.\n"
+msgstr ""
+
+#: makeinfo/makeinfo.c:1638
+#, c-format
+msgid "Making %s file `%s' from `%s'.\n"
+msgstr ""
+
+#: makeinfo/makeinfo.c:1673
+#, c-format
+msgid "This is %s, produced by makeinfo version %s from %s.\n"
+msgstr ""
+
+#: makeinfo/makeinfo.c:1709
+#, c-format
+msgid ""
+"%s: Removing macro output file `%s' due to errors; use --force to preserve.\n"
+msgstr ""
+
+#: makeinfo/makeinfo.c:1773
+#, c-format
+msgid "%s: Removing output file `%s' due to errors; use --force to preserve.\n"
+msgstr ""
+
+#: makeinfo/makeinfo.c:2034
+#, c-format
+msgid "Unknown command `%s'"
+msgstr ""
+
+#: makeinfo/makeinfo.c:2056
+#, c-format
+msgid "Use braces to give a command as an argument to @%s"
+msgstr ""
+
+#: makeinfo/makeinfo.c:2314
+#, c-format
+msgid "%c%s expected braces"
+msgstr ""
+
+#: makeinfo/makeinfo.c:2327
+msgid "Unmatched }"
+msgstr ""
+
+#: makeinfo/makeinfo.c:2375
+msgid "NO_NAME!"
+msgstr ""
+
+#: makeinfo/makeinfo.c:2396
+#, c-format
+msgid "%c%s missing close brace"
+msgstr ""
+
+#: makeinfo/makeinfo.c:3309
+#, c-format
+msgid "@image file `%s' (for HTML) not readable: %s"
+msgstr ""
+
+#: makeinfo/makeinfo.c:3315
+#, c-format
+msgid "No such file `%s'"
+msgstr ""
+
+#: makeinfo/makeinfo.c:3447
+#, c-format
+msgid "@image file `%s' (for text) unreadable: %s"
+msgstr ""
+
+#: makeinfo/makeinfo.c:3456
+msgid "@image missing filename argument"
+msgstr ""
+
+#: makeinfo/makeinfo.c:3675
+#, c-format
+msgid "undefined flag: %s"
+msgstr ""
+
+#: makeinfo/makeinfo.c:3676
+#, c-format
+msgid "{No value for `%s'}"
+msgstr ""
+
+#: makeinfo/makeinfo.c:3728
+#, c-format
+msgid "%c%s requires a name"
+msgstr ""
+
+#: makeinfo/makeinfo.c:3834
+#, c-format
+msgid "Reached eof before matching @end %s"
+msgstr ""
+
+#: makeinfo/makeinfo.c:4082
+#, 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:254
+#, c-format
+msgid "ignoring stray text `%s' after @multitable"
+msgstr ""
+
+#: makeinfo/multi.c:393
+#, c-format
+msgid "Too many columns in multitable item (max %d)"
+msgstr ""
+
+#: makeinfo/multi.c:555
+#, c-format
+msgid "[unexpected] cannot select column #%d in multitable"
+msgstr ""
+
+#: makeinfo/multi.c:584
+msgid "ignoring @tab outside of multitable"
+msgstr ""
+
+#: makeinfo/multi.c:632
+#, c-format
+msgid "** Multicolumn output from last row:\n"
+msgstr ""
+
+#: makeinfo/multi.c:635
+#, c-format
+msgid "* column #%d: output = %s\n"
+msgstr ""
+
+#: makeinfo/node.c:280
+#, c-format
+msgid "Node `%s' previously defined at line %d"
+msgstr ""
+
+#: makeinfo/node.c:648
+#, c-format
+msgid "Formatting node %s...\n"
+msgstr ""
+
+#: makeinfo/node.c:716
+#, c-format
+msgid "Node `%s' requires a sectioning command (e.g., %c%s)"
+msgstr ""
+
+#: makeinfo/node.c:879
+#, c-format
+msgid "No node name specified for `%c%s' command"
+msgstr ""
+
+#: makeinfo/node.c:920 makeinfo/node.c:1151
+#, c-format
+msgid "Anchor `%s' and node `%s' map to the same file name"
+msgstr ""
+
+#: makeinfo/node.c:923
+msgid "This @anchor command ignored; references to it will not work"
+msgstr ""
+
+#: makeinfo/node.c:925 makeinfo/node.c:1154
+msgid "Rename this anchor or use the `--no-split' option"
+msgstr ""
+
+#: makeinfo/node.c:955
+#, c-format
+msgid "Unexpected string at end of split-HTML file `%s'"
+msgstr ""
+
+#: makeinfo/node.c:991
+msgid "Next:"
+msgstr ""
+
+#: makeinfo/node.c:1007
+msgid "Previous:"
+msgstr ""
+
+#: makeinfo/node.c:1021
+msgid "Up:"
+msgstr ""
+
+#: makeinfo/node.c:1148
+#, c-format
+msgid "Anchors `%s' and `%s' map to the same file name"
+msgstr ""
+
+#: makeinfo/node.c:1153
+msgid "@anchor command ignored; references to it will not work"
+msgstr ""
+
+#: makeinfo/node.c:1347
+#, c-format
+msgid "%s reference to nonexistent node `%s' (perhaps incorrect sectioning?)"
+msgstr ""
+
+#: makeinfo/node.c:1363
+msgid "Menu"
+msgstr ""
+
+#: makeinfo/node.c:1365
+msgid "Cross"
+msgstr ""
+
+#: makeinfo/node.c:1447
+#, c-format
+msgid "Next field of node `%s' not pointed to (perhaps incorrect sectioning?)"
+msgstr ""
+
+#: makeinfo/node.c:1450
+#, c-format
+msgid "This node (%s) has the bad Prev"
+msgstr ""
+
+#: makeinfo/node.c:1462
+msgid "Prev"
+msgstr ""
+
+#: makeinfo/node.c:1505
+#, c-format
+msgid "Prev field of node `%s' not pointed to"
+msgstr ""
+
+#: makeinfo/node.c:1509
+#, c-format
+msgid "This node (%s) has the bad Next"
+msgstr ""
+
+#: makeinfo/node.c:1521
+#, c-format
+msgid "`%s' has no Up field (perhaps incorrect sectioning?)"
+msgstr ""
+
+#: makeinfo/node.c:1524
+msgid "Up"
+msgstr ""
+
+#: makeinfo/node.c:1590
+#, c-format
+msgid "Node `%s' lacks menu item for `%s' despite being its Up target"
+msgstr ""
+
+#: makeinfo/node.c:1619
+#, c-format
+msgid "node `%s' has been referenced %d times"
+msgstr ""
+
+#: makeinfo/node.c:1633
+#, c-format
+msgid "unreferenced node `%s'"
+msgstr ""
+
+#: makeinfo/node.c:1723
+#, c-format
+msgid "Removing %s\n"
+msgstr ""
+
+#: makeinfo/node.c:1727
+#, 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:562
+#, c-format
+msgid "Internal error (search_sectioning) \"%s\"!"
+msgstr ""
+
+#: makeinfo/sectioning.c:623
+#, c-format
+msgid "%c%s is obsolete; use %c%s instead"
+msgstr ""
+
+#: makeinfo/sectioning.c:639
+#, c-format
+msgid "Node with %ctop as a section already exists"
+msgstr ""
+
+#: makeinfo/sectioning.c:647
+#, c-format
+msgid "Here is the %ctop node"
+msgstr ""
+
+#: makeinfo/sectioning.c:663
+#, c-format
+msgid "%ctop used before %cnode, defaulting to %s"
+msgstr ""
+
+#: makeinfo/toc.c:197 makeinfo/toc.c:271 makeinfo/toc.c:273
+msgid "Table of Contents"
+msgstr ""
+
+#: makeinfo/toc.c:304 makeinfo/toc.c:337 makeinfo/toc.c:339
+msgid "Short Contents"
+msgstr ""
+
+#: makeinfo/xml.c:1605
+#, c-format
+msgid "@image file `%s' unreadable: %s"
+msgstr ""
+
+#: makeinfo/xml.c:2097
+msgid ""
+"@headitem as the last item of @multitable produces invalid Docbook documents"
+msgstr ""
+
+#: util/install-info.c:154
+#, c-format
+msgid "%s: warning: "
+msgstr ""
+
+#: util/install-info.c:203
+#, c-format
+msgid " for %s"
+msgstr ""
+
+#: util/install-info.c:426
+#, c-format
+msgid "\tTry `%s --help' for a complete list of options.\n"
+msgstr ""
+
+#: util/install-info.c:434
+#, c-format
+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 ""
+
+#: util/install-info.c:488
+#, 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 ""
+
+#: util/install-info.c:513
+#, c-format
+msgid "%s: could not read (%s) and could not create (%s)\n"
+msgstr ""
+
+#: util/install-info.c:600
+#, c-format
+msgid "%s: empty file"
+msgstr ""
+
+#: util/install-info.c:913 util/install-info.c:953
+msgid "START-INFO-DIR-ENTRY without matching END-INFO-DIR-ENTRY"
+msgstr ""
+
+#: util/install-info.c:948
+msgid "END-INFO-DIR-ENTRY without matching START-INFO-DIR-ENTRY"
+msgstr ""
+
+#: util/install-info.c:1191 util/install-info.c:1201
+#, c-format
+msgid "%s: already have dir file: %s\n"
+msgstr ""
+
+#: util/install-info.c:1236
+#, c-format
+msgid "%s: Specify the Info file only once.\n"
+msgstr ""
+
+#: util/install-info.c:1284
+#, c-format
+msgid "excess command line argument `%s'"
+msgstr ""
+
+#: util/install-info.c:1288
+msgid "No input file specified; try --help for more information."
+msgstr ""
+
+#: util/install-info.c:1291
+msgid "No dir file specified; try --help for more information."
+msgstr ""
+
+#: util/install-info.c:1313
+#, c-format
+msgid "no info dir entry in `%s'"
+msgstr ""
+
+#: util/install-info.c:1426
+#, c-format
+msgid "menu item `%s' already exists, for file `%s'"
+msgstr ""
+
+#: util/install-info.c:1449
+#, c-format
+msgid "no entries found for `%s'; nothing deleted"
+msgstr ""
+
+#: util/texindex.c:252
+msgid "display this help and exit"
+msgstr ""
+
+#: util/texindex.c:254
+msgid "keep temporary files around after processing"
+msgstr ""
+
+#: util/texindex.c:256
+msgid "do not keep temporary files around after processing (default)"
+msgstr ""
+
+#: util/texindex.c:258
+msgid "send output to FILE"
+msgstr ""
+
+#: util/texindex.c:260
+msgid "display version information and exit"
+msgstr ""
+
+#: util/texindex.c:270
+#, c-format
+msgid "Usage: %s [OPTION]... FILE...\n"
+msgstr ""
+
+#: util/texindex.c:271
+#, c-format
+msgid "Generate a sorted index for each TeX output FILE.\n"
+msgstr ""
+
+#: util/texindex.c:274
+#, c-format
+msgid "Usually FILE... is specified as `foo.%c%c' for a document `foo.texi'.\n"
+msgstr ""
+
+#: util/texindex.c:276
+#, c-format
+msgid ""
+"\n"
+"Options:\n"
+msgstr ""
+
+#: util/texindex.c:876 util/texindex.c:910 util/texindex.c:983
+#: util/texindex.c:1011
+#, c-format
+msgid "%s: not a texinfo index file"
+msgstr ""
+
+#: util/texindex.c:968
+#, c-format
+msgid "failure reopening %s"
+msgstr ""
+
+#: util/texindex.c:1218
+#, c-format
+msgid "No page number in %s"
+msgstr ""
+
+#: util/texindex.c:1291
+#, c-format
+msgid "entry %s follows an entry with a secondary name"
+msgstr ""
diff --git a/macros/texinfo/contrib/texinfo-hu/texinfo/po/en@boldquot.header b/macros/texinfo/contrib/texinfo-hu/texinfo/po/en@boldquot.header
new file mode 100644
index 0000000000..fedb6a06d1
--- /dev/null
+++ b/macros/texinfo/contrib/texinfo-hu/texinfo/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/macros/texinfo/contrib/texinfo-hu/texinfo/po/en@quot.header b/macros/texinfo/contrib/texinfo-hu/texinfo/po/en@quot.header
new file mode 100644
index 0000000000..a9647fc35c
--- /dev/null
+++ b/macros/texinfo/contrib/texinfo-hu/texinfo/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/macros/texinfo/contrib/texinfo-hu/texinfo/po/eo.gmo b/macros/texinfo/contrib/texinfo-hu/texinfo/po/eo.gmo
new file mode 100644
index 0000000000..483829a6a6
--- /dev/null
+++ b/macros/texinfo/contrib/texinfo-hu/texinfo/po/eo.gmo
Binary files differ
diff --git a/macros/texinfo/contrib/texinfo-hu/texinfo/po/eo.po b/macros/texinfo/contrib/texinfo-hu/texinfo/po/eo.po
new file mode 100644
index 0000000000..9fef851929
--- /dev/null
+++ b/macros/texinfo/contrib/texinfo-hu/texinfo/po/eo.po
@@ -0,0 +1,3115 @@
+# Esperanto translations for GNU Texinfo-4.0.
+# Copyright (C) 1999, 2002 Free Software Foundation, Inc.
+# Sergio Pokrovskij <pok@iis.nsk.su>, 1999-2003
+#
+msgid ""
+msgstr ""
+"Project-Id-Version: texinfo 4.3c\n"
+"Report-Msgid-Bugs-To: bug-texinfo@gnu.org\n"
+"POT-Creation-Date: 2004-12-21 16:20-0800\n"
+"PO-Revision-Date: 2003-01-25 11:47+06:00\n"
+"Last-Translator: Sergio Pokrovskij <pok@iis.nsk.su>\n"
+"Language-Team: Esperanto <translation-team-eo@lists.sourceforge.net>\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=us-ascii\n"
+"Content-Transfer-Encoding: 8-bit\n"
+
+#: info/echo-area.c:284 info/session.c:689
+msgid "Move forward a character"
+msgstr "Unu signon antauxen"
+
+#: info/echo-area.c:296 info/session.c:705
+msgid "Move backward a character"
+msgstr "Unu signon malantauxen"
+
+#: info/echo-area.c:308
+msgid "Move to the start of this line"
+msgstr "Al la komenco de cxi tiu linio"
+
+#: info/echo-area.c:313
+msgid "Move to the end of this line"
+msgstr "Al la fino de cxi tiu linio"
+
+#: info/echo-area.c:321 info/session.c:723
+msgid "Move forward a word"
+msgstr "Unu vorton antauxen"
+
+#: info/echo-area.c:361 info/session.c:772
+msgid "Move backward a word"
+msgstr "Unu vorton malantauxen"
+
+#: info/echo-area.c:401
+msgid "Delete the character under the cursor"
+msgstr "Forigu la signon subkursoran"
+
+#: info/echo-area.c:431
+msgid "Delete the character behind the cursor"
+msgstr "Forigu la signon jxus antaux la kursoro"
+
+#: info/echo-area.c:452
+msgid "Cancel or quit operation"
+msgstr "Rezigno aux eliro"
+
+#: info/echo-area.c:467
+msgid "Accept (or force completion of) this line"
+msgstr "Akceptu (aux kompletigu) cxi tiun linion"
+
+#: info/echo-area.c:472
+msgid "Insert next character verbatim"
+msgstr "Ensxovu la tujan signon sensxangxe"
+
+#: info/echo-area.c:480
+msgid "Insert this character"
+msgstr "Ensxovu tiun signon"
+
+#: info/echo-area.c:498
+msgid "Insert a TAB character"
+msgstr "Ensxovu TAB-signon"
+
+#: info/echo-area.c:505
+msgid "Transpose characters at point"
+msgstr "Permutu la signojn cxe la kursoro"
+
+#: info/echo-area.c:556
+msgid "Yank back the contents of the last kill"
+msgstr "Engluu la enhavon de la lasta forvisxo"
+
+#: info/echo-area.c:563
+msgid "Kill ring is empty"
+msgstr "Visxringo malplenas"
+
+#: info/echo-area.c:576
+msgid "Yank back a previous kill"
+msgstr "Regluu antauxan forvisxajxon"
+
+#: info/echo-area.c:609
+msgid "Kill to the end of the line"
+msgstr "Forvisxu ekde la kursoro gxis la fino de la linio"
+
+#: info/echo-area.c:622
+msgid "Kill to the beginning of the line"
+msgstr "Forvisxu ekde la kursoro gxis la komenco de la linio"
+
+#: info/echo-area.c:634
+msgid "Kill the word following the cursor"
+msgstr "Forvisxu la vorton tuj post la kursoro"
+
+#: info/echo-area.c:653
+msgid "Kill the word preceding the cursor"
+msgstr "Forvisxu la vorton jxus antaux la kursoro"
+
+#: info/echo-area.c:868 info/echo-area.c:924
+msgid "No completions"
+msgstr "Kompletigo malestas"
+
+#: info/echo-area.c:870
+msgid "Not complete"
+msgstr "Nekompleta"
+
+#: info/echo-area.c:911
+msgid "List possible completions"
+msgstr "Eligu la eblajn kompletigojn"
+
+#: info/echo-area.c:928
+msgid "Sole completion"
+msgstr "Sola kompletigo"
+
+#: info/echo-area.c:937
+msgid "One completion:\n"
+msgstr "Unu kompletigo:\n"
+
+#: info/echo-area.c:938
+#, c-format
+msgid "%d completions:\n"
+msgstr "%d kompletigoj:\n"
+
+#: info/echo-area.c:1085
+msgid "Insert completion"
+msgstr "Ensxovu la kompletigon"
+
+#: info/echo-area.c:1220
+msgid "Building completions..."
+msgstr "Kompletigoj estas sercxataj ..."
+
+#: info/echo-area.c:1340
+msgid "Scroll the completions window"
+msgstr "Rulumu la fenestron de kompletigoj"
+
+#: info/footnotes.c:213
+msgid "Footnotes could not be displayed"
+msgstr "La piednotoj ne eligeblas"
+
+#: info/footnotes.c:239
+msgid "Show the footnotes associated with this node in another window"
+msgstr "Montru la piednotojn el cxi tiu nodo en alia fenestro"
+
+#: info/footnotes.h:26
+msgid "---------- Footnotes ----------"
+msgstr "---------- Piednotoj ----------"
+
+#: info/indices.c:172
+msgid "Look up a string in the index for this file"
+msgstr "Sercxu cxenon en la indekso por cxi tiu dosiero"
+
+#: info/indices.c:199
+msgid "Finding index entries..."
+msgstr "Estas sercxataj indeksaj artikoloj ..."
+
+#: info/indices.c:207
+msgid "No indices found."
+msgstr "Nenia indekso trovita."
+
+#: info/indices.c:217
+msgid "Index entry: "
+msgstr "Indeksa artikolo: "
+
+#: info/indices.c:325
+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:335
+msgid "No previous index search string."
+msgstr "Malestas antauxa cxeno por sercxo en indekso."
+
+#: info/indices.c:342
+msgid "No index entries."
+msgstr "Neniu indeksa artikolo."
+
+#: info/indices.c:375
+#, fuzzy, c-format
+msgid "No %sindex entries containing `%s'."
+msgstr "En la indekso ne estas %sartikoloj kun \"%s\"."
+
+#: info/indices.c:376
+msgid "more "
+msgstr "pli da "
+
+#: info/indices.c:386
+msgid "CAN'T SEE THIS"
+msgstr "MALEBLAS VIDI CxI TION"
+
+#: info/indices.c:422
+#, fuzzy, c-format
+msgid "Found `%s' in %s. (`\\[next-index-match]' tries to find next.)"
+msgstr "Trovita \"%s\" en %s. (\"\\[next-index-match]\" sercxos la sekvan.)"
+
+#: info/indices.c:541
+#, fuzzy, c-format
+msgid "Scanning indices of `%s'..."
+msgstr "Sercxo en la indeksoj de \"%s\"..."
+
+#: info/indices.c:596
+#, fuzzy, 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:622
+msgid "Grovel all known info file's indices for a string and build a menu"
+msgstr "Sercxu cxenon en cxiuj konataj indeksoj Info-dosieraj kaj faru menuon"
+
+#: info/indices.c:626
+msgid "Index apropos: "
+msgstr "Sercxu en indekso informon pri: "
+
+#: info/indices.c:654
+#, fuzzy, c-format
+msgid ""
+"\n"
+"* Menu: Nodes whose indices contain `%s':\n"
+msgstr ""
+"\n"
+"* Menu: Nodoj kies indices 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:295 makeinfo/makeinfo.c:766 util/install-info.c:1266
+#: util/texindex.c:343
+#, fuzzy, c-format
+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"
+"NENIA garantio estas donita. Vi rajtas pludoni ekzemplerojn de cxi tiu\n"
+"programo laux la kondicxoj de la GNUa Gxenerala Publika Permesilo. Pluaj\n"
+"informoj troveblas en la dosieroj COPYING.\n"
+
+#: info/info.c:498
+#, c-format
+msgid "no index entries found for `%s'\n"
+msgstr "por \"%s\" ne trovigxis indeksa artikolo\n"
+
+#: info/info.c:590
+msgid " -b, --speech-friendly be friendly to speech synthesizers.\n"
+msgstr " -b, --speech-friendly estu afabla al la parolsinteziloj.\n"
+
+#: info/info.c:597
+#, fuzzy, c-format
+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 -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 Sercxu TEMOn en cxiuj indeksoj de cxiuj "
+"dokumentoj.\n"
+"-d, --directory=UJO Aldonu la dosierUJOn al INFOPATH.\n"
+" --dribble=DOSIERO Notu la klavofrapojn de la uzanto en DOSIERO.\n"
+"-f, --file=DOSIERO Vizitu la Info-DOSIEROn.\n"
+"-h, --help Eligu cxi tiun helpeton kaj finu.\n"
+" --index-search=CxENO Vizitu nodon referencatan per indeksartikolo "
+"CxENO.\n"
+"-n, --node=NODO Komencu per NODO.\n"
+"-o, --output=DOSIERO Eligu la elektitajn nodojn en DOSIEROn.\n"
+"-R, --raw-escapes Ne forigu ANSI-eskapilojn el man-pagxoj\n"
+" --restore=DOSIERO Legu la klavofrapojn el DOSIERO.\n"
+"-O, --show-options, --usage Montru la nodon pri komandliniaj opcioj.\n"
+"%s --subnodes Rekursie eligu la menuerojn.\n"
+" --vi-keys Uzu vi-eskan kaj less-eskan klavararangxon\n"
+" --version Eligu la version de la programo kaj finu.\n"
+"\n"
+"La unua neopcia argumento, se donita, estas la nomo de unue vizitenda\n"
+"menuero, sercxota en cxiuj \"dir\"-dosieroj troveblaj per INFOPATH.\n"
+"Se gxi mankas, Info kunfandas cxiujn \"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 eligu la menuon de la kataloga nodo\n"
+" info emacs komencu per la nodo \"emacs\" el la kataloga "
+"nodo\n"
+" info emacs buffers komencu per la nodo \"buffers\" el Emaksa "
+"manlibro\n"
+" info --show-options emacs komencu per la Emaksaj komandliniaj opcioj\n"
+" info -f ./um.info eligu la dosieron ./um.info sen atenti \"dir\"\n"
+
+#: info/info.c:635 info/infokey.c:918 makeinfo/makeinfo.c:465
+#: util/install-info.c:466 util/texindex.c:292
+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>; gxeneralajn\n"
+"demandojn kaj opiniojn al <help-texinfo@gnu.org>.\n"
+"La hejmpagxo 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:669
+#, c-format
+msgid "Cannot find node `%s'."
+msgstr "La nodo \"%s\" ne troveblas."
+
+#: info/info.c:670
+#, c-format
+msgid "Cannot find node `(%s)%s'."
+msgstr "La nodo \"(%s)%s\" ne troveblas."
+
+#: info/info.c:671
+msgid "Cannot find a window!"
+msgstr "Maleblas trovi fenestron!"
+
+#: info/info.c:672
+msgid "Point doesn't appear within this window's node!"
+msgstr "La muskursoro ne estas en cxi-fenestra nodo!"
+
+#: info/info.c:673
+msgid "Cannot delete the last window."
+msgstr "Maleblas forigi la lastan fenestron"
+
+#: info/info.c:674
+msgid "No menu in this node."
+msgstr "En cxi tiu nodo malestas menuo."
+
+#: info/info.c:675
+msgid "No footnotes in this node."
+msgstr "Ne estas piednotoj en cxi tiu nodo."
+
+#: info/info.c:676
+msgid "No cross references in this node."
+msgstr "Neniu referenco en cxi tiu nodo."
+
+#: info/info.c:677
+#, c-format
+msgid "No `%s' pointer for this node."
+msgstr "Mankas ligilo \"%s\" por cxi tiu nodo."
+
+#: info/info.c:678
+#, c-format
+msgid "Unknown Info command `%c'; try `?' for help."
+msgstr "Nekonata Info-komando \"%c\"; tajpu \"?\" por helpo."
+
+#: info/info.c:679
+#, c-format
+msgid "Terminal type `%s' is not smart enough to run Info."
+msgstr "La terminaloj de tipo \"%s\" ne estas suficxe inteligentaj por Info."
+
+#: info/info.c:680
+msgid "You are already at the last page of this node."
+msgstr "Tiu pagxo jam estas la lasta en cxi tiu nodo"
+
+#: info/info.c:681
+msgid "You are already at the first page of this node."
+msgstr "Tio jam estas la unua pagxo de cxi tiu nodo"
+
+#: info/info.c:682
+msgid "Only one window."
+msgstr "Nur unu fenestro."
+
+#: info/info.c:683
+msgid "Resulting window would be too small."
+msgstr "La fenestro rezultos tro malgranda."
+
+#: info/info.c:684
+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:46 info/infodoc.c:95
+msgid ""
+"Basic Commands in Info Windows\n"
+"******************************\n"
+msgstr ""
+"La cxefaj komandoj info-fenestraj\n"
+"*********************************\n"
+
+#: info/infodoc.c:49
+msgid "\\%-10[quit-help] Quit this help.\n"
+msgstr "\\%-10[quit-help] Forlasu cxi tiun helpon.\n"
+
+#: info/infodoc.c:50
+msgid "\\%-10[quit] Quit Info altogether.\n"
+msgstr "\\%-10[quit-help] Forlasu la tutan Info.\n"
+
+#: info/infodoc.c:51
+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:53 info/infodoc.c:102
+msgid ""
+"Selecting other nodes:\n"
+"----------------------\n"
+msgstr ""
+"Por elekti aliajn nodojn:\n"
+"-------------------------\n"
+
+#: info/infodoc.c:55
+msgid "\\%-10[next-node] Move to the \"next\" node of this node.\n"
+msgstr ""
+"\\%-10[next-node] Iru al la tujsekva (\"Next\") nodo de cxi tiu nodo.\n"
+
+#: info/infodoc.c:56
+msgid "\\%-10[prev-node] Move to the \"previous\" node of this node.\n"
+msgstr ""
+"\\%-10[prev-node] Iru al la jxusantauxa (\"Previous\") nodo de cxi tiu "
+"nodo.\n"
+
+#: info/infodoc.c:57
+msgid "\\%-10[up-node] Move \"up\" from this node.\n"
+msgstr "\\%-10[up-node] Iru al la tujsupra (\"Up\") nodo de cxi tiu nodo.\n"
+
+#: info/infodoc.c:58
+msgid ""
+"\\%-10[menu-item] 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 kauxzas transiron en alian nodon.\n"
+
+#: info/infodoc.c:60
+msgid ""
+"\\%-10[xref-item] Follow a cross reference. Reads name of reference.\n"
+msgstr ""
+"\\%-10[xref-item] Sekvu referencon (legante la nomon de la referenco).\n"
+
+#: info/infodoc.c:61
+msgid "\\%-10[history-node] Move to the last node seen in this window.\n"
+msgstr ""
+"\\%-10[history-node] Revenu al la Lasta nodo vizitita en cxi tiu fenestro.\n"
+
+#: info/infodoc.c:62
+msgid ""
+"\\%-10[move-to-next-xref] Skip to next hypertext link within this node.\n"
+msgstr ""
+"\\%-10[move-to-next-xref] Saltu sur la sekvan hipertekstan ligilon en cxi "
+"tiu nodo.\n"
+
+#: info/infodoc.c:63
+msgid ""
+"\\%-10[move-to-prev-xref] Skip to previous hypertext link within this "
+"node.\n"
+msgstr ""
+"\\%-10[move-to-prev-xref] Saltu sur la sekvan hipertekstan ligilon en cxi "
+"tiu nodo.\n"
+
+#: info/infodoc.c:64
+msgid ""
+"\\%-10[select-reference-this-line] Follow the hypertext link under cursor.\n"
+msgstr ""
+"\\%-10[select-reference-this-line] Iru laux la subkursora hiperteksta "
+"ligo.\n"
+
+#: info/infodoc.c:65
+msgid ""
+"\\%-10[dir-node] Move to the `directory' node. Equivalent to `\\[goto-"
+"node] (DIR)'.\n"
+msgstr ""
+"\\%-10[dir-node] Iru al la cxefkataloga nodo. Ekvivalentas al \"g (DIR)"
+"\".\n"
+
+#: info/infodoc.c:66
+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"
+
+#: info/infodoc.c:68 info/infodoc.c:116
+msgid ""
+"Moving within a node:\n"
+"---------------------\n"
+msgstr ""
+"Por movigxi ene de nodo:\n"
+"------------------------\n"
+
+#: info/infodoc.c:70
+msgid "\\%-10[beginning-of-node] Go to the beginning of this node.\n"
+msgstr "\\%-10[beginning-of-node] Iru al la komenco de cxi tiu nodo.\n"
+
+#: info/infodoc.c:71
+msgid "\\%-10[end-of-node] Go to the end of this node.\n"
+msgstr "\\%-10[end-of-node] Iru al la fino de cxi tiu nodo.\n"
+
+#: info/infodoc.c:72
+msgid "\\%-10[next-line] Scroll forward 1 line.\n"
+msgstr "\\%-10[next-line] Unu pagxon antauxen.\n"
+
+#: info/infodoc.c:73
+msgid "\\%-10[prev-line] Scroll backward 1 line.\n"
+msgstr "\\%-10[next-line] Unu pagxon malantauxen.\n"
+
+#: info/infodoc.c:74
+msgid "\\%-10[scroll-forward] Scroll forward a page.\n"
+msgstr "\\%-10[scroll-forward] Unu pagxon antauxen.\n"
+
+#: info/infodoc.c:75
+msgid "\\%-10[scroll-backward] Scroll backward a page.\n"
+msgstr "\\%-10[scroll-backward] Unu pagxon malantauxen.\n"
+
+#: info/infodoc.c:77 info/infodoc.c:125
+msgid ""
+"Other commands:\n"
+"---------------\n"
+msgstr ""
+"Ceteraj komandoj:\n"
+"-----------------\n"
+
+#: info/infodoc.c:79
+msgid "\\%-10[menu-digit] Pick first ... ninth item in node's menu.\n"
+msgstr ""
+"\\%-10[menu-digit] Elektu resp. la unuan ... la nauxan eron el cxi-noda "
+"menuo.\n"
+
+#: info/infodoc.c:80
+msgid "\\%-10[last-menu-item] Pick last item in node's menu.\n"
+msgstr "\\%-10[last-menu-item] Elektu la lastan eron de cxi-noda menuo.\n"
+
+#: info/infodoc.c:81
+msgid ""
+"\\%-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"
+msgstr ""
+"\\%-10[index-search] Sercxu aperon de donita signocxeno en la "
+"indeksartikoloj de cxi\n"
+" tiu info-dosiero kaj elektu la nodon referencatan de la unua trovita "
+"artikolo.\n"
+
+#: info/infodoc.c:83
+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"
+" Ankaux la dosiernomon vi povas inkludi, kiel en (DOSIERO)NODO.\n"
+
+#: info/infodoc.c:85
+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] Sercxu sube aperon de donita signocxeno kaj\n"
+" vizitu la nodon en kiu trovigxos la sekva apero.\n"
+
+#: info/infodoc.c:87
+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] Sercxu supre aperon de donita signocxeno kaj\n"
+" vizitu la nodon en kiu trovigxos la jxusantauxa apero.\n"
+
+#: info/infodoc.c:98
+#, c-format
+msgid " %-10s Quit this help.\n"
+msgstr " %-10s Forlasu cxi tiun helpon.\n"
+
+#: info/infodoc.c:99
+#, c-format
+msgid " %-10s Quit Info altogether.\n"
+msgstr " %-10s Forlasu la tutan Info.\n"
+
+#: info/infodoc.c:100
+#, c-format
+msgid " %-10s Invoke the Info tutorial.\n"
+msgstr " %-10s Voku la lernilon pri Info.\n"
+
+#: info/infodoc.c:104
+#, c-format
+msgid " %-10s Move to the `next' node of this node.\n"
+msgstr " %-10s Iru al la tujsekva (\"Next\") nodo de cxi tiu nodo.\n"
+
+#: info/infodoc.c:105
+#, c-format
+msgid " %-10s Move to the `previous' node of this node.\n"
+msgstr " %-10s Iru al la jxusantauxa (\"Previous\") nodo de cxi tiu nodo.\n"
+
+#: info/infodoc.c:106
+#, c-format
+msgid " %-10s Move `up' from this node.\n"
+msgstr " %-10s Iru al la tujsupra (\"Up\") nodo de cxi tiu nodo.\n"
+
+#: info/infodoc.c:107
+#, c-format
+msgid " %-10s Pick menu item specified by name.\n"
+msgstr " %-10s Iru al la tajpota menuero.\n"
+
+#: info/infodoc.c:108
+msgid " Picking a menu item causes another node to be selected.\n"
+msgstr " Elekto de menuero kauxzas transiron en alian nodon.\n"
+
+#: info/infodoc.c:109
+#, 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:110
+#, c-format
+msgid " %-10s Move to the last node seen in this window.\n"
+msgstr " %-10s Revenu al la Lasta nodo vizitita en cxi tiu fenestro.\n"
+
+#: info/infodoc.c:111
+#, c-format
+msgid " %-10s Skip to next hypertext link within this node.\n"
+msgstr " %-10s Saltu sur la sekvan hipertekstan ligilon en cxi tiu nodo.\n"
+
+#: info/infodoc.c:112
+#, c-format
+msgid " %-10s Follow the hypertext link under cursor.\n"
+msgstr " %-10s Iru laux la subkursora hiperteksta ligo.\n"
+
+#: info/infodoc.c:113
+#, c-format
+msgid " %-10s Move to the `directory' node. Equivalent to `g (DIR)'.\n"
+msgstr " %-10s Iru al la cxefkataloga nodo. Ekvivalentas al \"g (DIR)\".\n"
+
+#: info/infodoc.c:114
+#, 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:118
+#, c-format
+msgid " %-10s Scroll forward a page.\n"
+msgstr " %-10s Unu pagxon antauxen.\n"
+
+#: info/infodoc.c:119
+#, c-format
+msgid " %-10s Scroll backward a page.\n"
+msgstr " %-10s Unu pagxon malantauxen.\n"
+
+#: info/infodoc.c:120
+#, c-format
+msgid " %-10s Go to the beginning of this node.\n"
+msgstr " %-10s Iru al la komenco de cxi tiu nodo.\n"
+
+#: info/infodoc.c:121
+#, c-format
+msgid " %-10s Go to the end of this node.\n"
+msgstr " %-10s Iru al la fino de cxi tiu nodo.\n"
+
+#: info/infodoc.c:122
+#, c-format
+msgid " %-10s Scroll forward 1 line.\n"
+msgstr " %-10s Unu pagxon antauxen.\n"
+
+#: info/infodoc.c:123
+#, c-format
+msgid " %-10s Scroll backward 1 line.\n"
+msgstr " %-10s Unu pagxon malantauxen.\n"
+
+#: info/infodoc.c:127
+#, c-format
+msgid " %-10s Pick first ... ninth item in node's menu.\n"
+msgstr " %-10s Elektu resp. la unuan ... la nauxan eron de cxi-noda menuo.\n"
+
+#: info/infodoc.c:128
+#, c-format
+msgid " %-10s Pick last item in node's menu.\n"
+msgstr " %-10s Elektu la lastan eron de cxi-noda menuo.\n"
+
+#: info/infodoc.c:129
+#, c-format
+msgid ""
+" %-10s Search for a specified string in the index entries of this Info\n"
+msgstr ""
+" %-10s Sercxu indikotan signocxenon en la indeksaj artikoloj de cxi tiu "
+"Info-\n"
+
+#: info/infodoc.c:130
+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"
+
+#: info/infodoc.c:131
+#, c-format
+msgid " %-10s Move to node specified by name.\n"
+msgstr " %-10s Vizitu nodon indikotan per la nomo.\n"
+
+#: info/infodoc.c:132
+msgid ""
+" You may include a filename as well, as in (FILENAME)NODENAME.\n"
+msgstr " Ankaux la dosiernomon vi povas inkludi, kiel en (DOSIERO)NODO.\n"
+
+#: info/infodoc.c:133
+#, c-format
+msgid " %-10s Search forward for a specified string,\n"
+msgstr " %-10s Sercxu sube indikotan signocxenon,\n"
+
+#: info/infodoc.c:134 info/infodoc.c:136
+msgid ""
+" and select the node in which the next occurrence is found.\n"
+msgstr " kaj vizitu la nodon en kiu trovigxos la sekva apero.\n"
+
+#: info/infodoc.c:135
+#, c-format
+msgid " %-10s Search backward for a specified string\n"
+msgstr " %-10s Sercxu indikotan signocxenon supre en la dosiero,\n"
+
+#: info/infodoc.c:316
+msgid "The current search path is:\n"
+msgstr "La kuranta sercxvojo estas:\n"
+
+#: info/infodoc.c:320
+msgid ""
+"Commands available in Info windows:\n"
+"\n"
+msgstr ""
+"Komandoj disponeblaj en Info-fenestroj:\n"
+"\n"
+
+#: info/infodoc.c:324
+msgid ""
+"Commands available in the echo area:\n"
+"\n"
+msgstr ""
+"Komandoj disponeblaj en la ehxozono:\n"
+"\n"
+
+#: info/infodoc.c:347
+#, 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:351
+msgid ""
+"The following commands cannot be invoked at all:\n"
+"\n"
+msgstr ""
+"La sekvaj komandoj neniel vokeblas:\n"
+"\n"
+
+#: info/infodoc.c:375
+msgid "--- Use `\\[history-node]' or `\\[kill-node]' to exit ---\n"
+msgstr "--- Uzu \"\\[history-node]\" aux \"\\[kill-node]\" por eliri ---\n"
+
+#: info/infodoc.c:485
+msgid "Display help message"
+msgstr "Eligu helpomesagxon"
+
+#: info/infodoc.c:503
+msgid "Visit Info node `(info)Help'"
+msgstr "Vizitu la Info-nodon \"(info)Help\""
+
+#: info/infodoc.c:641
+msgid "Print documentation for KEY"
+msgstr "Eligu la informon pri KLAVO"
+
+#: info/infodoc.c:653
+#, c-format
+msgid "Describe key: %s"
+msgstr "Priskribu klavon: %s"
+
+#: info/infodoc.c:664
+#, c-format
+msgid "ESC %s is undefined."
+msgstr "ESC %s estas nedifinita."
+
+#: info/infodoc.c:680 info/infodoc.c:709
+#, c-format
+msgid "%s is undefined."
+msgstr "%s estas nedifinita."
+
+#: info/infodoc.c:730
+#, c-format
+msgid "%s is defined to %s."
+msgstr "%s estas ligita al %s."
+
+#: info/infodoc.c:1153
+msgid "Show what to type to execute a given command"
+msgstr "Montru, kion tajpi por plenumi koncernan komandon"
+
+#: info/infodoc.c:1157
+msgid "Where is command: "
+msgstr "Kie estas la komando: "
+
+#: info/infodoc.c:1179
+#, c-format
+msgid "`%s' is not on any keys"
+msgstr "neniu klavo trovita por la komando \"%s\""
+
+#: info/infodoc.c:1186
+#, c-format
+msgid "%s can only be invoked via %s."
+msgstr "%s vokeblas nur per %s."
+
+#: info/infodoc.c:1190
+#, c-format
+msgid "%s can be invoked via %s."
+msgstr "%s vokeblas per %s."
+
+#: info/infodoc.c:1195
+#, c-format
+msgid "There is no function named `%s'"
+msgstr "Malestas funkcio nomata \"%s\""
+
+#: info/infokey.c:145
+#, c-format
+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 cxi tiu\n"
+"programo laux la kondicxoj de la GNUa Gxenerala Publika Permesilo. Pluaj\n"
+"informoj troveblas en la dosieroj COPYING.\n"
+
+#: info/infokey.c:170
+msgid "incorrect number of arguments"
+msgstr "Malgxusta nombro da argumentoj"
+
+#: info/infokey.c:201
+#, c-format
+msgid "cannot open input file `%s'"
+msgstr "ne malfermigxis 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 (anatataux $HOME/.info).\n"
+" --help Eligu cxi tiun helpeton kaj finu.\n"
+" --version Eligu la version de la programo kaj finu.\n"
+
+#: info/infomap.c:1500
+#, c-format
+msgid "Ignoring invalid infokey file `%s' - too small"
+msgstr "La misa infoklava dosiero \"%s\" ignorita (tro mallonga)"
+
+#: info/infomap.c:1503
+#, c-format
+msgid "Ignoring invalid infokey file `%s' - too big"
+msgstr "La misa infoklava dosiero \"%s\" ignorita (tro longa)"
+
+#: info/infomap.c:1516
+#, c-format
+msgid "Error reading infokey file `%s' - short read"
+msgstr "Eraro dum lego de infoklava dosiero \"%s\" (tro frue elcxerpita)"
+
+#: info/infomap.c:1535
+#, c-format
+msgid ""
+"Invalid infokey file `%s' (bad magic numbers) -- run infokey to update it"
+msgstr ""
+"Misa infoklava dosiero \"%s\" (magiaj nombroj); aktualigu gxin per infokey"
+
+#: info/infomap.c:1544
+#, c-format
+msgid "Your infokey file `%s' is out of date -- run infokey to update it"
+msgstr "Via infoklava dosiero \"%s\" malaktualas; aktualigu gxin per infokey"
+
+#: info/infomap.c:1560
+#, c-format
+msgid ""
+"Invalid infokey file `%s' (bad section length) -- run infokey to update it"
+msgstr ""
+"Misa infoklava dosiero \"%s\" (misa sekcilongo) -- aktualigu gxin per infokey"
+
+#: info/infomap.c:1581
+#, c-format
+msgid ""
+"Invalid infokey file `%s' (bad section code) -- run infokey to update it"
+msgstr ""
+"Misa infoklava dosiero \"%s\" (misa sekcikodo); aktualigu gxin per infokey"
+
+#: info/infomap.c:1716
+msgid "Bad data in infokey file -- some key bindings ignored"
+msgstr "Misaj datumoj en infoklava dosiero -- iuj klavasociajxoj ne validos"
+
+#: info/infomap.c:1766
+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:69
+msgid "Read the name of an Info command and describe it"
+msgstr "Legu la nomon de Info-komando kaj priskribu gxin"
+
+#: info/m-x.c:73
+msgid "Describe command: "
+msgstr "Priskribu komandon: "
+
+#: info/m-x.c:96
+msgid "Read a command name in the echo area and execute it"
+msgstr "Legu en la ehxozono nomon de komando kaj gxin plenumu"
+
+#: info/m-x.c:140
+msgid "Cannot execute an `echo-area' command here."
+msgstr "Maleblas plenumi ehxozonan (\"echo-area-\") komandon cxi tie."
+
+#: info/m-x.c:154
+#, fuzzy, c-format
+msgid "Undefined command: %s"
+msgstr "Nekonata komando \"%s\"."
+
+#: info/m-x.c:160
+msgid "Set the height of the displayed window"
+msgstr "Fiksu la alton de la prezentata fenestro"
+
+#: info/m-x.c:173
+#, c-format
+msgid "Set screen height to (%d): "
+msgstr "Alto de la ekrano estu (%d): "
+
+#: info/makedoc.c:162 info/makedoc.c:170
+#, c-format
+msgid ""
+" Source files groveled to make this file include:\n"
+"\n"
+msgstr ""
+" La fontodosieroj tralaboritaj por fari cxi tiun dosieron:\n"
+"\n"
+
+#: info/makedoc.c:550
+#, c-format
+msgid "Couldn't manipulate the file %s.\n"
+msgstr "Maleblas prilabori la dosieron %s.\n"
+
+#: info/nodemenu.c:31
+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:202
+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, aux uzu \"\\[history-node]\" en alia fenestro.\n"
+
+#: info/nodemenu.c:224
+msgid "Make a window containing a menu of all of the currently visited nodes"
+msgstr "Faru fenestron entenantan menuon de cxiuj nune vizititaj nodoj"
+
+#: info/nodemenu.c:304
+msgid "Select a node which has been previously visited in a visible window"
+msgstr "Elektu nodon jam vizititan en videbla fenestro"
+
+#: info/nodemenu.c:317
+msgid "Select visited node: "
+msgstr "Elektu vizititan nodon: "
+
+#: info/nodemenu.c:337 info/session.c:2264
+#, c-format
+msgid "The reference disappeared! (%s)."
+msgstr "La referenco malaperis! (%s)."
+
+#: info/session.c:162
+#, 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:620
+msgid "Move down to the next line"
+msgstr "Mallevigxu al la sekva linio"
+
+#: info/session.c:635
+msgid "Move up to the previous line"
+msgstr "Levigxu al la antauxa linio"
+
+#: info/session.c:650
+msgid "Move to the end of the line"
+msgstr "Iru al la fino de la linio"
+
+#: info/session.c:670
+msgid "Move to the start of the line"
+msgstr "Iru al la komenco de la linio"
+
+#: info/session.c:860 makeinfo/node.c:1424
+msgid "Next"
+msgstr "Sekva"
+
+#: info/session.c:863
+msgid "Following Next node..."
+msgstr "Estas legata la nodo \"Next\" ..."
+
+#: info/session.c:881
+msgid "Selecting first menu item..."
+msgstr "La unua menuero estas elektata ..."
+
+#: info/session.c:893
+msgid "Selecting Next node..."
+msgstr "La nodo \"Next\" estas elektata ..."
+
+#: info/session.c:964
+#, c-format
+msgid "Moving Up %d time(s), then Next."
+msgstr "%d-foje supren, poste al la sekva (\"Next\")."
+
+#: info/session.c:988
+msgid "No more nodes within this document."
+msgstr "Malestas pluaj referencoj en la dokumento."
+
+#: info/session.c:1011
+msgid "No `Prev' for this node."
+msgstr "Mankas ligilo \"Prev\" por cxi tiu nodo."
+
+#: info/session.c:1014 info/session.c:1073
+msgid "Moving Prev in this window."
+msgstr "Iro al la antauxa nodo \"Prev\" en cxi tiu fenestro."
+
+#: info/session.c:1030
+msgid "No `Prev' or `Up' for this node within this document."
+msgstr "En la dokumento mankas ligilo(j) \"Prev\" aux \"Up\" por tiu nodo."
+
+#: info/session.c:1034
+msgid "Moving Up in this window."
+msgstr "Levigxo al la nodo \"Up\" en cxi tiu fenestro."
+
+#: info/session.c:1084
+msgid "Moving to `Prev's last menu item."
+msgstr "Iro al la lasta menuero de la nodo \"Prev\"."
+
+#: info/session.c:1095
+msgid "Move forwards or down through node structure"
+msgstr "Movu antauxen aux malsupren en la strukturo de nodoj"
+
+#: info/session.c:1111
+msgid "Move backwards or up through node structure"
+msgstr "Movu malantauxen aux supren en la strukturo de nodoj"
+
+#: info/session.c:1205
+msgid "Scroll forward in this window"
+msgstr "Rulumu antauxen en cxi tiu fenestro"
+
+#: info/session.c:1213
+msgid "Scroll forward in this window and set default window size"
+msgstr ""
+"Rulumu antauxen en cxi tiu fenestro kaj fiksu defauxltan fenestrograndon"
+
+#: info/session.c:1221
+msgid "Scroll forward in this window staying within node"
+msgstr "Rulumu antauxen en cxi tiu fenestro sed restu en la nodo"
+
+#: info/session.c:1229
+msgid ""
+"Scroll forward in this window staying within node and set default window size"
+msgstr ""
+"Rulumu antauxen en cxi tiu fenestro restante en la nodo kaj\n"
+"fiksu defauxltan fenestrograndon"
+
+#: info/session.c:1237
+msgid "Scroll backward in this window"
+msgstr "Rulumu malantauxen en cxi tiu fenestro"
+
+#: info/session.c:1245
+msgid "Scroll backward in this window and set default window size"
+msgstr ""
+"Rulumu malantauxen en cxi tiu fenestro kaj fiksu defauxltan fenestrograndon"
+
+#: info/session.c:1254
+msgid "Scroll backward in this window staying within node"
+msgstr "Rulumu malantauxen en cxi tiu fenestro sed restu en la nodo"
+
+#: info/session.c:1262
+msgid ""
+"Scroll backward in this window staying within node and set default window "
+"size"
+msgstr ""
+"Rulumu malantauxen en cxi tiu fenestro restante en la nodo kaj\n"
+" fiksu defauxltan fenestrograndon"
+
+#: info/session.c:1270
+msgid "Move to the start of this node"
+msgstr "Iru al la komenco de cxi tiu nodo"
+
+#: info/session.c:1277
+msgid "Move to the end of this node"
+msgstr "Iru al la fino de cxi tiu nodo"
+
+#: info/session.c:1284
+msgid "Scroll down by lines"
+msgstr "Linie rulumu suben"
+
+#: info/session.c:1301
+msgid "Scroll up by lines"
+msgstr "Linie rulumu supren"
+
+#: info/session.c:1319
+msgid "Scroll down by half screen size"
+msgstr "Duonekrane rulumu suben"
+
+#: info/session.c:1345
+msgid "Scroll up by half screen size"
+msgstr "Duonekrane rulumu supren"
+
+#: info/session.c:1374
+msgid "Select the next window"
+msgstr "Elektu la sekvan fenestron"
+
+#: info/session.c:1413
+msgid "Select the previous window"
+msgstr "Elektu la antauxan fenestron"
+
+#: info/session.c:1464
+msgid "Split the current window"
+msgstr "Disfendu la kurantan fenestron"
+
+#: info/session.c:1545
+msgid "Delete the current window"
+msgstr "Forigu la kurantan fenestron"
+
+#: info/session.c:1553
+msgid "Cannot delete a permanent window"
+msgstr "Maleblas forigi fenestron permanentan"
+
+#: info/session.c:1585
+msgid "Delete all other windows"
+msgstr "Forigu cxiujn ceterajn fenestrojn"
+
+#: info/session.c:1631
+msgid "Scroll the other window"
+msgstr "Rulumu la alian fenestron"
+
+#: info/session.c:1652
+msgid "Scroll the other window backward"
+msgstr "Rulumu la alian fenestron malantauxen"
+
+#: info/session.c:1658
+msgid "Grow (or shrink) this window"
+msgstr "(Mal)pligrandigu cxi tiun fenestron"
+
+#: info/session.c:1669
+msgid "Divide the available screen space among the visible windows"
+msgstr "Dispartigu la disponeblan ekranspacon inter la videblaj fenestroj"
+
+#: info/session.c:1676
+msgid "Toggle the state of line wrapping in the current window"
+msgstr "Baskulsxaltu la regximon de linifaldo en la kuranta fenestro"
+
+#: info/session.c:1848
+msgid "Select the Next node"
+msgstr "Elektu la nodon sekvan (\"Next\")"
+
+#: info/session.c:1856
+msgid "Select the Prev node"
+msgstr "Elektu la nodon antauxan (\"Prev\")"
+
+#: info/session.c:1864
+msgid "Select the Up node"
+msgstr "Elektu la nodon supran (\"Up\")"
+
+#: info/session.c:1871
+msgid "Select the last node in this file"
+msgstr "Elektu la lastan nodon en cxi tiu dosiero"
+
+#: info/session.c:1898 info/session.c:1931
+msgid "This window has no additional nodes"
+msgstr "Cxi tiu fenestro ne havas pluajn nodojn"
+
+#: info/session.c:1904
+msgid "Select the first node in this file"
+msgstr "Elektu la unuan nodon en cxi tiu dosiero"
+
+#: info/session.c:1938
+msgid "Select the last item in this node's menu"
+msgstr "Elektu la lastan eron en la menuo de cxi tiu nodo"
+
+#: info/session.c:1944
+msgid "Select this menu item"
+msgstr "Elektu cxi tiun menueron"
+
+#: info/session.c:1977
+#, c-format
+msgid "There aren't %d items in this menu."
+msgstr "Cxi tiu menuo ne havas %d erojn."
+
+#: info/session.c:2171 info/session.c:2172
+#, c-format
+msgid "Menu item (%s): "
+msgstr "Menuero (%s): "
+
+#: info/session.c:2175
+msgid "Menu item: "
+msgstr "Menuero: "
+
+#: info/session.c:2182 info/session.c:2183
+#, c-format
+msgid "Follow xref (%s): "
+msgstr "Sekvu referencon (%s): "
+
+#: info/session.c:2186
+msgid "Follow xref: "
+msgstr "Sekvu referencon: "
+
+#: info/session.c:2315
+msgid "Read a menu item and select its node"
+msgstr "Legu menueron kaj elektu gxian nodon"
+
+#: info/session.c:2323
+msgid "Read a footnote or cross reference and select its node"
+msgstr "Legu piednoton aux referencon kaj elektu gxian nodon"
+
+#: info/session.c:2329
+msgid "Move to the start of this node's menu"
+msgstr "Iru al la komenco de la menuo de cxi tiu nodo"
+
+#: info/session.c:2353
+msgid "Visit as many menu items at once as possible"
+msgstr ""
+"Vizitu samtempe kiom eble plej multe da menueroj (cxiun en aparta fenestro)"
+
+#: info/session.c:2381
+msgid "Read a node name and select it"
+msgstr "Legu nodnomon kaj elektu la nodon"
+
+#: info/session.c:2436 info/session.c:2441
+msgid "Goto node: "
+msgstr "Iru al la nodo: "
+
+#: info/session.c:2505
+#, c-format
+msgid "No menu in node `%s'."
+msgstr "En la nodo \"%s\" malestas menuo."
+
+#: info/session.c:2551
+#, c-format
+msgid "No menu item `%s' in node `%s'."
+msgstr "Menuero \"%s\" malestas en la nodo \"%s\"."
+
+#: info/session.c:2581
+#, c-format
+msgid "Unable to find node referenced by `%s' in `%s'."
+msgstr "Maleblas trovi nodon referencatan per \"%s\" en \"%s\"."
+
+#: info/session.c:2631
+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:2633
+msgid "Follow menus: "
+msgstr "Sekvu menuojn: "
+
+#: info/session.c:2826
+msgid "Find the node describing program invocation"
+msgstr "Trovu la nodon priskribantan programvokon"
+
+#: info/session.c:2828
+#, c-format
+msgid "Find Invocation node of [%s]: "
+msgstr "Trovu la voknodon de [%s]: "
+
+#: info/session.c:2866
+msgid "Read a manpage reference and select it"
+msgstr "Legu referencon al manlibra pagxo kaj gxin elektu"
+
+#: info/session.c:2870
+msgid "Get Manpage: "
+msgstr "Manlibran pagxon: "
+
+#: info/session.c:2900
+msgid "Select the node `Top' in this file"
+msgstr "Elektu la nodon \"Top\" en cxi tiu dosiero"
+
+#: info/session.c:2906
+msgid "Select the node `(dir)'"
+msgstr "Elektu la nodon \"(dir)\""
+
+#: info/session.c:2923 info/session.c:2925
+#, c-format
+msgid "Kill node (%s): "
+msgstr "Forvisxu la nodon (%s): "
+
+#: info/session.c:2977
+#, c-format
+msgid "Cannot kill node `%s'"
+msgstr "Maleblas forigi la nodon \"%s\""
+
+#: info/session.c:2987
+msgid "Cannot kill the last node"
+msgstr "Maleblas forigi la lastan nodon"
+
+#: info/session.c:3073
+msgid "Select the most recently selected node"
+msgstr "Elektu nodon plej jxuse elektitan"
+
+#: info/session.c:3079
+msgid "Kill this node"
+msgstr "Forvisxu cxi tiun nodon"
+
+#: info/session.c:3087
+msgid "Read the name of a file and select it"
+msgstr "Legu la dosiernomon kaj gxin elektu"
+
+#: info/session.c:3091
+msgid "Find file: "
+msgstr "Trovu la dosieron: "
+
+#: info/session.c:3108
+#, c-format
+msgid "Cannot find `%s'."
+msgstr "Maleblas trovi \"%s\"."
+
+#: info/session.c:3151 info/session.c:3269
+#, c-format
+msgid "Could not create output file `%s'."
+msgstr "Maleblas krei eligan dosieron \"%s\"."
+
+#: info/session.c:3165 info/session.c:3287 info/session.c:3347
+msgid "Done."
+msgstr "Prete."
+
+#: info/session.c:3220
+#, c-format
+msgid "Writing node %s..."
+msgstr "Estas skribata la nodo \"%s\" ..."
+
+#: info/session.c:3296
+msgid "Pipe the contents of this node through INFO_PRINT_COMMAND"
+msgstr "La enhavon de cxi tiu nodo metu en la dukton per INFO_PRINT_COMMAND"
+
+#: info/session.c:3331
+#, c-format
+msgid "Cannot open pipe to `%s'."
+msgstr "Ne malfermigxis dukto al \"%s\"."
+
+#: info/session.c:3337
+#, c-format
+msgid "Printing node %s..."
+msgstr "Estas printata la nodo \"%s\" ..."
+
+#: info/session.c:3567
+#, c-format
+msgid "Searching subfile %s ..."
+msgstr "Estas sercxata la subdosiero \"%s\" ..."
+
+#: info/session.c:3619
+msgid "Read a string and search for it case-sensitively"
+msgstr "Legu cxenon kaj sercxu gxin usklecodistinge"
+
+#: info/session.c:3626
+msgid "Read a string and search for it"
+msgstr "Legu cxenon kaj gxin sercxu"
+
+#: info/session.c:3634
+msgid "Read a string and search backward for it"
+msgstr "Legu cxenon kaj gxin sercxu malantauxen"
+
+#: info/session.c:3670 info/session.c:3677
+#, c-format
+msgid "%s%sfor string [%s]: "
+msgstr "%s%spor signocxeno [%s]: "
+
+#: info/session.c:3671 info/session.c:3678
+msgid "Search backward"
+msgstr "Sercxu malantauxen"
+
+#: info/session.c:3672 info/session.c:3678
+msgid "Search"
+msgstr "Sercxu"
+
+#: info/session.c:3673 info/session.c:3679
+msgid " case-sensitively "
+msgstr " usklecodistinge"
+
+#: info/session.c:3674 info/session.c:3679
+msgid " "
+msgstr " "
+
+#: info/session.c:3718
+msgid "Search failed."
+msgstr "Sercxo fiaskis."
+
+#: info/session.c:3736
+msgid "Repeat last search in the same direction"
+msgstr "Ripetu la jxusan sercxon samdirekte"
+
+#: info/session.c:3739 info/session.c:3749
+msgid "No previous search string"
+msgstr "Malestas pli frua sercxocxeno."
+
+#: info/session.c:3746
+msgid "Repeat last search in the reverse direction"
+msgstr "Ripetu la jxusan sercxon alidirekte"
+
+#: info/session.c:3765 info/session.c:3771
+msgid "Search interactively for a string as you type it"
+msgstr "Interaktive sercxu cxenon tajpatan"
+
+#: info/session.c:3851
+msgid "I-search backward: "
+msgstr "Interaktiva sercxo malantauxen: "
+
+#: info/session.c:3853
+msgid "I-search: "
+msgstr "Interaktiva sercxo: "
+
+#: info/session.c:3878 info/session.c:3880
+msgid "Failing "
+msgstr "Fiasko "
+
+#: info/session.c:4340
+msgid "Move to the previous cross reference"
+msgstr "Iru al la antauxa referenco"
+
+#: info/session.c:4349
+msgid "Move to the next cross reference"
+msgstr "Iru al la sekva referenco"
+
+#: info/session.c:4359
+msgid "Select reference or menu item appearing on this line"
+msgstr "Elektu la referencon aux la menueron de cxi tiu linio"
+
+#: info/session.c:4382
+msgid "Cancel current operation"
+msgstr "Cxesigu la kurantan operacion"
+
+#: info/session.c:4389
+msgid "Quit"
+msgstr "Finu"
+
+#: info/session.c:4398
+msgid "Move the cursor to a specific line of the window"
+msgstr "Movu la kursoron sur indikitan linion de la fenestro"
+
+#: info/session.c:4430
+msgid "Redraw the display"
+msgstr "Refresxigi la ekranon"
+
+#: info/session.c:4467
+msgid "Quit using Info"
+msgstr "Eliru el Info"
+
+#: info/session.c:4480
+msgid "Run command bound to this key's lowercase variant"
+msgstr "Plenumi komandon asociitan kun cxi tiu klavo minuskligita"
+
+#: info/session.c:4491
+#, c-format
+msgid "Unknown command (%s)."
+msgstr "Komando nekonata (%s)."
+
+#: info/session.c:4494
+#, c-format
+msgid "\"%s\" is invalid"
+msgstr "\"%s\" ne validas"
+
+#: info/session.c:4495
+#, fuzzy, c-format
+msgid "`%s' is invalid"
+msgstr "\"%s\" ne validas"
+
+#: info/session.c:4709
+msgid "Add this digit to the current numeric argument"
+msgstr "Aldonu tiun ciferon al la kuranta argumento nombra"
+
+#: info/session.c:4718
+msgid "Start (or multiply by 4) the current numeric argument"
+msgstr "Komencu (aux 4-obligu) la kurantan argumenton nombran"
+
+#: info/session.c:4733
+msgid "Internally used by \\[universal-argument]"
+msgstr "Uzata interne de \\[universal-argument]"
+
+#: info/tilde.c:338
+#, c-format
+msgid "readline: Out of virtual memory!\n"
+msgstr "readline: Virtuala memoro elcxerpita!\n"
+
+#: info/variables.c:37
+msgid "When \"On\", footnotes appear and disappear automatically"
+msgstr "Cxe \"On\", la piednotoj aperas kaj malaperas auxtomate"
+
+#: info/variables.c:41
+msgid "When \"On\", creating or deleting a window resizes other windows"
+msgstr ""
+"Cxe \"On\", kreo aux forigo de fenestro kauxzas rearangxon de la ceteraj"
+
+#: info/variables.c:45
+msgid "When \"On\", flash the screen instead of ringing the bell"
+msgstr "Cxe \"On\", anstataux bleki fulmetu la ekranon"
+
+#: info/variables.c:49
+msgid "When \"On\", errors cause the bell to ring"
+msgstr "Cxe \"On\", signalu pri eraro per bleko"
+
+#: info/variables.c:53
+msgid "When \"On\", Info garbage collects files which had to be uncompressed"
+msgstr ""
+"Cxe \"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 "Cxe \"On\", la peco kongrua al la sercxocxeno emfazigxas"
+
+#: 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:64
+msgid "The number lines to scroll when the cursor moves out of the window"
+msgstr ""
+"La nombro de linioj rulumataj kiam la kursoro movigxas ekster la fenestron"
+
+#: info/variables.c:68
+msgid "When \"On\", Info accepts and displays ISO Latin characters"
+msgstr "Cxe \"On\", Info akceptas kaj surekranigas la okbitajn signojn"
+
+#: info/variables.c:74
+msgid "Explain the use of a variable"
+msgstr "Klarigu la uzon de variablo"
+
+#: info/variables.c:80
+msgid "Describe variable: "
+msgstr "Priskribu variablon: "
+
+#: info/variables.c:99
+msgid "Set the value of an Info variable"
+msgstr "Valorizu Info-variablon"
+
+#: info/variables.c:105
+msgid "Set variable: "
+msgstr "Valorizu variablon: "
+
+#: info/variables.c:123
+#, c-format
+msgid "Set %s to value (%d): "
+msgstr "Variablo %s ricevu la valoron (%d): "
+
+#: info/variables.c:164
+#, c-format
+msgid "Set %s to value (%s): "
+msgstr "%s ricevu la valoron (%s): "
+
+#: info/window.c:1138
+msgid "--*** Tags out of Date ***"
+msgstr "--*** Etikedoj malaktualigxis ***"
+
+#: info/window.c:1149
+msgid "-----Info: (), lines ----, "
+msgstr "-----Info: (), linioj ----, "
+
+#: info/window.c:1156
+#, c-format
+msgid "-%s---Info: %s, %d lines --%s--"
+msgstr "-%s---Info: %s, %d linioj --%s--"
+
+#: info/window.c:1160
+#, c-format
+msgid "-%s%s-Info: (%s)%s, %d lines --%s--"
+msgstr "-%s%s-Info: (%s)%s, %d linioj --%s--"
+
+#: info/window.c:1167
+#, c-format
+msgid " Subfile: %s"
+msgstr " Subdosiero: %s"
+
+#: lib/getopt.c:551 lib/getopt.c:570
+#, c-format
+msgid "%s: option `%s' is ambiguous\n"
+msgstr "%s: opcio \"%s\" estas ambigua\n"
+
+#: lib/getopt.c:603 lib/getopt.c:607
+#, c-format
+msgid "%s: option `--%s' doesn't allow an argument\n"
+msgstr "%s: opcio \"--%s\" ne toleras argumenton\n"
+
+#: lib/getopt.c:616 lib/getopt.c:621
+#, c-format
+msgid "%s: option `%c%s' doesn't allow an argument\n"
+msgstr "%s: opcio \"%c%s\" ne toleras argumenton\n"
+
+#: lib/getopt.c:667 lib/getopt.c:689 lib/getopt.c:1020 lib/getopt.c:1042
+#, c-format
+msgid "%s: option `%s' requires an argument\n"
+msgstr "%s: opcio \"%s\" bezonas argumenton\n"
+
+#: lib/getopt.c:727 lib/getopt.c:730
+#, c-format
+msgid "%s: unrecognized option `--%s'\n"
+msgstr "%s: nekonata opcio \"--%s\"\n"
+
+#: lib/getopt.c:738 lib/getopt.c:741
+#, c-format
+msgid "%s: unrecognized option `%c%s'\n"
+msgstr "%s: nekonata opcio \"%c%s\"\n"
+
+#: lib/getopt.c:796 lib/getopt.c:799
+#, c-format
+msgid "%s: illegal option -- %c\n"
+msgstr "%s: misa opcio -- %c\n"
+
+#: lib/getopt.c:805 lib/getopt.c:808
+#, c-format
+msgid "%s: invalid option -- %c\n"
+msgstr "%s: nevalida opcio -- %c\n"
+
+#: lib/getopt.c:863 lib/getopt.c:882 lib/getopt.c:1095 lib/getopt.c:1116
+#, c-format
+msgid "%s: option requires an argument -- %c\n"
+msgstr "%s: opcio bezonas argumenton -- %c\n"
+
+#: lib/getopt.c:935 lib/getopt.c:954
+#, c-format
+msgid "%s: option `-W %s' is ambiguous\n"
+msgstr "%s: opcio \"-W %s\" estas ambigua\n"
+
+#: lib/getopt.c:978 lib/getopt.c:999
+#, c-format
+msgid "%s: option `-W %s' doesn't allow an argument\n"
+msgstr "%s: opcio \"-W %s\" ne toleras argumenton\n"
+
+#: makeinfo/cmds.c:520 makeinfo/cmds.c:542
+#, fuzzy, c-format
+msgid "arguments to @%s ignored"
+msgstr "Misa argumento por %c%s"
+
+#: makeinfo/cmds.c:585
+msgid "January"
+msgstr "januaro"
+
+#: makeinfo/cmds.c:585
+msgid "February"
+msgstr "februaro"
+
+#: makeinfo/cmds.c:585
+msgid "March"
+msgstr "marto"
+
+#: makeinfo/cmds.c:585
+msgid "April"
+msgstr "aprilo"
+
+#: makeinfo/cmds.c:585
+msgid "May"
+msgstr "majo"
+
+#: makeinfo/cmds.c:586
+msgid "June"
+msgstr "junio"
+
+#: makeinfo/cmds.c:586
+msgid "July"
+msgstr "julio"
+
+#: makeinfo/cmds.c:586
+msgid "August"
+msgstr "auxgusto"
+
+#: makeinfo/cmds.c:586
+msgid "September"
+msgstr "septembro"
+
+#: makeinfo/cmds.c:586
+msgid "October"
+msgstr "oktobro"
+
+#: makeinfo/cmds.c:587
+msgid "November"
+msgstr "novembro"
+
+#: makeinfo/cmds.c:587
+msgid "December"
+msgstr "decembro"
+
+#: makeinfo/cmds.c:936
+#, c-format
+msgid "unlikely character %c in @var"
+msgstr "dubinda signo \"%c\" en @var"
+
+#: makeinfo/cmds.c:979
+msgid "@sc argument all uppercase, thus no effect"
+msgstr "argumento de @sc tuta majuskla, do neniel sxangxita"
+
+#: makeinfo/cmds.c:1034
+#, c-format
+msgid "`{' expected, but saw `%c'"
+msgstr "\"{\" atendata, sed \"%c\" ricevita"
+
+#: makeinfo/cmds.c:1074
+msgid "end of file inside verb block"
+msgstr "dosierfino ene de pretarangxita bloko (verb block)"
+
+#: makeinfo/cmds.c:1082
+#, c-format
+msgid "`}' expected, but saw `%c'"
+msgstr "\"}\" atendata, sed \"%c\" ricevita"
+
+#: makeinfo/cmds.c:1112
+msgid ""
+"@strong{Note...} produces a spurious cross-reference in Info; reword to "
+"avoid that"
+msgstr ""
+
+#: makeinfo/cmds.c:1305
+#, c-format
+msgid "%c%s is obsolete"
+msgstr "%c%s arkaikigxis"
+
+#: makeinfo/cmds.c:1414
+#, c-format
+msgid "@sp requires a positive numeric argument, not `%s'"
+msgstr "@sp bezonas ne \"%s\" sed pozitivan argumenton nombran"
+
+#: makeinfo/cmds.c:1763 makeinfo/cmds.c:1819 makeinfo/footnote.c:82
+#, c-format
+msgid "Bad argument to %c%s"
+msgstr "Misa argumento por %c%s"
+
+#: makeinfo/cmds.c:1773 makeinfo/makeinfo.c:4142
+msgid "asis"
+msgstr "asis"
+
+#: makeinfo/cmds.c:1775 makeinfo/cmds.c:1805 makeinfo/makeinfo.c:4144
+msgid "none"
+msgstr "none"
+
+#: makeinfo/cmds.c:1789
+#, fuzzy, c-format
+msgid "Bad argument to @%s"
+msgstr "Misa argumento por %c%s"
+
+#: makeinfo/cmds.c:1803
+msgid "insert"
+msgstr ""
+
+#: makeinfo/defun.c:84
+msgid "Missing `}' in @def arg"
+msgstr "Mankas \"}\" en la argumento de @def"
+
+#: makeinfo/defun.c:403
+msgid "Function"
+msgstr "Funkcio"
+
+#: makeinfo/defun.c:406
+msgid "Macro"
+msgstr "Makroo"
+
+#: makeinfo/defun.c:409
+msgid "Special Form"
+msgstr "Speciala Formo"
+
+#: makeinfo/defun.c:413
+msgid "Variable"
+msgstr "Variablo"
+
+#: makeinfo/defun.c:416
+msgid "User Option"
+msgstr "Uzula opcio"
+
+#: makeinfo/defun.c:420
+msgid "Instance Variable"
+msgstr "Ekzemplera variablo"
+
+#: makeinfo/defun.c:424
+msgid "Method"
+msgstr "Metodo"
+
+#: makeinfo/defun.c:500 makeinfo/defun.c:505 makeinfo/defun.c:545
+#: makeinfo/defun.c:644 makeinfo/xml.c:2229
+msgid "of"
+msgstr "de"
+
+#: makeinfo/defun.c:509 makeinfo/defun.c:513 makeinfo/defun.c:517
+#: makeinfo/defun.c:551 makeinfo/defun.c:650 makeinfo/xml.c:2234
+msgid "on"
+msgstr "sur"
+
+#: makeinfo/defun.c:711
+#, fuzzy, c-format
+msgid "Must be in `@%s' environment to use `@%s'"
+msgstr "Nur en \"%s\"-ensxovo uzeblas \"%sx\"."
+
+#: makeinfo/files.c:435
+#, c-format
+msgid "%s: getwd: %s, %s\n"
+msgstr "%s: getwd: %s, %s\n"
+
+#: makeinfo/files.c:638
+#, c-format
+msgid "`%s' omitted before output filename"
+msgstr ""
+
+#: makeinfo/files.c:646
+#, c-format
+msgid "`%s' omitted since writing to stdout"
+msgstr ""
+
+#: makeinfo/files.c:694
+msgid "Output buffer not empty."
+msgstr ""
+
+#: makeinfo/footnote.c:150
+#, c-format
+msgid "`%c%s' needs an argument `{...}', not just `%s'"
+msgstr "\"%c%s\" bezonas argumenton \"{...}\", ne nuran \"%s\""
+
+#: makeinfo/footnote.c:165
+#, c-format
+msgid "No closing brace for footnote `%s'"
+msgstr "Mankas \"}\" por la piednoto \"%s\""
+
+#: makeinfo/footnote.c:198
+msgid "Footnote defined without parent node"
+msgstr "Piednoto difinita sen patra nodo"
+
+#: makeinfo/footnote.c:210
+msgid "Footnotes inside footnotes are not allowed"
+msgstr "Maleblas fari piednoton al piednoto"
+
+#: makeinfo/footnote.c:302 makeinfo/index.c:189
+msgid "Footnotes"
+msgstr "Piednotoj"
+
+#: makeinfo/html.c:87
+#, c-format
+msgid "%s: could not open --css-file: %s"
+msgstr ""
+
+#: makeinfo/html.c:172
+#, c-format
+msgid "%s:%d: --css-file ended in comment"
+msgstr ""
+
+#: makeinfo/html.c:207
+msgid "Untitled"
+msgstr "Sen titolo"
+
+#: makeinfo/html.c:422
+msgid "[unexpected] no html tag to pop"
+msgstr "[neatendite] mankas HTML-etikedo por elstakigo"
+
+#: makeinfo/html.c:752
+#, c-format
+msgid "[unexpected] invalid node name: `%s'"
+msgstr "[neatendite] misa nodnomo: \"%s\""
+
+#: makeinfo/index.c:169
+#, c-format
+msgid "Unknown index `%s'"
+msgstr "Nekonata indekso \"%s\""
+
+#: makeinfo/index.c:234
+#, c-format
+msgid "Info cannot handle `:' in index entry `%s'"
+msgstr "Info ne povas trakti \":\" en indeksa artikolo \"%s\""
+
+#: makeinfo/index.c:412
+#, c-format
+msgid "Index `%s' already exists"
+msgstr "Jam estas indekso \"%s\""
+
+#: makeinfo/index.c:455
+#, c-format
+msgid "Unknown index `%s' and/or `%s' in @synindex"
+msgstr "Nekonata indekso \"%s\" kajaux \"%s\" en @synindex"
+
+#: makeinfo/index.c:661
+msgid "(line )"
+msgstr ""
+
+#: makeinfo/index.c:669
+#, c-format
+msgid "(line %*d)"
+msgstr ""
+
+#: makeinfo/index.c:750
+#, c-format
+msgid "Unknown index `%s' in @printindex"
+msgstr "Nekonata indekso \"%s\" en @printindex"
+
+#: makeinfo/index.c:819
+#, c-format
+msgid "Entry for index `%s' outside of any node"
+msgstr "Artikolo por indekso \"%s\" estas ekster iu ajn nodo"
+
+#: makeinfo/index.c:822 makeinfo/index.c:858
+msgid "(outside of any node)"
+msgstr "(ekster iu ajn nodo)"
+
+#: makeinfo/index.c:919 makeinfo/index.c:925
+msgid "See "
+msgstr "Vidu "
+
+#: makeinfo/insertion.c:160
+msgid "@item not allowed in argument to @itemize"
+msgstr ""
+
+#: makeinfo/insertion.c:238
+msgid "Broken-Type in insertion_type_pname"
+msgstr "Misa tipo en la funkcio insertion_type_pname"
+
+#: makeinfo/insertion.c:334
+msgid "Enumeration stack overflow"
+msgstr "Troo en la stako de enumeracioj"
+
+#: makeinfo/insertion.c:366
+#, c-format
+msgid "lettering overflow, restarting at %c"
+msgstr "mankas sekva enumeracia litero, rekomencite ekde %c"
+
+#: makeinfo/insertion.c:631
+#, c-format
+msgid "%s requires an argument: the formatter for %citem"
+msgstr "%s bezonas argumenton: la arangxilon por %citem"
+
+#: makeinfo/insertion.c:719
+#, c-format
+msgid "%cfloat environments cannot be nested"
+msgstr ""
+
+#: makeinfo/insertion.c:973
+#, c-format
+msgid "`@end' expected `%s', but saw `%s'"
+msgstr "\"@end\" atendis \"%s\", sed renkontis \"%s\""
+
+#: makeinfo/insertion.c:1337
+#, c-format
+msgid "No matching `%cend %s'"
+msgstr "Mankas para \"%cend %s\""
+
+#: makeinfo/insertion.c:1592
+#, c-format
+msgid "%s requires letter or digit"
+msgstr "%s bezonas literon aux ciferon"
+
+#: makeinfo/insertion.c:1687
+msgid "end of file inside verbatim block"
+msgstr "dosierfino ene de pretarangxita bloko"
+
+#: makeinfo/insertion.c:1913
+#, fuzzy, c-format
+msgid "@%s not meaningful outside `@float' environment"
+msgstr "@%s estas sensenca ene de bloko \"@%s\""
+
+#: makeinfo/insertion.c:1949
+msgid "@menu seen before first @node, creating `Top' node"
+msgstr "@menu jam antaux la unua @nodo; nodo \"Top\" kreitas"
+
+#: makeinfo/insertion.c:1950
+msgid ""
+"perhaps your @top node should be wrapped in @ifnottex rather than @ifinfo?"
+msgstr "eble via @top-nodo staru sub @ifnottex anstataux sub @ifinfo?"
+
+#: makeinfo/insertion.c:1962
+msgid "@detailmenu seen before first node, creating `Top' node"
+msgstr "@detailmenu renkontita jam antaux la unua nodo; nodo \"Top\" kreitas"
+
+#: makeinfo/insertion.c:2018
+#, c-format
+msgid "@%s not meaningful outside `@titlepage' and `@quotation' environments"
+msgstr ""
+
+#: makeinfo/insertion.c:2032
+#, fuzzy, c-format
+msgid "@%s not meaningful outside `@titlepage' environment"
+msgstr "@%s estas sensenca ene de bloko \"@%s\""
+
+#: makeinfo/insertion.c:2063
+#, c-format
+msgid "Unmatched `%c%s'"
+msgstr "Mankas para \"%c%s\""
+
+#: makeinfo/insertion.c:2068
+#, c-format
+msgid "`%c%s' needs something after it"
+msgstr "\"%c%s\" bezonas post si ion"
+
+#: makeinfo/insertion.c:2074
+#, fuzzy, c-format
+msgid "Bad argument `%s' to `@%s', using `%s'"
+msgstr "Misa argumento por \"%s\", \"%s\", uzanta \"%s\""
+
+#: makeinfo/insertion.c:2171
+#, c-format
+msgid "@%s not meaningful inside `@%s' block"
+msgstr "@%s estas sensenca ene de bloko \"@%s\""
+
+#: makeinfo/insertion.c:2180
+#, c-format
+msgid "@itemx not meaningful inside `%s' block"
+msgstr "@itemx estas sensenca ene de bloko \"%s\""
+
+#: makeinfo/insertion.c:2356
+#, c-format
+msgid "%c%s found outside of an insertion block"
+msgstr "%c%s renkontita ekster \"insertion block\""
+
+#: makeinfo/lang.c:580
+#, c-format
+msgid "%s is not a valid ISO 639 language code"
+msgstr "%s ne estas valida lingvokodo laux ISO 639"
+
+#: makeinfo/lang.c:655
+#, fuzzy, c-format
+msgid "unrecognized encoding name `%s'"
+msgstr "nekonata nomo de kodosistemo: %s\""
+
+#: makeinfo/lang.c:663
+#, c-format
+msgid "sorry, encoding `%s' not supported"
+msgstr "Pardonon, la kodo \"%s\" ne estas disponebla"
+
+#: makeinfo/lang.c:715
+#, c-format
+msgid "invalid encoded character `%s'"
+msgstr "misa kodoprezento: \"%s\""
+
+#: makeinfo/lang.c:1009
+#, c-format
+msgid "%c%s expects `i' or `j' as argument, not `%c'"
+msgstr "%c%s atendas argumenton \"i\" aux \"j\", ne \"%c\""
+
+#: makeinfo/lang.c:1013
+#, c-format
+msgid "%c%s expects a single character `i' or `j' as argument"
+msgstr "%c%s akceptas nur solsignan argumenton \"i\" aux \"j\""
+
+#: makeinfo/macro.c:128
+#, c-format
+msgid "macro `%s' previously defined"
+msgstr "makroo \"%s\" jam difinita antauxe"
+
+#: makeinfo/macro.c:132
+#, c-format
+msgid "here is the previous definition of `%s'"
+msgstr "cxi tie estas la antauxa difino de \"%s\""
+
+#: makeinfo/macro.c:355
+#, fuzzy, c-format
+msgid "\\ in macro expansion followed by `%s' instead of parameter name"
+msgstr ""
+"en makroo, \\ sekvata de \"%s\" (anstataux de \\ aux 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:586
+#, c-format
+msgid "%cend macro not found"
+msgstr "makroo %cend ne trovigxis"
+
+#: makeinfo/macro.c:624
+msgid "@quote-arg only useful for single-argument macros"
+msgstr "@quote-arg utilas nur en sol-argumentaj makrooj"
+
+#: makeinfo/macro.c:660
+#, c-format
+msgid "mismatched @end %s with @%s"
+msgstr "misa @end %s por @%s"
+
+#: makeinfo/makeinfo.c:184
+#, c-format
+msgid "Too many errors! Gave up.\n"
+msgstr "Tro multe da eraroj! Halt'.\n"
+
+#: makeinfo/makeinfo.c:302
+#, c-format
+msgid "%s:%d: warning: "
+msgstr "%s:%d: averto: "
+
+#: makeinfo/makeinfo.c:321 makeinfo/makeinfo.c:2260
+#, c-format
+msgid "Misplaced %c"
+msgstr "Misloka %c"
+
+#: makeinfo/makeinfo.c:340
+#, c-format
+msgid "Try `%s --help' for more information.\n"
+msgstr "Por pluaj detaloj tajpu \"%s --help\".\n"
+
+#: makeinfo/makeinfo.c:343
+#, c-format
+msgid "Usage: %s [OPTION]... TEXINFO-FILE...\n"
+msgstr "Uzmaniero: %s [OPCIO]... TEXINFO-DOSIERO...\n"
+
+#: makeinfo/makeinfo.c:346
+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 ""
+"Tradukas fontan Texinfo-dokumenton en diversajn aliajn formojn, defauxlte "
+"en\n"
+"Info-dosierojn tauxgajn por dialoga legado per Emakso aux per auxtonoma GNU-"
+"Info.\n"
+
+#: makeinfo/makeinfo.c:350
+#, c-format
+msgid ""
+"General options:\n"
+" --error-limit=NUM quit after NUM errors (default %d).\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"
+" --reference-limit=NUM warn about at most NUM references (default %"
+"d).\n"
+" -v, --verbose explain what is being done.\n"
+" --version display version information and exit.\n"
+msgstr ""
+"Gxeneralaj opcioj:\n"
+" --error-limit=NOM Cxesu post NOM eraroj (defauxlte %d).\n"
+" --force Retenu eligajxon ecx post eraroj.\n"
+" --help Eligu cxi tiun helpon kaj finu.\n"
+" --no-validate Ne kontrolu la internodajn referencojn.\n"
+" --no-warn Ne eligu avertojn (ne koncernas "
+"erarmesagxojn).\n"
+" --reference-limit=NUM Avertu pri ne pli ol N referencoj (defauxlte "
+"%d).\n"
+" -v, --verbose Rakontu kio estas farata.\n"
+" --version Eligu la nomon, la version de la programo kaj "
+"eliru.\n"
+
+#: makeinfo/makeinfo.c:364
+#, 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 (defauxlte, Info):\n"
+" --docbook Generu en DocBook anstataux en Info.\n"
+" --html Generu en HTML anstataux en Info.\n"
+" --xml Generu en XML (TexinfoML) anstataux en Info.\n"
+
+#: makeinfo/makeinfo.c:372
+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 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 (directory if split HTML),\n"
+msgstr ""
+"Gxeneralaj opcioj generadaj:\n"
+" -E, --macro-expand DOSIER Konservu makrotraktitan fontajxon en DOSIERo,\n"
+" sen atenti cxiajn @setfilename.\n"
+" --no-headers Generu platan tekston, sen dispartigi en "
+"nodojn,\n"
+" sen fari la \"Node:\"liniojn kaj menuojn; "
+"krome,\n"
+" eligu en la cxefeligujon manke de --output.\n"
+" --no-split Ne disfendu grandan Info- aux HTML-dosieron,\n"
+" faru unu solan rezultan dosieron.\n"
+" --number-sections Generu kun la numeroj de cxapitroj, sekcioj "
+"ktp.\n"
+" -o, --output=DOSIER Skribu en DOSIERon (DOSIERujon, por fenda "
+"HTML).\n"
+
+#: makeinfo/makeinfo.c:386
+#, c-format
+msgid ""
+"Options for Info and plain text:\n"
+" --enable-encoding output accented and special characters in\n"
+" Info output based on @documentencoding.\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\n"
+" in which they are defined (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 Eligu diakritajxojn kaj specialajn signojn\n"
+" laux @documentencoding.\n"
+" --fill-column=N Rompu Info-liniojn post N signoj (defauxlte %"
+"d)\n"
+" --footnote-style=STILO Arangxu la piednotojn laux STILO:\n"
+" \"separate\" -- loku piednotojn en apartan "
+"nodon;\n"
+" \"end\" -- loku ilin fine de la nodo en "
+"kiu\n"
+" ili estas difinitaj (la defauxlto).\n"
+" --paragraph-indent=VAL Alinea ensxovo estu VAL spacetoj (defauxlte %"
+"d);\n"
+" se VAL estas \"none\", ne ensxovu;\n"
+" se VAL estas \"asis\", obeu la fontan "
+"ensxovon.\n"
+" --split-size=N Fendu en dosierojn po N (defauxlte %d).\n"
+
+#: makeinfo/makeinfo.c:403
+msgid ""
+"Options for HTML:\n"
+" --css-include=FILE include FILE in HTML <style> output;\n"
+" read stdin if FILE is -.\n"
+msgstr ""
+
+#: makeinfo/makeinfo.c:409
+#, 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:416
+#, 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 ""
+"Opcioj pri la fontodosieroj:\n"
+" --commands-in-node-names Permesu @-komandojn en nodnomoj.\n"
+" -D VAR Difinu la variablon VAR, kiel per @set.\n"
+" -I UJO Alkrocxu dosierUJOn al la sercxvojo de "
+"@include.\n"
+" -P UJO Antauxmetu dosierUJOn al la sercxvojo de "
+"@include.\n"
+" -U VAR Maldifinu la variablon VAR, kiel per "
+"@clear.\n"
+
+#: makeinfo/makeinfo.c:425
+#, 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 ""
+"Kondicxa traktado cxe enigo:\n"
+" --ifhtml Traktu la pecojn sub @ifhtml kaj @html ecx se ne\n"
+" HTML estas generata\n"
+" --ifinfo Traktu la pecojn sub @ifinfo ecx se ne Info generatas\n"
+" --ifplaintext Traktu la pecojn sub @ifplaintext ecx se alia formo ol\n"
+" plata teksto estas generata\n"
+" --iftex Traktu la pecojn sub @iftex kaj @tex; implicas --no-"
+"split\n"
+" --ifxml Traktu la pecojn sub @ifxml kaj @xml\n"
+" --no-ifhtml Ne traktu la pecojn sub @ifhtml kaj @html\n"
+" --no-ifinfo Ne traktu la pecojn sub @ifinfo.\n"
+" --no-ifplaintext Ne traktu la pecojn sub @ifplaintext\n"
+" --no-iftex Ne traktu la pecojn sub @iftex kaj @tex\n"
+" --no-ifxml Ne traktu la pecojn sub @ifxml kaj @xml\n"
+
+#: makeinfo/makeinfo.c:444
+#, 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 ""
+"La defauxlta konduto de la @if...-frazoj dependas je la celata formo:\n"
+"se HTML estas generata, --ifhtml sxaltigxas kaj la ceteraj, malsxaltigxas;\n"
+"cxe Info-generado, --ifinfo sxaltigxas kaj la ceteraj, malsxaltigxas; \n"
+"se plata teksto estas generata, --ifplaintext sxaltigxas kaj la ceteraj,\n"
+"malsxaltigxas.\n"
+
+#: makeinfo/makeinfo.c:452
+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 konservu Info laux @setfilename\n"
+" makeinfo --html UM.texi konservu HTML laux @setfilename\n"
+" makeinfo --xml UM.texi konservu Texinfo-XML laux "
+"@setfilename\n"
+" makeinfo --docbook UM.texi konservu DocBook-XML laux "
+"@setfilename\n"
+" makeinfo --no-headers -o - UM.texi sendu platan tekston en cxefeligujon\n"
+"\n"
+" makeinfo --html --no-headers UM.texi konservu HTML sen \"Node:\"-linioj, "
+"menuoj\n"
+" makeinfo --number-sections UM.texi konservu Info kun la sekcinumeroj\n"
+" makeinfo --no-split UM.texi faru unu Info-dosieron, kiom ajn "
+"grandan\n"
+
+#: makeinfo/makeinfo.c:603
+#, c-format
+msgid "%s: Ignoring unrecognized TEXINFO_OUTPUT_FORMAT value `%s'.\n"
+msgstr ""
+
+#: makeinfo/makeinfo.c:647 makeinfo/makeinfo.c:673 makeinfo/makeinfo.c:692
+#: makeinfo/makeinfo.c:722 makeinfo/makeinfo.c:743
+#, c-format
+msgid "%s: %s arg must be numeric, not `%s'.\n"
+msgstr "%s: la argumento %s devas esti nombra, ne \"%s\".\n"
+
+#: makeinfo/makeinfo.c:660
+#, fuzzy, c-format
+msgid "%s: could not open macro expansion output `%s'"
+msgstr "Fiaskis malfermo de makrotraktada eligdosiero \"%s\""
+
+#: makeinfo/makeinfo.c:665
+#, fuzzy, c-format
+msgid "%s: ignoring second macro expansion output `%s'.\n"
+msgstr "Fiaskis malfermo de makrotraktada eligdosiero \"%s\""
+
+#: makeinfo/makeinfo.c:707
+#, c-format
+msgid "%s: --paragraph-indent arg must be numeric/`none'/`asis', not `%s'.\n"
+msgstr ""
+"%s: argumento de la opcio --paragraph-indent estu nombra, \"none\" aux\n"
+"\"asis\", ne \"%s\".\n"
+
+#: makeinfo/makeinfo.c:732
+#, c-format
+msgid "%s: --footnote-style arg must be `separate' or `end', not `%s'.\n"
+msgstr ""
+"%s: argumento de la opcio --footnote-style estu \"separate\" aux\n"
+"\"end\", ne \"%s\".\n"
+
+#: makeinfo/makeinfo.c:806
+#, c-format
+msgid "%s: missing file argument.\n"
+msgstr "%s: mankas dosiera argumento.\n"
+
+#: makeinfo/makeinfo.c:997 makeinfo/makeinfo.c:3991
+#, c-format
+msgid "Multiline command %c%s used improperly"
+msgstr ""
+
+#: makeinfo/makeinfo.c:1000
+#, c-format
+msgid "Expected `%s'"
+msgstr "\"%s\" atendatas"
+
+#: makeinfo/makeinfo.c:1479
+#, c-format
+msgid "Can't create directory `%s': %s"
+msgstr "Provo krei dosierujon \"%s\" malsukcesis: %s"
+
+#: makeinfo/makeinfo.c:1525
+#, c-format
+msgid "No `%s' found in `%s'"
+msgstr "Neniu \"%s\" trovita en \"%s\""
+
+#: makeinfo/makeinfo.c:1605
+#, c-format
+msgid "%s: Skipping macro expansion to stdout as Info output is going there.\n"
+msgstr ""
+"%s: Makrotraktitajxo ne trafos en la cxefeligujon cxar Info iras tien.\n"
+
+#: makeinfo/makeinfo.c:1638
+#, c-format
+msgid "Making %s file `%s' from `%s'.\n"
+msgstr "%s-dosiero \"%s\" estas generata el \"%s\".\n"
+
+#: makeinfo/makeinfo.c:1673
+#, c-format
+msgid "This is %s, produced by makeinfo version %s from %s.\n"
+msgstr "Cxi tiun dosieron %s generis Makeinfo-%s el %s.\n"
+
+#: makeinfo/makeinfo.c:1709
+#, c-format
+msgid ""
+"%s: Removing macro output file `%s' due to errors; use --force to preserve.\n"
+msgstr ""
+"%s: La eligdosiero \"%s\" por makrotraktitajxo forigitas cxar estis eraroj;\n"
+"uzu la opcion --force por gxin reteni.\n"
+
+#: makeinfo/makeinfo.c:1773
+#, c-format
+msgid "%s: Removing output file `%s' due to errors; use --force to preserve.\n"
+msgstr ""
+"%s: La eligdosiero \"%s\" forigitas cxar estis eraroj;\n"
+"uzu la opcion --force por gxin reteni.\n"
+
+#: makeinfo/makeinfo.c:2034
+#, c-format
+msgid "Unknown command `%s'"
+msgstr "Nekonata komando \"%s\"."
+
+#: makeinfo/makeinfo.c:2056
+#, 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:2314
+#, fuzzy, c-format
+msgid "%c%s expected braces"
+msgstr "%c%s postulas vinkulojn \"{...}\""
+
+#: makeinfo/makeinfo.c:2327
+msgid "Unmatched }"
+msgstr "Senpara \"}\""
+
+#: makeinfo/makeinfo.c:2375
+msgid "NO_NAME!"
+msgstr "SEN_NOMO!"
+
+#: makeinfo/makeinfo.c:2396
+#, c-format
+msgid "%c%s missing close brace"
+msgstr "%c%s sen \"}\""
+
+#: makeinfo/makeinfo.c:3309
+#, 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:3315
+#, fuzzy, c-format
+msgid "No such file `%s'"
+msgstr "Neniu \"%s\" trovita en \"%s\""
+
+#: makeinfo/makeinfo.c:3447
+#, c-format
+msgid "@image file `%s' (for text) unreadable: %s"
+msgstr "bilddosiero \"%s\" (por teksto) estas nelegebla: %s"
+
+#: makeinfo/makeinfo.c:3456
+msgid "@image missing filename argument"
+msgstr "mankas dosiera argumento en la komando @image"
+
+#: makeinfo/makeinfo.c:3675
+#, c-format
+msgid "undefined flag: %s"
+msgstr ""
+
+#: makeinfo/makeinfo.c:3676
+#, c-format
+msgid "{No value for `%s'}"
+msgstr "{Mankas Valoro Por \"%s\"}"
+
+#: makeinfo/makeinfo.c:3728
+#, c-format
+msgid "%c%s requires a name"
+msgstr "%c%s bezonas nomon"
+
+#: makeinfo/makeinfo.c:3834
+#, c-format
+msgid "Reached eof before matching @end %s"
+msgstr "Pli frue ol la para @end %s renkontigxis dosierfino"
+
+#: makeinfo/makeinfo.c:4082
+#, 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 sxablono de @multitable"
+
+#: makeinfo/multi.c:254
+#, c-format
+msgid "ignoring stray text `%s' after @multitable"
+msgstr "la misa teksto \"%s\" post @multitable estas ignorita"
+
+#: makeinfo/multi.c:393
+#, c-format
+msgid "Too many columns in multitable item (max %d)"
+msgstr "Tro da kolumnoj en elemento de \"multitable\" (%d maksimume)"
+
+#: makeinfo/multi.c:555
+#, c-format
+msgid "[unexpected] cannot select column #%d in multitable"
+msgstr "[neatendite] maleblas elekti %d-an kolumnon en \"multitable\"."
+
+#: makeinfo/multi.c:584
+msgid "ignoring @tab outside of multitable"
+msgstr "komando @tab ekster \"multitable\"; ignorita"
+
+#: makeinfo/multi.c:632
+#, c-format
+msgid "** Multicolumn output from last row:\n"
+msgstr "** Multekolumna eligo el la lasta linio:\n"
+
+#: makeinfo/multi.c:635
+#, c-format
+msgid "* column #%d: output = %s\n"
+msgstr "* kolumno %d-a: eligajxo = %s\n"
+
+#: makeinfo/node.c:280
+#, c-format
+msgid "Node `%s' previously defined at line %d"
+msgstr "Nodo \"%s\" jam difinita en la linio %d"
+
+#: makeinfo/node.c:648
+#, c-format
+msgid "Formatting node %s...\n"
+msgstr "Estas arangxata la nodo \"%s\" ...\n"
+
+#: makeinfo/node.c:716
+#, 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:879
+#, c-format
+msgid "No node name specified for `%c%s' command"
+msgstr "Mankas nodnomo por la komando \"%c%s\""
+
+#: makeinfo/node.c:920 makeinfo/node.c:1151
+#, 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:923
+msgid "This @anchor command ignored; references to it will not work"
+msgstr ""
+"Cxi tiu @anchor-komando estas ignorita; la referencoj al gxi ne funkcios"
+
+#: makeinfo/node.c:925 makeinfo/node.c:1154
+msgid "Rename this anchor or use the `--no-split' option"
+msgstr "Alinomu la ankron aux uzu la opcion \"--no-split\""
+
+#: makeinfo/node.c:955
+#, c-format
+msgid "Unexpected string at end of split-HTML file `%s'"
+msgstr "Nekonvena signocxeno fine de disfendita HTML-dosiero \"%s\""
+
+#: makeinfo/node.c:991
+msgid "Next:"
+msgstr "Sekva:"
+
+#: makeinfo/node.c:1007
+msgid "Previous:"
+msgstr "Antauxa:"
+
+#: makeinfo/node.c:1021
+msgid "Up:"
+msgstr "Supre:"
+
+#: makeinfo/node.c:1148
+#, 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:1153
+msgid "@anchor command ignored; references to it will not work"
+msgstr "Ignorita @anchor-komando; la referencoj al gxi ne funkcios"
+
+#: makeinfo/node.c:1347
+#, c-format
+msgid "%s reference to nonexistent node `%s' (perhaps incorrect sectioning?)"
+msgstr "%s referencas neekzistantan nodon \"%s\" (cxu eraro en sekciarangxo?)"
+
+#: makeinfo/node.c:1363
+msgid "Menu"
+msgstr "Menuo"
+
+#: makeinfo/node.c:1365
+msgid "Cross"
+msgstr "Referenco"
+
+#: makeinfo/node.c:1447
+#, 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 (cxu misa "
+"sekciarangxo?)"
+
+#: makeinfo/node.c:1450
+#, c-format
+msgid "This node (%s) has the bad Prev"
+msgstr "Cxi tiu nodo (\"%s\") havas eraran kampon \"Prev\""
+
+#: makeinfo/node.c:1462
+msgid "Prev"
+msgstr "Antauxa"
+
+#: makeinfo/node.c:1505
+#, 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:1509
+#, c-format
+msgid "This node (%s) has the bad Next"
+msgstr "Cxi tiu nodo (\"%s\") havas eraran kampon \"Next\""
+
+#: makeinfo/node.c:1521
+#, c-format
+msgid "`%s' has no Up field (perhaps incorrect sectioning?)"
+msgstr "\"%s\" malhavas kampon \"Up\" (cxu eraro en sekciarangxo?)"
+
+#: makeinfo/node.c:1524
+msgid "Up"
+msgstr "Supre"
+
+#: makeinfo/node.c:1590
+#, c-format
+msgid "Node `%s' lacks menu item for `%s' despite being its Up target"
+msgstr "En \"%s\" mankas menuero por \"%s\", malgraux ties ligilo \"Up\"\""
+
+#: makeinfo/node.c:1619
+#, c-format
+msgid "node `%s' has been referenced %d times"
+msgstr "la nodo \"%s\" estis referencita %d fojojn"
+
+#: makeinfo/node.c:1633
+#, c-format
+msgid "unreferenced node `%s'"
+msgstr "la nodo \"%s\" ne estas referencita"
+
+#: makeinfo/node.c:1723
+#, c-format
+msgid "Removing %s\n"
+msgstr ""
+
+#: makeinfo/node.c:1727
+#, fuzzy, c-format
+msgid "Can't remove file `%s': %s"
+msgstr "Provo krei dosierujon \"%s\" malsukcesis: %s"
+
+#: makeinfo/sectioning.c:122
+#, fuzzy, c-format
+msgid "Appendix %c"
+msgstr "Aldono %c"
+
+#: makeinfo/sectioning.c:467
+#, fuzzy, c-format
+msgid "Internal error (search_sectioning) `%s'!"
+msgstr "Interna eraro (search_sectioning) \"%s\"!"
+
+#: makeinfo/sectioning.c:562
+#, c-format
+msgid "Internal error (search_sectioning) \"%s\"!"
+msgstr "Interna eraro (search_sectioning) \"%s\"!"
+
+#: makeinfo/sectioning.c:623
+#, c-format
+msgid "%c%s is obsolete; use %c%s instead"
+msgstr "%c%s arkaikigxis; uzu %c%s anstatauxe"
+
+#: makeinfo/sectioning.c:639
+#, c-format
+msgid "Node with %ctop as a section already exists"
+msgstr "Jam estas nodo kun sekcio %ctop"
+
+#: makeinfo/sectioning.c:647
+#, c-format
+msgid "Here is the %ctop node"
+msgstr "Jen estas la nodo %ctop"
+
+#: makeinfo/sectioning.c:663
+#, c-format
+msgid "%ctop used before %cnode, defaulting to %s"
+msgstr "%ctop aperis pli frue ol %cnode; la defauxlto uzota estas %s"
+
+#: makeinfo/toc.c:197 makeinfo/toc.c:271 makeinfo/toc.c:273
+msgid "Table of Contents"
+msgstr "Enhavtabelo"
+
+#: makeinfo/toc.c:304 makeinfo/toc.c:337 makeinfo/toc.c:339
+msgid "Short Contents"
+msgstr "Maldetala enhavtabelo"
+
+#: makeinfo/xml.c:1605
+#, c-format
+msgid "@image file `%s' unreadable: %s"
+msgstr "dosiero \"%s\" en la komando @image estas nelegebla: %s"
+
+#: makeinfo/xml.c:2097
+msgid ""
+"@headitem as the last item of @multitable produces invalid Docbook documents"
+msgstr ""
+
+#: util/install-info.c:154
+#, c-format
+msgid "%s: warning: "
+msgstr "%s: averto: "
+
+#: util/install-info.c:203
+#, c-format
+msgid " for %s"
+msgstr " por %s"
+
+#: util/install-info.c:426
+#, c-format
+msgid "\tTry `%s --help' for a complete list of options.\n"
+msgstr "\tPor ricevi kompletan liston da opcioj tajpu \"%s --help\".\n"
+
+#: util/install-info.c:434
+#, c-format
+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 ""
+"Sintakso: %s [OPCIO]... [INFO-DOSIERO [DIR-DOSIERO]]\n"
+"\n"
+"Instalu aux forigu \"dir\"-ajxojn el INFO-DOSIERO en la Info-katalogo\n"
+" DIR-DOSIERO.\n"
+"\n"
+"Opcioj:\n"
+"--delete Forigu la ekzistantajn \"dir\"-ajxojn pri INFO-DOSIERO;\n"
+" ne ensxovu iun ajn novan \"dir\"-ajxon.\n"
+"--dir-file=NOMO Indiku la dosieran NOMOn de Info-katalogo.\n"
+" Samkiel uzi la argumenton DIR-DOSIERO.\n"
+"--entry=TEKSTO Ensxovu TEKSTOn kiel \"dir\"-ajxojn por Info-katalogo.\n"
+" TEKSTO havu la formon de menuera linio plus nul aux\n"
+" pluraj linioj kromaj, komencantaj per blanka spaco.\n"
+" Se estas pli ol unu \"dir\"-ajxo, ili cxiuj aldonigxos.\n"
+" Se estas nenia \"dir\"-ajxo, aldonigxos \"dir\"-ajxoj\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"
+" Cxiu \"dir\"-ajxo fakte estas menuero.\n"
+"--quiet Ne eligu avertojn.\n"
+"--remove Sinonimo por --delete.\n"
+"--section=SEKC Metu la \"dir\"-ajxojn en sekcion SEKC de la Info-"
+"katalogo.\n"
+" Se pli ol unu sekcio estas indikitaj, cxiuj \"dir\"-"
+"ajxoj\n"
+" aldonigxas en ilin cxiujn. Se neniu sekcio estas "
+"indikita,\n"
+" ili determinigxos el la informoj de la Info-dosiero.\n"
+"--version Eligu la nomon, la version de la programo kaj eliru.\n"
+
+#: util/install-info.c:488
+#, 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 ""
+"Cxi tio estas la dosiero .../info/dir, entenanta la pinton de la \n"
+"la hierarkio Info -- la cxefkatalogan nodon nomatan (dir)Top.\n"
+"Unuafoje lancxinte la programon Info, vi trafas en tiun nodon.\n"
+"\n"
+"%s\\tLa pinto de la INFO-hierarkio\n"
+"\n"
+" Cxi tie (en la Info-katalogo) estas menuo de la cxefaj temoj.\n"
+" Tajpu \"q\" por eliri; \"?\" por eligi cxiujn komandojn de Info;\n"
+" \"d\" por reveni cxi tien; \"h\" vokas lernilon por komencantoj;\n"
+" \"mEmacs<Return>\" disponigas la manlibron pri Emakso; ktp.\n"
+"\n"
+" Se vi legas per Emakso, alklaku menueron aux referencon per la 2-a\n"
+" musbutono por elekti la temon.\n"
+"\n"
+"%s\n"
+
+#: util/install-info.c:513
+#, 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"
+
+#: util/install-info.c:600
+#, c-format
+msgid "%s: empty file"
+msgstr "%s: malplena dosiero"
+
+#: util/install-info.c:913 util/install-info.c:953
+msgid "START-INFO-DIR-ENTRY without matching END-INFO-DIR-ENTRY"
+msgstr "START-INFO-DIR-ENTRY sen para END-INFO-DIR-ENTRY"
+
+#: util/install-info.c:948
+msgid "END-INFO-DIR-ENTRY without matching START-INFO-DIR-ENTRY"
+msgstr "END-INFO-DIR-ENTRY sen para START-INFO-DIR-ENTRY"
+
+#: util/install-info.c:1191 util/install-info.c:1201
+#, c-format
+msgid "%s: already have dir file: %s\n"
+msgstr ""
+
+#: util/install-info.c:1236
+#, c-format
+msgid "%s: Specify the Info file only once.\n"
+msgstr "%s: Indiku la Info-dosieron solfoje.\n"
+
+#: util/install-info.c:1284
+#, c-format
+msgid "excess command line argument `%s'"
+msgstr "troa argumento komandlinia: \"%s\""
+
+#: util/install-info.c:1288
+msgid "No input file specified; try --help for more information."
+msgstr "Mankas enigdosiero; provu --help por pluaj informoj."
+
+#: util/install-info.c:1291
+msgid "No dir file specified; try --help for more information."
+msgstr "Mankas dosiero Info-katalogo (dir); provu --help por pluaj informoj."
+
+#: util/install-info.c:1313
+#, c-format
+msgid "no info dir entry in `%s'"
+msgstr "Nenia informo por Info-katalogo trovigxis en \"%s\""
+
+#: util/install-info.c:1426
+#, c-format
+msgid "menu item `%s' already exists, for file `%s'"
+msgstr "menuero \"%s\" jam ekzistas (por la dosiero \"%s\")"
+
+#: util/install-info.c:1449
+#, c-format
+msgid "no entries found for `%s'; nothing deleted"
+msgstr "Trovigxis nenia informo Info-kataloga pri \"%s\"; nenio igxis forigita"
+
+#: util/texindex.c:252
+msgid "display this help and exit"
+msgstr "eligu cxi tiun helpon kaj eliru"
+
+#: util/texindex.c:254
+msgid "keep temporary files around after processing"
+msgstr "konservu la labordosierojn post la traktado"
+
+#: util/texindex.c:256
+msgid "do not keep temporary files around after processing (default)"
+msgstr "ne konservu la labordosierojn post la traktado (defauxlto)"
+
+#: util/texindex.c:258
+msgid "send output to FILE"
+msgstr "sendu la eligajxon en DOSIEROn"
+
+#: util/texindex.c:260
+msgid "display version information and exit"
+msgstr "eligu la uzatan version kaj eliru"
+
+#: util/texindex.c:270
+#, c-format
+msgid "Usage: %s [OPTION]... FILE...\n"
+msgstr "Uzmaniero: %s [OPCIO]... DOSIERO...\n"
+
+#: util/texindex.c:271
+#, c-format
+msgid "Generate a sorted index for each TeX output FILE.\n"
+msgstr "Generu ordigitan indekson por cxiu TeX-a elig-DOSIERO.\n"
+
+#: util/texindex.c:274
+#, 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:276
+#, c-format
+msgid ""
+"\n"
+"Options:\n"
+msgstr ""
+"\n"
+"Opcioj:\n"
+
+#: util/texindex.c:876 util/texindex.c:910 util/texindex.c:983
+#: util/texindex.c:1011
+#, c-format
+msgid "%s: not a texinfo index file"
+msgstr "%s: ne indeksa dosiero laux Texinfo"
+
+#: util/texindex.c:968
+#, c-format
+msgid "failure reopening %s"
+msgstr "fiasko cxe remalfermo de %s"
+
+#: util/texindex.c:1218
+#, c-format
+msgid "No page number in %s"
+msgstr "Mankas pagxnumero en %s"
+
+#: util/texindex.c:1291
+#, c-format
+msgid "entry %s follows an entry with a secondary name"
+msgstr "la artikolo %s sekvas artikolon kun kromnomo"
+
+#~ msgid "%s: Specify the Info directory only once.\n"
+#~ msgstr "%s: Indiku la Info-katalogon solfoje.\n"
+
+#~ msgid "\"\" is invalid"
+#~ msgstr "\"\" ne validas"
+
+#~ msgid "%s is an invalid ISO code, using %c"
+#~ msgstr "\"%s\" ne estas valida ISO-kodo; estos \"%c\" anstatauxe"
+
+#~ msgid "Cannot specify more than one macro expansion output"
+#~ msgstr "Ne povas esti pli ol unu makrotraktada eligdosiero"
+
+#~ msgid "File exists, but is not a directory"
+#~ msgstr "La dosiero ekzistas, sed gxi ne estas dosierujo"
+
+#~ msgid "First argument to cross-reference may not be empty"
+#~ msgstr "La unua argumento de internoda referenco ne vaku"
+
+#~ msgid "see "
+#~ msgstr "vidu "
+
+#~ msgid "`.' or `,' must follow cross reference, not %c"
+#~ msgstr "Referencon devas sekvi punkto aux komo, ne %c"
+
+#~ msgid "First argument to @inforef may not be empty"
+#~ msgstr "La unua argumento de @inforef ne vaku"
+
+#~ msgid "Node:"
+#~ msgstr "Nodo:"
+
+#~ msgid "%s: TOC should be here, but it was not found"
+#~ msgstr "%s: cxi tie mankas enhavtabelo"
+
+#~ msgid "virtual memory exhausted"
+#~ msgstr "virtuala memoro elcxerpitas"
+
+#~ msgid "No `%s.png' or `.jpg', and no extension supplied"
+#~ msgstr "Troveblas nek \"%s.png\" nek \".jpg\", kaj sufikso mankas"
+
+#~ msgid "%s; for file `%s'.\n"
+#~ msgstr "%s; por la dosiero \"%s\".\n"
diff --git a/macros/texinfo/contrib/texinfo-hu/texinfo/po/fr.gmo b/macros/texinfo/contrib/texinfo-hu/texinfo/po/fr.gmo
new file mode 100644
index 0000000000..daa9765f60
--- /dev/null
+++ b/macros/texinfo/contrib/texinfo-hu/texinfo/po/fr.gmo
Binary files differ
diff --git a/macros/texinfo/contrib/texinfo-hu/texinfo/po/fr.po b/macros/texinfo/contrib/texinfo-hu/texinfo/po/fr.po
new file mode 100644
index 0000000000..59e25de8c9
--- /dev/null
+++ b/macros/texinfo/contrib/texinfo-hu/texinfo/po/fr.po
@@ -0,0 +1,3524 @@
+# 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: 2004-12-21 16:20-0800\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"
+
+#: info/echo-area.c:284 info/session.c:689
+msgid "Move forward a character"
+msgstr "Avancer d'un caractère"
+
+#: info/echo-area.c:296 info/session.c:705
+msgid "Move backward a character"
+msgstr "Reculer d'un caractère"
+
+#: info/echo-area.c:308
+msgid "Move to the start of this line"
+msgstr "Se déplacer au début de cette ligne"
+
+#: info/echo-area.c:313
+msgid "Move to the end of this line"
+msgstr "Se déplacer à la fin de cette ligne"
+
+#: info/echo-area.c:321 info/session.c:723
+msgid "Move forward a word"
+msgstr "Avancer d'un mot"
+
+#: info/echo-area.c:361 info/session.c:772
+msgid "Move backward a word"
+msgstr "Reculer d'un mot"
+
+#: info/echo-area.c:401
+msgid "Delete the character under the cursor"
+msgstr "Éliminer le caractère sous le curseur"
+
+#: info/echo-area.c:431
+msgid "Delete the character behind the cursor"
+msgstr "Éliminer le caractère précédent le curseur"
+
+#: info/echo-area.c:452
+msgid "Cancel or quit operation"
+msgstr "Annuler ou opération de quitter"
+
+#: info/echo-area.c:467
+msgid "Accept (or force completion of) this line"
+msgstr "Accepter cette ligne (ou en forcer la complétion)"
+
+#: info/echo-area.c:472
+msgid "Insert next character verbatim"
+msgstr "Insérer le prochain caractère textuellement"
+
+#: info/echo-area.c:480
+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:653
+msgid "Kill the word preceding the cursor"
+msgstr "Effacer le mot précédent le curseur"
+
+#: info/echo-area.c:868 info/echo-area.c:924
+msgid "No completions"
+msgstr "Aucune complétion"
+
+#: info/echo-area.c:870
+msgid "Not complete"
+msgstr "Non complet"
+
+#: info/echo-area.c:911
+msgid "List possible completions"
+msgstr "Énumérer les complétions possibles"
+
+#: info/echo-area.c:928
+msgid "Sole completion"
+msgstr "Une seule complétion"
+
+#: info/echo-area.c:937
+msgid "One completion:\n"
+msgstr "Une complétion:\n"
+
+#: info/echo-area.c:938
+#, c-format
+msgid "%d completions:\n"
+msgstr "%d complétions:\n"
+
+#: info/echo-area.c:1085
+msgid "Insert completion"
+msgstr "Insérer la complétion"
+
+#: info/echo-area.c:1220
+msgid "Building completions..."
+msgstr "Construction des complétions..."
+
+#: info/echo-area.c:1340
+msgid "Scroll the completions window"
+msgstr "Dérouler la fenêtre des complétions"
+
+#: info/footnotes.c:213
+msgid "Footnotes could not be displayed"
+msgstr "Les notes en bas de page ne peuvent pas être affichées"
+
+#: info/footnotes.c:239
+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:172
+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:199
+msgid "Finding index entries..."
+msgstr "Recherche des entrées d'index..."
+
+#: info/indices.c:207
+msgid "No indices found."
+msgstr "Aucun indice retrouvé."
+
+#: info/indices.c:217
+msgid "Index entry: "
+msgstr "Entrée d'index: "
+
+#: info/indices.c:325
+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:335
+msgid "No previous index search string."
+msgstr "Aucune autre chaîne de fouille d'index."
+
+#: info/indices.c:342
+msgid "No index entries."
+msgstr "Aucune entrée d'index."
+
+#: info/indices.c:375
+#, c-format
+msgid "No %sindex entries containing `%s'."
+msgstr "Aucune entrée %sindex contenant « %s »."
+
+#: info/indices.c:376
+msgid "more "
+msgstr "plus "
+
+#: info/indices.c:386
+msgid "CAN'T SEE THIS"
+msgstr "NE PEUT PAS VOIR CECI"
+
+#: info/indices.c:422
+#, 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:541
+#, c-format
+msgid "Scanning indices of `%s'..."
+msgstr "Fouille des indices de « %s »..."
+
+#: info/indices.c:596
+#, 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:622
+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:626
+msgid "Index apropos: "
+msgstr "Index à-propos: "
+
+#: info/indices.c:654
+#, 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:295 makeinfo/makeinfo.c:766 util/install-info.c:1266
+#: util/texindex.c:343
+#, c-format
+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"
+
+#: info/info.c:498
+#, c-format
+msgid "no index entries found for `%s'\n"
+msgstr "aucune entrée d'index retrouvée pour « %s »\n"
+
+#: info/info.c:590
+msgid " -b, --speech-friendly be friendly to speech synthesizers.\n"
+msgstr ""
+" -b, --speech-friendly Être compatible au synthétiseur de voix.\n"
+
+#: info/info.c:597
+#, c-format
+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 -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"
+
+#: info/info.c:635 info/infokey.c:918 makeinfo/makeinfo.c:465
+#: util/install-info.c:466 util/texindex.c:292
+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:669
+#, c-format
+msgid "Cannot find node `%s'."
+msgstr "Ne peut pas trouver le noeud « %s »."
+
+#: info/info.c:670
+#, c-format
+msgid "Cannot find node `(%s)%s'."
+msgstr "Ne peut pas trouver le noeud « (%s)%s »."
+
+#: info/info.c:671
+msgid "Cannot find a window!"
+msgstr "Ne peut pas trouver une fenêtre permanente!"
+
+#: info/info.c:672
+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:673
+msgid "Cannot delete the last window."
+msgstr "Ne peut pas éliminer la dernière fenêtre."
+
+#: info/info.c:674
+msgid "No menu in this node."
+msgstr "Aucun menu dans ce noeud."
+
+#: info/info.c:675
+msgid "No footnotes in this node."
+msgstr "Aucune note de bas de page dans ce noeud."
+
+#: info/info.c:676
+msgid "No cross references in this node."
+msgstr "Aucune référence croisée dans ce noeud."
+
+#: info/info.c:677
+#, c-format
+msgid "No `%s' pointer for this node."
+msgstr "Aucun pointeur « %s » pour ce noeud."
+
+#: info/info.c:678
+#, c-format
+msgid "Unknown Info command `%c'; try `?' for help."
+msgstr "Commande Info « %c> » inconnue; essayer « ? » pour de l'aide."
+
+#: info/info.c:679
+#, 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:680
+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:681
+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:682
+msgid "Only one window."
+msgstr "Une seule fenêtre."
+
+#: info/info.c:683
+msgid "Resulting window would be too small."
+msgstr "La fenêtre résultante sera trop petite."
+
+#: info/info.c:684
+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:46 info/infodoc.c:95
+msgid ""
+"Basic Commands in Info Windows\n"
+"******************************\n"
+msgstr ""
+"Commandes de base en Info Windows\n"
+"---------------------------------\n"
+
+#: info/infodoc.c:49
+msgid "\\%-10[quit-help] Quit this help.\n"
+msgstr "\\%-10[quit-help] Quitter ce menu d'aide.\n"
+
+#: info/infodoc.c:50
+msgid "\\%-10[quit] Quit Info altogether.\n"
+msgstr "\\%-10[quit] Quitter complètement le mode Info.\n"
+
+#: info/infodoc.c:51
+msgid "\\%-10[get-info-help-node] Invoke the Info tutorial.\n"
+msgstr "\\%-10[get-info-help-node] Faire appel au tutoriel Info.\n"
+
+# Est-ce vraiment un message à traduire? NON.
+#: info/infodoc.c:53 info/infodoc.c:102
+msgid ""
+"Selecting other nodes:\n"
+"----------------------\n"
+msgstr ""
+"Sélection d'autres modes:\n"
+"------------------------\n"
+
+#: info/infodoc.c:55
+msgid "\\%-10[next-node] Move to the \"next\" node of this node.\n"
+msgstr "\\%-10[next-node] Aller au noeud « next » de ce noeud.\n"
+
+#: info/infodoc.c:56
+msgid "\\%-10[prev-node] Move to the \"previous\" node of this node.\n"
+msgstr "\\%-10[prev-node] Aller au noeud « previous » de ce noeud.\n"
+
+#: info/infodoc.c:57
+msgid "\\%-10[up-node] Move \"up\" from this node.\n"
+msgstr "\\%-10[up-node] Aller au noeud « up » à partir de ce noeud.\n"
+
+#: info/infodoc.c:58
+msgid ""
+"\\%-10[menu-item] 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:60
+msgid ""
+"\\%-10[xref-item] Follow a cross reference. Reads name of reference.\n"
+msgstr ""
+"\\%-10[xref-item] Suivre une référence croisée. Lire le nom de la "
+"référence.\n"
+
+#: info/infodoc.c:61
+msgid "\\%-10[history-node] Move 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
+msgid ""
+"\\%-10[move-to-next-xref] Skip to next hypertext link within this node.\n"
+msgstr ""
+"\\%-10[move-to-next-xref] Sauter au prochain hyperlien à l'intérieur de ce "
+"noeud.\n"
+
+#: info/infodoc.c:63
+msgid ""
+"\\%-10[move-to-prev-xref] Skip to previous hypertext link within this "
+"node.\n"
+msgstr ""
+"\\%-10[move-to-prev-xref] Sauter au prochain hyperlien à l'intérieur de ce "
+"noeud.\n"
+
+#: info/infodoc.c:64
+msgid ""
+"\\%-10[select-reference-this-line] Follow the hypertext link under cursor.\n"
+msgstr ""
+"\\%-10[select-reference-this-line] Suivre l'hyperlien sous le curseur.\n"
+
+#: info/infodoc.c:65
+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"
+
+#: info/infodoc.c:66
+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"
+
+# Est-ce vraiment un message à traduire? NON.
+#: info/infodoc.c:68 info/infodoc.c:116
+msgid ""
+"Moving within a node:\n"
+"---------------------\n"
+msgstr ""
+"Se déplacer à l'intérieur d'un noeud:\n"
+"------------------------------------\n"
+
+#: info/infodoc.c:70
+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:71
+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:72
+msgid "\\%-10[next-line] Scroll forward 1 line.\n"
+msgstr "\\%-10[next-line] Avancer de 1 ligne.\n"
+
+#: info/infodoc.c:73
+msgid "\\%-10[prev-line] Scroll backward 1 line.\n"
+msgstr "\\%-10[prev-line] Reculer de 1 ligne.\n"
+
+#: info/infodoc.c:74
+msgid "\\%-10[scroll-forward] Scroll forward a page.\n"
+msgstr "\\%-10[scroll-forward] Avancer d'une page.\n"
+
+#: info/infodoc.c:75
+msgid "\\%-10[scroll-backward] Scroll backward a page.\n"
+msgstr "\\%-10[scroll-backward] Reculer d'une page.\n"
+
+# Est-ce vraiment un message à traduire? NON.
+#: info/infodoc.c:77 info/infodoc.c:125
+msgid ""
+"Other commands:\n"
+"---------------\n"
+msgstr ""
+"Autres commandes:\n"
+"----------------\n"
+
+#: info/infodoc.c:79
+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"
+
+#: info/infodoc.c:80
+msgid "\\%-10[last-menu-item] Pick last item in node's menu.\n"
+msgstr ""
+"\\%-10[last-menu-item] Choisir le dernier item dans le menu de noeuds.\n"
+
+#: info/infodoc.c:81
+msgid ""
+"\\%-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"
+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:83
+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"
+
+#: info/infodoc.c:85
+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"
+
+#: info/infodoc.c:87
+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"
+
+#: info/infodoc.c:98
+#, c-format
+msgid " %-10s Quit this help.\n"
+msgstr " %-10s Quitter ce menu d'aide.\n"
+
+#: info/infodoc.c:99
+#, c-format
+msgid " %-10s Quit Info altogether.\n"
+msgstr " %-10s Quitter complètement le mode Info.\n"
+
+#: info/infodoc.c:100
+#, c-format
+msgid " %-10s Invoke the Info tutorial.\n"
+msgstr " %-10s Faire appel au guide Info.\n"
+
+#: info/infodoc.c:104
+#, 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:105
+#, 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:106
+#, c-format
+msgid " %-10s Move `up' from this node.\n"
+msgstr " %-10s Aller au noeud « up » à partir de ce noeud.\n"
+
+#: info/infodoc.c:107
+#, c-format
+msgid " %-10s Pick menu item specified by name.\n"
+msgstr " %-10s Choisir l'item menu indiqué par le nom.\n"
+
+#: info/infodoc.c:108
+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"
+
+#: info/infodoc.c:109
+#, 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:110
+#, 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:111
+#, 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:112
+#, c-format
+msgid " %-10s Follow the hypertext link under cursor.\n"
+msgstr " %-10s Suivre l'hyperlien sous le curseur.\n"
+
+#: info/infodoc.c:113
+#, 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:114
+#, 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"
+
+#: info/infodoc.c:118
+#, c-format
+msgid " %-10s Scroll forward a page.\n"
+msgstr " %-10s Avancer d'une page.\n"
+
+#: info/infodoc.c:119
+#, c-format
+msgid " %-10s Scroll backward a page.\n"
+msgstr " %-10s Reculer d'une page.\n"
+
+#: info/infodoc.c:120
+#, 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:121
+#, 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:122
+#, c-format
+msgid " %-10s Scroll forward 1 line.\n"
+msgstr " %-10s Avancer de 1 ligne.\n"
+
+#: info/infodoc.c:123
+#, c-format
+msgid " %-10s Scroll backward 1 line.\n"
+msgstr " %-10s Reculer de 1 ligne.\n"
+
+#: info/infodoc.c:127
+#, 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:128
+#, 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:129
+#, c-format
+msgid ""
+" %-10s Search for a specified string in the index entries of this Info\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:130
+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"
+
+#: info/infodoc.c:131
+#, c-format
+msgid " %-10s Move to node specified by name.\n"
+msgstr " %-10s Aller au noeud indiqué par le nom.\n"
+
+#: info/infodoc.c:132
+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"
+
+#: info/infodoc.c:133
+#, c-format
+msgid " %-10s Search forward for a specified string,\n"
+msgstr " %-10s Fouiller vers l'avant pour une chaîne spécifiée,\n"
+
+#: info/infodoc.c:134 info/infodoc.c:136
+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"
+
+#: info/infodoc.c:135
+#, c-format
+msgid " %-10s Search backward for a specified string\n"
+msgstr " %-10s Fouiller à reculons pour une chaîne spécifiée\n"
+
+#: info/infodoc.c:316
+msgid "The current search path is:\n"
+msgstr "Le chemin de fouille courant est:\n"
+
+#: info/infodoc.c:320
+msgid ""
+"Commands available in Info windows:\n"
+"\n"
+msgstr ""
+"Commandes disponibles en Info Windows:\n"
+"\n"
+
+#: info/infodoc.c:324
+msgid ""
+"Commands available in the echo area:\n"
+"\n"
+msgstr ""
+"Commandes disponibles dans la zone « echo area »:\n"
+"\n"
+
+#: info/infodoc.c:347
+#, 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:351
+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:375
+msgid "--- Use `\\[history-node]' or `\\[kill-node]' to exit ---\n"
+msgstr ""
+"--- Utiliser « \\[history-node] » ou « \\[kill-node] » pour sortir ---\n"
+
+#: info/infodoc.c:485
+msgid "Display help message"
+msgstr "Afficher le message d'aide"
+
+#: info/infodoc.c:503
+msgid "Visit Info node `(info)Help'"
+msgstr "Visiter le noeud Info « (info)Help »"
+
+#: info/infodoc.c:641
+msgid "Print documentation for KEY"
+msgstr "Imprimer la documentation relative à KEY"
+
+#: info/infodoc.c:653
+#, c-format
+msgid "Describe key: %s"
+msgstr "Décrire la clé: %s"
+
+#: info/infodoc.c:664
+#, c-format
+msgid "ESC %s is undefined."
+msgstr "ESC %s est non défini."
+
+#: info/infodoc.c:680 info/infodoc.c:709
+#, c-format
+msgid "%s is undefined."
+msgstr "%s est non défini."
+
+#: info/infodoc.c:730
+#, c-format
+msgid "%s is defined to %s."
+msgstr "%s est défini à %s."
+
+#: info/infodoc.c:1153
+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:1157
+msgid "Where is command: "
+msgstr "Où se trouve la commande: "
+
+#: info/infodoc.c:1179
+#, c-format
+msgid "`%s' is not on any keys"
+msgstr "« %s » ne se trouve pas sur une clé quelconque"
+
+#: info/infodoc.c:1186
+#, c-format
+msgid "%s can only be invoked via %s."
+msgstr "%s peut être invoqué uniquement via %s."
+
+#: info/infodoc.c:1190
+#, c-format
+msgid "%s can be invoked via %s."
+msgstr "%s peut être invoqué via %s."
+
+#: info/infodoc.c:1195
+#, c-format
+msgid "There is no function named `%s'"
+msgstr "Il n'y a pas de fonction nommée « %s »"
+
+#: info/infokey.c:145
+#, c-format
+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"
+"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"
+
+#: 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:1500
+#, c-format
+msgid "Ignoring invalid infokey file `%s' - too small"
+msgstr "Fichier infokey invalide ignoré « %s » - trop petit"
+
+#: info/infomap.c:1503
+#, c-format
+msgid "Ignoring invalid infokey file `%s' - too big"
+msgstr "Fichier infokey invalide ignoré « %s » - trop gros"
+
+#: info/infomap.c:1516
+#, c-format
+msgid "Error reading infokey file `%s' - short read"
+msgstr "Erreur de lecture du fichier infokey « %s » - lecture écourtée"
+
+#: info/infomap.c:1535
+#, 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:1544
+#, 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:1560
+#, 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:1581
+#, 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:1716
+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:1766
+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:69
+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:73
+msgid "Describe command: "
+msgstr "Décrire la commande: "
+
+#: info/m-x.c:96
+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:140
+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:154
+#, c-format
+msgid "Undefined command: %s"
+msgstr "commandes indéfinie: %s"
+
+#: info/m-x.c:160
+msgid "Set the height of the displayed window"
+msgstr "Ajuster la hauteur de la fenêtre affichée"
+
+#: info/m-x.c:173
+#, c-format
+msgid "Set screen height to (%d): "
+msgstr "Ajuster la hauteur de l'écran à (%d): "
+
+#: info/makedoc.c:162 info/makedoc.c:170
+#, 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:550
+#, c-format
+msgid "Couldn't manipulate the file %s.\n"
+msgstr "Ne peut pas manipuler le fichier %s.\n"
+
+#: info/nodemenu.c:31
+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:202
+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:224
+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:304
+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:317
+msgid "Select visited node: "
+msgstr "Sélectionner un noeud visité: "
+
+#: info/nodemenu.c:337 info/session.c:2264
+#, c-format
+msgid "The reference disappeared! (%s)."
+msgstr "La référence est disparue! (%s)."
+
+#: info/session.c:162
+#, 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:620
+msgid "Move down to the next line"
+msgstr "Descendre à la ligne suivante"
+
+#: info/session.c:635
+msgid "Move up to the previous line"
+msgstr "Monter à la ligne précédente"
+
+#: info/session.c:650
+msgid "Move to the end of the line"
+msgstr "Aller à la fin de la ligne"
+
+#: info/session.c:670
+msgid "Move to the start of the line"
+msgstr "Aller au début de la ligne"
+
+#: info/session.c:860 makeinfo/node.c:1424
+msgid "Next"
+msgstr "Noeud « Next »"
+
+#: info/session.c:863
+msgid "Following Next node..."
+msgstr "Suivre le noeud « Next »..."
+
+#: info/session.c:881
+msgid "Selecting first menu item..."
+msgstr "Sélectionner le premier item menu..."
+
+#: info/session.c:893
+msgid "Selecting Next node..."
+msgstr "Sélectionner le noeud « Next »..."
+
+#: info/session.c:964
+#, c-format
+msgid "Moving Up %d time(s), then Next."
+msgstr "Monter via « Up » %d fois, puis passer au noeud « Next »."
+
+#: info/session.c:988
+msgid "No more nodes within this document."
+msgstr "Aucun autre noeud dans ce document."
+
+#: info/session.c:1011
+msgid "No `Prev' for this node."
+msgstr "Aucun noeud « Prev » pour ce noeud."
+
+#: info/session.c:1014 info/session.c:1073
+msgid "Moving Prev in this window."
+msgstr "Monter au noeud « Prev » dans cette fenêtre."
+
+#: info/session.c:1030
+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:1034
+msgid "Moving Up in this window."
+msgstr "Monter au noeud « Up » dans cette fenêtre."
+
+#: info/session.c:1084
+msgid "Moving to `Prev's last menu item."
+msgstr "Aller au dernier item menu du noeud « Prev »."
+
+#: info/session.c:1095
+msgid "Move forwards or down through node structure"
+msgstr "Avancer ou descendre à travers la structure de noeuds"
+
+#: info/session.c:1111
+msgid "Move backwards or up through node structure"
+msgstr "Reculer ou monter à travers la structure de noeuds"
+
+#: info/session.c:1205
+msgid "Scroll forward in this window"
+msgstr "Défiler vers l'avant dans cette fenêtre"
+
+#: info/session.c:1213
+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:1221
+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:1229
+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:1237
+msgid "Scroll backward in this window"
+msgstr "Défiler à reculons dans cette fenêtre"
+
+#: info/session.c:1245
+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:1254
+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:1262
+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:1270
+msgid "Move to the start of this node"
+msgstr "Aller au point initial de ce noeud"
+
+#: info/session.c:1277
+msgid "Move to the end of this node"
+msgstr "Aller au point terminal de ce noeud"
+
+#: info/session.c:1284
+msgid "Scroll down by lines"
+msgstr "Défiler vers le bas par pas de N lignes"
+
+#: info/session.c:1301
+msgid "Scroll up by lines"
+msgstr "Défiler vers le haut par pas de N lignes"
+
+#: info/session.c:1319
+msgid "Scroll down by half screen size"
+msgstr "Défiler vers le bas par pas d'un demi écran"
+
+#: info/session.c:1345
+msgid "Scroll up by half screen size"
+msgstr "Défiler vers le haut par pas d'un demi écran"
+
+#: info/session.c:1374
+msgid "Select the next window"
+msgstr "Sélectionner la fenêtre suivante"
+
+#: info/session.c:1413
+msgid "Select the previous window"
+msgstr "Sélectionner la fenêtre précédente"
+
+#: info/session.c:1464
+msgid "Split the current window"
+msgstr "Diviser en deux la fenêtre courante"
+
+#: info/session.c:1545
+msgid "Delete the current window"
+msgstr "Éliminer la fenêtre courante"
+
+#: info/session.c:1553
+msgid "Cannot delete a permanent window"
+msgstr "Ne peut pas éliminer une fenêtre permanente"
+
+#: info/session.c:1585
+msgid "Delete all other windows"
+msgstr "Éliminer toutes les autres fenêtres"
+
+#: info/session.c:1631
+msgid "Scroll the other window"
+msgstr "Défiler l'autre fenêtre"
+
+#: info/session.c:1652
+msgid "Scroll the other window backward"
+msgstr "Défiler l'autre fenêtre à reculons"
+
+#: info/session.c:1658
+msgid "Grow (or shrink) this window"
+msgstr "Agrandir (ou réduire) cette fenêtre"
+
+#: info/session.c:1669
+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:1676
+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:1848
+msgid "Select the Next node"
+msgstr "Sélectionner le noeud « Next »"
+
+#: info/session.c:1856
+msgid "Select the Prev node"
+msgstr "Sélectionner le noeud « Prev »"
+
+#: info/session.c:1864
+msgid "Select the Up node"
+msgstr "Sélectionner le noeud « Up »"
+
+#: info/session.c:1871
+msgid "Select the last node in this file"
+msgstr "Sélectionner le dernier noeud dans ce fichier"
+
+#: info/session.c:1898 info/session.c:1931
+msgid "This window has no additional nodes"
+msgstr "Cette fenêtre a aucun noeud additionnel"
+
+#: info/session.c:1904
+msgid "Select the first node in this file"
+msgstr "Sélectionner le premier noeud dans ce fichier"
+
+#: info/session.c:1938
+msgid "Select the last item in this node's menu"
+msgstr "Sélectionner le dernier item dans ce menu de noeuds"
+
+#: info/session.c:1944
+msgid "Select this menu item"
+msgstr "Sélectionner cet item menu"
+
+#: info/session.c:1977
+#, 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:2171 info/session.c:2172
+#, c-format
+msgid "Menu item (%s): "
+msgstr "Item menu (%s): "
+
+#: info/session.c:2175
+msgid "Menu item: "
+msgstr "Item menu: "
+
+#: info/session.c:2182 info/session.c:2183
+#, c-format
+msgid "Follow xref (%s): "
+msgstr "Suivre xref (%s): "
+
+#: info/session.c:2186
+msgid "Follow xref: "
+msgstr "Suivre xref: "
+
+#: info/session.c:2315
+msgid "Read a menu item and select its node"
+msgstr "Lire un item menu et sélectionner son noeud"
+
+#: info/session.c:2323
+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:2329
+msgid "Move to the start of this node's menu"
+msgstr "Aller au point initial de ce menu de noeuds"
+
+#: info/session.c:2353
+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:2381
+msgid "Read a node name and select it"
+msgstr "Lire un nom de noeud et sélectionner ce noeud"
+
+#: info/session.c:2436 info/session.c:2441
+msgid "Goto node: "
+msgstr "Aller au noeud: "
+
+#: info/session.c:2505
+#, c-format
+msgid "No menu in node `%s'."
+msgstr "Aucun menu dans le noeud « %s »."
+
+#: info/session.c:2551
+#, c-format
+msgid "No menu item `%s' in node `%s'."
+msgstr "Aucun item menu « %s » dans le noeud « %s »."
+
+#: info/session.c:2581
+#, 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:2631
+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:2633
+msgid "Follow menus: "
+msgstr "Suivre les menus: "
+
+#: info/session.c:2826
+msgid "Find the node describing program invocation"
+msgstr "Trouver le noeud décrivant l'invocation au programme"
+
+#: info/session.c:2828
+#, c-format
+msgid "Find Invocation node of [%s]: "
+msgstr "Trouver le noeud Invocation de [%s]: "
+
+#: info/session.c:2866
+msgid "Read a manpage reference and select it"
+msgstr "Lire une référence de page-manuel et la sélectionner"
+
+#: info/session.c:2870
+msgid "Get Manpage: "
+msgstr "Obtenir la Page-manuel: "
+
+#: info/session.c:2900
+msgid "Select the node `Top' in this file"
+msgstr "Sélectionner le noeud « Top » dans ce fichier"
+
+#: info/session.c:2906
+msgid "Select the node `(dir)'"
+msgstr "Sélectionner le noeud « (dir) »"
+
+#: info/session.c:2923 info/session.c:2925
+#, c-format
+msgid "Kill node (%s): "
+msgstr "Effacer le noeud (%s): "
+
+#: info/session.c:2977
+#, c-format
+msgid "Cannot kill node `%s'"
+msgstr "Ne peut pas effacer le noeud « %s »"
+
+#: info/session.c:2987
+msgid "Cannot kill the last node"
+msgstr "Ne peut pas effacer le dernier noeud"
+
+#: info/session.c:3073
+msgid "Select the most recently selected node"
+msgstr "Choisir le noeud qui a été le plus récemment sélectionné"
+
+#: info/session.c:3079
+msgid "Kill this node"
+msgstr "Effacer ce noeud"
+
+#: info/session.c:3087
+msgid "Read the name of a file and select it"
+msgstr "Lire le nom d'un fichier et le sélectionner"
+
+#: info/session.c:3091
+msgid "Find file: "
+msgstr "Trouver le fichier: "
+
+#: info/session.c:3108
+#, c-format
+msgid "Cannot find `%s'."
+msgstr "Ne peut pas trouver « %s »."
+
+#: info/session.c:3151 info/session.c:3269
+#, c-format
+msgid "Could not create output file `%s'."
+msgstr "Ne peut pas créer le fichier de sortie « %s »."
+
+#: info/session.c:3165 info/session.c:3287 info/session.c:3347
+msgid "Done."
+msgstr "Terminé."
+
+#: info/session.c:3220
+#, c-format
+msgid "Writing node %s..."
+msgstr "Écriture du noeud « %s »..."
+
+#: info/session.c:3296
+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:3331
+#, c-format
+msgid "Cannot open pipe to `%s'."
+msgstr "Ne peut ouvrir un tube de communication à « %s »."
+
+#: info/session.c:3337
+#, c-format
+msgid "Printing node %s..."
+msgstr "Impression du noeud « %s »..."
+
+#: info/session.c:3567
+#, c-format
+msgid "Searching subfile %s ..."
+msgstr "Fouille du sous-fichier « %s »..."
+
+#: info/session.c:3619
+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:3626
+msgid "Read a string and search for it"
+msgstr "Lire une chaîne et en faire la fouille"
+
+#: info/session.c:3634
+msgid "Read a string and search backward for it"
+msgstr "Lire une chaîne et en faire la fouille à reculons"
+
+#: info/session.c:3670 info/session.c:3677
+#, c-format
+msgid "%s%sfor string [%s]: "
+msgstr "%s%s pour la chaîne [%s]: "
+
+#: info/session.c:3671 info/session.c:3678
+msgid "Search backward"
+msgstr "Fouiller à reculons"
+
+#: info/session.c:3672 info/session.c:3678
+msgid "Search"
+msgstr "Fouiller"
+
+#: info/session.c:3673 info/session.c:3679
+msgid " case-sensitively "
+msgstr " en distinguant les casses majuscules et minuscules "
+
+#: info/session.c:3674 info/session.c:3679
+msgid " "
+msgstr " "
+
+#: info/session.c:3718
+msgid "Search failed."
+msgstr "Fouille infructueuse."
+
+#: info/session.c:3736
+msgid "Repeat last search in the same direction"
+msgstr "Répéter la dernière fouille dans la même direction"
+
+#: info/session.c:3739 info/session.c:3749
+msgid "No previous search string"
+msgstr "Aucune chaîne de fouille antérieure"
+
+#: info/session.c:3746
+msgid "Repeat last search in the reverse direction"
+msgstr "Répéter la dernière fouille dans la direction inverse"
+
+#: info/session.c:3765 info/session.c:3771
+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:3851
+msgid "I-search backward: "
+msgstr "Fouille I-search à reculons: "
+
+#: info/session.c:3853
+msgid "I-search: "
+msgstr "Fouille I-search: "
+
+#: info/session.c:3878 info/session.c:3880
+msgid "Failing "
+msgstr "Échec "
+
+#: info/session.c:4340
+msgid "Move to the previous cross reference"
+msgstr "Aller à la référence croisée précédente"
+
+#: info/session.c:4349
+msgid "Move to the next cross reference"
+msgstr "Aller à la prochaine référence croisée"
+
+#: info/session.c:4359
+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:4382
+msgid "Cancel current operation"
+msgstr "Annuler l'opération courante"
+
+#: info/session.c:4389
+msgid "Quit"
+msgstr "Quitter"
+
+#: info/session.c:4398
+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:4430
+msgid "Redraw the display"
+msgstr "Redessiner l'affichage écran"
+
+#: info/session.c:4467
+msgid "Quit using Info"
+msgstr "Quitter en utilisant Info"
+
+#: info/session.c:4480
+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:4491
+#, c-format
+msgid "Unknown command (%s)."
+msgstr "Commande inconnue (%s)."
+
+#: info/session.c:4494
+#, c-format
+msgid "\"%s\" is invalid"
+msgstr "« %s » est invalide"
+
+#: info/session.c:4495
+#, c-format
+msgid "`%s' is invalid"
+msgstr "« %s » est invalide"
+
+#: info/session.c:4709
+msgid "Add this digit to the current numeric argument"
+msgstr "Ajouter ce chiffre à l'argument numérique courant"
+
+#: info/session.c:4718
+msgid "Start (or multiply by 4) the current numeric argument"
+msgstr "Enclencher (ou multiplier par 4) l'argument numérique courant"
+
+#: info/session.c:4733
+msgid "Internally used by \\[universal-argument]"
+msgstr "Utilisé internement par \\[universal-argument]"
+
+#: info/tilde.c:338
+#, 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:64
+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:68
+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:74
+msgid "Explain the use of a variable"
+msgstr "Expliquer l'usage d'une variable"
+
+#: info/variables.c:80
+msgid "Describe variable: "
+msgstr "Décrire la variable: "
+
+#: info/variables.c:99
+msgid "Set the value of an Info variable"
+msgstr "Fixer la valeur d'une variable Info"
+
+#: info/variables.c:105
+msgid "Set variable: "
+msgstr "Fixer la variable: "
+
+#: info/variables.c:123
+#, c-format
+msgid "Set %s to value (%d): "
+msgstr "Fixer %s à la valeur (%d): "
+
+#: info/variables.c:164
+#, c-format
+msgid "Set %s to value (%s): "
+msgstr "Fixer %s à la valeur (%s): "
+
+# Est-ce vraiment un message à traduire?
+#: info/window.c:1138
+msgid "--*** Tags out of Date ***"
+msgstr "--*** Étiquettes passées Date ***"
+
+#: info/window.c:1149
+msgid "-----Info: (), lines ----, "
+msgstr "-----Info: (), lignes ----, "
+
+#: info/window.c:1156
+#, c-format
+msgid "-%s---Info: %s, %d lines --%s--"
+msgstr "-%s---Info: %s, %d lignes --%s--"
+
+#: info/window.c:1160
+#, c-format
+msgid "-%s%s-Info: (%s)%s, %d lines --%s--"
+msgstr "-%s%s-Info: (%s)%s, %d lignes --%s--"
+
+#: info/window.c:1167
+#, c-format
+msgid " Subfile: %s"
+msgstr " Sous-fichier: %s"
+
+#: lib/getopt.c:551 lib/getopt.c:570
+#, c-format
+msgid "%s: option `%s' is ambiguous\n"
+msgstr "%s: l'option « %s » est ambiguë\n"
+
+#: lib/getopt.c:603 lib/getopt.c:607
+#, c-format
+msgid "%s: option `--%s' doesn't allow an argument\n"
+msgstr "%s: l'option « --%s » ne permet pas un argument\n"
+
+#: lib/getopt.c:616 lib/getopt.c:621
+#, 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"
+
+#: lib/getopt.c:667 lib/getopt.c:689 lib/getopt.c:1020 lib/getopt.c:1042
+#, c-format
+msgid "%s: option `%s' requires an argument\n"
+msgstr "%s: l'option « %s » exige un argument\n"
+
+#: lib/getopt.c:727 lib/getopt.c:730
+#, c-format
+msgid "%s: unrecognized option `--%s'\n"
+msgstr "%s: option non reconnue « --%s »\n"
+
+#: lib/getopt.c:738 lib/getopt.c:741
+#, c-format
+msgid "%s: unrecognized option `%c%s'\n"
+msgstr "%s: option non reconnue « %c%s »\n"
+
+#: lib/getopt.c:796 lib/getopt.c:799
+#, c-format
+msgid "%s: illegal option -- %c\n"
+msgstr "%s: option illégale -- %c\n"
+
+#: lib/getopt.c:805 lib/getopt.c:808
+#, c-format
+msgid "%s: invalid option -- %c\n"
+msgstr "%s: option invalide -- %c\n"
+
+#: lib/getopt.c:863 lib/getopt.c:882 lib/getopt.c:1095 lib/getopt.c:1116
+#, c-format
+msgid "%s: option requires an argument -- %c\n"
+msgstr "%s: l'option exige un argument -- %c\n"
+
+#: lib/getopt.c:935 lib/getopt.c:954
+#, c-format
+msgid "%s: option `-W %s' is ambiguous\n"
+msgstr "%s: l'option « -W %s » est ambiguë\n"
+
+#: lib/getopt.c:978 lib/getopt.c:999
+#, 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"
+
+#: makeinfo/cmds.c:520 makeinfo/cmds.c:542
+#, c-format
+msgid "arguments to @%s ignored"
+msgstr "arguments à @%s ignorés"
+
+#: makeinfo/cmds.c:585
+msgid "January"
+msgstr "janvier"
+
+#: makeinfo/cmds.c:585
+msgid "February"
+msgstr "février"
+
+#: makeinfo/cmds.c:585
+msgid "March"
+msgstr "mars"
+
+#: makeinfo/cmds.c:585
+msgid "April"
+msgstr "avril"
+
+#: makeinfo/cmds.c:585
+msgid "May"
+msgstr "mai"
+
+#: makeinfo/cmds.c:586
+msgid "June"
+msgstr "juin"
+
+#: makeinfo/cmds.c:586
+msgid "July"
+msgstr "juillet"
+
+#: makeinfo/cmds.c:586
+msgid "August"
+msgstr "août"
+
+#: makeinfo/cmds.c:586
+msgid "September"
+msgstr "septembre"
+
+#: makeinfo/cmds.c:586
+msgid "October"
+msgstr "octobre"
+
+#: makeinfo/cmds.c:587
+msgid "November"
+msgstr "novembre"
+
+#: makeinfo/cmds.c:587
+msgid "December"
+msgstr "décembre"
+
+#: makeinfo/cmds.c:936
+#, c-format
+msgid "unlikely character %c in @var"
+msgstr "caractère %c improbable dans la macro @var"
+
+#: makeinfo/cmds.c:979
+msgid "@sc argument all uppercase, thus no effect"
+msgstr "argument de la macro @sc tout en majuscules, alors aucun effet"
+
+#: makeinfo/cmds.c:1034
+#, c-format
+msgid "`{' expected, but saw `%c'"
+msgstr "« { » attendu, mais a vu « %c »"
+
+#: makeinfo/cmds.c:1074
+msgid "end of file inside verb block"
+msgstr "fin de fichier à l'intérieur du bloc verbe"
+
+#: makeinfo/cmds.c:1082
+#, c-format
+msgid "`}' expected, but saw `%c'"
+msgstr "« } » attendu, mais a vu « %c »"
+
+#: makeinfo/cmds.c:1112
+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:1305
+#, c-format
+msgid "%c%s is obsolete"
+msgstr "%c%s est périmé"
+
+#: makeinfo/cmds.c:1414
+#, 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:1763 makeinfo/cmds.c:1819 makeinfo/footnote.c:82
+#, c-format
+msgid "Bad argument to %c%s"
+msgstr "Mauvais argument à %c%s"
+
+#: makeinfo/cmds.c:1773 makeinfo/makeinfo.c:4142
+msgid "asis"
+msgstr "« asis »"
+
+#: makeinfo/cmds.c:1775 makeinfo/cmds.c:1805 makeinfo/makeinfo.c:4144
+msgid "none"
+msgstr "« none »"
+
+#: makeinfo/cmds.c:1789
+#, c-format
+msgid "Bad argument to @%s"
+msgstr "Mauvais argument à @%s"
+
+#: makeinfo/cmds.c:1803
+msgid "insert"
+msgstr "insérer"
+
+#: makeinfo/defun.c:84
+msgid "Missing `}' in @def arg"
+msgstr "Accolade « } » manquante dans @def arg"
+
+#: makeinfo/defun.c:403
+msgid "Function"
+msgstr "Fonction"
+
+#: makeinfo/defun.c:406
+msgid "Macro"
+msgstr "Macro"
+
+#: makeinfo/defun.c:409
+msgid "Special Form"
+msgstr "Forme Spéciale"
+
+#: makeinfo/defun.c:413
+msgid "Variable"
+msgstr "Variable"
+
+#: makeinfo/defun.c:416
+msgid "User Option"
+msgstr "Option de l'Usager"
+
+#: makeinfo/defun.c:420
+msgid "Instance Variable"
+msgstr "Variable d'Instance"
+
+#: makeinfo/defun.c:424
+msgid "Method"
+msgstr "Méthode"
+
+#: makeinfo/defun.c:500 makeinfo/defun.c:505 makeinfo/defun.c:545
+#: makeinfo/defun.c:644 makeinfo/xml.c:2229
+msgid "of"
+msgstr "de"
+
+#: makeinfo/defun.c:509 makeinfo/defun.c:513 makeinfo/defun.c:517
+#: makeinfo/defun.c:551 makeinfo/defun.c:650 makeinfo/xml.c:2234
+msgid "on"
+msgstr "sur"
+
+#: 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:435
+#, c-format
+msgid "%s: getwd: %s, %s\n"
+msgstr "%s: getwd: %s, %s\n"
+
+#: makeinfo/files.c:638
+#, c-format
+msgid "`%s' omitted before output filename"
+msgstr "« %s » omis avant le nom de fichier de sortie"
+
+#: makeinfo/files.c:646
+#, c-format
+msgid "`%s' omitted since writing to stdout"
+msgstr "« %s » omis avant l'écriture sur la sortie standard"
+
+#: makeinfo/files.c:694
+msgid "Output buffer not empty."
+msgstr "Tampon de sortie n'est pas vide."
+
+#: makeinfo/footnote.c:150
+#, 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:165
+#, c-format
+msgid "No closing brace for footnote `%s'"
+msgstr "Accolade fermante « } » manquante pour la note de bas de page « %s »"
+
+#: makeinfo/footnote.c:198
+msgid "Footnote defined without parent node"
+msgstr "La note de bas de page est définie sans noeud parent"
+
+#: makeinfo/footnote.c:210
+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:302 makeinfo/index.c:189
+msgid "Footnotes"
+msgstr "Notes de bas de page"
+
+#: makeinfo/html.c:87
+#, c-format
+msgid "%s: could not open --css-file: %s"
+msgstr "%s: ne peut ouvrir --css-file: %s"
+
+#: makeinfo/html.c:172
+#, c-format
+msgid "%s:%d: --css-file ended in comment"
+msgstr "%s%d: --css-file terminé dans le commentaire"
+
+#: makeinfo/html.c:207
+msgid "Untitled"
+msgstr "Sans titre"
+
+#: makeinfo/html.c:422
+msgid "[unexpected] no html tag to pop"
+msgstr "[inattendu] pas d'étiquette html à dépiler"
+
+#: makeinfo/html.c:752
+#, c-format
+msgid "[unexpected] invalid node name: `%s'"
+msgstr "[inattendu] nom de noeud invalide: « %s »"
+
+#: makeinfo/index.c:169
+#, c-format
+msgid "Unknown index `%s'"
+msgstr "Nom d'index inconnu « %s »"
+
+#: makeinfo/index.c:234
+#, 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:412
+#, c-format
+msgid "Index `%s' already exists"
+msgstr "L'index « %s » existe toujours"
+
+#: makeinfo/index.c:455
+#, 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:661
+msgid "(line )"
+msgstr "(ligne )"
+
+#: makeinfo/index.c:669
+#, c-format
+msgid "(line %*d)"
+msgstr "(ligne %*d)"
+
+#: makeinfo/index.c:750
+#, c-format
+msgid "Unknown index `%s' in @printindex"
+msgstr "Nom d'index « %s » inconnu dans @printindex"
+
+#: makeinfo/index.c:819
+#, 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:822 makeinfo/index.c:858
+msgid "(outside of any node)"
+msgstr "(à l'extérieur de tout noeud)"
+
+#: makeinfo/index.c:919 makeinfo/index.c:925
+msgid "See "
+msgstr "Voir "
+
+#: makeinfo/insertion.c:160
+msgid "@item not allowed in argument to @itemize"
+msgstr "@item n'est pas permis dans l'agument @itemize"
+
+#: makeinfo/insertion.c:238
+msgid "Broken-Type in insertion_type_pname"
+msgstr "Type impossible dans la fonction insertion_type_pname"
+
+#: makeinfo/insertion.c:334
+msgid "Enumeration stack overflow"
+msgstr "Débordement de la pile d'énumérations"
+
+#: makeinfo/insertion.c:366
+#, c-format
+msgid "lettering overflow, restarting at %c"
+msgstr "débordement du lettrage, reprise à partir de %c"
+
+#: makeinfo/insertion.c:631
+#, c-format
+msgid "%s requires an argument: the formatter for %citem"
+msgstr "%s exige un argument: le formateur pour %citem"
+
+#: makeinfo/insertion.c:719
+#, c-format
+msgid "%cfloat environments cannot be nested"
+msgstr "%cenvironnements float ne peuvent être imbriqués"
+
+#: makeinfo/insertion.c:973
+#, c-format
+msgid "`@end' expected `%s', but saw `%s'"
+msgstr "« @end » s'attendait à « %s », mais a vu « %s »"
+
+#: makeinfo/insertion.c:1337
+#, c-format
+msgid "No matching `%cend %s'"
+msgstr "« %cend %s » non apparié"
+
+#: makeinfo/insertion.c:1592
+#, c-format
+msgid "%s requires letter or digit"
+msgstr "%s exige une lettre ou un chiffre"
+
+#: makeinfo/insertion.c:1687
+msgid "end of file inside verbatim block"
+msgstr "fin de fichier à l'intérieur du bloc verbatim"
+
+#: makeinfo/insertion.c:1913
+#, 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:1949
+msgid "@menu seen before first @node, creating `Top' node"
+msgstr "@menu vu avant le premier @node, création du noeud « Top »"
+
+#: makeinfo/insertion.c:1950
+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:1962
+msgid "@detailmenu seen before first node, creating `Top' node"
+msgstr "@detailmenu vu avant le premier noeud, création du noeud « Top »"
+
+#: makeinfo/insertion.c:2018
+#, 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:2032
+#, 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:2063
+#, c-format
+msgid "Unmatched `%c%s'"
+msgstr "« %c%s » non apparié"
+
+#: makeinfo/insertion.c:2068
+#, c-format
+msgid "`%c%s' needs something after it"
+msgstr "« %c%s » a besoin de quelque chose après lui"
+
+#: makeinfo/insertion.c:2074
+#, c-format
+msgid "Bad argument `%s' to `@%s', using `%s'"
+msgstr "Mauvais argument « %s » à « @%s » utilisant « %s »"
+
+#: makeinfo/insertion.c:2171
+#, c-format
+msgid "@%s not meaningful inside `@%s' block"
+msgstr "macro @%s inactive à l'intérieur d'un bloc « %s »"
+
+#: makeinfo/insertion.c:2180
+#, c-format
+msgid "@itemx not meaningful inside `%s' block"
+msgstr "macro @itemx inactive à l'intérieur d'un bloc « %s »"
+
+#: makeinfo/insertion.c:2356
+#, 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:580
+#, 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:655
+#, c-format
+msgid "unrecognized encoding name `%s'"
+msgstr "nom d'encodage non reconnu « %s »"
+
+#: makeinfo/lang.c:663
+#, c-format
+msgid "sorry, encoding `%s' not supported"
+msgstr "désolé, l'encodage « %s » n'est pas supporté"
+
+#: makeinfo/lang.c:715
+#, c-format
+msgid "invalid encoded character `%s'"
+msgstr "caractère encodé invalide « %s »"
+
+#: makeinfo/lang.c:1009
+#, 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:1013
+#, 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:355
+#, 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:586
+#, c-format
+msgid "%cend macro not found"
+msgstr "macro %cend non trouvée"
+
+#: makeinfo/macro.c:624
+msgid "@quote-arg only useful for single-argument macros"
+msgstr "macro @quote-arg utile seulement pour des macros à un seul argument"
+
+#: makeinfo/macro.c:660
+#, c-format
+msgid "mismatched @end %s with @%s"
+msgstr "macro @end %s non balancée avec @%s"
+
+#: makeinfo/makeinfo.c:184
+#, c-format
+msgid "Too many errors! Gave up.\n"
+msgstr "Beaucoup trop d'erreurs! Abandon.\n"
+
+#: makeinfo/makeinfo.c:302
+#, c-format
+msgid "%s:%d: warning: "
+msgstr "%s:%d: avertissement: "
+
+#: makeinfo/makeinfo.c:321 makeinfo/makeinfo.c:2260
+#, c-format
+msgid "Misplaced %c"
+msgstr "%c égarée ou mal placée"
+
+#: makeinfo/makeinfo.c:340
+#, c-format
+msgid "Try `%s --help' for more information.\n"
+msgstr "Utiliser « %s --help » pour plus d'informations.\n"
+
+#: makeinfo/makeinfo.c:343
+#, c-format
+msgid "Usage: %s [OPTION]... TEXINFO-FILE...\n"
+msgstr "Usage: %s [OPTION]... FICHIER-TEXINFO...\n"
+
+#: makeinfo/makeinfo.c:346
+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:350
+#, c-format
+msgid ""
+"General options:\n"
+" --error-limit=NUM quit after NUM errors (default %d).\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"
+" --reference-limit=NUM warn about at most NUM references (default %"
+"d).\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:364
+#, 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:372
+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 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 (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:386
+#, c-format
+msgid ""
+"Options for Info and plain text:\n"
+" --enable-encoding output accented and special characters in\n"
+" Info output based on @documentencoding.\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\n"
+" in which they are defined (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:403
+msgid ""
+"Options for HTML:\n"
+" --css-include=FILE include FILE in HTML <style> output;\n"
+" read stdin if FILE is -.\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:409
+#, 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:416
+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:425
+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:444
+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:452
+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:603
+#, 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:647 makeinfo/makeinfo.c:673 makeinfo/makeinfo.c:692
+#: makeinfo/makeinfo.c:722 makeinfo/makeinfo.c:743
+#, 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:660
+#, 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:665
+#, 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:707
+#, 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:732
+#, 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:806
+#, c-format
+msgid "%s: missing file argument.\n"
+msgstr "%s: absence d'un argument fichier.\n"
+
+#: makeinfo/makeinfo.c:997 makeinfo/makeinfo.c:3991
+#, c-format
+msgid "Multiline command %c%s used improperly"
+msgstr "Commande multilignes %c%s utilisé de manière incorrecte"
+
+#: makeinfo/makeinfo.c:1000
+#, c-format
+msgid "Expected `%s'"
+msgstr "« %s » attendue"
+
+#: makeinfo/makeinfo.c:1479
+#, c-format
+msgid "Can't create directory `%s': %s"
+msgstr "Ne peut créer le répertoire « %s »: %s"
+
+#: makeinfo/makeinfo.c:1525
+#, c-format
+msgid "No `%s' found in `%s'"
+msgstr "Aucun « %s » trouvé dans « %s »"
+
+#: makeinfo/makeinfo.c:1605
+#, 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:1638
+#, c-format
+msgid "Making %s file `%s' from `%s'.\n"
+msgstr "Fabrication du fichier %s « %s » à partir de « %s ».\n"
+
+#: makeinfo/makeinfo.c:1673
+#, c-format
+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"
+
+#: makeinfo/makeinfo.c:1709
+#, 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:1773
+#, 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:2034
+#, c-format
+msgid "Unknown command `%s'"
+msgstr "Commande inconnue « %s »."
+
+#: makeinfo/makeinfo.c:2056
+#, 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:2314
+#, c-format
+msgid "%c%s expected braces"
+msgstr "%c%s accolades attendues"
+
+#: makeinfo/makeinfo.c:2327
+msgid "Unmatched }"
+msgstr "Accolade « } » non appariée"
+
+#: makeinfo/makeinfo.c:2375
+msgid "NO_NAME!"
+msgstr "NOM_INCONNU!"
+
+#: makeinfo/makeinfo.c:2396
+#, c-format
+msgid "%c%s missing close brace"
+msgstr "%c%s accolade fermante manquante"
+
+#: makeinfo/makeinfo.c:3309
+#, 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:3315
+#, c-format
+msgid "No such file `%s'"
+msgstr "Aucun fichier « %s »"
+
+#: makeinfo/makeinfo.c:3447
+#, c-format
+msgid "@image file `%s' (for text) unreadable: %s"
+msgstr "commande @image avec un fichier (texte) « %s » illisible: %s"
+
+#: makeinfo/makeinfo.c:3456
+msgid "@image missing filename argument"
+msgstr "commande @image ayant un argument fichier absent"
+
+#: makeinfo/makeinfo.c:3675
+#, c-format
+msgid "undefined flag: %s"
+msgstr "fanion indéfini: %s"
+
+#: makeinfo/makeinfo.c:3676
+#, c-format
+msgid "{No value for `%s'}"
+msgstr "{Aucune valeur pour « %s »}"
+
+#: makeinfo/makeinfo.c:3728
+#, c-format
+msgid "%c%s requires a name"
+msgstr "%c%s exige un nom"
+
+#: makeinfo/makeinfo.c:3834
+#, c-format
+msgid "Reached eof before matching @end %s"
+msgstr "Fin de fichier rencontré avant l'appariement de @end %s"
+
+#: makeinfo/makeinfo.c:4082
+#, 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:254
+#, c-format
+msgid "ignoring stray text `%s' after @multitable"
+msgstr "abandon du texte orphelin « %s » après la commande @multitable"
+
+#: makeinfo/multi.c:393
+#, 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:555
+#, 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:584
+msgid "ignoring @tab outside of multitable"
+msgstr "inhibition d'une commande @tab à l'extérieur d'une multitable"
+
+#: makeinfo/multi.c:632
+#, c-format
+msgid "** Multicolumn output from last row:\n"
+msgstr "** Sortie en multicolonnes à partir de la dernière rangée:\n"
+
+#: makeinfo/multi.c:635
+#, c-format
+msgid "* column #%d: output = %s\n"
+msgstr "* colonne #%d: sortie = %s\n"
+
+#: makeinfo/node.c:280
+#, c-format
+msgid "Node `%s' previously defined at line %d"
+msgstr "Le noeud « %s » défini antérieurement à la ligne %d"
+
+#: makeinfo/node.c:648
+#, c-format
+msgid "Formatting node %s...\n"
+msgstr "Écriture du noeud « %s »...\n"
+
+#: makeinfo/node.c:716
+#, 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:879
+#, 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:920 makeinfo/node.c:1151
+#, 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:923
+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:925 makeinfo/node.c:1154
+msgid "Rename this anchor or use the `--no-split' option"
+msgstr "Renommer cette ancre ou utiliser l'option « --no-split »"
+
+#: makeinfo/node.c:955
+#, 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:991
+msgid "Next:"
+msgstr "Noeud « Next »:"
+
+# Est-ce vraiment un message à traduire?
+#: makeinfo/node.c:1007
+msgid "Previous:"
+msgstr "Noeud « Previous »:"
+
+# Est-ce vraiment un message à traduire?
+#: makeinfo/node.c:1021
+msgid "Up:"
+msgstr "Noeud « Up »:"
+
+#: makeinfo/node.c:1148
+#, 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:1153
+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:1347
+#, 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:1363
+msgid "Menu"
+msgstr "Menu"
+
+#: makeinfo/node.c:1365
+msgid "Cross"
+msgstr "Référence"
+
+#: makeinfo/node.c:1447
+#, 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:1450
+#, c-format
+msgid "This node (%s) has the bad Prev"
+msgstr "Ce noeud (%s) a un noeud « Prev » erroné"
+
+# Est-ce vraiment un message à traduire?
+#: makeinfo/node.c:1462
+msgid "Prev"
+msgstr "Noeud « Previous »"
+
+#: makeinfo/node.c:1505
+#, 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:1509
+#, c-format
+msgid "This node (%s) has the bad Next"
+msgstr "Ce noeud (%s) a un noeud « Next » erroné"
+
+#: makeinfo/node.c:1521
+#, c-format
+msgid "`%s' has no Up field (perhaps incorrect sectioning?)"
+msgstr "« %s » n'a pas de champ Up (à moins d'un sectionnement incorrect?)"
+
+# Est-ce vraiment un message à traduire?
+#: makeinfo/node.c:1524
+msgid "Up"
+msgstr "Noeud « Up »"
+
+#: makeinfo/node.c:1590
+#, 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:1619
+#, c-format
+msgid "node `%s' has been referenced %d times"
+msgstr "Le noeud « %s » a été référencé %d fois"
+
+#: makeinfo/node.c:1633
+#, c-format
+msgid "unreferenced node `%s'"
+msgstr "noeud « %s » non référencé"
+
+#: makeinfo/node.c:1723
+#, c-format
+msgid "Removing %s\n"
+msgstr "Retrait de %s\n"
+
+#: makeinfo/node.c:1727
+#, 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:562
+#, c-format
+msgid "Internal error (search_sectioning) \"%s\"!"
+msgstr "Erreur interne (search_sectioning) « %s »!"
+
+#: makeinfo/sectioning.c:623
+#, 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:639
+#, 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:647
+#, c-format
+msgid "Here is the %ctop node"
+msgstr "Le noeud %ctop se trouve ici"
+
+#: makeinfo/sectioning.c:663
+#, c-format
+msgid "%ctop used before %cnode, defaulting to %s"
+msgstr "noeud %ctop utilisé avant %cnode, %s implicitement"
+
+#: makeinfo/toc.c:197 makeinfo/toc.c:271 makeinfo/toc.c:273
+msgid "Table of Contents"
+msgstr "Table des matières"
+
+#: makeinfo/toc.c:304 makeinfo/toc.c:337 makeinfo/toc.c:339
+msgid "Short Contents"
+msgstr "Sommaire"
+
+#: makeinfo/xml.c:1605
+#, c-format
+msgid "@image file `%s' unreadable: %s"
+msgstr "commande @image avec un fichier « %s » illisible: %s"
+
+#: makeinfo/xml.c:2097
+msgid ""
+"@headitem as the last item of @multitable produces invalid Docbook documents"
+msgstr ""
+"@headitem comme dernier item de @multitable produit des documents Docbook "
+"invalides"
+
+#: util/install-info.c:154
+#, c-format
+msgid "%s: warning: "
+msgstr "%s: avertissement: "
+
+#: util/install-info.c:203
+#, c-format
+msgid " for %s"
+msgstr " pour %s"
+
+#: util/install-info.c:426
+#, 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"
+
+#: util/install-info.c:434
+#, c-format
+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 ""
+"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"
+
+#: util/install-info.c:488
+#, 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"
+
+#: util/install-info.c:513
+#, 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"
+
+#: util/install-info.c:600
+#, c-format
+msgid "%s: empty file"
+msgstr "%s: fichier vide"
+
+#: util/install-info.c:913 util/install-info.c:953
+msgid "START-INFO-DIR-ENTRY without matching END-INFO-DIR-ENTRY"
+msgstr "START-INFO-DIR-ENTRY non apparié avec END-INFO-DIR-ENTRY"
+
+#: util/install-info.c:948
+msgid "END-INFO-DIR-ENTRY without matching START-INFO-DIR-ENTRY"
+msgstr "END-INFO-DIR-ENTRY non apparié avec START-INFO-DIR-ENTRY"
+
+#: util/install-info.c:1191 util/install-info.c:1201
+#, c-format
+msgid "%s: already have dir file: %s\n"
+msgstr "%s: a déjà un fichier répertoire: %s\n"
+
+#: util/install-info.c:1236
+#, c-format
+msgid "%s: Specify the Info file only once.\n"
+msgstr "%s: Spécifier le fichier Info seulement une fois.\n"
+
+#: util/install-info.c:1284
+#, c-format
+msgid "excess command line argument `%s'"
+msgstr "excédent d'argument de ligne de commande « %s »"
+
+#: util/install-info.c:1288
+msgid "No input file specified; try --help for more information."
+msgstr ""
+"Aucun fichier d'entrée spécifié; utiliser --help pour plus d'informations."
+
+#: util/install-info.c:1291
+msgid "No dir file specified; try --help for more information."
+msgstr "Aucun fichier dir spécifié; utiliser --help pour plus d'informations."
+
+#: util/install-info.c:1313
+#, c-format
+msgid "no info dir entry in `%s'"
+msgstr "aucune entrée répertoire Info dans « %s »"
+
+#: util/install-info.c:1426
+#, c-format
+msgid "menu item `%s' already exists, for file `%s'"
+msgstr "item menu « %s » déjà existant, pour le fichier « %s »"
+
+#: util/install-info.c:1449
+#, c-format
+msgid "no entries found for `%s'; nothing deleted"
+msgstr "aucune entrée trouvée pour « %s »; rien n'a été éliminé"
+
+#: util/texindex.c:252
+msgid "display this help and exit"
+msgstr "afficher cet aide-mémoire et quitter"
+
+#: util/texindex.c:254
+msgid "keep temporary files around after processing"
+msgstr "conserver les fichiers temporaires après le traitement"
+
+#: util/texindex.c:256
+msgid "do not keep temporary files around after processing (default)"
+msgstr "ne pas conserver les fichiers temporaires après le traitement (défaut)"
+
+#: util/texindex.c:258
+msgid "send output to FILE"
+msgstr "envoyer la sortie dans FICHIER"
+
+#: util/texindex.c:260
+msgid "display version information and exit"
+msgstr "afficher la version du logiciel et quitter"
+
+#: util/texindex.c:270
+#, c-format
+msgid "Usage: %s [OPTION]... FILE...\n"
+msgstr "Usage: %s [OPTION]... FICHIER...\n"
+
+#: util/texindex.c:271
+#, 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:274
+#, 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:276
+#, c-format
+msgid ""
+"\n"
+"Options:\n"
+msgstr ""
+"\n"
+"Options:\n"
+
+#: util/texindex.c:876 util/texindex.c:910 util/texindex.c:983
+#: util/texindex.c:1011
+#, c-format
+msgid "%s: not a texinfo index file"
+msgstr "%s: pas un fichier index en format Texinfo"
+
+#: util/texindex.c:968
+#, c-format
+msgid "failure reopening %s"
+msgstr "échec lors de la réouverture de %s"
+
+#: util/texindex.c:1218
+#, c-format
+msgid "No page number in %s"
+msgstr "Aucun numéro de page dans %s"
+
+#: util/texindex.c:1291
+#, 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"
+
+# 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 "First argument to cross-reference may not be empty"
+#~ msgstr "Premier argument de références croisée peut ne pas être vide"
+
+#~ msgid "see "
+#~ msgstr "voir "
+
+#~ msgid "`.' or `,' must follow cross reference, not %c"
+#~ msgstr "« . » ou « , » doit suivre une référence croisée, non pas %c"
+
+#~ msgid "First argument to @inforef may not be empty"
+#~ msgstr "Premier argument de @inforef peut ne pas être vide"
+
+#~ 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 "virtual memory exhausted"
+#~ msgstr "mémoire virtuelle épuisée"
+
+#~ 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 "\\%-10[scroll-forward] Scroll forward 1 line.\n"
+#~ msgstr "\\%-10[scroll-forward] Avancer de 1 ligne.\n"
+
+#~ msgid "\\%-10[scroll-backward] Scroll backward 1 line.\n"
+#~ msgstr "\\%-10[scroll-backward] Reculer de 1 ligne.\n"
+
+#~ 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/macros/texinfo/contrib/texinfo-hu/texinfo/po/he.gmo b/macros/texinfo/contrib/texinfo-hu/texinfo/po/he.gmo
new file mode 100644
index 0000000000..37652ea697
--- /dev/null
+++ b/macros/texinfo/contrib/texinfo-hu/texinfo/po/he.gmo
Binary files differ
diff --git a/macros/texinfo/contrib/texinfo-hu/texinfo/po/he.po b/macros/texinfo/contrib/texinfo-hu/texinfo/po/he.po
new file mode 100644
index 0000000000..9f4f519bfa
--- /dev/null
+++ b/macros/texinfo/contrib/texinfo-hu/texinfo/po/he.po
@@ -0,0 +1,3074 @@
+# 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: 2004-12-21 16:20-0800\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"
+
+#: info/echo-area.c:284 info/session.c:689
+msgid "Move forward a character"
+msgstr "äîéã÷ ãçà åú ïîñ ææä"
+
+#: info/echo-area.c:296 info/session.c:705
+msgid "Move backward a character"
+msgstr "äøåçà ãçà åú ïîñ ææä"
+
+#: info/echo-area.c:308
+msgid "Move to the start of this line"
+msgstr "äøåùä úìéçúì ïîñ ææä"
+
+#: info/echo-area.c:313
+msgid "Move to the end of this line"
+msgstr "äøåùä óåñì ïîñ ææä"
+
+#: info/echo-area.c:321 info/session.c:723
+msgid "Move forward a word"
+msgstr "äîéã÷ úçà äìéî ïîñ ææä"
+
+#: info/echo-area.c:361 info/session.c:772
+msgid "Move backward a word"
+msgstr "äøåçà úçà äìéî ïîñ ææä"
+
+#: info/echo-area.c:401
+msgid "Delete the character under the cursor"
+msgstr "åéìò ïîñäù åúä ÷çî"
+
+#: info/echo-area.c:431
+msgid "Delete the character behind the cursor"
+msgstr "ïîñä éðôìù åúä ÷çî"
+
+#: info/echo-area.c:452
+msgid "Cancel or quit operation"
+msgstr "äðåøçà äìåòô ÷ñôä åà ìèá"
+
+#: info/echo-area.c:467
+msgid "Accept (or force completion of) this line"
+msgstr "(êøåö ùé íà äúåà íìùä) òåöéáì åæ äøåù ìá÷"
+
+#: info/echo-area.c:472
+msgid "Insert next character verbatim"
+msgstr "éìåìéî ïôåàá àáä åúä óñåä"
+
+#: info/echo-area.c:480
+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:653
+msgid "Kill the word preceding the cursor"
+msgstr "ïîñä éðôìù äìéîä ÷çî"
+
+#: info/echo-area.c:868 info/echo-area.c:924
+msgid "No completions"
+msgstr "äîìùä óà ïéà"
+
+#: info/echo-area.c:870
+msgid "Not complete"
+msgstr "íìù àì"
+
+#: info/echo-area.c:911
+msgid "List possible completions"
+msgstr "úåéøùôà úåîìùä âöä"
+
+#: info/echo-area.c:928
+msgid "Sole completion"
+msgstr "äãéçé äîìùä"
+
+#: info/echo-area.c:937
+msgid "One completion:\n"
+msgstr " :úçà äîìùä\n"
+
+#: info/echo-area.c:938
+#, c-format
+msgid "%d completions:\n"
+msgstr " :úåîìùä %d\n"
+
+#: info/echo-area.c:1085
+msgid "Insert completion"
+msgstr "äîìùä óñåä"
+
+#: info/echo-area.c:1220
+msgid "Building completions..."
+msgstr "...úåîìùä úîéùø áéëøî"
+
+#: info/echo-area.c:1340
+msgid "Scroll the completions window"
+msgstr "úåîìùää ïåìç úà ìåìâ"
+
+#: info/footnotes.c:213
+msgid "Footnotes could not be displayed"
+msgstr "íééìåù úåøòä âéöäì ïúéð àì"
+
+#: info/footnotes.c:239
+msgid "Show the footnotes associated with this node in another window"
+msgstr "åæ ä÷ñéôì íééìåù úåøòä âöä"
+
+#: info/footnotes.h:26
+msgid "---------- Footnotes ----------"
+msgstr "---------- Footnotes ----------"
+
+#: info/indices.c:172
+msgid "Look up a string in the index for this file"
+msgstr "äæ õáå÷ ìù ñ÷ãðéàá úæåøçî ùôç"
+
+#: info/indices.c:199
+msgid "Finding index entries..."
+msgstr "...íéñ÷ãðéàä ìë úà ÷øåñ"
+
+#: info/indices.c:207
+msgid "No indices found."
+msgstr ".ñ÷ãðéà óà àöîð àì"
+
+#: info/indices.c:217
+msgid "Index entry: "
+msgstr "Index entry: "
+
+#: info/indices.c:325
+msgid ""
+"Go to the next matching index item from the last `\\[index-search]' command"
+msgstr "äðåøçà `\\[index-search]' úãå÷ôî úæåøçî íàåúä óñåð ñ÷ãðéà èéøô ùôç"
+
+#: info/indices.c:335
+msgid "No previous index search string."
+msgstr ".ñ÷ãðéàá ùåôéçì úîãå÷ úæåøçî ïéà"
+
+#: info/indices.c:342
+msgid "No index entries."
+msgstr ".ñ÷ãðéà éèéøô åàöîð àì"
+
+#: info/indices.c:375
+#, fuzzy, c-format
+msgid "No %sindex entries containing `%s'."
+msgstr ".\"%s\" úæåøçî íéìéëîä ñ÷ãðéà éèéøô%s ïéà"
+
+#: info/indices.c:376
+msgid "more "
+msgstr " øúåé"
+
+#: info/indices.c:386
+msgid "CAN'T SEE THIS"
+msgstr "!úåàøéäì êéøö åðéàù èñ÷è"
+
+#: info/indices.c:422
+#, fuzzy, c-format
+msgid "Found `%s' in %s. (`\\[next-index-match]' tries to find next.)"
+msgstr "(.ãåò àåöîì äñðé `\\[next-index-match]') .\"%s\" èéøô %s-á éúàöî"
+
+#: info/indices.c:541
+#, fuzzy, c-format
+msgid "Scanning indices of `%s'..."
+msgstr "...\"%s\" ìù íéñ÷ãðéàä ìë úà ÷øåñ"
+
+#: info/indices.c:596
+#, fuzzy, c-format
+msgid "No available info files have `%s' in their indices."
+msgstr ".åìù ñ÷ãðéàá \"%s\" ìéëî ïàë íéð÷úåîäî Info õáå÷ óà"
+
+#: info/indices.c:622
+msgid "Grovel all known info file's indices for a string and build a menu"
+msgstr ""
+"úàöîù äîî èéøôú äðáå úæåøçî íäá ùôç ,íéòåãé Info éöá÷ ìù íéñ÷ãðéàä ìëá èèç"
+
+#: info/indices.c:626
+msgid "Index apropos: "
+msgstr "Index apropos: "
+
+#: info/indices.c:654
+#, 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:295 makeinfo/makeinfo.c:766 util/install-info.c:1266
+#: util/texindex.c:343
+#, fuzzy, c-format
+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"
+
+#: info/info.c:498
+#, c-format
+msgid "no index entries found for `%s'\n"
+msgstr "`%s' úæåøçî íéìéëîä ñ÷ãðéà éèéøô ïéà\n"
+
+#: info/info.c:590
+msgid " -b, --speech-friendly be friendly to speech synthesizers.\n"
+msgstr ""
+" .øåáéã æúðñîì åîéàúäì éãë êñîì äáéúë ïôåà äðù -b, --speech-friendly\n"
+
+#: info/info.c:597
+#, fuzzy, c-format
+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 -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"
+
+#: info/info.c:635 info/infokey.c:918 makeinfo/makeinfo.c:465
+#: util/install-info.c:466 util/texindex.c:292
+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:669
+#, c-format
+msgid "Cannot find node `%s'."
+msgstr ".äàöîð àì `%s' ä÷ñéô"
+
+#: info/info.c:670
+#, c-format
+msgid "Cannot find node `(%s)%s'."
+msgstr ".äàöîð àì `%s' õáå÷á `%s' ä÷ñéô"
+
+#: info/info.c:671
+msgid "Cannot find a window!"
+msgstr "!ïåìç óà àöîð àì"
+
+#: info/info.c:672
+msgid "Point doesn't appear within this window's node!"
+msgstr "!äæ ïåìçá úâöåîä ä÷ñéôá àöîð åðéà ïîñä"
+
+#: info/info.c:673
+msgid "Cannot delete the last window."
+msgstr ".ãéçé ïåìç ÷åçîì ïúéð àì"
+
+#: info/info.c:674
+msgid "No menu in this node."
+msgstr ".íéèéøôú ïéà åæ ä÷ñéôá"
+
+#: info/info.c:675
+msgid "No footnotes in this node."
+msgstr ".íééìåù úåøòä ïéà åæ ä÷ñéôá"
+
+#: info/info.c:676
+msgid "No cross references in this node."
+msgstr ".íéøåùé÷ ïéà åæ ä÷ñéôá"
+
+#: info/info.c:677
+#, c-format
+msgid "No `%s' pointer for this node."
+msgstr ".%sì äééðôä ïéà åæ ä÷ñéôá"
+
+#: info/info.c:678
+#, c-format
+msgid "Unknown Info command `%c'; try `?' for help."
+msgstr ".äøæò úìá÷ì `?' äñð ;Info-ì úøëåî äðéà `%c' äãå÷ô"
+
+#: info/info.c:679
+#, c-format
+msgid "Terminal type `%s' is not smart enough to run Info."
+msgstr ".Info õéøäì éãë åéã ììëåùî åðéà `%s' âåñî âö"
+
+#: info/info.c:680
+msgid "You are already at the last page of this node."
+msgstr ".åæ ä÷ñéô ìù ïåøçàä ãåîòá øáë ä/úà"
+
+#: info/info.c:681
+msgid "You are already at the first page of this node."
+msgstr ".åæ ä÷ñéô ìù ïåùàøä ãåîòá øáë ä/úà"
+
+#: info/info.c:682
+msgid "Only one window."
+msgstr ".ãçà ïåìç ÷ø íéé÷"
+
+#: info/info.c:683
+msgid "Resulting window would be too small."
+msgstr ".éãî øúåé ïè÷ äéä ïåìçä"
+
+#: info/info.c:684
+msgid "Not enough room for a help window, please delete a window."
+msgstr ".åäùìë ïåìç ÷åçîì àð ;äøæò ïåìç âéöäì íå÷î ÷éôñî ïéà"
+
+#: info/infodoc.c:46 info/infodoc.c:95
+msgid ""
+"Basic Commands in Info Windows\n"
+"******************************\n"
+msgstr ""
+" Info úåðåìçá úåéñéñá úåãå÷ô\n"
+" ***************************\n"
+
+#: info/infodoc.c:49
+msgid "\\%-10[quit-help] Quit this help.\n"
+msgstr "\\%-10[quit-help] äæ äøæò ïåìç øåâñ\n"
+
+#: info/infodoc.c:50
+msgid "\\%-10[quit] Quit Info altogether.\n"
+msgstr "\\%-10[quit] Info úéðëúî éøîâì àö\n"
+
+#: info/infodoc.c:51
+msgid "\\%-10[get-info-help-node] Invoke the Info tutorial.\n"
+msgstr "\\%-10[get-info-help-node] Info ùîúùîì êéøãî âöä\n"
+
+#: info/infodoc.c:53 info/infodoc.c:102
+msgid ""
+"Selecting other nodes:\n"
+"----------------------\n"
+msgstr ""
+" :úåøçà úåà÷ñéôá äøéçá\n"
+" ---------------------\n"
+
+#: info/infodoc.c:55
+msgid "\\%-10[next-node] Move to the \"next\" node of this node.\n"
+msgstr "\\%-10[next-node] úéçëåð ä÷ñéô éøçà äàáä ä÷ñéôì øåáò\n"
+
+#: info/infodoc.c:56
+msgid "\\%-10[prev-node] Move to the \"previous\" node of this node.\n"
+msgstr "\\%-10[prev-node] úéçëåð ä÷ñéô éðôìù ä÷ñéôì øåáò\n"
+
+#: info/infodoc.c:57
+msgid "\\%-10[up-node] Move \"up\" from this node.\n"
+msgstr "\\%-10[up-node] úéçëåð ä÷ñéô ìù áà-ú÷ñéôì øåáò\n"
+
+#: info/infodoc.c:58
+msgid ""
+"\\%-10[menu-item] 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:60
+msgid ""
+"\\%-10[xref-item] Follow a cross reference. Reads name of reference.\n"
+msgstr "\\%-10[xref-item] øåùé÷ä íù àøå÷ ;øåùé÷ øçà áå÷ò\n"
+
+#: info/infodoc.c:61
+msgid "\\%-10[history-node] Move to the last node seen in this window.\n"
+msgstr "\\%-10[history-node] äæ ïåìçá äâöåäù äðåøçàä ä÷ñéôì øåæç\n"
+
+#: info/infodoc.c:62
+msgid ""
+"\\%-10[move-to-next-xref] Skip to next hypertext link within this node.\n"
+msgstr "\\%-10[move-to-next-xref] úéçëåð ä÷ñéôá àáä øåùé÷ì ïîñ ææä\n"
+
+#: info/infodoc.c:63
+msgid ""
+"\\%-10[move-to-prev-xref] Skip to previous hypertext link within this "
+"node.\n"
+msgstr "\\%-10[move-to-prev-xref] úéçëåð ä÷ñéôá íãå÷ä øåùé÷ì ïîñ ææä\n"
+
+#: info/infodoc.c:64
+msgid ""
+"\\%-10[select-reference-this-line] Follow the hypertext link under cursor.\n"
+msgstr "\\%-10[select-reference-this-line] åéìò àöîð ïîñäù øåùé÷ éøçà áå÷ò\n"
+
+#: info/infodoc.c:65
+msgid ""
+"\\%-10[dir-node] Move to the `directory' node. Equivalent to `\\[goto-"
+"node] (DIR)'.\n"
+msgstr "\\%-10[dir-node] `\\[goto-node] (DIR)'-ì êøò-äååù ;DIR ä÷ñéôì øåáò\n"
+
+#: info/infodoc.c:66
+msgid ""
+"\\%-10[top-node] Move to the Top node. Equivalent to `\\[goto-node] Top'.\n"
+msgstr "\\%-10[top-node] `\\[goto-node] Top'-ì êøò-äååù ;Top ä÷ñéôì øåáò\n"
+
+#: info/infodoc.c:68 info/infodoc.c:116
+msgid ""
+"Moving within a node:\n"
+"---------------------\n"
+msgstr ""
+" :ä÷ñéô êåúá ïîñ úòåðú\n"
+" ---------------------\n"
+
+#: info/infodoc.c:70
+msgid "\\%-10[beginning-of-node] Go to the beginning of this node.\n"
+msgstr "\\%-10[beginning-of-node] úéçëåð ä÷ñéô úìéçúì ïîñ ææä\n"
+
+#: info/infodoc.c:71
+msgid "\\%-10[end-of-node] Go to the end of this node.\n"
+msgstr "\\%-10[end-of-node] úéçëåð ä÷ñéô óåñì ïîñ ææä\n"
+
+#: info/infodoc.c:72
+#, fuzzy
+msgid "\\%-10[next-line] Scroll forward 1 line.\n"
+msgstr " %-10s äîéã÷ úçà äøåù ïîñ ææä\n"
+
+#: info/infodoc.c:73
+#, fuzzy
+msgid "\\%-10[prev-line] Scroll backward 1 line.\n"
+msgstr " %-10s äøåçà úçà äøåù ïîñ ææä\n"
+
+#: info/infodoc.c:74
+msgid "\\%-10[scroll-forward] Scroll forward a page.\n"
+msgstr "\\%-10[scroll-forward] äîéã÷ ãçà óã ìåìâ\n"
+
+#: info/infodoc.c:75
+msgid "\\%-10[scroll-backward] Scroll backward a page.\n"
+msgstr "\\%-10[scroll-backward] äøåçà ãçà óã ìåìâ\n"
+
+#: info/infodoc.c:77 info/infodoc.c:125
+msgid ""
+"Other commands:\n"
+"---------------\n"
+msgstr ""
+" :úåøçà úåãå÷ô\n"
+" -------------\n"
+
+#: info/infodoc.c:79
+msgid "\\%-10[menu-digit] Pick first ... ninth item in node's menu.\n"
+msgstr "\\%-10[menu-digit] úéçëåðä ä÷ñéôä èéøôúá éòéùú ãò ïåùàø óéòñ øçá\n"
+
+#: info/infodoc.c:80
+msgid "\\%-10[last-menu-item] Pick last item in node's menu.\n"
+msgstr "\\%-10[last-menu-item] úéçëåðä ä÷ñéôä èéøôúá ïåøçà óéòñ øçá\n"
+
+#: info/infodoc.c:81
+msgid ""
+"\\%-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"
+msgstr ""
+"\\%-10[index-search] øåáòå äæ Info õáå÷ ìù íéñ÷ãðéàá úæåøçî ùôç\n"
+" íàåú àöîðù ïåùàø ñ÷ãðéà èéøô äòéáöî äéìà ä÷ñéôì\n"
+
+#: info/infodoc.c:83
+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"
+
+#: info/infodoc.c:85
+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"
+
+#: info/infodoc.c:87
+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"
+
+#: info/infodoc.c:98
+#, c-format
+msgid " %-10s Quit this help.\n"
+msgstr " %-10s äæ äøæò ïåìç øåâñ\n"
+
+#: info/infodoc.c:99
+#, c-format
+msgid " %-10s Quit Info altogether.\n"
+msgstr " %-10s Info úéðëúî éøîâì àö\n"
+
+#: info/infodoc.c:100
+#, c-format
+msgid " %-10s Invoke the Info tutorial.\n"
+msgstr " %-10s Info ùîúùîì êéøãî âöä\n"
+
+#: info/infodoc.c:104
+#, c-format
+msgid " %-10s Move to the `next' node of this node.\n"
+msgstr " %-10s úéçëåð ä÷ñéô éøçà äàáä ä÷ñéôì øåáò\n"
+
+#: info/infodoc.c:105
+#, c-format
+msgid " %-10s Move to the `previous' node of this node.\n"
+msgstr " %-10s úéçëåð ä÷ñéô éðôìù ä÷ñéôì øåáò\n"
+
+#: info/infodoc.c:106
+#, c-format
+msgid " %-10s Move `up' from this node.\n"
+msgstr " %-10s úéçëåð ä÷ñéô ìù áà-ú÷ñéôì øåáò\n"
+
+#: info/infodoc.c:107
+#, c-format
+msgid " %-10s Pick menu item specified by name.\n"
+msgstr " %-10s åîù é\"ôò èéøôúî óéòñ øçá\n"
+
+#: info/infodoc.c:108
+msgid " Picking a menu item causes another node to be selected.\n"
+msgstr " .úøçà ä÷ñéôì øáòîì úîøåâ èéøôúî äøéçá\n"
+
+#: info/infodoc.c:109
+#, c-format
+msgid " %-10s Follow a cross reference. Reads name of reference.\n"
+msgstr " %-10s øåùé÷ä íù àøå÷ ;øåùé÷ øçà áå÷ò\n"
+
+#: info/infodoc.c:110
+#, c-format
+msgid " %-10s Move to the last node seen in this window.\n"
+msgstr " %-10s äæ ïåìçá äâöåäù äðåøçàä ä÷ñéôì øåæç\n"
+
+#: info/infodoc.c:111
+#, c-format
+msgid " %-10s Skip to next hypertext link within this node.\n"
+msgstr " %-10s úéçëåð ä÷ñéôá àáä øåùé÷ì ïîñ ææä\n"
+
+#: info/infodoc.c:112
+#, c-format
+msgid " %-10s Follow the hypertext link under cursor.\n"
+msgstr " %-10s åéìò àöîð ïîñäù øåùé÷ éøçà áå÷ò\n"
+
+#: info/infodoc.c:113
+#, c-format
+msgid " %-10s Move to the `directory' node. Equivalent to `g (DIR)'.\n"
+msgstr " %-10s `g (DIR)'-ì êøò-äååù ;DIR ä÷ñéôì øåáò\n"
+
+#: info/infodoc.c:114
+#, c-format
+msgid " %-10s Move to the Top node. Equivalent to `g Top'.\n"
+msgstr " %-10s `g Top'-ì êøò-äååù ;Top ä÷ñéôì øåáò\n"
+
+#: info/infodoc.c:118
+#, c-format
+msgid " %-10s Scroll forward a page.\n"
+msgstr " %-10s äîéã÷ ãçà óã ìåìâ\n"
+
+#: info/infodoc.c:119
+#, c-format
+msgid " %-10s Scroll backward a page.\n"
+msgstr " %-10s äøåçà ãçà óã ìåìâ\n"
+
+#: info/infodoc.c:120
+#, c-format
+msgid " %-10s Go to the beginning of this node.\n"
+msgstr " %-10s úéçëåð ä÷ñéô úìéçúì ïîñ ææä\n"
+
+#: info/infodoc.c:121
+#, c-format
+msgid " %-10s Go to the end of this node.\n"
+msgstr " %-10s úéçëåð ä÷ñéô óåñì ïîñ ææä\n"
+
+#: info/infodoc.c:122
+#, c-format
+msgid " %-10s Scroll forward 1 line.\n"
+msgstr " %-10s äîéã÷ úçà äøåù ïîñ ææä\n"
+
+#: info/infodoc.c:123
+#, c-format
+msgid " %-10s Scroll backward 1 line.\n"
+msgstr " %-10s äøåçà úçà äøåù ïîñ ææä\n"
+
+#: info/infodoc.c:127
+#, c-format
+msgid " %-10s Pick first ... ninth item in node's menu.\n"
+msgstr " %-10s úéçëåðä ä÷ñéôä èéøôúá éòéùú ãò ïåùàø óéòñ øçá\n"
+
+#: info/infodoc.c:128
+#, c-format
+msgid " %-10s Pick last item in node's menu.\n"
+msgstr " %-10s úéçëåðä ä÷ñéôä èéøôúá ïåøçà óéòñ øçá\n"
+
+#: info/infodoc.c:129
+#, c-format
+msgid ""
+" %-10s Search for a specified string in the index entries of this Info\n"
+msgstr " %-10s øåáòå äæ Info õáå÷ ìù íéñ÷ãðéàá úæåøçî ùôç\n"
+
+#: info/infodoc.c:130
+msgid ""
+" file, and select the node referenced by the first entry "
+"found.\n"
+msgstr " íàåú àöîðù ïåùàø ñ÷ãðéà èéøô äòéáöî äéìà ä÷ñéôì\n"
+
+#: info/infodoc.c:131
+#, c-format
+msgid " %-10s Move to node specified by name.\n"
+msgstr " %-10s äîù é\"ôò ä÷ñéôì øåáò\n"
+
+#: info/infodoc.c:132
+msgid ""
+" You may include a filename as well, as in (FILENAME)NODENAME.\n"
+msgstr ""
+" .(FILENAME)NODENAME-á åîë ä÷ñéôä íùî ÷ìçë õáå÷ íù ïééöì ïúéð\n"
+
+#: info/infodoc.c:133
+#, c-format
+msgid " %-10s Search forward for a specified string,\n"
+msgstr " %-10s äæ Info õáå÷á êìéàå ïàëî úæåøçî ùôç\n"
+
+#: info/infodoc.c:134 info/infodoc.c:136
+msgid ""
+" and select the node in which the next occurrence is found.\n"
+msgstr " .úæåøçîä äàöîð äá ä÷ñéôì øåáòå\n"
+
+#: info/infodoc.c:135
+#, c-format
+msgid " %-10s Search backward for a specified string\n"
+msgstr " %-10s äæ Info õáå÷á äøåçàå ïàëî úæåøçî ùôç\n"
+
+#: info/infodoc.c:316
+msgid "The current search path is:\n"
+msgstr " :àéä úéçëåð ùåôéç úîéùø\n"
+
+#: info/infodoc.c:320
+msgid ""
+"Commands available in Info windows:\n"
+"\n"
+msgstr ""
+" :Info úåðåìçá úåéøùôà úåãå÷ô\n"
+"\n"
+
+#: info/infodoc.c:324
+msgid ""
+"Commands available in the echo area:\n"
+"\n"
+msgstr ""
+" :úåãå÷ôä úøåùá úåéøùôà úåãå÷ô\n"
+"\n"
+
+#: info/infodoc.c:347
+#, c-format
+msgid ""
+"The following commands can only be invoked via %s:\n"
+"\n"
+msgstr ""
+" :ãáìá %s úåòöîàá ìéòôäì ïúéð úåàáä úåãå÷ôä úà\n"
+"\n"
+
+#: info/infodoc.c:351
+msgid ""
+"The following commands cannot be invoked at all:\n"
+"\n"
+msgstr ""
+" :ììë äìòôäì úåðúéð ïðéà úåàáä úåãå÷ôä\n"
+"\n"
+
+#: info/infodoc.c:375
+msgid "--- Use `\\[history-node]' or `\\[kill-node]' to exit ---\n"
+msgstr "--- `\\[kill-node]' åà `\\[history-node]' ù÷ä äàéöéì ---\n"
+
+#: info/infodoc.c:485
+msgid "Display help message"
+msgstr "äøæò êñî âöä"
+
+#: info/infodoc.c:503
+msgid "Visit Info node `(info)Help'"
+msgstr "Info úëøòîá ùåîéùì êéøãî âöä"
+
+#: info/infodoc.c:641
+msgid "Print documentation for KEY"
+msgstr "íéåñî ù÷î øåáò ãåòéú âöä"
+
+#: info/infodoc.c:653
+#, c-format
+msgid "Describe key: %s"
+msgstr "Describe key: %s"
+
+#: info/infodoc.c:664
+#, c-format
+msgid "ESC %s is undefined."
+msgstr ".øãâåî åðéà \"ESC %s\""
+
+#: info/infodoc.c:680 info/infodoc.c:709
+#, c-format
+msgid "%s is undefined."
+msgstr ".øãâåî åðéà \"%s\""
+
+#: info/infodoc.c:730
+#, c-format
+msgid "%s is defined to %s."
+msgstr "%s is defined to %s."
+
+#: info/infodoc.c:1153
+msgid "Show what to type to execute a given command"
+msgstr "úîéåñî äãå÷ô úìòôäì ãéì÷äì äî âöä"
+
+#: info/infodoc.c:1157
+msgid "Where is command: "
+msgstr "Where is command: "
+
+#: info/infodoc.c:1179
+#, c-format
+msgid "`%s' is not on any keys"
+msgstr "åäùìë ù÷îì äøåù÷ äðéà `%s' äãå÷ôä"
+
+#: info/infodoc.c:1186
+#, c-format
+msgid "%s can only be invoked via %s."
+msgstr ".`%s' úìòôäì äãéçéä êøãä àåä `%s'"
+
+#: info/infodoc.c:1190
+#, c-format
+msgid "%s can be invoked via %s."
+msgstr ".%s äãå÷ôä úà ìéòôé %s"
+
+#: info/infodoc.c:1195
+#, c-format
+msgid "There is no function named `%s'"
+msgstr ".úîéé÷ äðéà `%s' íùá äéö÷ðåô"
+
+#: info/infokey.c:145
+#, c-format
+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"
+"åæ äðëåú õéôäì íëúåëæ .úåéøçà áúëá äååìî äðéà åæ úéðëåú\n"
+" .GNU General Public License ïåéùøä éàðúì íàúäá\n"
+" .COPYING õáå÷á åðééò ,åìà íéðéðòá èåøéô øúéì\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:1500
+#, c-format
+msgid "Ignoring invalid infokey file `%s' - too small"
+msgstr "ïé÷ú infokey õáå÷ úåéäì éãëá éãî ïè÷ -- `%s' õáå÷î íìòúî"
+
+#: info/infomap.c:1503
+#, c-format
+msgid "Ignoring invalid infokey file `%s' - too big"
+msgstr "ïé÷ú infokey õáå÷ úåéäì éãëá éãî ìåãâ -- `%s' õáå÷î íìòúî"
+
+#: info/infomap.c:1516
+#, c-format
+msgid "Error reading infokey file `%s' - short read"
+msgstr "àø÷ð õáå÷ä ìë àì - `%s' infokey õáå÷ úàéø÷á äì÷ú"
+
+#: info/infomap.c:1535
+#, c-format
+msgid ""
+"Invalid infokey file `%s' (bad magic numbers) -- run infokey to update it"
+msgstr ""
+"åðåëãò êøåöì infokey õøä -- (éåâù íñ÷ øôñî) ïé÷ú åðéà `%s' infokey õáå÷"
+
+#: info/infomap.c:1544
+#, c-format
+msgid "Your infokey file `%s' is out of date -- run infokey to update it"
+msgstr "åðåëãò êøåöì infokey õøä -- ïëãåòî åðéà `%s' infokey õáå÷"
+
+#: info/infomap.c:1560
+#, c-format
+msgid ""
+"Invalid infokey file `%s' (bad section length) -- run infokey to update it"
+msgstr ""
+"åðåëãò êøåöì infokey õøä -- (éåâù ÷ìç êøåà) ïé÷ú åðéà `%s' infokey õáå÷"
+
+#: info/infomap.c:1581
+#, c-format
+msgid ""
+"Invalid infokey file `%s' (bad section code) -- run infokey to update it"
+msgstr "åðåëãò êøåöì infokey õøä -- (éåâù ÷ìç ãå÷) ïé÷ú åðéà `%s' infokey õáå÷"
+
+#: info/infomap.c:1716
+msgid "Bad data in infokey file -- some key bindings ignored"
+msgstr "äðìòôú àì úåãçà íéù÷î úåøãâä -- infokey õáå÷á íééåâù íéðåúð"
+
+#: info/infomap.c:1766
+msgid "Bad data in infokey file -- some var settings ignored"
+msgstr "ó÷åúá àì úåãçà íéðúùî úåøãâä -- infokey õáå÷á íééåâù íéðåúð"
+
+#: info/m-x.c:69
+msgid "Read the name of an Info command and describe it"
+msgstr "äúåà øàúå Info úãå÷ô ìù íù àø÷"
+
+#: info/m-x.c:73
+msgid "Describe command: "
+msgstr "Describe command: "
+
+#: info/m-x.c:96
+msgid "Read a command name in the echo area and execute it"
+msgstr "äúåà òöáå úåãå÷ôä úøåùî äãå÷ô ìù íù àø÷"
+
+#: info/m-x.c:140
+msgid "Cannot execute an `echo-area' command here."
+msgstr ".äæ áöîá `echo-area' úãå÷ô òöáì ïúéð àì"
+
+#: info/m-x.c:154
+#, fuzzy, c-format
+msgid "Undefined command: %s"
+msgstr "`%s' úøëåî-éúìá äàøåä"
+
+#: info/m-x.c:160
+msgid "Set the height of the displayed window"
+msgstr "âöåîä ïåìçä äáåâ úà äðù"
+
+#: info/m-x.c:173
+#, c-format
+msgid "Set screen height to (%d): "
+msgstr "Set screen height to (%d): "
+
+#: info/makedoc.c:162 info/makedoc.c:170
+#, c-format
+msgid ""
+" Source files groveled to make this file include:\n"
+"\n"
+msgstr ""
+" :íéììåë äæ õáå÷ì åãáåòù øå÷î éöá÷\n"
+"\n"
+
+#: info/makedoc.c:550
+#, c-format
+msgid "Couldn't manipulate the file %s.\n"
+msgstr ".%s õáå÷ ãáòì ïúéð àì\n"
+
+#: info/nodemenu.c:31
+msgid ""
+"\n"
+"* Menu:\n"
+" (File)Node Lines Size Containing File\n"
+" ---------- ----- ---- ---------------"
+msgstr ""
+"\n"
+"* Menu:\n"
+" (õáå÷)ä÷ñéô úåøåù 'ñî ìãåâ áà-õáå÷\n"
+" ----------- --------- ---- -------"
+
+#: info/nodemenu.c:202
+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:224
+msgid "Make a window containing a menu of all of the currently visited nodes"
+msgstr "äðåøçàì úø÷éá ïäá úåà÷ñéôä ìë ìù èéøôú íò ïåìç âöä"
+
+#: info/nodemenu.c:304
+msgid "Select a node which has been previously visited in a visible window"
+msgstr "úåðåìçä ãçàá íãå÷ úâöä äúåà ä÷ñéô øçá"
+
+#: info/nodemenu.c:317
+msgid "Select visited node: "
+msgstr "Select visited node: "
+
+#: info/nodemenu.c:337 info/session.c:2264
+#, c-format
+msgid "The reference disappeared! (%s)."
+msgstr "!íìòð (%s) øåùé÷ä ìù ãòéä"
+
+#: info/session.c:162
+#, 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:620
+msgid "Move down to the next line"
+msgstr "äàáä äøåùì ïîñ ææä"
+
+#: info/session.c:635
+msgid "Move up to the previous line"
+msgstr "úîãå÷ä äøåùì ïîñ ææä"
+
+#: info/session.c:650
+msgid "Move to the end of the line"
+msgstr "äøåùä óåñì ïîñ ææä"
+
+#: info/session.c:670
+msgid "Move to the start of the line"
+msgstr "äææ ñîï ìúçéìú äùåøä"
+
+#: info/session.c:860 makeinfo/node.c:1424
+msgid "Next"
+msgstr "Next äãù"
+
+#: info/session.c:863
+msgid "Following Next node..."
+msgstr "...äàáä ä÷ñéôì øáåò"
+
+#: info/session.c:881
+msgid "Selecting first menu item..."
+msgstr "...èéøôúäî ïåùàø óéòñ øçåá"
+
+#: info/session.c:893
+msgid "Selecting Next node..."
+msgstr "...äàáä ä÷ñéôá øçåá"
+
+#: info/session.c:964
+#, c-format
+msgid "Moving Up %d time(s), then Next."
+msgstr ".äàáä ä÷ñéôä øçåá æàå ,úåà÷ñéôä õòá úå/äîø %d äìåò"
+
+#: info/session.c:988
+msgid "No more nodes within this document."
+msgstr ".äæ êîñîá úåà÷ñéô øúåé ïéà"
+
+#: info/session.c:1011
+msgid "No `Prev' for this node."
+msgstr ".åæ ä÷ñéôá `Prev' øåùé÷ ïéà"
+
+#: info/session.c:1014 info/session.c:1073
+msgid "Moving Prev in this window."
+msgstr ".äæ ïåìçá úîãå÷ ä÷ñéôì øáåò"
+
+#: info/session.c:1030
+msgid "No `Prev' or `Up' for this node within this document."
+msgstr ".åæ ä÷ñéô øåáò `Up'-å `Prev' ììåë åðéà äæ êîñî"
+
+#: info/session.c:1034
+msgid "Moving Up in this window."
+msgstr ".äæ ïåìçá íàä ú÷ñôì øáåò"
+
+#: info/session.c:1084
+msgid "Moving to `Prev's last menu item."
+msgstr ".úîãå÷ ä÷ñéô ìù èéøôúá ïåøçà óéòñì øáåò"
+
+#: info/session.c:1095
+msgid "Move forwards or down through node structure"
+msgstr ".úåà÷ñéôä äðáîá øúåé ÷åîò åà äîéã÷ òåð"
+
+#: info/session.c:1111
+msgid "Move backwards or up through node structure"
+msgstr ".úåà÷ñéôä äðáîá äìòî éôìë åà äøåçà òåð"
+
+#: info/session.c:1205
+msgid "Scroll forward in this window"
+msgstr ".äæ ïåìçá äîéã÷ ìåìâ"
+
+#: info/session.c:1213
+msgid "Scroll forward in this window and set default window size"
+msgstr "ïåìç ìãåâ ìù ç\"îøá êøò äðùå äæ ïåìçá äîéã÷ ìåìâ"
+
+#: info/session.c:1221
+msgid "Scroll forward in this window staying within node"
+msgstr "úéçëåðä ä÷ñéôäî úàöì éìáî äæ ïåìçá äîéã÷ ìåìâ"
+
+#: info/session.c:1229
+msgid ""
+"Scroll forward in this window staying within node and set default window size"
+msgstr ""
+"ïåìç ìãåâ ìù ç\"îøá êøò äðùå úéçëåðä ä÷ñéôäî úàöì éìáî äæ ïåìçá äîéã÷ ìåìâ"
+
+#: info/session.c:1237
+msgid "Scroll backward in this window"
+msgstr "äæ ïåìçá äøåçà ìåìâ"
+
+#: info/session.c:1245
+msgid "Scroll backward in this window and set default window size"
+msgstr "ïåìç ìãåâ ìù ç\"îøá êøò äðùå äæ ïåìçá äøåçà ìåìâ"
+
+#: info/session.c:1254
+msgid "Scroll backward in this window staying within node"
+msgstr "úéçëåðä ä÷ñéôäî úàöì éìáî äæ ïåìçá äøåçà ìåìâ"
+
+#: info/session.c:1262
+msgid ""
+"Scroll backward in this window staying within node and set default window "
+"size"
+msgstr ""
+"ïåìç ìãåâ ìù ç\"îøá êøò äðùå úéçëåðä ä÷ñéôäî úàöì éìáî äæ ïåìçá äøåçà ìåìâ"
+
+#: info/session.c:1270
+msgid "Move to the start of this node"
+msgstr "åæ ä÷ñéô úìéçúì ïîñ ææä"
+
+#: info/session.c:1277
+msgid "Move to the end of this node"
+msgstr "åæ ä÷ñéô óåñì ïîñ ææä"
+
+#: info/session.c:1284
+msgid "Scroll down by lines"
+msgstr "äèî éôìë úåøåù N ìåìâ"
+
+#: info/session.c:1301
+msgid "Scroll up by lines"
+msgstr "äìòî éôìë úåøåù N ìåìâ"
+
+#: info/session.c:1319
+msgid "Scroll down by half screen size"
+msgstr "äèî éôìë äâåöú éöç ìåìâ"
+
+#: info/session.c:1345
+msgid "Scroll up by half screen size"
+msgstr "äìòî éôìë äâåöú éöç ìåìâ"
+
+#: info/session.c:1374
+msgid "Select the next window"
+msgstr "àáä ïåìçá øçá"
+
+#: info/session.c:1413
+msgid "Select the previous window"
+msgstr "íãå÷ä ïåìçá øçá"
+
+#: info/session.c:1464
+msgid "Split the current window"
+msgstr "íééðùì éçëåðä ïåìçä ÷ìç"
+
+#: info/session.c:1545
+msgid "Delete the current window"
+msgstr "éçëåðä ïåìçä úà øñä"
+
+#: info/session.c:1553
+msgid "Cannot delete a permanent window"
+msgstr "òåá÷ ïåìç øéñäì ïúéð àì"
+
+#: info/session.c:1585
+msgid "Delete all other windows"
+msgstr "éçëåðä ãáìî úåðåìçä ìë úà øñä"
+
+#: info/session.c:1631
+msgid "Scroll the other window"
+msgstr "àáä ïåìçá ìåìâ"
+
+#: info/session.c:1652
+msgid "Scroll the other window backward"
+msgstr "àáä ïåìçá äøåçà ìåìâ"
+
+#: info/session.c:1658
+msgid "Grow (or shrink) this window"
+msgstr "äæ ïåìç (ïè÷ä åà) ìãâä"
+
+#: info/session.c:1669
+msgid "Divide the available screen space among the visible windows"
+msgstr "íéâöåîä úåðåìçä ìë ïéá äâåöúä çèù ÷ìç"
+
+#: info/session.c:1676
+msgid "Toggle the state of line wrapping in the current window"
+msgstr "éçëåðä ïåìçá åùìâù úåøåù úâöä áöî äðù"
+
+#: info/session.c:1848
+msgid "Select the Next node"
+msgstr "äàáä ä÷ñéôá øåáò"
+
+#: info/session.c:1856
+msgid "Select the Prev node"
+msgstr "úîãå÷ä ä÷ñéôì øåáò"
+
+#: info/session.c:1864
+msgid "Select the Up node"
+msgstr "ìòîù ä÷ñéôì øåáò"
+
+#: info/session.c:1871
+msgid "Select the last node in this file"
+msgstr "äæ êîñîá äðåøçàä ä÷ñéôì øåáò"
+
+#: info/session.c:1898 info/session.c:1931
+msgid "This window has no additional nodes"
+msgstr "äæ ïåìçá úåà÷ñéô øúåé ïéà"
+
+#: info/session.c:1904
+msgid "Select the first node in this file"
+msgstr "äæ êîñîá äðåùàøä ä÷ñéôì øåáò"
+
+#: info/session.c:1938
+msgid "Select the last item in this node's menu"
+msgstr "åæä ä÷ñéôä èéøôúî ïåøçàä óéòñá øçá"
+
+#: info/session.c:1944
+msgid "Select this menu item"
+msgstr "èéøôúäî äæ óéòñá øçá"
+
+#: info/session.c:1977
+#, c-format
+msgid "There aren't %d items in this menu."
+msgstr ".íéôéòñ %d ïéà äæ èéøôúá"
+
+#: info/session.c:2171 info/session.c:2172
+#, c-format
+msgid "Menu item (%s): "
+msgstr "Menu item (%s): "
+
+#: info/session.c:2175
+msgid "Menu item: "
+msgstr "Menu item: "
+
+#: info/session.c:2182 info/session.c:2183
+#, c-format
+msgid "Follow xref (%s): "
+msgstr "Follow xref (%s): "
+
+#: info/session.c:2186
+msgid "Follow xref: "
+msgstr "Follow xref: "
+
+#: info/session.c:2315
+msgid "Read a menu item and select its node"
+msgstr "äîéàúîä ä÷ñéôì øåáòå èéøôúî óéòñ íù àø÷"
+
+#: info/session.c:2323
+msgid "Read a footnote or cross reference and select its node"
+msgstr "äîéàúîä ä÷ñéôì øåáòå øåùé÷ åà äøòä ìù íù àø÷"
+
+#: info/session.c:2329
+msgid "Move to the start of this node's menu"
+msgstr "åæ ä÷ñéôá èéøôúä úìéçúì ïîñ ææä"
+
+#: info/session.c:2353
+msgid "Visit as many menu items at once as possible"
+msgstr "äæ èéøôúî íéôéòñ ìù øùôàä ìëë áø øôñî âöä"
+
+#: info/session.c:2381
+msgid "Read a node name and select it"
+msgstr "äéìà øåáòå ä÷ñéô ìù íù àø÷"
+
+#: info/session.c:2436 info/session.c:2441
+msgid "Goto node: "
+msgstr "Goto node: "
+
+#: info/session.c:2505
+#, c-format
+msgid "No menu in node `%s'."
+msgstr ".íéèéøôú `%s' ïéà ä÷ñéôá"
+
+#: info/session.c:2551
+#, c-format
+msgid "No menu item `%s' in node `%s'."
+msgstr ".`%s' óéòñ ïéà `%s' ä÷ñéô ìù èéøôúá"
+
+#: info/session.c:2581
+#, c-format
+msgid "Unable to find node referenced by `%s' in `%s'."
+msgstr ".`%s' óéòñá äéìà øù÷î `%s'-á èéøôúä øùà ä÷ñéô éúàöî àì"
+
+#: info/session.c:2631
+msgid "Read a list of menus starting from dir and follow them"
+msgstr "íäéøçà áå÷òå dir-î äìéçúîä èéøôú éôéòñ úøãéñ àø÷"
+
+#: info/session.c:2633
+msgid "Follow menus: "
+msgstr "Follow menus: "
+
+#: info/session.c:2826
+msgid "Find the node describing program invocation"
+msgstr "úéðëúä õéøäì ãöéë úøàúîä ä÷ñéôä úà àöî"
+
+#: info/session.c:2828
+#, c-format
+msgid "Find Invocation node of [%s]: "
+msgstr "Find Invocation node of [%s]: "
+
+#: info/session.c:2866
+msgid "Read a manpage reference and select it"
+msgstr "åúåà âöäå manpage-ì äééðôä àø÷"
+
+#: info/session.c:2870
+msgid "Get Manpage: "
+msgstr "Get Manpage: "
+
+#: info/session.c:2900
+msgid "Select the node `Top' in this file"
+msgstr "äæ êîñîá (`Top') úéùàøä ä÷ñéôì øåáò"
+
+#: info/session.c:2906
+msgid "Select the node `(dir)'"
+msgstr "`(dir)' ä÷ñéôì øåáò"
+
+#: info/session.c:2923 info/session.c:2925
+#, c-format
+msgid "Kill node (%s): "
+msgstr "Kill node (%s): "
+
+#: info/session.c:2977
+#, c-format
+msgid "Cannot kill node `%s'"
+msgstr "`%s' ä÷ñéô ÷ìñì úåøùôà ïéà"
+
+#: info/session.c:2987
+msgid "Cannot kill the last node"
+msgstr "äãéçé ä÷ñéô ÷ìñì úåøùôà ïéà"
+
+#: info/session.c:3073
+msgid "Select the most recently selected node"
+msgstr "äâöåäù äðåøçàä ä÷ñéôì øåæç"
+
+#: info/session.c:3079
+msgid "Kill this node"
+msgstr "åæ ä÷ñéô ÷ìñ"
+
+#: info/session.c:3087
+msgid "Read the name of a file and select it"
+msgstr "åúåà âöäå õáå÷ ìù íù àø÷"
+
+#: info/session.c:3091
+msgid "Find file: "
+msgstr "Find file: "
+
+#: info/session.c:3108
+#, c-format
+msgid "Cannot find `%s'."
+msgstr ".àöîð àì `%s' õáå÷"
+
+#: info/session.c:3151 info/session.c:3269
+#, 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:3165 info/session.c:3287 info/session.c:3347
+msgid "Done."
+msgstr "á äçìöä"
+
+# No ellipsis because that would look awkward when the translation of
+# "Done." is appended.
+#: info/session.c:3220
+#, c-format
+msgid "Writing node %s..."
+msgstr "`%s' ä÷ñéô èìô"
+
+#: info/session.c:3296
+msgid "Pipe the contents of this node through INFO_PRINT_COMMAND"
+msgstr "INFO_PRINT_COMMAND êøã åæ ä÷ñéô ïëåú ñôãä"
+
+#: info/session.c:3331
+#, 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:3337
+#, c-format
+msgid "Printing node %s..."
+msgstr "%s ä÷ñéô úñôãä"
+
+#: info/session.c:3567
+#, c-format
+msgid "Searching subfile %s ..."
+msgstr "... %s õáå÷-úú ÷øåñ"
+
+#: info/session.c:3619
+msgid "Read a string and search for it case-sensitively"
+msgstr "úåéùéøá úåáùçúä êåú äúåà ùôçå úæåøçî àø÷"
+
+#: info/session.c:3626
+msgid "Read a string and search for it"
+msgstr "äúåà ùôçå úæåøçî àø÷"
+
+#: info/session.c:3634
+msgid "Read a string and search backward for it"
+msgstr "äøåçà äúåà ùôçå úæåøçî àø÷"
+
+#: info/session.c:3670 info/session.c:3677
+#, c-format
+msgid "%s%sfor string [%s]: "
+msgstr "%s%sfor string [%s]: "
+
+# 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:3671 info/session.c:3678
+msgid "Search backward"
+msgstr "Search backward"
+
+#: info/session.c:3672 info/session.c:3678
+msgid "Search"
+msgstr "Search"
+
+#: info/session.c:3673 info/session.c:3679
+msgid " case-sensitively "
+msgstr " case-sensitively "
+
+#: info/session.c:3674 info/session.c:3679
+msgid " "
+msgstr " "
+
+#: info/session.c:3718
+msgid "Search failed."
+msgstr ".äàöîð àì úæåøçîä"
+
+#: info/session.c:3736
+msgid "Repeat last search in the same direction"
+msgstr "ïååéë åúåàá ïåøçà ùåôéç ìò øåæç"
+
+#: info/session.c:3739 info/session.c:3749
+msgid "No previous search string"
+msgstr "ïåøçà ùåôéçî úæåøçî ïéà"
+
+#: info/session.c:3746
+msgid "Repeat last search in the reverse direction"
+msgstr "êåôä ïååéëá ïåøçà ùåôéç ìò øåæç"
+
+#: info/session.c:3765 info/session.c:3771
+msgid "Search interactively for a string as you type it"
+msgstr "äúåà ä/ãéì÷î ä/úàù éãë êåú úæåøçî ùôç"
+
+#: info/session.c:3851
+msgid "I-search backward: "
+msgstr "I-search backward: "
+
+#: info/session.c:3853
+msgid "I-search: "
+msgstr "I-search: "
+
+# Untranslated because is used with the I-search: prompt.
+#: info/session.c:3878 info/session.c:3880
+msgid "Failing "
+msgstr "Failing "
+
+#: info/session.c:4340
+msgid "Move to the previous cross reference"
+msgstr "íãå÷ä øåùé÷ì ïîñ ææä"
+
+#: info/session.c:4349
+msgid "Move to the next cross reference"
+msgstr "àáä øåùé÷ì ïîñ ææä"
+
+#: info/session.c:4359
+msgid "Select reference or menu item appearing on this line"
+msgstr "úéçëåðä äøåùá òéôåîä èéøôúî óéòñ åà øåùé÷ øçà áå÷ò"
+
+#: info/session.c:4382
+msgid "Cancel current operation"
+msgstr "úéçëåð äìåòô ìèá"
+
+#: info/session.c:4389
+msgid "Quit"
+msgstr "ìèåá"
+
+#: info/session.c:4398
+msgid "Move the cursor to a specific line of the window"
+msgstr "äæ ïåìçá úîéåñî äøåùì ïîñ ææä"
+
+#: info/session.c:4430
+msgid "Redraw the display"
+msgstr "äâåöú ùãç"
+
+#: info/session.c:4467
+msgid "Quit using Info"
+msgstr "Info úéðëåúî àö"
+
+#: info/session.c:4480
+msgid "Run command bound to this key's lowercase variant"
+msgstr "äæ ù÷î ìù úåðè÷ úåéúåà úñøéâì äøåù÷ä äãå÷ô ìòôä"
+
+#: info/session.c:4491
+#, c-format
+msgid "Unknown command (%s)."
+msgstr ".(%s) úøëåî-éúìá äãå÷ô"
+
+#: info/session.c:4494
+#, c-format
+msgid "\"%s\" is invalid"
+msgstr "\"%s\" äéåâù äãå÷ô"
+
+#: info/session.c:4495
+#, fuzzy, c-format
+msgid "`%s' is invalid"
+msgstr "\"%s\" äéåâù äãå÷ô"
+
+#: info/session.c:4709
+msgid "Add this digit to the current numeric argument"
+msgstr "éçëåð éøîåð èðîåâøàì åæ äøôñ óñåä"
+
+#: info/session.c:4718
+msgid "Start (or multiply by 4) the current numeric argument"
+msgstr "4-á íéé÷ êøò ìåôë åà ,éøîåð èðîåâøà ìù äãì÷ä ìçúä"
+
+#: info/session.c:4733
+msgid "Internally used by \\[universal-argument]"
+msgstr "åæ äãå÷ôá ùîúùî \\[universal-argument]"
+
+#: info/tilde.c:338
+#, 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:64
+msgid "The number lines to scroll when the cursor moves out of the window"
+msgstr "ïåìçä úåìåáâî àöåé ïîñäùë äâåöú ìåìâì úåøåù øôñî"
+
+#: info/variables.c:68
+msgid "When \"On\", Info accepts and displays ISO Latin characters"
+msgstr "úåéáéñ 8 éìòá ISO éåú âéöîå èìå÷ Info ,\"On\" áöîá íà"
+
+#: info/variables.c:74
+msgid "Explain the use of a variable"
+msgstr "íéðúùî ìù ãé÷ôú øàú"
+
+#: info/variables.c:80
+msgid "Describe variable: "
+msgstr "Describe variable: "
+
+#: info/variables.c:99
+msgid "Set the value of an Info variable"
+msgstr "Info äðúùî ìù êøò äðù"
+
+#: info/variables.c:105
+msgid "Set variable: "
+msgstr "Set variable: "
+
+#: info/variables.c:123
+#, c-format
+msgid "Set %s to value (%d): "
+msgstr "Set %s to value (%d): "
+
+#: info/variables.c:164
+#, c-format
+msgid "Set %s to value (%s): "
+msgstr "Set %s to value (%s): "
+
+#: info/window.c:1138
+msgid "--*** Tags out of Date ***"
+msgstr "--*** úðëãåòî äðéà Tags úìáè ***-- "
+
+#: info/window.c:1149
+msgid "-----Info: (), lines ----, "
+msgstr "-----Info: (), lines ----, "
+
+#: info/window.c:1156
+#, c-format
+msgid "-%s---Info: %s, %d lines --%s--"
+msgstr "-%s---Info: %s, %d lines --%s--"
+
+#: info/window.c:1160
+#, c-format
+msgid "-%s%s-Info: (%s)%s, %d lines --%s--"
+msgstr "-%s%s-Info: (%s)%s, %d lines --%s--"
+
+#: info/window.c:1167
+#, c-format
+msgid " Subfile: %s"
+msgstr " Subfile: %s"
+
+#: lib/getopt.c:551 lib/getopt.c:570
+#, c-format
+msgid "%s: option `%s' is ambiguous\n"
+msgstr "%s úéðëú øåáò éòîùî-ãç åðéà `%s' ïééôàî\n"
+
+#: lib/getopt.c:603 lib/getopt.c:607
+#, c-format
+msgid "%s: option `--%s' doesn't allow an argument\n"
+msgstr "%s úéðëú øåáò èðîåâøà ìá÷î åðéà `--%s' ïééôàî\n"
+
+#: lib/getopt.c:616 lib/getopt.c:621
+#, c-format
+msgid "%s: option `%c%s' doesn't allow an argument\n"
+msgstr "%s úéðëú øåáò èðîåâøà ìá÷î åðéà `%c%s' ïééôàî\n"
+
+#: lib/getopt.c:667 lib/getopt.c:689 lib/getopt.c:1020 lib/getopt.c:1042
+#, c-format
+msgid "%s: option `%s' requires an argument\n"
+msgstr "%s úéðëú øåáò èðîåâøà áééçî `%s' ïééôàî\n"
+
+#: lib/getopt.c:727 lib/getopt.c:730
+#, c-format
+msgid "%s: unrecognized option `--%s'\n"
+msgstr "%s úéðëú øåáò `--%s' ääåæî-éúìá ïééôàî\n"
+
+#: lib/getopt.c:738 lib/getopt.c:741
+#, c-format
+msgid "%s: unrecognized option `%c%s'\n"
+msgstr "%s úéðëú øåáò `%c%s' ääåæî-éúìá ïééôàî\n"
+
+#: lib/getopt.c:796 lib/getopt.c:799
+#, c-format
+msgid "%s: illegal option -- %c\n"
+msgstr "%s: é÷åç-éúìá ïééôàî -- %c\n"
+
+#: lib/getopt.c:805 lib/getopt.c:808
+#, c-format
+msgid "%s: invalid option -- %c\n"
+msgstr "%s úéðëú øåáò éåâù ïééôàî -- %c\n"
+
+#: lib/getopt.c:863 lib/getopt.c:882 lib/getopt.c:1095 lib/getopt.c:1116
+#, c-format
+msgid "%s: option requires an argument -- %c\n"
+msgstr "%s: èðîåâøà áééçî ïééôàî -- %c\n"
+
+#: lib/getopt.c:935 lib/getopt.c:954
+#, c-format
+msgid "%s: option `-W %s' is ambiguous\n"
+msgstr "%s úéðëú øåáò éòîùî-ãç åðéà `-W %s' ïééôàî\n"
+
+#: lib/getopt.c:978 lib/getopt.c:999
+#, c-format
+msgid "%s: option `-W %s' doesn't allow an argument\n"
+msgstr "%s úéðëú øåáò èðîåâøà ìá÷î åðéà `-W %s' ïééôàî\n"
+
+#: makeinfo/cmds.c:520 makeinfo/cmds.c:542
+#, fuzzy, c-format
+msgid "arguments to @%s ignored"
+msgstr "%c%s-ì éåâù èðîåâøà"
+
+#: makeinfo/cmds.c:585
+msgid "January"
+msgstr "øàåðé"
+
+#: makeinfo/cmds.c:585
+msgid "February"
+msgstr "øàåøáô"
+
+#: makeinfo/cmds.c:585
+msgid "March"
+msgstr "õøî"
+
+#: makeinfo/cmds.c:585
+msgid "April"
+msgstr "ìéøôà"
+
+#: makeinfo/cmds.c:585
+msgid "May"
+msgstr "éàî"
+
+#: makeinfo/cmds.c:586
+msgid "June"
+msgstr "éðåé"
+
+#: makeinfo/cmds.c:586
+msgid "July"
+msgstr "éìåé"
+
+#: makeinfo/cmds.c:586
+msgid "August"
+msgstr "èñåâåà"
+
+#: makeinfo/cmds.c:586
+msgid "September"
+msgstr "øáîèôñ"
+
+#: makeinfo/cmds.c:586
+msgid "October"
+msgstr "øáåè÷åà"
+
+#: makeinfo/cmds.c:587
+msgid "November"
+msgstr "øáîáåð"
+
+#: makeinfo/cmds.c:587
+msgid "December"
+msgstr "øáîöã"
+
+#: makeinfo/cmds.c:936
+#, c-format
+msgid "unlikely character %c in @var"
+msgstr "@var êåúá %c øéáñ-éúìá åú"
+
+#: makeinfo/cmds.c:979
+msgid "@sc argument all uppercase, thus no effect"
+msgstr "è÷ôà ìë @sc-ì ïéà ïëì ,úåìåãâ úåéúåàá åìåë @sc ìù èðîåâøà"
+
+#: makeinfo/cmds.c:1034
+#, c-format
+msgid "`{' expected, but saw `%c'"
+msgstr "%c àöîð êà ,`{' ì\"ö"
+
+#: makeinfo/cmds.c:1074
+msgid "end of file inside verb block"
+msgstr "verb êåúá õáå÷ óåñ"
+
+#: makeinfo/cmds.c:1082
+#, c-format
+msgid "`}' expected, but saw `%c'"
+msgstr "%c àöîð êà ,`}' ì\"ö"
+
+#: makeinfo/cmds.c:1112
+msgid ""
+"@strong{Note...} produces a spurious cross-reference in Info; reword to "
+"avoid that"
+msgstr ""
+
+#: makeinfo/cmds.c:1305
+#, c-format
+msgid "%c%s is obsolete"
+msgstr "ïùåéî åðéä %c%s"
+
+#: makeinfo/cmds.c:1414
+#, c-format
+msgid "@sp requires a positive numeric argument, not `%s'"
+msgstr "`%s' àì ,éáåéç øôñî àåäù èðîåâøà ùøåã @sp"
+
+#: makeinfo/cmds.c:1763 makeinfo/cmds.c:1819 makeinfo/footnote.c:82
+#, c-format
+msgid "Bad argument to %c%s"
+msgstr "%c%s-ì éåâù èðîåâøà"
+
+#: makeinfo/cmds.c:1773 makeinfo/makeinfo.c:4142
+msgid "asis"
+msgstr "àåäù åîë"
+
+#: makeinfo/cmds.c:1775 makeinfo/cmds.c:1805 makeinfo/makeinfo.c:4144
+msgid "none"
+msgstr "ïéà"
+
+#: makeinfo/cmds.c:1789
+#, fuzzy, c-format
+msgid "Bad argument to @%s"
+msgstr "%c%s-ì éåâù èðîåâøà"
+
+#: makeinfo/cmds.c:1803
+msgid "insert"
+msgstr ""
+
+#: makeinfo/defun.c:84
+msgid "Missing `}' in @def arg"
+msgstr "@def ìù èðîåâøàá `}' øñç"
+
+# It would be hilarious to translate those...
+#: makeinfo/defun.c:403
+msgid "Function"
+msgstr "Function"
+
+#: makeinfo/defun.c:406
+msgid "Macro"
+msgstr "Macro"
+
+#: makeinfo/defun.c:409
+msgid "Special Form"
+msgstr "Special Form"
+
+#: makeinfo/defun.c:413
+msgid "Variable"
+msgstr "Variable"
+
+#: makeinfo/defun.c:416
+msgid "User Option"
+msgstr "User Option"
+
+#: makeinfo/defun.c:420
+msgid "Instance Variable"
+msgstr "Instance Variable"
+
+#: makeinfo/defun.c:424
+msgid "Method"
+msgstr "Method"
+
+#: makeinfo/defun.c:500 makeinfo/defun.c:505 makeinfo/defun.c:545
+#: makeinfo/defun.c:644 makeinfo/xml.c:2229
+msgid "of"
+msgstr "of"
+
+#: makeinfo/defun.c:509 makeinfo/defun.c:513 makeinfo/defun.c:517
+#: makeinfo/defun.c:551 makeinfo/defun.c:650 makeinfo/xml.c:2234
+msgid "on"
+msgstr "on"
+
+#: makeinfo/defun.c:711
+#, fuzzy, c-format
+msgid "Must be in `@%s' environment to use `@%s'"
+msgstr "`%s' êåúá ÷øå êà ùåîéùá øúåî `%sx'"
+
+#: makeinfo/files.c:435
+#, c-format
+msgid "%s: getwd: %s, %s\n"
+msgstr "%s úéðëúá %s-å %s øåáò äàéâù ìò çååéã getwd/getcwd\n"
+
+#: makeinfo/files.c:638
+#, c-format
+msgid "`%s' omitted before output filename"
+msgstr ""
+
+#: makeinfo/files.c:646
+#, c-format
+msgid "`%s' omitted since writing to stdout"
+msgstr ""
+
+#: makeinfo/files.c:694
+msgid "Output buffer not empty."
+msgstr ""
+
+#: makeinfo/footnote.c:150
+#, c-format
+msgid "`%c%s' needs an argument `{...}', not just `%s'"
+msgstr "`{...}' êåúá úåéäì áééçù ,%c%s ìù èðîåâøà úåéäì íéàúî åðéà `%s'"
+
+#: makeinfo/footnote.c:165
+#, c-format
+msgid "No closing brace for footnote `%s'"
+msgstr "`}'-á úîééúñî äðéà `%s' íééìåù úøòä"
+
+#: makeinfo/footnote.c:198
+msgid "Footnote defined without parent node"
+msgstr "ä÷ñéôì õåçî íééìåù úøòä"
+
+#: makeinfo/footnote.c:210
+msgid "Footnotes inside footnotes are not allowed"
+msgstr "íééìåù úåøòä êåúá íééìåù úåøòäá äëéîú ïéà"
+
+#: makeinfo/footnote.c:302 makeinfo/index.c:189
+msgid "Footnotes"
+msgstr "íééìåù úåøòä"
+
+#: makeinfo/html.c:87
+#, c-format
+msgid "%s: could not open --css-file: %s"
+msgstr ""
+
+#: makeinfo/html.c:172
+#, c-format
+msgid "%s:%d: --css-file ended in comment"
+msgstr ""
+
+#: makeinfo/html.c:207
+msgid "Untitled"
+msgstr "úøúåë àìì"
+
+#: makeinfo/html.c:422
+msgid "[unexpected] no html tag to pop"
+msgstr ""
+
+#: makeinfo/html.c:752
+#, fuzzy, c-format
+msgid "[unexpected] invalid node name: `%s'"
+msgstr "`%s' :éåâù (node) ä÷ñéô íù"
+
+#: makeinfo/index.c:169
+#, c-format
+msgid "Unknown index `%s'"
+msgstr "`%s' øëåî-éúìá ñ÷ãðéà"
+
+#: makeinfo/index.c:234
+#, c-format
+msgid "Info cannot handle `:' in index entry `%s'"
+msgstr "`%s' ñ÷ãðéà èéøôá `:' ììâá ìùëéé Info"
+
+#: makeinfo/index.c:412
+#, c-format
+msgid "Index `%s' already exists"
+msgstr "øãâåî øáë `%s' ñ÷ãðéà"
+
+#: makeinfo/index.c:455
+#, c-format
+msgid "Unknown index `%s' and/or `%s' in @synindex"
+msgstr "øëåî-éúìá ñ÷ãðéà åðéä @synindex-á `%s' åà `%s'"
+
+#: makeinfo/index.c:661
+msgid "(line )"
+msgstr ""
+
+#: makeinfo/index.c:669
+#, c-format
+msgid "(line %*d)"
+msgstr ""
+
+#: makeinfo/index.c:750
+#, c-format
+msgid "Unknown index `%s' in @printindex"
+msgstr "@printindex-á `%s' øëåî-éúìá ñ÷ãðéà"
+
+#: makeinfo/index.c:819
+#, c-format
+msgid "Entry for index `%s' outside of any node"
+msgstr "ä÷ñéô ìëì õåçî øãâåî `%s' ñ÷ãðéà èéøô"
+
+#: makeinfo/index.c:822 makeinfo/index.c:858
+msgid "(outside of any node)"
+msgstr "(ä÷ñéô ìëì õåçî)"
+
+#: makeinfo/index.c:919 makeinfo/index.c:925
+msgid "See "
+msgstr "See "
+
+#: makeinfo/insertion.c:160
+msgid "@item not allowed in argument to @itemize"
+msgstr ""
+
+#: makeinfo/insertion.c:238
+msgid "Broken-Type in insertion_type_pname"
+msgstr "insertion_type_pname-á éåâù type"
+
+#: makeinfo/insertion.c:334
+msgid "Enumeration stack overflow"
+msgstr "@enumerate-á úéðñçî úùéìâ"
+
+#: makeinfo/insertion.c:366
+#, c-format
+msgid "lettering overflow, restarting at %c"
+msgstr "%c-á ùãçî ìéçúî ,åìöåð úåéúåàä ìë"
+
+#: makeinfo/insertion.c:631
+#, c-format
+msgid "%s requires an argument: the formatter for %citem"
+msgstr "%s úàøåäá %citem øåáò áåöéò úèéù :èðîåâøà ùøãð"
+
+#: makeinfo/insertion.c:719
+#, c-format
+msgid "%cfloat environments cannot be nested"
+msgstr ""
+
+#: makeinfo/insertion.c:973
+#, c-format
+msgid "`@end' expected `%s', but saw `%s'"
+msgstr "`%s' àöîð íìåà ,`%s' ì\"ö `@end' éøçà"
+
+#: makeinfo/insertion.c:1337
+#, c-format
+msgid "No matching `%cend %s'"
+msgstr "íàåú `%cend %s' øñç"
+
+#: makeinfo/insertion.c:1592
+#, c-format
+msgid "%s requires letter or digit"
+msgstr "äøôñ åà úåà ùøåã %s"
+
+#: makeinfo/insertion.c:1687
+msgid "end of file inside verbatim block"
+msgstr "verbatim êåúá õáå÷ óåñ"
+
+#: makeinfo/insertion.c:1913
+#, fuzzy, c-format
+msgid "@%s not meaningful outside `@float' environment"
+msgstr "`@%s' êåúá @%s-ì úåòîùî ïéà"
+
+#: makeinfo/insertion.c:1949
+msgid "@menu seen before first @node, creating `Top' node"
+msgstr "`Top' ú÷ñéô øöåé ,äðåùàøä ä÷ñéôä éðôì àöîð @menu"
+
+#: makeinfo/insertion.c:1950
+msgid ""
+"perhaps your @top node should be wrapped in @ifnottex rather than @ifinfo?"
+msgstr "?@ifinfo íå÷îá @ifnottex-á úô÷åî úåéäì äúéä äëéøö @top ú÷ñéô éë ïëúééä"
+
+#: makeinfo/insertion.c:1962
+msgid "@detailmenu seen before first node, creating `Top' node"
+msgstr "`Top' ú÷ñéô øöåé ,äðåùàøä ä÷ñéôä éðôì àöîð @detailmenu"
+
+#: makeinfo/insertion.c:2018
+#, c-format
+msgid "@%s not meaningful outside `@titlepage' and `@quotation' environments"
+msgstr ""
+
+#: makeinfo/insertion.c:2032
+#, fuzzy, c-format
+msgid "@%s not meaningful outside `@titlepage' environment"
+msgstr "`@%s' êåúá @%s-ì úåòîùî ïéà"
+
+#: makeinfo/insertion.c:2063
+#, c-format
+msgid "Unmatched `%c%s'"
+msgstr "âåæ-ïá åì ïéàù `%c%s'"
+
+#: makeinfo/insertion.c:2068
+#, c-format
+msgid "`%c%s' needs something after it"
+msgstr "åéøçà àåáéù åäùî êéøö `%c%s'"
+
+#: makeinfo/insertion.c:2074
+#, fuzzy, c-format
+msgid "Bad argument `%s' to `@%s', using `%s'"
+msgstr "`%s'-ì èðîåâøàë íéàúî åðéà `%s'-ù íåùî `%s'-á éúùîúùä"
+
+#: makeinfo/insertion.c:2171
+#, c-format
+msgid "@%s not meaningful inside `@%s' block"
+msgstr "`@%s' êåúá @%s-ì úåòîùî ïéà"
+
+#: makeinfo/insertion.c:2180
+#, c-format
+msgid "@itemx not meaningful inside `%s' block"
+msgstr "`%s' êåúá @itemx-ì úåòîùî ïéà"
+
+#: makeinfo/insertion.c:2356
+#, c-format
+msgid "%c%s found outside of an insertion block"
+msgstr "äñðëä ÷åìá ìëì õåçî %c%s àöîð"
+
+#: makeinfo/lang.c:580
+#, c-format
+msgid "%s is not a valid ISO 639 language code"
+msgstr "ISO 639 é\"ò íéøëåîä ïåùìä éðîéñî ãçà åðéà %s"
+
+#: makeinfo/lang.c:655
+#, fuzzy, c-format
+msgid "unrecognized encoding name `%s'"
+msgstr "`%s' øëåî-éúìá ãåãé÷ íù"
+
+#: makeinfo/lang.c:663
+#, c-format
+msgid "sorry, encoding `%s' not supported"
+msgstr "êîúð åðéà `%s' ãåãé÷ ,íéøòèöî"
+
+#: makeinfo/lang.c:715
+#, c-format
+msgid "invalid encoded character `%s'"
+msgstr "`%s' éåâù ããå÷î åú"
+
+#: makeinfo/lang.c:1009
+#, c-format
+msgid "%c%s expects `i' or `j' as argument, not `%c'"
+msgstr "`j' åà `i' úåéäì áééç øùà ,%c%s ìù èðîåâøà úåéäì íéàúî åðéà `%c'"
+
+#: makeinfo/lang.c:1013
+#, 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:355
+#, 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:586
+#, c-format
+msgid "%cend macro not found"
+msgstr "àöîð àì %cend macro"
+
+#: makeinfo/macro.c:624
+msgid "@quote-arg only useful for single-argument macros"
+msgstr "ãéçé èðîåâøà ìòá åø÷àî êåúá ÷ø éùåîéù @quote-arg"
+
+#: makeinfo/macro.c:660
+#, c-format
+msgid "mismatched @end %s with @%s"
+msgstr "@end %s úà íàåú åðéà @%s"
+
+#: makeinfo/makeinfo.c:184
+#, c-format
+msgid "Too many errors! Gave up.\n"
+msgstr ".íééãé éúîøä !úàéâù éãî øúåé\n"
+
+# Not translated because Emacs recognizes warningsby this template.
+#: makeinfo/makeinfo.c:302
+#, c-format
+msgid "%s:%d: warning: "
+msgstr "%s:%d: warning: "
+
+#: makeinfo/makeinfo.c:321 makeinfo/makeinfo.c:2260
+#, c-format
+msgid "Misplaced %c"
+msgstr "åîå÷îá åðéàù %c"
+
+#: makeinfo/makeinfo.c:340
+#, c-format
+msgid "Try `%s --help' for more information.\n"
+msgstr ".`%s --help' äñð øúé èåøôì\n"
+
+#: makeinfo/makeinfo.c:343
+#, c-format
+msgid "Usage: %s [OPTION]... TEXINFO-FILE...\n"
+msgstr "%s [íéðééôàî]... TEXINFO-õáå÷... :ùåîéùä ïôåà\n"
+
+#: makeinfo/makeinfo.c:346
+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:350
+#, c-format
+msgid ""
+"General options:\n"
+" --error-limit=NUM quit after NUM errors (default %d).\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"
+" --reference-limit=NUM warn about at most NUM references (default %"
+"d).\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:364
+#, 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:372
+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 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 (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:386
+#, c-format
+msgid ""
+"Options for Info and plain text:\n"
+" --enable-encoding output accented and special characters in\n"
+" Info output based on @documentencoding.\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\n"
+" in which they are defined (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:403
+msgid ""
+"Options for HTML:\n"
+" --css-include=FILE include FILE in HTML <style> output;\n"
+" read stdin if FILE is -.\n"
+msgstr ""
+
+#: makeinfo/makeinfo.c:409
+#, 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:416
+#, 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:425
+#, 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:444
+#, 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:452
+#, 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:603
+#, c-format
+msgid "%s: Ignoring unrecognized TEXINFO_OUTPUT_FORMAT value `%s'.\n"
+msgstr ""
+
+#: makeinfo/makeinfo.c:647 makeinfo/makeinfo.c:673 makeinfo/makeinfo.c:692
+#: makeinfo/makeinfo.c:722 makeinfo/makeinfo.c:743
+#, c-format
+msgid "%s: %s arg must be numeric, not `%s'.\n"
+msgstr ".%s ïééôàî øåáò %s é\"ò ùøãðë ,éøîåð èðîåâøà åðéà `%s'\n"
+
+#: makeinfo/makeinfo.c:660
+#, fuzzy, c-format
+msgid "%s: could not open macro expansion output `%s'"
+msgstr "`%s' åø÷àî úåáçøä èìô úçéúôá äì÷ú"
+
+#: makeinfo/makeinfo.c:665
+#, fuzzy, c-format
+msgid "%s: ignoring second macro expansion output `%s'.\n"
+msgstr "`%s' åø÷àî úåáçøä èìô úçéúôá äì÷ú"
+
+#: makeinfo/makeinfo.c:707
+#, 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:732
+#, 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:806
+#, c-format
+msgid "%s: missing file argument.\n"
+msgstr ".õáå÷ íù øñç %s úéðëúì\n"
+
+#: makeinfo/makeinfo.c:997 makeinfo/makeinfo.c:3991
+#, c-format
+msgid "Multiline command %c%s used improperly"
+msgstr ""
+
+#: makeinfo/makeinfo.c:1000
+#, c-format
+msgid "Expected `%s'"
+msgstr "`%s' éåôö äéä ïàë"
+
+#: makeinfo/makeinfo.c:1479
+#, c-format
+msgid "Can't create directory `%s': %s"
+msgstr "`%s' äé÷éú úøéöéá (%s) äì÷ú"
+
+#: makeinfo/makeinfo.c:1525
+#, c-format
+msgid "No `%s' found in `%s'"
+msgstr "`%s' àöîð àì `%s' õáå÷á"
+
+#: makeinfo/makeinfo.c:1605
+#, c-format
+msgid "%s: Skipping macro expansion to stdout as Info output is going there.\n"
+msgstr "%s: .íùì ïååëî èìôù íåùî åèîùåé éð÷ú èìô õåøòì åø÷àî úåáçøä\n"
+
+#: makeinfo/makeinfo.c:1638
+#, c-format
+msgid "Making %s file `%s' from `%s'.\n"
+msgstr ".%s èîøåôá `%s'-ì `%s' õáå÷ ãáòî\n"
+
+#: makeinfo/makeinfo.c:1673
+#, c-format
+msgid "This is %s, produced by makeinfo version %s from %s.\n"
+msgstr "This is %s, produced by makeinfo version %s from %s.\n"
+
+#: makeinfo/makeinfo.c:1709
+#, 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:1773
+#, c-format
+msgid "%s: Removing output file `%s' due to errors; use --force to preserve.\n"
+msgstr "%s: .åøîùì --force-á ùîúùä ;úåì÷ú á÷ò ÷çîéé `%s' èìô õáå÷\n"
+
+#: makeinfo/makeinfo.c:2034
+#, c-format
+msgid "Unknown command `%s'"
+msgstr "`%s' úøëåî-éúìá äàøåä"
+
+#: makeinfo/makeinfo.c:2056
+#, c-format
+msgid "Use braces to give a command as an argument to @%s"
+msgstr "íéìñìåñî íééøâåñá êøåö ùé ,@%s-ì èðîåâøà äéäú äàøåäù éãë"
+
+#: makeinfo/makeinfo.c:2314
+#, fuzzy, c-format
+msgid "%c%s expected braces"
+msgstr "`{...}'-ì äôéö %c%s"
+
+#: makeinfo/makeinfo.c:2327
+msgid "Unmatched }"
+msgstr "âåæ-ïá åì ïéàù }"
+
+#: makeinfo/makeinfo.c:2375
+msgid "NO_NAME!"
+msgstr "NO_NAME!"
+
+#: makeinfo/makeinfo.c:2396
+#, c-format
+msgid "%c%s missing close brace"
+msgstr "%c%s-ì øñç éðîé øâåñ"
+
+#: makeinfo/makeinfo.c:3309
+#, c-format
+msgid "@image file `%s' (for HTML) not readable: %s"
+msgstr "(HTML øåáò ùøãð) @image øåáò `%s' õáå÷ úàéø÷á (%s) äì÷ú"
+
+#: makeinfo/makeinfo.c:3315
+#, fuzzy, c-format
+msgid "No such file `%s'"
+msgstr "`%s' àöîð àì `%s' õáå÷á"
+
+#: makeinfo/makeinfo.c:3447
+#, c-format
+msgid "@image file `%s' (for text) unreadable: %s"
+msgstr "(èñëè øåáò ùøãð) @image øåáò `%s' õáå÷ úàéø÷á (%s) äì÷ú"
+
+#: makeinfo/makeinfo.c:3456
+msgid "@image missing filename argument"
+msgstr "@image úàøåäá øñç õáå÷ íù"
+
+#: makeinfo/makeinfo.c:3675
+#, c-format
+msgid "undefined flag: %s"
+msgstr ""
+
+#: makeinfo/makeinfo.c:3676
+#, c-format
+msgid "{No value for `%s'}"
+msgstr "{No value for `%s'}"
+
+#: makeinfo/makeinfo.c:3728
+#, c-format
+msgid "%c%s requires a name"
+msgstr "íù ùøåã %c%s"
+
+#: makeinfo/makeinfo.c:3834
+#, c-format
+msgid "Reached eof before matching @end %s"
+msgstr "íàåú @end %s éðôì øîâð èì÷ õáå÷"
+
+#: makeinfo/makeinfo.c:4082
+#, 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:254
+#, c-format
+msgid "ignoring stray text `%s' after @multitable"
+msgstr "@multiline éøçà `%s' øúåéî èñëèî éúîìòúä"
+
+#: makeinfo/multi.c:393
+#, c-format
+msgid "Too many columns in multitable item (max %d)"
+msgstr "(%d ãò øúåî) multitable ìù @item-á úåãåîò éãî øúåé"
+
+#: makeinfo/multi.c:555
+#, fuzzy, c-format
+msgid "[unexpected] cannot select column #%d in multitable"
+msgstr "multitable-á %d 'ñî äãåîò úøéçáá äì÷ú"
+
+#: makeinfo/multi.c:584
+msgid "ignoring @tab outside of multitable"
+msgstr "multitable-ì õåçî @tab-î éúîìòúä"
+
+# The following two look like debugging output, and aren't compiled.
+#: makeinfo/multi.c:632
+#, c-format
+msgid "** Multicolumn output from last row:\n"
+msgstr "** Multicolumn output from last row:\n"
+
+#: makeinfo/multi.c:635
+#, c-format
+msgid "* column #%d: output = %s\n"
+msgstr "* column #%d: output = %s\n"
+
+#: makeinfo/node.c:280
+#, c-format
+msgid "Node `%s' previously defined at line %d"
+msgstr "`%s' ä÷ñéô úøãâä øáë %d äøåùá"
+
+#: makeinfo/node.c:648
+#, c-format
+msgid "Formatting node %s...\n"
+msgstr "...%s ä÷ñéô ãáòî úòë\n"
+
+#: makeinfo/node.c:716
+#, fuzzy, c-format
+msgid "Node `%s' requires a sectioning command (e.g., %c%s)"
+msgstr "`%s' ä÷ñéôá (%c%s ïåâë) ÷åñéô úàøåäá êøåö ùé"
+
+#: makeinfo/node.c:879
+#, c-format
+msgid "No node name specified for `%c%s' command"
+msgstr "ä÷ñéô íù àìì `%c%s' äàøåä"
+
+#: makeinfo/node.c:920 makeinfo/node.c:1151
+#, c-format
+msgid "Anchor `%s' and node `%s' map to the same file name"
+msgstr "õáå÷ íù åúåàì úåîâøåúî `%s' øåùé÷ úéåúå `%s' ä÷ñéô"
+
+#: makeinfo/node.c:923
+msgid "This @anchor command ignored; references to it will not work"
+msgstr "åìòôé àì åæ úéåú ìà íéøåùé÷ ;òöåáú àì åæ @anchor úàøåä"
+
+#: makeinfo/node.c:925 makeinfo/node.c:1154
+msgid "Rename this anchor or use the `--no-split' option"
+msgstr "`--no-split' ïééôàîá ùîúùä åà úéåúä íù äðù"
+
+#: makeinfo/node.c:955
+#, c-format
+msgid "Unexpected string at end of split-HTML file `%s'"
+msgstr "`%s' ÷ìåçî HTML õáå÷ íåéñá äéåôö-éúìá úæåøçî"
+
+#: makeinfo/node.c:991
+msgid "Next:"
+msgstr "Next:"
+
+#: makeinfo/node.c:1007
+msgid "Previous:"
+msgstr "Previous:"
+
+#: makeinfo/node.c:1021
+msgid "Up:"
+msgstr "Up:"
+
+#: makeinfo/node.c:1148
+#, c-format
+msgid "Anchors `%s' and `%s' map to the same file name"
+msgstr "õáå÷ íù åúåàì úåîâøåúî `%s-å `%s' øåùé÷ úåéåú"
+
+#: makeinfo/node.c:1153
+msgid "@anchor command ignored; references to it will not work"
+msgstr "åìòôé àì åæ úéåú ìà íéøåùé÷ ;òöåáú àì @anchor úàøåä"
+
+#: makeinfo/node.c:1347
+#, fuzzy, c-format
+msgid "%s reference to nonexistent node `%s' (perhaps incorrect sectioning?)"
+msgstr "%sá `%s' úîéé÷ äððéàù ä÷ñéôì äééðôä"
+
+#: makeinfo/node.c:1363
+msgid "Menu"
+msgstr "èéøôú"
+
+#: makeinfo/node.c:1365
+msgid "Cross"
+msgstr "øåùé÷"
+
+#: makeinfo/node.c:1447
+#, fuzzy, c-format
+msgid "Next field of node `%s' not pointed to (perhaps incorrect sectioning?)"
+msgstr "äøæç äòéáöî äðéà `%s' ä÷ñéô ìù Next äãùá ä÷ñéôä"
+
+#: makeinfo/node.c:1450
+#, c-format
+msgid "This node (%s) has the bad Prev"
+msgstr "éåâù Prev äãù úìòá àéä (%s) åæ ä÷ñéô"
+
+#: makeinfo/node.c:1462
+msgid "Prev"
+msgstr "Prev äãù"
+
+#: makeinfo/node.c:1505
+#, c-format
+msgid "Prev field of node `%s' not pointed to"
+msgstr "äøæç äòéáöî äðéà `%s' ä÷ñéô ìù Prev äãùá ä÷ñéôä"
+
+#: makeinfo/node.c:1509
+#, c-format
+msgid "This node (%s) has the bad Next"
+msgstr "éåâù Next äãù úìòá àéä (%s) åæ ä÷ñéô"
+
+#: makeinfo/node.c:1521
+#, c-format
+msgid "`%s' has no Up field (perhaps incorrect sectioning?)"
+msgstr ""
+
+#: makeinfo/node.c:1524
+msgid "Up"
+msgstr "Up äãù"
+
+#: makeinfo/node.c:1590
+#, c-format
+msgid "Node `%s' lacks menu item for `%s' despite being its Up target"
+msgstr "äøæçá òéáöîù èéøôú óéòñ ïéà ìáà ,`%s' ìò òéáöî `%s' ä÷ñéô ìù Up äãù"
+
+#: makeinfo/node.c:1619
+#, c-format
+msgid "node `%s' has been referenced %d times"
+msgstr "`%s' ä÷ñéôì íéøåùé÷ %d éúøôñ"
+
+#: makeinfo/node.c:1633
+#, c-format
+msgid "unreferenced node `%s'"
+msgstr "øåùé÷ óà ïéà `%s' ä÷ñéôì"
+
+#: makeinfo/node.c:1723
+#, c-format
+msgid "Removing %s\n"
+msgstr ""
+
+#: makeinfo/node.c:1727
+#, 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:562
+#, c-format
+msgid "Internal error (search_sectioning) \"%s\"!"
+msgstr "!\"%s\" (search_sectioning) úéîéðô äðëåú úì÷ú"
+
+#: makeinfo/sectioning.c:623
+#, c-format
+msgid "%c%s is obsolete; use %c%s instead"
+msgstr "%c%s-á ùîúùäì óéãò ;úðùåéî äðéä %c%s äàøåä"
+
+#: makeinfo/sectioning.c:639
+#, c-format
+msgid "Node with %ctop as a section already exists"
+msgstr "íãå÷ äøãâåä øáë %ctop íò ä÷ñéô"
+
+#: makeinfo/sectioning.c:647
+#, c-format
+msgid "Here is the %ctop node"
+msgstr "%ctop ú÷ñéô ìù íå÷îä åäæ"
+
+#: makeinfo/sectioning.c:663
+#, c-format
+msgid "%ctop used before %cnode, defaulting to %s"
+msgstr "éîöòá @node éúôñåä ,%cnode éðôì %ctop-á äùîúùä %s ä÷ñéô"
+
+#: makeinfo/toc.c:197 makeinfo/toc.c:271 makeinfo/toc.c:273
+msgid "Table of Contents"
+msgstr "Table of Contents"
+
+#: makeinfo/toc.c:304 makeinfo/toc.c:337 makeinfo/toc.c:339
+msgid "Short Contents"
+msgstr "Short Contents"
+
+#: makeinfo/xml.c:1605
+#, c-format
+msgid "@image file `%s' unreadable: %s"
+msgstr "@image øåáò `%s' õáå÷ úàéø÷á (%s) äì÷ú"
+
+#: makeinfo/xml.c:2097
+msgid ""
+"@headitem as the last item of @multitable produces invalid Docbook documents"
+msgstr ""
+
+#: util/install-info.c:154
+#, c-format
+msgid "%s: warning: "
+msgstr "%s: warning: "
+
+#: util/install-info.c:203
+#, c-format
+msgid " for %s"
+msgstr " for %s"
+
+#: util/install-info.c:426
+#, c-format
+msgid "\tTry `%s --help' for a complete list of options.\n"
+msgstr ".íéðééôàî ìù äàìî äîéùø úìá÷ì `%s --help' äñð\n"
+
+#: util/install-info.c:434
+#, c-format
+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 [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"
+
+#: util/install-info.c:488
+#, 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"
+
+#: util/install-info.c:513
+#, c-format
+msgid "%s: could not read (%s) and could not create (%s)\n"
+msgstr "%s õáå÷ ìù (%s) äàéø÷á ïäå (%s) äøéöéá ïä äì÷ú\n"
+
+#: util/install-info.c:600
+#, c-format
+msgid "%s: empty file"
+msgstr "÷éø åðéä %s õáå÷"
+
+#: util/install-info.c:913 util/install-info.c:953
+msgid "START-INFO-DIR-ENTRY without matching END-INFO-DIR-ENTRY"
+msgstr "íàåú END-INFO-DIR-ENTRY àìì START-INFO-DIR-ENTRY"
+
+#: util/install-info.c:948
+msgid "END-INFO-DIR-ENTRY without matching START-INFO-DIR-ENTRY"
+msgstr "íàåú START-INFO-DIR-ENTRY àìì END-INFO-DIR-ENTRY"
+
+#: util/install-info.c:1191 util/install-info.c:1201
+#, c-format
+msgid "%s: already have dir file: %s\n"
+msgstr ""
+
+#: util/install-info.c:1236
+#, c-format
+msgid "%s: Specify the Info file only once.\n"
+msgstr ".ãáìá úçà íòô %s-ì Info õáå÷ ïééöì ïúéð\n"
+
+#: util/install-info.c:1284
+#, c-format
+msgid "excess command line argument `%s'"
+msgstr "`%s' øúåéî èðîåâøà"
+
+#: util/install-info.c:1288
+msgid "No input file specified; try --help for more information."
+msgstr ".äøæò úìá÷ì --help äñð ;èì÷ õáå÷ ïåéö ïéà"
+
+#: util/install-info.c:1291
+msgid "No dir file specified; try --help for more information."
+msgstr ".äøæò úìá÷ì --help äñð ;dir õáå÷ ïåéö ïéà"
+
+#: util/install-info.c:1313
+#, c-format
+msgid "no info dir entry in `%s'"
+msgstr "`%s'-á éùàø èéøôú éôéòñ ïéà"
+
+#: util/install-info.c:1426
+#, c-format
+msgid "menu item `%s' already exists, for file `%s'"
+msgstr "`%s' óéòñ éùàøä èéøôúá íéé÷ øáë `%s' õáå÷ì"
+
+#: util/install-info.c:1449
+#, c-format
+msgid "no entries found for `%s'; nothing deleted"
+msgstr "÷çîð àì íåìë ;`%s' øåáò èéøôú éôéòñ åàöîð àì"
+
+#: util/texindex.c:252
+msgid "display this help and exit"
+msgstr "úéðëúäî àöå äæ äøæò êñî âöä"
+
+#: util/texindex.c:254
+msgid "keep temporary files around after processing"
+msgstr "ãåáéòä êìäîá íéøöåðä íééðîæ íéöá÷ ÷çîú ìà"
+
+#: util/texindex.c:256
+msgid "do not keep temporary files around after processing (default)"
+msgstr "(ç\"îøá) ãåáéòä êìäîá íéøöåðä íééðîæ íéöá÷ ÷çî"
+
+#: util/texindex.c:258
+msgid "send output to FILE"
+msgstr "FILE õáå÷ì èìô äðôä"
+
+#: util/texindex.c:260
+msgid "display version information and exit"
+msgstr "àöå úéðëúä úñøéâ ìò òãéî âöä"
+
+#: util/texindex.c:270
+#, c-format
+msgid "Usage: %s [OPTION]... FILE...\n"
+msgstr "%s [OPTION]... FILE... :ùåîéùä ïôåà\n"
+
+#: util/texindex.c:271
+#, c-format
+msgid "Generate a sorted index for each TeX output FILE.\n"
+msgstr ".TeX é\"ò áúëðù FILE õáå÷ ìëì ïééåîî ñ÷ãðéà ïëä\n"
+
+#: util/texindex.c:274
+#, 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:276
+#, c-format
+msgid ""
+"\n"
+"Options:\n"
+msgstr ""
+"\n"
+" :íéðééôàî\n"
+
+#: util/texindex.c:876 util/texindex.c:910 util/texindex.c:983
+#: util/texindex.c:1011
+#, c-format
+msgid "%s: not a texinfo index file"
+msgstr "texinfo ìù ñ÷ãðéà õáå÷ åðéà `%s'"
+
+#: util/texindex.c:968
+#, c-format
+msgid "failure reopening %s"
+msgstr "%s ìù úùãåçî äçéúôá äì÷ú"
+
+#: util/texindex.c:1218
+#, c-format
+msgid "No page number in %s"
+msgstr "ãåîò øôñî ïéà %s-á"
+
+#: util/texindex.c:1291
+#, c-format
+msgid "entry %s follows an entry with a secondary name"
+msgstr "éðùî íù ìòá èéøô úåá÷òá àá %s èéøô"
+
+#~ 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 "First argument to cross-reference may not be empty"
+#~ msgstr "÷éø úåéäì ìåëé åðéà øåùé÷ ìù ïåùàø èðîåâøà"
+
+#~ msgid "see "
+#~ msgstr "see "
+
+#~ msgid "`.' or `,' must follow cross reference, not %c"
+#~ msgstr "%c àìå `,' åà `.' àåáì êéøö øåùé÷ éøçà"
+
+#~ msgid "First argument to @inforef may not be empty"
+#~ msgstr "÷éø úåéäì ìåëé åðéà @inforef ìù ïåùàø èðîåâøà"
+
+#~ msgid "Node:"
+#~ msgstr "Node:"
+
+#~ msgid "%s: TOC should be here, but it was not found"
+#~ msgstr "àöîð àì êà ,%s õáå÷á úåéäì äéä øåîà íéðééðò ïëåú"
+
+#~ msgid "virtual memory exhausted"
+#~ msgstr "éìàèøéåä ïåøëæä øîâð"
+
+#~ 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'-ì"
+
+#~ 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"
diff --git a/macros/texinfo/contrib/texinfo-hu/texinfo/po/hr.gmo b/macros/texinfo/contrib/texinfo-hu/texinfo/po/hr.gmo
new file mode 100644
index 0000000000..650796ccd4
--- /dev/null
+++ b/macros/texinfo/contrib/texinfo-hu/texinfo/po/hr.gmo
Binary files differ
diff --git a/macros/texinfo/contrib/texinfo-hu/texinfo/po/hr.po b/macros/texinfo/contrib/texinfo-hu/texinfo/po/hr.po
new file mode 100644
index 0000000000..abde350e68
--- /dev/null
+++ b/macros/texinfo/contrib/texinfo-hu/texinfo/po/hr.po
@@ -0,0 +1,3092 @@
+# 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: 2004-12-21 16:20-0800\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"
+
+#: info/echo-area.c:284 info/session.c:689
+msgid "Move forward a character"
+msgstr "Pomakni se znak unaprijed"
+
+#: info/echo-area.c:296 info/session.c:705
+msgid "Move backward a character"
+msgstr "Pomakni se znak unazad"
+
+#: info/echo-area.c:308
+msgid "Move to the start of this line"
+msgstr "Pomakni se na poèetak tekuæe linije"
+
+#: info/echo-area.c:313
+msgid "Move to the end of this line"
+msgstr "Pomakni se na kraj tekuæe linije"
+
+#: info/echo-area.c:321 info/session.c:723
+msgid "Move forward a word"
+msgstr "Pomakni se rijeè unaprijed"
+
+#: info/echo-area.c:361 info/session.c:772
+msgid "Move backward a word"
+msgstr "Pomakni se rijeè unazad"
+
+#: info/echo-area.c:401
+msgid "Delete the character under the cursor"
+msgstr "Obri¹i znak ispod kursora"
+
+#: info/echo-area.c:431
+msgid "Delete the character behind the cursor"
+msgstr "Obri¹i znak iza kursora"
+
+#: info/echo-area.c:452
+msgid "Cancel or quit operation"
+msgstr "Poni¹ti ili prekini operaciju"
+
+#: info/echo-area.c:467
+msgid "Accept (or force completion of) this line"
+msgstr "Prihvaæanje (ili tra¾enje kompletiranja) linije"
+
+#: info/echo-area.c:472
+msgid "Insert next character verbatim"
+msgstr "Umetni slijedeæi znak doslovno"
+
+#: info/echo-area.c:480
+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:653
+msgid "Kill the word preceding the cursor"
+msgstr "Obri¹i rijeè ispred kurzora"
+
+#: info/echo-area.c:868 info/echo-area.c:924
+msgid "No completions"
+msgstr "Ne mogu kompletirati"
+
+#: info/echo-area.c:870
+msgid "Not complete"
+msgstr "Nije dovr¹eno"
+
+#: info/echo-area.c:911
+msgid "List possible completions"
+msgstr "Izlistaj moguæe varijante kompletiranja"
+
+#: info/echo-area.c:928
+msgid "Sole completion"
+msgstr "Jedino moguæe kompletiranje"
+
+#: info/echo-area.c:937
+msgid "One completion:\n"
+msgstr "Jedno kompletiranje:\n"
+
+#: info/echo-area.c:938
+#, c-format
+msgid "%d completions:\n"
+msgstr "%d kompletiranja:\n"
+
+#: info/echo-area.c:1085
+msgid "Insert completion"
+msgstr "Umetni kompletiranje"
+
+#: info/echo-area.c:1220
+msgid "Building completions..."
+msgstr "Izgraðujem varijante kompletiranja..."
+
+#: info/echo-area.c:1340
+msgid "Scroll the completions window"
+msgstr "'Skrolaj' prozor za varijante kompletiranja"
+
+#: info/footnotes.c:213
+msgid "Footnotes could not be displayed"
+msgstr "Ne mogu prikazati fusnote"
+
+#: info/footnotes.c:239
+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:172
+msgid "Look up a string in the index for this file"
+msgstr "Potra¾i niz u indeksu ove datoteke"
+
+#: info/indices.c:199
+msgid "Finding index entries..."
+msgstr "Tra¾im stavke indeksa..."
+
+#: info/indices.c:207
+msgid "No indices found."
+msgstr "Nije pronaðen indeks."
+
+#: info/indices.c:217
+msgid "Index entry: "
+msgstr "Stavka indeksa: "
+
+#: info/indices.c:325
+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:335
+msgid "No previous index search string."
+msgstr "Nema prethodnog zadanog niza za pretra¾ivanje indeksa."
+
+#: info/indices.c:342
+msgid "No index entries."
+msgstr "Nema stavaka indeksa."
+
+#: info/indices.c:375
+#, fuzzy, c-format
+msgid "No %sindex entries containing `%s'."
+msgstr "Nema stavaka %sindeksa koje sadr¾e \"%s\"."
+
+#: info/indices.c:376
+msgid "more "
+msgstr "jo¹ "
+
+#: info/indices.c:386
+msgid "CAN'T SEE THIS"
+msgstr "NE MOGU VIDJETI OVO"
+
+#: info/indices.c:422
+#, 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:541
+#, fuzzy, c-format
+msgid "Scanning indices of `%s'..."
+msgstr "Skeniram indekse od \"%s\"..."
+
+#: info/indices.c:596
+#, 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:622
+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:626
+msgid "Index apropos: "
+msgstr "Indeks apropos: "
+
+#: info/indices.c:654
+#, 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:295 makeinfo/makeinfo.c:766 util/install-info.c:1266
+#: util/texindex.c:343
+#, fuzzy, c-format
+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"
+
+#: info/info.c:498
+#, c-format
+msgid "no index entries found for `%s'\n"
+msgstr "nijedna stavka indeksa nije naðena za `%s'\n"
+
+#: info/info.c:590
+msgid " -b, --speech-friendly be friendly to speech synthesizers.\n"
+msgstr ""
+" -b, --speech-friendly budi vi¹e prijateljski prema sintetizatorima "
+"govora.\n"
+
+#: info/info.c:597
+#, fuzzy, c-format
+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 -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"
+
+#: info/info.c:635 info/infokey.c:918 makeinfo/makeinfo.c:465
+#: util/install-info.c:466 util/texindex.c:292
+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:669
+#, c-format
+msgid "Cannot find node `%s'."
+msgstr "Ne mogu naæi èvor `%s'."
+
+#: info/info.c:670
+#, c-format
+msgid "Cannot find node `(%s)%s'."
+msgstr "Ne mogu naæi èvor `(%s)%s'."
+
+#: info/info.c:671
+msgid "Cannot find a window!"
+msgstr "Ne mogu naæi prozor!"
+
+#: info/info.c:672
+msgid "Point doesn't appear within this window's node!"
+msgstr "Toèka se ne nalazi unutar èvora ovog prozora!"
+
+#: info/info.c:673
+msgid "Cannot delete the last window."
+msgstr "Ne mogu dokinuti zadnji prozor."
+
+#: info/info.c:674
+msgid "No menu in this node."
+msgstr "Nema menija u ovom èvoru."
+
+#: info/info.c:675
+msgid "No footnotes in this node."
+msgstr "Nema fusnota u ovom èvoru."
+
+#: info/info.c:676
+msgid "No cross references in this node."
+msgstr "Nema unakrsnih referenci u ovom èvoru."
+
+#: info/info.c:677
+#, c-format
+msgid "No `%s' pointer for this node."
+msgstr "Nema `%s' pokazivaèa za ovaj èvor."
+
+#: info/info.c:678
+#, c-format
+msgid "Unknown Info command `%c'; try `?' for help."
+msgstr "Nepoznata Info naredba `%c'; poku¹ajte `?' za pomoæ."
+
+#: info/info.c:679
+#, 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:680
+msgid "You are already at the last page of this node."
+msgstr "Veæ se nalazite na zadnjoj stranici ovog èvora."
+
+#: info/info.c:681
+msgid "You are already at the first page of this node."
+msgstr "Veæ se nalazite na prvoj stranici ovog èvora."
+
+#: info/info.c:682
+msgid "Only one window."
+msgstr "Samo jedan prozor."
+
+#: info/info.c:683
+msgid "Resulting window would be too small."
+msgstr "Nastali prozor bi bio premalen."
+
+#: info/info.c:684
+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:46 info/infodoc.c:95
+msgid ""
+"Basic Commands in Info Windows\n"
+"******************************\n"
+msgstr ""
+"Osnovne naredbe u Info prozorima\n"
+"********************************\n"
+
+#: info/infodoc.c:49
+msgid "\\%-10[quit-help] Quit this help.\n"
+msgstr "\\%-10[quit-help] Napusti ovu pomoæ.\n"
+
+#: info/infodoc.c:50
+msgid "\\%-10[quit] Quit Info altogether.\n"
+msgstr "\\%-10[quit] Potpuno zavr¹i s radom (Quit).\n"
+
+#: info/infodoc.c:51
+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:53 info/infodoc.c:102
+msgid ""
+"Selecting other nodes:\n"
+"----------------------\n"
+msgstr ""
+"Izabir drugih èvorova:\n"
+"----------------------\n"
+
+#: info/infodoc.c:55
+msgid "\\%-10[next-node] Move to the \"next\" node of this node.\n"
+msgstr "\\%-10[next-node] Idi na slijedeæi (`next') èvor u odnosu na ovaj.\n"
+
+#: info/infodoc.c:56
+msgid "\\%-10[prev-node] Move to the \"previous\" node of this node.\n"
+msgstr ""
+"\\%-10[prev-node] Idi na prethodni (`previous') èvor u odnosu na ovaj.\n"
+
+#: info/infodoc.c:57
+msgid "\\%-10[up-node] Move \"up\" from this node.\n"
+msgstr "\\%-10[up-node] Idi navi¹e (`up') od ovog èvora.\n"
+
+#: info/infodoc.c:58
+msgid ""
+"\\%-10[menu-item] 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:60
+msgid ""
+"\\%-10[xref-item] Follow a cross reference. Reads name of reference.\n"
+msgstr "\\%-10[xref-item] Slijedi unakrsnu referencu. Èita ime reference.\n"
+
+#: info/infodoc.c:61
+msgid "\\%-10[history-node] Move 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
+msgid ""
+"\\%-10[move-to-next-xref] Skip to next hypertext link within this node.\n"
+msgstr ""
+"\\%-10[move-to-next-xref] Preskoèi do slijedeæeg hipertekst linka unutar "
+"ovog èvora.\n"
+
+#: info/infodoc.c:63
+msgid ""
+"\\%-10[move-to-prev-xref] Skip to previous hypertext link within this "
+"node.\n"
+msgstr ""
+"\\%-10[move-to-prev-xref] Preskoèi do slijedeæeg hipertekst linka unutar "
+"ovog èvora.\n"
+
+#: info/infodoc.c:64
+msgid ""
+"\\%-10[select-reference-this-line] Follow the hypertext link under cursor.\n"
+msgstr ""
+"\\%-10[select-reference-this-line] Slijedi hipertekst link ispod kursora.\n"
+
+#: info/infodoc.c:65
+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"
+
+#: info/infodoc.c:66
+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"
+
+#: info/infodoc.c:68 info/infodoc.c:116
+msgid ""
+"Moving within a node:\n"
+"---------------------\n"
+msgstr ""
+"Pomicanje unutar èvora:\n"
+"-----------------------\n"
+
+#: info/infodoc.c:70
+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:71
+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:72
+#, fuzzy
+msgid "\\%-10[next-line] Scroll forward 1 line.\n"
+msgstr " %-10s 'Skrolaj' naprijed 1 redak.\n"
+
+#: info/infodoc.c:73
+#, fuzzy
+msgid "\\%-10[prev-line] Scroll backward 1 line.\n"
+msgstr " %-10s 'Skrolaj' unazad 1 redak.\n"
+
+#: info/infodoc.c:74
+msgid "\\%-10[scroll-forward] Scroll forward a page.\n"
+msgstr "\\%-10[scroll-forward] 'Skrolaj stranicu naprijed.\n"
+
+#: info/infodoc.c:75
+msgid "\\%-10[scroll-backward] Scroll backward a page.\n"
+msgstr "\\%-10[scroll-backward] 'Skrolaj' stranicu unazad.\n"
+
+#: info/infodoc.c:77 info/infodoc.c:125
+msgid ""
+"Other commands:\n"
+"---------------\n"
+msgstr ""
+"Druge naredbe:\n"
+"--------------\n"
+
+#: info/infodoc.c:79
+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"
+
+#: info/infodoc.c:80
+msgid "\\%-10[last-menu-item] Pick last item in node's menu.\n"
+msgstr "\\%-10[last-menu-item] Odaberi zadnju stavku u meniju èvora.\n"
+
+#: info/infodoc.c:81
+msgid ""
+"\\%-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"
+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:83
+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"
+
+#: info/infodoc.c:85
+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"
+
+#: info/infodoc.c:87
+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"
+
+#: info/infodoc.c:98
+#, c-format
+msgid " %-10s Quit this help.\n"
+msgstr " %-10s Napusti ovu pomoæ.\n"
+
+#: info/infodoc.c:99
+#, c-format
+msgid " %-10s Quit Info altogether.\n"
+msgstr " %-10s Potpuno zavr¹i s radom (Quit).\n"
+
+#: info/infodoc.c:100
+#, c-format
+msgid " %-10s Invoke the Info tutorial.\n"
+msgstr " %-10s Pozovi Info priruènik.\n"
+
+#: info/infodoc.c:104
+#, 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:105
+#, 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:106
+#, c-format
+msgid " %-10s Move `up' from this node.\n"
+msgstr " %-10s Idi navi¹e (`up') od ovog èvora.\n"
+
+#: info/infodoc.c:107
+#, c-format
+msgid " %-10s Pick menu item specified by name.\n"
+msgstr " %-10s Odaberi stavku menija specificirane imenom.\n"
+
+#: info/infodoc.c:108
+msgid " Picking a menu item causes another node to be selected.\n"
+msgstr " Odabiranje stavke menija selektira drugi èvor.\n"
+
+#: info/infodoc.c:109
+#, 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:110
+#, 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:111
+#, 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:112
+#, c-format
+msgid " %-10s Follow the hypertext link under cursor.\n"
+msgstr " %-10s Slijedi hipertekst link ispod kursora.\n"
+
+#: info/infodoc.c:113
+#, 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:114
+#, 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:118
+#, c-format
+msgid " %-10s Scroll forward a page.\n"
+msgstr " %-10s 'Skrolaj' stranicu naprijed.\n"
+
+#: info/infodoc.c:119
+#, c-format
+msgid " %-10s Scroll backward a page.\n"
+msgstr " %-10s 'Skrolaj' stranicu unazad.\n"
+
+#: info/infodoc.c:120
+#, c-format
+msgid " %-10s Go to the beginning of this node.\n"
+msgstr " %-10s Idi na poèetak ovog èvora.\n"
+
+#: info/infodoc.c:121
+#, c-format
+msgid " %-10s Go to the end of this node.\n"
+msgstr " %-10s Idi na kraj ovog èvora.\n"
+
+#: info/infodoc.c:122
+#, c-format
+msgid " %-10s Scroll forward 1 line.\n"
+msgstr " %-10s 'Skrolaj' naprijed 1 redak.\n"
+
+#: info/infodoc.c:123
+#, c-format
+msgid " %-10s Scroll backward 1 line.\n"
+msgstr " %-10s 'Skrolaj' unazad 1 redak.\n"
+
+#: info/infodoc.c:127
+#, 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:128
+#, c-format
+msgid " %-10s Pick last item in node's menu.\n"
+msgstr " %-10s Odaberi zadnju stavku u èvorovom meniju.\n"
+
+#: info/infodoc.c:129
+#, c-format
+msgid ""
+" %-10s Search for a specified string in the index entries of this Info\n"
+msgstr " %-10s Tra¾i zadani niz u indeks stavkama ove Info\n"
+
+#: info/infodoc.c:130
+msgid ""
+" file, and select the node referenced by the first entry "
+"found.\n"
+msgstr ""
+" datoteke, i selektiraj èvor referenciran prvom naðenom "
+"stavkom.\n"
+
+#: info/infodoc.c:131
+#, c-format
+msgid " %-10s Move to node specified by name.\n"
+msgstr " %-10s Idi na èvor zadan imenom.\n"
+
+#: info/infodoc.c:132
+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"
+
+#: info/infodoc.c:133
+#, c-format
+msgid " %-10s Search forward for a specified string,\n"
+msgstr " %-10s Tra¾i prema naprijed zadani niz,\n"
+
+#: info/infodoc.c:134 info/infodoc.c:136
+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"
+
+#: info/infodoc.c:135
+#, c-format
+msgid " %-10s Search backward for a specified string\n"
+msgstr " %-10s Tra¾i unazad zadani niz,\n"
+
+#: info/infodoc.c:316
+msgid "The current search path is:\n"
+msgstr "Trenutni put pretra¾ivanja je:\n"
+
+#: info/infodoc.c:320
+msgid ""
+"Commands available in Info windows:\n"
+"\n"
+msgstr ""
+"Naredbe raspolo¾ive u Info prozorima:\n"
+"\n"
+
+#: info/infodoc.c:324
+msgid ""
+"Commands available in the echo area:\n"
+"\n"
+msgstr ""
+"Naredbe raspolo¾ive u echo podruèju:\n"
+"\n"
+
+#: info/infodoc.c:347
+#, 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:351
+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:375
+msgid "--- Use `\\[history-node]' or `\\[kill-node]' to exit ---\n"
+msgstr "--- Upotrijebi `\\[history-node]' ili `\\[kill-node]' za izlaz ---\n"
+
+#: info/infodoc.c:485
+msgid "Display help message"
+msgstr "Ispi¹i poruku za pomoæ"
+
+#: info/infodoc.c:503
+msgid "Visit Info node `(info)Help'"
+msgstr "Posjeti Info èvor `(info)Help'"
+
+#: info/infodoc.c:641
+msgid "Print documentation for KEY"
+msgstr "Ispi¹i dokumentaciju za TIPKU"
+
+#: info/infodoc.c:653
+#, c-format
+msgid "Describe key: %s"
+msgstr "Opi¹i tipku: %s"
+
+#: info/infodoc.c:664
+#, c-format
+msgid "ESC %s is undefined."
+msgstr "ESC %s nije definiran."
+
+#: info/infodoc.c:680 info/infodoc.c:709
+#, c-format
+msgid "%s is undefined."
+msgstr "%s nije definiran."
+
+#: info/infodoc.c:730
+#, c-format
+msgid "%s is defined to %s."
+msgstr "%s je definiran kao %s."
+
+#: info/infodoc.c:1153
+msgid "Show what to type to execute a given command"
+msgstr "Poka¾i ¹to otipkati da se izvr¹i data naredba"
+
+#: info/infodoc.c:1157
+msgid "Where is command: "
+msgstr "Gdje je naredba: "
+
+#: info/infodoc.c:1179
+#, c-format
+msgid "`%s' is not on any keys"
+msgstr "`%s' nije niti na jednoj tipki"
+
+#: info/infodoc.c:1186
+#, c-format
+msgid "%s can only be invoked via %s."
+msgstr "%s mo¾e biti pozvan samo putem %s."
+
+#: info/infodoc.c:1190
+#, c-format
+msgid "%s can be invoked via %s."
+msgstr "%s mo¾e biti pozvan putem %s."
+
+#: info/infodoc.c:1195
+#, c-format
+msgid "There is no function named `%s'"
+msgstr "Ne postoji funkcija `%s'"
+
+#: info/infokey.c:145
+#, c-format
+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"
+"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"
+
+#: 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:1500
+#, c-format
+msgid "Ignoring invalid infokey file `%s' - too small"
+msgstr "Ignoriram neispravnu infokey datoteku `%s' - premalena"
+
+#: info/infomap.c:1503
+#, c-format
+msgid "Ignoring invalid infokey file `%s' - too big"
+msgstr "Ignoriram neispravnu infokey datoteku `%s' - prevelika"
+
+#: info/infomap.c:1516
+#, c-format
+msgid "Error reading infokey file `%s' - short read"
+msgstr "Pogre¹ka pri èitanju infokey datoteke `%s' - prekratki read"
+
+#: info/infomap.c:1535
+#, 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:1544
+#, 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:1560
+#, 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:1581
+#, 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:1716
+msgid "Bad data in infokey file -- some key bindings ignored"
+msgstr ""
+"Pogre¹ni podaci u infokey datoteci -- neka povezivanja tipki zanemarena"
+
+#: info/infomap.c:1766
+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:69
+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:73
+msgid "Describe command: "
+msgstr "Opi¹i naredbu: "
+
+#: info/m-x.c:96
+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:140
+msgid "Cannot execute an `echo-area' command here."
+msgstr "Ne mogu izvr¹iti komandu za echo podruèje ovdje."
+
+#: info/m-x.c:154
+#, fuzzy, c-format
+msgid "Undefined command: %s"
+msgstr "Nepoznata naredba (%s)."
+
+#: info/m-x.c:160
+msgid "Set the height of the displayed window"
+msgstr "Postavi visinu prikazanog prozora"
+
+#: info/m-x.c:173
+#, c-format
+msgid "Set screen height to (%d): "
+msgstr "Postavi velièinu screena na (%d): "
+
+#: info/makedoc.c:162 info/makedoc.c:170
+#, 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:550
+#, c-format
+msgid "Couldn't manipulate the file %s.\n"
+msgstr "Neuspjelo rukovanje datotekom %s.\n"
+
+#: info/nodemenu.c:31
+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:202
+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:224
+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:304
+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:317
+msgid "Select visited node: "
+msgstr "Izaberi posjeæeni èvor: "
+
+#: info/nodemenu.c:337 info/session.c:2264
+#, c-format
+msgid "The reference disappeared! (%s)."
+msgstr "Referenca je nestala! (%s)."
+
+#: info/session.c:162
+#, 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:620
+msgid "Move down to the next line"
+msgstr "Pomakni se dolje to slijedeæeg retka"
+
+#: info/session.c:635
+msgid "Move up to the previous line"
+msgstr "Pomakni se gore do prethodnog retka"
+
+#: info/session.c:650
+msgid "Move to the end of the line"
+msgstr "Pomakni se do kraja retka"
+
+#: info/session.c:670
+msgid "Move to the start of the line"
+msgstr "Pomakni se na poèetak retka"
+
+#: info/session.c:860 makeinfo/node.c:1424
+msgid "Next"
+msgstr "Next"
+
+#: info/session.c:863
+msgid "Following Next node..."
+msgstr "Slijedim Next (slijedeæi) èvor..."
+
+#: info/session.c:881
+msgid "Selecting first menu item..."
+msgstr "Izabirem prvu stavku menija..."
+
+#: info/session.c:893
+msgid "Selecting Next node..."
+msgstr "Selektiram Next (slijedeæi) èvor..."
+
+#: info/session.c:964
+#, c-format
+msgid "Moving Up %d time(s), then Next."
+msgstr "Pomièem se gore (Up) %d put(a), onda Next."
+
+#: info/session.c:988
+msgid "No more nodes within this document."
+msgstr "Nema vi¹e èvorova u ovom dokumentu."
+
+#: info/session.c:1011
+msgid "No `Prev' for this node."
+msgstr "Nema `Prev' (prethodni) za ovaj èvor."
+
+#: info/session.c:1014 info/session.c:1073
+msgid "Moving Prev in this window."
+msgstr "Idemo na Prev (prethodni) u ovom prozoru."
+
+#: info/session.c:1030
+msgid "No `Prev' or `Up' for this node within this document."
+msgstr "Nema `Prev' ni `Up' za ovaj èvor unutar dokumenta."
+
+#: info/session.c:1034
+msgid "Moving Up in this window."
+msgstr "Idem gore (Up) u ovom prozoru."
+
+#: info/session.c:1084
+msgid "Moving to `Prev's last menu item."
+msgstr "Idem na zadnju stavku `Prev'-ovog menija."
+
+#: info/session.c:1095
+msgid "Move forwards or down through node structure"
+msgstr "Idi naprijed ili nani¾e kruz strukturu èvorova"
+
+#: info/session.c:1111
+msgid "Move backwards or up through node structure"
+msgstr "Idi unatrag ili gore kroz strukturu èvorova"
+
+#: info/session.c:1205
+msgid "Scroll forward in this window"
+msgstr "'Skrolaj' prema gore u ovom prozoru"
+
+#: info/session.c:1213
+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:1221
+msgid "Scroll forward in this window staying within node"
+msgstr "'Skrolaj' prema dolje u ovom prozoru ostajuæi unutar èvora"
+
+#: info/session.c:1229
+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:1237
+msgid "Scroll backward in this window"
+msgstr "'Skrolaj' prema gore u ovom prozoru"
+
+#: info/session.c:1245
+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:1254
+msgid "Scroll backward in this window staying within node"
+msgstr "'Skrolaj' prema gore u ovom prozoru ostajuæi unutar èvora"
+
+#: info/session.c:1262
+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:1270
+msgid "Move to the start of this node"
+msgstr "Pomakni se na poèetak trenutnog èvora"
+
+#: info/session.c:1277
+msgid "Move to the end of this node"
+msgstr "Pomakni se na kraj trenutnog èvora"
+
+#: info/session.c:1284
+msgid "Scroll down by lines"
+msgstr "'Skrolaj' dolje za redaka"
+
+#: info/session.c:1301
+msgid "Scroll up by lines"
+msgstr "'Skrolaj' gore za redaka"
+
+#: info/session.c:1319
+msgid "Scroll down by half screen size"
+msgstr "'Skrolaj' dolje za polovinu velièine ekrana"
+
+#: info/session.c:1345
+msgid "Scroll up by half screen size"
+msgstr "'Skrolaj' gore za polovinu velièine ekrana"
+
+#: info/session.c:1374
+msgid "Select the next window"
+msgstr "Selektiraj slijedeæi prozor"
+
+#: info/session.c:1413
+msgid "Select the previous window"
+msgstr "Selektiraj prethodni prozor"
+
+#: info/session.c:1464
+msgid "Split the current window"
+msgstr "Raspolovi trenutni prozor"
+
+#: info/session.c:1545
+msgid "Delete the current window"
+msgstr "Obri¹i trenutni prozor"
+
+#: info/session.c:1553
+msgid "Cannot delete a permanent window"
+msgstr "Ne mogu obrisati permanentni prozor"
+
+#: info/session.c:1585
+msgid "Delete all other windows"
+msgstr "Obri¹i sve ostale prozore"
+
+#: info/session.c:1631
+msgid "Scroll the other window"
+msgstr "'Skrolaj' drugi prozor"
+
+#: info/session.c:1652
+msgid "Scroll the other window backward"
+msgstr "'Skrolaj' drugi prozor unazad"
+
+#: info/session.c:1658
+msgid "Grow (or shrink) this window"
+msgstr "Poveæaj (ili smanji) ovaj prozor"
+
+#: info/session.c:1669
+msgid "Divide the available screen space among the visible windows"
+msgstr "Podijeli vidljivu povr¹inu ekrana izmeðu vidljivih prozora"
+
+#: info/session.c:1676
+msgid "Toggle the state of line wrapping in the current window"
+msgstr "Promijeni stanje prelamanja linija u trenutnom prozoru"
+
+#: info/session.c:1848
+msgid "Select the Next node"
+msgstr "Prika¾i Next (slijedeæi) èvor"
+
+#: info/session.c:1856
+msgid "Select the Prev node"
+msgstr "Prika¾i Prev (prethodni) èvor"
+
+#: info/session.c:1864
+msgid "Select the Up node"
+msgstr "Prika¾i Up (gornji) èvor"
+
+#: info/session.c:1871
+msgid "Select the last node in this file"
+msgstr "Prika¾i posljednji èvor u ovoj datoteci"
+
+#: info/session.c:1898 info/session.c:1931
+msgid "This window has no additional nodes"
+msgstr "Ovaj prozor nema dodatnih èvorova"
+
+#: info/session.c:1904
+msgid "Select the first node in this file"
+msgstr "Prika¾i prvi èvor u ovoj datoteci"
+
+#: info/session.c:1938
+msgid "Select the last item in this node's menu"
+msgstr "Prika¾i zadnji èvor u ovoj datoteci"
+
+#: info/session.c:1944
+msgid "Select this menu item"
+msgstr "Selektiraj ovu stavku menija"
+
+#: info/session.c:1977
+#, c-format
+msgid "There aren't %d items in this menu."
+msgstr "Nema %d stavaka u ovom meniju."
+
+#: info/session.c:2171 info/session.c:2172
+#, c-format
+msgid "Menu item (%s): "
+msgstr "Stavka menija (%s): "
+
+#: info/session.c:2175
+msgid "Menu item: "
+msgstr "Stavka menija: "
+
+#: info/session.c:2182 info/session.c:2183
+#, c-format
+msgid "Follow xref (%s): "
+msgstr "Slijedi xref (%s): "
+
+#: info/session.c:2186
+msgid "Follow xref: "
+msgstr "Slijedi xref: "
+
+#: info/session.c:2315
+msgid "Read a menu item and select its node"
+msgstr "Èitaj stavku menija i selektiraj njen èvor"
+
+#: info/session.c:2323
+msgid "Read a footnote or cross reference and select its node"
+msgstr "Èitaj fusnotu ili referencu i selektiraj njezin èvor"
+
+#: info/session.c:2329
+msgid "Move to the start of this node's menu"
+msgstr "Idi na poèetak menija ovog èvora"
+
+#: info/session.c:2353
+msgid "Visit as many menu items at once as possible"
+msgstr "Posjeti ¹to je vi¹e moguæe stavki odjednom"
+
+#: info/session.c:2381
+msgid "Read a node name and select it"
+msgstr "Èitaj ime èvora i selektiraj ga"
+
+#: info/session.c:2436 info/session.c:2441
+msgid "Goto node: "
+msgstr "Idi na èvor: "
+
+#: info/session.c:2505
+#, c-format
+msgid "No menu in node `%s'."
+msgstr "Nema menija u èvoru `%s'."
+
+#: info/session.c:2551
+#, c-format
+msgid "No menu item `%s' in node `%s'."
+msgstr "Nema stavke menija `%s' u èvoru `%s'."
+
+#: info/session.c:2581
+#, 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:2631
+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:2633
+msgid "Follow menus: "
+msgstr "Slijedi menije: "
+
+#: info/session.c:2826
+msgid "Find the node describing program invocation"
+msgstr "Pronaði èvor koji opisuje pozivanje programa"
+
+#: info/session.c:2828
+#, c-format
+msgid "Find Invocation node of [%s]: "
+msgstr "Naði èvor pozivanja (Invocation) od [%s]: "
+
+#: info/session.c:2866
+msgid "Read a manpage reference and select it"
+msgstr "Proèitaj referentnu man stranicu i selektiraj je"
+
+#: info/session.c:2870
+msgid "Get Manpage: "
+msgstr "Dobavi man stranicu: "
+
+#: info/session.c:2900
+msgid "Select the node `Top' in this file"
+msgstr "Selektiraj èvor `Top' u ovoj datoteci"
+
+#: info/session.c:2906
+msgid "Select the node `(dir)'"
+msgstr "Selektiraj èvor `(dir)'"
+
+#: info/session.c:2923 info/session.c:2925
+#, c-format
+msgid "Kill node (%s): "
+msgstr "Poni¹ti èvor (%s): "
+
+#: info/session.c:2977
+#, c-format
+msgid "Cannot kill node `%s'"
+msgstr "Ne mogu poni¹titi èvor `%s'"
+
+#: info/session.c:2987
+msgid "Cannot kill the last node"
+msgstr "Ne mogu poni¹titi zadnji èvor"
+
+#: info/session.c:3073
+msgid "Select the most recently selected node"
+msgstr "Selektiraj najzadnji odabrani èvor"
+
+#: info/session.c:3079
+msgid "Kill this node"
+msgstr "Poni¹ti ovaj èvor"
+
+#: info/session.c:3087
+msgid "Read the name of a file and select it"
+msgstr "Proèitaj ime datoteke i selektiraj ga"
+
+#: info/session.c:3091
+msgid "Find file: "
+msgstr "Naði datoteku: "
+
+#: info/session.c:3108
+#, c-format
+msgid "Cannot find `%s'."
+msgstr "Ne mogu naæi `%s'."
+
+#: info/session.c:3151 info/session.c:3269
+#, c-format
+msgid "Could not create output file `%s'."
+msgstr "Ne mogu kreirati izlaznu datoteku `%s'."
+
+#: info/session.c:3165 info/session.c:3287 info/session.c:3347
+msgid "Done."
+msgstr "Gotovo."
+
+#: info/session.c:3220
+#, c-format
+msgid "Writing node %s..."
+msgstr "Ispisujem èvor %s..."
+
+#: info/session.c:3296
+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:3331
+#, c-format
+msgid "Cannot open pipe to `%s'."
+msgstr "Ne mogu otvoriti cjevovod (pipe) prema `%s'."
+
+#: info/session.c:3337
+#, c-format
+msgid "Printing node %s..."
+msgstr "Ispisujem èvor %s..."
+
+#: info/session.c:3567
+#, c-format
+msgid "Searching subfile %s ..."
+msgstr "Tra¾im poddatoteku %s ..."
+
+#: info/session.c:3619
+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:3626
+msgid "Read a string and search for it"
+msgstr "Èitaj niz znakova i potra¾i ga"
+
+#: info/session.c:3634
+msgid "Read a string and search backward for it"
+msgstr "Èitaj niz znakova i potra¾i ga unatrag"
+
+#: info/session.c:3670 info/session.c:3677
+#, c-format
+msgid "%s%sfor string [%s]: "
+msgstr "%s%sza niz znakova [%s]: "
+
+#: info/session.c:3671 info/session.c:3678
+msgid "Search backward"
+msgstr "Tra¾i unazad"
+
+#: info/session.c:3672 info/session.c:3678
+msgid "Search"
+msgstr "Tra¾i"
+
+#: info/session.c:3673 info/session.c:3679
+msgid " case-sensitively "
+msgstr " (case-sensitive) "
+
+#: info/session.c:3674 info/session.c:3679
+msgid " "
+msgstr " "
+
+#: info/session.c:3718
+msgid "Search failed."
+msgstr "Pretra¾ivanje neuspjelo."
+
+#: info/session.c:3736
+msgid "Repeat last search in the same direction"
+msgstr "Ponovi zadnje pretra¾ivanje u istom pravcu"
+
+#: info/session.c:3739 info/session.c:3749
+msgid "No previous search string"
+msgstr "Nema prethodnog tra¾enog niza"
+
+#: info/session.c:3746
+msgid "Repeat last search in the reverse direction"
+msgstr "Ponovi zadnje pretra¾ivanje u suprotnom pravcu"
+
+#: info/session.c:3765 info/session.c:3771
+msgid "Search interactively for a string as you type it"
+msgstr "Tra¾i niz interaktivno kako ga tipkate"
+
+#: info/session.c:3851
+msgid "I-search backward: "
+msgstr "I-pretraga unazad: "
+
+#: info/session.c:3853
+msgid "I-search: "
+msgstr "I-pretraga: "
+
+#: info/session.c:3878 info/session.c:3880
+msgid "Failing "
+msgstr "Neuspjela "
+
+#: info/session.c:4340
+msgid "Move to the previous cross reference"
+msgstr "Idi na prethodnu referencu"
+
+#: info/session.c:4349
+msgid "Move to the next cross reference"
+msgstr "Idi na slijedeæu referencu"
+
+#: info/session.c:4359
+msgid "Select reference or menu item appearing on this line"
+msgstr "Selektiraj referencu ili stavku menija koja se pojavljuje u retku"
+
+#: info/session.c:4382
+msgid "Cancel current operation"
+msgstr "Poni¹ti trenutnu operaciju"
+
+#: info/session.c:4389
+msgid "Quit"
+msgstr "Zavr¹i (Quit)"
+
+#: info/session.c:4398
+msgid "Move the cursor to a specific line of the window"
+msgstr "Pomakni kurzor na specificirani redak prozora"
+
+#: info/session.c:4430
+msgid "Redraw the display"
+msgstr "Osvje¾i prikaz"
+
+#: info/session.c:4467
+msgid "Quit using Info"
+msgstr "Zavr¹i kori¹tenje Info-a"
+
+#: info/session.c:4480
+msgid "Run command bound to this key's lowercase variant"
+msgstr "Izvr¹i naredbu povezanu s malim slovom varijantom ove tipke"
+
+#: info/session.c:4491
+#, c-format
+msgid "Unknown command (%s)."
+msgstr "Nepoznata naredba (%s)."
+
+#: info/session.c:4494
+#, c-format
+msgid "\"%s\" is invalid"
+msgstr "\"%s\" je neispravno"
+
+#: info/session.c:4495
+#, fuzzy, c-format
+msgid "`%s' is invalid"
+msgstr "\"%s\" je neispravno"
+
+#: info/session.c:4709
+msgid "Add this digit to the current numeric argument"
+msgstr "Dodaj ovu znamenku trenutnom numerièkom argumentu"
+
+#: info/session.c:4718
+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:4733
+msgid "Internally used by \\[universal-argument]"
+msgstr "Interno kori¹ten od \\[universal-argument]"
+
+#: info/tilde.c:338
+#, 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:64
+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:68
+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:74
+msgid "Explain the use of a variable"
+msgstr "Obja¹njava kori¹tenje varijable"
+
+#: info/variables.c:80
+msgid "Describe variable: "
+msgstr "Opi¹i varijablu: "
+
+#: info/variables.c:99
+msgid "Set the value of an Info variable"
+msgstr "Postavi vrijednost info varijable"
+
+#: info/variables.c:105
+msgid "Set variable: "
+msgstr "Postavi varijablu: "
+
+#: info/variables.c:123
+#, c-format
+msgid "Set %s to value (%d): "
+msgstr "Postavi %s na vrijednost (%d): "
+
+#: info/variables.c:164
+#, c-format
+msgid "Set %s to value (%s): "
+msgstr "Postavi %s na vrijednost (%s): "
+
+#: info/window.c:1138
+msgid "--*** Tags out of Date ***"
+msgstr "--*** Tagovima istekao rok trajanja ***"
+
+#: info/window.c:1149
+msgid "-----Info: (), lines ----, "
+msgstr "-----Info: (), redaka ----,"
+
+#: info/window.c:1156
+#, c-format
+msgid "-%s---Info: %s, %d lines --%s--"
+msgstr "-%s---Info: %s, %d redaka --%s--"
+
+#: info/window.c:1160
+#, c-format
+msgid "-%s%s-Info: (%s)%s, %d lines --%s--"
+msgstr "-%s%s-Info: (%s)%s, %d redaka --%s--"
+
+#: info/window.c:1167
+#, c-format
+msgid " Subfile: %s"
+msgstr " Poddatoteka: %s"
+
+#: lib/getopt.c:551 lib/getopt.c:570
+#, c-format
+msgid "%s: option `%s' is ambiguous\n"
+msgstr "%s: opcija `%s' nije jednoznaèna\n"
+
+#: lib/getopt.c:603 lib/getopt.c:607
+#, c-format
+msgid "%s: option `--%s' doesn't allow an argument\n"
+msgstr "%s: opcija `--%s' ne dopu¹ta argument\n"
+
+#: lib/getopt.c:616 lib/getopt.c:621
+#, c-format
+msgid "%s: option `%c%s' doesn't allow an argument\n"
+msgstr "%s: opcija `%c%s' ne dopu¹ta argument\n"
+
+#: lib/getopt.c:667 lib/getopt.c:689 lib/getopt.c:1020 lib/getopt.c:1042
+#, c-format
+msgid "%s: option `%s' requires an argument\n"
+msgstr "%s: opcija `%s' tra¾i neophodan argument\n"
+
+#: lib/getopt.c:727 lib/getopt.c:730
+#, c-format
+msgid "%s: unrecognized option `--%s'\n"
+msgstr "%s: nepoznata opcija `--%s'\n"
+
+#: lib/getopt.c:738 lib/getopt.c:741
+#, c-format
+msgid "%s: unrecognized option `%c%s'\n"
+msgstr "%s: nepoznata opcija `%c%s'\n"
+
+#: lib/getopt.c:796 lib/getopt.c:799
+#, c-format
+msgid "%s: illegal option -- %c\n"
+msgstr "%s: nedozvoljena opcija -- %c\n"
+
+#: lib/getopt.c:805 lib/getopt.c:808
+#, c-format
+msgid "%s: invalid option -- %c\n"
+msgstr "%s: pogre¹na opcija -- %c\n"
+
+#: lib/getopt.c:863 lib/getopt.c:882 lib/getopt.c:1095 lib/getopt.c:1116
+#, c-format
+msgid "%s: option requires an argument -- %c\n"
+msgstr "%s: opcija zahtijeva argument -- %c\n"
+
+#: lib/getopt.c:935 lib/getopt.c:954
+#, c-format
+msgid "%s: option `-W %s' is ambiguous\n"
+msgstr "%s: opcija `-W %s' nije jednoznaèna\n"
+
+#: lib/getopt.c:978 lib/getopt.c:999
+#, c-format
+msgid "%s: option `-W %s' doesn't allow an argument\n"
+msgstr "%s: opcija `-W %s' ne dopu¹ta argument\n"
+
+#: makeinfo/cmds.c:520 makeinfo/cmds.c:542
+#, c-format
+msgid "arguments to @%s ignored"
+msgstr ""
+
+#: makeinfo/cmds.c:585
+msgid "January"
+msgstr ""
+
+#: makeinfo/cmds.c:585
+msgid "February"
+msgstr ""
+
+#: makeinfo/cmds.c:585
+msgid "March"
+msgstr ""
+
+#: makeinfo/cmds.c:585
+msgid "April"
+msgstr ""
+
+#: makeinfo/cmds.c:585
+msgid "May"
+msgstr ""
+
+#: makeinfo/cmds.c:586
+msgid "June"
+msgstr ""
+
+#: makeinfo/cmds.c:586
+msgid "July"
+msgstr ""
+
+#: makeinfo/cmds.c:586
+msgid "August"
+msgstr ""
+
+#: makeinfo/cmds.c:586
+msgid "September"
+msgstr ""
+
+#: makeinfo/cmds.c:586
+msgid "October"
+msgstr ""
+
+#: makeinfo/cmds.c:587
+msgid "November"
+msgstr ""
+
+#: makeinfo/cmds.c:587
+msgid "December"
+msgstr ""
+
+#: makeinfo/cmds.c:936
+#, c-format
+msgid "unlikely character %c in @var"
+msgstr ""
+
+#: makeinfo/cmds.c:979
+msgid "@sc argument all uppercase, thus no effect"
+msgstr ""
+
+#: makeinfo/cmds.c:1034
+#, c-format
+msgid "`{' expected, but saw `%c'"
+msgstr ""
+
+#: makeinfo/cmds.c:1074
+msgid "end of file inside verb block"
+msgstr ""
+
+#: makeinfo/cmds.c:1082
+#, c-format
+msgid "`}' expected, but saw `%c'"
+msgstr ""
+
+#: makeinfo/cmds.c:1112
+msgid ""
+"@strong{Note...} produces a spurious cross-reference in Info; reword to "
+"avoid that"
+msgstr ""
+
+#: makeinfo/cmds.c:1305
+#, c-format
+msgid "%c%s is obsolete"
+msgstr ""
+
+#: makeinfo/cmds.c:1414
+#, c-format
+msgid "@sp requires a positive numeric argument, not `%s'"
+msgstr ""
+
+#: makeinfo/cmds.c:1763 makeinfo/cmds.c:1819 makeinfo/footnote.c:82
+#, c-format
+msgid "Bad argument to %c%s"
+msgstr ""
+
+#: makeinfo/cmds.c:1773 makeinfo/makeinfo.c:4142
+msgid "asis"
+msgstr ""
+
+#: makeinfo/cmds.c:1775 makeinfo/cmds.c:1805 makeinfo/makeinfo.c:4144
+msgid "none"
+msgstr ""
+
+#: makeinfo/cmds.c:1789
+#, c-format
+msgid "Bad argument to @%s"
+msgstr ""
+
+#: makeinfo/cmds.c:1803
+msgid "insert"
+msgstr ""
+
+#: makeinfo/defun.c:84
+msgid "Missing `}' in @def arg"
+msgstr ""
+
+#: makeinfo/defun.c:403
+msgid "Function"
+msgstr ""
+
+#: makeinfo/defun.c:406
+msgid "Macro"
+msgstr ""
+
+#: makeinfo/defun.c:409
+msgid "Special Form"
+msgstr ""
+
+#: makeinfo/defun.c:413
+msgid "Variable"
+msgstr ""
+
+#: makeinfo/defun.c:416
+msgid "User Option"
+msgstr ""
+
+#: makeinfo/defun.c:420
+msgid "Instance Variable"
+msgstr ""
+
+#: makeinfo/defun.c:424
+msgid "Method"
+msgstr ""
+
+#: makeinfo/defun.c:500 makeinfo/defun.c:505 makeinfo/defun.c:545
+#: makeinfo/defun.c:644 makeinfo/xml.c:2229
+msgid "of"
+msgstr ""
+
+#: makeinfo/defun.c:509 makeinfo/defun.c:513 makeinfo/defun.c:517
+#: makeinfo/defun.c:551 makeinfo/defun.c:650 makeinfo/xml.c:2234
+msgid "on"
+msgstr ""
+
+#: makeinfo/defun.c:711
+#, c-format
+msgid "Must be in `@%s' environment to use `@%s'"
+msgstr ""
+
+#: makeinfo/files.c:435
+#, c-format
+msgid "%s: getwd: %s, %s\n"
+msgstr ""
+
+#: makeinfo/files.c:638
+#, c-format
+msgid "`%s' omitted before output filename"
+msgstr ""
+
+#: makeinfo/files.c:646
+#, c-format
+msgid "`%s' omitted since writing to stdout"
+msgstr ""
+
+#: makeinfo/files.c:694
+msgid "Output buffer not empty."
+msgstr ""
+
+#: makeinfo/footnote.c:150
+#, c-format
+msgid "`%c%s' needs an argument `{...}', not just `%s'"
+msgstr ""
+
+#: makeinfo/footnote.c:165
+#, c-format
+msgid "No closing brace for footnote `%s'"
+msgstr ""
+
+#: makeinfo/footnote.c:198
+msgid "Footnote defined without parent node"
+msgstr ""
+
+#: makeinfo/footnote.c:210
+msgid "Footnotes inside footnotes are not allowed"
+msgstr ""
+
+#: makeinfo/footnote.c:302 makeinfo/index.c:189
+msgid "Footnotes"
+msgstr ""
+
+#: makeinfo/html.c:87
+#, c-format
+msgid "%s: could not open --css-file: %s"
+msgstr ""
+
+#: makeinfo/html.c:172
+#, c-format
+msgid "%s:%d: --css-file ended in comment"
+msgstr ""
+
+#: makeinfo/html.c:207
+msgid "Untitled"
+msgstr ""
+
+#: makeinfo/html.c:422
+msgid "[unexpected] no html tag to pop"
+msgstr ""
+
+#: makeinfo/html.c:752
+#, c-format
+msgid "[unexpected] invalid node name: `%s'"
+msgstr ""
+
+#: makeinfo/index.c:169
+#, c-format
+msgid "Unknown index `%s'"
+msgstr ""
+
+#: makeinfo/index.c:234
+#, c-format
+msgid "Info cannot handle `:' in index entry `%s'"
+msgstr ""
+
+#: makeinfo/index.c:412
+#, c-format
+msgid "Index `%s' already exists"
+msgstr ""
+
+#: makeinfo/index.c:455
+#, c-format
+msgid "Unknown index `%s' and/or `%s' in @synindex"
+msgstr ""
+
+#: makeinfo/index.c:661
+msgid "(line )"
+msgstr ""
+
+#: makeinfo/index.c:669
+#, c-format
+msgid "(line %*d)"
+msgstr ""
+
+#: makeinfo/index.c:750
+#, c-format
+msgid "Unknown index `%s' in @printindex"
+msgstr ""
+
+#: makeinfo/index.c:819
+#, c-format
+msgid "Entry for index `%s' outside of any node"
+msgstr ""
+
+#: makeinfo/index.c:822 makeinfo/index.c:858
+msgid "(outside of any node)"
+msgstr ""
+
+#: makeinfo/index.c:919 makeinfo/index.c:925
+msgid "See "
+msgstr ""
+
+#: makeinfo/insertion.c:160
+msgid "@item not allowed in argument to @itemize"
+msgstr ""
+
+#: makeinfo/insertion.c:238
+msgid "Broken-Type in insertion_type_pname"
+msgstr ""
+
+#: makeinfo/insertion.c:334
+msgid "Enumeration stack overflow"
+msgstr ""
+
+#: makeinfo/insertion.c:366
+#, c-format
+msgid "lettering overflow, restarting at %c"
+msgstr ""
+
+#: makeinfo/insertion.c:631
+#, c-format
+msgid "%s requires an argument: the formatter for %citem"
+msgstr ""
+
+#: makeinfo/insertion.c:719
+#, c-format
+msgid "%cfloat environments cannot be nested"
+msgstr ""
+
+#: makeinfo/insertion.c:973
+#, c-format
+msgid "`@end' expected `%s', but saw `%s'"
+msgstr ""
+
+#: makeinfo/insertion.c:1337
+#, c-format
+msgid "No matching `%cend %s'"
+msgstr ""
+
+#: makeinfo/insertion.c:1592
+#, c-format
+msgid "%s requires letter or digit"
+msgstr ""
+
+#: makeinfo/insertion.c:1687
+msgid "end of file inside verbatim block"
+msgstr ""
+
+#: makeinfo/insertion.c:1913
+#, c-format
+msgid "@%s not meaningful outside `@float' environment"
+msgstr ""
+
+#: makeinfo/insertion.c:1949
+msgid "@menu seen before first @node, creating `Top' node"
+msgstr ""
+
+#: makeinfo/insertion.c:1950
+msgid ""
+"perhaps your @top node should be wrapped in @ifnottex rather than @ifinfo?"
+msgstr ""
+
+#: makeinfo/insertion.c:1962
+msgid "@detailmenu seen before first node, creating `Top' node"
+msgstr ""
+
+#: makeinfo/insertion.c:2018
+#, c-format
+msgid "@%s not meaningful outside `@titlepage' and `@quotation' environments"
+msgstr ""
+
+#: makeinfo/insertion.c:2032
+#, c-format
+msgid "@%s not meaningful outside `@titlepage' environment"
+msgstr ""
+
+#: makeinfo/insertion.c:2063
+#, c-format
+msgid "Unmatched `%c%s'"
+msgstr ""
+
+#: makeinfo/insertion.c:2068
+#, c-format
+msgid "`%c%s' needs something after it"
+msgstr ""
+
+#: makeinfo/insertion.c:2074
+#, c-format
+msgid "Bad argument `%s' to `@%s', using `%s'"
+msgstr ""
+
+#: makeinfo/insertion.c:2171
+#, c-format
+msgid "@%s not meaningful inside `@%s' block"
+msgstr ""
+
+#: makeinfo/insertion.c:2180
+#, c-format
+msgid "@itemx not meaningful inside `%s' block"
+msgstr ""
+
+#: makeinfo/insertion.c:2356
+#, c-format
+msgid "%c%s found outside of an insertion block"
+msgstr ""
+
+#: makeinfo/lang.c:580
+#, c-format
+msgid "%s is not a valid ISO 639 language code"
+msgstr ""
+
+#: makeinfo/lang.c:655
+#, fuzzy, c-format
+msgid "unrecognized encoding name `%s'"
+msgstr "%s: nepoznata opcija `%c%s'\n"
+
+#: makeinfo/lang.c:663
+#, c-format
+msgid "sorry, encoding `%s' not supported"
+msgstr ""
+
+#: makeinfo/lang.c:715
+#, c-format
+msgid "invalid encoded character `%s'"
+msgstr ""
+
+#: makeinfo/lang.c:1009
+#, c-format
+msgid "%c%s expects `i' or `j' as argument, not `%c'"
+msgstr ""
+
+#: makeinfo/lang.c:1013
+#, 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:355
+#, 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:586
+#, c-format
+msgid "%cend macro not found"
+msgstr ""
+
+#: makeinfo/macro.c:624
+msgid "@quote-arg only useful for single-argument macros"
+msgstr ""
+
+#: makeinfo/macro.c:660
+#, c-format
+msgid "mismatched @end %s with @%s"
+msgstr ""
+
+#: makeinfo/makeinfo.c:184
+#, c-format
+msgid "Too many errors! Gave up.\n"
+msgstr ""
+
+#: makeinfo/makeinfo.c:302
+#, c-format
+msgid "%s:%d: warning: "
+msgstr ""
+
+#: makeinfo/makeinfo.c:321 makeinfo/makeinfo.c:2260
+#, c-format
+msgid "Misplaced %c"
+msgstr ""
+
+#: makeinfo/makeinfo.c:340
+#, c-format
+msgid "Try `%s --help' for more information.\n"
+msgstr ""
+
+#: makeinfo/makeinfo.c:343
+#, c-format
+msgid "Usage: %s [OPTION]... TEXINFO-FILE...\n"
+msgstr ""
+
+#: makeinfo/makeinfo.c:346
+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:350
+#, c-format
+msgid ""
+"General options:\n"
+" --error-limit=NUM quit after NUM errors (default %d).\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"
+" --reference-limit=NUM warn about at most NUM references (default %"
+"d).\n"
+" -v, --verbose explain what is being done.\n"
+" --version display version information and exit.\n"
+msgstr ""
+
+#: makeinfo/makeinfo.c:364
+#, 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:372
+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 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 (directory if split HTML),\n"
+msgstr ""
+
+#: makeinfo/makeinfo.c:386
+#, c-format
+msgid ""
+"Options for Info and plain text:\n"
+" --enable-encoding output accented and special characters in\n"
+" Info output based on @documentencoding.\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\n"
+" in which they are defined (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:403
+msgid ""
+"Options for HTML:\n"
+" --css-include=FILE include FILE in HTML <style> output;\n"
+" read stdin if FILE is -.\n"
+msgstr ""
+
+#: makeinfo/makeinfo.c:409
+#, 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:416
+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:425
+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:444
+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:452
+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:603
+#, c-format
+msgid "%s: Ignoring unrecognized TEXINFO_OUTPUT_FORMAT value `%s'.\n"
+msgstr ""
+
+#: makeinfo/makeinfo.c:647 makeinfo/makeinfo.c:673 makeinfo/makeinfo.c:692
+#: makeinfo/makeinfo.c:722 makeinfo/makeinfo.c:743
+#, c-format
+msgid "%s: %s arg must be numeric, not `%s'.\n"
+msgstr ""
+
+#: makeinfo/makeinfo.c:660
+#, fuzzy, c-format
+msgid "%s: could not open macro expansion output `%s'"
+msgstr "Ne mogu kreirati izlaznu datoteku `%s'."
+
+#: makeinfo/makeinfo.c:665
+#, c-format
+msgid "%s: ignoring second macro expansion output `%s'.\n"
+msgstr ""
+
+#: makeinfo/makeinfo.c:707
+#, c-format
+msgid "%s: --paragraph-indent arg must be numeric/`none'/`asis', not `%s'.\n"
+msgstr ""
+
+#: makeinfo/makeinfo.c:732
+#, c-format
+msgid "%s: --footnote-style arg must be `separate' or `end', not `%s'.\n"
+msgstr ""
+
+#: makeinfo/makeinfo.c:806
+#, c-format
+msgid "%s: missing file argument.\n"
+msgstr ""
+
+#: makeinfo/makeinfo.c:997 makeinfo/makeinfo.c:3991
+#, c-format
+msgid "Multiline command %c%s used improperly"
+msgstr ""
+
+#: makeinfo/makeinfo.c:1000
+#, c-format
+msgid "Expected `%s'"
+msgstr ""
+
+#: makeinfo/makeinfo.c:1479
+#, c-format
+msgid "Can't create directory `%s': %s"
+msgstr ""
+
+#: makeinfo/makeinfo.c:1525
+#, c-format
+msgid "No `%s' found in `%s'"
+msgstr ""
+
+#: makeinfo/makeinfo.c:1605
+#, c-format
+msgid "%s: Skipping macro expansion to stdout as Info output is going there.\n"
+msgstr ""
+
+#: makeinfo/makeinfo.c:1638
+#, c-format
+msgid "Making %s file `%s' from `%s'.\n"
+msgstr ""
+
+#: makeinfo/makeinfo.c:1673
+#, c-format
+msgid "This is %s, produced by makeinfo version %s from %s.\n"
+msgstr ""
+
+#: makeinfo/makeinfo.c:1709
+#, c-format
+msgid ""
+"%s: Removing macro output file `%s' due to errors; use --force to preserve.\n"
+msgstr ""
+
+#: makeinfo/makeinfo.c:1773
+#, c-format
+msgid "%s: Removing output file `%s' due to errors; use --force to preserve.\n"
+msgstr ""
+
+#: makeinfo/makeinfo.c:2034
+#, c-format
+msgid "Unknown command `%s'"
+msgstr ""
+
+#: makeinfo/makeinfo.c:2056
+#, c-format
+msgid "Use braces to give a command as an argument to @%s"
+msgstr ""
+
+#: makeinfo/makeinfo.c:2314
+#, c-format
+msgid "%c%s expected braces"
+msgstr ""
+
+#: makeinfo/makeinfo.c:2327
+msgid "Unmatched }"
+msgstr ""
+
+#: makeinfo/makeinfo.c:2375
+msgid "NO_NAME!"
+msgstr ""
+
+#: makeinfo/makeinfo.c:2396
+#, c-format
+msgid "%c%s missing close brace"
+msgstr ""
+
+#: makeinfo/makeinfo.c:3309
+#, c-format
+msgid "@image file `%s' (for HTML) not readable: %s"
+msgstr ""
+
+#: makeinfo/makeinfo.c:3315
+#, fuzzy, c-format
+msgid "No such file `%s'"
+msgstr "Nema menija u èvoru `%s'."
+
+#: makeinfo/makeinfo.c:3447
+#, c-format
+msgid "@image file `%s' (for text) unreadable: %s"
+msgstr ""
+
+#: makeinfo/makeinfo.c:3456
+msgid "@image missing filename argument"
+msgstr ""
+
+#: makeinfo/makeinfo.c:3675
+#, c-format
+msgid "undefined flag: %s"
+msgstr ""
+
+#: makeinfo/makeinfo.c:3676
+#, c-format
+msgid "{No value for `%s'}"
+msgstr ""
+
+#: makeinfo/makeinfo.c:3728
+#, c-format
+msgid "%c%s requires a name"
+msgstr ""
+
+#: makeinfo/makeinfo.c:3834
+#, c-format
+msgid "Reached eof before matching @end %s"
+msgstr ""
+
+#: makeinfo/makeinfo.c:4082
+#, 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:254
+#, c-format
+msgid "ignoring stray text `%s' after @multitable"
+msgstr ""
+
+#: makeinfo/multi.c:393
+#, c-format
+msgid "Too many columns in multitable item (max %d)"
+msgstr ""
+
+#: makeinfo/multi.c:555
+#, c-format
+msgid "[unexpected] cannot select column #%d in multitable"
+msgstr ""
+
+#: makeinfo/multi.c:584
+msgid "ignoring @tab outside of multitable"
+msgstr ""
+
+#: makeinfo/multi.c:632
+#, c-format
+msgid "** Multicolumn output from last row:\n"
+msgstr ""
+
+#: makeinfo/multi.c:635
+#, c-format
+msgid "* column #%d: output = %s\n"
+msgstr ""
+
+#: makeinfo/node.c:280
+#, c-format
+msgid "Node `%s' previously defined at line %d"
+msgstr ""
+
+#: makeinfo/node.c:648
+#, c-format
+msgid "Formatting node %s...\n"
+msgstr ""
+
+#: makeinfo/node.c:716
+#, c-format
+msgid "Node `%s' requires a sectioning command (e.g., %c%s)"
+msgstr ""
+
+#: makeinfo/node.c:879
+#, c-format
+msgid "No node name specified for `%c%s' command"
+msgstr ""
+
+#: makeinfo/node.c:920 makeinfo/node.c:1151
+#, c-format
+msgid "Anchor `%s' and node `%s' map to the same file name"
+msgstr ""
+
+#: makeinfo/node.c:923
+msgid "This @anchor command ignored; references to it will not work"
+msgstr ""
+
+#: makeinfo/node.c:925 makeinfo/node.c:1154
+msgid "Rename this anchor or use the `--no-split' option"
+msgstr ""
+
+#: makeinfo/node.c:955
+#, c-format
+msgid "Unexpected string at end of split-HTML file `%s'"
+msgstr ""
+
+#: makeinfo/node.c:991
+msgid "Next:"
+msgstr ""
+
+#: makeinfo/node.c:1007
+msgid "Previous:"
+msgstr ""
+
+#: makeinfo/node.c:1021
+msgid "Up:"
+msgstr ""
+
+#: makeinfo/node.c:1148
+#, c-format
+msgid "Anchors `%s' and `%s' map to the same file name"
+msgstr ""
+
+#: makeinfo/node.c:1153
+msgid "@anchor command ignored; references to it will not work"
+msgstr ""
+
+#: makeinfo/node.c:1347
+#, c-format
+msgid "%s reference to nonexistent node `%s' (perhaps incorrect sectioning?)"
+msgstr ""
+
+#: makeinfo/node.c:1363
+msgid "Menu"
+msgstr ""
+
+#: makeinfo/node.c:1365
+msgid "Cross"
+msgstr ""
+
+#: makeinfo/node.c:1447
+#, c-format
+msgid "Next field of node `%s' not pointed to (perhaps incorrect sectioning?)"
+msgstr ""
+
+#: makeinfo/node.c:1450
+#, c-format
+msgid "This node (%s) has the bad Prev"
+msgstr ""
+
+#: makeinfo/node.c:1462
+msgid "Prev"
+msgstr ""
+
+#: makeinfo/node.c:1505
+#, c-format
+msgid "Prev field of node `%s' not pointed to"
+msgstr ""
+
+#: makeinfo/node.c:1509
+#, c-format
+msgid "This node (%s) has the bad Next"
+msgstr ""
+
+#: makeinfo/node.c:1521
+#, c-format
+msgid "`%s' has no Up field (perhaps incorrect sectioning?)"
+msgstr ""
+
+#: makeinfo/node.c:1524
+msgid "Up"
+msgstr ""
+
+#: makeinfo/node.c:1590
+#, c-format
+msgid "Node `%s' lacks menu item for `%s' despite being its Up target"
+msgstr ""
+
+#: makeinfo/node.c:1619
+#, c-format
+msgid "node `%s' has been referenced %d times"
+msgstr ""
+
+#: makeinfo/node.c:1633
+#, c-format
+msgid "unreferenced node `%s'"
+msgstr ""
+
+#: makeinfo/node.c:1723
+#, c-format
+msgid "Removing %s\n"
+msgstr ""
+
+#: makeinfo/node.c:1727
+#, 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:562
+#, c-format
+msgid "Internal error (search_sectioning) \"%s\"!"
+msgstr ""
+
+#: makeinfo/sectioning.c:623
+#, c-format
+msgid "%c%s is obsolete; use %c%s instead"
+msgstr ""
+
+#: makeinfo/sectioning.c:639
+#, c-format
+msgid "Node with %ctop as a section already exists"
+msgstr ""
+
+#: makeinfo/sectioning.c:647
+#, c-format
+msgid "Here is the %ctop node"
+msgstr ""
+
+#: makeinfo/sectioning.c:663
+#, c-format
+msgid "%ctop used before %cnode, defaulting to %s"
+msgstr ""
+
+#: makeinfo/toc.c:197 makeinfo/toc.c:271 makeinfo/toc.c:273
+msgid "Table of Contents"
+msgstr ""
+
+#: makeinfo/toc.c:304 makeinfo/toc.c:337 makeinfo/toc.c:339
+msgid "Short Contents"
+msgstr ""
+
+#: makeinfo/xml.c:1605
+#, c-format
+msgid "@image file `%s' unreadable: %s"
+msgstr ""
+
+#: makeinfo/xml.c:2097
+msgid ""
+"@headitem as the last item of @multitable produces invalid Docbook documents"
+msgstr ""
+
+#: util/install-info.c:154
+#, c-format
+msgid "%s: warning: "
+msgstr ""
+
+#: util/install-info.c:203
+#, c-format
+msgid " for %s"
+msgstr ""
+
+#: util/install-info.c:426
+#, c-format
+msgid "\tTry `%s --help' for a complete list of options.\n"
+msgstr ""
+
+#: util/install-info.c:434
+#, c-format
+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 ""
+
+#: util/install-info.c:488
+#, 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 ""
+
+#: util/install-info.c:513
+#, c-format
+msgid "%s: could not read (%s) and could not create (%s)\n"
+msgstr ""
+
+#: util/install-info.c:600
+#, c-format
+msgid "%s: empty file"
+msgstr ""
+
+#: util/install-info.c:913 util/install-info.c:953
+msgid "START-INFO-DIR-ENTRY without matching END-INFO-DIR-ENTRY"
+msgstr ""
+
+#: util/install-info.c:948
+msgid "END-INFO-DIR-ENTRY without matching START-INFO-DIR-ENTRY"
+msgstr ""
+
+#: util/install-info.c:1191 util/install-info.c:1201
+#, c-format
+msgid "%s: already have dir file: %s\n"
+msgstr ""
+
+#: util/install-info.c:1236
+#, c-format
+msgid "%s: Specify the Info file only once.\n"
+msgstr ""
+
+#: util/install-info.c:1284
+#, c-format
+msgid "excess command line argument `%s'"
+msgstr ""
+
+#: util/install-info.c:1288
+msgid "No input file specified; try --help for more information."
+msgstr ""
+
+#: util/install-info.c:1291
+msgid "No dir file specified; try --help for more information."
+msgstr ""
+
+#: util/install-info.c:1313
+#, c-format
+msgid "no info dir entry in `%s'"
+msgstr ""
+
+#: util/install-info.c:1426
+#, c-format
+msgid "menu item `%s' already exists, for file `%s'"
+msgstr ""
+
+#: util/install-info.c:1449
+#, c-format
+msgid "no entries found for `%s'; nothing deleted"
+msgstr ""
+
+#: util/texindex.c:252
+msgid "display this help and exit"
+msgstr ""
+
+#: util/texindex.c:254
+msgid "keep temporary files around after processing"
+msgstr ""
+
+#: util/texindex.c:256
+msgid "do not keep temporary files around after processing (default)"
+msgstr ""
+
+#: util/texindex.c:258
+msgid "send output to FILE"
+msgstr ""
+
+#: util/texindex.c:260
+msgid "display version information and exit"
+msgstr ""
+
+#: util/texindex.c:270
+#, c-format
+msgid "Usage: %s [OPTION]... FILE...\n"
+msgstr ""
+
+#: util/texindex.c:271
+#, c-format
+msgid "Generate a sorted index for each TeX output FILE.\n"
+msgstr ""
+
+#: util/texindex.c:274
+#, c-format
+msgid "Usually FILE... is specified as `foo.%c%c' for a document `foo.texi'.\n"
+msgstr ""
+
+#: util/texindex.c:276
+#, c-format
+msgid ""
+"\n"
+"Options:\n"
+msgstr ""
+
+#: util/texindex.c:876 util/texindex.c:910 util/texindex.c:983
+#: util/texindex.c:1011
+#, c-format
+msgid "%s: not a texinfo index file"
+msgstr ""
+
+#: util/texindex.c:968
+#, c-format
+msgid "failure reopening %s"
+msgstr ""
+
+#: util/texindex.c:1218
+#, c-format
+msgid "No page number in %s"
+msgstr ""
+
+#: util/texindex.c:1291
+#, c-format
+msgid "entry %s follows an entry with a secondary name"
+msgstr ""
+
+#~ msgid "\"\" is invalid"
+#~ msgstr "\"\" je neispravno"
+
+#~ msgid "\\%-10[scroll-forward] Scroll forward 1 line.\n"
+#~ msgstr "\\%-10[scroll-forward] 'Skrolaj' naprijed 1 redak.\n"
+
+#~ msgid "\\%-10[scroll-backward] Scroll backward 1 line.\n"
+#~ msgstr "\\%-10[scroll-backward] 'Skrolaj' unazad 1 redak.\n"
+
+#~ 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/macros/texinfo/contrib/texinfo-hu/texinfo/po/insert-header.sin b/macros/texinfo/contrib/texinfo-hu/texinfo/po/insert-header.sin
new file mode 100644
index 0000000000..b26de01f6c
--- /dev/null
+++ b/macros/texinfo/contrib/texinfo-hu/texinfo/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/macros/texinfo/contrib/texinfo-hu/texinfo/po/ja.gmo b/macros/texinfo/contrib/texinfo-hu/texinfo/po/ja.gmo
new file mode 100644
index 0000000000..ff3f98bcc5
--- /dev/null
+++ b/macros/texinfo/contrib/texinfo-hu/texinfo/po/ja.gmo
Binary files differ
diff --git a/macros/texinfo/contrib/texinfo-hu/texinfo/po/ja.po b/macros/texinfo/contrib/texinfo-hu/texinfo/po/ja.po
new file mode 100644
index 0000000000..c94fc3ad93
--- /dev/null
+++ b/macros/texinfo/contrib/texinfo-hu/texinfo/po/ja.po
@@ -0,0 +1,3355 @@
+# 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: 2004-12-21 16:20-0800\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"
+
+#: info/echo-area.c:284 info/session.c:689
+msgid "Move forward a character"
+msgstr "°ìʸ»úʬ¿Ê¤á¤ë"
+
+#: info/echo-area.c:296 info/session.c:705
+msgid "Move backward a character"
+msgstr "°ìʸ»úʬÌ᤹"
+
+#: info/echo-area.c:308
+msgid "Move to the start of this line"
+msgstr "¹ÔƬ¤Ë°ÜÆ°"
+
+#: info/echo-area.c:313
+msgid "Move to the end of this line"
+msgstr "¹ÔËö¤Ë°ÜÆ°"
+
+#: info/echo-area.c:321 info/session.c:723
+msgid "Move forward a word"
+msgstr "ñ¸ì°ì¤Äʬ¿Ê¤á¤ë"
+
+#: info/echo-area.c:361 info/session.c:772
+msgid "Move backward a word"
+msgstr "ñ¸ì°ì¤ÄʬÌ᤹"
+
+#: info/echo-area.c:401
+msgid "Delete the character under the cursor"
+msgstr "¥«¡¼¥½¥ë°ÌÃÖ¤Îʸ»ú¤òºï½ü"
+
+#: info/echo-area.c:431
+msgid "Delete the character behind the cursor"
+msgstr "¥«¡¼¥½¥ë¤Î¸å¤í¤Îʸ»ú¤òºï½ü"
+
+#: info/echo-area.c:452
+msgid "Cancel or quit operation"
+msgstr "¥­¥ã¥ó¥»¥ë¡¢Áàºî¤Î¼è¤ê»ß¤á"
+
+#: info/echo-area.c:467
+msgid "Accept (or force completion of) this line"
+msgstr "¤³¤Î¹Ô¤ò¼õ¤±Æþ¤ì¤ë(Ëô¤ÏÊä´°¤µ¤»¤ë)"
+
+#: info/echo-area.c:472
+msgid "Insert next character verbatim"
+msgstr "¼¡¤Îʸ»ú¤ò¤½¤Î¤Þ¤ÞÁÞÆþ¤¹¤ë"
+
+#: info/echo-area.c:480
+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:653
+msgid "Kill the word preceding the cursor"
+msgstr "ñ¸ì¤Î¥«¡¼¥½¥ë¤è¤êÁ°¤òÀÚ¤ê¼è¤ë"
+
+#: info/echo-area.c:868 info/echo-area.c:924
+msgid "No completions"
+msgstr "Êä´°¸õÊ䤬¤¢¤ê¤Þ¤»¤ó"
+
+#: info/echo-area.c:870
+msgid "Not complete"
+msgstr "Êä´°¤Ç¤­¤Þ¤»¤ó"
+
+#: info/echo-area.c:911
+msgid "List possible completions"
+msgstr "Êä´°¥ê¥¹¥È"
+
+#: info/echo-area.c:928
+msgid "Sole completion"
+msgstr "Êä´°¤ò¹Ê¤ê¹þ¤ß¤Þ¤·¤¿"
+
+#: info/echo-area.c:937
+msgid "One completion:\n"
+msgstr "1 ¤Ä¤ÎÊä´°:\n"
+
+#: info/echo-area.c:938
+#, c-format
+msgid "%d completions:\n"
+msgstr "%d ¸Ä¤ÎÊä´°\n"
+
+#: info/echo-area.c:1085
+msgid "Insert completion"
+msgstr "Êä´°¤òÁÞÆþ"
+
+#: info/echo-area.c:1220
+msgid "Building completions..."
+msgstr "Êä´°¥ê¥¹¥È¤òºîÀ®Ãæ..."
+
+#: info/echo-area.c:1340
+msgid "Scroll the completions window"
+msgstr "Êä´°¥¦¥£¥ó¥É¥¦¤ò¥¹¥¯¥í¡¼¥ë"
+
+#: info/footnotes.c:213
+msgid "Footnotes could not be displayed"
+msgstr "µÓÃí¤òɽ¼¨¤Ç¤­¤Þ¤»¤ó"
+
+#: info/footnotes.c:239
+msgid "Show the footnotes associated with this node in another window"
+msgstr "¾¤Î¥¦¥£¥ó¥É¥¦Æâ¤Ë¤³¤Î¥Î¡¼¥É¤È´ØÏ¢¤·¤¿µÓÃí¤òɽ¼¨"
+
+#: info/footnotes.h:26
+msgid "---------- Footnotes ----------"
+msgstr "------------ µÓÃí ------------"
+
+#: info/indices.c:172
+msgid "Look up a string in the index for this file"
+msgstr "¤³¤Î¥Õ¥¡¥¤¥ë¤Î¸«½Ð¤·¤«¤éʸ»úÎó¤ò¸¡º÷¤¹¤ë"
+
+#: info/indices.c:199
+msgid "Finding index entries..."
+msgstr "¸«½Ð¤·¹àÌܤò¸«¤Ä¤±¤Æ¤¤¤Þ¤¹"
+
+#: info/indices.c:207
+msgid "No indices found."
+msgstr "¹àÌܤ¬¸«¤Ä¤«¤ê¤Þ¤»¤ó"
+
+#: info/indices.c:217
+msgid "Index entry: "
+msgstr "¸«½Ð¤·¹àÌÜ: "
+
+#: info/indices.c:325
+msgid ""
+"Go to the next matching index item from the last `\\[index-search]' command"
+msgstr "ľÁ°¤Î `\\[index-search]' ¥³¥Þ¥ó¥É¤È°ìÃפ·¤¿¸«½Ð¤·¥¢¥¤¥Æ¥à¤òé¤ë"
+
+#: info/indices.c:335
+msgid "No previous index search string."
+msgstr "Á°¤Î¸«½Ð¤·¸¡º÷ʸ»úÎ󤬤¢¤ê¤Þ¤»¤ó"
+
+#: info/indices.c:342
+msgid "No index entries."
+msgstr "¸«½Ð¤·¹àÌܤ¬¤¢¤ê¤Þ¤»¤ó"
+
+#: info/indices.c:375
+#, fuzzy, c-format
+msgid "No %sindex entries containing `%s'."
+msgstr "\"%2$s\" ¤ò´Þ¤à%1$s¸«½Ð¤·¹àÌܤ¬¤¢¤ê¤Þ¤»¤ó¡£"
+
+#: info/indices.c:376
+msgid "more "
+msgstr "¤³¤ì°Ê¾å¤Î"
+
+#: info/indices.c:386
+msgid "CAN'T SEE THIS"
+msgstr "*¤³¤ì¤ò¸«¤é¤ì¤Þ¤»¤ó*"
+
+#: info/indices.c:422
+#, 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:541
+#, fuzzy, c-format
+msgid "Scanning indices of `%s'..."
+msgstr "\"%s\" ¤Î¸«½Ð¤·¤òÄ´¤Ù¤Æ¤¤¤Þ¤¹..."
+
+#: info/indices.c:596
+#, fuzzy, c-format
+msgid "No available info files have `%s' in their indices."
+msgstr "¥¤¥ó¥Ç¥Ã¥¯¥¹¤Ë \"%s\" ¤ò»ý¤Ã¤Æ¤¤¤ë info ¥Õ¥¡¥¤¥ë¤¬ÍÑ°Õ¤µ¤ì¤Æ¤¤¤Þ¤»¤ó¡£"
+
+#: info/indices.c:622
+msgid "Grovel all known info file's indices for a string and build a menu"
+msgstr "Á´¤Æ¤Î info ¥Õ¥¡¥¤¥ëʸ»úÎ󤫤鸫½Ð¤·¤òÁöºº¤·¡¢¥á¥Ë¥å¡¼¤òºîÀ®"
+
+#: info/indices.c:626
+msgid "Index apropos: "
+msgstr "¸ì¶ç¤ò´Þ¤à¹àÌܤò¸¡º÷: "
+
+#: info/indices.c:654
+#, 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:295 makeinfo/makeinfo.c:766 util/install-info.c:1266
+#: util/texindex.c:343
+#, fuzzy, c-format
+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"
+
+#: info/info.c:498
+#, c-format
+msgid "no index entries found for `%s'\n"
+msgstr "`%s' ¤ËÂФ¹¤ë¹àÌܤ¬¸«¤Ä¤«¤ê¤Þ¤»¤ó\n"
+
+#: info/info.c:590
+#, fuzzy
+msgid " -b, --speech-friendly be friendly to speech synthesizers.\n"
+msgstr " --speech-friendly ²»À¼¹çÀ®´ï¤ËÂФ¹¤ë¿ÆÏÂÀ­¤ò¹â¤á¤ë\n"
+
+#: info/info.c:597
+#, fuzzy, c-format
+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 -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"
+
+#: info/info.c:635 info/infokey.c:918 makeinfo/makeinfo.c:465
+#: util/install-info.c:466 util/texindex.c:292
+#, 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:669
+#, c-format
+msgid "Cannot find node `%s'."
+msgstr "`%s' ¥Î¡¼¥É¤¬¸«¤Ä¤«¤ê¤Þ¤»¤ó¡£"
+
+#: info/info.c:670
+#, c-format
+msgid "Cannot find node `(%s)%s'."
+msgstr "`(%s)%s' ¥Î¡¼¥É¤¬¸«¤Ä¤«¤ê¤Þ¤»¤ó"
+
+#: info/info.c:671
+msgid "Cannot find a window!"
+msgstr "¥¦¥£¥ó¥É¥¦¤¬¸«¤Ä¤«¤ê¤Þ¤»¤ó"
+
+#: info/info.c:672
+msgid "Point doesn't appear within this window's node!"
+msgstr "¤³¤Î¥¦¥£¥ó¥É¥¦¥Î¡¼¥ÉÆâ¤Ë¥Ý¥¤¥ó¥È¤¬¸½¤ì¤Þ¤»¤ó¡ª"
+
+#: info/info.c:673
+msgid "Cannot delete the last window."
+msgstr "ºÇ¸å¤Î¥¦¥£¥ó¥É¥¦¤Ïºï½ü¤Ç¤­¤Þ¤»¤ó"
+
+#: info/info.c:674
+msgid "No menu in this node."
+msgstr "¤³¤Î¥Î¡¼¥É¤Ë¥á¥Ë¥å¡¼¤Ï¤¢¤ê¤Þ¤»¤ó¡£"
+
+#: info/info.c:675
+msgid "No footnotes in this node."
+msgstr "¤³¤Î¥Î¡¼¥É¤ËµÓÃí¤Ï¤¢¤ê¤Þ¤»¤ó¡£"
+
+#: info/info.c:676
+msgid "No cross references in this node."
+msgstr "¤³¤Î¥Î¡¼¥É¤ËÁê¸ß»²¾È¤Ï¤¢¤ê¤Þ¤»¤ó¡£"
+
+#: info/info.c:677
+#, c-format
+msgid "No `%s' pointer for this node."
+msgstr "¤³¤Î¥Î¡¼¥É¤Î `%s' ¥Ý¥¤¥ó¥¿¤¬¤¢¤ê¤Þ¤»¤ó¡£"
+
+#: info/info.c:678
+#, c-format
+msgid "Unknown Info command `%c'; try `?' for help."
+msgstr "̤ÃΤΠInfo ¥³¥Þ¥ó¥É `%c' -- `?' ¤Ç¥Ø¥ë¥×¤ò¸«¤Æ¤¯¤À¤µ¤¤¡£"
+
+#: info/info.c:679
+#, c-format
+msgid "Terminal type `%s' is not smart enough to run Info."
+msgstr "üËö¥¿¥¤¥× `%s' ¤Ï Info ¤òÆ°¤«¤»¤ë¤Û¤ÉÍø¸ý¤Ç¤Ï¤¢¤ê¤Þ¤»¤ó"
+
+#: info/info.c:680
+msgid "You are already at the last page of this node."
+msgstr "¤³¤³¤Ï¤â¤¦¡¢¤³¤Î¥Î¡¼¥É¤ÎºÇ½ª¥Ú¡¼¥¸¤Ç¤¹¡£"
+
+#: info/info.c:681
+msgid "You are already at the first page of this node."
+msgstr "¤³¤³¤Ï¤â¤¦¡¢¤³¤Î¥Î¡¼¥É¤ÎºÇ½é¤Î¥Ú¡¼¥¸¤Ç¤¹¡£"
+
+#: info/info.c:682
+msgid "Only one window."
+msgstr "Í£°ì¤Î¥¦¥£¥ó¥É¥¦¡£"
+
+#: info/info.c:683
+msgid "Resulting window would be too small."
+msgstr "·ë²Ì¥¦¥£¥ó¥É¥¦¤¬¾®¤µ¤¹¤®¤ëÍͤǤ¹"
+
+#: info/info.c:684
+msgid "Not enough room for a help window, please delete a window."
+msgstr ""
+"¥Ø¥ë¥×¥¦¥£¥ó¥É¥¦ÍѤξì½ê¤¬Â­¤ê¤Þ¤»¤ó¡¢¥¦¥£¥ó¥É¥¦¤ò°ì¤Äºï½ü¤·¤Æ¤¯¤À¤µ¤¤¡£"
+
+#: info/infodoc.c:46 info/infodoc.c:95
+#, fuzzy
+msgid ""
+"Basic Commands in Info Windows\n"
+"******************************\n"
+msgstr "Info ¥¦¥£¥ó¥É¥¦Æâ¤Î´ðËÜ¥³¥Þ¥ó¥É\n"
+
+#: info/infodoc.c:49
+#, fuzzy
+msgid "\\%-10[quit-help] Quit this help.\n"
+msgstr " %-10s ¤³¤Î¥Ø¥ë¥×¤ò½ªÎ»¤¹¤ë¡£\n"
+
+#: info/infodoc.c:50
+#, fuzzy
+msgid "\\%-10[quit] Quit Info altogether.\n"
+msgstr " %-10s Info ¤â°ì½ï¤Ë½ªÎ»¤¹¤ë¡£\n"
+
+#: info/infodoc.c:51
+#, fuzzy
+msgid "\\%-10[get-info-help-node] Invoke the Info tutorial.\n"
+msgstr " %-10s Info ¥Á¥å¡¼¥È¥ê¥¢¥ë¤òµ¯Æ°¤¹¤ë¡£\n"
+
+#: info/infodoc.c:53 info/infodoc.c:102
+#, fuzzy
+msgid ""
+"Selecting other nodes:\n"
+"----------------------\n"
+msgstr "¾¤Î¥Î¡¼¥É¤òÁªÂò¤¹¤ë:\n"
+
+#: info/infodoc.c:55
+#, fuzzy
+msgid "\\%-10[next-node] Move to the \"next\" node of this node.\n"
+msgstr " %-10s ¤³¤Î¥Î¡¼¥É¤Î `¼¡' ¤Î¥Î¡¼¥É¤Ø°ÜÆ°¤¹¤ë¡£\n"
+
+#: info/infodoc.c:56
+#, fuzzy
+msgid "\\%-10[prev-node] Move to the \"previous\" node of this node.\n"
+msgstr " %-10s ¤³¤Î¥Î¡¼¥É¤Î `Á°' ¤Î¥Î¡¼¥É¤Ø°ÜÆ°¤¹¤ë¡£\n"
+
+#: info/infodoc.c:57
+#, fuzzy
+msgid "\\%-10[up-node] Move \"up\" from this node.\n"
+msgstr " %-10s ¤³¤Î¥Î¡¼¥É¤«¤é `¾å' ¤Ø°ÜÆ°¤¹¤ë¡£\n"
+
+#: info/infodoc.c:58
+#, fuzzy
+msgid ""
+"\\%-10[menu-item] Pick menu item specified by name.\n"
+" Picking a menu item causes another node to be selected.\n"
+msgstr ""
+" ¥á¥Ë¥å¡¼¥¢¥¤¥Æ¥à¤ÎÁªÂò¤Ç¡¢Â¾¤Î¥Î¡¼¥É¤¬ÁªÂò¤µ¤ì¤ë»ö¤Ë¤Ê¤ë¡£\n"
+
+#: info/infodoc.c:60
+#, fuzzy
+msgid ""
+"\\%-10[xref-item] Follow a cross reference. Reads name of reference.\n"
+msgstr " %-10s Áê¸ß»²¾È¤òé¤ë¡£»²¾È̾¤òÆɤ߼è¤ë¡£\n"
+
+#: info/infodoc.c:61
+#, fuzzy
+msgid "\\%-10[history-node] Move to the last node seen in this window.\n"
+msgstr " %-10s ¤³¤Î¥¦¥£¥ó¥É¥¦¤ÇºÇ¸å¤Ë¸«¤¿¥Î¡¼¥É¤Ø°ÜÆ°¤¹¤ë¡£\n"
+
+#: info/infodoc.c:62
+#, fuzzy
+msgid ""
+"\\%-10[move-to-next-xref] Skip to next hypertext link within this node.\n"
+msgstr " %-10s ¤³¤Î¥Î¡¼¥ÉÆâ¤Î¼¡¤Î¥Ï¥¤¥Ñ¡¼¥ê¥ó¥¯¤Ø¥¹¥­¥Ã¥×¤¹¤ë¡£\n"
+
+#: info/infodoc.c:63
+#, fuzzy
+msgid ""
+"\\%-10[move-to-prev-xref] Skip to previous hypertext link within this "
+"node.\n"
+msgstr " %-10s ¤³¤Î¥Î¡¼¥ÉÆâ¤Î¼¡¤Î¥Ï¥¤¥Ñ¡¼¥ê¥ó¥¯¤Ø¥¹¥­¥Ã¥×¤¹¤ë¡£\n"
+
+#: info/infodoc.c:64
+#, fuzzy
+msgid ""
+"\\%-10[select-reference-this-line] Follow the hypertext link under cursor.\n"
+msgstr " %-10s ¥«¡¼¥½¥ë°ÌÃ֤Υϥ¤¥Ñ¡¼¥ê¥ó¥¯¤òé¤ë¡£\n"
+
+#: info/infodoc.c:65
+#, fuzzy
+msgid ""
+"\\%-10[dir-node] Move to the `directory' node. Equivalent to `\\[goto-"
+"node] (DIR)'.\n"
+msgstr " %-10s `¥Ç¥£¥ì¥¯¥È¥ê' ¥Î¡¼¥É¤Ø°ÜÆ°¡£`g (DIR)' ¤ÈƱ¤¸¡£\n"
+
+#: info/infodoc.c:66
+#, fuzzy
+msgid ""
+"\\%-10[top-node] Move to the Top node. Equivalent to `\\[goto-node] Top'.\n"
+msgstr " %-10s Top ¥Î¡¼¥É¤Ø°ÜÆ°¡£`g Top' ¤ÈƱ¤¸¡£\n"
+
+#: info/infodoc.c:68 info/infodoc.c:116
+#, fuzzy
+msgid ""
+"Moving within a node:\n"
+"---------------------\n"
+msgstr "¥Î¡¼¥ÉÆâ¤Ç¤Î°ÜÆ°:\n"
+
+#: info/infodoc.c:70
+#, fuzzy
+msgid "\\%-10[beginning-of-node] Go to the beginning of this node.\n"
+msgstr " %-10s ¸½ºß¤Î¥Î¡¼¥É¤ÎÀèƬ¤Ø°ÜÆ°¤¹¤ë¡£\n"
+
+#: info/infodoc.c:71
+#, fuzzy
+msgid "\\%-10[end-of-node] Go to the end of this node.\n"
+msgstr " %-10s ¸½ºß¤Î¥Î¡¼¥É¤ÎÀèƬ¤Ø°ÜÆ°¤¹¤ë¡£\n"
+
+#: info/infodoc.c:72
+#, fuzzy
+msgid "\\%-10[next-line] Scroll forward 1 line.\n"
+msgstr " %-10s 1 ¹ÔʬÁ°Êý¤Ø¤¹¤¹¤á¤ë¡£\n"
+
+#: info/infodoc.c:73
+#, fuzzy
+msgid "\\%-10[prev-line] Scroll backward 1 line.\n"
+msgstr " %-10s 1 ¹Ôʬ¸åÊý¤ØÌ᤹¡£\n"
+
+#: info/infodoc.c:74
+#, fuzzy
+msgid "\\%-10[scroll-forward] Scroll forward a page.\n"
+msgstr " %-10s 1 ¥Ú¡¼¥¸Ê¬Á°Êý¤Ø¿Ê¤á¤ë¡£\n"
+
+#: info/infodoc.c:75
+#, fuzzy
+msgid "\\%-10[scroll-backward] Scroll backward a page.\n"
+msgstr " %-10s 1 ¥Ú¡¼¥¸Ê¬¸åÊý¤ØÌ᤹¡£\n"
+
+#: info/infodoc.c:77 info/infodoc.c:125
+#, fuzzy
+msgid ""
+"Other commands:\n"
+"---------------\n"
+msgstr "¤½¤Î¾¤Î¥³¥Þ¥ó¥É:\n"
+
+#: info/infodoc.c:79
+#, fuzzy
+msgid "\\%-10[menu-digit] Pick first ... ninth item in node's menu.\n"
+msgstr " %-10s ¥Î¡¼¥É¥á¥Ë¥å¡¼¤ÎºÇ½é¤«¤é 9 ÈÖÌÜËø¤Î¥¢¥¤¥Æ¥à¤òÁªÂò¤¹¤ë¡£\n"
+
+#: info/infodoc.c:80
+#, fuzzy
+msgid "\\%-10[last-menu-item] Pick last item in node's menu.\n"
+msgstr " %-10s ¥Î¡¼¥É¥á¥Ë¥å¡¼¤ÎºÇ¸å¤Î¥¢¥¤¥Æ¥à¤òÁªÂò¤¹¤ë¡£\n"
+
+#: info/infodoc.c:81
+#, fuzzy
+msgid ""
+"\\%-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"
+msgstr " ºÇ½é¤Ë¸«¤Ä¤«¤Ã¤¿¹àÌܤ¬»²¾È¤·¤Æ¤¤¤ë¥Î¡¼¥É¤òÁªÂò¤¹¤ë¡£\n"
+
+#: info/infodoc.c:83
+#, 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"
+
+#: info/infodoc.c:85
+#, 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"
+
+#: info/infodoc.c:87
+#, 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"
+
+#: info/infodoc.c:98
+#, c-format
+msgid " %-10s Quit this help.\n"
+msgstr " %-10s ¤³¤Î¥Ø¥ë¥×¤ò½ªÎ»¤¹¤ë¡£\n"
+
+#: info/infodoc.c:99
+#, c-format
+msgid " %-10s Quit Info altogether.\n"
+msgstr " %-10s Info ¤â°ì½ï¤Ë½ªÎ»¤¹¤ë¡£\n"
+
+#: info/infodoc.c:100
+#, c-format
+msgid " %-10s Invoke the Info tutorial.\n"
+msgstr " %-10s Info ¥Á¥å¡¼¥È¥ê¥¢¥ë¤òµ¯Æ°¤¹¤ë¡£\n"
+
+#: info/infodoc.c:104
+#, c-format
+msgid " %-10s Move to the `next' node of this node.\n"
+msgstr " %-10s ¤³¤Î¥Î¡¼¥É¤Î `¼¡' ¤Î¥Î¡¼¥É¤Ø°ÜÆ°¤¹¤ë¡£\n"
+
+#: info/infodoc.c:105
+#, c-format
+msgid " %-10s Move to the `previous' node of this node.\n"
+msgstr " %-10s ¤³¤Î¥Î¡¼¥É¤Î `Á°' ¤Î¥Î¡¼¥É¤Ø°ÜÆ°¤¹¤ë¡£\n"
+
+#: info/infodoc.c:106
+#, c-format
+msgid " %-10s Move `up' from this node.\n"
+msgstr " %-10s ¤³¤Î¥Î¡¼¥É¤«¤é `¾å' ¤Ø°ÜÆ°¤¹¤ë¡£\n"
+
+#: info/infodoc.c:107
+#, c-format
+msgid " %-10s Pick menu item specified by name.\n"
+msgstr " %-10s ̾Á°¤Ç»ØÄꤷ¤¿¥á¥Ë¥å¡¼¥¢¥¤¥Æ¥à¤òÁªÂò¤¹¤ë¡£\n"
+
+#: info/infodoc.c:108
+msgid " Picking a menu item causes another node to be selected.\n"
+msgstr ""
+" ¥á¥Ë¥å¡¼¥¢¥¤¥Æ¥à¤ÎÁªÂò¤Ç¡¢Â¾¤Î¥Î¡¼¥É¤¬ÁªÂò¤µ¤ì¤ë»ö¤Ë¤Ê¤ë¡£\n"
+
+#: info/infodoc.c:109
+#, c-format
+msgid " %-10s Follow a cross reference. Reads name of reference.\n"
+msgstr " %-10s Áê¸ß»²¾È¤òé¤ë¡£»²¾È̾¤òÆɤ߼è¤ë¡£\n"
+
+#: info/infodoc.c:110
+#, c-format
+msgid " %-10s Move to the last node seen in this window.\n"
+msgstr " %-10s ¤³¤Î¥¦¥£¥ó¥É¥¦¤ÇºÇ¸å¤Ë¸«¤¿¥Î¡¼¥É¤Ø°ÜÆ°¤¹¤ë¡£\n"
+
+#: info/infodoc.c:111
+#, c-format
+msgid " %-10s Skip to next hypertext link within this node.\n"
+msgstr " %-10s ¤³¤Î¥Î¡¼¥ÉÆâ¤Î¼¡¤Î¥Ï¥¤¥Ñ¡¼¥ê¥ó¥¯¤Ø¥¹¥­¥Ã¥×¤¹¤ë¡£\n"
+
+#: info/infodoc.c:112
+#, c-format
+msgid " %-10s Follow the hypertext link under cursor.\n"
+msgstr " %-10s ¥«¡¼¥½¥ë°ÌÃ֤Υϥ¤¥Ñ¡¼¥ê¥ó¥¯¤òé¤ë¡£\n"
+
+#: info/infodoc.c:113
+#, c-format
+msgid " %-10s Move to the `directory' node. Equivalent to `g (DIR)'.\n"
+msgstr " %-10s `¥Ç¥£¥ì¥¯¥È¥ê' ¥Î¡¼¥É¤Ø°ÜÆ°¡£`g (DIR)' ¤ÈƱ¤¸¡£\n"
+
+#: info/infodoc.c:114
+#, c-format
+msgid " %-10s Move to the Top node. Equivalent to `g Top'.\n"
+msgstr " %-10s Top ¥Î¡¼¥É¤Ø°ÜÆ°¡£`g Top' ¤ÈƱ¤¸¡£\n"
+
+#: info/infodoc.c:118
+#, c-format
+msgid " %-10s Scroll forward a page.\n"
+msgstr " %-10s 1 ¥Ú¡¼¥¸Ê¬Á°Êý¤Ø¿Ê¤á¤ë¡£\n"
+
+#: info/infodoc.c:119
+#, c-format
+msgid " %-10s Scroll backward a page.\n"
+msgstr " %-10s 1 ¥Ú¡¼¥¸Ê¬¸åÊý¤ØÌ᤹¡£\n"
+
+#: info/infodoc.c:120
+#, c-format
+msgid " %-10s Go to the beginning of this node.\n"
+msgstr " %-10s ¸½ºß¤Î¥Î¡¼¥É¤ÎÀèƬ¤Ø°ÜÆ°¤¹¤ë¡£\n"
+
+#: info/infodoc.c:121
+#, c-format
+msgid " %-10s Go to the end of this node.\n"
+msgstr " %-10s ¸½ºß¤Î¥Î¡¼¥É¤ÎÀèƬ¤Ø°ÜÆ°¤¹¤ë¡£\n"
+
+#: info/infodoc.c:122
+#, c-format
+msgid " %-10s Scroll forward 1 line.\n"
+msgstr " %-10s 1 ¹ÔʬÁ°Êý¤Ø¤¹¤¹¤á¤ë¡£\n"
+
+#: info/infodoc.c:123
+#, c-format
+msgid " %-10s Scroll backward 1 line.\n"
+msgstr " %-10s 1 ¹Ôʬ¸åÊý¤ØÌ᤹¡£\n"
+
+#: info/infodoc.c:127
+#, c-format
+msgid " %-10s Pick first ... ninth item in node's menu.\n"
+msgstr " %-10s ¥Î¡¼¥É¥á¥Ë¥å¡¼¤ÎºÇ½é¤«¤é 9 ÈÖÌÜËø¤Î¥¢¥¤¥Æ¥à¤òÁªÂò¤¹¤ë¡£\n"
+
+#: info/infodoc.c:128
+#, c-format
+msgid " %-10s Pick last item in node's menu.\n"
+msgstr " %-10s ¥Î¡¼¥É¥á¥Ë¥å¡¼¤ÎºÇ¸å¤Î¥¢¥¤¥Æ¥à¤òÁªÂò¤¹¤ë¡£\n"
+
+#: info/infodoc.c:129
+#, c-format
+msgid ""
+" %-10s Search for a specified string in the index entries of this Info\n"
+msgstr ""
+" %-10s ¸½ºß¤Î Info ¥Õ¥¡¥¤¥ë¤Î¥¤¥ó¥Ç¥Ã¥¯¥¹¹àÌܤǡ¢Ê¸»úÎó¤ò»ØÄꤷ¤Æ¸¡º÷¤·¡¢\n"
+
+#: info/infodoc.c:130
+msgid ""
+" file, and select the node referenced by the first entry "
+"found.\n"
+msgstr " ºÇ½é¤Ë¸«¤Ä¤«¤Ã¤¿¹àÌܤ¬»²¾È¤·¤Æ¤¤¤ë¥Î¡¼¥É¤òÁªÂò¤¹¤ë¡£\n"
+
+#: info/infodoc.c:131
+#, c-format
+msgid " %-10s Move to node specified by name.\n"
+msgstr " %-10s ̾Á°¤Ç»ØÄꤵ¤ì¤¿¥Î¡¼¥É¤Ë°ÜÆ°¤¹¤ë¡£\n"
+
+#: info/infodoc.c:132
+msgid ""
+" You may include a filename as well, as in (FILENAME)NODENAME.\n"
+msgstr ""
+" (¥Õ¥¡¥¤¥ë̾)¥Î¡¼¥É̾ ¤ÎÍͤˡ¢¥Õ¥¡¥¤¥ë̾¤ò´Þ¤á¤ë¤³¤È¤¬¤Ç¤­¤Þ"
+"¤¹¡£\n"
+
+#: info/infodoc.c:133
+#, fuzzy, c-format
+msgid " %-10s Search forward for a specified string,\n"
+msgstr " %-10s ¸½ºß¤Î Info ¥Õ¥¡¥¤¥ëÁ´ÂΤò¡¢»ØÄꤵ¤ì¤¿Ê¸»úÎó¤ÇÁ°Êý¸¡º÷¤·¡¢\n"
+
+#: info/infodoc.c:134 info/infodoc.c:136
+msgid ""
+" and select the node in which the next occurrence is found.\n"
+msgstr " ¸«¤Ä¤«¤Ã¤¿¤â¤Î¤¬´Þ¤Þ¤ì¤Æ¤¤¤ë¥Î¡¼¥É¤òÁªÂò¤¹¤ë¡£\n"
+
+#: info/infodoc.c:135
+#, fuzzy, c-format
+msgid " %-10s Search backward for a specified string\n"
+msgstr "\\\\ %-10s ¸½ºß¤Î Info ¥Õ¥¡¥¤¥ë¤ò¡¢»ØÄꤵ¤ì¤¿Ê¸»úÎó¤Ç¸åÊý¸¡º÷¤·¡¢\n"
+
+#: info/infodoc.c:316
+msgid "The current search path is:\n"
+msgstr "¸½ºß¤Î¸¡º÷¥Ñ¥¹:\n"
+
+#: info/infodoc.c:320
+msgid ""
+"Commands available in Info windows:\n"
+"\n"
+msgstr "Info ¥¦¥£¥ó¥É¥¦¤ÇÍøÍѲÄǽ¤Ê¥³¥Þ¥ó¥É:\n"
+
+#: info/infodoc.c:324
+msgid ""
+"Commands available in the echo area:\n"
+"\n"
+msgstr "¥¨¥³¡¼Îΰè¤ÇÍøÍѲÄǽ¤Ê¥³¥Þ¥ó¥É:\n"
+
+#: info/infodoc.c:347
+#, c-format
+msgid ""
+"The following commands can only be invoked via %s:\n"
+"\n"
+msgstr ""
+"°Ê²¼¤Î¥³¥Þ¥ó¥É¤Ï¡¢%s ¤òÄ̤¸¤Æ¤Î¤ßµ¯Æ°¤Ç¤­¤Þ¤¹:\n"
+"\n"
+
+#: info/infodoc.c:351
+msgid ""
+"The following commands cannot be invoked at all:\n"
+"\n"
+msgstr ""
+"°Ê²¼¤Î¥³¥Þ¥ó¥É¤Ï¡¢Á´¤¯µ¯Æ°¤¹¤ë»ö¤¬¤Ç¤­¤Þ¤»¤ó:\n"
+"\n"
+
+#: info/infodoc.c:375
+msgid "--- Use `\\[history-node]' or `\\[kill-node]' to exit ---\n"
+msgstr ""
+"--- ½ªÎ»¤¹¤ë¤Ë¤Ï `\\[history-node]' ¤« `\\[kill-node]' ¤ò»È¤Ã¤Æ¤¯¤À¤µ¤¤ ---\n"
+
+#: info/infodoc.c:485
+msgid "Display help message"
+msgstr "»È¤¤Êý¤òɽ¼¨¤¹¤ë"
+
+#: info/infodoc.c:503
+msgid "Visit Info node `(info)Help'"
+msgstr "`(info)Help' ¥Î¡¼¥É¤Ë°ÜÆ°¤¹¤ë"
+
+#: info/infodoc.c:641
+msgid "Print documentation for KEY"
+msgstr "¥­¡¼Áàºî¤òɽ¼¨¤¹¤ë"
+
+#: info/infodoc.c:653
+#, c-format
+msgid "Describe key: %s"
+msgstr "¥­¡¼¤ÎÀâÌÀ: %s"
+
+#: info/infodoc.c:664
+#, c-format
+msgid "ESC %s is undefined."
+msgstr "ESC %s ¤ÏÄêµÁ¤µ¤ì¤Æ¤¤¤Þ¤»¤ó¡£"
+
+#: info/infodoc.c:680 info/infodoc.c:709
+#, c-format
+msgid "%s is undefined."
+msgstr "%s ¤ÏÄêµÁ¤µ¤ì¤Æ¤¤¤Þ¤»¤ó"
+
+#: info/infodoc.c:730
+#, c-format
+msgid "%s is defined to %s."
+msgstr "%s ¤Ï %s ¤ËÄêµÁ¤µ¤ì¤Æ¤¤¤Þ¤¹¡£"
+
+#: info/infodoc.c:1153
+msgid "Show what to type to execute a given command"
+msgstr "Í¿¤¨¤é¤ì¤¿¥³¥Þ¥ó¥É¤ò¼Â¹Ô¤¹¤ë¤Î¤Ë¡¢²¿¤ò¥¿¥¤¥×¤¹¤ë¤«¤òɽ¼¨¤¹¤ë"
+
+#: info/infodoc.c:1157
+msgid "Where is command: "
+msgstr "¤É¤Î¥³¥Þ¥ó¥É: "
+
+#: info/infodoc.c:1179
+#, c-format
+msgid "`%s' is not on any keys"
+msgstr "`%s' ¤Ï¥­¡¼³ä¤êÅö¤Æ¤µ¤ì¤Æ¤¤¤Þ¤»¤ó"
+
+#: info/infodoc.c:1186
+#, c-format
+msgid "%s can only be invoked via %s."
+msgstr "%s ¤Ï %s ¤òÄ̤¸¤Æ¤Î¤ß¸Æ¤Ó½Ð¤»¤Þ¤¹¡£"
+
+#: info/infodoc.c:1190
+#, c-format
+msgid "%s can be invoked via %s."
+msgstr "%s ¤Ï %s ¤òÄ̤¸¤Æ¸Æ¤Ó½Ð¤»¤Þ¤¹"
+
+#: info/infodoc.c:1195
+#, c-format
+msgid "There is no function named `%s'"
+msgstr "`%s' ¤È¤¤¤¦µ¡Ç½¤Ï¤¢¤ê¤Þ¤»¤ó"
+
+#: info/infokey.c:145
+#, c-format
+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"
+"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"
+
+#: 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:1500
+#, c-format
+msgid "Ignoring invalid infokey file `%s' - too small"
+msgstr "ÉÔŬÀÚ¤Ê infokey ¥Õ¥¡¥¤¥ë `%s' ¤ò̵»ë¤·¤Þ¤¹ - ¾®¤µ¤¹¤®¤Þ¤¹"
+
+#: info/infomap.c:1503
+#, c-format
+msgid "Ignoring invalid infokey file `%s' - too big"
+msgstr "ÉÔŬÀÚ¤Ê infokey ¥Õ¥¡¥¤¥ë `%s' ¤ò̵»ë¤·¤Þ¤¹ - Â礭¤¹¤®¤Þ¤¹"
+
+#: info/infomap.c:1516
+#, c-format
+msgid "Error reading infokey file `%s' - short read"
+msgstr "infokey ¥Õ¥¡¥¤¥ë `%s' Æɹþ¤ßÃæ¤Î¥¨¥é¡¼ -- Á´¤ÆÆɹþ¤á¤Þ¤»¤ó¤Ç¤·¤¿"
+
+#: info/infomap.c:1535
+#, c-format
+msgid ""
+"Invalid infokey file `%s' (bad magic numbers) -- run infokey to update it"
+msgstr ""
+"infokey ¥Õ¥¡¥¤¥ë `%s' ¤¬ÉÔŬÀÚ (¥Þ¥¸¥Ã¥¯Èֹ椬°ã¤¦) ¤Ç¤¹ -- infokey ¤ò¼Â¹Ô¤·"
+"¤Æ¹¹¿·¤·¤Þ¤·¤ç¤¦"
+
+#: info/infomap.c:1544
+#, c-format
+msgid "Your infokey file `%s' is out of date -- run infokey to update it"
+msgstr ""
+"¤¢¤Ê¤¿¤Î infokey ¥Õ¥¡¥¤¥ë `%s' ¤Ï¸Å¤¤¤Ç¤¹ -- infokey ¤ò¼Â¹Ô¤·¤Æ¹¹¿·¤·¤Þ¤·¤ç¤¦"
+
+#: info/infomap.c:1560
+#, c-format
+msgid ""
+"Invalid infokey file `%s' (bad section length) -- run infokey to update it"
+msgstr ""
+"infokey ¥Õ¥¡¥¤¥ë `%s' ¤¬ÉÔŬÀڤǤ¹ (¥»¥¯¥·¥ç¥óŤ¬ÉÔÀµ¤Ç¤¹) -- infokey ¤ò¼Â¹Ô"
+"¤·¤Æ¹¹¿·¤·¤Þ¤·¤ç¤¦"
+
+#: info/infomap.c:1581
+#, c-format
+msgid ""
+"Invalid infokey file `%s' (bad section code) -- run infokey to update it"
+msgstr ""
+"infokey ¥Õ¥¡¥¤¥ë `%s' ¤¬ÉÔŬÀڤǤ¹ (¥»¥¯¥·¥ç¥ó¥³¡¼¥É¤¬ÉÔÀµ¤Ç¤¹) -- infokey ¤ò"
+"¼Â¹Ô¤·¤Æ¹¹¿·¤·¤Þ¤·¤ç¤¦"
+
+#: info/infomap.c:1716
+msgid "Bad data in infokey file -- some key bindings ignored"
+msgstr ""
+"infokey ¥Õ¥¡¥¤¥ë¤ËÉÔÀµ¤Ê¥Ç¡¼¥¿¤¬¤¢¤ê¤Þ¤¹ -- ´ö¤Ä¤«¤Î¥­¡¼¥Ð¥¤¥ó¥É¤¬Ìµ»ë¤µ¤ì¤Þ"
+"¤·¤¿"
+
+#: info/infomap.c:1766
+msgid "Bad data in infokey file -- some var settings ignored"
+msgstr ""
+"infokey ¥Õ¥¡¥¤¥ë¤ËÉÔÀµ¤Ê¥Ç¡¼¥¿¤¬¤¢¤ê¤Þ¤¹ -- ´ö¤Ä¤«¤ÎÊÑ¿ôÀßÄ̵꤬»ë¤µ¤ì¤Þ¤·¤¿"
+
+#: info/m-x.c:69
+msgid "Read the name of an Info command and describe it"
+msgstr "Info ¥³¥Þ¥ó¥É̾¤È¤½¤ÎÀâÌÀ¤òÆɤà"
+
+#: info/m-x.c:73
+msgid "Describe command: "
+msgstr "ÀâÌÀ¤¹¤ë¥³¥Þ¥ó¥É: "
+
+#: info/m-x.c:96
+msgid "Read a command name in the echo area and execute it"
+msgstr "¥¨¥³¡¼Îΰè¤Ç¥³¥Þ¥ó¥É̾¤òÆɤߡ¢¼Â¹Ô¤¹¤ë"
+
+#: info/m-x.c:140
+msgid "Cannot execute an `echo-area' command here."
+msgstr "¤³¤³¤Ç¤Ï `echo-area' ¥³¥Þ¥ó¥É¤ò¼Â¹Ô¤Ç¤­¤Þ¤»¤ó¡£"
+
+#: info/m-x.c:154
+#, fuzzy, c-format
+msgid "Undefined command: %s"
+msgstr "ÃΤé¤Ê¤¤¥³¥Þ¥ó¥É `%s'"
+
+#: info/m-x.c:160
+msgid "Set the height of the displayed window"
+msgstr "ɽ¼¨¤µ¤ì¤ë¥¦¥£¥ó¥É¥¦¤Î¹â¤µ¤òÀßÄê"
+
+#: info/m-x.c:173
+#, c-format
+msgid "Set screen height to (%d): "
+msgstr "¥¹¥¯¥ê¡¼¥ó¤Î¹â¤µ¤ò¥»¥Ã¥È (%d): "
+
+#: info/makedoc.c:162 info/makedoc.c:170
+#, c-format
+msgid ""
+" Source files groveled to make this file include:\n"
+"\n"
+msgstr ""
+" ¤³¤Î¥Õ¥¡¥¤¥ë¤òºî¤ë¸µ¤Ë¤Ê¤Ã¤¿¥Õ¥¡¥¤¥ë:\n"
+"\n"
+
+#: info/makedoc.c:550
+#, c-format
+msgid "Couldn't manipulate the file %s.\n"
+msgstr "¥Õ¥¡¥¤¥ë %s ¤ò¾å¼ê¤¯½èÍý¤Ç¤­¤Þ¤»¤ó¡£\n"
+
+#: info/nodemenu.c:31
+msgid ""
+"\n"
+"* Menu:\n"
+" (File)Node Lines Size Containing File\n"
+" ---------- ----- ---- ---------------"
+msgstr ""
+"\n"
+"* ¥á¥Ë¥å¡¼:\n"
+" (¥Õ¥¡¥¤¥ë)¥Î¡¼¥É ¹Ô¿ô ¥µ¥¤¥º ´Þ¤Þ¤ì¤ë¥Õ¥¡¥¤¥ë\n"
+" ---------------- ----- ---- ----------------"
+
+#: info/nodemenu.c:202
+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:224
+msgid "Make a window containing a menu of all of the currently visited nodes"
+msgstr "ºÇ¶áˬ¤ì¤¿¥Î¡¼¥ÉÁ´¤Æ¤Î¥á¥Ë¥å¡¼¤ò´Þ¤ó¤Ç¤¤¤ë¥¦¥£¥ó¥É¥¦¤òºîÀ®"
+
+#: info/nodemenu.c:304
+msgid "Select a node which has been previously visited in a visible window"
+msgstr "ɽ¼¨¤µ¤ì¤Æ¤¤¤ë¥¦¥£¥ó¥É¥¦Æâ¤Î¡¢°ÊÁ°Ë¬¤ì¤¿»ö¤Î¤¢¤ë¥Î¡¼¥É¤òÁªÂò"
+
+#: info/nodemenu.c:317
+msgid "Select visited node: "
+msgstr "ˬ¤ì¤¿¥Î¡¼¥É¤òÁªÂò: "
+
+#: info/nodemenu.c:337 info/session.c:2264
+#, c-format
+msgid "The reference disappeared! (%s)."
+msgstr "¤½¤Î»²¾È¤Ï¾Ã¤¨¤Þ¤·¤¿! (%s)¡£"
+
+#: info/session.c:162
+#, 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:620
+msgid "Move down to the next line"
+msgstr "¼¡¤Î¹Ô¤Ë°ÜÆ°"
+
+#: info/session.c:635
+msgid "Move up to the previous line"
+msgstr "Á°¤Î¹Ô¤Ë°ÜÆ°"
+
+#: info/session.c:650
+msgid "Move to the end of the line"
+msgstr "¹ÔËö¤Ë°ÜÆ°"
+
+#: info/session.c:670
+msgid "Move to the start of the line"
+msgstr "¹ÔƬ¤Ë°ÜÆ°"
+
+#: info/session.c:860 makeinfo/node.c:1424
+msgid "Next"
+msgstr "¼¡"
+
+#: info/session.c:863
+msgid "Following Next node..."
+msgstr "¼¡ ¤Î¥Î¡¼¥É¤òé¤Ã¤Æ¤¤¤Þ¤¹..."
+
+#: info/session.c:881
+msgid "Selecting first menu item..."
+msgstr "ºÇ½é¤Î¥á¥Ë¥å¡¼¹àÌܤòÁªÂò..."
+
+#: info/session.c:893
+msgid "Selecting Next node..."
+msgstr "¼¡ ¤Î¥Î¡¼¥É¤òÁªÂò..."
+
+#: info/session.c:964
+#, c-format
+msgid "Moving Up %d time(s), then Next."
+msgstr "%d ²ó ¾å ¤Ë°ÜÆ°¤·¡¢¤½¤³¤Ç ¼¡ ¤Ø¡£"
+
+#: info/session.c:988
+msgid "No more nodes within this document."
+msgstr "¤³¤Î¥É¥­¥å¥á¥ó¥È¤Ë¤Ï¡¢¤³¤ì°Ê¾å¤Î¥Î¡¼¥É¤Ï¤¢¤ê¤Þ¤»¤ó¡£"
+
+#: info/session.c:1011
+msgid "No `Prev' for this node."
+msgstr "¤³¤Î¥Î¡¼¥É¤Î `Á°' ¤Ï¤¢¤ê¤Þ¤»¤ó¡£"
+
+#: info/session.c:1014 info/session.c:1073
+msgid "Moving Prev in this window."
+msgstr "¤³¤Î¥¦¥£¥ó¥É¥¦¤Î Á° ¤Ë°ÜÆ°¤·¤Þ¤¹¡£"
+
+#: info/session.c:1030
+msgid "No `Prev' or `Up' for this node within this document."
+msgstr "¤³¤Î¥É¥­¥å¥á¥ó¥È¤Ç¤Ï¡¢¤³¤Î¥Î¡¼¥É¤Î `Á°' ¤ä `¾å' ¤Ï¤¢¤ê¤Þ¤»¤ó¡£"
+
+#: info/session.c:1034
+msgid "Moving Up in this window."
+msgstr "¤³¤Î¥¦¥£¥ó¥É¥¦¤Î ¾å ¤Ë°ÜÆ°¤·¤Þ¤¹¡£"
+
+#: info/session.c:1084
+msgid "Moving to `Prev's last menu item."
+msgstr "`Á°' ¤ÎºÇ¸å¤Î¥á¥Ë¥å¡¼¹àÌܤ˰ÜÆ°¤·¤Þ¤¹¡£"
+
+#: info/session.c:1095
+msgid "Move forwards or down through node structure"
+msgstr "¥Î¡¼¥É¹½Â¤¤òÄ̤¸¤Æ¿Ê¤á¤¿¤ê²¼¤¬¤Ã¤¿¤ê¤¹¤ë"
+
+#: info/session.c:1111
+msgid "Move backwards or up through node structure"
+msgstr "¥Î¡¼¥É¹½Â¤¤òÄ̤¸¤ÆÌá¤Ã¤¿¤ê¾å¤¬¤Ã¤¿¤ê¤¹¤ë"
+
+#: info/session.c:1205
+msgid "Scroll forward in this window"
+msgstr "¤³¤Î¥¦¥£¥ó¥É¥¦¤ò¥¹¥¯¥í¡¼¥ë¥À¥¦¥ó"
+
+#: info/session.c:1213
+msgid "Scroll forward in this window and set default window size"
+msgstr "¤³¤Î¥¦¥£¥ó¥É¥¦¤ò¥¹¥¯¥í¡¼¥ë¤·¡¢¥Ç¥Õ¥©¥ë¥È¥¦¥£¥ó¥É¥¦¥µ¥¤¥º¤òÀßÄê"
+
+#: info/session.c:1221
+msgid "Scroll forward in this window staying within node"
+msgstr "¤³¤Î¥¦¥£¥ó¥É¥¦¤ò¥Î¡¼¥ÉÈÏ°ÏÆâ¤ÇÁ°Êý¥¹¥¯¥í¡¼¥ë"
+
+#: info/session.c:1229
+msgid ""
+"Scroll forward in this window staying within node and set default window size"
+msgstr ""
+"¤³¤Î¥¦¥£¥ó¥É¥¦¤ò¥Î¡¼¥ÉÈÏ°ÏÆâ¤ÇÁ°Êý¥¹¥¯¥í¡¼¥ë¤·¡¢¥Ç¥Õ¥©¥ë¥È¥¦¥£¥ó¥É¥¦¥µ¥¤¥º¤ò"
+"ÀßÄê"
+
+#: info/session.c:1237
+msgid "Scroll backward in this window"
+msgstr "¤³¤Î¥¦¥£¥ó¥É¥¦¤òµÕ¥¹¥¯¥í¡¼¥ë"
+
+#: info/session.c:1245
+msgid "Scroll backward in this window and set default window size"
+msgstr "¤³¤Î¥¦¥£¥ó¥É¥¦¤òµÕ¥¹¥¯¥í¡¼¥ë¤·¡¢¥Ç¥Õ¥©¥ë¥È¥¦¥£¥ó¥É¥¦¥µ¥¤¥º¤òÀßÄê"
+
+#: info/session.c:1254
+msgid "Scroll backward in this window staying within node"
+msgstr "¤³¤Î¥¦¥£¥ó¥É¥¦¤ò¥Î¡¼¥ÉÈÏ°ÏÆâ¤Ç¸åÊý¥¹¥¯¥í¡¼¥ë"
+
+#: info/session.c:1262
+msgid ""
+"Scroll backward in this window staying within node and set default window "
+"size"
+msgstr ""
+"¤³¤Î¥¦¥£¥ó¥É¥¦¤ò¥Î¡¼¥ÉÈÏ°ÏÆâ¤Ç¸åÊý¥¹¥¯¥í¡¼¥ë¤·¡¢¥Ç¥Õ¥©¥ë¥È¥¦¥£¥ó¥É¥¦¥µ¥¤¥º¤ò"
+"ÀßÄê"
+
+#: info/session.c:1270
+msgid "Move to the start of this node"
+msgstr "¤³¤Î¥Î¡¼¥É¤ÎºÇ½é¤Ë°ÜÆ°"
+
+#: info/session.c:1277
+msgid "Move to the end of this node"
+msgstr "¤³¤Î¥Î¡¼¥É¤ÎºÇ¸å¤Ë°ÜÆ°"
+
+#: info/session.c:1284
+msgid "Scroll down by lines"
+msgstr "¹Ô¿ô¤Ë¤è¤ë¥¹¥¯¥í¡¼¥ë"
+
+#: info/session.c:1301
+msgid "Scroll up by lines"
+msgstr "¹Ô¿ô¤Ë¤è¤ëµÕ¥¹¥¯¥í¡¼¥ë"
+
+#: info/session.c:1319
+msgid "Scroll down by half screen size"
+msgstr "²èÌÌ¥µ¥¤¥º¤ÎȾʬ¥¹¥¯¥í¡¼¥ë"
+
+#: info/session.c:1345
+msgid "Scroll up by half screen size"
+msgstr "²èÌÌ¥µ¥¤¥º¤ÎȾʬµÕ¥¹¥¯¥í¡¼¥ë"
+
+#: info/session.c:1374
+msgid "Select the next window"
+msgstr "¼¡¤Î¥¦¥£¥ó¥É¥¦¤òÁªÂò"
+
+#: info/session.c:1413
+msgid "Select the previous window"
+msgstr "Á°¤Î¥¦¥£¥ó¥É¥¦¤òÁªÂò"
+
+#: info/session.c:1464
+msgid "Split the current window"
+msgstr "¸½ºß¤Î¥¦¥£¥ó¥É¥¦¤òʬ³ä"
+
+#: info/session.c:1545
+msgid "Delete the current window"
+msgstr "¸½ºß¤Î¥¦¥£¥ó¥É¥¦¤òºï½ü"
+
+#: info/session.c:1553
+msgid "Cannot delete a permanent window"
+msgstr "±Êµ×¥¦¥£¥ó¥É¥¦¤Ïºï½ü¤Ç¤­¤Þ¤»¤ó"
+
+#: info/session.c:1585
+msgid "Delete all other windows"
+msgstr "¾¤Î¥¦¥£¥ó¥É¥¦¤òºï½ü"
+
+#: info/session.c:1631
+msgid "Scroll the other window"
+msgstr "¾¤Î¥¦¥£¥ó¥É¥¦¤ò¥¹¥¯¥í¡¼¥ë"
+
+#: info/session.c:1652
+msgid "Scroll the other window backward"
+msgstr "¾¤Î¥¦¥£¥ó¥É¥¦¤òµÕ¥¹¥¯¥í¡¼¥ë"
+
+#: info/session.c:1658
+msgid "Grow (or shrink) this window"
+msgstr "¤³¤Î¥¦¥£¥ó¥É¥¦¤òÂ礭¤¯¤¹¤ë(¤Þ¤¿¤Ï¾®¤µ¤¯¤¹¤ë)"
+
+#: info/session.c:1669
+msgid "Divide the available screen space among the visible windows"
+msgstr "²Ä»ë¥¦¥£¥ó¥É¥¦¤ÎÍøÍѲÄǽ¥¹¥¯¥ê¡¼¥ó¶õ´Ö¤òʬ³ä¤¹¤ë"
+
+#: info/session.c:1676
+msgid "Toggle the state of line wrapping in the current window"
+msgstr "¸½ºß¤Î¥¦¥£¥ó¥É¥¦¤Ë¶Ø§½èÍý¤ò»Ü¤¹"
+
+#: info/session.c:1848
+msgid "Select the Next node"
+msgstr "¼¡ ¥Î¡¼¥É¤òÁªÂò"
+
+#: info/session.c:1856
+msgid "Select the Prev node"
+msgstr "Á° ¥Î¡¼¥É¤òÁªÂò"
+
+#: info/session.c:1864
+msgid "Select the Up node"
+msgstr "¾å ¥Î¡¼¥É¤òÁªÂò"
+
+#: info/session.c:1871
+msgid "Select the last node in this file"
+msgstr "¤³¤Î¥Õ¥¡¥¤¥ë¤ÎºÇ¸å¤Î¥Î¡¼¥É¤òÁªÂò"
+
+#: info/session.c:1898 info/session.c:1931
+msgid "This window has no additional nodes"
+msgstr "¤³¤Î¥¦¥£¥ó¥É¥¦¤Ë¤Ï¥Î¡¼¥É¤¬ÉÕ¤¤¤Æ¤¤¤Þ¤»¤ó"
+
+#: info/session.c:1904
+msgid "Select the first node in this file"
+msgstr "¤³¤Î¥Õ¥¡¥¤¥ë¤ÎºÇ½é¤Î¥Î¡¼¥É¤òÁªÂò"
+
+#: info/session.c:1938
+msgid "Select the last item in this node's menu"
+msgstr "¤³¤Î¥Î¡¼¥É¤Î¥á¥Ë¥å¡¼Æâ¤Ç¤ÎºÇ¸å¤Î¹àÌܤòÁªÂò"
+
+#: info/session.c:1944
+msgid "Select this menu item"
+msgstr "¤³¤Î¥á¥Ë¥å¡¼¹àÌܤòÁªÂò"
+
+#: info/session.c:1977
+#, c-format
+msgid "There aren't %d items in this menu."
+msgstr "¤³¤Î¥á¥Ë¥å¡¼¤Ë %d ¸Ä¤Î¹àÌܤ¬¤¢¤ê¤Þ¤»¤ó¡£"
+
+#: info/session.c:2171 info/session.c:2172
+#, c-format
+msgid "Menu item (%s): "
+msgstr "¥á¥Ë¥å¡¼¹àÌÜ (%s): "
+
+#: info/session.c:2175
+msgid "Menu item: "
+msgstr "¥á¥Ë¥å¡¼¹àÌÜ: "
+
+#: info/session.c:2182 info/session.c:2183
+#, c-format
+msgid "Follow xref (%s): "
+msgstr "»²¾ÈÀè (%s): "
+
+#: info/session.c:2186
+msgid "Follow xref: "
+msgstr "»²¾ÈÀè: "
+
+#: info/session.c:2315
+msgid "Read a menu item and select its node"
+msgstr "¥á¥Ë¥å¡¼¤òÆɤó¤Ç¡¢¤½¤Î¥Î¡¼¥É¤òÁªÂò¤¹¤ë"
+
+#: info/session.c:2323
+msgid "Read a footnote or cross reference and select its node"
+msgstr "µÓÃí¤äÁê¸ß»²¾È¤òÆɤó¤Ç¡¢¤½¤Î¥Î¡¼¥É¤òÁªÂò¤¹¤ë"
+
+#: info/session.c:2329
+msgid "Move to the start of this node's menu"
+msgstr "¤³¤Î¥Î¡¼¥É¥á¥Ë¥å¡¼¤ÎÀèƬ¤Ë°ÜÆ°¤¹¤ë"
+
+#: info/session.c:2353
+msgid "Visit as many menu items at once as possible"
+msgstr "²Äǽ¤Ê¸Â¤ê¿¤¯¤Î¥á¥Ë¥å¡¼¹àÌܤذìÅÙ¤Ëˬ¤ì¤ë"
+
+#: info/session.c:2381
+msgid "Read a node name and select it"
+msgstr "¥Î¡¼¥É̾¤òÆɤó¤Ç¡¢ÁªÂò¤¹¤ë"
+
+#: info/session.c:2436 info/session.c:2441
+msgid "Goto node: "
+msgstr "¥Î¡¼¥É¤Ø°ÜÆ°: "
+
+#: info/session.c:2505
+#, c-format
+msgid "No menu in node `%s'."
+msgstr "¥Î¡¼¥É `%s' ¤Ë¥á¥Ë¥å¡¼¤¬¤¢¤ê¤Þ¤»¤ó¡£"
+
+#: info/session.c:2551
+#, c-format
+msgid "No menu item `%s' in node `%s'."
+msgstr "¥á¥Ë¥å¡¼¥¢¥¤¥Æ¥à `%s' ¤Ï¥Î¡¼¥É `%s' Ãæ¤Ë¤Ï¤¢¤ê¤Þ¤»¤ó"
+
+#: info/session.c:2581
+#, c-format
+msgid "Unable to find node referenced by `%s' in `%s'."
+msgstr "`%s' ¤«¤é»²¾È¤µ¤ì¤Æ¤¤¤ë¥Î¡¼¥É¤ò¸«¤Ä¤±¤é¤ì¤Þ¤»¤ó(`%s' Ãæ)"
+
+#: info/session.c:2631
+msgid "Read a list of menus starting from dir and follow them"
+msgstr "dir ¤«¤é¥á¥Ë¥å¡¼³«»Ï¥ê¥¹¥È¤òÆɤߡ¢¤½¤ì¤òé¤ë"
+
+#: info/session.c:2633
+msgid "Follow menus: "
+msgstr "¥á¥Ë¥å¡¼¤Ë³¤¯: "
+
+#: info/session.c:2826
+msgid "Find the node describing program invocation"
+msgstr "¥×¥í¥°¥é¥àµ¯Æ°¤Ë´Ø¤¹¤ëÀâÌÀ¤Î¥Î¡¼¥É¤ò¸«¤Ä¤±¤ë"
+
+#: info/session.c:2828
+#, c-format
+msgid "Find Invocation node of [%s]: "
+msgstr "[%s] ¤Îµ¯Æ°¥Î¡¼¥É¤ò¸«¤Ä¤±¤ë: "
+
+#: info/session.c:2866
+msgid "Read a manpage reference and select it"
+msgstr "man ¥Ú¡¼¥¸¤Ø¤Î»²¾È¤òÆɤó¤Ç¡¢ÁªÂò¤¹¤ë"
+
+#: info/session.c:2870
+msgid "Get Manpage: "
+msgstr "Man ¥Ú¡¼¥¸¤òɽ¼¨: "
+
+#: info/session.c:2900
+msgid "Select the node `Top' in this file"
+msgstr "¤³¤Î¥Õ¥¡¥¤¥ë¤Î `ÀèƬ' ¥Î¡¼¥É¤òÁªÂò"
+
+#: info/session.c:2906
+msgid "Select the node `(dir)'"
+msgstr "`(dir)'¥Î¡¼¥É¤òÁªÂò¤¹¤ë"
+
+#: info/session.c:2923 info/session.c:2925
+#, c-format
+msgid "Kill node (%s): "
+msgstr "¥Î¡¼¥É¤ÎÀÚ¤ê¼è¤ê (%s): "
+
+#: info/session.c:2977
+#, c-format
+msgid "Cannot kill node `%s'"
+msgstr "`%s' ¥Î¡¼¥É¤òÀÚ¤ê¼è¤ì¤Þ¤»¤ó"
+
+#: info/session.c:2987
+msgid "Cannot kill the last node"
+msgstr "ºÇ¸å¤Î¥Î¡¼¥É¤ÏÀÚ¤ê¼è¤ì¤Þ¤»¤ó"
+
+#: info/session.c:3073
+msgid "Select the most recently selected node"
+msgstr "ºÇ¸å¤ËÁªÂò¤µ¤ì¤¿¥Î¡¼¥É¤òÁªÂò¤¹¤ë"
+
+#: info/session.c:3079
+msgid "Kill this node"
+msgstr "¤³¤Î¥Î¡¼¥É¤òÀÚ¤ê¼è¤ë"
+
+#: info/session.c:3087
+msgid "Read the name of a file and select it"
+msgstr "¥Õ¥¡¥¤¥ë̾¤òÆɤó¤ÇÁªÂò¤¹¤ë"
+
+#: info/session.c:3091
+msgid "Find file: "
+msgstr "¥Õ¥¡¥¤¥ë¤ò¸«¤Ä¤±¤ë: "
+
+#: info/session.c:3108
+#, c-format
+msgid "Cannot find `%s'."
+msgstr "`%s' ¤ò¸«¤Ä¤±¤é¤ì¤Þ¤»¤ó¡£"
+
+#: info/session.c:3151 info/session.c:3269
+#, c-format
+msgid "Could not create output file `%s'."
+msgstr "½ÐÎÏ¥Õ¥¡¥¤¥ë `%s' ¤òºîÀ®¤Ç¤­¤Þ¤»¤ó¡£"
+
+#: info/session.c:3165 info/session.c:3287 info/session.c:3347
+msgid "Done."
+msgstr "´°Î»¡£"
+
+#: info/session.c:3220
+#, c-format
+msgid "Writing node %s..."
+msgstr "¥Î¡¼¥É %s ¤Î½ñ¤­¹þ¤ß..."
+
+#: info/session.c:3296
+msgid "Pipe the contents of this node through INFO_PRINT_COMMAND"
+msgstr "INFO_PRINT_COMMAND ¤Ë¤è¤Ã¤Æ¤³¤Î¥Î¡¼¥É¤ÎÆâÍƤò¥Ñ¥¤¥×¤¹¤ë"
+
+#: info/session.c:3331
+#, c-format
+msgid "Cannot open pipe to `%s'."
+msgstr "`%s' ¤Ø¤Î¥Ñ¥¤¥×¤ò³«¤±¤Þ¤»¤ó¡£"
+
+#: info/session.c:3337
+#, c-format
+msgid "Printing node %s..."
+msgstr "¥Î¡¼¥É `%s' ¤ò°õºþ..."
+
+#: info/session.c:3567
+#, c-format
+msgid "Searching subfile %s ..."
+msgstr "Éû¥Õ¥¡¥¤¥ë %s ¤òõ¤·¤Æ¤¤¤Þ¤¹ ..."
+
+#: info/session.c:3619
+msgid "Read a string and search for it case-sensitively"
+msgstr "ʸ»úÎó¤òÆɤߡ¢Âçʸ»ú¾®Ê¸»ú¤Î¶èÊ̤ò¤Ä¤±¤Æ¸¡º÷¤¹¤ë"
+
+#: info/session.c:3626
+msgid "Read a string and search for it"
+msgstr "ʸ»úÎó¤òÆɤó¤Ç¸¡º÷¤¹¤ë"
+
+#: info/session.c:3634
+msgid "Read a string and search backward for it"
+msgstr "ʸ»úÎó¤òÆɤó¤Ç¸åÊý¸¡º÷¤¹¤ë"
+
+#: info/session.c:3670 info/session.c:3677
+#, c-format
+msgid "%s%sfor string [%s]: "
+msgstr "ʸ»úÎó¤Ø¤Î%s%s [%s]: "
+
+#: info/session.c:3671 info/session.c:3678
+msgid "Search backward"
+msgstr "¸åÊý¸¡º÷"
+
+#: info/session.c:3672 info/session.c:3678
+msgid "Search"
+msgstr "¸¡º÷"
+
+#: info/session.c:3673 info/session.c:3679
+msgid " case-sensitively "
+msgstr "(Âçʸ»ú¾®Ê¸»ú¤Î¶èÊ̤ò¤Ä¤±¤Æ) "
+
+#: info/session.c:3674 info/session.c:3679
+msgid " "
+msgstr " "
+
+#: info/session.c:3718
+msgid "Search failed."
+msgstr "¸¡º÷¤Ë¼ºÇÔ¡£"
+
+#: info/session.c:3736
+msgid "Repeat last search in the same direction"
+msgstr "Ʊ°ìÊý¸þ¤ÇºÇ¸å¤Î¸¡º÷¤ò·«¤êÊÖ¤¹"
+
+#: info/session.c:3739 info/session.c:3749
+msgid "No previous search string"
+msgstr "Á°¤Î¸¡º÷ʸ»úÎ󤬤¢¤ê¤Þ¤»¤ó"
+
+#: info/session.c:3746
+msgid "Repeat last search in the reverse direction"
+msgstr "µÕÊý¸þ¤ÇºÇ¸å¤Î¸¡º÷¤ò·«¤êÊÖ¤¹"
+
+#: info/session.c:3765 info/session.c:3771
+msgid "Search interactively for a string as you type it"
+msgstr "ÆþÎϤ·¤¿Ê¸»úÎó¤ÎÂÐÏÃŪ¤Ê¸¡º÷"
+
+#: info/session.c:3851
+msgid "I-search backward: "
+msgstr "Ã༡¸åÊý¸¡º÷: "
+
+#: info/session.c:3853
+msgid "I-search: "
+msgstr "Ã༡¸¡º÷: "
+
+#: info/session.c:3878 info/session.c:3880
+msgid "Failing "
+msgstr "¼ºÇÔ "
+
+#: info/session.c:4340
+msgid "Move to the previous cross reference"
+msgstr "Á°¤ÎÁê¸ß»²¾È¤Ë°ÜÆ°"
+
+#: info/session.c:4349
+msgid "Move to the next cross reference"
+msgstr "¼¡¤ÎÁê¸ß»²¾È¤Ë°ÜÆ°"
+
+#: info/session.c:4359
+msgid "Select reference or menu item appearing on this line"
+msgstr "»²¾È¤Þ¤¿¤Ï¡¢¤³¤Î¹Ô¤Ë¸½¤ì¤¿¥á¥Ë¥å¡¼¹àÌܤòÁªÂò"
+
+#: info/session.c:4382
+msgid "Cancel current operation"
+msgstr "¸½ºß¤ÎÁàºî¤òÃæ»ß"
+
+#: info/session.c:4389
+msgid "Quit"
+msgstr "»ß¤á¤Þ¤·¤¿"
+
+#: info/session.c:4398
+msgid "Move the cursor to a specific line of the window"
+msgstr "¥¦¥£¥ó¥É¥¦¤Î»ØÄê¹Ô¤Ë¥«¡¼¥½¥ë¤ò°ÜÆ°"
+
+#: info/session.c:4430
+msgid "Redraw the display"
+msgstr "²èÌ̤κÆÉÁ²è"
+
+#: info/session.c:4467
+msgid "Quit using Info"
+msgstr "Info ¤Î»ÈÍѤò½ªÎ»"
+
+#: info/session.c:4480
+msgid "Run command bound to this key's lowercase variant"
+msgstr "¤³¤Î¥­¡¼¤Î¾®Ê¸»ú¤Ë¥Ð¥¤¥ó¥É¤µ¤ì¤¿¥³¥Þ¥ó¥É¤ò¼Â¹Ô"
+
+#: info/session.c:4491
+#, c-format
+msgid "Unknown command (%s)."
+msgstr "ÉÔÌÀ¤Ê¥³¥Þ¥ó¥É (%s) ¤Ç¤¹¡£"
+
+#: info/session.c:4494
+#, c-format
+msgid "\"%s\" is invalid"
+msgstr "\"%s\" ¤Ï̵¸ú¤Ç¤¹"
+
+#: info/session.c:4495
+#, fuzzy, c-format
+msgid "`%s' is invalid"
+msgstr "\"%s\" ¤Ï̵¸ú¤Ç¤¹"
+
+#: info/session.c:4709
+msgid "Add this digit to the current numeric argument"
+msgstr "¸½ºß¤Î¿ôÃÍ°ú¿ô¤Ë¤³¤Î¿ôÃͤò²Ã¤¨¤ë"
+
+#: info/session.c:4718
+msgid "Start (or multiply by 4) the current numeric argument"
+msgstr "¸½ºß¤Î¿ôÃÍ°ú¿ô¤ò³«»Ï(Ëô¤Ï 4 Çܤ¹¤ë)"
+
+#: info/session.c:4733
+msgid "Internally used by \\[universal-argument]"
+msgstr "ÆâÉôŪ¤Ë \\[universal-argument] ¤Ë¤è¤Ã¤ÆÍøÍѤµ¤ì¤Þ¤¹"
+
+#: info/tilde.c:338
+#, 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:64
+msgid "The number lines to scroll when the cursor moves out of the window"
+msgstr "¥«¡¼¥½¥ë¤ò¥¦¥£¥ó¥É¥¦¤Î³°¤ËÆ°¤«¤½¤¦¤È¤·¤¿»þ¤Î¥¹¥¯¥í¡¼¥ë¹Ô¿ô"
+
+#: info/variables.c:68
+msgid "When \"On\", Info accepts and displays ISO Latin characters"
+msgstr "\"On\" ¤Î»þ¡¢Info ¤Ï ISO Latin ʸ»ú¤Îɽ¼¨¤¬²Äǽ¤Ë¤Ê¤ë"
+
+#: info/variables.c:74
+msgid "Explain the use of a variable"
+msgstr "ÊÑ¿ô¤Î»È¤¤Êý¤ò²òÀ⤹¤ë"
+
+#: info/variables.c:80
+msgid "Describe variable: "
+msgstr "ÊÑ¿ô¤ÎÀâÌÀ: "
+
+#: info/variables.c:99
+msgid "Set the value of an Info variable"
+msgstr "Info ÊÑ¿ô¤ÎÃͤòÀßÄê"
+
+#: info/variables.c:105
+msgid "Set variable: "
+msgstr "ÊÑ¿ô¤òÀßÄê: "
+
+#: info/variables.c:123
+#, c-format
+msgid "Set %s to value (%d): "
+msgstr "%s ¤ËÃͤòÀßÄê (%d): "
+
+#: info/variables.c:164
+#, c-format
+msgid "Set %s to value (%s): "
+msgstr "%s ¤ËÃͤòÀßÄê (%s): "
+
+#: info/window.c:1138
+msgid "--*** Tags out of Date ***"
+msgstr "--*** µì¼°¤Î¥¿¥° ***"
+
+#: info/window.c:1149
+msgid "-----Info: (), lines ----, "
+msgstr "-----Info: (), ¹Ô¿ô ----, "
+
+#: info/window.c:1156
+#, c-format
+msgid "-%s---Info: %s, %d lines --%s--"
+msgstr "-%s---Info: %s, %d ¹Ô --%s--"
+
+#: info/window.c:1160
+#, c-format
+msgid "-%s%s-Info: (%s)%s, %d lines --%s--"
+msgstr "-%s%s-Info: (%s)%s, %d ¹Ô --%s--"
+
+#: info/window.c:1167
+#, c-format
+msgid " Subfile: %s"
+msgstr " Éû¥Õ¥¡¥¤¥ë: %s"
+
+#: lib/getopt.c:551 lib/getopt.c:570
+#, c-format
+msgid "%s: option `%s' is ambiguous\n"
+msgstr "%s: ¥ª¥×¥·¥ç¥ó `%s' ¤ÏÛ£Ëæ¤Ç¤¹\n"
+
+#: lib/getopt.c:603 lib/getopt.c:607
+#, c-format
+msgid "%s: option `--%s' doesn't allow an argument\n"
+msgstr "%s: ¥ª¥×¥·¥ç¥ó `--%s' ¤Ï°ú¿ô¤¬ÉÔÍפǤ¹\n"
+
+#: lib/getopt.c:616 lib/getopt.c:621
+#, c-format
+msgid "%s: option `%c%s' doesn't allow an argument\n"
+msgstr "%s: ¥ª¥×¥·¥ç¥ó `%c%s' ¤Ï°ú¿ô¤¬ÉÔÍפǤ¹\n"
+
+#: lib/getopt.c:667 lib/getopt.c:689 lib/getopt.c:1020 lib/getopt.c:1042
+#, c-format
+msgid "%s: option `%s' requires an argument\n"
+msgstr "%s: ¥ª¥×¥·¥ç¥ó `%s' ¤Ë¤Ï¡¢°ú¿ô¤¬É¬ÍפǤ¹\n"
+
+#: lib/getopt.c:727 lib/getopt.c:730
+#, c-format
+msgid "%s: unrecognized option `--%s'\n"
+msgstr "%s: `--%s' ¤Ïǧ¼±¤Ç¤­¤Ê¤¤¥ª¥×¥·¥ç¥ó¤Ç¤¹\n"
+
+#: lib/getopt.c:738 lib/getopt.c:741
+#, c-format
+msgid "%s: unrecognized option `%c%s'\n"
+msgstr "%s: `%c%s' ¤Ïǧ¼±¤Ç¤­¤Ê¤¤¥ª¥×¥·¥ç¥ó¤Ç¤¹\n"
+
+#: lib/getopt.c:796 lib/getopt.c:799
+#, c-format
+msgid "%s: illegal option -- %c\n"
+msgstr "%s: ÉÔÀµ¤Ê¥ª¥×¥·¥ç¥ó -- %c\n"
+
+#: lib/getopt.c:805 lib/getopt.c:808
+#, c-format
+msgid "%s: invalid option -- %c\n"
+msgstr "%s: ̵¸ú¤Ê¥ª¥×¥·¥ç¥ó -- %c\n"
+
+#: lib/getopt.c:863 lib/getopt.c:882 lib/getopt.c:1095 lib/getopt.c:1116
+#, c-format
+msgid "%s: option requires an argument -- %c\n"
+msgstr "%s: ¥ª¥×¥·¥ç¥ó¤Ï°ú¿ô¤òÍ׵ᤷ¤Þ¤¹ -- %c\n"
+
+#: lib/getopt.c:935 lib/getopt.c:954
+#, c-format
+msgid "%s: option `-W %s' is ambiguous\n"
+msgstr "%s: `-W %s' ¥ª¥×¥·¥ç¥ó¤¬Û£Ëæ¤Ç¤¹\n"
+
+#: lib/getopt.c:978 lib/getopt.c:999
+#, c-format
+msgid "%s: option `-W %s' doesn't allow an argument\n"
+msgstr "%s: `-W %s' ¥ª¥×¥·¥ç¥ó¤Ë¤Ï°ú¿ô¤¬ÉÔÍפǤ¹\n"
+
+#: makeinfo/cmds.c:520 makeinfo/cmds.c:542
+#, fuzzy, c-format
+msgid "arguments to @%s ignored"
+msgstr "%c%s ¤ËÂФ¹¤ëÉÔÀµ¤Ê°ú¿ô"
+
+#: makeinfo/cmds.c:585
+msgid "January"
+msgstr "°ì·î"
+
+#: makeinfo/cmds.c:585
+msgid "February"
+msgstr "Æó·î"
+
+#: makeinfo/cmds.c:585
+msgid "March"
+msgstr "»°·î"
+
+#: makeinfo/cmds.c:585
+msgid "April"
+msgstr "»Í·î"
+
+#: makeinfo/cmds.c:585
+msgid "May"
+msgstr "¸Þ·î"
+
+#: makeinfo/cmds.c:586
+msgid "June"
+msgstr "Ï»·î"
+
+#: makeinfo/cmds.c:586
+msgid "July"
+msgstr "¼··î"
+
+#: makeinfo/cmds.c:586
+msgid "August"
+msgstr "Ȭ·î"
+
+#: makeinfo/cmds.c:586
+msgid "September"
+msgstr "¶å·î"
+
+#: makeinfo/cmds.c:586
+msgid "October"
+msgstr "½½·î"
+
+#: makeinfo/cmds.c:587
+msgid "November"
+msgstr "½½°ì·î"
+
+#: makeinfo/cmds.c:587
+msgid "December"
+msgstr "½½Æó·î"
+
+#: makeinfo/cmds.c:936
+#, c-format
+msgid "unlikely character %c in @var"
+msgstr "@var ¤Ç»È¤¨¤½¤¦¤Ë¤Ê¤¤Ê¸»ú %c"
+
+#: makeinfo/cmds.c:979
+msgid "@sc argument all uppercase, thus no effect"
+msgstr "Á´¤ÆÂçʸ»ú¤Î @sc °ú¿ô¡¢½¾¤Ã¤Æ¸ú²Ì¤¬¤¢¤ê¤Þ¤»¤ó"
+
+#: makeinfo/cmds.c:1034
+#, c-format
+msgid "`{' expected, but saw `%c'"
+msgstr "`{' ¤¬¤¢¤ë¤Ï¤º¤Ç¤¹¤¬¡¢`%c' ¤Ç¤·¤¿"
+
+#: makeinfo/cmds.c:1074
+msgid "end of file inside verb block"
+msgstr "verb ¥Ö¥í¥Ã¥¯Æâ¤Ç¥Õ¥¡¥¤¥ëËöÈø¤È¤Ê¤ê¤Þ¤·¤¿"
+
+#: makeinfo/cmds.c:1082
+#, c-format
+msgid "`}' expected, but saw `%c'"
+msgstr "`}' ¤¬¤¢¤ë¤Ï¤º¤Ç¤¹¤¬¡¢`%c' ¤Ç¤·¤¿"
+
+#: makeinfo/cmds.c:1112
+msgid ""
+"@strong{Note...} produces a spurious cross-reference in Info; reword to "
+"avoid that"
+msgstr ""
+
+#: makeinfo/cmds.c:1305
+#, c-format
+msgid "%c%s is obsolete"
+msgstr "%c%s ¤ÏÇѤ줿̿Îá¤Ç¤¹"
+
+#: makeinfo/cmds.c:1414
+#, c-format
+msgid "@sp requires a positive numeric argument, not `%s'"
+msgstr "@sp ¤Ë¤Ï `%s' ¤Ç¤Ï¤Ê¤¯¡¢Àµ¤Î¿ôÃͤòÍ¿¤¨¤Ê¤±¤ì¤Ð¤Ê¤ê¤Þ¤»¤ó"
+
+#: makeinfo/cmds.c:1763 makeinfo/cmds.c:1819 makeinfo/footnote.c:82
+#, c-format
+msgid "Bad argument to %c%s"
+msgstr "%c%s ¤ËÂФ¹¤ëÉÔÀµ¤Ê°ú¿ô"
+
+#: makeinfo/cmds.c:1773 makeinfo/makeinfo.c:4142
+msgid "asis"
+msgstr "¤½¤Î¤Þ¤Þ"
+
+#: makeinfo/cmds.c:1775 makeinfo/cmds.c:1805 makeinfo/makeinfo.c:4144
+msgid "none"
+msgstr "¤Ê¤·"
+
+#: makeinfo/cmds.c:1789
+#, fuzzy, c-format
+msgid "Bad argument to @%s"
+msgstr "%c%s ¤ËÂФ¹¤ëÉÔÀµ¤Ê°ú¿ô"
+
+#: makeinfo/cmds.c:1803
+msgid "insert"
+msgstr ""
+
+#: makeinfo/defun.c:84
+msgid "Missing `}' in @def arg"
+msgstr "@def °ú¿ô¤Ë `}' ¤ò˺¤ì¤Æ¤¤¤Þ¤¹"
+
+#: makeinfo/defun.c:403
+msgid "Function"
+msgstr "µ¡Ç½"
+
+#: makeinfo/defun.c:406
+msgid "Macro"
+msgstr "¥Þ¥¯¥í"
+
+#: makeinfo/defun.c:409
+msgid "Special Form"
+msgstr "Æü췿"
+
+#: makeinfo/defun.c:413
+msgid "Variable"
+msgstr "ÊÑ¿ô"
+
+#: makeinfo/defun.c:416
+msgid "User Option"
+msgstr "¥æ¡¼¥¶¥ª¥×¥·¥ç¥ó"
+
+#: makeinfo/defun.c:420
+msgid "Instance Variable"
+msgstr "¥¤¥ó¥¹¥¿¥ó¥¹ÊÑ¿ô"
+
+#: makeinfo/defun.c:424
+msgid "Method"
+msgstr "¥á¥½¥Ã¥É"
+
+#: makeinfo/defun.c:500 makeinfo/defun.c:505 makeinfo/defun.c:545
+#: makeinfo/defun.c:644 makeinfo/xml.c:2229
+msgid "of"
+msgstr "of"
+
+#: makeinfo/defun.c:509 makeinfo/defun.c:513 makeinfo/defun.c:517
+#: makeinfo/defun.c:551 makeinfo/defun.c:650 makeinfo/xml.c:2234
+msgid "on"
+msgstr "on"
+
+#: makeinfo/defun.c:711
+#, fuzzy, c-format
+msgid "Must be in `@%s' environment to use `@%s'"
+msgstr "`%2$sx' ¤ò»È¤¦¤¿¤á¤Ë¤Ï `%1$s' ÁÞÆþ¤Ç¤Ê¤±¤ì¤Ð¤Ê¤ê¤Þ¤»¤ó"
+
+#: makeinfo/files.c:435
+#, c-format
+msgid "%s: getwd: %s, %s\n"
+msgstr "%s: getwd: %s, %s\n"
+
+#: makeinfo/files.c:638
+#, c-format
+msgid "`%s' omitted before output filename"
+msgstr ""
+
+#: makeinfo/files.c:646
+#, c-format
+msgid "`%s' omitted since writing to stdout"
+msgstr ""
+
+#: makeinfo/files.c:694
+msgid "Output buffer not empty."
+msgstr ""
+
+#: makeinfo/footnote.c:150
+#, c-format
+msgid "`%c%s' needs an argument `{...}', not just `%s'"
+msgstr "`%c%s' ¤Ë¤Ï `%s' ¤À¤±¤Ç¤Ê¤¯¡¢`{...}' ·Á¼°¤Î°ú¿ô¤¬É¬ÍפǤ¹"
+
+#: makeinfo/footnote.c:165
+#, c-format
+msgid "No closing brace for footnote `%s'"
+msgstr "µÓÃí `%s' ¤ÎÊĤ¸¥Ö¥ì¡¼¥¹¤¬¤¢¤ê¤Þ¤»¤ó"
+
+#: makeinfo/footnote.c:198
+msgid "Footnote defined without parent node"
+msgstr "µÓÃí¤Ë¿Æ¥Î¡¼¥É¤ÎÄêµÁ¤¬¤¢¤ê¤Þ¤»¤ó"
+
+#: makeinfo/footnote.c:210
+#, fuzzy
+msgid "Footnotes inside footnotes are not allowed"
+msgstr "µÓÃí¤Ë¿Æ¥Î¡¼¥É¤ÎÄêµÁ¤¬¤¢¤ê¤Þ¤»¤ó"
+
+#: makeinfo/footnote.c:302 makeinfo/index.c:189
+msgid "Footnotes"
+msgstr "µÓÃí"
+
+#: makeinfo/html.c:87
+#, c-format
+msgid "%s: could not open --css-file: %s"
+msgstr ""
+
+#: makeinfo/html.c:172
+#, c-format
+msgid "%s:%d: --css-file ended in comment"
+msgstr ""
+
+#: makeinfo/html.c:207
+msgid "Untitled"
+msgstr "̵Âê"
+
+#: makeinfo/html.c:422
+msgid "[unexpected] no html tag to pop"
+msgstr ""
+
+#: makeinfo/html.c:752
+#, fuzzy, c-format
+msgid "[unexpected] invalid node name: `%s'"
+msgstr "ÉÔŬÀڤʥΡ¼¥É̾¤Ç¤¹: `%s'"
+
+#: makeinfo/index.c:169
+#, c-format
+msgid "Unknown index `%s'"
+msgstr "ÉÔÌÀ¤Ê¥¤¥ó¥Ç¥Ã¥¯¥¹ `%s'"
+
+#: makeinfo/index.c:234
+#, c-format
+msgid "Info cannot handle `:' in index entry `%s'"
+msgstr ""
+
+#: makeinfo/index.c:412
+#, c-format
+msgid "Index `%s' already exists"
+msgstr "¸«½Ð¤· `%s' ¤Ï´û¤Ë¸ºß¤·¤Þ¤¹"
+
+#: makeinfo/index.c:455
+#, c-format
+msgid "Unknown index `%s' and/or `%s' in @synindex"
+msgstr "@synindex ¤Ë¡¢ÃΤé¤Ê¤¤¸«½Ð¤· `%s' ¤ä `%s' ¤¬¤¢¤ê¤Þ¤¹"
+
+#: makeinfo/index.c:661
+msgid "(line )"
+msgstr ""
+
+#: makeinfo/index.c:669
+#, c-format
+msgid "(line %*d)"
+msgstr ""
+
+#: makeinfo/index.c:750
+#, c-format
+msgid "Unknown index `%s' in @printindex"
+msgstr "@printindex ¤Ë¡¢ÃΤé¤Ê¤¤¸«½Ð¤· `%s' ¤¬¤¢¤ê¤Þ¤¹"
+
+#: makeinfo/index.c:819
+#, c-format
+msgid "Entry for index `%s' outside of any node"
+msgstr "¸«½Ð¤· `%s' ¤Î¥¨¥ó¥È¥ê¤Ï¤¢¤é¤æ¤ë¥Î¡¼¥É¤Î³°Â¦¤Ç¤¹"
+
+#: makeinfo/index.c:822 makeinfo/index.c:858
+msgid "(outside of any node)"
+msgstr "(¤¢¤é¤æ¤ë¥Î¡¼¥É¤Î³°Â¦)"
+
+#: makeinfo/index.c:919 makeinfo/index.c:925
+msgid "See "
+msgstr "See "
+
+#: makeinfo/insertion.c:160
+msgid "@item not allowed in argument to @itemize"
+msgstr ""
+
+#: makeinfo/insertion.c:238
+msgid "Broken-Type in insertion_type_pname"
+msgstr "insertion_type_pname Ãæ¤Ë²õ¤ì¤¿·¿¤¬¤¢¤ê¤Þ¤¹"
+
+#: makeinfo/insertion.c:334
+msgid "Enumeration stack overflow"
+msgstr "ÎóµóÍÑ¥¹¥¿¥Ã¥¯¤¬¥ª¡¼¥Ð¥Õ¥í¡¼¤·¤Þ¤·¤¿"
+
+#: makeinfo/insertion.c:366
+#, c-format
+msgid "lettering overflow, restarting at %c"
+msgstr "¥é¥Ù¥ëʸ»ú¤¬¥ª¡¼¥Ð¡¼¥Õ¥í¡¼¡¢%c ¤ËÌᤷ¤Þ¤¹"
+
+#: makeinfo/insertion.c:631
+#, c-format
+msgid "%s requires an argument: the formatter for %citem"
+msgstr "%s ¤Ë¤Ï°ú¿ô¤¬É¬ÍפǤ¹: %citem ¤òÀ°·Á¤¹¤ë¤¿¤á"
+
+#: makeinfo/insertion.c:719
+#, c-format
+msgid "%cfloat environments cannot be nested"
+msgstr ""
+
+#: makeinfo/insertion.c:973
+#, c-format
+msgid "`@end' expected `%s', but saw `%s'"
+msgstr "`@end' ¤Ë¤Ï `%s' ¤¬É¬ÍפǤ¹¤¬¡¢`%s' ¤¬¸«¤Ä¤«¤ê¤Þ¤·¤¿"
+
+#: makeinfo/insertion.c:1337
+#, c-format
+msgid "No matching `%cend %s'"
+msgstr "`%cend %s' ¤È¤ÎÂбþ¤¬¸«¤Ä¤«¤ê¤Þ¤»¤ó"
+
+#: makeinfo/insertion.c:1592
+#, c-format
+msgid "%s requires letter or digit"
+msgstr "%s ¤Ë¤Ï±Ñ¿ôʸ»ú¤¬É¬ÍפǤ¹"
+
+#: makeinfo/insertion.c:1687
+msgid "end of file inside verbatim block"
+msgstr "verbatim ¥Ö¥í¥Ã¥¯Ãæ¤Ç¥Õ¥¡¥¤¥ë¤ÎËöÈø¤È¤Ê¤ê¤Þ¤·¤¿"
+
+#: makeinfo/insertion.c:1913
+#, fuzzy, c-format
+msgid "@%s not meaningful outside `@float' environment"
+msgstr "`@%2$s' ¥Ö¥í¥Ã¥¯Æ⦤ǤΠ@%1$s ¤Ï¡¢¤¢¤Þ¤ê°ÕÌ£¤¬¤¢¤ê¤Þ¤»¤ó"
+
+#: makeinfo/insertion.c:1949
+msgid "@menu seen before first @node, creating `Top' node"
+msgstr "@menu ¤¬ºÇ½é¤Î @node °ÊÁ°¤Ë¸½¤ì¤Þ¤·¤¿¡£`Top' ¥Î¡¼¥É¤ò¤Ä¤¯¤ê¤Þ¤¹"
+
+#: makeinfo/insertion.c:1950
+msgid ""
+"perhaps your @top node should be wrapped in @ifnottex rather than @ifinfo?"
+msgstr "¿ʬ @top ¥Î¡¼¥É¤Ï @ifinfo ¤è¤ê¤Ï @ifnottex ¤Ëʤ¤ï¤ì¤ë¤Ù¤­¤Ç¤Ï¡©"
+
+#: makeinfo/insertion.c:1962
+msgid "@detailmenu seen before first node, creating `Top' node"
+msgstr "@detailmenu ¤¬ºÇ½é¤Î¥Î¡¼¥É°ÊÁ°¤Ë¸½¤ì¤Þ¤·¤¿¡£`ĺÅÀ' ¥Î¡¼¥É¤òºî¤ê¤Þ¤¹"
+
+#: makeinfo/insertion.c:2018
+#, c-format
+msgid "@%s not meaningful outside `@titlepage' and `@quotation' environments"
+msgstr ""
+
+#: makeinfo/insertion.c:2032
+#, fuzzy, c-format
+msgid "@%s not meaningful outside `@titlepage' environment"
+msgstr "`@%2$s' ¥Ö¥í¥Ã¥¯Æ⦤ǤΠ@%1$s ¤Ï¡¢¤¢¤Þ¤ê°ÕÌ£¤¬¤¢¤ê¤Þ¤»¤ó"
+
+#: makeinfo/insertion.c:2063
+#, c-format
+msgid "Unmatched `%c%s'"
+msgstr "`%c%s' ¤È¤ÎÂбþ¤¬¸«¤Ä¤«¤ê¤Þ¤»¤ó"
+
+#: makeinfo/insertion.c:2068
+#, c-format
+msgid "`%c%s' needs something after it"
+msgstr "`%c%s' ¤Î¸å¤í¤Ë¤Ï²¿¤«¤¬É¬ÍפǤ¹"
+
+#: makeinfo/insertion.c:2074
+#, fuzzy, c-format
+msgid "Bad argument `%s' to `@%s', using `%s'"
+msgstr "`%s' ¤ËÂФ¹¤ëÉÔÀµ¤Ê°ú¿ô `%s'¡£`%s' ¤ò»È¤¤¤Þ¤¹"
+
+#: makeinfo/insertion.c:2171
+#, c-format
+msgid "@%s not meaningful inside `@%s' block"
+msgstr "`@%2$s' ¥Ö¥í¥Ã¥¯Æ⦤ǤΠ@%1$s ¤Ï¡¢¤¢¤Þ¤ê°ÕÌ£¤¬¤¢¤ê¤Þ¤»¤ó"
+
+#: makeinfo/insertion.c:2180
+#, c-format
+msgid "@itemx not meaningful inside `%s' block"
+msgstr "`%s' ¥Ö¥í¥Ã¥¯Æ⦤ǤΠ@itemx ¤Ï¡¢¤¢¤Þ¤ê°ÕÌ£¤¬¤¢¤ê¤Þ¤»¤ó"
+
+#: makeinfo/insertion.c:2356
+#, c-format
+msgid "%c%s found outside of an insertion block"
+msgstr "ÁÞÆþ¥Ö¥í¥Ã¥¯³°¤Ç¡¢%c%s ¤¬¸«¤Ä¤«¤ê¤Þ¤·¤¿"
+
+#: makeinfo/lang.c:580
+#, c-format
+msgid "%s is not a valid ISO 639 language code"
+msgstr "%s ¤ÏÍ­¸ú¤Ê ISO 639 ¸À¸ì¥³¡¼¥É¤Ç¤Ï¤¢¤ê¤Þ¤»¤ó"
+
+#: makeinfo/lang.c:655
+#, fuzzy, c-format
+msgid "unrecognized encoding name `%s'"
+msgstr "¥¨¥ó¥³¡¼¥Ç¥£¥ó¥°Ì¾ `%s' ¤òǧ¼±¤Ç¤­¤Þ¤»¤ó"
+
+#: makeinfo/lang.c:663
+#, c-format
+msgid "sorry, encoding `%s' not supported"
+msgstr "»ÄÇ°¤Ê¤¬¤é¡¢¥¨¥ó¥³¡¼¥É `%s' ¤Ï¼õ¤±ÉÕ¤±¤é¤ì¤Þ¤»¤ó"
+
+#: makeinfo/lang.c:715
+#, c-format
+msgid "invalid encoded character `%s'"
+msgstr "¥¨¥ó¥³¡¼¥Éʸ»ú `%s' ¤¬Ìµ¸ú¤Ç¤¹"
+
+#: makeinfo/lang.c:1009
+#, c-format
+msgid "%c%s expects `i' or `j' as argument, not `%c'"
+msgstr "%c%s ¤Ï `%c' ¤Ç¤Ï¤Ê¤¯¡¢`i' ¤« `j' ¤ò°ú¿ô¤È¤·¤ÆɬÍפȤ·¤Þ¤¹"
+
+#: makeinfo/lang.c:1013
+#, 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:355
+#, 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:586
+#, c-format
+msgid "%cend macro not found"
+msgstr "%cend ¥Þ¥¯¥í¤¬¸«¤Ä¤«¤ê¤Þ¤»¤ó"
+
+#: makeinfo/macro.c:624
+msgid "@quote-arg only useful for single-argument macros"
+msgstr "@quote-arg ¤Ï¡¢°ú¿ô¤ò°ì¤ÄÍ¿¤¨¤¿¤È¤­¤Î¤ßÍ­¸ú¤Ç¤¹"
+
+#: makeinfo/macro.c:660
+#, c-format
+msgid "mismatched @end %s with @%s"
+msgstr "@%2$s ¤È°ìÃפ·¤Ê¤¤ @end %1$s"
+
+#: makeinfo/makeinfo.c:184
+#, c-format
+msgid "Too many errors! Gave up.\n"
+msgstr "¥¨¥é¡¼¤¬Â¿¤¹¤®¤Þ¤¹! Äü¤á¤Þ¤·¤¿¡£\n"
+
+#: makeinfo/makeinfo.c:302
+#, c-format
+msgid "%s:%d: warning: "
+msgstr "%s:%d: ·Ù¹ð: "
+
+#: makeinfo/makeinfo.c:321 makeinfo/makeinfo.c:2260
+#, c-format
+msgid "Misplaced %c"
+msgstr "´Ö°ã¤Ã¤¿°ÌÃÖ¤Ë %c"
+
+#: makeinfo/makeinfo.c:340
+#, c-format
+msgid "Try `%s --help' for more information.\n"
+msgstr "¾Ü¤·¤¯¤Ï `%s --help' ¤ò¼Â¹Ô¤·¤Æ¤¯¤À¤µ¤¤¡£\n"
+
+#: makeinfo/makeinfo.c:343
+#, c-format
+msgid "Usage: %s [OPTION]... TEXINFO-FILE...\n"
+msgstr "»È¤¤Êý: %s [¥ª¥×¥·¥ç¥ó]... TEXINFO¥Õ¥¡¥¤¥ë...\n"
+
+#: makeinfo/makeinfo.c:346
+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:350
+#, c-format
+msgid ""
+"General options:\n"
+" --error-limit=NUM quit after NUM errors (default %d).\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"
+" --reference-limit=NUM warn about at most NUM references (default %"
+"d).\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:364
+#, 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:372
+#, 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 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 (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:386
+#, c-format
+msgid ""
+"Options for Info and plain text:\n"
+" --enable-encoding output accented and special characters in\n"
+" Info output based on @documentencoding.\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\n"
+" in which they are defined (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:403
+msgid ""
+"Options for HTML:\n"
+" --css-include=FILE include FILE in HTML <style> output;\n"
+" read stdin if FILE is -.\n"
+msgstr ""
+
+#: makeinfo/makeinfo.c:409
+#, 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:416
+#, 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:425
+#, 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:444
+#, 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:452
+#, 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:603
+#, c-format
+msgid "%s: Ignoring unrecognized TEXINFO_OUTPUT_FORMAT value `%s'.\n"
+msgstr ""
+
+#: makeinfo/makeinfo.c:647 makeinfo/makeinfo.c:673 makeinfo/makeinfo.c:692
+#: makeinfo/makeinfo.c:722 makeinfo/makeinfo.c:743
+#, c-format
+msgid "%s: %s arg must be numeric, not `%s'.\n"
+msgstr "%s: %s °ú¿ô¤Ï `%s' ¤Ç¤Ï¤Ê¤¯¤Æ¡¢¿ôÃͤǤʤ±¤ì¤Ð¤Ê¤ê¤Þ¤»¤ó¡£\n"
+
+#: makeinfo/makeinfo.c:660
+#, fuzzy, c-format
+msgid "%s: could not open macro expansion output `%s'"
+msgstr "¥Þ¥¯¥í³ÈÄ¥½ÐÎÏ `%s' ¤ò³«¤±¤Þ¤»¤ó"
+
+#: makeinfo/makeinfo.c:665
+#, fuzzy, c-format
+msgid "%s: ignoring second macro expansion output `%s'.\n"
+msgstr "¥Þ¥¯¥í³ÈÄ¥½ÐÎÏ `%s' ¤ò³«¤±¤Þ¤»¤ó"
+
+#: makeinfo/makeinfo.c:707
+#, 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:732
+#, 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:806
+#, c-format
+msgid "%s: missing file argument.\n"
+msgstr "%s: ¥Õ¥¡¥¤¥ë°ú¿ô¤ò˺¤ì¤Æ¤¤¤Þ¤¹¤è\n"
+
+#: makeinfo/makeinfo.c:997 makeinfo/makeinfo.c:3991
+#, c-format
+msgid "Multiline command %c%s used improperly"
+msgstr ""
+
+#: makeinfo/makeinfo.c:1000
+#, c-format
+msgid "Expected `%s'"
+msgstr "¤³¤³¤Ç¤Ï `%s' ¤¬Í׵ᤵ¤ì¤Þ¤¹"
+
+#: makeinfo/makeinfo.c:1479
+#, c-format
+msgid "Can't create directory `%s': %s"
+msgstr "¥Ç¥£¥ì¥¯¥È¥ê `%s' ¤òºîÀ®¤Ç¤­¤Þ¤»¤ó: %s"
+
+#: makeinfo/makeinfo.c:1525
+#, c-format
+msgid "No `%s' found in `%s'"
+msgstr "`%2$s' ¤Ë `%1$s' ¤¬¸«¤Ä¤«¤ê¤Þ¤»¤ó"
+
+#: makeinfo/makeinfo.c:1605
+#, c-format
+msgid "%s: Skipping macro expansion to stdout as Info output is going there.\n"
+msgstr "%s: Info ¤Î½ÐÎϤò¹Ô¤Ê¤¦¤Î¤Ç¡¢¥Þ¥¯¥í³ÈÄ¥¤òɸ½à½ÐÎϤ˽ÐÎϤ·¤Þ¤»¤ó¡£\n"
+
+#: makeinfo/makeinfo.c:1638
+#, c-format
+msgid "Making %s file `%s' from `%s'.\n"
+msgstr "`%3$s' ¤«¤é %1$s ¥Õ¥¡¥¤¥ë `%2$s' ¤òºîÀ®¤·¤Þ¤¹¡£\n"
+
+#: makeinfo/makeinfo.c:1673
+#, c-format
+msgid "This is %s, produced by makeinfo version %s from %s.\n"
+msgstr ""
+"¤³¤ì¤Ï %1$s¡¢%3$s ¤è¤ê makeinfo ¥Ð¡¼¥¸¥ç¥ó %2$s ¤Ë¤è¤Ã¤ÆºîÀ®¤µ¤ì¤Þ¤·¤¿¡£\n"
+
+#: makeinfo/makeinfo.c:1709
+#, 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:1773
+#, 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:2034
+#, c-format
+msgid "Unknown command `%s'"
+msgstr "ÃΤé¤Ê¤¤¥³¥Þ¥ó¥É `%s'"
+
+#: makeinfo/makeinfo.c:2056
+#, c-format
+msgid "Use braces to give a command as an argument to @%s"
+msgstr "@%s ¤Ø¤Î°ú¿ô¤È¤·¤Æ¥³¥Þ¥ó¥É¤òÍ¿¤¨¤ë¤Ë¤Ï¡¢¥Ö¥ì¡¼¥¹¤ò»È¤¤¤Þ¤·¤ç¤¦"
+
+#: makeinfo/makeinfo.c:2314
+#, fuzzy, c-format
+msgid "%c%s expected braces"
+msgstr "%c%s ¤Ë¤Ï `{...}' ¤¬É¬ÍפǤ¹"
+
+#: makeinfo/makeinfo.c:2327
+msgid "Unmatched }"
+msgstr "Âбþ¤Î¤Ê¤¤ }"
+
+#: makeinfo/makeinfo.c:2375
+msgid "NO_NAME!"
+msgstr "̾Á°¤¬Ìµ¤¤¡ª"
+
+#: makeinfo/makeinfo.c:2396
+#, c-format
+msgid "%c%s missing close brace"
+msgstr "ÊĤ¸¤ë¥Ö¥ì¡¼¥¹¤Î¤Ê¤¤ %c%s"
+
+#: makeinfo/makeinfo.c:3309
+#, c-format
+msgid "@image file `%s' (for HTML) not readable: %s"
+msgstr "@image ¥Õ¥¡¥¤¥ë `%s' (HTML ÍÑ) ¤¬Æɤá¤Þ¤»¤ó: %s"
+
+#: makeinfo/makeinfo.c:3315
+#, fuzzy, c-format
+msgid "No such file `%s'"
+msgstr "`%2$s' ¤Ë `%1$s' ¤¬¸«¤Ä¤«¤ê¤Þ¤»¤ó"
+
+#: makeinfo/makeinfo.c:3447
+#, c-format
+msgid "@image file `%s' (for text) unreadable: %s"
+msgstr "@image ¥Õ¥¡¥¤¥ë `%s' (text ÍÑ) ¤¬Æɤá¤Þ¤»¤ó: %s"
+
+#: makeinfo/makeinfo.c:3456
+msgid "@image missing filename argument"
+msgstr "@image ¤Ë¥Õ¥¡¥¤¥ë̾¤¬Í¿¤¨¤é¤ì¤Æ¤¤¤Þ¤»¤ó"
+
+#: makeinfo/makeinfo.c:3675
+#, c-format
+msgid "undefined flag: %s"
+msgstr ""
+
+#: makeinfo/makeinfo.c:3676
+#, c-format
+msgid "{No value for `%s'}"
+msgstr "{`%s' ¤ÎÃͤ¬¤Ê¤¤}"
+
+#: makeinfo/makeinfo.c:3728
+#, c-format
+msgid "%c%s requires a name"
+msgstr "%c%s ¤Ë¤Ï̾Á°¤¬É¬ÍפǤ¹"
+
+#: makeinfo/makeinfo.c:3834
+#, c-format
+msgid "Reached eof before matching @end %s"
+msgstr "@end %s ¤ÎÂбþ¤ÎÁ°¤Ë¥Õ¥¡¥¤¥ë¤Î½ª¤ê¤Ë½Ð¤¯¤ï¤·¤Þ¤·¤¿"
+
+#: makeinfo/makeinfo.c:4082
+#, 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:254
+#, c-format
+msgid "ignoring stray text `%s' after @multitable"
+msgstr "@multitable ¤Î¸å¤í¤Î¥Æ¥¯¥¹¥È `%s' ¤ò̵»ë¤·¤Þ¤¹"
+
+#: makeinfo/multi.c:393
+#, c-format
+msgid "Too many columns in multitable item (max %d)"
+msgstr "¥Þ¥ë¥Á¥Æ¡¼¥Ö¥ë¹àÌÜÆâ¤Î¥«¥é¥à¿ô¤¬Â¿¤¹¤®¤Þ¤¹(ºÇÂç %d)"
+
+#: makeinfo/multi.c:555
+#, fuzzy, c-format
+msgid "[unexpected] cannot select column #%d in multitable"
+msgstr "¥Þ¥ë¥Á¥Æ¡¼¥Ö¥ëÆâ¤Ç¤Ï¡¢Âè %d ¹Ô¤òÁªÂò¤Ç¤­¤Þ¤»¤ó"
+
+#: makeinfo/multi.c:584
+msgid "ignoring @tab outside of multitable"
+msgstr "¥Þ¥ë¥Á¥Æ¡¼¥Ö¥ë¤Î³°Â¦¤Î @tab ¤ò̵»ë¤·¤Þ¤¹"
+
+#: makeinfo/multi.c:632
+#, c-format
+msgid "** Multicolumn output from last row:\n"
+msgstr "** ¥Þ¥ë¥Á¥«¥é¥à¤ÎºÇ¸å¤ÎÎ󤫤é½ÐÎÏ\n"
+
+#: makeinfo/multi.c:635
+#, c-format
+msgid "* column #%d: output = %s\n"
+msgstr "* Âè %d ¥«¥é¥à: ½ÐÎÏ = %s\n"
+
+#: makeinfo/node.c:280
+#, c-format
+msgid "Node `%s' previously defined at line %d"
+msgstr "¥Î¡¼¥É `%s' Á°(%d ¹ÔÌÜ)¤ËÄêµÁ¤µ¤ì¤Æ¤¤¤Þ¤¹"
+
+#: makeinfo/node.c:648
+#, c-format
+msgid "Formatting node %s...\n"
+msgstr "¥Î¡¼¥É %s ¤òÀ°·ÁÃæ...\n"
+
+#: makeinfo/node.c:716
+#, fuzzy, c-format
+msgid "Node `%s' requires a sectioning command (e.g., %c%s)"
+msgstr "¥Î¡¼¥É `%s' ¤Ë¤Ï¥»¥¯¥·¥ç¥óÍÑ¥³¥Þ¥ó¥É¤¬É¬ÍפǤ¹(Îã: %c%s)"
+
+#: makeinfo/node.c:879
+#, c-format
+msgid "No node name specified for `%c%s' command"
+msgstr "`%c%s' ¥³¥Þ¥ó¥É¤Ë»ØÄꤵ¤ì¤¿¥Î¡¼¥É̾¤¬¤¢¤ê¤Þ¤»¤ó"
+
+#: makeinfo/node.c:920 makeinfo/node.c:1151
+#, c-format
+msgid "Anchor `%s' and node `%s' map to the same file name"
+msgstr "¥¢¥ó¥«¡¼ `%s' ¤È¥Î¡¼¥É `%s' ¤¬Æ±¤¸¥Õ¥¡¥¤¥ë¤ò¥Þ¥Ã¥×¤·¤Æ¤¤¤Þ¤¹"
+
+#: makeinfo/node.c:923
+msgid "This @anchor command ignored; references to it will not work"
+msgstr "¤³¤Î @anchor ¥³¥Þ¥ó¥É¤Ï̵»ë¤µ¤ì¤Þ¤¹ -- ¤½¤³¤Ø¤Î»²¾È¤ÏÆ°ºî¤·¤Þ¤»¤ó"
+
+#: makeinfo/node.c:925 makeinfo/node.c:1154
+msgid "Rename this anchor or use the `--no-split' option"
+msgstr "¤³¤Î¥¢¥ó¥«¡¼Ì¾¤òÊѹ¹¤¹¤ë¤« `--no-split' ¥ª¥×¥·¥ç¥ó¤ò»È¤¤¤Þ¤·¤ç¤¦"
+
+#: makeinfo/node.c:955
+#, c-format
+msgid "Unexpected string at end of split-HTML file `%s'"
+msgstr "split-HTML ¥Õ¥¡¥¤¥ë `%s' ¤Î½ª¤ê¤Ë¡¢¤¢¤ë¤Ï¤º¤Î¤Ê¤¤Ê¸»úÎ󤬤¢¤ê¤Þ¤¹"
+
+#: makeinfo/node.c:991
+msgid "Next:"
+msgstr "¼¡:"
+
+#: makeinfo/node.c:1007
+msgid "Previous:"
+msgstr "Á°:"
+
+#: makeinfo/node.c:1021
+msgid "Up:"
+msgstr "¾å:"
+
+#: makeinfo/node.c:1148
+#, c-format
+msgid "Anchors `%s' and `%s' map to the same file name"
+msgstr "¥¢¥ó¥«¡¼ `%s' ¤È `%s' ¤¬Æ±¤¸¥Õ¥¡¥¤¥ë̾¤Ë¥Þ¥Ã¥×¤·¤Æ¤¤¤Þ¤¹"
+
+#: makeinfo/node.c:1153
+msgid "@anchor command ignored; references to it will not work"
+msgstr "@anchor ¥³¥Þ¥ó¥É¤Ï̵»ë¤µ¤ì¤Þ¤¹ -- ¤½¤³¤Ø¤Î»²¾È¤ÏÆ°ºî¤·¤Þ¤»¤ó"
+
+#: makeinfo/node.c:1347
+#, fuzzy, c-format
+msgid "%s reference to nonexistent node `%s' (perhaps incorrect sectioning?)"
+msgstr "%s ¤Ï¸ºß¤·¤Ê¤¤¥Î¡¼¥É `%s' ¤ò»²¾È¤·¤Æ¤¤¤Þ¤¹"
+
+#: makeinfo/node.c:1363
+msgid "Menu"
+msgstr "¥á¥Ë¥å¡¼"
+
+#: makeinfo/node.c:1365
+msgid "Cross"
+msgstr "Áê¸ß"
+
+#: makeinfo/node.c:1447
+#, fuzzy, c-format
+msgid "Next field of node `%s' not pointed to (perhaps incorrect sectioning?)"
+msgstr "¥Î¡¼¥É `%s' ¤Î¼¡¤Î¥Õ¥£¡¼¥ë¥É¤¬¥Î¡¼¥É¤ò»Ø¤·¤Æ¤¤¤Þ¤»¤ó -- "
+
+#: makeinfo/node.c:1450
+#, c-format
+msgid "This node (%s) has the bad Prev"
+msgstr "¤³¤Î¥Î¡¼¥É (%s) ¤Ï¤­¤Á¤ó¤È Á° ¤ò»ý¤Ã¤Æ¤¤¤Þ¤»¤ó"
+
+#: makeinfo/node.c:1462
+msgid "Prev"
+msgstr "Á°"
+
+#: makeinfo/node.c:1505
+#, c-format
+msgid "Prev field of node `%s' not pointed to"
+msgstr "¥Î¡¼¥É `%s' ¤ÎÁ°¤Î¥Õ¥£¡¼¥ë¥É¤¬¥Î¡¼¥É¤ò»Ø¤·¤Æ¤¤¤Þ¤»¤ó -- "
+
+#: makeinfo/node.c:1509
+#, c-format
+msgid "This node (%s) has the bad Next"
+msgstr "¤³¤Î¥Î¡¼¥É (%s) ¤Ï¤­¤Á¤ó¤È ¼¡ ¤ò»ý¤Ã¤Æ¤¤¤Þ¤»¤ó"
+
+#: makeinfo/node.c:1521
+#, c-format
+msgid "`%s' has no Up field (perhaps incorrect sectioning?)"
+msgstr ""
+
+#: makeinfo/node.c:1524
+msgid "Up"
+msgstr "¾å"
+
+#: makeinfo/node.c:1590
+#, c-format
+msgid "Node `%s' lacks menu item for `%s' despite being its Up target"
+msgstr ""
+"¥Î¡¼¥É `%s' ¤Ë¤Ï ¾å°Ì¹àÌܤ¬¤¢¤ë¤Î¤Ë¡¢`%s' ¤Ø¤Î¥á¥Ë¥å¡¼¥¢¥¤¥Æ¥à¤ò·ç¤¤¤Æ¤¤¤Þ¤¹"
+
+#: makeinfo/node.c:1619
+#, c-format
+msgid "node `%s' has been referenced %d times"
+msgstr "¥Î¡¼¥É `%s' ¤Ï´û¤Ë %d ²ó»²¾È¤µ¤ì¤Æ¤¤¤Þ¤¹"
+
+#: makeinfo/node.c:1633
+#, c-format
+msgid "unreferenced node `%s'"
+msgstr "»²¾È¤µ¤ì¤Æ¤¤¤Ê¤¤¥Î¡¼¥É `%s'"
+
+#: makeinfo/node.c:1723
+#, c-format
+msgid "Removing %s\n"
+msgstr ""
+
+#: makeinfo/node.c:1727
+#, 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:562
+#, c-format
+msgid "Internal error (search_sectioning) \"%s\"!"
+msgstr "ÆâÉô¥¨¥é¡¼ (Àáõº÷Ãæ) \"%s\"!"
+
+#: makeinfo/sectioning.c:623
+#, c-format
+msgid "%c%s is obsolete; use %c%s instead"
+msgstr "%c%s ¤ÏÇѻߤ·¤Þ¤·¤¿¡£ -- Âå¤ï¤ê¤Ë %c%s ¤ò»È¤Ã¤Æ¤¯¤À¤µ¤¤"
+
+#: makeinfo/sectioning.c:639
+#, c-format
+msgid "Node with %ctop as a section already exists"
+msgstr "%ctop ¤Î¥Î¡¼¥É¤Ï¡¢¥»¥¯¥·¥ç¥ó¤È¤·¤Æ´û¤Ë¸ºß¤·¤Þ¤¹"
+
+#: makeinfo/sectioning.c:647
+#, c-format
+msgid "Here is the %ctop node"
+msgstr "¤³¤³¤Ï %ctop ¥Î¡¼¥É¤Ç¤¹"
+
+#: makeinfo/sectioning.c:663
+#, c-format
+msgid "%ctop used before %cnode, defaulting to %s"
+msgstr "%ctop ¤¬ %cnode ¤ÎÁ°¤Ë»È¤ï¤ì¤Þ¤·¤¿¡¢%s ¤Ë·è¤á¤¦¤Á¤·¤Þ¤¹"
+
+#: makeinfo/toc.c:197 makeinfo/toc.c:271 makeinfo/toc.c:273
+msgid "Table of Contents"
+msgstr "Ìܼ¡"
+
+#: makeinfo/toc.c:304 makeinfo/toc.c:337 makeinfo/toc.c:339
+msgid "Short Contents"
+msgstr "´Ê°×Ìܼ¡"
+
+#: makeinfo/xml.c:1605
+#, c-format
+msgid "@image file `%s' unreadable: %s"
+msgstr "@image ¥Õ¥¡¥¤¥ë `%s' ¤¬Æɤá¤Þ¤»¤ó: %s"
+
+#: makeinfo/xml.c:2097
+msgid ""
+"@headitem as the last item of @multitable produces invalid Docbook documents"
+msgstr ""
+
+#: util/install-info.c:154
+#, c-format
+msgid "%s: warning: "
+msgstr "%s: ·Ù¹ð: "
+
+#: util/install-info.c:203
+#, c-format
+msgid " for %s"
+msgstr " %s"
+
+#: util/install-info.c:426
+#, c-format
+msgid "\tTry `%s --help' for a complete list of options.\n"
+msgstr "\t´°Á´¤Ê ¥ª¥×¥·¥ç¥ó¥ê¥¹¥È¤òÆÀ¤ë¤Ë¤Ï `%s --help' ¤ò¼Â¹Ô¤·¤Æ¤¯¤À¤µ¤¤¡£\n"
+
+#: util/install-info.c:434
+#, fuzzy, c-format
+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 ¥Ç¥£¥ì¥¯¥È¥ê¥Õ¥¡¥¤¥ë `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"
+
+#: util/install-info.c:488
+#, 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"
+
+#: util/install-info.c:513
+#, c-format
+msgid "%s: could not read (%s) and could not create (%s)\n"
+msgstr "%s: (%s) ¤òÆɤ᤺¡¢(%s) ¤òºîÀ®¤Ç¤­¤Þ¤»¤ó¤Ç¤·¤¿\n"
+
+#: util/install-info.c:600
+#, c-format
+msgid "%s: empty file"
+msgstr "%s: ¶õ¤Î¥Õ¥¡¥¤¥ë"
+
+#: util/install-info.c:913 util/install-info.c:953
+msgid "START-INFO-DIR-ENTRY without matching END-INFO-DIR-ENTRY"
+msgstr "START-INFO-DIR-ENTRY ¤ËÂбþ¤¹¤ë END-INFO-DIR-ENTRY ¤¬¤¢¤ê¤Þ¤»¤ó"
+
+#: util/install-info.c:948
+msgid "END-INFO-DIR-ENTRY without matching START-INFO-DIR-ENTRY"
+msgstr "END-INFO-DIR-ENTRY ¤ËÂбþ¤¹¤ë START-INFO-DIR-ENTRY ¤¬¤¢¤ê¤Þ¤»¤ó"
+
+#: util/install-info.c:1191 util/install-info.c:1201
+#, c-format
+msgid "%s: already have dir file: %s\n"
+msgstr ""
+
+#: util/install-info.c:1236
+#, c-format
+msgid "%s: Specify the Info file only once.\n"
+msgstr "%s: Info ¥Õ¥¡¥¤¥ë¤Ï°ìÅÙ¤À¤±»ØÄꤷ¤Æ¤¯¤À¤µ¤¤¡£\n"
+
+#: util/install-info.c:1284
+#, c-format
+msgid "excess command line argument `%s'"
+msgstr "¥³¥Þ¥ó¥É¥é¥¤¥ó°ú¿ô¤¬Â¿¤¹¤®¤Þ¤¹ `%s'"
+
+#: util/install-info.c:1288
+msgid "No input file specified; try --help for more information."
+msgstr ""
+"ÆþÎÏ¥Õ¥¡¥¤¥ë¤¬»ØÄꤵ¤ì¤Æ¤¤¤Þ¤»¤ó -- ¾Ü¤·¤¯¤Ï --help ÉդǼ¹Ԥ·¤Æ¤¯¤À¤µ¤¤¡£"
+
+#: util/install-info.c:1291
+msgid "No dir file specified; try --help for more information."
+msgstr ""
+"dir ¥Õ¥¡¥¤¥ë¤¬»ØÄꤵ¤ì¤Æ¤¤¤Þ¤»¤ó -- ¾Ü¤·¤¯¤Ï --help ÉդǼ¹Ԥ·¤Æ²¼¤µ¤¤¡£"
+
+#: util/install-info.c:1313
+#, c-format
+msgid "no info dir entry in `%s'"
+msgstr "`%s' ¤Ë Info dir ÍѤιàÌܤ¬¤¢¤ê¤Þ¤»¤ó"
+
+#: util/install-info.c:1426
+#, c-format
+msgid "menu item `%s' already exists, for file `%s'"
+msgstr "¥á¥Ë¥å¡¼¹àÌÜ `%s' ¤Ï¡¢`%s' ¤Ë´û¤Ë¸ºß¤·¤Þ¤¹"
+
+#: util/install-info.c:1449
+#, c-format
+msgid "no entries found for `%s'; nothing deleted"
+msgstr "`%s' ¹àÌܤ¬¸«¤Ä¤«¤ê¤Þ¤»¤ó -- ²¿¤âºï½ü¤·¤Þ¤»¤ó¤Ç¤·¤¿"
+
+#: util/texindex.c:252
+msgid "display this help and exit"
+msgstr "»È¤¤Êý¤òɽ¼¨¤·¤Æ½ªÎ»¤·¤Þ¤¹"
+
+#: util/texindex.c:254
+msgid "keep temporary files around after processing"
+msgstr "½èÍý¤Î¸å¤Ë¥Æ¥ó¥Ý¥é¥ê¥Õ¥¡¥¤¥ë¤ò»Ä¤·¤Æ¤ª¤­¤Þ¤¹"
+
+#: util/texindex.c:256
+msgid "do not keep temporary files around after processing (default)"
+msgstr "½èÍý¤Î¤¢¤È¤Ë¥Æ¥ó¥Ý¥é¥ê¥Õ¥¡¥¤¥ë¤òºï½ü¤·¤Þ¤¹ (default)"
+
+#: util/texindex.c:258
+msgid "send output to FILE"
+msgstr "½ÐÎϤò FILE ¤ËÁ÷¤ê¤Þ¤¹"
+
+#: util/texindex.c:260
+msgid "display version information and exit"
+msgstr "¥Ð¡¼¥¸¥ç¥ó¾ðÊó¤òɽ¼¨¤·¤Æ½ªÎ»¤·¤Þ¤¹"
+
+#: util/texindex.c:270
+#, c-format
+msgid "Usage: %s [OPTION]... FILE...\n"
+msgstr "»È¤¤Êý: %s [¥ª¥×¥·¥ç¥ó]... ¥Õ¥¡¥¤¥ë...\n"
+
+#: util/texindex.c:271
+#, c-format
+msgid "Generate a sorted index for each TeX output FILE.\n"
+msgstr "TeX ¤Î°Ù¤Î¥½¡¼¥ÈºÑ¥¤¥ó¥Ç¥Ã¥¯¥¹¥Õ¥¡¥¤¥ë¤òÀ¸À®¤·¤Þ¤¹\n"
+
+#: util/texindex.c:274
+#, 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:276
+#, c-format
+msgid ""
+"\n"
+"Options:\n"
+msgstr ""
+"\n"
+"¥ª¥×¥·¥ç¥ó:\n"
+
+#: util/texindex.c:876 util/texindex.c:910 util/texindex.c:983
+#: util/texindex.c:1011
+#, c-format
+msgid "%s: not a texinfo index file"
+msgstr "%s: texinfo ¤Î¥¤¥ó¥Ç¥Ã¥¯¥¹¥Õ¥¡¥¤¥ë¤Ç¤Ï¤¢¤ê¤Þ¤»¤ó"
+
+#: util/texindex.c:968
+#, c-format
+msgid "failure reopening %s"
+msgstr "%s ¤ÎºÆ¥ª¡¼¥×¥ó¤Ë¼ºÇÔ"
+
+#: util/texindex.c:1218
+#, c-format
+msgid "No page number in %s"
+msgstr "%s ¤Ë¥Ú¡¼¥¸Èֹ椬¤¢¤ê¤Þ¤»¤ó"
+
+#: util/texindex.c:1291
+#, c-format
+msgid "entry %s follows an entry with a secondary name"
+msgstr "%s ¹àÌܤËÆó¤ÄÌܤιàÌÜ̾¤¬Â³¤¤¤Æ¤¤¤Þ¤¹"
+
+#~ 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 "First argument to cross-reference may not be empty"
+#~ msgstr "Áê¸ß»²¾È¤Ø¤ÎÂè°ì°ú¿ô¤¬¶õ¤Ç¤¢¤Ã¤Æ¤Ï¤Ê¤ê¤Þ¤»¤ó"
+
+#~ msgid "see "
+#~ msgstr "see "
+
+#~ msgid "`.' or `,' must follow cross reference, not %c"
+#~ msgstr "`.' ¤ä ',' ¤Ï %c ¤Ç¤Ï¤Ê¤¯¡¢Áê¸ß»²¾È¤Ë³¤±¤é¤ì¤Ê¤±¤ì¤Ð¤Ê¤ê¤Þ¤»¤ó"
+
+#~ msgid "First argument to @inforef may not be empty"
+#~ msgstr "@inforef ¤Ø¤ÎÂè°ì°ú¿ô¤Ï¶õ¤Ç¤¢¤Ã¤Æ¤Ï¤Ê¤ê¤Þ¤»¤ó"
+
+#~ msgid "Node:"
+#~ msgstr "¥Î¡¼¥É:"
+
+#~ msgid "%s: TOC should be here, but it was not found"
+#~ msgstr "%s: TOC ¤¬¤³¤³¤Ë¤¢¤ë¤Ï¤º¤Ê¤Î¤Ë¡¢¸«¤Ä¤«¤ê¤Þ¤»¤ó"
+
+#~ msgid "virtual memory exhausted"
+#~ msgstr "²¾ÁÛ¥á¥â¥ê¤ò»È¤¤²Ì¤¿¤·¤Þ¤·¤¿"
+
+#~ 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' ¤Ë ¾å ¥Õ¥£¡¼¥ë¥É¤¬¤¢¤ê¤Þ¤»¤ó"
+
+#, fuzzy
+#~ msgid "\\%-10[scroll-forward] Scroll forward 1 line.\n"
+#~ msgstr " %-10s 1 ¹ÔʬÁ°Êý¤Ø¤¹¤¹¤á¤ë¡£\n"
+
+#, fuzzy
+#~ msgid "\\%-10[scroll-backward] Scroll backward 1 line.\n"
+#~ msgstr " %-10s 1 ¹Ôʬ¸åÊý¤ØÌ᤹¡£\n"
+
+#~ 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/macros/texinfo/contrib/texinfo-hu/texinfo/po/nb.gmo b/macros/texinfo/contrib/texinfo-hu/texinfo/po/nb.gmo
new file mode 100644
index 0000000000..d29bd4223a
--- /dev/null
+++ b/macros/texinfo/contrib/texinfo-hu/texinfo/po/nb.gmo
Binary files differ
diff --git a/macros/texinfo/contrib/texinfo-hu/texinfo/po/nb.po b/macros/texinfo/contrib/texinfo-hu/texinfo/po/nb.po
new file mode 100644
index 0000000000..316de2e825
--- /dev/null
+++ b/macros/texinfo/contrib/texinfo-hu/texinfo/po/nb.po
@@ -0,0 +1,3108 @@
+# 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: 2004-12-21 16:20-0800\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"
+
+#: info/echo-area.c:284 info/session.c:689
+msgid "Move forward a character"
+msgstr "Flytte forover et tegn"
+
+#: info/echo-area.c:296 info/session.c:705
+msgid "Move backward a character"
+msgstr "Flytte bakover et tegn"
+
+#: info/echo-area.c:308
+msgid "Move to the start of this line"
+msgstr "Flytte til starten av denne linjen"
+
+#: info/echo-area.c:313
+msgid "Move to the end of this line"
+msgstr "Flytte til slutten av denne linjen"
+
+#: info/echo-area.c:321 info/session.c:723
+msgid "Move forward a word"
+msgstr "Flytte forover et ord"
+
+#: info/echo-area.c:361 info/session.c:772
+msgid "Move backward a word"
+msgstr "Flytte tilbake et ord"
+
+#: info/echo-area.c:401
+msgid "Delete the character under the cursor"
+msgstr "Slette tegnet under markøren"
+
+#: info/echo-area.c:431
+msgid "Delete the character behind the cursor"
+msgstr "Slette tegnet bak markøren"
+
+#: info/echo-area.c:452
+msgid "Cancel or quit operation"
+msgstr "Avbryte eller avslutte operasjon"
+
+#: info/echo-area.c:467
+msgid "Accept (or force completion of) this line"
+msgstr "Godta (eller tvinge fullføring av) denne linjen"
+
+#: info/echo-area.c:472
+msgid "Insert next character verbatim"
+msgstr "Sette inn neste tegn ordrett"
+
+#: info/echo-area.c:480
+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:653
+msgid "Kill the word preceding the cursor"
+msgstr "Slette ordet før markøren"
+
+#: info/echo-area.c:868 info/echo-area.c:924
+msgid "No completions"
+msgstr "Ingen fullføringer"
+
+#: info/echo-area.c:870
+msgid "Not complete"
+msgstr "Ikke fullstendig"
+
+#: info/echo-area.c:911
+msgid "List possible completions"
+msgstr "Liste mulige fullføringer"
+
+#: info/echo-area.c:928
+msgid "Sole completion"
+msgstr "Eneste fullføring"
+
+#: info/echo-area.c:937
+msgid "One completion:\n"
+msgstr "En fullføring:\n"
+
+#: info/echo-area.c:938
+#, c-format
+msgid "%d completions:\n"
+msgstr "%d fullføringer:\n"
+
+#: info/echo-area.c:1085
+msgid "Insert completion"
+msgstr "Sett inn fullføring"
+
+#: info/echo-area.c:1220
+msgid "Building completions..."
+msgstr "Bygger fullføringer..."
+
+#: info/echo-area.c:1340
+msgid "Scroll the completions window"
+msgstr "Rulle fullføringsvinduet"
+
+#: info/footnotes.c:213
+msgid "Footnotes could not be displayed"
+msgstr "Fotnoter kunne ikke vises"
+
+#: info/footnotes.c:239
+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:172
+msgid "Look up a string in the index for this file"
+msgstr "Lete opp en streng i indeksen til denne filen"
+
+#: info/indices.c:199
+msgid "Finding index entries..."
+msgstr "Finner indeksinnslag..."
+
+#: info/indices.c:207
+msgid "No indices found."
+msgstr "Ingen indekser funnet."
+
+#: info/indices.c:217
+msgid "Index entry: "
+msgstr "Indeksinnslag: "
+
+#: info/indices.c:325
+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:335
+msgid "No previous index search string."
+msgstr "Ingen tidligere indekssøkestrenger."
+
+#: info/indices.c:342
+msgid "No index entries."
+msgstr "Ingen indeksinnslag."
+
+#: info/indices.c:375
+#, c-format
+msgid "No %sindex entries containing `%s'."
+msgstr "Ingen %sindeksinnslag inneholdende «%s»."
+
+#: info/indices.c:376
+msgid "more "
+msgstr "mer "
+
+#: info/indices.c:386
+msgid "CAN'T SEE THIS"
+msgstr "KAN IKKE SE DETTE"
+
+#: info/indices.c:422
+#, 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:541
+#, c-format
+msgid "Scanning indices of `%s'..."
+msgstr "Sjekker indekser i «%s»..."
+
+#: info/indices.c:596
+#, 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:622
+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:626
+msgid "Index apropos: "
+msgstr "Indeksapropos: "
+
+#: info/indices.c:654
+#, 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:295 makeinfo/makeinfo.c:766 util/install-info.c:1266
+#: util/texindex.c:343
+#, c-format
+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"
+
+#: info/info.c:498
+#, c-format
+msgid "no index entries found for `%s'\n"
+msgstr "ingen innslag funnet for «%s»\n"
+
+#: info/info.c:590
+msgid " -b, --speech-friendly be friendly to speech synthesizers.\n"
+msgstr ""
+" -b, --speech-friendly vær vennlig ovenfor talesyntetisatorer.\n"
+
+#: info/info.c:597
+#, c-format
+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 -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"
+
+#: info/info.c:635 info/infokey.c:918 makeinfo/makeinfo.c:465
+#: util/install-info.c:466 util/texindex.c:292
+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:669
+#, c-format
+msgid "Cannot find node `%s'."
+msgstr "Kan ikke finne noden «%s»."
+
+#: info/info.c:670
+#, c-format
+msgid "Cannot find node `(%s)%s'."
+msgstr "Kan ikke finne noden «(%s)%s»."
+
+#: info/info.c:671
+msgid "Cannot find a window!"
+msgstr "Kan ikke finne et vindu!"
+
+#: info/info.c:672
+msgid "Point doesn't appear within this window's node!"
+msgstr "Markøren vises ikke innen dette vinduets node!"
+
+#: info/info.c:673
+msgid "Cannot delete the last window."
+msgstr "Kan ikke slette det siste vinduet."
+
+#: info/info.c:674
+msgid "No menu in this node."
+msgstr "Ingen meny i denne noden."
+
+#: info/info.c:675
+msgid "No footnotes in this node."
+msgstr "Ingen fotnoter i denne noden."
+
+#: info/info.c:676
+msgid "No cross references in this node."
+msgstr "Ingen kryssreferanser i denne noden."
+
+#: info/info.c:677
+#, c-format
+msgid "No `%s' pointer for this node."
+msgstr "Ingen «%s»-peker for denne noden."
+
+#: info/info.c:678
+#, c-format
+msgid "Unknown Info command `%c'; try `?' for help."
+msgstr "Ukjent Info-kommando «%c»; prøv «?» for hjelp."
+
+#: info/info.c:679
+#, 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:680
+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:681
+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:682
+msgid "Only one window."
+msgstr "Bare et vindu."
+
+#: info/info.c:683
+msgid "Resulting window would be too small."
+msgstr "Resulterende vindu ville blitt for lite."
+
+#: info/info.c:684
+msgid "Not enough room for a help window, please delete a window."
+msgstr "Ikke nok plass for et hjelpevindu, vennligst slett et vindu."
+
+# The next translation should match the length of this one
+#: info/infodoc.c:46 info/infodoc.c:95
+msgid ""
+"Basic Commands in Info Windows\n"
+"******************************\n"
+msgstr ""
+"Grunnleggende kommandoer i infovinduer\n"
+"**************************************\n"
+
+#: info/infodoc.c:49
+msgid "\\%-10[quit-help] Quit this help.\n"
+msgstr "\\%-10[quit-help] Avslutte denne hjelpen.\n"
+
+#: info/infodoc.c:50
+msgid "\\%-10[quit] Quit Info altogether.\n"
+msgstr "\\%-10[quit] Avslutte Info fullstendig.\n"
+
+#: info/infodoc.c:51
+msgid "\\%-10[get-info-help-node] Invoke the Info tutorial.\n"
+msgstr "\\%-10[get-info-help-node] Starte Infoopplæring.\n"
+
+# The next translation should match the length of this one
+#: info/infodoc.c:53 info/infodoc.c:102
+msgid ""
+"Selecting other nodes:\n"
+"----------------------\n"
+msgstr ""
+"Velger andre noder:\n"
+"-------------------\n"
+
+#: info/infodoc.c:55
+msgid "\\%-10[next-node] Move to the \"next\" node of this node.\n"
+msgstr "\\%-10[next-node] Flytte til neste node etter denne noden.\n"
+
+#: info/infodoc.c:56
+msgid "\\%-10[prev-node] Move to the \"previous\" node of this node.\n"
+msgstr "\\%-10[prev-node] Flytte til forrige node før denne noden.\n"
+
+#: info/infodoc.c:57
+msgid "\\%-10[up-node] Move \"up\" from this node.\n"
+msgstr "\\%-10[up-node] Flytte «opp» fra denne noden.\n"
+
+#: info/infodoc.c:58
+msgid ""
+"\\%-10[menu-item] 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:60
+msgid ""
+"\\%-10[xref-item] Follow a cross reference. Reads name of reference.\n"
+msgstr ""
+"\\%-10[history-node] Følge en kryssreferanse. Leser navnet til "
+"referansen.\n"
+
+#: info/infodoc.c:61
+msgid "\\%-10[history-node] Move 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
+msgid ""
+"\\%-10[move-to-next-xref] Skip to next hypertext link within this node.\n"
+msgstr ""
+"\\%-10[move-to-prev-xref] Flytte til neste hypertekstlenke innen denne "
+"noden.\n"
+
+#: info/infodoc.c:63
+msgid ""
+"\\%-10[move-to-prev-xref] Skip to previous hypertext link within this "
+"node.\n"
+msgstr ""
+"\\%-10[move-to-prev-xref] Flytte til neste hypertekstlenke innen denne "
+"noden.\n"
+
+#: info/infodoc.c:64
+msgid ""
+"\\%-10[select-reference-this-line] Follow the hypertext link under cursor.\n"
+msgstr "\\%-10[dir-node] Følge hypertekstlenken under markøren.\n"
+
+#: info/infodoc.c:65
+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"
+
+#: info/infodoc.c:66
+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"
+
+# The next translation should match the length of this one
+#: info/infodoc.c:68 info/infodoc.c:116
+msgid ""
+"Moving within a node:\n"
+"---------------------\n"
+msgstr ""
+"Flytte innen en node:\n"
+"---------------------\n"
+
+#: info/infodoc.c:70
+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:71
+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:72
+msgid "\\%-10[next-line] Scroll forward 1 line.\n"
+msgstr "\\%-10[next-line] Rulle forover 1 linje.\n"
+
+#: info/infodoc.c:73
+msgid "\\%-10[prev-line] Scroll backward 1 line.\n"
+msgstr "\\%-10[prev-line] Rulle bakover 1 linje.\n"
+
+#: info/infodoc.c:74
+msgid "\\%-10[scroll-forward] Scroll forward a page.\n"
+msgstr "\\%-10[scroll-forward] Rulle forover en side.\n"
+
+#: info/infodoc.c:75
+msgid "\\%-10[scroll-backward] Scroll backward a page.\n"
+msgstr "\\%-10[scroll-backward] Rulle bakover en side.\n"
+
+# The next translation should match the length of this one
+#: info/infodoc.c:77 info/infodoc.c:125
+msgid ""
+"Other commands:\n"
+"---------------\n"
+msgstr ""
+"Andre kommandoer:\n"
+"-----------------\n"
+
+#: info/infodoc.c:79
+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"
+
+#: info/infodoc.c:80
+msgid "\\%-10[last-menu-item] Pick last item in node's menu.\n"
+msgstr "\\%-10[last-menu-item] Velge det siste punktet i nodens meny.\n"
+
+#: info/infodoc.c:81
+msgid ""
+"\\%-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"
+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:83
+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"
+
+#: info/infodoc.c:85
+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"
+
+#: info/infodoc.c:87
+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"
+
+#: info/infodoc.c:98
+#, c-format
+msgid " %-10s Quit this help.\n"
+msgstr " %-10s Avslutte denne hjelpen.\n"
+
+#: info/infodoc.c:99
+#, c-format
+msgid " %-10s Quit Info altogether.\n"
+msgstr " %-10s Avslutte Info fullstendig.\n"
+
+#: info/infodoc.c:100
+#, c-format
+msgid " %-10s Invoke the Info tutorial.\n"
+msgstr " %-10s Starte Infoopplæring.\n"
+
+#: info/infodoc.c:104
+#, 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:105
+#, 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:106
+#, c-format
+msgid " %-10s Move `up' from this node.\n"
+msgstr " %-10s Flytte «opp» fra denne noden.\n"
+
+#: info/infodoc.c:107
+#, c-format
+msgid " %-10s Pick menu item specified by name.\n"
+msgstr " %-10s Velge menypunkt spesifisert ved navn.\n"
+
+#: info/infodoc.c:108
+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"
+
+#: info/infodoc.c:109
+#, 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:110
+#, 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:111
+#, 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:112
+#, c-format
+msgid " %-10s Follow the hypertext link under cursor.\n"
+msgstr " %-10s Følge hypertekstlenken under markøren.\n"
+
+#: info/infodoc.c:113
+#, 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:114
+#, 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"
+
+#: info/infodoc.c:118
+#, c-format
+msgid " %-10s Scroll forward a page.\n"
+msgstr " %-10s Rulle forover en side.\n"
+
+#: info/infodoc.c:119
+#, c-format
+msgid " %-10s Scroll backward a page.\n"
+msgstr " %-10s Rulle bakover en side.\n"
+
+#: info/infodoc.c:120
+#, c-format
+msgid " %-10s Go to the beginning of this node.\n"
+msgstr " %-10s Gå til begynnelsen av denne noden.\n"
+
+#: info/infodoc.c:121
+#, c-format
+msgid " %-10s Go to the end of this node.\n"
+msgstr " %-10s Gå til slutten av denne noden.\n"
+
+#: info/infodoc.c:122
+#, c-format
+msgid " %-10s Scroll forward 1 line.\n"
+msgstr " %-10s Rulle forover 1 linje.\n"
+
+#: info/infodoc.c:123
+#, c-format
+msgid " %-10s Scroll backward 1 line.\n"
+msgstr " %-10s Rulle bakover 1 linje.\n"
+
+#: info/infodoc.c:127
+#, 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:128
+#, c-format
+msgid " %-10s Pick last item in node's menu.\n"
+msgstr " %-10s Velge det siste punktet i nodens meny.\n"
+
+# This translation is connected to the next one
+#: info/infodoc.c:129
+#, c-format
+msgid ""
+" %-10s Search for a specified string in the index entries of this Info\n"
+msgstr " %-10s Søke etter en spesifikk streng i indeksinnslagene i denne\n"
+
+#: info/infodoc.c:130
+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"
+
+#: info/infodoc.c:131
+#, c-format
+msgid " %-10s Move to node specified by name.\n"
+msgstr " %-10s Flytte til noden spesifisert av navn.\n"
+
+#: info/infodoc.c:132
+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"
+
+#: info/infodoc.c:133
+#, c-format
+msgid " %-10s Search forward for a specified string,\n"
+msgstr ""
+" %-10s Søke forlengs gjennom denne Infofilen for en spesifikk streng,\n"
+
+#: info/infodoc.c:134 info/infodoc.c:136
+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"
+
+#: info/infodoc.c:135
+#, c-format
+msgid " %-10s Search backward for a specified string\n"
+msgstr ""
+" %-10s Søke baklengs gjennom denne Infofilen for en spesifikk streng,\n"
+
+#: info/infodoc.c:316
+msgid "The current search path is:\n"
+msgstr "Gjeldende søkesti er:\n"
+
+#: info/infodoc.c:320
+msgid ""
+"Commands available in Info windows:\n"
+"\n"
+msgstr ""
+"Kommandoer tilgjengelig i Infovinduer:\n"
+"\n"
+
+#: info/infodoc.c:324
+msgid ""
+"Commands available in the echo area:\n"
+"\n"
+msgstr ""
+"Kommandoer tilgjengelig i ekkoområdet:\n"
+"\n"
+
+#: info/infodoc.c:347
+#, 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:351
+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:375
+msgid "--- Use `\\[history-node]' or `\\[kill-node]' to exit ---\n"
+msgstr "--- Bruk «\\[history-node]» eller «\\[kill-node]» for å avslutte ---\n"
+
+#: info/infodoc.c:485
+msgid "Display help message"
+msgstr "Vise hjelpemelding"
+
+#: info/infodoc.c:503
+msgid "Visit Info node `(info)Help'"
+msgstr "Vise infonoden «(info)Help»"
+
+#: info/infodoc.c:641
+msgid "Print documentation for KEY"
+msgstr "Skrive ut dokumentasjonen for KEY"
+
+#: info/infodoc.c:653
+#, c-format
+msgid "Describe key: %s"
+msgstr "Beskriv tast: %s"
+
+#: info/infodoc.c:664
+#, c-format
+msgid "ESC %s is undefined."
+msgstr "ESC %s er udefinert."
+
+#: info/infodoc.c:680 info/infodoc.c:709
+#, c-format
+msgid "%s is undefined."
+msgstr "%s er udefinert."
+
+#: info/infodoc.c:730
+#, c-format
+msgid "%s is defined to %s."
+msgstr "%s er definert som %s."
+
+#: info/infodoc.c:1153
+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:1157
+msgid "Where is command: "
+msgstr "Hvor er kommandoen: "
+
+#: info/infodoc.c:1179
+#, c-format
+msgid "`%s' is not on any keys"
+msgstr "«%s» er ikke på noen taster"
+
+#: info/infodoc.c:1186
+#, c-format
+msgid "%s can only be invoked via %s."
+msgstr "%s kan bare bli påkallet via %s."
+
+#: info/infodoc.c:1190
+#, c-format
+msgid "%s can be invoked via %s."
+msgstr "%s kan bli påkallet via %s."
+
+#: info/infodoc.c:1195
+#, c-format
+msgid "There is no function named `%s'"
+msgstr "Det finnes ingen funksjon ved navn «%s»"
+
+#: info/infokey.c:145
+#, c-format
+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"
+"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"
+
+#: 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:1500
+#, c-format
+msgid "Ignoring invalid infokey file `%s' - too small"
+msgstr "Ignorerer ugyldig infokeyfil «%s» - for liten"
+
+#: info/infomap.c:1503
+#, c-format
+msgid "Ignoring invalid infokey file `%s' - too big"
+msgstr "Ignorerer ugyldig infokeyfil «%s» - for stor"
+
+#: info/infomap.c:1516
+#, c-format
+msgid "Error reading infokey file `%s' - short read"
+msgstr "Feil ved lesing av infokeyfil «%s» - for kort"
+
+#: info/infomap.c:1535
+#, 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:1544
+#, 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:1560
+#, 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:1581
+#, 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:1716
+msgid "Bad data in infokey file -- some key bindings ignored"
+msgstr "Feil data i infokeyfil -- noen tastebindinger ble ignorert"
+
+#: info/infomap.c:1766
+msgid "Bad data in infokey file -- some var settings ignored"
+msgstr "Feil data i infokeyfil -- noen variabelinnstillinger ble ignorert"
+
+#: info/m-x.c:69
+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:73
+msgid "Describe command: "
+msgstr "Beskriv kommandoen: "
+
+#: info/m-x.c:96
+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:140
+msgid "Cannot execute an `echo-area' command here."
+msgstr "Kan ikke utføre en «echo-area»-kommando her."
+
+#: info/m-x.c:154
+#, c-format
+msgid "Undefined command: %s"
+msgstr "udefinert kommando: %s"
+
+#: info/m-x.c:160
+msgid "Set the height of the displayed window"
+msgstr "Sette høyden på det viste vinduet"
+
+#: info/m-x.c:173
+#, c-format
+msgid "Set screen height to (%d): "
+msgstr "Sette skjermhøyde til (%d): "
+
+#: info/makedoc.c:162 info/makedoc.c:170
+#, 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:550
+#, c-format
+msgid "Couldn't manipulate the file %s.\n"
+msgstr "Kunne ikke manipulere filen %s.\n"
+
+#: info/nodemenu.c:31
+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:202
+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:224
+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:304
+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:317
+msgid "Select visited node: "
+msgstr "Velg besøkt node: "
+
+#: info/nodemenu.c:337 info/session.c:2264
+#, c-format
+msgid "The reference disappeared! (%s)."
+msgstr "Referansen forsvant! (%s)."
+
+#: info/session.c:162
+#, 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:620
+msgid "Move down to the next line"
+msgstr "Flytte ned til neste linje"
+
+#: info/session.c:635
+msgid "Move up to the previous line"
+msgstr "Flytte opp til den forrige linjen"
+
+#: info/session.c:650
+msgid "Move to the end of the line"
+msgstr "Flytte til slutten av linjen"
+
+#: info/session.c:670
+msgid "Move to the start of the line"
+msgstr "Flytte til starten av linjen"
+
+#: info/session.c:860 makeinfo/node.c:1424
+msgid "Next"
+msgstr "neste"
+
+#: info/session.c:863
+msgid "Following Next node..."
+msgstr "Følger nestenoden..."
+
+#: info/session.c:881
+msgid "Selecting first menu item..."
+msgstr "Velger første menypunkt..."
+
+#: info/session.c:893
+msgid "Selecting Next node..."
+msgstr "Velger nestenoden..."
+
+#: info/session.c:964
+#, c-format
+msgid "Moving Up %d time(s), then Next."
+msgstr "Flytter opp %d gang(er), deretter neste."
+
+#: info/session.c:988
+msgid "No more nodes within this document."
+msgstr "Ingen flere noder i dette dokumentet."
+
+#: info/session.c:1011
+msgid "No `Prev' for this node."
+msgstr "Ingen «forrige» for denne noden."
+
+#: info/session.c:1014 info/session.c:1073
+msgid "Moving Prev in this window."
+msgstr "Flytter til forrige i dette vinduet."
+
+#: info/session.c:1030
+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:1034
+msgid "Moving Up in this window."
+msgstr "Flytter opp i dette vinduet."
+
+#: info/session.c:1084
+msgid "Moving to `Prev's last menu item."
+msgstr "Flytter til «forrige»s siste menypunkt."
+
+#: info/session.c:1095
+msgid "Move forwards or down through node structure"
+msgstr "Flytte forover eller ned gjennom nodestrukturen"
+
+#: info/session.c:1111
+msgid "Move backwards or up through node structure"
+msgstr "Flytte tilbake eller opp gjennom nodestrukturen"
+
+#: info/session.c:1205
+msgid "Scroll forward in this window"
+msgstr "Rulle forover i dette vinduet"
+
+#: info/session.c:1213
+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:1221
+msgid "Scroll forward in this window staying within node"
+msgstr "Rulle forover i dette vinduet, men forbli innenfor noden"
+
+#: info/session.c:1229
+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:1237
+msgid "Scroll backward in this window"
+msgstr "Rulle bakover i dette vinduet"
+
+#: info/session.c:1245
+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:1254
+msgid "Scroll backward in this window staying within node"
+msgstr "Rulle bakover i dette vinduet, men forbli innenfor noden"
+
+#: info/session.c:1262
+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:1270
+msgid "Move to the start of this node"
+msgstr "Flytte til starten av denne noden"
+
+#: info/session.c:1277
+msgid "Move to the end of this node"
+msgstr "Flytte til slutten av denne noden"
+
+#: info/session.c:1284
+msgid "Scroll down by lines"
+msgstr "Rulle ned pr. antall linjer"
+
+#: info/session.c:1301
+msgid "Scroll up by lines"
+msgstr "Rulle opp pr. antall linjer"
+
+#: info/session.c:1319
+msgid "Scroll down by half screen size"
+msgstr "Rulle ned en halv side"
+
+#: info/session.c:1345
+msgid "Scroll up by half screen size"
+msgstr "Rulle opp en halv side"
+
+#: info/session.c:1374
+msgid "Select the next window"
+msgstr "Velge neste vindu"
+
+#: info/session.c:1413
+msgid "Select the previous window"
+msgstr "Velge forrige vindu"
+
+#: info/session.c:1464
+msgid "Split the current window"
+msgstr "Dele gjeldende vindu"
+
+#: info/session.c:1545
+msgid "Delete the current window"
+msgstr "Slette den gjeldende vindu"
+
+#: info/session.c:1553
+msgid "Cannot delete a permanent window"
+msgstr "Kan ikke slette et permanent vindu"
+
+#: info/session.c:1585
+msgid "Delete all other windows"
+msgstr "Slette alle andre vinduer"
+
+#: info/session.c:1631
+msgid "Scroll the other window"
+msgstr "Rulle det andre vinduet"
+
+#: info/session.c:1652
+msgid "Scroll the other window backward"
+msgstr "Rulle det andre vinduet bakover"
+
+#: info/session.c:1658
+msgid "Grow (or shrink) this window"
+msgstr "Øke (eller minke) dette vinduet"
+
+#: info/session.c:1669
+msgid "Divide the available screen space among the visible windows"
+msgstr "Dele den tilgjengelige skjermplassen mellom de synlige vinduene"
+
+#: info/session.c:1676
+msgid "Toggle the state of line wrapping in the current window"
+msgstr "Veksle tilstanden til linjebryting i gjeldende vindu"
+
+#: info/session.c:1848
+msgid "Select the Next node"
+msgstr "Velge neste node"
+
+#: info/session.c:1856
+msgid "Select the Prev node"
+msgstr "Velge forrige node"
+
+#: info/session.c:1864
+msgid "Select the Up node"
+msgstr "Velge oppnoden"
+
+#: info/session.c:1871
+msgid "Select the last node in this file"
+msgstr "Velge den siste noden i denne filen"
+
+#: info/session.c:1898 info/session.c:1931
+msgid "This window has no additional nodes"
+msgstr "Dette vinduet har ingen andre noder"
+
+#: info/session.c:1904
+msgid "Select the first node in this file"
+msgstr "Velge første node i denne filen"
+
+#: info/session.c:1938
+msgid "Select the last item in this node's menu"
+msgstr "Velge det siste punktet i nodens meny"
+
+#: info/session.c:1944
+msgid "Select this menu item"
+msgstr "Velge dette menypunktet"
+
+#: info/session.c:1977
+#, c-format
+msgid "There aren't %d items in this menu."
+msgstr "Det er ikke %d punkter i denne menyen."
+
+#: info/session.c:2171 info/session.c:2172
+#, c-format
+msgid "Menu item (%s): "
+msgstr "Menypunkt (%s): "
+
+#: info/session.c:2175
+msgid "Menu item: "
+msgstr "Menypunkt: "
+
+#: info/session.c:2182 info/session.c:2183
+#, c-format
+msgid "Follow xref (%s): "
+msgstr "Følge kryssreferanse (%s): "
+
+#: info/session.c:2186
+msgid "Follow xref: "
+msgstr "Følge kryssreferanse: "
+
+#: info/session.c:2315
+msgid "Read a menu item and select its node"
+msgstr "Lese et menyvalg og velge dens node"
+
+#: info/session.c:2323
+msgid "Read a footnote or cross reference and select its node"
+msgstr "Lese en fotnote eller kryssreferanse og velge dens node"
+
+#: info/session.c:2329
+msgid "Move to the start of this node's menu"
+msgstr "Flytte til starten av denne nodens meny"
+
+#: info/session.c:2353
+msgid "Visit as many menu items at once as possible"
+msgstr "Besøke så mange menypunkter som mulig samtidig"
+
+#: info/session.c:2381
+msgid "Read a node name and select it"
+msgstr "Lese et nodenavn og velge det"
+
+#: info/session.c:2436 info/session.c:2441
+msgid "Goto node: "
+msgstr "Gå til node: "
+
+#: info/session.c:2505
+#, c-format
+msgid "No menu in node `%s'."
+msgstr "Ingen meny i noden «%s»."
+
+#: info/session.c:2551
+#, c-format
+msgid "No menu item `%s' in node `%s'."
+msgstr "Ingen menypunkt «%s» i noden «%s»."
+
+#: info/session.c:2581
+#, 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:2631
+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:2633
+msgid "Follow menus: "
+msgstr "Følge menyer: "
+
+#: info/session.c:2826
+msgid "Find the node describing program invocation"
+msgstr "Finne noden som beskriver bruksmåten for programmet"
+
+#: info/session.c:2828
+#, c-format
+msgid "Find Invocation node of [%s]: "
+msgstr "Finne Invocation-noden til [%s]: "
+
+#: info/session.c:2866
+msgid "Read a manpage reference and select it"
+msgstr "Lese en manualside-referanse og velge den"
+
+#: info/session.c:2870
+msgid "Get Manpage: "
+msgstr "Hent manualsiden: "
+
+#: info/session.c:2900
+msgid "Select the node `Top' in this file"
+msgstr "Velge «Top»-noden i denne filen"
+
+#: info/session.c:2906
+msgid "Select the node `(dir)'"
+msgstr "Velge noden «(dir)»"
+
+#: info/session.c:2923 info/session.c:2925
+#, c-format
+msgid "Kill node (%s): "
+msgstr "Slette noden (%s): "
+
+#: info/session.c:2977
+#, c-format
+msgid "Cannot kill node `%s'"
+msgstr "Kan ikke slette noden «%s»"
+
+#: info/session.c:2987
+msgid "Cannot kill the last node"
+msgstr "Kan ikke slette den forrige noden"
+
+#: info/session.c:3073
+msgid "Select the most recently selected node"
+msgstr "Velge den sist valgte noden"
+
+#: info/session.c:3079
+msgid "Kill this node"
+msgstr "Slette denne noden"
+
+#: info/session.c:3087
+msgid "Read the name of a file and select it"
+msgstr "Lese inn navnet på en fil og velge den"
+
+#: info/session.c:3091
+msgid "Find file: "
+msgstr "Finne fil: "
+
+#: info/session.c:3108
+#, c-format
+msgid "Cannot find `%s'."
+msgstr "Kan ikke finne «%s»."
+
+#: info/session.c:3151 info/session.c:3269
+#, c-format
+msgid "Could not create output file `%s'."
+msgstr "Kunne ikke opprette utskriftsfil «%s»."
+
+#: info/session.c:3165 info/session.c:3287 info/session.c:3347
+msgid "Done."
+msgstr "Ferdig."
+
+#: info/session.c:3220
+#, 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:3296
+msgid "Pipe the contents of this node through INFO_PRINT_COMMAND"
+msgstr "«Pipe» innholdet av denne noden gjennom INFO_PRINT_COMMAND"
+
+#: info/session.c:3331
+#, c-format
+msgid "Cannot open pipe to `%s'."
+msgstr "Kan ikke åpne «pipe» til «%s»."
+
+#: info/session.c:3337
+#, c-format
+msgid "Printing node %s..."
+msgstr "Skriver ut noden «%s»..."
+
+#: info/session.c:3567
+#, c-format
+msgid "Searching subfile %s ..."
+msgstr "Søker i delfil «%s»..."
+
+#: info/session.c:3619
+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:3626
+msgid "Read a string and search for it"
+msgstr "Lese inn en streng og søke etter den"
+
+#: info/session.c:3634
+msgid "Read a string and search backward for it"
+msgstr "Lese inn en streng og søke bakover etter den"
+
+#: info/session.c:3670 info/session.c:3677
+#, c-format
+msgid "%s%sfor string [%s]: "
+msgstr "%s%setter streng [%s]: "
+
+#: info/session.c:3671 info/session.c:3678
+msgid "Search backward"
+msgstr "Søke bakover"
+
+#: info/session.c:3672 info/session.c:3678
+msgid "Search"
+msgstr "Søke"
+
+#: info/session.c:3673 info/session.c:3679
+msgid " case-sensitively "
+msgstr " med skille på store og små bokstaver "
+
+#: info/session.c:3674 info/session.c:3679
+msgid " "
+msgstr " "
+
+#: info/session.c:3718
+msgid "Search failed."
+msgstr "Søk mislyktes"
+
+#: info/session.c:3736
+msgid "Repeat last search in the same direction"
+msgstr "Gjenta forrige søk i samme retning"
+
+#: info/session.c:3739 info/session.c:3749
+msgid "No previous search string"
+msgstr "Ingen tidligere søkestreng"
+
+#: info/session.c:3746
+msgid "Repeat last search in the reverse direction"
+msgstr "Gjenta forrige søk i motsatt retning"
+
+#: info/session.c:3765 info/session.c:3771
+msgid "Search interactively for a string as you type it"
+msgstr "Søke interaktivt for en streng mens du skriver"
+
+#: info/session.c:3851
+msgid "I-search backward: "
+msgstr "I-søk bakover: "
+
+#: info/session.c:3853
+msgid "I-search: "
+msgstr "I-søk: "
+
+#: info/session.c:3878 info/session.c:3880
+msgid "Failing "
+msgstr "Mislyktes "
+
+#: info/session.c:4340
+msgid "Move to the previous cross reference"
+msgstr "Flytte til forrige kryssreferanse"
+
+#: info/session.c:4349
+msgid "Move to the next cross reference"
+msgstr "Flytte til neste kryssreferanse"
+
+#: info/session.c:4359
+msgid "Select reference or menu item appearing on this line"
+msgstr "Velge referanse eller menypunkt på denne linjen"
+
+#: info/session.c:4382
+msgid "Cancel current operation"
+msgstr "Avbryte gjeldende operasjon"
+
+#: info/session.c:4389
+msgid "Quit"
+msgstr "Avbrutt"
+
+#: info/session.c:4398
+msgid "Move the cursor to a specific line of the window"
+msgstr "Flytte markøren til en angitt linje i vinduet"
+
+#: info/session.c:4430
+msgid "Redraw the display"
+msgstr "Tegne skjermen på nytt"
+
+#: info/session.c:4467
+msgid "Quit using Info"
+msgstr "Avslutte Info"
+
+#: info/session.c:4480
+msgid "Run command bound to this key's lowercase variant"
+msgstr "Kjør kommandoen knyttet til denne tastens «liten-bokstav-variant»"
+
+#: info/session.c:4491
+#, c-format
+msgid "Unknown command (%s)."
+msgstr "Ukjent kommando (%s)."
+
+#: info/session.c:4494
+#, c-format
+msgid "\"%s\" is invalid"
+msgstr "«%s» er ugyldig"
+
+#: info/session.c:4495
+#, c-format
+msgid "`%s' is invalid"
+msgstr "«%s» er ugyldig"
+
+#: info/session.c:4709
+msgid "Add this digit to the current numeric argument"
+msgstr "Legge til dette siffret til det gjeldende numeriske argumentet"
+
+#: info/session.c:4718
+msgid "Start (or multiply by 4) the current numeric argument"
+msgstr "Starte (eller multiplisere med 4) den gjeldende numeriske argumentet"
+
+#: info/session.c:4733
+msgid "Internally used by \\[universal-argument]"
+msgstr "Brukt internt av \\[universal-argument]"
+
+#: info/tilde.c:338
+#, 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:64
+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:68
+msgid "When \"On\", Info accepts and displays ISO Latin characters"
+msgstr "Når «On», aksepterer og viser Info ISO-Latin-tegn"
+
+#: info/variables.c:74
+msgid "Explain the use of a variable"
+msgstr "Forklar bruken av en variabel"
+
+#: info/variables.c:80
+msgid "Describe variable: "
+msgstr "Beskriv variabel: "
+
+#: info/variables.c:99
+msgid "Set the value of an Info variable"
+msgstr "Sette verdien til en Infovariabel"
+
+#: info/variables.c:105
+msgid "Set variable: "
+msgstr "Sett variabel: "
+
+#: info/variables.c:123
+#, c-format
+msgid "Set %s to value (%d): "
+msgstr "Sette %s til verdien (%d): "
+
+#: info/variables.c:164
+#, c-format
+msgid "Set %s to value (%s): "
+msgstr "Sette %s til verdien (%s): "
+
+#: info/window.c:1138
+msgid "--*** Tags out of Date ***"
+msgstr "--*** Tagger er ute av synk ***"
+
+#: info/window.c:1149
+msgid "-----Info: (), lines ----, "
+msgstr "-----Info: (), linjer ----, "
+
+#: info/window.c:1156
+#, c-format
+msgid "-%s---Info: %s, %d lines --%s--"
+msgstr "-%s---Info: %s, %d linjer --%s--"
+
+#: info/window.c:1160
+#, c-format
+msgid "-%s%s-Info: (%s)%s, %d lines --%s--"
+msgstr "-%s%s-Info: (%s)%s, %d linjer --%s--"
+
+#: info/window.c:1167
+#, c-format
+msgid " Subfile: %s"
+msgstr " Delfil: %s"
+
+#: lib/getopt.c:551 lib/getopt.c:570
+#, c-format
+msgid "%s: option `%s' is ambiguous\n"
+msgstr "%s: valget «%s» er flertydig\n"
+
+#: lib/getopt.c:603 lib/getopt.c:607
+#, c-format
+msgid "%s: option `--%s' doesn't allow an argument\n"
+msgstr "%s: valget «--%s» tillater ikke et argument\n"
+
+#: lib/getopt.c:616 lib/getopt.c:621
+#, c-format
+msgid "%s: option `%c%s' doesn't allow an argument\n"
+msgstr "%s: valget «%c%s» tillater ikke et argument\n"
+
+#: lib/getopt.c:667 lib/getopt.c:689 lib/getopt.c:1020 lib/getopt.c:1042
+#, c-format
+msgid "%s: option `%s' requires an argument\n"
+msgstr "%s: valget «%s» krever et argument\n"
+
+#: lib/getopt.c:727 lib/getopt.c:730
+#, c-format
+msgid "%s: unrecognized option `--%s'\n"
+msgstr "%s: ukjent valg «--%s»\n"
+
+#: lib/getopt.c:738 lib/getopt.c:741
+#, c-format
+msgid "%s: unrecognized option `%c%s'\n"
+msgstr "%s: ukjent valg «%c%s»\n"
+
+#: lib/getopt.c:796 lib/getopt.c:799
+#, c-format
+msgid "%s: illegal option -- %c\n"
+msgstr "%s: ulovlig valg -- %c\n"
+
+#: lib/getopt.c:805 lib/getopt.c:808
+#, c-format
+msgid "%s: invalid option -- %c\n"
+msgstr "%s: ugyldig valg -- %c\n"
+
+#: lib/getopt.c:863 lib/getopt.c:882 lib/getopt.c:1095 lib/getopt.c:1116
+#, c-format
+msgid "%s: option requires an argument -- %c\n"
+msgstr "%s: valget krever et argument -- %c\n"
+
+#: lib/getopt.c:935 lib/getopt.c:954
+#, c-format
+msgid "%s: option `-W %s' is ambiguous\n"
+msgstr "%s: valget «-W %s» er flertydig\n"
+
+#: lib/getopt.c:978 lib/getopt.c:999
+#, c-format
+msgid "%s: option `-W %s' doesn't allow an argument\n"
+msgstr "%s: valget «-W %s» tillater ikke et argument\n"
+
+#: makeinfo/cmds.c:520 makeinfo/cmds.c:542
+#, c-format
+msgid "arguments to @%s ignored"
+msgstr "argumentene til @%s ble ignorert"
+
+#: makeinfo/cmds.c:585
+msgid "January"
+msgstr "januar"
+
+#: makeinfo/cmds.c:585
+msgid "February"
+msgstr "februar"
+
+#: makeinfo/cmds.c:585
+msgid "March"
+msgstr "mars"
+
+#: makeinfo/cmds.c:585
+msgid "April"
+msgstr "april"
+
+#: makeinfo/cmds.c:585
+msgid "May"
+msgstr "mai"
+
+#: makeinfo/cmds.c:586
+msgid "June"
+msgstr "juni"
+
+#: makeinfo/cmds.c:586
+msgid "July"
+msgstr "juli"
+
+#: makeinfo/cmds.c:586
+msgid "August"
+msgstr "august"
+
+#: makeinfo/cmds.c:586
+msgid "September"
+msgstr "september"
+
+#: makeinfo/cmds.c:586
+msgid "October"
+msgstr "oktober"
+
+#: makeinfo/cmds.c:587
+msgid "November"
+msgstr "november"
+
+#: makeinfo/cmds.c:587
+msgid "December"
+msgstr "desember"
+
+#: makeinfo/cmds.c:936
+#, c-format
+msgid "unlikely character %c in @var"
+msgstr "usannsynlig tegn %c i @var"
+
+#: makeinfo/cmds.c:979
+msgid "@sc argument all uppercase, thus no effect"
+msgstr "@sc-argument med store bokstaver, dermed ingen effekt"
+
+#: makeinfo/cmds.c:1034
+#, c-format
+msgid "`{' expected, but saw `%c'"
+msgstr "«{» forventet, men så «%c»"
+
+#: makeinfo/cmds.c:1074
+msgid "end of file inside verb block"
+msgstr "slutt-på-fila inne i verb-blokk"
+
+#: makeinfo/cmds.c:1082
+#, c-format
+msgid "`}' expected, but saw `%c'"
+msgstr "«{» forventet, men så «%c»"
+
+#: makeinfo/cmds.c:1112
+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:1305
+#, c-format
+msgid "%c%s is obsolete"
+msgstr "%c%s er utgått"
+
+#: makeinfo/cmds.c:1414
+#, c-format
+msgid "@sp requires a positive numeric argument, not `%s'"
+msgstr "@sp krever et positivt numerisk argument, ikke `%s'"
+
+#: makeinfo/cmds.c:1763 makeinfo/cmds.c:1819 makeinfo/footnote.c:82
+#, c-format
+msgid "Bad argument to %c%s"
+msgstr "Ugyldig argument til %c%s"
+
+#: makeinfo/cmds.c:1773 makeinfo/makeinfo.c:4142
+msgid "asis"
+msgstr "asis"
+
+#: makeinfo/cmds.c:1775 makeinfo/cmds.c:1805 makeinfo/makeinfo.c:4144
+msgid "none"
+msgstr "none"
+
+#: makeinfo/cmds.c:1789
+#, c-format
+msgid "Bad argument to @%s"
+msgstr "Ugyldig argument til @%s"
+
+#: makeinfo/cmds.c:1803
+msgid "insert"
+msgstr "insert"
+
+#: makeinfo/defun.c:84
+msgid "Missing `}' in @def arg"
+msgstr "Manglende «}» i @def-arg"
+
+#: makeinfo/defun.c:403
+msgid "Function"
+msgstr "Funksjon"
+
+#: makeinfo/defun.c:406
+msgid "Macro"
+msgstr "Makro"
+
+#: makeinfo/defun.c:409
+msgid "Special Form"
+msgstr "Spesiell form"
+
+#: makeinfo/defun.c:413
+msgid "Variable"
+msgstr "Variabel"
+
+#: makeinfo/defun.c:416
+msgid "User Option"
+msgstr "Brukervalg"
+
+#: makeinfo/defun.c:420
+msgid "Instance Variable"
+msgstr "Forekomst"
+
+#: makeinfo/defun.c:424
+msgid "Method"
+msgstr "Metode"
+
+#: makeinfo/defun.c:500 makeinfo/defun.c:505 makeinfo/defun.c:545
+#: makeinfo/defun.c:644 makeinfo/xml.c:2229
+msgid "of"
+msgstr "av"
+
+#: makeinfo/defun.c:509 makeinfo/defun.c:513 makeinfo/defun.c:517
+#: makeinfo/defun.c:551 makeinfo/defun.c:650 makeinfo/xml.c:2234
+msgid "on"
+msgstr "på"
+
+#: 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:435
+#, c-format
+msgid "%s: getwd: %s, %s\n"
+msgstr "%s: getwd: %s, %s\n"
+
+#: makeinfo/files.c:638
+#, c-format
+msgid "`%s' omitted before output filename"
+msgstr "`%s' utelatt før outputfilnavn"
+
+#: makeinfo/files.c:646
+#, c-format
+msgid "`%s' omitted since writing to stdout"
+msgstr "`%s' utelatt pga skriving til stdout"
+
+#: makeinfo/files.c:694
+msgid "Output buffer not empty."
+msgstr "Outputbuffer er ikke tomt."
+
+#: makeinfo/footnote.c:150
+#, c-format
+msgid "`%c%s' needs an argument `{...}', not just `%s'"
+msgstr "«%c%s» trenger et argument «{...}», ikke bare «%s»"
+
+#: makeinfo/footnote.c:165
+#, c-format
+msgid "No closing brace for footnote `%s'"
+msgstr "Ingen avsluttende krøllparentes for fotnoten «%s»"
+
+#: makeinfo/footnote.c:198
+msgid "Footnote defined without parent node"
+msgstr "Fotnote definert uten foreldrenode"
+
+#: makeinfo/footnote.c:210
+msgid "Footnotes inside footnotes are not allowed"
+msgstr "Fotnoter i fotnoter er ikke tillatt"
+
+#: makeinfo/footnote.c:302 makeinfo/index.c:189
+msgid "Footnotes"
+msgstr "Fotnoter"
+
+#: makeinfo/html.c:87
+#, c-format
+msgid "%s: could not open --css-file: %s"
+msgstr "%s: kunne ikke åpne --css-file: %s"
+
+#: makeinfo/html.c:172
+#, c-format
+msgid "%s:%d: --css-file ended in comment"
+msgstr "%s:%d: --css-file endte i en kommentar"
+
+#: makeinfo/html.c:207
+msgid "Untitled"
+msgstr "Uten navn"
+
+#: makeinfo/html.c:422
+msgid "[unexpected] no html tag to pop"
+msgstr "[uforventet] kunne ikke poppe neste htmltagg"
+
+#: makeinfo/html.c:752
+#, c-format
+msgid "[unexpected] invalid node name: `%s'"
+msgstr "[uforventet] ugyldig nodenavn: «%s»"
+
+#: makeinfo/index.c:169
+#, c-format
+msgid "Unknown index `%s'"
+msgstr "Ukjent indeks «%s»"
+
+#: makeinfo/index.c:234
+#, c-format
+msgid "Info cannot handle `:' in index entry `%s'"
+msgstr "Info kan ikke håndtere `:' i indeksinnslaget `%s'"
+
+#: makeinfo/index.c:412
+#, c-format
+msgid "Index `%s' already exists"
+msgstr "Indeksen «%s» eksisterer allerede"
+
+#: makeinfo/index.c:455
+#, c-format
+msgid "Unknown index `%s' and/or `%s' in @synindex"
+msgstr "Ukjent indeks «%s» og/eller «%s» i @synindex"
+
+#: makeinfo/index.c:661
+msgid "(line )"
+msgstr "(linje )"
+
+#: makeinfo/index.c:669
+#, c-format
+msgid "(line %*d)"
+msgstr "(linje %*d)"
+
+#: makeinfo/index.c:750
+#, c-format
+msgid "Unknown index `%s' in @printindex"
+msgstr "Ukjent indeks «%s» i @printindex"
+
+#: makeinfo/index.c:819
+#, c-format
+msgid "Entry for index `%s' outside of any node"
+msgstr "Innslag for indeksen «%s» utenfor node"
+
+#: makeinfo/index.c:822 makeinfo/index.c:858
+msgid "(outside of any node)"
+msgstr "(utenfor noder)"
+
+#: makeinfo/index.c:919 makeinfo/index.c:925
+msgid "See "
+msgstr "Se "
+
+#: makeinfo/insertion.c:160
+msgid "@item not allowed in argument to @itemize"
+msgstr "@item er ikke tillatt som argument til @itemize"
+
+#: makeinfo/insertion.c:238
+msgid "Broken-Type in insertion_type_pname"
+msgstr "Broken-Type i insertion_type_pname"
+
+#: makeinfo/insertion.c:334
+msgid "Enumeration stack overflow"
+msgstr "Stakkoverflyt ved oppramsing"
+
+#: makeinfo/insertion.c:366
+#, c-format
+msgid "lettering overflow, restarting at %c"
+msgstr "bokstavoverflyt, starter på nytt ved %c"
+
+#: makeinfo/insertion.c:631
+#, c-format
+msgid "%s requires an argument: the formatter for %citem"
+msgstr "%s krever et argument: formattereren for %citem"
+
+#: makeinfo/insertion.c:719
+#, c-format
+msgid "%cfloat environments cannot be nested"
+msgstr "%cfloat-miljøer kan ikke nøstes"
+
+#: makeinfo/insertion.c:973
+#, c-format
+msgid "`@end' expected `%s', but saw `%s'"
+msgstr "`@end' forventet «%s», men så «%s»"
+
+#: makeinfo/insertion.c:1337
+#, c-format
+msgid "No matching `%cend %s'"
+msgstr "Ingen tilsvarende «%cend %s»"
+
+#: makeinfo/insertion.c:1592
+#, c-format
+msgid "%s requires letter or digit"
+msgstr "%s krever en bokstav eller et siffer"
+
+#: makeinfo/insertion.c:1687
+msgid "end of file inside verbatim block"
+msgstr "slutt-på-filen inne i verbatimblokk"
+
+#: makeinfo/insertion.c:1913
+#, c-format
+msgid "@%s not meaningful outside `@float' environment"
+msgstr "@%s er meningsløs utenfor et «@float»-miljø"
+
+#: makeinfo/insertion.c:1949
+msgid "@menu seen before first @node, creating `Top' node"
+msgstr "@menu sett før første @node, oppretter «Top»-noden"
+
+#: makeinfo/insertion.c:1950
+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:1962
+msgid "@detailmenu seen before first node, creating `Top' node"
+msgstr "@detailmenu sett før første node, oppretter «Top»-noden"
+
+#: makeinfo/insertion.c:2018
+#, 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:2032
+#, c-format
+msgid "@%s not meaningful outside `@titlepage' environment"
+msgstr "@%s er meningsløs utenfor et «@titlepage»-miljø"
+
+#: makeinfo/insertion.c:2063
+#, c-format
+msgid "Unmatched `%c%s'"
+msgstr "Umatchet «%c%s»"
+
+#: makeinfo/insertion.c:2068
+#, c-format
+msgid "`%c%s' needs something after it"
+msgstr "«%c%s» trenger noe etter den"
+
+#: makeinfo/insertion.c:2074
+#, c-format
+msgid "Bad argument `%s' to `@%s', using `%s'"
+msgstr "Ugyldig argument «%s» til «%s», bruker «%s»"
+
+#: makeinfo/insertion.c:2171
+#, c-format
+msgid "@%s not meaningful inside `@%s' block"
+msgstr "@%s er meningsløs innenfor en «@%s»-blokk"
+
+#: makeinfo/insertion.c:2180
+#, c-format
+msgid "@itemx not meaningful inside `%s' block"
+msgstr "@itemx er meningsløs innenfor en «@%s»-blokk"
+
+#: makeinfo/insertion.c:2356
+#, c-format
+msgid "%c%s found outside of an insertion block"
+msgstr "%c%s funnet utenfor en innsettingsblokk"
+
+#: makeinfo/lang.c:580
+#, 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:655
+#, c-format
+msgid "unrecognized encoding name `%s'"
+msgstr "ugjenkjennelig kodingsnavn «%s»"
+
+#: makeinfo/lang.c:663
+#, c-format
+msgid "sorry, encoding `%s' not supported"
+msgstr "beklager, kodingen «%s» er ikke støttet"
+
+#: makeinfo/lang.c:715
+#, c-format
+msgid "invalid encoded character `%s'"
+msgstr "Ugyldig kodet tegn «%s»"
+
+#: makeinfo/lang.c:1009
+#, 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:1013
+#, 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:355
+#, 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:586
+#, c-format
+msgid "%cend macro not found"
+msgstr "%cend macro ikke funnet"
+
+#: makeinfo/macro.c:624
+msgid "@quote-arg only useful for single-argument macros"
+msgstr "@quote-arg bare brukbart når makroen bare tar et argument"
+
+#: makeinfo/macro.c:660
+#, c-format
+msgid "mismatched @end %s with @%s"
+msgstr "umatchet @end %s med @%s"
+
+#: makeinfo/makeinfo.c:184
+#, c-format
+msgid "Too many errors! Gave up.\n"
+msgstr "For mange feil! Ga opp.\n"
+
+#: makeinfo/makeinfo.c:302
+#, c-format
+msgid "%s:%d: warning: "
+msgstr "%s:%d: advarsel: "
+
+#: makeinfo/makeinfo.c:321 makeinfo/makeinfo.c:2260
+#, c-format
+msgid "Misplaced %c"
+msgstr "Feilplassert %c"
+
+#: makeinfo/makeinfo.c:340
+#, c-format
+msgid "Try `%s --help' for more information.\n"
+msgstr "Prøv «%s --help» for mer informasjon.\n"
+
+#: makeinfo/makeinfo.c:343
+#, c-format
+msgid "Usage: %s [OPTION]... TEXINFO-FILE...\n"
+msgstr "Bruksmåte: %s [VALG]... TEXINFOFIL...\n"
+
+#: makeinfo/makeinfo.c:346
+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:350
+#, c-format
+msgid ""
+"General options:\n"
+" --error-limit=NUM quit after NUM errors (default %d).\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"
+" --reference-limit=NUM warn about at most NUM references (default %"
+"d).\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:364
+#, 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:372
+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 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 (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:386
+#, c-format
+msgid ""
+"Options for Info and plain text:\n"
+" --enable-encoding output accented and special characters in\n"
+" Info output based on @documentencoding.\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\n"
+" in which they are defined (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:403
+msgid ""
+"Options for HTML:\n"
+" --css-include=FILE include FILE in HTML <style> output;\n"
+" read stdin if FILE is -.\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:409
+#, 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:416
+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:425
+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:444
+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:452
+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:603
+#, 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:647 makeinfo/makeinfo.c:673 makeinfo/makeinfo.c:692
+#: makeinfo/makeinfo.c:722 makeinfo/makeinfo.c:743
+#, 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:660
+#, c-format
+msgid "%s: could not open macro expansion output `%s'"
+msgstr "%s: kunne ikke åpne makroekspansjonoutput «%s»"
+
+#: makeinfo/makeinfo.c:665
+#, c-format
+msgid "%s: ignoring second macro expansion output `%s'.\n"
+msgstr "%s: ignorerer sekundær makroekspansjonoutpur «%s».\n"
+
+#: makeinfo/makeinfo.c:707
+#, 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:732
+#, 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:806
+#, c-format
+msgid "%s: missing file argument.\n"
+msgstr "%s: mangler filargument.\n"
+
+#: makeinfo/makeinfo.c:997 makeinfo/makeinfo.c:3991
+#, c-format
+msgid "Multiline command %c%s used improperly"
+msgstr "Flerlinjekommandoen %c%s brukes ikke riktig"
+
+#: makeinfo/makeinfo.c:1000
+#, c-format
+msgid "Expected `%s'"
+msgstr "Forventet «%s»"
+
+#: makeinfo/makeinfo.c:1479
+#, c-format
+msgid "Can't create directory `%s': %s"
+msgstr "Kan ikke opprette katalogen «%s»: %s"
+
+#: makeinfo/makeinfo.c:1525
+#, c-format
+msgid "No `%s' found in `%s'"
+msgstr "Ingen «%s» funnet i «%s»"
+
+#: makeinfo/makeinfo.c:1605
+#, 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:1638
+#, c-format
+msgid "Making %s file `%s' from `%s'.\n"
+msgstr "Lager %s-filen «%s» fra «%s».\n"
+
+#: makeinfo/makeinfo.c:1673
+#, c-format
+msgid "This is %s, produced by makeinfo version %s from %s.\n"
+msgstr "Dette er %s, produsert av makeinfo versjon %s fra %s.\n"
+
+#: makeinfo/makeinfo.c:1709
+#, 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:1773
+#, 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:2034
+#, c-format
+msgid "Unknown command `%s'"
+msgstr "Ukjent kommando «%s»"
+
+#: makeinfo/makeinfo.c:2056
+#, 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:2314
+#, c-format
+msgid "%c%s expected braces"
+msgstr "%c%s forventet krøllparanteser"
+
+#: makeinfo/makeinfo.c:2327
+msgid "Unmatched }"
+msgstr "Umatchet }"
+
+#: makeinfo/makeinfo.c:2375
+msgid "NO_NAME!"
+msgstr "INTET_NAVN!"
+
+#: makeinfo/makeinfo.c:2396
+#, c-format
+msgid "%c%s missing close brace"
+msgstr "%c%s mangler avsluttende krøllparentes"
+
+#: makeinfo/makeinfo.c:3309
+#, c-format
+msgid "@image file `%s' (for HTML) not readable: %s"
+msgstr "@image-fil «%s» (for HTML) er uleselig: %s"
+
+#: makeinfo/makeinfo.c:3315
+#, c-format
+msgid "No such file `%s'"
+msgstr "«%s» er ingen fil"
+
+#: makeinfo/makeinfo.c:3447
+#, c-format
+msgid "@image file `%s' (for text) unreadable: %s"
+msgstr "@image-fil «%s» (for tekstformat) er uleselig: %s"
+
+#: makeinfo/makeinfo.c:3456
+msgid "@image missing filename argument"
+msgstr "@image mangler filnavn"
+
+#: makeinfo/makeinfo.c:3675
+#, c-format
+msgid "undefined flag: %s"
+msgstr "udefinert flagg: %s"
+
+#: makeinfo/makeinfo.c:3676
+#, c-format
+msgid "{No value for `%s'}"
+msgstr "{Ingen verdi for «%s»}"
+
+#: makeinfo/makeinfo.c:3728
+#, c-format
+msgid "%c%s requires a name"
+msgstr "%c%s krever et navn"
+
+#: makeinfo/makeinfo.c:3834
+#, c-format
+msgid "Reached eof before matching @end %s"
+msgstr "Traff slutt-på-filen før matchende @end %s"
+
+#: makeinfo/makeinfo.c:4082
+#, 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:254
+#, c-format
+msgid "ignoring stray text `%s' after @multitable"
+msgstr "ignorerer løs tekst «%s» etter @multitable"
+
+#: makeinfo/multi.c:393
+#, c-format
+msgid "Too many columns in multitable item (max %d)"
+msgstr "For mange kolonner i multitabellrad (maks %d)"
+
+#: makeinfo/multi.c:555
+#, c-format
+msgid "[unexpected] cannot select column #%d in multitable"
+msgstr "[uforventet] kan ikke velge kolonne #%d i multitabell"
+
+#: makeinfo/multi.c:584
+msgid "ignoring @tab outside of multitable"
+msgstr "ignorerer @tab utenfor multitabell"
+
+#: makeinfo/multi.c:632
+#, c-format
+msgid "** Multicolumn output from last row:\n"
+msgstr "** Multikolonne-output fra siste rad:\n"
+
+#: makeinfo/multi.c:635
+#, c-format
+msgid "* column #%d: output = %s\n"
+msgstr "* kolonne #%d output = %s\n"
+
+#: makeinfo/node.c:280
+#, c-format
+msgid "Node `%s' previously defined at line %d"
+msgstr "Noden «%s» er tidligere definert ved linje %d"
+
+#: makeinfo/node.c:648
+#, c-format
+msgid "Formatting node %s...\n"
+msgstr "Skriver noden %s...\n"
+
+#: makeinfo/node.c:716
+#, 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:879
+#, c-format
+msgid "No node name specified for `%c%s' command"
+msgstr "Ingen nodenavn spesifisert for «%c%s»-kommandoen"
+
+#: makeinfo/node.c:920 makeinfo/node.c:1151
+#, 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:923
+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:925 makeinfo/node.c:1154
+msgid "Rename this anchor or use the `--no-split' option"
+msgstr "Omdøpe dette ankeret eller bruk «--no-split»-valget"
+
+#: makeinfo/node.c:955
+#, 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:991
+msgid "Next:"
+msgstr "Neste:"
+
+#: makeinfo/node.c:1007
+msgid "Previous:"
+msgstr "Forrige:"
+
+#: makeinfo/node.c:1021
+msgid "Up:"
+msgstr "Opp:"
+
+#: makeinfo/node.c:1148
+#, 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:1153
+msgid "@anchor command ignored; references to it will not work"
+msgstr "@anchor-kommando ignorert; referanser til den vil ikke virke"
+
+#: makeinfo/node.c:1347
+#, 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:1363
+msgid "Menu"
+msgstr "Meny"
+
+#: makeinfo/node.c:1365
+msgid "Cross"
+msgstr "Kryss"
+
+#: makeinfo/node.c:1447
+#, 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:1450
+#, c-format
+msgid "This node (%s) has the bad Prev"
+msgstr "Denne noden (%s) har den dårlige forrigepekeren"
+
+#: makeinfo/node.c:1462
+msgid "Prev"
+msgstr "forrige"
+
+#: makeinfo/node.c:1505
+#, c-format
+msgid "Prev field of node `%s' not pointed to"
+msgstr "Forrigefeltet til noden «%s» er ikke pekt på"
+
+#: makeinfo/node.c:1509
+#, c-format
+msgid "This node (%s) has the bad Next"
+msgstr "Denne noden (%s) har den dårlige nestepekeren"
+
+#: makeinfo/node.c:1521
+#, c-format
+msgid "`%s' has no Up field (perhaps incorrect sectioning?)"
+msgstr "`%s' har ingen Up-felt (kanskje feil inndeling?)"
+
+#: makeinfo/node.c:1524
+msgid "Up"
+msgstr "opp"
+
+#: makeinfo/node.c:1590
+#, 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:1619
+#, c-format
+msgid "node `%s' has been referenced %d times"
+msgstr "noden «%s» har blitt referert %d ganger"
+
+#: makeinfo/node.c:1633
+#, c-format
+msgid "unreferenced node `%s'"
+msgstr "ureferert node «%s»"
+
+#: makeinfo/node.c:1723
+#, c-format
+msgid "Removing %s\n"
+msgstr "Fjerner %s\n"
+
+#: makeinfo/node.c:1727
+#, 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:562
+#, c-format
+msgid "Internal error (search_sectioning) \"%s\"!"
+msgstr "Intern feil (search_sectioning) «%s»!"
+
+#: makeinfo/sectioning.c:623
+#, c-format
+msgid "%c%s is obsolete; use %c%s instead"
+msgstr "%c%s er avlegs; bruk %c%s i stedet"
+
+#: makeinfo/sectioning.c:639
+#, c-format
+msgid "Node with %ctop as a section already exists"
+msgstr "Node med %ctop som en seksjon eksisterer allerede"
+
+#: makeinfo/sectioning.c:647
+#, c-format
+msgid "Here is the %ctop node"
+msgstr "Her er %ctop-noden"
+
+#: makeinfo/sectioning.c:663
+#, c-format
+msgid "%ctop used before %cnode, defaulting to %s"
+msgstr "%ctop brukt før %cnode, benytter %s"
+
+#: makeinfo/toc.c:197 makeinfo/toc.c:271 makeinfo/toc.c:273
+msgid "Table of Contents"
+msgstr "Innholdsfortegnelse"
+
+#: makeinfo/toc.c:304 makeinfo/toc.c:337 makeinfo/toc.c:339
+msgid "Short Contents"
+msgstr "Kort innholdsfortegnelse"
+
+#: makeinfo/xml.c:1605
+#, c-format
+msgid "@image file `%s' unreadable: %s"
+msgstr "@image-fil «%s» er uleselig: %s"
+
+#: makeinfo/xml.c:2097
+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"
+
+#: util/install-info.c:154
+#, c-format
+msgid "%s: warning: "
+msgstr "%s: advarsel: "
+
+#: util/install-info.c:203
+#, c-format
+msgid " for %s"
+msgstr " for %s"
+
+#: util/install-info.c:426
+#, 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"
+
+#: util/install-info.c:434
+#, c-format
+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 ""
+"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"
+
+#: util/install-info.c:488
+#, 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"
+
+#: util/install-info.c:513
+#, 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"
+
+#: util/install-info.c:600
+#, c-format
+msgid "%s: empty file"
+msgstr "%s: tom fil"
+
+#: util/install-info.c:913 util/install-info.c:953
+msgid "START-INFO-DIR-ENTRY without matching END-INFO-DIR-ENTRY"
+msgstr "START-INFO-DIR-ENTRY uten tilhørende END-INFO-DIR-ENTRY"
+
+#: util/install-info.c:948
+msgid "END-INFO-DIR-ENTRY without matching START-INFO-DIR-ENTRY"
+msgstr "END-INFO-DIR-ENTRY uten tilhørende START-INFO-DIR-ENTRY"
+
+#: util/install-info.c:1191 util/install-info.c:1201
+#, c-format
+msgid "%s: already have dir file: %s\n"
+msgstr "%s: har allerede en dirfil: %s\n"
+
+#: util/install-info.c:1236
+#, c-format
+msgid "%s: Specify the Info file only once.\n"
+msgstr "%s: Spesifiser infofilen bare en gang.\n"
+
+#: util/install-info.c:1284
+#, c-format
+msgid "excess command line argument `%s'"
+msgstr "overflødig argument på kommandolinjen «%s»"
+
+#: util/install-info.c:1288
+msgid "No input file specified; try --help for more information."
+msgstr "Ingen innfil angitt; prøv --help for mer informasjon."
+
+#: util/install-info.c:1291
+msgid "No dir file specified; try --help for more information."
+msgstr "Ingen dir-fil angitt; prøv --help for mer informasjon."
+
+#: util/install-info.c:1313
+#, c-format
+msgid "no info dir entry in `%s'"
+msgstr "ingen info-dir-oppføring i «%s»"
+
+#: util/install-info.c:1426
+#, c-format
+msgid "menu item `%s' already exists, for file `%s'"
+msgstr "menypunktet «%s» eksisterer allerede for filen «%s»"
+
+#: util/install-info.c:1449
+#, c-format
+msgid "no entries found for `%s'; nothing deleted"
+msgstr "fant ingen oppføringer for «%s»; ingenting slettet"
+
+#: util/texindex.c:252
+msgid "display this help and exit"
+msgstr "vise denne hjelpen og avslutte"
+
+#: util/texindex.c:254
+msgid "keep temporary files around after processing"
+msgstr "bevar midlertidige filer etter behandling"
+
+#: util/texindex.c:256
+msgid "do not keep temporary files around after processing (default)"
+msgstr "ikke bevar midlertidige filer etter behandling (standard)"
+
+#: util/texindex.c:258
+msgid "send output to FILE"
+msgstr "sende utdata til FILE"
+
+#: util/texindex.c:260
+msgid "display version information and exit"
+msgstr "vise programversjon og avslutte"
+
+#: util/texindex.c:270
+#, c-format
+msgid "Usage: %s [OPTION]... FILE...\n"
+msgstr "Bruksmåte: %s [VALG]... FIL...\n"
+
+#: util/texindex.c:271
+#, 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:274
+#, 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:276
+#, c-format
+msgid ""
+"\n"
+"Options:\n"
+msgstr ""
+"\n"
+"Valg:\n"
+
+#: util/texindex.c:876 util/texindex.c:910 util/texindex.c:983
+#: util/texindex.c:1011
+#, c-format
+msgid "%s: not a texinfo index file"
+msgstr "%s: ikke en texinfo-indeksfil"
+
+#: util/texindex.c:968
+#, c-format
+msgid "failure reopening %s"
+msgstr "feil ved gjenåpning av %s"
+
+#: util/texindex.c:1218
+#, c-format
+msgid "No page number in %s"
+msgstr "Ingen sidenummer i %s"
+
+#: util/texindex.c:1291
+#, 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"
diff --git a/macros/texinfo/contrib/texinfo-hu/texinfo/po/nl.gmo b/macros/texinfo/contrib/texinfo-hu/texinfo/po/nl.gmo
new file mode 100644
index 0000000000..3fb40e847c
--- /dev/null
+++ b/macros/texinfo/contrib/texinfo-hu/texinfo/po/nl.gmo
Binary files differ
diff --git a/macros/texinfo/contrib/texinfo-hu/texinfo/po/nl.po b/macros/texinfo/contrib/texinfo-hu/texinfo/po/nl.po
new file mode 100644
index 0000000000..20ae5111ce
--- /dev/null
+++ b/macros/texinfo/contrib/texinfo-hu/texinfo/po/nl.po
@@ -0,0 +1,3273 @@
+# Dutch messages for GNU texinfo
+# Copyright (C) 1998 Free Software Foundation, Inc.
+# Ivo Timmermans <zarq@iname.com>, 1998.
+#
+msgid ""
+msgstr ""
+"Project-Id-Version: texinfo 3.12\n"
+"Report-Msgid-Bugs-To: bug-texinfo@gnu.org\n"
+"POT-Creation-Date: 2004-12-21 16:20-0800\n"
+"PO-Revision-Date: 1998-04-16 22:35+02:00\n"
+"Last-Translator: Ivo Timmermans <zarq@iname.com>\n"
+"Language-Team: Dutch <nl@li.org>\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=ISO-8859-1\n"
+"Content-Transfer-Encoding: 8bit\n"
+
+#: info/echo-area.c:284 info/session.c:689
+msgid "Move forward a character"
+msgstr "Beweeg een teken naar voren"
+
+#: info/echo-area.c:296 info/session.c:705
+msgid "Move backward a character"
+msgstr "Beweeg een teken naar achteren"
+
+#: info/echo-area.c:308
+msgid "Move to the start of this line"
+msgstr "Ga naar het begin van deze regel"
+
+#: info/echo-area.c:313
+msgid "Move to the end of this line"
+msgstr "Ga naar het einde van deze regel"
+
+#: info/echo-area.c:321 info/session.c:723
+msgid "Move forward a word"
+msgstr "Beweeg een woord naar voren"
+
+#: info/echo-area.c:361 info/session.c:772
+msgid "Move backward a word"
+msgstr "Beweeg een woord naar achteren"
+
+#: info/echo-area.c:401
+msgid "Delete the character under the cursor"
+msgstr "Verwijder het teken onder de cursor"
+
+#: info/echo-area.c:431
+msgid "Delete the character behind the cursor"
+msgstr "Verwijder het teken achter de cursor"
+
+#: info/echo-area.c:452
+msgid "Cancel or quit operation"
+msgstr "Annuleer of beëindig operatie"
+
+# completion?
+#: info/echo-area.c:467
+msgid "Accept (or force completion of) this line"
+msgstr "Accepteer (of forceer voltooiïng van) deze regel"
+
+#: info/echo-area.c:472
+msgid "Insert next character verbatim"
+msgstr "Voeg volgend teken letterlijk in"
+
+#: info/echo-area.c:480
+msgid "Insert this character"
+msgstr "Voeg dit teken in"
+
+#: info/echo-area.c:498
+msgid "Insert a TAB character"
+msgstr "Voeg een TAB code in"
+
+#: info/echo-area.c:505
+msgid "Transpose characters at point"
+msgstr "Transponeer karakters op een punt"
+
+# kill?
+#: info/echo-area.c:556
+msgid "Yank back the contents of the last kill"
+msgstr "Zet de inhoud van de laatste kill terug"
+
+#: info/echo-area.c:563
+msgid "Kill ring is empty"
+msgstr "Kill ring is leeg"
+
+# kill?
+#: info/echo-area.c:576
+msgid "Yank back a previous kill"
+msgstr "Zet een eerdere kill terug"
+
+# kill?
+#: info/echo-area.c:609
+msgid "Kill to the end of the line"
+msgstr "Verwijder tot aan het einde van de regel"
+
+# kill?
+#: info/echo-area.c:622
+msgid "Kill to the beginning of the line"
+msgstr "Verwijder tot aan het begin van de regel"
+
+# kill?
+#: info/echo-area.c:634
+msgid "Kill the word following the cursor"
+msgstr "Verwijder het woord na de cursor"
+
+# kill?
+#: info/echo-area.c:653
+msgid "Kill the word preceding the cursor"
+msgstr "Verwijder het woord voor de cursor"
+
+#: info/echo-area.c:868 info/echo-area.c:924
+msgid "No completions"
+msgstr "Geen voltooiïngen"
+
+#: info/echo-area.c:870
+msgid "Not complete"
+msgstr "Niet compleet"
+
+#: info/echo-area.c:911
+msgid "List possible completions"
+msgstr "Geef een lijst van mogelijke voltooiïngen"
+
+#: info/echo-area.c:928
+msgid "Sole completion"
+msgstr "Enige voltooiïng"
+
+#: info/echo-area.c:937
+msgid "One completion:\n"
+msgstr "Een voltooiïng:\n"
+
+#: info/echo-area.c:938
+#, c-format
+msgid "%d completions:\n"
+msgstr "%d voltooiïngen:\n"
+
+#: info/echo-area.c:1085
+msgid "Insert completion"
+msgstr "Voeg voltooiïng in"
+
+#: info/echo-area.c:1220
+msgid "Building completions..."
+msgstr "Voltooiïngen aan het bouwen..."
+
+#: info/echo-area.c:1340
+msgid "Scroll the completions window"
+msgstr "Verschuif het voltooiïngsvenster"
+
+#: info/footnotes.c:213
+msgid "Footnotes could not be displayed"
+msgstr "De voetnoten konden niet weergegeven worden"
+
+#: info/footnotes.c:239
+msgid "Show the footnotes associated with this node in another window"
+msgstr ""
+"Laat de voetnoten zien die met deze pagina verbonden zijn in een ander "
+"venster"
+
+#: info/footnotes.h:26
+#, fuzzy
+msgid "---------- Footnotes ----------"
+msgstr ""
+"---------- Voetnoten ----------\n"
+"\n"
+
+#: info/indices.c:172
+msgid "Look up a string in the index for this file"
+msgstr "Zoek een string op in de index voor dit bestand"
+
+#: info/indices.c:199
+msgid "Finding index entries..."
+msgstr "Zoeken naar index ingangen..."
+
+#: info/indices.c:207
+msgid "No indices found."
+msgstr "Geen indices gevonden."
+
+#: info/indices.c:217
+msgid "Index entry: "
+msgstr "Index ingang: "
+
+#: info/indices.c:325
+msgid ""
+"Go to the next matching index item from the last `\\[index-search]' command"
+msgstr ""
+"Ga naar de volgende overeenkomende index-ingang van het laatste `\\[index-"
+"search]' commando"
+
+#: info/indices.c:335
+msgid "No previous index search string."
+msgstr "Geen eerdere index zoek string."
+
+#: info/indices.c:342
+msgid "No index entries."
+msgstr "Geen index ingangen."
+
+#: info/indices.c:375
+#, fuzzy, c-format
+msgid "No %sindex entries containing `%s'."
+msgstr "Geen index ingangen %sdie \"%s\" bevatten."
+
+#: info/indices.c:376
+msgid "more "
+msgstr "meer "
+
+#: info/indices.c:386
+msgid "CAN'T SEE THIS"
+msgstr "KAN DIT NIET ZIEN"
+
+#: info/indices.c:422
+#, fuzzy, c-format
+msgid "Found `%s' in %s. (`\\[next-index-match]' tries to find next.)"
+msgstr ""
+"\"%s\" gevonden in %s. (`\\[next-index-match]' probeert de volgende te "
+"vinden.)"
+
+#: info/indices.c:541
+#, fuzzy, c-format
+msgid "Scanning indices of `%s'..."
+msgstr "Zoeken in indices van \"%s\"..."
+
+#: info/indices.c:596
+#, c-format
+msgid "No available info files have `%s' in their indices."
+msgstr ""
+
+#: info/indices.c:622
+msgid "Grovel all known info file's indices for a string and build a menu"
+msgstr ""
+"Doorzoek alle bekende indices van info-bestanden voor een string en maak een "
+"menu"
+
+#: info/indices.c:626
+msgid "Index apropos: "
+msgstr "Index apropos: "
+
+#: info/indices.c:654
+#, fuzzy, c-format
+msgid ""
+"\n"
+"* Menu: Nodes whose indices contain `%s':\n"
+msgstr ""
+"\n"
+"* Menu: Pagina's waarvan de indices \"%s\" bevatten:\n"
+
+#: info/info.c:275 info/infokey.c:899
+#, fuzzy, c-format
+msgid "Try --help for more information.\n"
+msgstr "Probeer --help voor meer informatie."
+
+#: info/info.c:295 makeinfo/makeinfo.c:766 util/install-info.c:1266
+#: util/texindex.c:343
+#, fuzzy, c-format
+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"
+"Er is GEEN garantie. Je mag deze programmatuur herdistribueren\n"
+"onder de voorwaarden van de GNU General Public License.\n"
+"Voor meer informatie hierover, zie de bestanden met de naam COPYING.\n"
+
+#: info/info.c:498
+#, fuzzy, c-format
+msgid "no index entries found for `%s'\n"
+msgstr "geen ingangen gevonden\n"
+
+#: info/info.c:590
+msgid " -b, --speech-friendly be friendly to speech synthesizers.\n"
+msgstr ""
+
+#: info/info.c:597
+#, fuzzy, c-format
+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 -f ./foo.info show file ./foo.info, not searching dir\n"
+msgstr ""
+"Aanroep: %s [OPTIE]... [INFO-BESTAND [MENU-ITEM...]]]\n"
+"\n"
+"Lees documentatie in Info-formaat\n"
+"Voor een meer complete omschrijving van het gebruik van Info, type `info "
+"info options'.\n"
+"\n"
+"Opties:\n"
+"--directory DIR Voeg DIR toe aan INFOPAD.\n"
+"--dribble BESTAND Onthoud toetsaanslagen in BESTAND.\n"
+"--file BESTAND Specificeer te bekijken Info bestand.\n"
+"--node PAGINANAAM Specificeer pagina's in het eerste Info "
+"bestand.\n"
+"--output BESTAND Schrijf de geselecteerde pagina's naar "
+"BESTAND.\n"
+"--restore BESTAND Lees de eerste toetsaanslagen uit BESTAND.\n"
+"--subnodes Geef recursief alle menu-items.\n"
+"--help Laat deze helptekst zien en beëindig.\n"
+"--version Geef de versie-informatie van Info en "
+"beëindig.\n"
+"\n"
+"Het eerste argument, indien aanwezig, is de naam van het Info-bestand\n"
+"dat ingelezen dient te worden. Alle overige argumenten worden\n"
+"beschouwd als de namen van menu items in de eerste bezochte pagina. Bij\n"
+"voorbeeld, `info emacs buffers' gaat naar de pagina `buffers' in het\n"
+"bestand `emacs'.\n"
+"\n"
+"Meld fouten in het programma aan bug-texinfo@gnu.org;\n"
+"meld onjuistheden in de vertaling aan nl@li.org."
+
+#: info/info.c:635 info/infokey.c:918 makeinfo/makeinfo.c:465
+#: util/install-info.c:466 util/texindex.c:292
+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:669
+#, fuzzy, c-format
+msgid "Cannot find node `%s'."
+msgstr "Kan pagina `%s' niet verwijderen"
+
+#: info/info.c:670
+#, fuzzy, c-format
+msgid "Cannot find node `(%s)%s'."
+msgstr "Kan pagina `%s' niet verwijderen"
+
+#: info/info.c:671
+#, fuzzy
+msgid "Cannot find a window!"
+msgstr "Kan een permanent venster niet verwijderen"
+
+#: info/info.c:672
+msgid "Point doesn't appear within this window's node!"
+msgstr ""
+
+#: info/info.c:673
+#, fuzzy
+msgid "Cannot delete the last window."
+msgstr "Kan een permanent venster niet verwijderen"
+
+#: info/info.c:674
+#, fuzzy
+msgid "No menu in this node."
+msgstr "Er is geen menu op deze pagina."
+
+#: info/info.c:675
+#, fuzzy
+msgid "No footnotes in this node."
+msgstr "Geen verwijzingen in deze pagina."
+
+#: info/info.c:676
+msgid "No cross references in this node."
+msgstr "Geen verwijzingen in deze pagina."
+
+#: info/info.c:677
+#, fuzzy, c-format
+msgid "No `%s' pointer for this node."
+msgstr "Geen \"Volgende\" wijzer voor deze pagina."
+
+#: info/info.c:678
+#, c-format
+msgid "Unknown Info command `%c'; try `?' for help."
+msgstr ""
+
+#: info/info.c:679
+#, c-format
+msgid "Terminal type `%s' is not smart enough to run Info."
+msgstr ""
+
+#: info/info.c:680
+#, fuzzy
+msgid "You are already at the last page of this node."
+msgstr "Ga naar het begin van deze pagina"
+
+#: info/info.c:681
+#, fuzzy
+msgid "You are already at the first page of this node."
+msgstr "Ga naar het begin van deze pagina"
+
+#: info/info.c:682
+msgid "Only one window."
+msgstr ""
+
+#: info/info.c:683
+msgid "Resulting window would be too small."
+msgstr ""
+
+#: info/info.c:684
+msgid "Not enough room for a help window, please delete a window."
+msgstr ""
+
+#: info/infodoc.c:46 info/infodoc.c:95
+#, fuzzy
+msgid ""
+"Basic Commands in Info Windows\n"
+"******************************\n"
+msgstr "Basiscommando's in Info Vensters"
+
+#: info/infodoc.c:49
+#, fuzzy
+msgid "\\%-10[quit-help] Quit this help.\n"
+msgstr "Geen \"Vorige\" voor deze pagina."
+
+#: info/infodoc.c:50
+msgid "\\%-10[quit] Quit Info altogether.\n"
+msgstr ""
+
+#: info/infodoc.c:51
+msgid "\\%-10[get-info-help-node] Invoke the Info tutorial.\n"
+msgstr ""
+
+#: info/infodoc.c:53 info/infodoc.c:102
+#, fuzzy
+msgid ""
+"Selecting other nodes:\n"
+"----------------------\n"
+msgstr "Selecteer de `Vorige' pagina"
+
+#: info/infodoc.c:55
+#, fuzzy
+msgid "\\%-10[next-node] Move to the \"next\" node of this node.\n"
+msgstr "Ga naar het einde van deze pagina"
+
+#: info/infodoc.c:56
+#, fuzzy
+msgid "\\%-10[prev-node] Move to the \"previous\" node of this node.\n"
+msgstr "Ga naar het einde van deze pagina"
+
+#: info/infodoc.c:57
+#, fuzzy
+msgid "\\%-10[up-node] Move \"up\" from this node.\n"
+msgstr "Geen \"Vorige\" voor deze pagina."
+
+#: info/infodoc.c:58
+msgid ""
+"\\%-10[menu-item] Pick menu item specified by name.\n"
+" Picking a menu item causes another node to be selected.\n"
+msgstr ""
+
+#: info/infodoc.c:60
+msgid ""
+"\\%-10[xref-item] Follow a cross reference. Reads name of reference.\n"
+msgstr ""
+
+#: info/infodoc.c:61
+#, fuzzy
+msgid "\\%-10[history-node] Move to the last node seen in this window.\n"
+msgstr "Selecteer de laatste pagina in dit bestand"
+
+#: info/infodoc.c:62
+msgid ""
+"\\%-10[move-to-next-xref] Skip to next hypertext link within this node.\n"
+msgstr ""
+
+#: info/infodoc.c:63
+msgid ""
+"\\%-10[move-to-prev-xref] Skip to previous hypertext link within this "
+"node.\n"
+msgstr ""
+
+#: info/infodoc.c:64
+msgid ""
+"\\%-10[select-reference-this-line] Follow the hypertext link under cursor.\n"
+msgstr ""
+
+#: info/infodoc.c:65
+msgid ""
+"\\%-10[dir-node] Move to the `directory' node. Equivalent to `\\[goto-"
+"node] (DIR)'.\n"
+msgstr ""
+
+#: info/infodoc.c:66
+msgid ""
+"\\%-10[top-node] Move to the Top node. Equivalent to `\\[goto-node] Top'.\n"
+msgstr ""
+
+#: info/infodoc.c:68 info/infodoc.c:116
+#, fuzzy
+msgid ""
+"Moving within a node:\n"
+"---------------------\n"
+msgstr ""
+"---------- Voetnoten ----------\n"
+"\n"
+
+# kill?
+#: info/infodoc.c:70
+#, fuzzy
+msgid "\\%-10[beginning-of-node] Go to the beginning of this node.\n"
+msgstr "Verwijder tot aan het begin van de regel"
+
+#: info/infodoc.c:71
+#, fuzzy
+msgid "\\%-10[end-of-node] Go to the end of this node.\n"
+msgstr "Ga naar het einde van deze pagina"
+
+#: info/infodoc.c:72
+#, fuzzy
+msgid "\\%-10[next-line] Scroll forward 1 line.\n"
+msgstr "Schuif terug in dit venster"
+
+#: info/infodoc.c:73
+#, fuzzy
+msgid "\\%-10[prev-line] Scroll backward 1 line.\n"
+msgstr "Schuif terug in dit venster"
+
+#: info/infodoc.c:74
+msgid "\\%-10[scroll-forward] Scroll forward a page.\n"
+msgstr ""
+
+#: info/infodoc.c:75
+#, fuzzy
+msgid "\\%-10[scroll-backward] Scroll backward a page.\n"
+msgstr "Schuif terug in dit venster"
+
+#: info/infodoc.c:77 info/infodoc.c:125
+#, fuzzy
+msgid ""
+"Other commands:\n"
+"---------------\n"
+msgstr "Waar is het commando: "
+
+#: info/infodoc.c:79
+#, fuzzy
+msgid "\\%-10[menu-digit] Pick first ... ninth item in node's menu.\n"
+msgstr "Selecteer de laatste keuze in het menu van deze pagina"
+
+#: info/infodoc.c:80
+#, fuzzy
+msgid "\\%-10[last-menu-item] Pick last item in node's menu.\n"
+msgstr "Selecteer de laatste keuze in het menu van deze pagina"
+
+#: info/infodoc.c:81
+msgid ""
+"\\%-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"
+msgstr ""
+
+#: info/infodoc.c:83
+msgid ""
+"\\%-10[goto-node] Move to node specified by name.\n"
+" You may include a filename as well, as in (FILENAME)NODENAME.\n"
+msgstr ""
+
+#: info/infodoc.c:85
+msgid ""
+"\\%-10[search] Search forward for a specified string\n"
+" and select the node in which the next occurrence is found.\n"
+msgstr ""
+
+#: info/infodoc.c:87
+msgid ""
+"\\%-10[search-backward] Search backward for a specified string\n"
+" and select the node in which the previous occurrence is "
+"found.\n"
+msgstr ""
+
+#: info/infodoc.c:98
+#, fuzzy, c-format
+msgid " %-10s Quit this help.\n"
+msgstr "Geen \"Vorige\" voor deze pagina."
+
+#: info/infodoc.c:99
+#, c-format
+msgid " %-10s Quit Info altogether.\n"
+msgstr ""
+
+#: info/infodoc.c:100
+#, c-format
+msgid " %-10s Invoke the Info tutorial.\n"
+msgstr ""
+
+#: info/infodoc.c:104
+#, fuzzy, c-format
+msgid " %-10s Move to the `next' node of this node.\n"
+msgstr "Ga naar het einde van deze pagina"
+
+#: info/infodoc.c:105
+#, fuzzy, c-format
+msgid " %-10s Move to the `previous' node of this node.\n"
+msgstr "Ga naar het einde van deze pagina"
+
+#: info/infodoc.c:106
+#, fuzzy, c-format
+msgid " %-10s Move `up' from this node.\n"
+msgstr "Geen \"Vorige\" voor deze pagina."
+
+#: info/infodoc.c:107
+#, c-format
+msgid " %-10s Pick menu item specified by name.\n"
+msgstr ""
+
+#: info/infodoc.c:108
+msgid " Picking a menu item causes another node to be selected.\n"
+msgstr ""
+
+#: info/infodoc.c:109
+#, c-format
+msgid " %-10s Follow a cross reference. Reads name of reference.\n"
+msgstr ""
+
+#: info/infodoc.c:110
+#, fuzzy, c-format
+msgid " %-10s Move to the last node seen in this window.\n"
+msgstr "Selecteer de laatste pagina in dit bestand"
+
+#: info/infodoc.c:111
+#, c-format
+msgid " %-10s Skip to next hypertext link within this node.\n"
+msgstr ""
+
+#: info/infodoc.c:112
+#, c-format
+msgid " %-10s Follow the hypertext link under cursor.\n"
+msgstr ""
+
+#: info/infodoc.c:113
+#, c-format
+msgid " %-10s Move to the `directory' node. Equivalent to `g (DIR)'.\n"
+msgstr ""
+
+#: info/infodoc.c:114
+#, c-format
+msgid " %-10s Move to the Top node. Equivalent to `g Top'.\n"
+msgstr ""
+
+#: info/infodoc.c:118
+#, c-format
+msgid " %-10s Scroll forward a page.\n"
+msgstr ""
+
+#: info/infodoc.c:119
+#, c-format
+msgid " %-10s Scroll backward a page.\n"
+msgstr ""
+
+# kill?
+#: info/infodoc.c:120
+#, fuzzy, c-format
+msgid " %-10s Go to the beginning of this node.\n"
+msgstr "Verwijder tot aan het begin van de regel"
+
+#: info/infodoc.c:121
+#, fuzzy, c-format
+msgid " %-10s Go to the end of this node.\n"
+msgstr "Ga naar het einde van deze pagina"
+
+#: info/infodoc.c:122
+#, c-format
+msgid " %-10s Scroll forward 1 line.\n"
+msgstr ""
+
+#: info/infodoc.c:123
+#, fuzzy, c-format
+msgid " %-10s Scroll backward 1 line.\n"
+msgstr "Schuif terug in dit venster"
+
+#: info/infodoc.c:127
+#, fuzzy, c-format
+msgid " %-10s Pick first ... ninth item in node's menu.\n"
+msgstr "Selecteer de laatste keuze in het menu van deze pagina"
+
+#: info/infodoc.c:128
+#, fuzzy, c-format
+msgid " %-10s Pick last item in node's menu.\n"
+msgstr "Selecteer de laatste keuze in het menu van deze pagina"
+
+#: info/infodoc.c:129
+#, c-format
+msgid ""
+" %-10s Search for a specified string in the index entries of this Info\n"
+msgstr ""
+
+#: info/infodoc.c:130
+msgid ""
+" file, and select the node referenced by the first entry "
+"found.\n"
+msgstr ""
+
+#: info/infodoc.c:131
+#, c-format
+msgid " %-10s Move to node specified by name.\n"
+msgstr ""
+
+#: info/infodoc.c:132
+msgid ""
+" You may include a filename as well, as in (FILENAME)NODENAME.\n"
+msgstr ""
+
+#: info/infodoc.c:133
+#, c-format
+msgid " %-10s Search forward for a specified string,\n"
+msgstr ""
+
+#: info/infodoc.c:134 info/infodoc.c:136
+msgid ""
+" and select the node in which the next occurrence is found.\n"
+msgstr ""
+
+#: info/infodoc.c:135
+#, fuzzy, c-format
+msgid " %-10s Search backward for a specified string\n"
+msgstr "Schuif terug in dit venster"
+
+#: info/infodoc.c:316
+msgid "The current search path is:\n"
+msgstr ""
+
+#: info/infodoc.c:320
+#, fuzzy
+msgid ""
+"Commands available in Info windows:\n"
+"\n"
+msgstr "Basiscommando's in Info Vensters"
+
+#: info/infodoc.c:324
+msgid ""
+"Commands available in the echo area:\n"
+"\n"
+msgstr ""
+
+#: info/infodoc.c:347
+#, fuzzy, c-format
+msgid ""
+"The following commands can only be invoked via %s:\n"
+"\n"
+msgstr ""
+"De volgende commando's kunnen alleen aangeroepen worden via M-x:\n"
+"\n"
+
+#: info/infodoc.c:351
+#, fuzzy
+msgid ""
+"The following commands cannot be invoked at all:\n"
+"\n"
+msgstr ""
+"De volgende commando's kunnen alleen aangeroepen worden via M-x:\n"
+"\n"
+
+#: info/infodoc.c:375
+msgid "--- Use `\\[history-node]' or `\\[kill-node]' to exit ---\n"
+msgstr ""
+"--- Gebruik `\\[history-node]' of `\\[kill-node]' om te beëindigen ---\n"
+
+#: info/infodoc.c:485
+msgid "Display help message"
+msgstr "Geef een help boodschap"
+
+#: info/infodoc.c:503
+msgid "Visit Info node `(info)Help'"
+msgstr "Ga naar Info pagina `(info)Help'"
+
+#: info/infodoc.c:641
+msgid "Print documentation for KEY"
+msgstr "Geef uitleg over KEY"
+
+#: info/infodoc.c:653
+#, c-format
+msgid "Describe key: %s"
+msgstr "Omschrijf toets: %s"
+
+#: info/infodoc.c:664
+#, c-format
+msgid "ESC %s is undefined."
+msgstr "ESC %s is niet gedefinieerd."
+
+#: info/infodoc.c:680 info/infodoc.c:709
+#, c-format
+msgid "%s is undefined."
+msgstr "%s is niet gedefinieerd."
+
+#: info/infodoc.c:730
+#, c-format
+msgid "%s is defined to %s."
+msgstr "%s is gedefinieerd als %s."
+
+#: info/infodoc.c:1153
+msgid "Show what to type to execute a given command"
+msgstr ""
+
+#: info/infodoc.c:1157
+msgid "Where is command: "
+msgstr "Waar is het commando: "
+
+#: info/infodoc.c:1179
+#, c-format
+msgid "`%s' is not on any keys"
+msgstr "`%s' is niet toegekend aan een toets"
+
+#: info/infodoc.c:1186
+#, c-format
+msgid "%s can only be invoked via %s."
+msgstr "%s kan alleen aangeroepen worden via %s."
+
+#: info/infodoc.c:1190
+#, c-format
+msgid "%s can be invoked via %s."
+msgstr "%s kan aangeroepen worden via %s."
+
+#: info/infodoc.c:1195
+#, c-format
+msgid "There is no function named `%s'"
+msgstr "Er is geen functie met de naam `%s'"
+
+#: info/infokey.c:145
+#, c-format
+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"
+"Er is GEEN garantie. Je mag deze programmatuur herdistribueren\n"
+"onder de voorwaarden van de GNU General Public License.\n"
+"Voor meer informatie hierover, zie de bestanden met de naam COPYING.\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 "Kan pijp naar \"%s\" niet openen."
+
+#: info/infokey.c:215
+#, fuzzy, c-format
+msgid "cannot create output file `%s'"
+msgstr "Kan uitvoerbestand \"%s\" niet vinden."
+
+#: 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 "Kan uitvoerbestand \"%s\" niet vinden."
+
+#: 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 ontbrekende afsluitende accolade"
+
+#: 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 "Onbekend commando `%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: ontbrekend bestandsargument\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:1500
+#, c-format
+msgid "Ignoring invalid infokey file `%s' - too small"
+msgstr ""
+
+#: info/infomap.c:1503
+#, c-format
+msgid "Ignoring invalid infokey file `%s' - too big"
+msgstr ""
+
+#: info/infomap.c:1516
+#, c-format
+msgid "Error reading infokey file `%s' - short read"
+msgstr ""
+
+#: info/infomap.c:1535
+#, c-format
+msgid ""
+"Invalid infokey file `%s' (bad magic numbers) -- run infokey to update it"
+msgstr ""
+
+#: info/infomap.c:1544
+#, c-format
+msgid "Your infokey file `%s' is out of date -- run infokey to update it"
+msgstr ""
+
+#: info/infomap.c:1560
+#, c-format
+msgid ""
+"Invalid infokey file `%s' (bad section length) -- run infokey to update it"
+msgstr ""
+
+#: info/infomap.c:1581
+#, c-format
+msgid ""
+"Invalid infokey file `%s' (bad section code) -- run infokey to update it"
+msgstr ""
+
+#: info/infomap.c:1716
+msgid "Bad data in infokey file -- some key bindings ignored"
+msgstr ""
+
+#: info/infomap.c:1766
+msgid "Bad data in infokey file -- some var settings ignored"
+msgstr ""
+
+#: info/m-x.c:69
+msgid "Read the name of an Info command and describe it"
+msgstr "Lees de naam van een Info commando en geef een omschrijving"
+
+#: info/m-x.c:73
+msgid "Describe command: "
+msgstr "Omschrijf commando: "
+
+#: info/m-x.c:96
+msgid "Read a command name in the echo area and execute it"
+msgstr "Lees de naam van een commando in de weergeefruimte en voer dat uit"
+
+#: info/m-x.c:140
+msgid "Cannot execute an `echo-area' command here."
+msgstr "Kan hier geen `echo-area' commando uitvoeren."
+
+#: info/m-x.c:154
+#, fuzzy, c-format
+msgid "Undefined command: %s"
+msgstr "Onbekend commando `%s'"
+
+#: info/m-x.c:160
+msgid "Set the height of the displayed window"
+msgstr "Zet de hoogte van het weergegeven venster"
+
+#: info/m-x.c:173
+#, c-format
+msgid "Set screen height to (%d): "
+msgstr "Zet schermhoogte op (%d): "
+
+#: info/makedoc.c:162 info/makedoc.c:170
+#, c-format
+msgid ""
+" Source files groveled to make this file include:\n"
+"\n"
+msgstr ""
+" Bronbestanden veranderd om dit bestand in te voegen:\n"
+"\n"
+
+#: info/makedoc.c:550
+#, c-format
+msgid "Couldn't manipulate the file %s.\n"
+msgstr "Kon het bestand %s niet manipuleren.\n"
+
+#: info/nodemenu.c:31
+msgid ""
+"\n"
+"* Menu:\n"
+" (File)Node Lines Size Containing File\n"
+" ---------- ----- ---- ---------------"
+msgstr ""
+"\n"
+"* Menu:\n"
+" (Bestand)Pagina Regels Grootte Bevat Bestand\n"
+" --------------- ----- ---- ---------------"
+
+#: info/nodemenu.c:202
+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 het menu van pagina's die je recentelijk bekeken hebt.\n"
+"Selecteer er een uit dit menu, of gebruik `\\[history-node]' in een ander "
+"venster.\n"
+
+#: info/nodemenu.c:224
+msgid "Make a window containing a menu of all of the currently visited nodes"
+msgstr "Maak een venster met een menu van alle bekeken pagina's"
+
+#: info/nodemenu.c:304
+msgid "Select a node which has been previously visited in a visible window"
+msgstr "Selecteer een pagina die voorheen bekeken is in een zichtbaar venster"
+
+#: info/nodemenu.c:317
+msgid "Select visited node: "
+msgstr "Selecteer een bezochte pagina: "
+
+#: info/nodemenu.c:337 info/session.c:2264
+#, c-format
+msgid "The reference disappeared! (%s)."
+msgstr "De verwijzing is verdwenen! (%s)."
+
+#: info/session.c:162
+#, fuzzy, 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. \"\\[get-help-window]\" voor hulp, \"\\[menu-item]"
+"\" voor een menukeuze."
+
+#: info/session.c:620
+msgid "Move down to the next line"
+msgstr "Ga naar de volgende regel"
+
+#: info/session.c:635
+msgid "Move up to the previous line"
+msgstr "Ga naar de vorige regel"
+
+#: info/session.c:650
+msgid "Move to the end of the line"
+msgstr "Ga naar het einde van de regel"
+
+#: info/session.c:670
+msgid "Move to the start of the line"
+msgstr "Ga naar het begin van de regel"
+
+#: info/session.c:860 makeinfo/node.c:1424
+#, fuzzy
+msgid "Next"
+msgstr "Volgende"
+
+#: info/session.c:863
+#, fuzzy
+msgid "Following Next node..."
+msgstr "\"Volgende\" pagina aan het volgen..."
+
+#: info/session.c:881
+msgid "Selecting first menu item..."
+msgstr "Ik selecteer de eerste keuze uit het menu..."
+
+#: info/session.c:893
+#, fuzzy
+msgid "Selecting Next node..."
+msgstr "Ik selecteer de \"Volgende\" pagina..."
+
+#: info/session.c:964
+#, c-format
+msgid "Moving Up %d time(s), then Next."
+msgstr ""
+
+#: info/session.c:988
+#, fuzzy
+msgid "No more nodes within this document."
+msgstr "Geen verwijzingen in deze pagina."
+
+#: info/session.c:1011
+#, fuzzy
+msgid "No `Prev' for this node."
+msgstr "Geen \"Vorige\" voor deze pagina."
+
+#: info/session.c:1014 info/session.c:1073
+#, fuzzy
+msgid "Moving Prev in this window."
+msgstr "Ik beweeg \"Vorige\" naar dit venster."
+
+#: info/session.c:1030
+#, fuzzy
+msgid "No `Prev' or `Up' for this node within this document."
+msgstr "Geen \"Vorige\" of \"Omhoog\" voor deze pagina."
+
+#: info/session.c:1034
+#, fuzzy
+msgid "Moving Up in this window."
+msgstr "Ik ga \"Omhoog\" in dit venster."
+
+#: info/session.c:1084
+#, fuzzy
+msgid "Moving to `Prev's last menu item."
+msgstr "Ik ga naar de laatste keuze van het menu van \"Vorige\"."
+
+#: info/session.c:1095
+msgid "Move forwards or down through node structure"
+msgstr "Beweeg naar voren of beneden door de paginastructuur"
+
+#: info/session.c:1111
+msgid "Move backwards or up through node structure"
+msgstr "Beweeg naar achteren of boven door de paginastructuur"
+
+#: info/session.c:1205
+msgid "Scroll forward in this window"
+msgstr "Schuif verder in dit venster"
+
+#: info/session.c:1213
+#, fuzzy
+msgid "Scroll forward in this window and set default window size"
+msgstr "Schuif verder in dit venster"
+
+#: info/session.c:1221
+#, fuzzy
+msgid "Scroll forward in this window staying within node"
+msgstr "Schuif verder in dit venster"
+
+#: info/session.c:1229
+#, fuzzy
+msgid ""
+"Scroll forward in this window staying within node and set default window size"
+msgstr "Schuif verder in dit venster"
+
+#: info/session.c:1237
+msgid "Scroll backward in this window"
+msgstr "Schuif terug in dit venster"
+
+#: info/session.c:1245
+#, fuzzy
+msgid "Scroll backward in this window and set default window size"
+msgstr "Schuif terug in dit venster"
+
+#: info/session.c:1254
+#, fuzzy
+msgid "Scroll backward in this window staying within node"
+msgstr "Schuif terug in dit venster"
+
+#: info/session.c:1262
+#, fuzzy
+msgid ""
+"Scroll backward in this window staying within node and set default window "
+"size"
+msgstr "Schuif terug in dit venster"
+
+#: info/session.c:1270
+msgid "Move to the start of this node"
+msgstr "Ga naar het begin van deze pagina"
+
+#: info/session.c:1277
+msgid "Move to the end of this node"
+msgstr "Ga naar het einde van deze pagina"
+
+#: info/session.c:1284
+msgid "Scroll down by lines"
+msgstr ""
+
+#: info/session.c:1301
+msgid "Scroll up by lines"
+msgstr ""
+
+#: info/session.c:1319
+msgid "Scroll down by half screen size"
+msgstr ""
+
+#: info/session.c:1345
+msgid "Scroll up by half screen size"
+msgstr ""
+
+#: info/session.c:1374
+msgid "Select the next window"
+msgstr "Selecteer het volgende venster"
+
+#: info/session.c:1413
+msgid "Select the previous window"
+msgstr "Selecteer het vorige venster"
+
+#: info/session.c:1464
+msgid "Split the current window"
+msgstr "Splits het huidige venster"
+
+#: info/session.c:1545
+msgid "Delete the current window"
+msgstr "Verwijder het huidige venster"
+
+#: info/session.c:1553
+msgid "Cannot delete a permanent window"
+msgstr "Kan een permanent venster niet verwijderen"
+
+#: info/session.c:1585
+msgid "Delete all other windows"
+msgstr "Verwijder alle andere vensters"
+
+#: info/session.c:1631
+msgid "Scroll the other window"
+msgstr "Verschuif het andere venster"
+
+#: info/session.c:1652
+#, fuzzy
+msgid "Scroll the other window backward"
+msgstr "Verschuif het andere venster"
+
+#: info/session.c:1658
+msgid "Grow (or shrink) this window"
+msgstr "Vergroot (of verklein) dit venster"
+
+#: info/session.c:1669
+msgid "Divide the available screen space among the visible windows"
+msgstr "Verdeel de beschikbare schermruimte tussen de zichtbare vensters"
+
+#: info/session.c:1676
+msgid "Toggle the state of line wrapping in the current window"
+msgstr "Verander de status van regeldoorlopen in het huidige venster"
+
+#: info/session.c:1848
+#, fuzzy
+msgid "Select the Next node"
+msgstr "Selecteer de `Volgende' pagina"
+
+#: info/session.c:1856
+#, fuzzy
+msgid "Select the Prev node"
+msgstr "Selecteer de `Vorige' pagina"
+
+#: info/session.c:1864
+#, fuzzy
+msgid "Select the Up node"
+msgstr "Selecteer de `Omhoog' pagina"
+
+#: info/session.c:1871
+msgid "Select the last node in this file"
+msgstr "Selecteer de laatste pagina in dit bestand"
+
+#: info/session.c:1898 info/session.c:1931
+msgid "This window has no additional nodes"
+msgstr "Dit venster heeft geen extra pagina's"
+
+#: info/session.c:1904
+msgid "Select the first node in this file"
+msgstr "Selecteer de eerste pagina in dit bestand"
+
+#: info/session.c:1938
+msgid "Select the last item in this node's menu"
+msgstr "Selecteer de laatste keuze in het menu van deze pagina"
+
+#: info/session.c:1944
+msgid "Select this menu item"
+msgstr "Selecteer deze menukeuze"
+
+#: info/session.c:1977
+#, c-format
+msgid "There aren't %d items in this menu."
+msgstr "Er zijn geen %d keuzes in dit menu."
+
+#: info/session.c:2171 info/session.c:2172
+#, c-format
+msgid "Menu item (%s): "
+msgstr "Menukeuze (%s): "
+
+#: info/session.c:2175
+msgid "Menu item: "
+msgstr "Menukeuze: "
+
+#: info/session.c:2182 info/session.c:2183
+#, c-format
+msgid "Follow xref (%s): "
+msgstr "Volg verwijzing (%s): "
+
+#: info/session.c:2186
+msgid "Follow xref: "
+msgstr "Volg verwijzing: "
+
+#: info/session.c:2315
+msgid "Read a menu item and select its node"
+msgstr "Lees een menukeuze en selecteer zijn pagina"
+
+#: info/session.c:2323
+msgid "Read a footnote or cross reference and select its node"
+msgstr "Lees een voetnoot of verwijzing en selecteer zijn pagina"
+
+#: info/session.c:2329
+msgid "Move to the start of this node's menu"
+msgstr "Ga naar het begin van het menu van deze pagina"
+
+#: info/session.c:2353
+msgid "Visit as many menu items at once as possible"
+msgstr "Ga naar zo veel mogelijk menukeuzes tegelijk"
+
+#: info/session.c:2381
+msgid "Read a node name and select it"
+msgstr "Lees de naam van een pagina en selecteer die"
+
+#: info/session.c:2436 info/session.c:2441
+#, fuzzy
+msgid "Goto node: "
+msgstr "Ga naar Pagina: "
+
+#: info/session.c:2505
+#, fuzzy, c-format
+msgid "No menu in node `%s'."
+msgstr "Geen pagina's meer."
+
+#: info/session.c:2551
+#, fuzzy, c-format
+msgid "No menu item `%s' in node `%s'."
+msgstr "Er is geen menukeuze \"%s\" op deze pagina."
+
+#: info/session.c:2581
+#, fuzzy, c-format
+msgid "Unable to find node referenced by `%s' in `%s'."
+msgstr "Kon de pagina, waarnaar verwezen werd door \"%s\", niet vinden."
+
+#: info/session.c:2631
+msgid "Read a list of menus starting from dir and follow them"
+msgstr ""
+
+#: info/session.c:2633
+#, fuzzy
+msgid "Follow menus: "
+msgstr "Volg verwijzing: "
+
+#: info/session.c:2826
+msgid "Find the node describing program invocation"
+msgstr ""
+
+#: info/session.c:2828
+#, c-format
+msgid "Find Invocation node of [%s]: "
+msgstr ""
+
+# manpage?
+#: info/session.c:2866
+msgid "Read a manpage reference and select it"
+msgstr "Lees een manpagina verwijzing en selecteer die"
+
+#: info/session.c:2870
+msgid "Get Manpage: "
+msgstr "Ga naar manpagina: "
+
+#: info/session.c:2900
+msgid "Select the node `Top' in this file"
+msgstr "Selecteer de `Top' pagina in dit bestand"
+
+#: info/session.c:2906
+msgid "Select the node `(dir)'"
+msgstr "Selecteer de pagina `(dir)'"
+
+#: info/session.c:2923 info/session.c:2925
+#, c-format
+msgid "Kill node (%s): "
+msgstr "Verwijder pagina (%s): "
+
+#: info/session.c:2977
+#, c-format
+msgid "Cannot kill node `%s'"
+msgstr "Kan pagina `%s' niet verwijderen"
+
+#: info/session.c:2987
+msgid "Cannot kill the last node"
+msgstr "Kan de laatste pagina niet verwijderen"
+
+#: info/session.c:3073
+msgid "Select the most recently selected node"
+msgstr "Selecteer de laatst geselecteerde pagina"
+
+#: info/session.c:3079
+msgid "Kill this node"
+msgstr "Sluit deze pagina"
+
+#: info/session.c:3087
+msgid "Read the name of a file and select it"
+msgstr "Lees de naam van een bestand en selecteer die"
+
+#: info/session.c:3091
+msgid "Find file: "
+msgstr "Vind bestand: "
+
+#: info/session.c:3108
+#, fuzzy, c-format
+msgid "Cannot find `%s'."
+msgstr "Kan \"%s\" niet vinden."
+
+#: info/session.c:3151 info/session.c:3269
+#, fuzzy, c-format
+msgid "Could not create output file `%s'."
+msgstr "Kan uitvoerbestand \"%s\" niet vinden."
+
+#: info/session.c:3165 info/session.c:3287 info/session.c:3347
+msgid "Done."
+msgstr "Klaar."
+
+#: info/session.c:3220
+#, fuzzy, c-format
+msgid "Writing node %s..."
+msgstr "Bezig met schrijven van pagina \"%s\"..."
+
+#: info/session.c:3296
+msgid "Pipe the contents of this node through INFO_PRINT_COMMAND"
+msgstr "Sluis de inhoud van deze pagina door INFO_PRINT_COMMAND"
+
+#: info/session.c:3331
+#, fuzzy, c-format
+msgid "Cannot open pipe to `%s'."
+msgstr "Kan pijp naar \"%s\" niet openen."
+
+#: info/session.c:3337
+#, fuzzy, c-format
+msgid "Printing node %s..."
+msgstr "Bezig met afdrukken van pagina \"%s\"..."
+
+#: info/session.c:3567
+#, fuzzy, c-format
+msgid "Searching subfile %s ..."
+msgstr "Bezig met zoeken naar sub-bestand \"%s\"..."
+
+#: info/session.c:3619
+#, fuzzy
+msgid "Read a string and search for it case-sensitively"
+msgstr "Lees een tekenreeks en zoek daar naar"
+
+#: info/session.c:3626
+msgid "Read a string and search for it"
+msgstr "Lees een tekenreeks en zoek daar naar"
+
+#: info/session.c:3634
+#, fuzzy
+msgid "Read a string and search backward for it"
+msgstr "Lees een tekenreeks en zoek daar naar"
+
+#: info/session.c:3670 info/session.c:3677
+#, fuzzy, c-format
+msgid "%s%sfor string [%s]: "
+msgstr "%s voor tekenreeks [%s]: "
+
+#: info/session.c:3671 info/session.c:3678
+msgid "Search backward"
+msgstr "Achteruit zoeken"
+
+#: info/session.c:3672 info/session.c:3678
+msgid "Search"
+msgstr "Zoek"
+
+#: info/session.c:3673 info/session.c:3679
+msgid " case-sensitively "
+msgstr ""
+
+#: info/session.c:3674 info/session.c:3679
+msgid " "
+msgstr ""
+
+#: info/session.c:3718
+msgid "Search failed."
+msgstr "Niet gevonden."
+
+#: info/session.c:3736
+msgid "Repeat last search in the same direction"
+msgstr ""
+
+#: info/session.c:3739 info/session.c:3749
+#, fuzzy
+msgid "No previous search string"
+msgstr "Geen eerdere index zoek string."
+
+#: info/session.c:3746
+msgid "Repeat last search in the reverse direction"
+msgstr ""
+
+#: info/session.c:3765 info/session.c:3771
+msgid "Search interactively for a string as you type it"
+msgstr "Zoek interactief naar een string als je het intypt"
+
+#: info/session.c:3851
+msgid "I-search backward: "
+msgstr "Achteruit I-zoeken: "
+
+#: info/session.c:3853
+msgid "I-search: "
+msgstr "I-zoeken: "
+
+#: info/session.c:3878 info/session.c:3880
+msgid "Failing "
+msgstr "Niet gelukt: "
+
+#: info/session.c:4340
+msgid "Move to the previous cross reference"
+msgstr "Ga naar de vorige verwijzing"
+
+#: info/session.c:4349
+msgid "Move to the next cross reference"
+msgstr "Ga naar de volgende verwijzing"
+
+#: info/session.c:4359
+msgid "Select reference or menu item appearing on this line"
+msgstr "Selecteer verwijzing of menukeuze van deze regel"
+
+#: info/session.c:4382
+msgid "Cancel current operation"
+msgstr "Annuleer huidige operatie"
+
+# Zie Cancel current action
+#: info/session.c:4389
+msgid "Quit"
+msgstr "Afgebroken"
+
+#: info/session.c:4398
+#, fuzzy
+msgid "Move the cursor to a specific line of the window"
+msgstr "Beweeg de cursor naar een bepaalde regel van het venster"
+
+#: info/session.c:4430
+msgid "Redraw the display"
+msgstr "Herschrijf het venster"
+
+#: info/session.c:4467
+msgid "Quit using Info"
+msgstr "Stop met Info"
+
+#: info/session.c:4480
+msgid "Run command bound to this key's lowercase variant"
+msgstr ""
+
+#: info/session.c:4491
+#, c-format
+msgid "Unknown command (%s)."
+msgstr "Onbekend commando (%s)."
+
+#: info/session.c:4494
+#, c-format
+msgid "\"%s\" is invalid"
+msgstr "\"%s\" is ongeldig"
+
+#: info/session.c:4495
+#, fuzzy, c-format
+msgid "`%s' is invalid"
+msgstr "\"%s\" is ongeldig"
+
+#: info/session.c:4709
+msgid "Add this digit to the current numeric argument"
+msgstr "Voeg dit cijfer toe aan het huidige numerieke argument"
+
+#: info/session.c:4718
+msgid "Start (or multiply by 4) the current numeric argument"
+msgstr "Begin een nieuw numeriek argument of vermenigvuldig het huidige met 4"
+
+#: info/session.c:4733
+msgid "Internally used by \\[universal-argument]"
+msgstr "Intern gebruikt door \\[universeel-argument]"
+
+#: info/tilde.c:338
+#, c-format
+msgid "readline: Out of virtual memory!\n"
+msgstr "readline: Geen virtueel geheugen meer!\n"
+
+#: info/variables.c:37
+msgid "When \"On\", footnotes appear and disappear automatically"
+msgstr "Indien \"Aan\", verschijnen en verdwijnen voetnoten automatisch"
+
+#: info/variables.c:41
+msgid "When \"On\", creating or deleting a window resizes other windows"
+msgstr ""
+"Indien \"Aan\", verandert het aanmaken of verwijderen van een venster de "
+"grootte van andere vensters"
+
+#: info/variables.c:45
+msgid "When \"On\", flash the screen instead of ringing the bell"
+msgstr ""
+"Indien \"Aan\", laat het scherm flikkeren in plaats van het laten horen van "
+"een piep"
+
+#: info/variables.c:49
+msgid "When \"On\", errors cause the bell to ring"
+msgstr "Indien \"Aan\", zorgen fouten voor een belsignaal"
+
+#: info/variables.c:53
+msgid "When \"On\", Info garbage collects files which had to be uncompressed"
+msgstr ""
+"Indien \"Aan\", haalt Info rommel weg voor bestanden die gedecomprimeerd "
+"moesten worden"
+
+#: info/variables.c:56
+msgid "When \"On\", the portion of the matched search string is highlighted"
+msgstr ""
+"Indien \"Aan\", wordt het overeenkomende deel van de zoek-tekenreeks "
+"opgelicht"
+
+#: info/variables.c:60
+msgid "Controls what happens when scrolling is requested at the end of a node"
+msgstr ""
+"Stelt in wat er gebeurt als er aan het eind van een node verschoven wordt"
+
+#: info/variables.c:64
+msgid "The number lines to scroll when the cursor moves out of the window"
+msgstr "Het aantal regels dat verschuift als de cursor uit het venster gaat"
+
+#: info/variables.c:68
+msgid "When \"On\", Info accepts and displays ISO Latin characters"
+msgstr "Indien \"Aan\", accepteert Info ISO Latin tekens en laat ze zien"
+
+#: info/variables.c:74
+msgid "Explain the use of a variable"
+msgstr "Leg het gebruik van een variabele uit"
+
+#: info/variables.c:80
+msgid "Describe variable: "
+msgstr "Omschrijf variabele: "
+
+#: info/variables.c:99
+msgid "Set the value of an Info variable"
+msgstr "Zet de waarde van een Info variabele"
+
+#: info/variables.c:105
+msgid "Set variable: "
+msgstr "Stel variabele in: "
+
+#: info/variables.c:123
+#, c-format
+msgid "Set %s to value (%d): "
+msgstr "Geef een waarde voor %s (%d): "
+
+#: info/variables.c:164
+#, c-format
+msgid "Set %s to value (%s): "
+msgstr "Geef een waarde voor %s (%s): "
+
+#: info/window.c:1138
+msgid "--*** Tags out of Date ***"
+msgstr "--*** Tags zijn verouderd ***"
+
+#: info/window.c:1149
+msgid "-----Info: (), lines ----, "
+msgstr "-----Info: (), regels ----, "
+
+#: info/window.c:1156
+#, c-format
+msgid "-%s---Info: %s, %d lines --%s--"
+msgstr "-%s---Info: %s, %d regels --%s--"
+
+#: info/window.c:1160
+#, c-format
+msgid "-%s%s-Info: (%s)%s, %d lines --%s--"
+msgstr "-%s%s-Info: (%s)%s, %d regels --%s--"
+
+#: info/window.c:1167
+#, c-format
+msgid " Subfile: %s"
+msgstr "Sub-bestand: %s"
+
+#: lib/getopt.c:551 lib/getopt.c:570
+#, c-format
+msgid "%s: option `%s' is ambiguous\n"
+msgstr "%s: optie `%s' is dubbelzinnig\n"
+
+#: lib/getopt.c:603 lib/getopt.c:607
+#, c-format
+msgid "%s: option `--%s' doesn't allow an argument\n"
+msgstr "%s: optie `--%s' staat geen argumenten toe\n"
+
+#: lib/getopt.c:616 lib/getopt.c:621
+#, c-format
+msgid "%s: option `%c%s' doesn't allow an argument\n"
+msgstr "%s: optie `%c%s' staat geen argumenten toe\n"
+
+#: lib/getopt.c:667 lib/getopt.c:689 lib/getopt.c:1020 lib/getopt.c:1042
+#, c-format
+msgid "%s: option `%s' requires an argument\n"
+msgstr "%s: optie `%s' vereist een argument\n"
+
+#: lib/getopt.c:727 lib/getopt.c:730
+#, c-format
+msgid "%s: unrecognized option `--%s'\n"
+msgstr "%s: onbekende optie `--%s'\n"
+
+#: lib/getopt.c:738 lib/getopt.c:741
+#, c-format
+msgid "%s: unrecognized option `%c%s'\n"
+msgstr "%s: onbekende optie `%c%s'\n"
+
+# Dit is de POSIX versie van de volgende melding
+#: lib/getopt.c:796 lib/getopt.c:799
+#, c-format
+msgid "%s: illegal option -- %c\n"
+msgstr "%s: ongeldige optie -- %c\n"
+
+# Dezelfde tekst als hiervoor
+#: lib/getopt.c:805 lib/getopt.c:808
+#, c-format
+msgid "%s: invalid option -- %c\n"
+msgstr "%s: ongeldige optie -- %c\n"
+
+#: lib/getopt.c:863 lib/getopt.c:882 lib/getopt.c:1095 lib/getopt.c:1116
+#, c-format
+msgid "%s: option requires an argument -- %c\n"
+msgstr "%s: optie vereist een argument -- %c\n"
+
+#: lib/getopt.c:935 lib/getopt.c:954
+#, c-format
+msgid "%s: option `-W %s' is ambiguous\n"
+msgstr "%s: optie `-W %s' is dubbelzinnig\n"
+
+#: lib/getopt.c:978 lib/getopt.c:999
+#, c-format
+msgid "%s: option `-W %s' doesn't allow an argument\n"
+msgstr "%s: optie `-W %s' staat geen argumenten toe\n"
+
+#: makeinfo/cmds.c:520 makeinfo/cmds.c:542
+#, fuzzy, c-format
+msgid "arguments to @%s ignored"
+msgstr "Verkeerd argument voor %c%s"
+
+#: makeinfo/cmds.c:585
+msgid "January"
+msgstr "Januari"
+
+#: makeinfo/cmds.c:585
+msgid "February"
+msgstr "Februari"
+
+#: makeinfo/cmds.c:585
+msgid "March"
+msgstr "Maart"
+
+#: makeinfo/cmds.c:585
+msgid "April"
+msgstr "April"
+
+#: makeinfo/cmds.c:585
+msgid "May"
+msgstr "Mei"
+
+#: makeinfo/cmds.c:586
+msgid "June"
+msgstr "Juni"
+
+#: makeinfo/cmds.c:586
+msgid "July"
+msgstr "Juli"
+
+#: makeinfo/cmds.c:586
+msgid "August"
+msgstr "Augustus"
+
+#: makeinfo/cmds.c:586
+msgid "September"
+msgstr "September"
+
+#: makeinfo/cmds.c:586
+msgid "October"
+msgstr "Oktober"
+
+#: makeinfo/cmds.c:587
+msgid "November"
+msgstr "November"
+
+#: makeinfo/cmds.c:587
+msgid "December"
+msgstr "December"
+
+#: makeinfo/cmds.c:936
+#, c-format
+msgid "unlikely character %c in @var"
+msgstr ""
+
+#: makeinfo/cmds.c:979
+msgid "@sc argument all uppercase, thus no effect"
+msgstr ""
+
+#: makeinfo/cmds.c:1034
+#, fuzzy, c-format
+msgid "`{' expected, but saw `%c'"
+msgstr "`%cend' verwachtte `%s', maar heb `%s' gezien"
+
+#: makeinfo/cmds.c:1074
+msgid "end of file inside verb block"
+msgstr ""
+
+#: makeinfo/cmds.c:1082
+#, fuzzy, c-format
+msgid "`}' expected, but saw `%c'"
+msgstr "`%cend' verwachtte `%s', maar heb `%s' gezien"
+
+#: makeinfo/cmds.c:1112
+msgid ""
+"@strong{Note...} produces a spurious cross-reference in Info; reword to "
+"avoid that"
+msgstr ""
+
+#: makeinfo/cmds.c:1305
+#, c-format
+msgid "%c%s is obsolete"
+msgstr "%c%s is verouderd"
+
+#: makeinfo/cmds.c:1414
+#, fuzzy, c-format
+msgid "@sp requires a positive numeric argument, not `%s'"
+msgstr "%csp vereist een postief numeriek argument"
+
+#: makeinfo/cmds.c:1763 makeinfo/cmds.c:1819 makeinfo/footnote.c:82
+#, c-format
+msgid "Bad argument to %c%s"
+msgstr "Verkeerd argument voor %c%s"
+
+#: makeinfo/cmds.c:1773 makeinfo/makeinfo.c:4142
+msgid "asis"
+msgstr "asis"
+
+#: makeinfo/cmds.c:1775 makeinfo/cmds.c:1805 makeinfo/makeinfo.c:4144
+msgid "none"
+msgstr "geen"
+
+#: makeinfo/cmds.c:1789
+#, fuzzy, c-format
+msgid "Bad argument to @%s"
+msgstr "Verkeerd argument voor %c%s"
+
+#: makeinfo/cmds.c:1803
+msgid "insert"
+msgstr ""
+
+#: makeinfo/defun.c:84
+#, fuzzy
+msgid "Missing `}' in @def arg"
+msgstr "Ontbrekende `}' in het argument voor %cdef"
+
+#: makeinfo/defun.c:403
+msgid "Function"
+msgstr "Functie"
+
+#: makeinfo/defun.c:406
+msgid "Macro"
+msgstr "Makro"
+
+#: makeinfo/defun.c:409
+msgid "Special Form"
+msgstr "Speciaal Formulier"
+
+#: makeinfo/defun.c:413
+msgid "Variable"
+msgstr "Variabele"
+
+#: makeinfo/defun.c:416
+msgid "User Option"
+msgstr "Gebruikersoptie"
+
+#: makeinfo/defun.c:420
+msgid "Instance Variable"
+msgstr "Instantievariabele"
+
+#: makeinfo/defun.c:424
+msgid "Method"
+msgstr "Methode"
+
+#: makeinfo/defun.c:500 makeinfo/defun.c:505 makeinfo/defun.c:545
+#: makeinfo/defun.c:644 makeinfo/xml.c:2229
+msgid "of"
+msgstr ""
+
+#: makeinfo/defun.c:509 makeinfo/defun.c:513 makeinfo/defun.c:517
+#: makeinfo/defun.c:551 makeinfo/defun.c:650 makeinfo/xml.c:2234
+#, fuzzy
+msgid "on"
+msgstr "geen"
+
+# Is die x een foutje?
+#: makeinfo/defun.c:711
+#, fuzzy, c-format
+msgid "Must be in `@%s' environment to use `@%s'"
+msgstr "Moet in een `%s' `insertion' zitten om `%s'x te gebruiken"
+
+#: makeinfo/files.c:435
+#, c-format
+msgid "%s: getwd: %s, %s\n"
+msgstr "%s: getwd: %s, %s\n"
+
+#: makeinfo/files.c:638
+#, c-format
+msgid "`%s' omitted before output filename"
+msgstr ""
+
+#: makeinfo/files.c:646
+#, c-format
+msgid "`%s' omitted since writing to stdout"
+msgstr ""
+
+#: makeinfo/files.c:694
+msgid "Output buffer not empty."
+msgstr ""
+
+#: makeinfo/footnote.c:150
+#, c-format
+msgid "`%c%s' needs an argument `{...}', not just `%s'"
+msgstr "`%c%s' heeft een argument `{...}' nodig, niet slechts `%s'"
+
+#: makeinfo/footnote.c:165
+#, c-format
+msgid "No closing brace for footnote `%s'"
+msgstr "Geen afsluitende accolade voor voetnoot `%s'"
+
+# mooi vertaald he?
+#: makeinfo/footnote.c:198
+msgid "Footnote defined without parent node"
+msgstr "Voetnoot gedefinieerd zonder referentie pagina"
+
+# mooi vertaald he?
+#: makeinfo/footnote.c:210
+#, fuzzy
+msgid "Footnotes inside footnotes are not allowed"
+msgstr "Voetnoot gedefinieerd zonder referentie pagina"
+
+#: makeinfo/footnote.c:302 makeinfo/index.c:189
+#, fuzzy
+msgid "Footnotes"
+msgstr "-Voetnoten"
+
+#: makeinfo/html.c:87
+#, c-format
+msgid "%s: could not open --css-file: %s"
+msgstr ""
+
+#: makeinfo/html.c:172
+#, c-format
+msgid "%s:%d: --css-file ended in comment"
+msgstr ""
+
+#: makeinfo/html.c:207
+msgid "Untitled"
+msgstr ""
+
+#: makeinfo/html.c:422
+msgid "[unexpected] no html tag to pop"
+msgstr ""
+
+#: makeinfo/html.c:752
+#, fuzzy, c-format
+msgid "[unexpected] invalid node name: `%s'"
+msgstr "%s: onbekende optie `--%s'\n"
+
+#: makeinfo/index.c:169
+#, c-format
+msgid "Unknown index `%s'"
+msgstr "Onbekende index `%s'"
+
+#: makeinfo/index.c:234
+#, c-format
+msgid "Info cannot handle `:' in index entry `%s'"
+msgstr ""
+
+#: makeinfo/index.c:412
+#, c-format
+msgid "Index `%s' already exists"
+msgstr "Index `%s' bestaat al"
+
+#: makeinfo/index.c:455
+#, c-format
+msgid "Unknown index `%s' and/or `%s' in @synindex"
+msgstr "Onbekende index `%s' en/of `%s' in @synindex"
+
+#: makeinfo/index.c:661
+msgid "(line )"
+msgstr ""
+
+#: makeinfo/index.c:669
+#, c-format
+msgid "(line %*d)"
+msgstr ""
+
+#: makeinfo/index.c:750
+#, c-format
+msgid "Unknown index `%s' in @printindex"
+msgstr "Onbekende index `%s' in @printindex"
+
+#: makeinfo/index.c:819
+#, c-format
+msgid "Entry for index `%s' outside of any node"
+msgstr ""
+
+#: makeinfo/index.c:822 makeinfo/index.c:858
+msgid "(outside of any node)"
+msgstr ""
+
+#: makeinfo/index.c:919 makeinfo/index.c:925
+msgid "See "
+msgstr ""
+
+#: makeinfo/insertion.c:160
+msgid "@item not allowed in argument to @itemize"
+msgstr ""
+
+#: makeinfo/insertion.c:238
+msgid "Broken-Type in insertion_type_pname"
+msgstr "Verkeerd-Type in insertion_type_pname"
+
+#: makeinfo/insertion.c:334
+msgid "Enumeration stack overflow"
+msgstr "Enumeratiestapel overloop"
+
+# FIXME: hoe vertaal je `lettering'? tegenover enumerating
+#: makeinfo/insertion.c:366
+#, c-format
+msgid "lettering overflow, restarting at %c"
+msgstr "lettering overloop, start opnieuw bij %c"
+
+# FIXME: formatter?
+#: makeinfo/insertion.c:631
+#, c-format
+msgid "%s requires an argument: the formatter for %citem"
+msgstr "%s vereist een argument: de formatteerder voor %citem"
+
+#: makeinfo/insertion.c:719
+#, c-format
+msgid "%cfloat environments cannot be nested"
+msgstr ""
+
+#: makeinfo/insertion.c:973
+#, fuzzy, c-format
+msgid "`@end' expected `%s', but saw `%s'"
+msgstr "`%cend' verwachtte `%s', maar heb `%s' gezien"
+
+#: makeinfo/insertion.c:1337
+#, c-format
+msgid "No matching `%cend %s'"
+msgstr "Geen overeenkomende `%cend %s'"
+
+#: makeinfo/insertion.c:1592
+#, c-format
+msgid "%s requires letter or digit"
+msgstr "%s vereist een letter of cijfer"
+
+#: makeinfo/insertion.c:1687
+msgid "end of file inside verbatim block"
+msgstr ""
+
+#: makeinfo/insertion.c:1913
+#, fuzzy, c-format
+msgid "@%s not meaningful outside `@float' environment"
+msgstr "%citemx is zinloos in een `%s' blok"
+
+#: makeinfo/insertion.c:1949
+#, fuzzy
+msgid "@menu seen before first @node, creating `Top' node"
+msgstr "%cmenu gezien voor de eerste pagina"
+
+#: makeinfo/insertion.c:1950
+msgid ""
+"perhaps your @top node should be wrapped in @ifnottex rather than @ifinfo?"
+msgstr ""
+
+#: makeinfo/insertion.c:1962
+#, fuzzy
+msgid "@detailmenu seen before first node, creating `Top' node"
+msgstr "%cmenu gezien voor de eerste pagina"
+
+#: makeinfo/insertion.c:2018
+#, c-format
+msgid "@%s not meaningful outside `@titlepage' and `@quotation' environments"
+msgstr ""
+
+#: makeinfo/insertion.c:2032
+#, fuzzy, c-format
+msgid "@%s not meaningful outside `@titlepage' environment"
+msgstr "%citemx is zinloos in een `%s' blok"
+
+#: makeinfo/insertion.c:2063
+#, c-format
+msgid "Unmatched `%c%s'"
+msgstr "Niet overeenkomende `%c%s'"
+
+#: makeinfo/insertion.c:2068
+#, c-format
+msgid "`%c%s' needs something after it"
+msgstr "`%c%s' verwacht er iets na"
+
+#: makeinfo/insertion.c:2074
+#, fuzzy, c-format
+msgid "Bad argument `%s' to `@%s', using `%s'"
+msgstr "Verkeerd argument voor `%s', `%s', gebruik `%s'"
+
+#: makeinfo/insertion.c:2171
+#, fuzzy, c-format
+msgid "@%s not meaningful inside `@%s' block"
+msgstr "%citemx is zinloos in een `%s' blok"
+
+#: makeinfo/insertion.c:2180
+#, fuzzy, c-format
+msgid "@itemx not meaningful inside `%s' block"
+msgstr "%citemx is zinloos in een `%s' blok"
+
+#: makeinfo/insertion.c:2356
+#, c-format
+msgid "%c%s found outside of an insertion block"
+msgstr "%c%s buiten een invoeg-blok gevonden"
+
+#: makeinfo/lang.c:580
+#, c-format
+msgid "%s is not a valid ISO 639 language code"
+msgstr ""
+
+#: makeinfo/lang.c:655
+#, fuzzy, c-format
+msgid "unrecognized encoding name `%s'"
+msgstr "%s: onbekende optie `--%s'\n"
+
+#: makeinfo/lang.c:663
+#, c-format
+msgid "sorry, encoding `%s' not supported"
+msgstr ""
+
+#: makeinfo/lang.c:715
+#, c-format
+msgid "invalid encoded character `%s'"
+msgstr ""
+
+#: makeinfo/lang.c:1009
+#, 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:1013
+#, 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 "makro `%s' al eerder gedefinieerd"
+
+#: makeinfo/macro.c:132
+#, c-format
+msgid "here is the previous definition of `%s'"
+msgstr "hier is de vorige definitie van `%s'"
+
+#: makeinfo/macro.c:355
+#, c-format
+msgid "\\ in macro expansion followed by `%s' instead of parameter name"
+msgstr ""
+
+#: makeinfo/macro.c:401
+#, fuzzy, c-format
+msgid "Macro `%s' called on line %d with too many args"
+msgstr "Makro `%s' aangeroepen met te veel argumenten"
+
+#: makeinfo/macro.c:586
+#, c-format
+msgid "%cend macro not found"
+msgstr "%cend makro niet gevonden"
+
+#: makeinfo/macro.c:624
+#, fuzzy
+msgid "@quote-arg only useful for single-argument macros"
+msgstr ""
+"%cquote-arg is allen nuttig indien de makro slechts een argument verwacht"
+
+#: makeinfo/macro.c:660
+#, c-format
+msgid "mismatched @end %s with @%s"
+msgstr ""
+
+#: makeinfo/makeinfo.c:184
+#, c-format
+msgid "Too many errors! Gave up.\n"
+msgstr "Te veel fouten! Ik heb het maar opgegeven.\n"
+
+#: makeinfo/makeinfo.c:302
+#, c-format
+msgid "%s:%d: warning: "
+msgstr "%s:%d: waarschuwing: "
+
+#: makeinfo/makeinfo.c:321 makeinfo/makeinfo.c:2260
+#, c-format
+msgid "Misplaced %c"
+msgstr "Verkeerd geplaatste %c"
+
+#: makeinfo/makeinfo.c:340
+#, c-format
+msgid "Try `%s --help' for more information.\n"
+msgstr "Probeer `%s --help' voor meer informatie.\n"
+
+#: makeinfo/makeinfo.c:343
+#, fuzzy, c-format
+msgid "Usage: %s [OPTION]... TEXINFO-FILE...\n"
+msgstr "Aanroep: %s [OPTIE]... BESTAND...\n"
+
+#: makeinfo/makeinfo.c:346
+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:350
+#, c-format
+msgid ""
+"General options:\n"
+" --error-limit=NUM quit after NUM errors (default %d).\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"
+" --reference-limit=NUM warn about at most NUM references (default %"
+"d).\n"
+" -v, --verbose explain what is being done.\n"
+" --version display version information and exit.\n"
+msgstr ""
+
+#: makeinfo/makeinfo.c:364
+#, 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:372
+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 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 (directory if split HTML),\n"
+msgstr ""
+
+#: makeinfo/makeinfo.c:386
+#, c-format
+msgid ""
+"Options for Info and plain text:\n"
+" --enable-encoding output accented and special characters in\n"
+" Info output based on @documentencoding.\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\n"
+" in which they are defined (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:403
+msgid ""
+"Options for HTML:\n"
+" --css-include=FILE include FILE in HTML <style> output;\n"
+" read stdin if FILE is -.\n"
+msgstr ""
+
+#: makeinfo/makeinfo.c:409
+#, 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:416
+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:425
+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:444
+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:452
+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:603
+#, c-format
+msgid "%s: Ignoring unrecognized TEXINFO_OUTPUT_FORMAT value `%s'.\n"
+msgstr ""
+
+#: makeinfo/makeinfo.c:647 makeinfo/makeinfo.c:673 makeinfo/makeinfo.c:692
+#: makeinfo/makeinfo.c:722 makeinfo/makeinfo.c:743
+#, c-format
+msgid "%s: %s arg must be numeric, not `%s'.\n"
+msgstr "%s: %s argument moet numeriek zijn, niet `%s'.\n"
+
+# Vanaf hier
+#: makeinfo/makeinfo.c:660
+#, fuzzy, c-format
+msgid "%s: could not open macro expansion output `%s'"
+msgstr "Kon uitvoer `%s' voor makro-uitbreiding niet openen"
+
+# Vanaf hier
+#: makeinfo/makeinfo.c:665
+#, fuzzy, c-format
+msgid "%s: ignoring second macro expansion output `%s'.\n"
+msgstr "Kon uitvoer `%s' voor makro-uitbreiding niet openen"
+
+#: makeinfo/makeinfo.c:707
+#, c-format
+msgid "%s: --paragraph-indent arg must be numeric/`none'/`asis', not `%s'.\n"
+msgstr ""
+"%s: argument voor --paragraph-indent moet numeriek, `none' of `asis' zijn, "
+"niet `%s'.\n"
+
+#: makeinfo/makeinfo.c:732
+#, c-format
+msgid "%s: --footnote-style arg must be `separate' or `end', not `%s'.\n"
+msgstr ""
+"%s: argument voor --footnote-style moet `separate' of `end' zijn, niet `%"
+"s'.\n"
+
+#: makeinfo/makeinfo.c:806
+#, c-format
+msgid "%s: missing file argument.\n"
+msgstr "%s: ontbrekend bestandsargument\n"
+
+#: makeinfo/makeinfo.c:997 makeinfo/makeinfo.c:3991
+#, c-format
+msgid "Multiline command %c%s used improperly"
+msgstr ""
+
+#: makeinfo/makeinfo.c:1000
+#, c-format
+msgid "Expected `%s'"
+msgstr "Verwachtte `%s'"
+
+#: makeinfo/makeinfo.c:1479
+#, c-format
+msgid "Can't create directory `%s': %s"
+msgstr ""
+
+#: makeinfo/makeinfo.c:1525
+#, c-format
+msgid "No `%s' found in `%s'"
+msgstr "Geen `%s' gevonden in `%s'"
+
+#: makeinfo/makeinfo.c:1605
+#, c-format
+msgid "%s: Skipping macro expansion to stdout as Info output is going there.\n"
+msgstr ""
+"%s: Makro uitbreiding naar de standaard uitvoer overgeslagen, want de "
+"uitvoer\n"
+"van Info gaat daar al heen.\n"
+
+#: makeinfo/makeinfo.c:1638
+#, c-format
+msgid "Making %s file `%s' from `%s'.\n"
+msgstr "Bezig met het maken van een %s-bestand `%s' van `%s'.\n"
+
+#: makeinfo/makeinfo.c:1673
+#, fuzzy, c-format
+msgid "This is %s, produced by makeinfo version %s from %s.\n"
+msgstr "Dit is Info bestand %s, gemaakt door Makeinfo versie %d.%d"
+
+#: makeinfo/makeinfo.c:1709
+#, c-format
+msgid ""
+"%s: Removing macro output file `%s' due to errors; use --force to preserve.\n"
+msgstr ""
+"%s: makro uitvoer bestand `%s' weggehaald wegens fouten; gebruik --force om "
+"te bewaren.\n"
+
+#: makeinfo/makeinfo.c:1773
+#, c-format
+msgid "%s: Removing output file `%s' due to errors; use --force to preserve.\n"
+msgstr ""
+"%s: uitvoer bestand `%s' weggehaald wegens fouten; gebruik --force om te "
+"bewaren.\n"
+
+#: makeinfo/makeinfo.c:2034
+#, c-format
+msgid "Unknown command `%s'"
+msgstr "Onbekend commando `%s'"
+
+#: makeinfo/makeinfo.c:2056
+#, fuzzy, c-format
+msgid "Use braces to give a command as an argument to @%s"
+msgstr "commandoregel-argument `%s' te veel"
+
+#: makeinfo/makeinfo.c:2314
+#, fuzzy, c-format
+msgid "%c%s expected braces"
+msgstr "%c%s verwachtte `{...}'"
+
+#: makeinfo/makeinfo.c:2327
+msgid "Unmatched }"
+msgstr "Niet-overeenkomende }"
+
+#: makeinfo/makeinfo.c:2375
+msgid "NO_NAME!"
+msgstr "GEEN_NAAM!"
+
+#: makeinfo/makeinfo.c:2396
+#, c-format
+msgid "%c%s missing close brace"
+msgstr "%c%s ontbrekende afsluitende accolade"
+
+#: makeinfo/makeinfo.c:3309
+#, fuzzy, c-format
+msgid "@image file `%s' (for HTML) not readable: %s"
+msgstr "@image bestand `%s' onleesbaar: %s"
+
+#: makeinfo/makeinfo.c:3315
+#, fuzzy, c-format
+msgid "No such file `%s'"
+msgstr "Geen `%s' gevonden in `%s'"
+
+#: makeinfo/makeinfo.c:3447
+#, fuzzy, c-format
+msgid "@image file `%s' (for text) unreadable: %s"
+msgstr "@image bestand `%s' onleesbaar: %s"
+
+#: makeinfo/makeinfo.c:3456
+msgid "@image missing filename argument"
+msgstr "ontbrekend bestandsnaam argument voor @image"
+
+#: makeinfo/makeinfo.c:3675
+#, c-format
+msgid "undefined flag: %s"
+msgstr ""
+
+#: makeinfo/makeinfo.c:3676
+#, fuzzy, c-format
+msgid "{No value for `%s'}"
+msgstr "{Geen waarde voor \"%s\"}"
+
+#: makeinfo/makeinfo.c:3728
+#, c-format
+msgid "%c%s requires a name"
+msgstr "%c%s vereist een naam"
+
+#: makeinfo/makeinfo.c:3834
+#, c-format
+msgid "Reached eof before matching @end %s"
+msgstr "Kwam bestandseinde tegen voor een overeenkomende @end %s"
+
+#: makeinfo/makeinfo.c:4082
+#, c-format
+msgid "`%.40s...' is too long for expansion; not expanded"
+msgstr ""
+
+#: makeinfo/multi.c:116
+#, fuzzy
+msgid "Missing } in @multitable template"
+msgstr "Ontbrekende `}' in het argument voor %cdef"
+
+#: makeinfo/multi.c:254
+#, c-format
+msgid "ignoring stray text `%s' after @multitable"
+msgstr "onbeheerde tekst `%s' na @multitable genegeerd"
+
+#: makeinfo/multi.c:393
+#, c-format
+msgid "Too many columns in multitable item (max %d)"
+msgstr "Te veel kolommen in `multitable' item (maximaal %d)"
+
+#: makeinfo/multi.c:555
+#, fuzzy, c-format
+msgid "[unexpected] cannot select column #%d in multitable"
+msgstr "Kan kolom #%d niet selecteren in `multitabel'"
+
+#: makeinfo/multi.c:584
+msgid "ignoring @tab outside of multitable"
+msgstr "@tab buiten een `multitable' genegeerd"
+
+#: makeinfo/multi.c:632
+#, c-format
+msgid "** Multicolumn output from last row:\n"
+msgstr "** Multikolom uitvoer van laatste regel:\n"
+
+#: makeinfo/multi.c:635
+#, c-format
+msgid "* column #%d: output = %s\n"
+msgstr "* kolom #%d: uitvoer = %s\n"
+
+#: makeinfo/node.c:280
+#, fuzzy, c-format
+msgid "Node `%s' previously defined at line %d"
+msgstr "makro `%s' al eerder gedefinieerd"
+
+#: makeinfo/node.c:648
+#, c-format
+msgid "Formatting node %s...\n"
+msgstr "Pagina %s wordt geformatteerd...\n"
+
+#: makeinfo/node.c:716
+#, fuzzy, c-format
+msgid "Node `%s' requires a sectioning command (e.g., %c%s)"
+msgstr "Pagina `%s' vereist een sectiecommando (bijv. %c%s)"
+
+#: makeinfo/node.c:879
+#, c-format
+msgid "No node name specified for `%c%s' command"
+msgstr ""
+
+#: makeinfo/node.c:920 makeinfo/node.c:1151
+#, c-format
+msgid "Anchor `%s' and node `%s' map to the same file name"
+msgstr ""
+
+#: makeinfo/node.c:923
+msgid "This @anchor command ignored; references to it will not work"
+msgstr ""
+
+#: makeinfo/node.c:925 makeinfo/node.c:1154
+msgid "Rename this anchor or use the `--no-split' option"
+msgstr ""
+
+#: makeinfo/node.c:955
+#, c-format
+msgid "Unexpected string at end of split-HTML file `%s'"
+msgstr ""
+
+#: makeinfo/node.c:991
+#, fuzzy
+msgid "Next:"
+msgstr "Volgende"
+
+#: makeinfo/node.c:1007
+#, fuzzy
+msgid "Previous:"
+msgstr "Vorige"
+
+#: makeinfo/node.c:1021
+#, fuzzy
+msgid "Up:"
+msgstr "Omhoog"
+
+#: makeinfo/node.c:1148
+#, c-format
+msgid "Anchors `%s' and `%s' map to the same file name"
+msgstr ""
+
+#: makeinfo/node.c:1153
+msgid "@anchor command ignored; references to it will not work"
+msgstr ""
+
+#: makeinfo/node.c:1347
+#, fuzzy, c-format
+msgid "%s reference to nonexistent node `%s' (perhaps incorrect sectioning?)"
+msgstr "%s verwijst naar niet-bestaande pagina `%s'"
+
+#: makeinfo/node.c:1363
+#, fuzzy
+msgid "Menu"
+msgstr "* Menu:\n"
+
+#: makeinfo/node.c:1365
+msgid "Cross"
+msgstr ""
+
+# Deze zes meldingen:
+# next, prev en up niet vertalen, dit is wat er in de broncode staat.
+# Het is duidelijker indien onvertaald.
+#: makeinfo/node.c:1447
+#, fuzzy, c-format
+msgid "Next field of node `%s' not pointed to (perhaps incorrect sectioning?)"
+msgstr "Het `next'-veld van pagina `%s' wijst niet terug op"
+
+#: makeinfo/node.c:1450
+#, fuzzy, c-format
+msgid "This node (%s) has the bad Prev"
+msgstr "Deze node (`%s') is degene met het foute `next'-veld"
+
+#: makeinfo/node.c:1462
+#, fuzzy
+msgid "Prev"
+msgstr "Vorige"
+
+#: makeinfo/node.c:1505
+#, fuzzy, c-format
+msgid "Prev field of node `%s' not pointed to"
+msgstr "Het `prev'-veld van node (`%s') wijst niet terug op"
+
+#: makeinfo/node.c:1509
+#, fuzzy, c-format
+msgid "This node (%s) has the bad Next"
+msgstr "Deze node (`%s') is degene met het foute `next'-veld"
+
+#: makeinfo/node.c:1521
+#, c-format
+msgid "`%s' has no Up field (perhaps incorrect sectioning?)"
+msgstr ""
+
+#: makeinfo/node.c:1524
+#, fuzzy
+msgid "Up"
+msgstr "Omhoog"
+
+#: makeinfo/node.c:1590
+#, c-format
+msgid "Node `%s' lacks menu item for `%s' despite being its Up target"
+msgstr ""
+
+# Eigenlijk zouden hier de %s en de %d omgedraaid moeten worden:
+# `Er wordt %d keer naar %s verwezen'
+#: makeinfo/node.c:1619
+#, c-format
+msgid "node `%s' has been referenced %d times"
+msgstr "er wordt naar pagina `%s' %d keer verwezen"
+
+#: makeinfo/node.c:1633
+#, c-format
+msgid "unreferenced node `%s'"
+msgstr "naar pagina `%s' wordt niet verwezen"
+
+#: makeinfo/node.c:1723
+#, c-format
+msgid "Removing %s\n"
+msgstr ""
+
+#: makeinfo/node.c:1727
+#, fuzzy, c-format
+msgid "Can't remove file `%s': %s"
+msgstr "Kan uitvoerbestand \"%s\" niet vinden."
+
+#: 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:562
+#, c-format
+msgid "Internal error (search_sectioning) \"%s\"!"
+msgstr ""
+
+#: makeinfo/sectioning.c:623
+#, 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:639
+#, c-format
+msgid "Node with %ctop as a section already exists"
+msgstr "Pagina met %ctop als sectie bestaat al"
+
+#: makeinfo/sectioning.c:647
+#, c-format
+msgid "Here is the %ctop node"
+msgstr "Hier is de %ctop pagina"
+
+#: makeinfo/sectioning.c:663
+#, c-format
+msgid "%ctop used before %cnode, defaulting to %s"
+msgstr "%ctop wordt voor %cnode gebruikt, neem standaard %s aan"
+
+#: makeinfo/toc.c:197 makeinfo/toc.c:271 makeinfo/toc.c:273
+msgid "Table of Contents"
+msgstr ""
+
+#: makeinfo/toc.c:304 makeinfo/toc.c:337 makeinfo/toc.c:339
+msgid "Short Contents"
+msgstr ""
+
+#: makeinfo/xml.c:1605
+#, c-format
+msgid "@image file `%s' unreadable: %s"
+msgstr "@image bestand `%s' onleesbaar: %s"
+
+#: makeinfo/xml.c:2097
+msgid ""
+"@headitem as the last item of @multitable produces invalid Docbook documents"
+msgstr ""
+
+#: util/install-info.c:154
+#, c-format
+msgid "%s: warning: "
+msgstr "%s: waarschuwing: "
+
+#: util/install-info.c:203
+#, c-format
+msgid " for %s"
+msgstr " voor %s"
+
+#: util/install-info.c:426
+#, c-format
+msgid "\tTry `%s --help' for a complete list of options.\n"
+msgstr "\tProbeer `%s --help' voor een volledige lijst van opties.\n"
+
+#: util/install-info.c:434
+#, fuzzy, c-format
+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 [OPTIE]... [INFO-BESTAND [INHOUD-BESTAND]]\n"
+"\n"
+"Installeer INFO-BESTAND in het Info inhoudbestand INHOUD-BESTAND.\n"
+"\n"
+"Opties:\n"
+"--delete Verwijder bestaande ingangen in INFO-BESTAND;\n"
+" voeg geen nieuwe ingangen toe.\n"
+"--dir-file=NAAM Geef bestandsnaam van het Info inhoudbestand.\n"
+" Dit is equivalent aan het argument INDEX-BESTAND.\n"
+"--entry=TEKST Voeg TEKST in als een Info inhoudsingang.\n"
+" TEKST moet het uiterlijk hebben van een Info menukeuze\n"
+" regel met nul of meer extra regels beginnend met een\n"
+" leeg teken. Als je meer dan een ingang geeft, worden ze\n"
+" allemaal toegevoegd. Als je geen ingangen geeft, worden\n"
+" ze uit de informatie uit het Info bestand zelf "
+"opgemaakt.\n"
+"--help Geef deze hulp en beëindig.\n"
+"--info-file=BEST Geef een Info bestand om in de inhoud in op te nemen.\n"
+" Dit is gelijkwaardig aan het argument INFO-BESTAND.\n"
+"--info-dir=MAP Zelfde als --dir-file=MAP/dir.\n"
+"--item=TEKST Zelfde als --entry TEKST.\n"
+" Een Info inhoudsingang is eigenlijk een menukeuze.\n"
+"--quiet Onderdruk waarschuwingen.\n"
+"--remove Zelfde als --delete.\n"
+"--section=SEC Zet deze ingangen in sectie SEC van de index.\n"
+" Als je meer dan een sectie geeft, worden alle ingangen\n"
+" aan alle secties toegevoegd.\n"
+" Als je geen ingangen geeft, worden ze uit de informatie\n"
+" uit het Info bestand zelf opgemaakt.\n"
+"--version Geef versie-informatie en beëindig.\n"
+"\n"
+"Meld fouten in het programma aan bug-texinfo@gno.org;\n"
+"meld onjuistheden in de vertaling aan nl@li.org.\n"
+
+#: util/install-info.c:488
+#, 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 ""
+"Dit is het bestand .../info/dir, dat de bovenste pagina van de Info\n"
+"structuur bevat, genaamd (dir)Top. De eerste keer dat je Info start,\n"
+"begin je deze pagina te lezen.\n"
+"\n"
+"Bestand: dir Pagina: Top Dit is de bovenste pagina van de INFO "
+"structuur\n"
+"\n"
+" Deze (Inhoud) pagina geeft een menu van hoofdonderwerpen.\n"
+" \"q\" beëindigt, \"?\" geeft een lijst met allen Info commando's, \"d\"\n"
+" brengt je hier terug, \"h\" geeft een inleiding voor de eerste keer,\n"
+" \"mEmacs<Return>\" gaat naar de Emacs pagina's, etc.\n"
+"\n"
+" Binnen Emacs kun je met muisknop 2 op een item of verwijzing klikken\n"
+" om er heen te gaan.\n"
+"\n"
+"* Menu:\n"
+
+#: util/install-info.c:513
+#, c-format
+msgid "%s: could not read (%s) and could not create (%s)\n"
+msgstr "%s: niet leesbaar (%s) en het kon ook niet aanmaken (%s)\n"
+
+#: util/install-info.c:600
+#, c-format
+msgid "%s: empty file"
+msgstr ""
+
+#: util/install-info.c:913 util/install-info.c:953
+msgid "START-INFO-DIR-ENTRY without matching END-INFO-DIR-ENTRY"
+msgstr "START-INFO-DIR-ENTRY zonder overeenkomende END-INFO-DIR-ENTRY"
+
+#: util/install-info.c:948
+msgid "END-INFO-DIR-ENTRY without matching START-INFO-DIR-ENTRY"
+msgstr "END-INFO-DIR-ENTRY zonder overeenkomende START-INFO-DIR-ENTRY"
+
+#: util/install-info.c:1191 util/install-info.c:1201
+#, c-format
+msgid "%s: already have dir file: %s\n"
+msgstr ""
+
+#: util/install-info.c:1236
+#, c-format
+msgid "%s: Specify the Info file only once.\n"
+msgstr "%s: Geef het Info bestand slechts een keer.\n"
+
+#: util/install-info.c:1284
+#, c-format
+msgid "excess command line argument `%s'"
+msgstr "commandoregel-argument `%s' te veel"
+
+#: util/install-info.c:1288
+msgid "No input file specified; try --help for more information."
+msgstr "Geen invoerbestand gegeven; probeer --help voor meer informatie."
+
+#: util/install-info.c:1291
+msgid "No dir file specified; try --help for more information."
+msgstr "Geen inhoudbestand gegeven; probeer --help voor meer informatie."
+
+#: util/install-info.c:1313
+#, c-format
+msgid "no info dir entry in `%s'"
+msgstr "geen info inhoudsingang in `%s'"
+
+#: util/install-info.c:1426
+#, c-format
+msgid "menu item `%s' already exists, for file `%s'"
+msgstr "menukeuze `%s' bestaat al, voor bestand `%s'"
+
+#: util/install-info.c:1449
+#, c-format
+msgid "no entries found for `%s'; nothing deleted"
+msgstr "geen ingangen voor `%s' gevonden; niets verwijderd"
+
+#: util/texindex.c:252
+msgid "display this help and exit"
+msgstr "geef deze hulp en beëindig"
+
+#: util/texindex.c:254
+msgid "keep temporary files around after processing"
+msgstr "behoud tijdelijke bestanden na verwerking"
+
+#: util/texindex.c:256
+msgid "do not keep temporary files around after processing (default)"
+msgstr "behoud de tijdelijke bestanden na verwerking niet (standaard)"
+
+#: util/texindex.c:258
+msgid "send output to FILE"
+msgstr "stuur uitvoor naar BESTAND"
+
+#: util/texindex.c:260
+msgid "display version information and exit"
+msgstr "geef versie informatie en beëindig"
+
+#: util/texindex.c:270
+#, c-format
+msgid "Usage: %s [OPTION]... FILE...\n"
+msgstr "Aanroep: %s [OPTIE]... BESTAND...\n"
+
+#: util/texindex.c:271
+#, c-format
+msgid "Generate a sorted index for each TeX output FILE.\n"
+msgstr "Maak een gesorteerde index voor elk TeX uitvoer BESTAND.\n"
+
+#: util/texindex.c:274
+#, fuzzy, c-format
+msgid "Usually FILE... is specified as `foo.%c%c' for a document `foo.texi'.\n"
+msgstr ""
+"Normaal gesproken is BESTAND... `foo.??' voor een dokument `foo.texi'.\n"
+
+#: util/texindex.c:276
+#, c-format
+msgid ""
+"\n"
+"Options:\n"
+msgstr ""
+"\n"
+"Opties:\n"
+
+#: util/texindex.c:876 util/texindex.c:910 util/texindex.c:983
+#: util/texindex.c:1011
+#, c-format
+msgid "%s: not a texinfo index file"
+msgstr "%s: geen texinfo inhoudbestand"
+
+#: util/texindex.c:968
+#, c-format
+msgid "failure reopening %s"
+msgstr "fout bij het heropenen van %s"
+
+#: util/texindex.c:1218
+#, c-format
+msgid "No page number in %s"
+msgstr ""
+
+# FIXME: secondary
+#: util/texindex.c:1291
+#, c-format
+msgid "entry %s follows an entry with a secondary name"
+msgstr "ingang %s volgt op een ingang met een alternatieve naam"
+
+#~ msgid "%s: Specify the Info directory only once.\n"
+#~ msgstr "%s: Geef de Info inhoud slechts een keer.\n"
+
+#~ msgid "\"\" is invalid"
+#~ msgstr "\"\" is ongeldig"
+
+#~ msgid "Cannot specify more than one macro expansion output"
+#~ msgstr "Je kunt niet meer dan een uitvoer voor makro-uitbreiding geven"
+
+#~ msgid "`.' or `,' must follow cross reference, not %c"
+#~ msgstr "`.' of `,' moeten op een verwijzing volgen, niet %c"
+
+#, fuzzy
+#~ msgid "Node:"
+#~ msgstr "Volgende"
+
+#~ msgid "virtual memory exhausted"
+#~ msgstr "virtuele geheugen vol"
+
+#~ msgid "%s; for file `%s'.\n"
+#~ msgstr "%s; voor bestand `%s'.\n"
+
+#, fuzzy
+#~ msgid "`%s' has no Up field"
+#~ msgstr "Node `%s' heeft geen `up'-veld"
+
+#, fuzzy
+#~ msgid "\\%-10[scroll-backward] Scroll backward 1 line.\n"
+#~ msgstr "Schuif terug in dit venster"
+
+#, fuzzy
+#~ msgid "----------------------\n"
+#~ msgstr ""
+#~ "---------- Voetnoten ----------\n"
+#~ "\n"
+
+#, fuzzy
+#~ msgid "---------------\n"
+#~ msgstr ""
+#~ "---------- Voetnoten ----------\n"
+#~ "\n"
+
+# tot hier (half af)
+#, 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 ""
+#~ "Aanroep: %s [OPTIE]... TEXINFO-BESTAND...\n"
+#~ "\n"
+#~ "Vertaal Texinfo brondocumentatie naar een formaat dat geschikt is om "
+#~ "gelezen\n"
+#~ "te worden met GNU Info.\n"
+#~ "\n"
+#~ "Opties:\n"
+#~ "-D VAR definieer een variabele, zoals met @set.\n"
+#~ "-E MACRO-OFILE behandel alleen makro's, schrijf texinfo "
+#~ "broncode.\n"
+#~ "-I MAP voeg MAP toe achter het @include mappenzoekpad.\n"
+#~ "-P MAP voeg MAP toe voor het @include mappenzoekpad.\n"
+#~ "-U VAR ondefinieer een variabele, zoals met @clear.\n"
+#~ "--error-limit NUM beëindig na een NUM aantal fouten (standaard %d).\n"
+#~ "--fill-column POS breek regels af op positie POS (standaard %d).\n"
+#~ "--footnote-style STIJL schrijf voetnoten volgens STIJL:\n"
+#~ " `separate' om voetnoten in een eigen pagina te "
+#~ "plaatsen,\n"
+#~ " `end' om voetnoten aan het einde van de pagina "
+#~ "te plaatsen\n"
+#~ " waarin ze gedefinieerd zijn (standaard).\n"
+#~ "--force bewaar de uitvoer ook bij fouten.\n"
+#~ "--help laat deze hulp zien en beëindig.\n"
+#~ "--no-validate onderdruk validatie van referenties.\n"
+#~ "--no-warn onderdruk waarschuwingen (maar fouten niet).\n"
+#~ "--no-split onderdruk het splitsen van grote bestanden.\n"
+#~ "--no-headers onderdruk paginascheidingen en Pagina: Foo "
+#~ "koppen.\n"
+#~ "--output BEST, -o BEST schrijf naar BEST, en negeer een @setfilename.\n"
+#~ "--paragraph-indent VAL spring alinea's in met VAL spaties (standaard %"
+#~ "d).\n"
+#~ " spring niet in indien VAL `none' is; behoud "
+#~ "bestaande\n"
+#~ " inspringing indien VAL `asis' is.\n"
+#~ "--reference-limit NUM klaag over hoogstens NUM verwijzingen (standaard %"
+#~ "d).\n"
+#~ "--verbose meld wat gedaan wordt.\n"
+#~ "--version geef versie-informatie en beëindig.\n"
+#~ "\n"
+#~ "Meld fouten in het programma aan bug-texinfo@gnu.org;\n"
+#~ "meld onjuistheden in de vertaling aan nl@li.org.\n"
+
+# tot hier (half af)
+#, 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 ""
+#~ "Aanroep: %s [OPTIE]... TEXINFO-BESTAND...\n"
+#~ "\n"
+#~ "Vertaal Texinfo brondocumentatie naar een formaat dat geschikt is om "
+#~ "gelezen\n"
+#~ "te worden met GNU Info.\n"
+#~ "\n"
+#~ "Opties:\n"
+#~ "-D VAR definieer een variabele, zoals met @set.\n"
+#~ "-E MACRO-OFILE behandel alleen makro's, schrijf texinfo "
+#~ "broncode.\n"
+#~ "-I MAP voeg MAP toe achter het @include mappenzoekpad.\n"
+#~ "-P MAP voeg MAP toe voor het @include mappenzoekpad.\n"
+#~ "-U VAR ondefinieer een variabele, zoals met @clear.\n"
+#~ "--error-limit NUM beëindig na een NUM aantal fouten (standaard %d).\n"
+#~ "--fill-column POS breek regels af op positie POS (standaard %d).\n"
+#~ "--footnote-style STIJL schrijf voetnoten volgens STIJL:\n"
+#~ " `separate' om voetnoten in een eigen pagina te "
+#~ "plaatsen,\n"
+#~ " `end' om voetnoten aan het einde van de pagina "
+#~ "te plaatsen\n"
+#~ " waarin ze gedefinieerd zijn (standaard).\n"
+#~ "--force bewaar de uitvoer ook bij fouten.\n"
+#~ "--help laat deze hulp zien en beëindig.\n"
+#~ "--no-validate onderdruk validatie van referenties.\n"
+#~ "--no-warn onderdruk waarschuwingen (maar fouten niet).\n"
+#~ "--no-split onderdruk het splitsen van grote bestanden.\n"
+#~ "--no-headers onderdruk paginascheidingen en Pagina: Foo "
+#~ "koppen.\n"
+#~ "--output BEST, -o BEST schrijf naar BEST, en negeer een @setfilename.\n"
+#~ "--paragraph-indent VAL spring alinea's in met VAL spaties (standaard %"
+#~ "d).\n"
+#~ " spring niet in indien VAL `none' is; behoud "
+#~ "bestaande\n"
+#~ " inspringing indien VAL `asis' is.\n"
+#~ "--reference-limit NUM klaag over hoogstens NUM verwijzingen (standaard %"
+#~ "d).\n"
+#~ "--verbose meld wat gedaan wordt.\n"
+#~ "--version geef versie-informatie en beëindig.\n"
+#~ "\n"
+#~ "Meld fouten in het programma aan bug-texinfo@gnu.org;\n"
+#~ "meld onjuistheden in de vertaling aan nl@li.org.\n"
+
+#~ msgid "The `%c%s' command is meaningless within a `@%s' block"
+#~ msgstr "Het `%c%s' commando is zinloos in een `@%s' blok"
+
+#~ msgid "Virtual memory exhausted in %s ()! Needed %d bytes."
+#~ msgstr "Virtueel geheugen vol in %s ()! Had %d bytes nodig."
+
+#~ msgid "How did @%s end up in cm_special_char?\n"
+#~ msgstr "Hoe kwam @%s in cm_special_char terecht?\n"
+
+#~ msgid "multitable item not in active multitable"
+#~ msgstr "`multitable' item niet in een aktieve `multitable'"
+
+#, fuzzy
+#~ msgid "Up field for `%s' is `%s', but `%s' lacks menu item for `%s'"
+#~ msgstr ""
+#~ "`%s' heeft `%s' als `up'-veld, maar `%s' heeft geen menukeuze voor `%s'"
+
+#~ msgid " times"
+#~ msgstr " keer"
+
+#~ msgid "%d times"
+#~ msgstr "%d keer"
+
+#~ msgid "Top"
+#~ msgstr "Top"
+
+#~ msgid "Writing node \"(%s)%s\"..."
+#~ msgstr "Bezig met schrijven van pagina \"(%s)%s\"..."
+
+#~ msgid "Printing node \"(%s)%s\"..."
+#~ msgstr "Bezig met afdrukken van pagina \"(%s)%s\"..."
+
+#~ msgid " from the input file %s.\n"
+#~ msgstr " uit het invoerbestand %s.\n"
+
+#~ msgid "%c%s expects a single character as an argument"
+#~ msgstr "%c%s verwacht één enkel teken als argument"
+
+#~ msgid "Node `%s' multiply defined (line %d is first definition at)"
+#~ msgstr ""
+#~ "Pagina `%s' meerdere keren gedefinieerd (de eerste definitie is op regel %"
+#~ "d)"
+
+#~ msgid "This node (`%s') is the one with the bad `Prev'"
+#~ msgstr "Deze node (`%s') is degene met het foute `prev'-veld"
+
+#~ msgid "creating `Top' node"
+#~ msgstr "`Top' pagina wordt aangemaakt"
+
+#~ msgid ""
+#~ "* Menu:\n"
+#~ "\n"
+#~ msgstr ""
+#~ "* Menu:\n"
+#~ "\n"
+
+#~ msgid ""
+#~ "\n"
+#~ "Email bug reports to bug-texinfo@gnu.org."
+#~ msgstr ""
+#~ "\n"
+#~ "Meld fouten in het programma aan bug-texinfo@gnu.org;\n"
+#~ "meld onjuistheden in de vertaling aan nl@li.org."
diff --git a/macros/texinfo/contrib/texinfo-hu/texinfo/po/no.gmo b/macros/texinfo/contrib/texinfo-hu/texinfo/po/no.gmo
new file mode 100644
index 0000000000..af281d5266
--- /dev/null
+++ b/macros/texinfo/contrib/texinfo-hu/texinfo/po/no.gmo
Binary files differ
diff --git a/macros/texinfo/contrib/texinfo-hu/texinfo/po/no.po b/macros/texinfo/contrib/texinfo-hu/texinfo/po/no.po
new file mode 100644
index 0000000000..c117a14ea9
--- /dev/null
+++ b/macros/texinfo/contrib/texinfo-hu/texinfo/po/no.po
@@ -0,0 +1,3123 @@
+# Norwegian translation of messages for Texinfo 4.6 (bokmål dialect).
+# Copyright (C) 1999 Free Software Foundation, Inc.
+# Trond Endrestøl <trond@ramstind.gtf.ol.no>, 1998.
+#
+msgid ""
+msgstr ""
+"Project-Id-Version: Texinfo 4.6\n"
+"Report-Msgid-Bugs-To: bug-texinfo@gnu.org\n"
+"POT-Creation-Date: 2004-12-21 16:20-0800\n"
+"PO-Revision-Date: 2003-07-14 13:13+02:00\n"
+"Last-Translator: Trond Endrestøl <trond@ramstind.gtf.ol.no>\n"
+"Language-Team: Norwegian-bokmål <no@li.org>\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=ISO-8859-1\n"
+"Content-Transfer-Encoding: 8bit\n"
+
+#: info/echo-area.c:284 info/session.c:689
+msgid "Move forward a character"
+msgstr "Flytte forover et tegn"
+
+#: info/echo-area.c:296 info/session.c:705
+msgid "Move backward a character"
+msgstr "Flytte bakover et tegn"
+
+#: info/echo-area.c:308
+msgid "Move to the start of this line"
+msgstr "Flytte til starten av denne linjen"
+
+#: info/echo-area.c:313
+msgid "Move to the end of this line"
+msgstr "Flytte til slutten av denne linjen"
+
+#: info/echo-area.c:321 info/session.c:723
+msgid "Move forward a word"
+msgstr "Flytte forover et ord"
+
+#: info/echo-area.c:361 info/session.c:772
+msgid "Move backward a word"
+msgstr "Flytte tilbake et ord"
+
+#: info/echo-area.c:401
+msgid "Delete the character under the cursor"
+msgstr "Slette tegnet under markøren"
+
+#: info/echo-area.c:431
+msgid "Delete the character behind the cursor"
+msgstr "Slette tegnet bak markøren"
+
+#: info/echo-area.c:452
+msgid "Cancel or quit operation"
+msgstr "Avbryte eller avslutte operasjon"
+
+#: info/echo-area.c:467
+msgid "Accept (or force completion of) this line"
+msgstr "Godta (eller tvinge fullføring av) denne linjen"
+
+#: info/echo-area.c:472
+msgid "Insert next character verbatim"
+msgstr "Sette inn neste tegn ordrett"
+
+#: info/echo-area.c:480
+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:653
+msgid "Kill the word preceding the cursor"
+msgstr "Slette ordet før markøren"
+
+#: info/echo-area.c:868 info/echo-area.c:924
+msgid "No completions"
+msgstr "Ingen fullføringer"
+
+#: info/echo-area.c:870
+msgid "Not complete"
+msgstr "Ikke fullstendig"
+
+#: info/echo-area.c:911
+msgid "List possible completions"
+msgstr "Liste mulige fullføringer"
+
+#: info/echo-area.c:928
+msgid "Sole completion"
+msgstr "Eneste fullføring"
+
+#: info/echo-area.c:937
+msgid "One completion:\n"
+msgstr "En fullføring:\n"
+
+#: info/echo-area.c:938
+#, c-format
+msgid "%d completions:\n"
+msgstr "%d fullføringer:\n"
+
+#: info/echo-area.c:1085
+msgid "Insert completion"
+msgstr "Sett inn fullføring"
+
+#: info/echo-area.c:1220
+msgid "Building completions..."
+msgstr "Bygger fullføringer..."
+
+#: info/echo-area.c:1340
+msgid "Scroll the completions window"
+msgstr "Rulle fullføringsvinduet"
+
+#: info/footnotes.c:213
+msgid "Footnotes could not be displayed"
+msgstr "Fotnoter kunne ikke vises"
+
+#: info/footnotes.c:239
+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:172
+msgid "Look up a string in the index for this file"
+msgstr "Lete opp en streng i indeksen til denne filen"
+
+#: info/indices.c:199
+msgid "Finding index entries..."
+msgstr "Finner indeksinnslag..."
+
+#: info/indices.c:207
+msgid "No indices found."
+msgstr "Ingen indekser funnet."
+
+#: info/indices.c:217
+msgid "Index entry: "
+msgstr "Indeksinnslag: "
+
+#: info/indices.c:325
+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:335
+msgid "No previous index search string."
+msgstr "Ingen tidligere indekssøkestrenger."
+
+#: info/indices.c:342
+msgid "No index entries."
+msgstr "Ingen indeksinnslag."
+
+#: info/indices.c:375
+#, fuzzy, c-format
+msgid "No %sindex entries containing `%s'."
+msgstr "Ingen %sindeksinnslag inneholdende «%s»."
+
+#: info/indices.c:376
+msgid "more "
+msgstr "mer "
+
+#: info/indices.c:386
+msgid "CAN'T SEE THIS"
+msgstr "KAN IKKE SE DETTE"
+
+#: info/indices.c:422
+#, fuzzy, 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:541
+#, fuzzy, c-format
+msgid "Scanning indices of `%s'..."
+msgstr "Sjekker indekser i «%s»..."
+
+#: info/indices.c:596
+#, fuzzy, 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:622
+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:626
+msgid "Index apropos: "
+msgstr "Indeksapropos: "
+
+#: info/indices.c:654
+#, fuzzy, 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:295 makeinfo/makeinfo.c:766 util/install-info.c:1266
+#: util/texindex.c:343
+#, fuzzy, c-format
+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"
+"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"
+
+#: info/info.c:498
+#, c-format
+msgid "no index entries found for `%s'\n"
+msgstr "ingen innslag funnet for «%s»\n"
+
+#: info/info.c:590
+msgid " -b, --speech-friendly be friendly to speech synthesizers.\n"
+msgstr ""
+" -b, --speech-friendly vær vennlig ovenfor talesyntetisatorer.\n"
+
+#: info/info.c:597
+#, fuzzy, c-format
+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 -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"
+"\n"
+"Send bugrapport til bug-texinfo@gnu.org,\n"
+"generelle spørsmål og diskusjoner til help-texinfo@gnu.org.\n"
+
+#: info/info.c:635 info/infokey.c:918 makeinfo/makeinfo.c:465
+#: util/install-info.c:466 util/texindex.c:292
+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:669
+#, c-format
+msgid "Cannot find node `%s'."
+msgstr "Kan ikke finne noden «%s»."
+
+#: info/info.c:670
+#, c-format
+msgid "Cannot find node `(%s)%s'."
+msgstr "Kan ikke finne noden «(%s)%s»."
+
+#: info/info.c:671
+msgid "Cannot find a window!"
+msgstr "Kan ikke finne et vindu!"
+
+#: info/info.c:672
+msgid "Point doesn't appear within this window's node!"
+msgstr "Markøren vises ikke innen dette vinduets node!"
+
+#: info/info.c:673
+msgid "Cannot delete the last window."
+msgstr "Kan ikke slette det siste vinduet."
+
+#: info/info.c:674
+msgid "No menu in this node."
+msgstr "Ingen meny i denne noden."
+
+#: info/info.c:675
+msgid "No footnotes in this node."
+msgstr "Ingen fotnoter i denne noden."
+
+#: info/info.c:676
+msgid "No cross references in this node."
+msgstr "Ingen kryssreferanser i denne noden."
+
+#: info/info.c:677
+#, c-format
+msgid "No `%s' pointer for this node."
+msgstr "Ingen «%s»-peker for denne noden."
+
+#: info/info.c:678
+#, c-format
+msgid "Unknown Info command `%c'; try `?' for help."
+msgstr "Ukjent Info-kommando «%c»; prøv «?» for hjelp."
+
+#: info/info.c:679
+#, 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:680
+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:681
+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:682
+msgid "Only one window."
+msgstr "Bare et vindu."
+
+#: info/info.c:683
+msgid "Resulting window would be too small."
+msgstr "Resulterende vindu ville blitt for lite."
+
+#: info/info.c:684
+msgid "Not enough room for a help window, please delete a window."
+msgstr "Ikke nok plass for et hjelpevindu, vennligst slett et vindu."
+
+# The next translation should match the length of this one
+#: info/infodoc.c:46 info/infodoc.c:95
+msgid ""
+"Basic Commands in Info Windows\n"
+"******************************\n"
+msgstr ""
+"Grunnleggende kommandoer i infovinduer\n"
+"**************************************\n"
+
+#: info/infodoc.c:49
+msgid "\\%-10[quit-help] Quit this help.\n"
+msgstr "\\%-10[quit-help] Avslutte denne hjelpen.\n"
+
+#: info/infodoc.c:50
+msgid "\\%-10[quit] Quit Info altogether.\n"
+msgstr "\\%-10[quit] Avslutte Info fullstendig.\n"
+
+#: info/infodoc.c:51
+msgid "\\%-10[get-info-help-node] Invoke the Info tutorial.\n"
+msgstr "\\%-10[get-info-help-node] Starte Infoopplæring.\n"
+
+# The next translation should match the length of this one
+#: info/infodoc.c:53 info/infodoc.c:102
+msgid ""
+"Selecting other nodes:\n"
+"----------------------\n"
+msgstr ""
+"Velger andre noder:\n"
+"-------------------\n"
+
+#: info/infodoc.c:55
+msgid "\\%-10[next-node] Move to the \"next\" node of this node.\n"
+msgstr "\\%-10[next-node] Flytte til neste node etter denne noden.\n"
+
+#: info/infodoc.c:56
+msgid "\\%-10[prev-node] Move to the \"previous\" node of this node.\n"
+msgstr "\\%-10[prev-node] Flytte til forrige node før denne noden.\n"
+
+#: info/infodoc.c:57
+msgid "\\%-10[up-node] Move \"up\" from this node.\n"
+msgstr "\\%-10[up-node] Flytte «opp» fra denne noden.\n"
+
+#: info/infodoc.c:58
+msgid ""
+"\\%-10[menu-item] 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:60
+msgid ""
+"\\%-10[xref-item] Follow a cross reference. Reads name of reference.\n"
+msgstr ""
+"\\%-10[history-node] Følge en kryssreferanse. Leser navnet til "
+"referansen.\n"
+
+#: info/infodoc.c:61
+msgid "\\%-10[history-node] Move 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
+msgid ""
+"\\%-10[move-to-next-xref] Skip to next hypertext link within this node.\n"
+msgstr ""
+"\\%-10[move-to-prev-xref] Flytte til neste hypertekstlenke innen denne "
+"noden.\n"
+
+#: info/infodoc.c:63
+msgid ""
+"\\%-10[move-to-prev-xref] Skip to previous hypertext link within this "
+"node.\n"
+msgstr ""
+"\\%-10[move-to-prev-xref] Flytte til neste hypertekstlenke innen denne "
+"noden.\n"
+
+#: info/infodoc.c:64
+msgid ""
+"\\%-10[select-reference-this-line] Follow the hypertext link under cursor.\n"
+msgstr "\\%-10[dir-node] Følge hypertekstlenken under markøren.\n"
+
+#: info/infodoc.c:65
+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"
+
+#: info/infodoc.c:66
+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"
+
+# The next translation should match the length of this one
+#: info/infodoc.c:68 info/infodoc.c:116
+msgid ""
+"Moving within a node:\n"
+"---------------------\n"
+msgstr ""
+"Flytte innen en node:\n"
+"---------------------\n"
+
+#: info/infodoc.c:70
+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:71
+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:72
+msgid "\\%-10[next-line] Scroll forward 1 line.\n"
+msgstr "\\%-10[next-line] Rulle forover 1 linje.\n"
+
+#: info/infodoc.c:73
+msgid "\\%-10[prev-line] Scroll backward 1 line.\n"
+msgstr "\\%-10[prev-line] Rulle bakover 1 linje.\n"
+
+#: info/infodoc.c:74
+msgid "\\%-10[scroll-forward] Scroll forward a page.\n"
+msgstr "\\%-10[scroll-forward] Rulle forover en side.\n"
+
+#: info/infodoc.c:75
+msgid "\\%-10[scroll-backward] Scroll backward a page.\n"
+msgstr "\\%-10[scroll-backward] Rulle bakover en side.\n"
+
+# The next translation should match the length of this one
+#: info/infodoc.c:77 info/infodoc.c:125
+msgid ""
+"Other commands:\n"
+"---------------\n"
+msgstr ""
+"Andre kommandoer:\n"
+"-----------------\n"
+
+#: info/infodoc.c:79
+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"
+
+#: info/infodoc.c:80
+msgid "\\%-10[last-menu-item] Pick last item in node's menu.\n"
+msgstr "\\%-10[last-menu-item] Velge det siste punktet i nodens meny.\n"
+
+#: info/infodoc.c:81
+msgid ""
+"\\%-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"
+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:83
+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"
+
+#: info/infodoc.c:85
+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"
+
+#: info/infodoc.c:87
+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"
+
+#: info/infodoc.c:98
+#, c-format
+msgid " %-10s Quit this help.\n"
+msgstr " %-10s Avslutte denne hjelpen.\n"
+
+#: info/infodoc.c:99
+#, c-format
+msgid " %-10s Quit Info altogether.\n"
+msgstr " %-10s Avslutte Info fullstendig.\n"
+
+#: info/infodoc.c:100
+#, c-format
+msgid " %-10s Invoke the Info tutorial.\n"
+msgstr " %-10s Starte Infoopplæring.\n"
+
+#: info/infodoc.c:104
+#, 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:105
+#, 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:106
+#, c-format
+msgid " %-10s Move `up' from this node.\n"
+msgstr " %-10s Flytte «opp» fra denne noden.\n"
+
+#: info/infodoc.c:107
+#, c-format
+msgid " %-10s Pick menu item specified by name.\n"
+msgstr " %-10s Velge menypunkt spesifisert ved navn.\n"
+
+#: info/infodoc.c:108
+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"
+
+#: info/infodoc.c:109
+#, 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:110
+#, 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:111
+#, 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:112
+#, c-format
+msgid " %-10s Follow the hypertext link under cursor.\n"
+msgstr " %-10s Følge hypertekstlenken under markøren.\n"
+
+#: info/infodoc.c:113
+#, 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:114
+#, 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"
+
+#: info/infodoc.c:118
+#, c-format
+msgid " %-10s Scroll forward a page.\n"
+msgstr " %-10s Rulle forover en side.\n"
+
+#: info/infodoc.c:119
+#, c-format
+msgid " %-10s Scroll backward a page.\n"
+msgstr " %-10s Rulle bakover en side.\n"
+
+#: info/infodoc.c:120
+#, c-format
+msgid " %-10s Go to the beginning of this node.\n"
+msgstr " %-10s Gå til begynnelsen av denne noden.\n"
+
+#: info/infodoc.c:121
+#, c-format
+msgid " %-10s Go to the end of this node.\n"
+msgstr " %-10s Gå til slutten av denne noden.\n"
+
+#: info/infodoc.c:122
+#, c-format
+msgid " %-10s Scroll forward 1 line.\n"
+msgstr " %-10s Rulle forover 1 linje.\n"
+
+#: info/infodoc.c:123
+#, c-format
+msgid " %-10s Scroll backward 1 line.\n"
+msgstr " %-10s Rulle bakover 1 linje.\n"
+
+#: info/infodoc.c:127
+#, 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:128
+#, c-format
+msgid " %-10s Pick last item in node's menu.\n"
+msgstr " %-10s Velge det siste punktet i nodens meny.\n"
+
+# This translation is connected to the next one
+#: info/infodoc.c:129
+#, c-format
+msgid ""
+" %-10s Search for a specified string in the index entries of this Info\n"
+msgstr " %-10s Søke etter en spesifikk streng i indeksinnslagene i denne\n"
+
+#: info/infodoc.c:130
+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"
+
+#: info/infodoc.c:131
+#, c-format
+msgid " %-10s Move to node specified by name.\n"
+msgstr " %-10s Flytte til noden spesifisert av navn.\n"
+
+#: info/infodoc.c:132
+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"
+
+#: info/infodoc.c:133
+#, c-format
+msgid " %-10s Search forward for a specified string,\n"
+msgstr ""
+" %-10s Søke forlengs gjennom denne Infofilen for en spesifikk streng,\n"
+
+#: info/infodoc.c:134 info/infodoc.c:136
+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"
+
+#: info/infodoc.c:135
+#, c-format
+msgid " %-10s Search backward for a specified string\n"
+msgstr ""
+" %-10s Søke baklengs gjennom denne Infofilen for en spesifikk streng,\n"
+
+#: info/infodoc.c:316
+msgid "The current search path is:\n"
+msgstr "Gjeldende søkesti er:\n"
+
+#: info/infodoc.c:320
+msgid ""
+"Commands available in Info windows:\n"
+"\n"
+msgstr ""
+"Kommandoer tilgjengelig i Infovinduer:\n"
+"\n"
+
+#: info/infodoc.c:324
+msgid ""
+"Commands available in the echo area:\n"
+"\n"
+msgstr ""
+"Kommandoer tilgjengelig i ekkoområdet:\n"
+"\n"
+
+#: info/infodoc.c:347
+#, 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:351
+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:375
+msgid "--- Use `\\[history-node]' or `\\[kill-node]' to exit ---\n"
+msgstr "--- Bruk «\\[history-node]» eller «\\[kill-node]» for å avslutte ---\n"
+
+#: info/infodoc.c:485
+msgid "Display help message"
+msgstr "Vise hjelpemelding"
+
+#: info/infodoc.c:503
+msgid "Visit Info node `(info)Help'"
+msgstr "Vise infonoden «(info)Help»"
+
+#: info/infodoc.c:641
+msgid "Print documentation for KEY"
+msgstr "Skrive ut dokumentasjonen for KEY"
+
+#: info/infodoc.c:653
+#, c-format
+msgid "Describe key: %s"
+msgstr "Beskriv tast: %s"
+
+#: info/infodoc.c:664
+#, c-format
+msgid "ESC %s is undefined."
+msgstr "ESC %s er udefinert."
+
+#: info/infodoc.c:680 info/infodoc.c:709
+#, c-format
+msgid "%s is undefined."
+msgstr "%s er udefinert."
+
+#: info/infodoc.c:730
+#, c-format
+msgid "%s is defined to %s."
+msgstr "%s er definert som %s."
+
+#: info/infodoc.c:1153
+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:1157
+msgid "Where is command: "
+msgstr "Hvor er kommandoen: "
+
+#: info/infodoc.c:1179
+#, c-format
+msgid "`%s' is not on any keys"
+msgstr "«%s» er ikke på noen taster"
+
+#: info/infodoc.c:1186
+#, c-format
+msgid "%s can only be invoked via %s."
+msgstr "%s kan bare bli påkallet via %s."
+
+#: info/infodoc.c:1190
+#, c-format
+msgid "%s can be invoked via %s."
+msgstr "%s kan bli påkallet via %s."
+
+#: info/infodoc.c:1195
+#, c-format
+msgid "There is no function named `%s'"
+msgstr "Det finnes ingen funksjon ved navn «%s»"
+
+#: info/infokey.c:145
+#, c-format
+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"
+"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"
+
+#: 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:1500
+#, c-format
+msgid "Ignoring invalid infokey file `%s' - too small"
+msgstr "Ignorerer ugyldig infokeyfil «%s» - for liten"
+
+#: info/infomap.c:1503
+#, c-format
+msgid "Ignoring invalid infokey file `%s' - too big"
+msgstr "Ignorerer ugyldig infokeyfil «%s» - for stor"
+
+#: info/infomap.c:1516
+#, c-format
+msgid "Error reading infokey file `%s' - short read"
+msgstr "Feil ved lesing av infokeyfil «%s» - for kort"
+
+#: info/infomap.c:1535
+#, 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:1544
+#, 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:1560
+#, 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:1581
+#, 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:1716
+msgid "Bad data in infokey file -- some key bindings ignored"
+msgstr "Feil data i infokeyfil -- noen tastebindinger ble ignorert"
+
+#: info/infomap.c:1766
+msgid "Bad data in infokey file -- some var settings ignored"
+msgstr "Feil data i infokeyfil -- noen variabelinnstillinger ble ignorert"
+
+#: info/m-x.c:69
+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:73
+msgid "Describe command: "
+msgstr "Beskriv kommandoen: "
+
+#: info/m-x.c:96
+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:140
+msgid "Cannot execute an `echo-area' command here."
+msgstr "Kan ikke utføre en «echo-area»-kommando her."
+
+#: info/m-x.c:154
+#, fuzzy, c-format
+msgid "Undefined command: %s"
+msgstr "udefinert flagg: %s"
+
+#: info/m-x.c:160
+msgid "Set the height of the displayed window"
+msgstr "Sette høyden på det viste vinduet"
+
+#: info/m-x.c:173
+#, c-format
+msgid "Set screen height to (%d): "
+msgstr "Sette skjermhøyde til (%d): "
+
+#: info/makedoc.c:162 info/makedoc.c:170
+#, 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:550
+#, c-format
+msgid "Couldn't manipulate the file %s.\n"
+msgstr "Kunne ikke manipulere filen %s.\n"
+
+#: info/nodemenu.c:31
+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:202
+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:224
+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:304
+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:317
+msgid "Select visited node: "
+msgstr "Velg besøkt node: "
+
+#: info/nodemenu.c:337 info/session.c:2264
+#, c-format
+msgid "The reference disappeared! (%s)."
+msgstr "Referansen forsvant! (%s)."
+
+#: info/session.c:162
+#, 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:620
+msgid "Move down to the next line"
+msgstr "Flytte ned til neste linje"
+
+#: info/session.c:635
+msgid "Move up to the previous line"
+msgstr "Flytte opp til den forrige linjen"
+
+#: info/session.c:650
+msgid "Move to the end of the line"
+msgstr "Flytte til slutten av linjen"
+
+#: info/session.c:670
+msgid "Move to the start of the line"
+msgstr "Flytte til starten av linjen"
+
+#: info/session.c:860 makeinfo/node.c:1424
+msgid "Next"
+msgstr "neste"
+
+#: info/session.c:863
+msgid "Following Next node..."
+msgstr "Følger nestenoden..."
+
+#: info/session.c:881
+msgid "Selecting first menu item..."
+msgstr "Velger første menypunkt..."
+
+#: info/session.c:893
+msgid "Selecting Next node..."
+msgstr "Velger nestenoden..."
+
+#: info/session.c:964
+#, c-format
+msgid "Moving Up %d time(s), then Next."
+msgstr "Flytter opp %d gang(er), deretter neste."
+
+#: info/session.c:988
+msgid "No more nodes within this document."
+msgstr "Ingen flere noder i dette dokumentet."
+
+#: info/session.c:1011
+msgid "No `Prev' for this node."
+msgstr "Ingen «forrige» for denne noden."
+
+#: info/session.c:1014 info/session.c:1073
+msgid "Moving Prev in this window."
+msgstr "Flytter til forrige i dette vinduet."
+
+#: info/session.c:1030
+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:1034
+msgid "Moving Up in this window."
+msgstr "Flytter opp i dette vinduet."
+
+#: info/session.c:1084
+msgid "Moving to `Prev's last menu item."
+msgstr "Flytter til «forrige»s siste menypunkt."
+
+#: info/session.c:1095
+msgid "Move forwards or down through node structure"
+msgstr "Flytte forover eller ned gjennom nodestrukturen"
+
+#: info/session.c:1111
+msgid "Move backwards or up through node structure"
+msgstr "Flytte tilbake eller opp gjennom nodestrukturen"
+
+#: info/session.c:1205
+msgid "Scroll forward in this window"
+msgstr "Rulle forover i dette vinduet"
+
+#: info/session.c:1213
+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:1221
+msgid "Scroll forward in this window staying within node"
+msgstr "Rulle forover i dette vinduet, men forbli innenfor noden"
+
+#: info/session.c:1229
+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:1237
+msgid "Scroll backward in this window"
+msgstr "Rulle bakover i dette vinduet"
+
+#: info/session.c:1245
+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:1254
+msgid "Scroll backward in this window staying within node"
+msgstr "Rulle bakover i dette vinduet, men forbli innenfor noden"
+
+#: info/session.c:1262
+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:1270
+msgid "Move to the start of this node"
+msgstr "Flytte til starten av denne noden"
+
+#: info/session.c:1277
+msgid "Move to the end of this node"
+msgstr "Flytte til slutten av denne noden"
+
+#: info/session.c:1284
+msgid "Scroll down by lines"
+msgstr "Rulle ned pr. antall linjer"
+
+#: info/session.c:1301
+msgid "Scroll up by lines"
+msgstr "Rulle opp pr. antall linjer"
+
+#: info/session.c:1319
+msgid "Scroll down by half screen size"
+msgstr "Rulle ned en halv side"
+
+#: info/session.c:1345
+msgid "Scroll up by half screen size"
+msgstr "Rulle opp en halv side"
+
+#: info/session.c:1374
+msgid "Select the next window"
+msgstr "Velge neste vindu"
+
+#: info/session.c:1413
+msgid "Select the previous window"
+msgstr "Velge forrige vindu"
+
+#: info/session.c:1464
+msgid "Split the current window"
+msgstr "Dele gjeldende vindu"
+
+#: info/session.c:1545
+msgid "Delete the current window"
+msgstr "Slette den gjeldende vindu"
+
+#: info/session.c:1553
+msgid "Cannot delete a permanent window"
+msgstr "Kan ikke slette et permanent vindu"
+
+#: info/session.c:1585
+msgid "Delete all other windows"
+msgstr "Slette alle andre vinduer"
+
+#: info/session.c:1631
+msgid "Scroll the other window"
+msgstr "Rulle det andre vinduet"
+
+#: info/session.c:1652
+msgid "Scroll the other window backward"
+msgstr "Rulle det andre vinduet bakover"
+
+#: info/session.c:1658
+msgid "Grow (or shrink) this window"
+msgstr "Øke (eller minke) dette vinduet"
+
+#: info/session.c:1669
+msgid "Divide the available screen space among the visible windows"
+msgstr "Dele den tilgjengelige skjermplassen mellom de synlige vinduene"
+
+#: info/session.c:1676
+msgid "Toggle the state of line wrapping in the current window"
+msgstr "Veksle tilstanden til linjebryting i gjeldende vindu"
+
+#: info/session.c:1848
+msgid "Select the Next node"
+msgstr "Velge neste node"
+
+#: info/session.c:1856
+msgid "Select the Prev node"
+msgstr "Velge forrige node"
+
+#: info/session.c:1864
+msgid "Select the Up node"
+msgstr "Velge oppnoden"
+
+#: info/session.c:1871
+msgid "Select the last node in this file"
+msgstr "Velge den siste noden i denne filen"
+
+#: info/session.c:1898 info/session.c:1931
+msgid "This window has no additional nodes"
+msgstr "Dette vinduet har ingen andre noder"
+
+#: info/session.c:1904
+msgid "Select the first node in this file"
+msgstr "Velge første node i denne filen"
+
+#: info/session.c:1938
+msgid "Select the last item in this node's menu"
+msgstr "Velge det siste punktet i nodens meny"
+
+#: info/session.c:1944
+msgid "Select this menu item"
+msgstr "Velge dette menypunktet"
+
+#: info/session.c:1977
+#, c-format
+msgid "There aren't %d items in this menu."
+msgstr "Det er ikke %d punkter i denne menyen."
+
+#: info/session.c:2171 info/session.c:2172
+#, c-format
+msgid "Menu item (%s): "
+msgstr "Menypunkt (%s): "
+
+#: info/session.c:2175
+msgid "Menu item: "
+msgstr "Menypunkt: "
+
+#: info/session.c:2182 info/session.c:2183
+#, c-format
+msgid "Follow xref (%s): "
+msgstr "Følge kryssreferanse (%s): "
+
+#: info/session.c:2186
+msgid "Follow xref: "
+msgstr "Følge kryssreferanse: "
+
+#: info/session.c:2315
+msgid "Read a menu item and select its node"
+msgstr "Lese et menyvalg og velge dens node"
+
+#: info/session.c:2323
+msgid "Read a footnote or cross reference and select its node"
+msgstr "Lese en fotnote eller kryssreferanse og velge dens node"
+
+#: info/session.c:2329
+msgid "Move to the start of this node's menu"
+msgstr "Flytte til starten av denne nodens meny"
+
+#: info/session.c:2353
+msgid "Visit as many menu items at once as possible"
+msgstr "Besøke så mange menypunkter som mulig samtidig"
+
+#: info/session.c:2381
+msgid "Read a node name and select it"
+msgstr "Lese et nodenavn og velge det"
+
+#: info/session.c:2436 info/session.c:2441
+msgid "Goto node: "
+msgstr "Gå til node: "
+
+#: info/session.c:2505
+#, c-format
+msgid "No menu in node `%s'."
+msgstr "Ingen meny i noden «%s»."
+
+#: info/session.c:2551
+#, c-format
+msgid "No menu item `%s' in node `%s'."
+msgstr "Ingen menypunkt «%s» i noden «%s»."
+
+#: info/session.c:2581
+#, 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:2631
+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:2633
+msgid "Follow menus: "
+msgstr "Følge menyer: "
+
+#: info/session.c:2826
+msgid "Find the node describing program invocation"
+msgstr "Finne noden som beskriver bruksmåten for programmet"
+
+#: info/session.c:2828
+#, c-format
+msgid "Find Invocation node of [%s]: "
+msgstr "Finne Invocation-noden til [%s]: "
+
+#: info/session.c:2866
+msgid "Read a manpage reference and select it"
+msgstr "Lese en manualside-referanse og velge den"
+
+#: info/session.c:2870
+msgid "Get Manpage: "
+msgstr "Hent manualsiden: "
+
+#: info/session.c:2900
+msgid "Select the node `Top' in this file"
+msgstr "Velge «Top»-noden i denne filen"
+
+#: info/session.c:2906
+msgid "Select the node `(dir)'"
+msgstr "Velge noden «(dir)»"
+
+#: info/session.c:2923 info/session.c:2925
+#, c-format
+msgid "Kill node (%s): "
+msgstr "Slette noden (%s): "
+
+#: info/session.c:2977
+#, c-format
+msgid "Cannot kill node `%s'"
+msgstr "Kan ikke slette noden «%s»"
+
+#: info/session.c:2987
+msgid "Cannot kill the last node"
+msgstr "Kan ikke slette den forrige noden"
+
+#: info/session.c:3073
+msgid "Select the most recently selected node"
+msgstr "Velge den sist valgte noden"
+
+#: info/session.c:3079
+msgid "Kill this node"
+msgstr "Slette denne noden"
+
+#: info/session.c:3087
+msgid "Read the name of a file and select it"
+msgstr "Lese inn navnet på en fil og velge den"
+
+#: info/session.c:3091
+msgid "Find file: "
+msgstr "Finne fil: "
+
+#: info/session.c:3108
+#, c-format
+msgid "Cannot find `%s'."
+msgstr "Kan ikke finne «%s»."
+
+#: info/session.c:3151 info/session.c:3269
+#, c-format
+msgid "Could not create output file `%s'."
+msgstr "Kunne ikke opprette utskriftsfil «%s»."
+
+#: info/session.c:3165 info/session.c:3287 info/session.c:3347
+msgid "Done."
+msgstr "Ferdig."
+
+#: info/session.c:3220
+#, 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:3296
+msgid "Pipe the contents of this node through INFO_PRINT_COMMAND"
+msgstr "«Pipe» innholdet av denne noden gjennom INFO_PRINT_COMMAND"
+
+#: info/session.c:3331
+#, c-format
+msgid "Cannot open pipe to `%s'."
+msgstr "Kan ikke åpne «pipe» til «%s»."
+
+#: info/session.c:3337
+#, c-format
+msgid "Printing node %s..."
+msgstr "Skriver ut noden «%s»..."
+
+#: info/session.c:3567
+#, c-format
+msgid "Searching subfile %s ..."
+msgstr "Søker i delfil «%s»..."
+
+#: info/session.c:3619
+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:3626
+msgid "Read a string and search for it"
+msgstr "Lese inn en streng og søke etter den"
+
+#: info/session.c:3634
+msgid "Read a string and search backward for it"
+msgstr "Lese inn en streng og søke bakover etter den"
+
+#: info/session.c:3670 info/session.c:3677
+#, c-format
+msgid "%s%sfor string [%s]: "
+msgstr "%s%setter streng [%s]: "
+
+#: info/session.c:3671 info/session.c:3678
+msgid "Search backward"
+msgstr "Søke bakover"
+
+#: info/session.c:3672 info/session.c:3678
+msgid "Search"
+msgstr "Søke"
+
+#: info/session.c:3673 info/session.c:3679
+msgid " case-sensitively "
+msgstr " med skille på store og små bokstaver "
+
+#: info/session.c:3674 info/session.c:3679
+msgid " "
+msgstr " "
+
+#: info/session.c:3718
+msgid "Search failed."
+msgstr "Søk mislyktes"
+
+#: info/session.c:3736
+msgid "Repeat last search in the same direction"
+msgstr "Gjenta forrige søk i samme retning"
+
+#: info/session.c:3739 info/session.c:3749
+msgid "No previous search string"
+msgstr "Ingen tidligere søkestreng"
+
+#: info/session.c:3746
+msgid "Repeat last search in the reverse direction"
+msgstr "Gjenta forrige søk i motsatt retning"
+
+#: info/session.c:3765 info/session.c:3771
+msgid "Search interactively for a string as you type it"
+msgstr "Søke interaktivt for en streng mens du skriver"
+
+#: info/session.c:3851
+msgid "I-search backward: "
+msgstr "I-søk bakover: "
+
+#: info/session.c:3853
+msgid "I-search: "
+msgstr "I-søk: "
+
+#: info/session.c:3878 info/session.c:3880
+msgid "Failing "
+msgstr "Mislyktes "
+
+#: info/session.c:4340
+msgid "Move to the previous cross reference"
+msgstr "Flytte til forrige kryssreferanse"
+
+#: info/session.c:4349
+msgid "Move to the next cross reference"
+msgstr "Flytte til neste kryssreferanse"
+
+#: info/session.c:4359
+msgid "Select reference or menu item appearing on this line"
+msgstr "Velge referanse eller menypunkt på denne linjen"
+
+#: info/session.c:4382
+msgid "Cancel current operation"
+msgstr "Avbryte gjeldende operasjon"
+
+#: info/session.c:4389
+msgid "Quit"
+msgstr "Avbrutt"
+
+#: info/session.c:4398
+msgid "Move the cursor to a specific line of the window"
+msgstr "Flytte markøren til en angitt linje i vinduet"
+
+#: info/session.c:4430
+msgid "Redraw the display"
+msgstr "Tegne skjermen på nytt"
+
+#: info/session.c:4467
+msgid "Quit using Info"
+msgstr "Avslutte Info"
+
+#: info/session.c:4480
+msgid "Run command bound to this key's lowercase variant"
+msgstr "Kjør kommandoen knyttet til denne tastens «liten-bokstav-variant»"
+
+#: info/session.c:4491
+#, c-format
+msgid "Unknown command (%s)."
+msgstr "Ukjent kommando (%s)."
+
+#: info/session.c:4494
+#, c-format
+msgid "\"%s\" is invalid"
+msgstr "«%s» er ugyldig"
+
+#: info/session.c:4495
+#, fuzzy, c-format
+msgid "`%s' is invalid"
+msgstr "«%s» er ugyldig"
+
+#: info/session.c:4709
+msgid "Add this digit to the current numeric argument"
+msgstr "Legge til dette siffret til det gjeldende numeriske argumentet"
+
+#: info/session.c:4718
+msgid "Start (or multiply by 4) the current numeric argument"
+msgstr "Starte (eller multiplisere med 4) den gjeldende numeriske argumentet"
+
+#: info/session.c:4733
+msgid "Internally used by \\[universal-argument]"
+msgstr "Brukt internt av \\[universal-argument]"
+
+#: info/tilde.c:338
+#, 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:64
+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:68
+msgid "When \"On\", Info accepts and displays ISO Latin characters"
+msgstr "Når «On», aksepterer og viser Info ISO-Latin-tegn"
+
+#: info/variables.c:74
+msgid "Explain the use of a variable"
+msgstr "Forklar bruken av en variabel"
+
+#: info/variables.c:80
+msgid "Describe variable: "
+msgstr "Beskriv variabel: "
+
+#: info/variables.c:99
+msgid "Set the value of an Info variable"
+msgstr "Sette verdien til en Infovariabel"
+
+#: info/variables.c:105
+msgid "Set variable: "
+msgstr "Sett variabel: "
+
+#: info/variables.c:123
+#, c-format
+msgid "Set %s to value (%d): "
+msgstr "Sette %s til verdien (%d): "
+
+#: info/variables.c:164
+#, c-format
+msgid "Set %s to value (%s): "
+msgstr "Sette %s til verdien (%s): "
+
+#: info/window.c:1138
+msgid "--*** Tags out of Date ***"
+msgstr "--*** Tagger er ute av synk ***"
+
+#: info/window.c:1149
+msgid "-----Info: (), lines ----, "
+msgstr "-----Info: (), linjer ----, "
+
+#: info/window.c:1156
+#, c-format
+msgid "-%s---Info: %s, %d lines --%s--"
+msgstr "-%s---Info: %s, %d linjer --%s--"
+
+#: info/window.c:1160
+#, c-format
+msgid "-%s%s-Info: (%s)%s, %d lines --%s--"
+msgstr "-%s%s-Info: (%s)%s, %d linjer --%s--"
+
+#: info/window.c:1167
+#, c-format
+msgid " Subfile: %s"
+msgstr " Delfil: %s"
+
+#: lib/getopt.c:551 lib/getopt.c:570
+#, c-format
+msgid "%s: option `%s' is ambiguous\n"
+msgstr "%s: valget «%s» er flertydig\n"
+
+#: lib/getopt.c:603 lib/getopt.c:607
+#, c-format
+msgid "%s: option `--%s' doesn't allow an argument\n"
+msgstr "%s: valget «--%s» tillater ikke et argument\n"
+
+#: lib/getopt.c:616 lib/getopt.c:621
+#, c-format
+msgid "%s: option `%c%s' doesn't allow an argument\n"
+msgstr "%s: valget «%c%s» tillater ikke et argument\n"
+
+#: lib/getopt.c:667 lib/getopt.c:689 lib/getopt.c:1020 lib/getopt.c:1042
+#, c-format
+msgid "%s: option `%s' requires an argument\n"
+msgstr "%s: valget «%s» krever et argument\n"
+
+#: lib/getopt.c:727 lib/getopt.c:730
+#, c-format
+msgid "%s: unrecognized option `--%s'\n"
+msgstr "%s: ukjent valg «--%s»\n"
+
+#: lib/getopt.c:738 lib/getopt.c:741
+#, c-format
+msgid "%s: unrecognized option `%c%s'\n"
+msgstr "%s: ukjent valg «%c%s»\n"
+
+#: lib/getopt.c:796 lib/getopt.c:799
+#, c-format
+msgid "%s: illegal option -- %c\n"
+msgstr "%s: ulovlig valg -- %c\n"
+
+#: lib/getopt.c:805 lib/getopt.c:808
+#, c-format
+msgid "%s: invalid option -- %c\n"
+msgstr "%s: ugyldig valg -- %c\n"
+
+#: lib/getopt.c:863 lib/getopt.c:882 lib/getopt.c:1095 lib/getopt.c:1116
+#, c-format
+msgid "%s: option requires an argument -- %c\n"
+msgstr "%s: valget krever et argument -- %c\n"
+
+#: lib/getopt.c:935 lib/getopt.c:954
+#, c-format
+msgid "%s: option `-W %s' is ambiguous\n"
+msgstr "%s: valget «-W %s» er flertydig\n"
+
+#: lib/getopt.c:978 lib/getopt.c:999
+#, c-format
+msgid "%s: option `-W %s' doesn't allow an argument\n"
+msgstr "%s: valget «-W %s» tillater ikke et argument\n"
+
+#: makeinfo/cmds.c:520 makeinfo/cmds.c:542
+#, fuzzy, c-format
+msgid "arguments to @%s ignored"
+msgstr "Ugyldig argument til %c%s"
+
+#: makeinfo/cmds.c:585
+msgid "January"
+msgstr "januar"
+
+#: makeinfo/cmds.c:585
+msgid "February"
+msgstr "februar"
+
+#: makeinfo/cmds.c:585
+msgid "March"
+msgstr "mars"
+
+#: makeinfo/cmds.c:585
+msgid "April"
+msgstr "april"
+
+#: makeinfo/cmds.c:585
+msgid "May"
+msgstr "mai"
+
+#: makeinfo/cmds.c:586
+msgid "June"
+msgstr "juni"
+
+#: makeinfo/cmds.c:586
+msgid "July"
+msgstr "juli"
+
+#: makeinfo/cmds.c:586
+msgid "August"
+msgstr "august"
+
+#: makeinfo/cmds.c:586
+msgid "September"
+msgstr "september"
+
+#: makeinfo/cmds.c:586
+msgid "October"
+msgstr "oktober"
+
+#: makeinfo/cmds.c:587
+msgid "November"
+msgstr "november"
+
+#: makeinfo/cmds.c:587
+msgid "December"
+msgstr "desember"
+
+#: makeinfo/cmds.c:936
+#, c-format
+msgid "unlikely character %c in @var"
+msgstr "usannsynlig tegn %c i @var"
+
+#: makeinfo/cmds.c:979
+msgid "@sc argument all uppercase, thus no effect"
+msgstr "@sc-argument med store bokstaver, dermed ingen effekt"
+
+#: makeinfo/cmds.c:1034
+#, c-format
+msgid "`{' expected, but saw `%c'"
+msgstr "«{» forventet, men så «%c»"
+
+#: makeinfo/cmds.c:1074
+msgid "end of file inside verb block"
+msgstr "slutt-på-fila inne i verb-blokk"
+
+#: makeinfo/cmds.c:1082
+#, c-format
+msgid "`}' expected, but saw `%c'"
+msgstr "«{» forventet, men så «%c»"
+
+#: makeinfo/cmds.c:1112
+msgid ""
+"@strong{Note...} produces a spurious cross-reference in Info; reword to "
+"avoid that"
+msgstr ""
+
+#: makeinfo/cmds.c:1305
+#, c-format
+msgid "%c%s is obsolete"
+msgstr "%c%s er utgått"
+
+#: makeinfo/cmds.c:1414
+#, c-format
+msgid "@sp requires a positive numeric argument, not `%s'"
+msgstr "@sp krever et positivt numerisk argument, ikke `%s'"
+
+#: makeinfo/cmds.c:1763 makeinfo/cmds.c:1819 makeinfo/footnote.c:82
+#, c-format
+msgid "Bad argument to %c%s"
+msgstr "Ugyldig argument til %c%s"
+
+#: makeinfo/cmds.c:1773 makeinfo/makeinfo.c:4142
+msgid "asis"
+msgstr "asis"
+
+#: makeinfo/cmds.c:1775 makeinfo/cmds.c:1805 makeinfo/makeinfo.c:4144
+msgid "none"
+msgstr "none"
+
+#: makeinfo/cmds.c:1789
+#, fuzzy, c-format
+msgid "Bad argument to @%s"
+msgstr "Ugyldig argument til %c%s"
+
+#: makeinfo/cmds.c:1803
+msgid "insert"
+msgstr "insert"
+
+#: makeinfo/defun.c:84
+msgid "Missing `}' in @def arg"
+msgstr "Manglende «}» i @def-arg"
+
+#: makeinfo/defun.c:403
+msgid "Function"
+msgstr "Funksjon"
+
+#: makeinfo/defun.c:406
+msgid "Macro"
+msgstr "Makro"
+
+#: makeinfo/defun.c:409
+msgid "Special Form"
+msgstr "Spesiell form"
+
+#: makeinfo/defun.c:413
+msgid "Variable"
+msgstr "Variabel"
+
+#: makeinfo/defun.c:416
+msgid "User Option"
+msgstr "Brukervalg"
+
+#: makeinfo/defun.c:420
+msgid "Instance Variable"
+msgstr "Forekomst"
+
+#: makeinfo/defun.c:424
+msgid "Method"
+msgstr "Metode"
+
+#: makeinfo/defun.c:500 makeinfo/defun.c:505 makeinfo/defun.c:545
+#: makeinfo/defun.c:644 makeinfo/xml.c:2229
+msgid "of"
+msgstr "av"
+
+#: makeinfo/defun.c:509 makeinfo/defun.c:513 makeinfo/defun.c:517
+#: makeinfo/defun.c:551 makeinfo/defun.c:650 makeinfo/xml.c:2234
+msgid "on"
+msgstr "på"
+
+#: 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:435
+#, c-format
+msgid "%s: getwd: %s, %s\n"
+msgstr "%s: getwd: %s, %s\n"
+
+#: makeinfo/files.c:638
+#, c-format
+msgid "`%s' omitted before output filename"
+msgstr ""
+
+#: makeinfo/files.c:646
+#, c-format
+msgid "`%s' omitted since writing to stdout"
+msgstr ""
+
+#: makeinfo/files.c:694
+msgid "Output buffer not empty."
+msgstr ""
+
+#: makeinfo/footnote.c:150
+#, c-format
+msgid "`%c%s' needs an argument `{...}', not just `%s'"
+msgstr "«%c%s» trenger et argument «{...}», ikke bare «%s»"
+
+#: makeinfo/footnote.c:165
+#, c-format
+msgid "No closing brace for footnote `%s'"
+msgstr "Ingen avsluttende krøllparentes for fotnoten «%s»"
+
+#: makeinfo/footnote.c:198
+msgid "Footnote defined without parent node"
+msgstr "Fotnote definert uten foreldrenode"
+
+#: makeinfo/footnote.c:210
+msgid "Footnotes inside footnotes are not allowed"
+msgstr "Fotnoter i fotnoter er ikke tillatt"
+
+#: makeinfo/footnote.c:302 makeinfo/index.c:189
+msgid "Footnotes"
+msgstr "Fotnoter"
+
+#: makeinfo/html.c:87
+#, c-format
+msgid "%s: could not open --css-file: %s"
+msgstr "%s: kunne ikke åpne --css-file: %s"
+
+#: makeinfo/html.c:172
+#, c-format
+msgid "%s:%d: --css-file ended in comment"
+msgstr "%s:%d: --css-file endte i en kommentar"
+
+#: makeinfo/html.c:207
+msgid "Untitled"
+msgstr "Uten navn"
+
+#: makeinfo/html.c:422
+msgid "[unexpected] no html tag to pop"
+msgstr "[uforventet] kunne ikke poppe neste htmltagg"
+
+#: makeinfo/html.c:752
+#, c-format
+msgid "[unexpected] invalid node name: `%s'"
+msgstr "[uforventet] ugyldig nodenavn: «%s»"
+
+#: makeinfo/index.c:169
+#, c-format
+msgid "Unknown index `%s'"
+msgstr "Ukjent indeks «%s»"
+
+#: makeinfo/index.c:234
+#, c-format
+msgid "Info cannot handle `:' in index entry `%s'"
+msgstr "Info kan ikke håndtere `:' i indeksinnslaget `%s'"
+
+#: makeinfo/index.c:412
+#, c-format
+msgid "Index `%s' already exists"
+msgstr "Indeksen «%s» eksisterer allerede"
+
+#: makeinfo/index.c:455
+#, c-format
+msgid "Unknown index `%s' and/or `%s' in @synindex"
+msgstr "Ukjent indeks «%s» og/eller «%s» i @synindex"
+
+#: makeinfo/index.c:661
+msgid "(line )"
+msgstr ""
+
+#: makeinfo/index.c:669
+#, c-format
+msgid "(line %*d)"
+msgstr ""
+
+#: makeinfo/index.c:750
+#, c-format
+msgid "Unknown index `%s' in @printindex"
+msgstr "Ukjent indeks «%s» i @printindex"
+
+#: makeinfo/index.c:819
+#, c-format
+msgid "Entry for index `%s' outside of any node"
+msgstr "Innslag for indeksen «%s» utenfor node"
+
+#: makeinfo/index.c:822 makeinfo/index.c:858
+msgid "(outside of any node)"
+msgstr "(utenfor noder)"
+
+#: makeinfo/index.c:919 makeinfo/index.c:925
+msgid "See "
+msgstr "Se "
+
+#: makeinfo/insertion.c:160
+msgid "@item not allowed in argument to @itemize"
+msgstr "@item er ikke tillatt som argument til @itemize"
+
+#: makeinfo/insertion.c:238
+msgid "Broken-Type in insertion_type_pname"
+msgstr "Broken-Type i insertion_type_pname"
+
+#: makeinfo/insertion.c:334
+msgid "Enumeration stack overflow"
+msgstr "Stakkoverflyt ved oppramsing"
+
+#: makeinfo/insertion.c:366
+#, c-format
+msgid "lettering overflow, restarting at %c"
+msgstr "bokstavoverflyt, starter på nytt ved %c"
+
+#: makeinfo/insertion.c:631
+#, c-format
+msgid "%s requires an argument: the formatter for %citem"
+msgstr "%s krever et argument: formattereren for %citem"
+
+#: makeinfo/insertion.c:719
+#, c-format
+msgid "%cfloat environments cannot be nested"
+msgstr ""
+
+#: makeinfo/insertion.c:973
+#, c-format
+msgid "`@end' expected `%s', but saw `%s'"
+msgstr "`@end' forventet «%s», men så «%s»"
+
+#: makeinfo/insertion.c:1337
+#, c-format
+msgid "No matching `%cend %s'"
+msgstr "Ingen tilsvarende «%cend %s»"
+
+#: makeinfo/insertion.c:1592
+#, c-format
+msgid "%s requires letter or digit"
+msgstr "%s krever en bokstav eller et siffer"
+
+#: makeinfo/insertion.c:1687
+msgid "end of file inside verbatim block"
+msgstr "slutt-på-filen inne i verbatimblokk"
+
+#: makeinfo/insertion.c:1913
+#, fuzzy, c-format
+msgid "@%s not meaningful outside `@float' environment"
+msgstr "@%s er meningsløs innenfor en «%s»-blokk"
+
+#: makeinfo/insertion.c:1949
+msgid "@menu seen before first @node, creating `Top' node"
+msgstr "@menu sett før første @node, oppretter «Top»-noden"
+
+#: makeinfo/insertion.c:1950
+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:1962
+msgid "@detailmenu seen before first node, creating `Top' node"
+msgstr "@detailmenu sett før første node, oppretter «Top»-noden"
+
+#: makeinfo/insertion.c:2018
+#, c-format
+msgid "@%s not meaningful outside `@titlepage' and `@quotation' environments"
+msgstr ""
+
+#: makeinfo/insertion.c:2032
+#, fuzzy, c-format
+msgid "@%s not meaningful outside `@titlepage' environment"
+msgstr "@%s er meningsløs innenfor en «%s»-blokk"
+
+#: makeinfo/insertion.c:2063
+#, c-format
+msgid "Unmatched `%c%s'"
+msgstr "Umatchet «%c%s»"
+
+#: makeinfo/insertion.c:2068
+#, c-format
+msgid "`%c%s' needs something after it"
+msgstr "«%c%s» trenger noe etter den"
+
+#: makeinfo/insertion.c:2074
+#, fuzzy, c-format
+msgid "Bad argument `%s' to `@%s', using `%s'"
+msgstr "Ugyldig argument til «%s», «%s», bruker «%s»"
+
+#: makeinfo/insertion.c:2171
+#, c-format
+msgid "@%s not meaningful inside `@%s' block"
+msgstr "@%s er meningsløs innenfor en «%s»-blokk"
+
+#: makeinfo/insertion.c:2180
+#, c-format
+msgid "@itemx not meaningful inside `%s' block"
+msgstr "@itemx er meningsløs innenfor en «%s»-blokk"
+
+#: makeinfo/insertion.c:2356
+#, c-format
+msgid "%c%s found outside of an insertion block"
+msgstr "%c%s funnet utenfor en innsettingsblokk"
+
+#: makeinfo/lang.c:580
+#, 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:655
+#, c-format
+msgid "unrecognized encoding name `%s'"
+msgstr "ugjenkjennelig kodingsnavn «%s»"
+
+#: makeinfo/lang.c:663
+#, c-format
+msgid "sorry, encoding `%s' not supported"
+msgstr "beklager, kodingen «%s» er ikke støttet"
+
+#: makeinfo/lang.c:715
+#, c-format
+msgid "invalid encoded character `%s'"
+msgstr "Ugyldig kodet tegn «%s»"
+
+#: makeinfo/lang.c:1009
+#, 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:1013
+#, 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:355
+#, 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:586
+#, c-format
+msgid "%cend macro not found"
+msgstr "%cend macro ikke funnet"
+
+#: makeinfo/macro.c:624
+msgid "@quote-arg only useful for single-argument macros"
+msgstr "@quote-arg bare brukbart når makroen bare tar et argument"
+
+#: makeinfo/macro.c:660
+#, c-format
+msgid "mismatched @end %s with @%s"
+msgstr "umatchet @end %s med @%s"
+
+#: makeinfo/makeinfo.c:184
+#, c-format
+msgid "Too many errors! Gave up.\n"
+msgstr "For mange feil! Ga opp.\n"
+
+#: makeinfo/makeinfo.c:302
+#, c-format
+msgid "%s:%d: warning: "
+msgstr "%s:%d: advarsel: "
+
+#: makeinfo/makeinfo.c:321 makeinfo/makeinfo.c:2260
+#, c-format
+msgid "Misplaced %c"
+msgstr "Feilplassert %c"
+
+#: makeinfo/makeinfo.c:340
+#, c-format
+msgid "Try `%s --help' for more information.\n"
+msgstr "Prøv «%s --help» for mer informasjon.\n"
+
+#: makeinfo/makeinfo.c:343
+#, c-format
+msgid "Usage: %s [OPTION]... TEXINFO-FILE...\n"
+msgstr "Bruksmåte: %s [VALG]... TEXINFOFIL...\n"
+
+#: makeinfo/makeinfo.c:346
+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:350
+#, c-format
+msgid ""
+"General options:\n"
+" --error-limit=NUM quit after NUM errors (default %d).\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"
+" --reference-limit=NUM warn about at most NUM references (default %"
+"d).\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:364
+#, 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"
+
+#: makeinfo/makeinfo.c:372
+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 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 (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"
+
+# Denne mangler oversettelse, må rettes snarest.
+#: makeinfo/makeinfo.c:386
+#, c-format
+msgid ""
+"Options for Info and plain text:\n"
+" --enable-encoding output accented and special characters in\n"
+" Info output based on @documentencoding.\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\n"
+" in which they are defined (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\n"
+" Infooutput basert på @documentencoding.\\n\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:403
+msgid ""
+"Options for HTML:\n"
+" --css-include=FILE include FILE in HTML <style> output;\n"
+" read stdin if FILE is -.\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:409
+#, 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 HTML:\n"
+" --css-include=FIL inkluder FIL i HTML <style>-taggen;\n"
+" les stdin dersom FIL er -.\n"
+
+#: makeinfo/makeinfo.c:416
+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:425
+#, 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 av input:\n"
+" --ifhtml behandle @ifhtml og @html selv om HTML ikke skal "
+"genereres.\n"
+" --ifinfo behandle @ifinfo selv når HTML 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-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:444
+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:452
+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:603
+#, c-format
+msgid "%s: Ignoring unrecognized TEXINFO_OUTPUT_FORMAT value `%s'.\n"
+msgstr ""
+
+#: makeinfo/makeinfo.c:647 makeinfo/makeinfo.c:673 makeinfo/makeinfo.c:692
+#: makeinfo/makeinfo.c:722 makeinfo/makeinfo.c:743
+#, 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:660
+#, fuzzy, c-format
+msgid "%s: could not open macro expansion output `%s'"
+msgstr "Kunne ikke åpne filen «%s» for utskrift av makroekspansjon"
+
+#: makeinfo/makeinfo.c:665
+#, fuzzy, c-format
+msgid "%s: ignoring second macro expansion output `%s'.\n"
+msgstr "Kunne ikke åpne filen «%s» for utskrift av makroekspansjon"
+
+#: makeinfo/makeinfo.c:707
+#, 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:732
+#, 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:806
+#, c-format
+msgid "%s: missing file argument.\n"
+msgstr "%s: mangler filargument.\n"
+
+#: makeinfo/makeinfo.c:997 makeinfo/makeinfo.c:3991
+#, c-format
+msgid "Multiline command %c%s used improperly"
+msgstr ""
+
+#: makeinfo/makeinfo.c:1000
+#, c-format
+msgid "Expected `%s'"
+msgstr "Forventet «%s»"
+
+#: makeinfo/makeinfo.c:1479
+#, c-format
+msgid "Can't create directory `%s': %s"
+msgstr "Kan ikke opprette katalogen «%s»: %s"
+
+#: makeinfo/makeinfo.c:1525
+#, c-format
+msgid "No `%s' found in `%s'"
+msgstr "Ingen «%s» funnet i «%s»"
+
+#: makeinfo/makeinfo.c:1605
+#, 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:1638
+#, c-format
+msgid "Making %s file `%s' from `%s'.\n"
+msgstr "Lager %s-filen «%s» fra «%s».\n"
+
+#: makeinfo/makeinfo.c:1673
+#, c-format
+msgid "This is %s, produced by makeinfo version %s from %s.\n"
+msgstr "Dette er %s, produsert av makeinfo versjon %s fra %s.\n"
+
+#: makeinfo/makeinfo.c:1709
+#, 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:1773
+#, 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:2034
+#, c-format
+msgid "Unknown command `%s'"
+msgstr "Ukjent kommando «%s»"
+
+#: makeinfo/makeinfo.c:2056
+#, 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:2314
+#, c-format
+msgid "%c%s expected braces"
+msgstr "%c%s forventet krøllparanteser"
+
+#: makeinfo/makeinfo.c:2327
+msgid "Unmatched }"
+msgstr "Umatchet }"
+
+#: makeinfo/makeinfo.c:2375
+msgid "NO_NAME!"
+msgstr "INTET_NAVN!"
+
+#: makeinfo/makeinfo.c:2396
+#, c-format
+msgid "%c%s missing close brace"
+msgstr "%c%s mangler avsluttende krøllparentes"
+
+#: makeinfo/makeinfo.c:3309
+#, c-format
+msgid "@image file `%s' (for HTML) not readable: %s"
+msgstr "@image-fil «%s» (for HTML) er uleselig: %s"
+
+#: makeinfo/makeinfo.c:3315
+#, c-format
+msgid "No such file `%s'"
+msgstr "«%s» er ingen fil"
+
+#: makeinfo/makeinfo.c:3447
+#, c-format
+msgid "@image file `%s' (for text) unreadable: %s"
+msgstr "@image-fil «%s» (for tekstformat) er uleselig: %s"
+
+#: makeinfo/makeinfo.c:3456
+msgid "@image missing filename argument"
+msgstr "@image mangler filnavn"
+
+#: makeinfo/makeinfo.c:3675
+#, c-format
+msgid "undefined flag: %s"
+msgstr "udefinert flagg: %s"
+
+#: makeinfo/makeinfo.c:3676
+#, c-format
+msgid "{No value for `%s'}"
+msgstr "{Ingen verdi for «%s»}"
+
+#: makeinfo/makeinfo.c:3728
+#, c-format
+msgid "%c%s requires a name"
+msgstr "%c%s krever et navn"
+
+#: makeinfo/makeinfo.c:3834
+#, c-format
+msgid "Reached eof before matching @end %s"
+msgstr "Traff slutt-på-filen før matchende @end %s"
+
+#: makeinfo/makeinfo.c:4082
+#, 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:254
+#, c-format
+msgid "ignoring stray text `%s' after @multitable"
+msgstr "ignorerer løs tekst «%s» etter @multitable"
+
+#: makeinfo/multi.c:393
+#, c-format
+msgid "Too many columns in multitable item (max %d)"
+msgstr "For mange kolonner i multitabellrad (maks %d)"
+
+#: makeinfo/multi.c:555
+#, c-format
+msgid "[unexpected] cannot select column #%d in multitable"
+msgstr "[uforventet] kan ikke velge kolonne #%d i multitabell"
+
+#: makeinfo/multi.c:584
+msgid "ignoring @tab outside of multitable"
+msgstr "ignorerer @tab utenfor multitabell"
+
+#: makeinfo/multi.c:632
+#, c-format
+msgid "** Multicolumn output from last row:\n"
+msgstr "** Multikolonne-output fra siste rad:\n"
+
+#: makeinfo/multi.c:635
+#, c-format
+msgid "* column #%d: output = %s\n"
+msgstr "* kolonne #%d output = %s\n"
+
+#: makeinfo/node.c:280
+#, c-format
+msgid "Node `%s' previously defined at line %d"
+msgstr "Noden «%s» er tidligere definert ved linje %d"
+
+#: makeinfo/node.c:648
+#, c-format
+msgid "Formatting node %s...\n"
+msgstr "Skriver noden %s...\n"
+
+#: makeinfo/node.c:716
+#, 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:879
+#, c-format
+msgid "No node name specified for `%c%s' command"
+msgstr "Ingen nodenavn spesifisert for «%c%s»-kommandoen"
+
+#: makeinfo/node.c:920 makeinfo/node.c:1151
+#, 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:923
+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:925 makeinfo/node.c:1154
+msgid "Rename this anchor or use the `--no-split' option"
+msgstr "Omdøpe dette ankeret eller bruk «--no-split»-valget"
+
+#: makeinfo/node.c:955
+#, 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:991
+msgid "Next:"
+msgstr "Neste:"
+
+#: makeinfo/node.c:1007
+msgid "Previous:"
+msgstr "Forrige:"
+
+#: makeinfo/node.c:1021
+msgid "Up:"
+msgstr "Opp:"
+
+#: makeinfo/node.c:1148
+#, 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:1153
+msgid "@anchor command ignored; references to it will not work"
+msgstr "@anchor-kommando ignorert; referanser til den vil ikke virke"
+
+#: makeinfo/node.c:1347
+#, 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:1363
+msgid "Menu"
+msgstr "Meny"
+
+#: makeinfo/node.c:1365
+msgid "Cross"
+msgstr "Kryss"
+
+#: makeinfo/node.c:1447
+#, 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:1450
+#, c-format
+msgid "This node (%s) has the bad Prev"
+msgstr "Denne noden (%s) har den dårlige forrigepekeren"
+
+#: makeinfo/node.c:1462
+msgid "Prev"
+msgstr "forrige"
+
+#: makeinfo/node.c:1505
+#, c-format
+msgid "Prev field of node `%s' not pointed to"
+msgstr "Forrigefeltet til noden «%s» er ikke pekt på"
+
+#: makeinfo/node.c:1509
+#, c-format
+msgid "This node (%s) has the bad Next"
+msgstr "Denne noden (%s) har den dårlige nestepekeren"
+
+#: makeinfo/node.c:1521
+#, c-format
+msgid "`%s' has no Up field (perhaps incorrect sectioning?)"
+msgstr "`%s' har ingen Up-felt (kanskje feil inndeling?)"
+
+#: makeinfo/node.c:1524
+msgid "Up"
+msgstr "opp"
+
+#: makeinfo/node.c:1590
+#, 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:1619
+#, c-format
+msgid "node `%s' has been referenced %d times"
+msgstr "noden «%s» har blitt referert %d ganger"
+
+#: makeinfo/node.c:1633
+#, c-format
+msgid "unreferenced node `%s'"
+msgstr "ureferert node «%s»"
+
+#: makeinfo/node.c:1723
+#, c-format
+msgid "Removing %s\n"
+msgstr ""
+
+#: makeinfo/node.c:1727
+#, fuzzy, c-format
+msgid "Can't remove file `%s': %s"
+msgstr "Kan ikke opprette katalogen «%s»: %s"
+
+#: makeinfo/sectioning.c:122
+#, fuzzy, c-format
+msgid "Appendix %c"
+msgstr "Vedlegg %c "
+
+#: makeinfo/sectioning.c:467
+#, fuzzy, c-format
+msgid "Internal error (search_sectioning) `%s'!"
+msgstr "Intern feil (search_sectioning) «%s»!"
+
+#: makeinfo/sectioning.c:562
+#, c-format
+msgid "Internal error (search_sectioning) \"%s\"!"
+msgstr "Intern feil (search_sectioning) «%s»!"
+
+#: makeinfo/sectioning.c:623
+#, c-format
+msgid "%c%s is obsolete; use %c%s instead"
+msgstr "%c%s er avlegs; bruk %c%s i stedet"
+
+#: makeinfo/sectioning.c:639
+#, c-format
+msgid "Node with %ctop as a section already exists"
+msgstr "Node med %ctop som en seksjon eksisterer allerede"
+
+#: makeinfo/sectioning.c:647
+#, c-format
+msgid "Here is the %ctop node"
+msgstr "Her er %ctop-noden"
+
+#: makeinfo/sectioning.c:663
+#, c-format
+msgid "%ctop used before %cnode, defaulting to %s"
+msgstr "%ctop brukt før %cnode, benytter %s"
+
+#: makeinfo/toc.c:197 makeinfo/toc.c:271 makeinfo/toc.c:273
+msgid "Table of Contents"
+msgstr "Innholdsfortegnelse"
+
+#: makeinfo/toc.c:304 makeinfo/toc.c:337 makeinfo/toc.c:339
+msgid "Short Contents"
+msgstr "Kort innholdsfortegnelse"
+
+#: makeinfo/xml.c:1605
+#, c-format
+msgid "@image file `%s' unreadable: %s"
+msgstr "@image-fil «%s» er uleselig: %s"
+
+#: makeinfo/xml.c:2097
+msgid ""
+"@headitem as the last item of @multitable produces invalid Docbook documents"
+msgstr ""
+
+#: util/install-info.c:154
+#, c-format
+msgid "%s: warning: "
+msgstr "%s: advarsel: "
+
+#: util/install-info.c:203
+#, c-format
+msgid " for %s"
+msgstr " for %s"
+
+#: util/install-info.c:426
+#, 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"
+
+#: util/install-info.c:434
+#, c-format
+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 ""
+"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"
+
+#: util/install-info.c:488
+#, 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"
+
+#: util/install-info.c:513
+#, 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"
+
+#: util/install-info.c:600
+#, c-format
+msgid "%s: empty file"
+msgstr "%s: tom fil"
+
+#: util/install-info.c:913 util/install-info.c:953
+msgid "START-INFO-DIR-ENTRY without matching END-INFO-DIR-ENTRY"
+msgstr "START-INFO-DIR-ENTRY uten tilhørende END-INFO-DIR-ENTRY"
+
+#: util/install-info.c:948
+msgid "END-INFO-DIR-ENTRY without matching START-INFO-DIR-ENTRY"
+msgstr "END-INFO-DIR-ENTRY uten tilhørende START-INFO-DIR-ENTRY"
+
+#: util/install-info.c:1191 util/install-info.c:1201
+#, c-format
+msgid "%s: already have dir file: %s\n"
+msgstr ""
+
+#: util/install-info.c:1236
+#, c-format
+msgid "%s: Specify the Info file only once.\n"
+msgstr "%s: Spesifiser infofilen bare en gang.\n"
+
+#: util/install-info.c:1284
+#, c-format
+msgid "excess command line argument `%s'"
+msgstr "overflødig argument på kommandolinjen «%s»"
+
+#: util/install-info.c:1288
+msgid "No input file specified; try --help for more information."
+msgstr "Ingen innfil angitt; prøv --help for mer informasjon."
+
+#: util/install-info.c:1291
+msgid "No dir file specified; try --help for more information."
+msgstr "Ingen dir-fil angitt; prøv --help for mer informasjon."
+
+#: util/install-info.c:1313
+#, c-format
+msgid "no info dir entry in `%s'"
+msgstr "ingen info-dir-oppføring i «%s»"
+
+#: util/install-info.c:1426
+#, c-format
+msgid "menu item `%s' already exists, for file `%s'"
+msgstr "menypunktet «%s» eksisterer allerede for filen «%s»"
+
+#: util/install-info.c:1449
+#, c-format
+msgid "no entries found for `%s'; nothing deleted"
+msgstr "fant ingen oppføringer for «%s»; ingenting slettet"
+
+#: util/texindex.c:252
+msgid "display this help and exit"
+msgstr "vise denne hjelpen og avslutte"
+
+#: util/texindex.c:254
+msgid "keep temporary files around after processing"
+msgstr "bevar midlertidige filer etter behandling"
+
+#: util/texindex.c:256
+msgid "do not keep temporary files around after processing (default)"
+msgstr "ikke bevar midlertidige filer etter behandling (standard)"
+
+#: util/texindex.c:258
+msgid "send output to FILE"
+msgstr "sende utdata til FILE"
+
+#: util/texindex.c:260
+msgid "display version information and exit"
+msgstr "vise programversjon og avslutte"
+
+#: util/texindex.c:270
+#, c-format
+msgid "Usage: %s [OPTION]... FILE...\n"
+msgstr "Bruksmåte: %s [VALG]... FIL...\n"
+
+#: util/texindex.c:271
+#, 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:274
+#, 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:276
+#, c-format
+msgid ""
+"\n"
+"Options:\n"
+msgstr ""
+"\n"
+"Valg:\n"
+
+#: util/texindex.c:876 util/texindex.c:910 util/texindex.c:983
+#: util/texindex.c:1011
+#, c-format
+msgid "%s: not a texinfo index file"
+msgstr "%s: ikke en texinfo-indeksfil"
+
+#: util/texindex.c:968
+#, c-format
+msgid "failure reopening %s"
+msgstr "feil ved gjenåpning av %s"
+
+#: util/texindex.c:1218
+#, c-format
+msgid "No page number in %s"
+msgstr "Ingen sidenummer i %s"
+
+#: util/texindex.c:1291
+#, 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 "%s: Specify the Info directory only once.\n"
+#~ msgstr "%s: Spesifiser infokatalogen bare en gang.\n"
+
+#~ msgid "\"\" is invalid"
+#~ msgstr "«» er ugyldig"
+
+#~ msgid "%s is an invalid ISO code, using %c"
+#~ msgstr "%s er en ugyldig ISO-kode, bruker %c"
+
+#~ msgid "Cannot specify more than one macro expansion output"
+#~ msgstr "Kan ikke angi mer enn en fil for utskrift av makroekspansjon"
+
+#~ msgid "File exists, but is not a directory"
+#~ msgstr "Fila eksisterer, men er ikke en katalog"
+
+#~ msgid "First argument to cross-reference may not be empty"
+#~ msgstr "Det første argumentet til kryssreferanser kan ikke være tomt"
+
+#~ msgid "see "
+#~ msgstr "se "
+
+#~ msgid "`.' or `,' must follow cross reference, not %c"
+#~ msgstr "«.» eller «,» må følge kryssreferanser, ikke %c"
+
+#~ msgid "First argument to @inforef may not be empty"
+#~ msgstr "Det første argumentet til @inforef kan ikke være tomt"
+
+#~ msgid "Node:"
+#~ msgstr "Node:"
+
+#~ msgid "%s: TOC should be here, but it was not found"
+#~ msgstr "%s: TOC burde være her, men ble ikke funnet"
diff --git a/macros/texinfo/contrib/texinfo-hu/texinfo/po/pl.gmo b/macros/texinfo/contrib/texinfo-hu/texinfo/po/pl.gmo
new file mode 100644
index 0000000000..a09723256a
--- /dev/null
+++ b/macros/texinfo/contrib/texinfo-hu/texinfo/po/pl.gmo
Binary files differ
diff --git a/macros/texinfo/contrib/texinfo-hu/texinfo/po/pl.po b/macros/texinfo/contrib/texinfo-hu/texinfo/po/pl.po
new file mode 100644
index 0000000000..60f787a0f6
--- /dev/null
+++ b/macros/texinfo/contrib/texinfo-hu/texinfo/po/pl.po
@@ -0,0 +1,3111 @@
+# Polish translation for texinfo.
+# Copyright (C) 2003, 2004 Free Software Foundation, Inc.
+# This file is distributed under the same license as the texinfo package.
+# Jakub Bogusz <qboosh@pld-linux.org>, 2003-2004.
+#
+msgid ""
+msgstr ""
+"Project-Id-Version: texinfo 4.7.90\n"
+"Report-Msgid-Bugs-To: bug-texinfo@gnu.org\n"
+"POT-Creation-Date: 2004-12-21 16:20-0800\n"
+"PO-Revision-Date: 2004-12-05 12:24+0100\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"
+
+#: info/echo-area.c:284 info/session.c:689
+msgid "Move forward a character"
+msgstr "Przesuniêcie do przodu o znak"
+
+#: info/echo-area.c:296 info/session.c:705
+msgid "Move backward a character"
+msgstr "Przesuniêcie do ty³u o znak"
+
+#: info/echo-area.c:308
+msgid "Move to the start of this line"
+msgstr "Przej¶cie na pocz±tek tej linii"
+
+#: info/echo-area.c:313
+msgid "Move to the end of this line"
+msgstr "Przej¶cie na koniec tej linii"
+
+#: info/echo-area.c:321 info/session.c:723
+msgid "Move forward a word"
+msgstr "Przesuniêcie do przodu o s³owo"
+
+#: info/echo-area.c:361 info/session.c:772
+msgid "Move backward a word"
+msgstr "Przesuniêcie do ty³u o s³owo"
+
+#: info/echo-area.c:401
+msgid "Delete the character under the cursor"
+msgstr "Usuniêcie znaku pod kursorem"
+
+#: info/echo-area.c:431
+msgid "Delete the character behind the cursor"
+msgstr "Usuniêcie znaku za kursorem"
+
+#: info/echo-area.c:452
+msgid "Cancel or quit operation"
+msgstr "Anulowanie lub rezygnacja z operacji"
+
+#: info/echo-area.c:467
+msgid "Accept (or force completion of) this line"
+msgstr "Przyjêcie (lub wymuszenie dokoñczenia) tej linii"
+
+#: info/echo-area.c:472
+msgid "Insert next character verbatim"
+msgstr "Wstawienie nastêpnego znaku dos³ownie"
+
+#: info/echo-area.c:480
+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:653
+msgid "Kill the word preceding the cursor"
+msgstr "Wyciêcie s³owa przed kursorem"
+
+#: info/echo-area.c:868 info/echo-area.c:924
+msgid "No completions"
+msgstr "Brak uzupe³nieñ"
+
+#: info/echo-area.c:870
+msgid "Not complete"
+msgstr "Nie dokoñczono"
+
+#: info/echo-area.c:911
+msgid "List possible completions"
+msgstr "Wypisanie mo¿liwych uzupe³nieñ"
+
+#: info/echo-area.c:928
+msgid "Sole completion"
+msgstr "Jedyne uzupe³nienie"
+
+#: info/echo-area.c:937
+msgid "One completion:\n"
+msgstr "Jedno uzupe³nienie:\n"
+
+#: info/echo-area.c:938
+#, c-format
+msgid "%d completions:\n"
+msgstr "%d uzupe³nieñ:\n"
+
+#: info/echo-area.c:1085
+msgid "Insert completion"
+msgstr "Wstawienie uzupe³nienia"
+
+#: info/echo-area.c:1220
+msgid "Building completions..."
+msgstr "Tworzenie uzupe³nieñ..."
+
+#: info/echo-area.c:1340
+msgid "Scroll the completions window"
+msgstr "Przewijanie okna uzupe³nieñ"
+
+#: info/footnotes.c:213
+msgid "Footnotes could not be displayed"
+msgstr "Przypisy nie mog± byæ wy¶wietlone"
+
+#: info/footnotes.c:239
+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:172
+msgid "Look up a string in the index for this file"
+msgstr "Szukanie ³añcucha w indeksie tego pliku"
+
+#: info/indices.c:199
+msgid "Finding index entries..."
+msgstr "Szukanie wpisów w indeksie..."
+
+#: info/indices.c:207
+msgid "No indices found."
+msgstr "Nie znaleziono indeksów."
+
+#: info/indices.c:217
+msgid "Index entry: "
+msgstr "Wpis indeksu: "
+
+#: info/indices.c:325
+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:335
+msgid "No previous index search string."
+msgstr "Brak poprzedniego ³añcucha szukanego w indeksie."
+
+#: info/indices.c:342
+msgid "No index entries."
+msgstr "Brak wpisów w indeksie."
+
+#: info/indices.c:375
+#, c-format
+msgid "No %sindex entries containing `%s'."
+msgstr "Nie ma %swpisów w indeksie zawieraj±cych `%s'."
+
+#: info/indices.c:376
+msgid "more "
+msgstr "wiêcej "
+
+#: info/indices.c:386
+msgid "CAN'T SEE THIS"
+msgstr "NIE MO¯NA TEGO ZOBACZYÆ"
+
+#: info/indices.c:422
+#, 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:541
+#, c-format
+msgid "Scanning indices of `%s'..."
+msgstr "Przeszukiwanie indeksów `%s'..."
+
+#: info/indices.c:596
+#, 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:622
+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:626
+msgid "Index apropos: "
+msgstr "Indeks dla ³añcucha: "
+
+#: info/indices.c:654
+#, 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:295 makeinfo/makeinfo.c:766 util/install-info.c:1266
+#: util/texindex.c:343
+#, c-format
+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 ""
+"Autorzy nie daj± ¯ADNYCH gwarancji. Ten program mo¿na rozprowadzaæ\n"
+"zachowuj±c warunki Powszechnej Licencji Publicznej GNU (General Public\n"
+"License).\n"
+"Wiêcej informacji na ten temat mo¿na znale¼æ w plikach o nazwie COPYING.\n"
+
+#: info/info.c:498
+#, c-format
+msgid "no index entries found for `%s'\n"
+msgstr "nie znaleziono wpisów w indeksie dla `%s'\n"
+
+#: info/info.c:590
+msgid " -b, --speech-friendly be friendly to speech synthesizers.\n"
+msgstr " -b, --speech-friendly tryb przyjazny dla syntezatorów mowy.\n"
+
+#: info/info.c:597
+#, c-format
+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 -f ./foo.info show file ./foo.info, not searching dir\n"
+msgstr ""
+"Sk³adnia: %s [OPCJA]... [ELEMENT-MENU...]\n"
+"\n"
+"Przegl±danie dokumentacji w formacie Info.\n"
+"\n"
+"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.\n"
+" -h, --help wy¶wietlenie tego opisu i zakoñczenie pracy.\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.\n"
+" -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ñ.\n"
+"%s --subnodes rekurencyjne wypisanie elementów menu.\n"
+" -w, --where, --location wy¶wietlenie fizycznego po³o¿enia pliku "
+"Info.\n"
+" --vi-keys u¿ywanie klawiszy w stylu programów vi i "
+"less.\n"
+" --version wy¶wietlenie informacji o wersji i "
+"zakoñczenie.\n"
+"\n"
+"Pierwszy argument nie bêd±cy opcj±, je¶li jest obecny, jest wpisem menu, od\n"
+"którego program ma zacz±æ pracê;\n"
+"jest poszukiwany we wszystkich plikach `dir' 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.\n"
+"\n"
+"Przyk³ady:\n"
+" info pokazanie menu katalogów g³ównego poziomu\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 -f ./foo.info pokazanie pliku ./foo.info, z pominiêciem "
+"katalogu\n"
+
+#: info/info.c:635 info/infokey.c:918 makeinfo/makeinfo.c:465
+#: util/install-info.c:466 util/texindex.c:292
+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, ogólne pytania i dyskusjê na help-texinfo@gnu.org.\n"
+"Strona domowa texinfo: http://www.gnu.org/software/texinfo/"
+
+#: info/info.c:669
+#, c-format
+msgid "Cannot find node `%s'."
+msgstr "Nie mo¿na znale¼æ wêz³a `%s'."
+
+#: info/info.c:670
+#, c-format
+msgid "Cannot find node `(%s)%s'."
+msgstr "Nie mo¿na znale¼æ wêz³a `(%s)%s'."
+
+#: info/info.c:671
+msgid "Cannot find a window!"
+msgstr "Nie mo¿na znale¼æ okna!"
+
+#: info/info.c:672
+msgid "Point doesn't appear within this window's node!"
+msgstr "Kropka nie wystêpuje w wê¼le z tego okna!"
+
+#: info/info.c:673
+msgid "Cannot delete the last window."
+msgstr "Nie mo¿na usun±æ ostatniego okna."
+
+#: info/info.c:674
+msgid "No menu in this node."
+msgstr "Brak menu w tym wê¼le."
+
+#: info/info.c:675
+msgid "No footnotes in this node."
+msgstr "Brak przypisów w tym wê¼le."
+
+#: info/info.c:676
+msgid "No cross references in this node."
+msgstr "Brak odsy³aczy w tym wê¼le."
+
+#: info/info.c:677
+#, c-format
+msgid "No `%s' pointer for this node."
+msgstr "Brak wska¼nika `%s' dla tego wêz³a."
+
+#: info/info.c:678
+#, c-format
+msgid "Unknown Info command `%c'; try `?' for help."
+msgstr "Nieznane polecenie Info `%c'; `?' przywo³uje pomoc."
+
+#: info/info.c:679
+#, 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:680
+msgid "You are already at the last page of this node."
+msgstr "To ju¿ jest ostatnia strona tego wêz³a."
+
+#: info/info.c:681
+msgid "You are already at the first page of this node."
+msgstr "To ju¿ jest pierwsza strona tego wêz³a."
+
+#: info/info.c:682
+msgid "Only one window."
+msgstr "Tylko jedno okno."
+
+#: info/info.c:683
+msgid "Resulting window would be too small."
+msgstr "Wynikowe okno by³oby zbyt ma³e."
+
+#: info/info.c:684
+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:46 info/infodoc.c:95
+msgid ""
+"Basic Commands in Info Windows\n"
+"******************************\n"
+msgstr ""
+"Podstawowe polecenia w oknach Info\n"
+"**********************************\n"
+
+#: info/infodoc.c:49
+msgid "\\%-10[quit-help] Quit this help.\n"
+msgstr "\\%-10[quit-help] Opuszczenie tej pomocy.\n"
+
+#: info/infodoc.c:50
+msgid "\\%-10[quit] Quit Info altogether.\n"
+msgstr "\\%-10[quit] Opuszczenie ca³ego Info.\n"
+
+#: info/infodoc.c:51
+msgid "\\%-10[get-info-help-node] Invoke the Info tutorial.\n"
+msgstr "\\%-10[get-info-help-node] Uruchomienie tutoriala Info.\n"
+
+#: info/infodoc.c:53 info/infodoc.c:102
+msgid ""
+"Selecting other nodes:\n"
+"----------------------\n"
+msgstr ""
+"Wybór innych wêz³ów:\n"
+"--------------------\n"
+
+#: info/infodoc.c:55
+msgid "\\%-10[next-node] Move to the \"next\" node of this node.\n"
+msgstr "\\%-10[next-node] Przej¶cie do wêz³a \"nastêpny\" tego wêz³a.\n"
+
+#: info/infodoc.c:56
+msgid "\\%-10[prev-node] Move to the \"previous\" node of this node.\n"
+msgstr "\\%-10[prev-node] Przej¶cie do wêz³a \"poprzedni\" tego wêz³a.\n"
+
+#: info/infodoc.c:57
+msgid "\\%-10[up-node] Move \"up\" from this node.\n"
+msgstr "\\%-10[up-node] Przej¶cie do wêz³a \"w górê\" tego wêz³a.\n"
+
+#: info/infodoc.c:58
+msgid ""
+"\\%-10[menu-item] Pick menu item specified by name.\n"
+" Picking a menu item causes another node to be selected.\n"
+msgstr ""
+"\\%-10[menu-item] Wybranie elementu menu zadanego nazw±.\n"
+" Wybranie elementu menu powoduje wybranie innego wêz³a.\n"
+
+#: info/infodoc.c:60
+msgid ""
+"\\%-10[xref-item] Follow a cross reference. Reads name of reference.\n"
+msgstr ""
+"\\%-10[xref-item] Przej¶cie za odsy³aczem. Odczytuje nazwê odsy³acza.\n"
+
+#: info/infodoc.c:61
+msgid "\\%-10[history-node] Move 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[move-to-next-xref] Skip to next hypertext link within this node.\n"
+msgstr ""
+"\\%-10[move-to-next-xref] Przej¶cie do nastêpnego odno¶nika hipertekstowego "
+"w tym wê¼le.\n"
+
+#: info/infodoc.c:63
+msgid ""
+"\\%-10[move-to-prev-xref] Skip to previous hypertext link within this "
+"node.\n"
+msgstr ""
+"\\%-10[move-to-prev-xref] Przej¶cie do poprzedniego odno¶nika "
+"hipertekstowego w tym wê¼le.\n"
+
+#: info/infodoc.c:64
+msgid ""
+"\\%-10[select-reference-this-line] Follow the hypertext link under cursor.\n"
+msgstr ""
+"\\%-10[select-reference-this-line] Przej¶cie za odno¶nikiem hipertekstowym "
+"pod kursorem.\n"
+
+#: info/infodoc.c:65
+msgid ""
+"\\%-10[dir-node] Move to the `directory' node. Equivalent to `\\[goto-"
+"node] (DIR)'.\n"
+msgstr ""
+"\\%-10[dir-node] Przej¶cie do wêz³a `directory' (katalog). Równoznaczne `"
+"\\[goto-node] (DIR)'.\n"
+
+#: info/infodoc.c:66
+msgid ""
+"\\%-10[top-node] Move to the Top node. Equivalent to `\\[goto-node] Top'.\n"
+msgstr ""
+"\\%-10[top-node] Przej¶cie do wêz³a Szczytowy. Równoznaczne `\\[goto-node] "
+"Top'.\n"
+
+#: info/infodoc.c:68 info/infodoc.c:116
+msgid ""
+"Moving within a node:\n"
+"---------------------\n"
+msgstr ""
+"Poruszanie siê w ramach wêz³a:\n"
+"------------------------------\n"
+
+#: info/infodoc.c:70
+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:71
+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:72
+msgid "\\%-10[next-line] Scroll forward 1 line.\n"
+msgstr "\\%-10[next-line] Przewiniêcie do przodu o 1 liniê.\n"
+
+#: info/infodoc.c:73
+msgid "\\%-10[prev-line] Scroll backward 1 line.\n"
+msgstr "\\%-10[prev-line] Przewiniêcie do ty³u o 1 liniê.\n"
+
+#: info/infodoc.c:74
+msgid "\\%-10[scroll-forward] Scroll forward a page.\n"
+msgstr "\\%-10[scroll-forward] Przewiniêcie do przodu o stronê.\n"
+
+#: info/infodoc.c:75
+msgid "\\%-10[scroll-backward] Scroll backward a page.\n"
+msgstr "\\%-10[scroll-backward] Przewiniêcie do ty³u o stronê.\n"
+
+#: info/infodoc.c:77 info/infodoc.c:125
+msgid ""
+"Other commands:\n"
+"---------------\n"
+msgstr ""
+"Inne polecenia:\n"
+"---------------\n"
+
+#: info/infodoc.c:79
+msgid "\\%-10[menu-digit] Pick first ... ninth item in node's menu.\n"
+msgstr ""
+"\\%-10[menu-digit] Wybranie pierwszego ... dziewi±tego elementu z menu "
+"wêz³a.\n"
+
+#: info/infodoc.c:80
+msgid "\\%-10[last-menu-item] Pick last item in node's menu.\n"
+msgstr "\\%-10[last-menu-item] Wybranie ostatniego elementu z menu wêz³a.\n"
+
+#: info/infodoc.c:81
+msgid ""
+"\\%-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"
+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:83
+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] 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:85
+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] 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:87
+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] Szukanie podanego ³añcucha w ty³\n"
+" i wybranie wêz³a, w którym znaleziono poprzednie wyst±pienie.\n"
+
+#: info/infodoc.c:98
+#, c-format
+msgid " %-10s Quit this help.\n"
+msgstr " %-10s Opuszczenie tej pomocy.\n"
+
+#: info/infodoc.c:99
+#, c-format
+msgid " %-10s Quit Info altogether.\n"
+msgstr " %-10s Opuszczenie ca³ego Info.\n"
+
+#: info/infodoc.c:100
+#, c-format
+msgid " %-10s Invoke the Info tutorial.\n"
+msgstr " %-10s Uruchomienie tutoriala Info.\n"
+
+#: info/infodoc.c:104
+#, 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:105
+#, 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:106
+#, 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:107
+#, c-format
+msgid " %-10s Pick menu item specified by name.\n"
+msgstr " %-10s Wybranie elementu menu zadanego nazw±.\n"
+
+#: info/infodoc.c:108
+msgid " Picking a menu item causes another node to be selected.\n"
+msgstr " Wybranie elementu menu powoduje wybranie innego wêz³a.\n"
+
+#: info/infodoc.c:109
+#, 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:110
+#, 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:111
+#, 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:112
+#, 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:113
+#, 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:114
+#, 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:118
+#, c-format
+msgid " %-10s Scroll forward a page.\n"
+msgstr " %-10s Przewiniêcie do przodu o stronê.\n"
+
+#: info/infodoc.c:119
+#, c-format
+msgid " %-10s Scroll backward a page.\n"
+msgstr " %-10s Przewiniêcie do ty³u o stronê.\n"
+
+#: info/infodoc.c:120
+#, 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:121
+#, 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:122
+#, c-format
+msgid " %-10s Scroll forward 1 line.\n"
+msgstr " %-10s Przewiniêcie do przodu o 1 liniê.\n"
+
+#: info/infodoc.c:123
+#, c-format
+msgid " %-10s Scroll backward 1 line.\n"
+msgstr " %-10s Przewiniêcie do ty³u o 1 liniê.\n"
+
+#: info/infodoc.c:127
+#, 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:128
+#, 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:129
+#, c-format
+msgid ""
+" %-10s Search for a specified string in the index entries of this Info\n"
+msgstr ""
+" %-10s Szukanie podanego ³añcucha we wpisach indeksu tego pliku Info\n"
+
+#: info/infodoc.c:130
+msgid ""
+" file, and select the node referenced by the first entry "
+"found.\n"
+msgstr ""
+" i wybranie wêz³a wskazywanego przez pierwszy znaleziony wpis.\n"
+
+#: info/infodoc.c:131
+#, c-format
+msgid " %-10s Move to node specified by name.\n"
+msgstr " %-10s Przej¶cie do wêz³a zadanego nazw±.\n"
+
+#: info/infodoc.c:132
+msgid ""
+" You may include a filename as well, as in (FILENAME)NODENAME.\n"
+msgstr ""
+" Mo¿na do³±czyæ tak¿e nazwê pliku w postaci (PLIK)WÊZE£.\n"
+
+#: info/infodoc.c:133
+#, c-format
+msgid " %-10s Search forward for a specified string,\n"
+msgstr " %-10s Szukanie podanego ³añcucha w przód\n"
+
+#: info/infodoc.c:134 info/infodoc.c:136
+msgid ""
+" and select the node in which the next occurrence is found.\n"
+msgstr ""
+" i wybranie wêz³a, w którym znaleziono nastêpne wyst±pienie.\n"
+
+#: info/infodoc.c:135
+#, c-format
+msgid " %-10s Search backward for a specified string\n"
+msgstr " %-10s Szukanie podanego ³añcucha w ty³\n"
+
+#: info/infodoc.c:316
+msgid "The current search path is:\n"
+msgstr "Aktualna ¶cie¿ka poszukiwania to:\n"
+
+#: info/infodoc.c:320
+msgid ""
+"Commands available in Info windows:\n"
+"\n"
+msgstr ""
+"Polecenia dostêpne w oknach Info:\n"
+"\n"
+
+#: info/infodoc.c:324
+msgid ""
+"Commands available in the echo area:\n"
+"\n"
+msgstr ""
+"Polecenia dostêpne w obszarze echo:\n"
+"\n"
+
+#: info/infodoc.c:347
+#, 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:351
+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:375
+msgid "--- Use `\\[history-node]' or `\\[kill-node]' to exit ---\n"
+msgstr "--- Wyj¶æ mo¿na u¿ywaj±c `\\[history-node]' lub `\\[kill-node]' ---\n"
+
+#: info/infodoc.c:485
+msgid "Display help message"
+msgstr "Wy¶wietlenie pomocy"
+
+#: info/infodoc.c:503
+msgid "Visit Info node `(info)Help'"
+msgstr "Odwiedzenie wêz³a Info `(info)Help'"
+
+#: info/infodoc.c:641
+msgid "Print documentation for KEY"
+msgstr "Wy¶wietlenie dokumentacji dla KLAWISZA"
+
+#: info/infodoc.c:653
+#, c-format
+msgid "Describe key: %s"
+msgstr "Opis klawisza: %s"
+
+#: info/infodoc.c:664
+#, c-format
+msgid "ESC %s is undefined."
+msgstr "ESC %s jest niezdefiniowany."
+
+#: info/infodoc.c:680 info/infodoc.c:709
+#, c-format
+msgid "%s is undefined."
+msgstr "%s jest niezdefiniowany."
+
+#: info/infodoc.c:730
+#, c-format
+msgid "%s is defined to %s."
+msgstr "%s jest zdefiniowany na %s."
+
+#: info/infodoc.c:1153
+msgid "Show what to type to execute a given command"
+msgstr "Pokazanie co nacisn±æ, aby wykonaæ zadane polecenie"
+
+#: info/infodoc.c:1157
+msgid "Where is command: "
+msgstr "Polecenie do znalezienia: "
+
+#: info/infodoc.c:1179
+#, c-format
+msgid "`%s' is not on any keys"
+msgstr "`%s' nie ma pod ¿adnym klawiszem"
+
+#: info/infodoc.c:1186
+#, c-format
+msgid "%s can only be invoked via %s."
+msgstr "%s mo¿na wywo³aæ tylko przez %s."
+
+#: info/infodoc.c:1190
+#, c-format
+msgid "%s can be invoked via %s."
+msgstr "%s mo¿na wywo³aæ przez %s."
+
+#: info/infodoc.c:1195
+#, c-format
+msgid "There is no function named `%s'"
+msgstr "Nie ma funkcji o nazwie `%s'"
+
+#: info/infokey.c:145
+#, c-format
+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"
+"Autorzy nie daj± ¯ADNYCH gwarancji. Ten program mo¿na rozprowadzaæ\n"
+"zachowuj±c warunki Powszechnej Licencji Publicznej GNU (General Public\n"
+"License).\n"
+"Wiêcej informacji na ten temat mo¿na znale¼æ w plikach o nazwie COPYING.\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:1500
+#, c-format
+msgid "Ignoring invalid infokey file `%s' - too small"
+msgstr "Zignorowany b³êdny plik infokey `%s' - zbyt ma³y"
+
+#: info/infomap.c:1503
+#, c-format
+msgid "Ignoring invalid infokey file `%s' - too big"
+msgstr "Zignorowany b³êdny plik infokey `%s' - zbyt du¿y"
+
+#: info/infomap.c:1516
+#, c-format
+msgid "Error reading infokey file `%s' - short read"
+msgstr "B³±d podczas czytania pliku infokey `%s' - skrócony odczyt"
+
+#: info/infomap.c:1535
+#, 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:1544
+#, 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:1560
+#, 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:1581
+#, 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:1716
+msgid "Bad data in infokey file -- some key bindings ignored"
+msgstr "B³êdne dane w pliku infokey - czê¶æ przypisañ klawiszy zignorowana"
+
+#: info/infomap.c:1766
+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:69
+msgid "Read the name of an Info command and describe it"
+msgstr "Odczytanie nazwy polecenia Info i opisanie go"
+
+#: info/m-x.c:73
+msgid "Describe command: "
+msgstr "Opis polecenia: "
+
+#: info/m-x.c:96
+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:140
+msgid "Cannot execute an `echo-area' command here."
+msgstr "Nie mo¿na tutaj wykonaæ polecenia `echo-area'."
+
+#: info/m-x.c:154
+#, c-format
+msgid "Undefined command: %s"
+msgstr "Niezdefiniowane polecenie: %s"
+
+#: info/m-x.c:160
+msgid "Set the height of the displayed window"
+msgstr "Ustawienie wysoko¶ci wy¶wietlanego okna"
+
+#: info/m-x.c:173
+#, c-format
+msgid "Set screen height to (%d): "
+msgstr "Ustawienie wysoko¶ci ekranu na (%d): "
+
+#: info/makedoc.c:162 info/makedoc.c:170
+#, 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:550
+#, c-format
+msgid "Couldn't manipulate the file %s.\n"
+msgstr "Nie mo¿na obrabiaæ pliku %s.\n"
+
+#: info/nodemenu.c:31
+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:202
+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:224
+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:304
+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:317
+msgid "Select visited node: "
+msgstr "Wybranie widocznego wêz³a: "
+
+#: info/nodemenu.c:337 info/session.c:2264
+#, c-format
+msgid "The reference disappeared! (%s)."
+msgstr "Odsy³acz znikn±³! (%s)."
+
+#: info/session.c:162
+#, 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:620
+msgid "Move down to the next line"
+msgstr "Przej¶cie w dó³ do nastêpnej linii"
+
+#: info/session.c:635
+msgid "Move up to the previous line"
+msgstr "Przej¶cie w górê do poprzedniej linii"
+
+#: info/session.c:650
+msgid "Move to the end of the line"
+msgstr "Przej¶cie na koniec linii"
+
+#: info/session.c:670
+msgid "Move to the start of the line"
+msgstr "Przej¶cie na pocz±tek linii"
+
+#: info/session.c:860 makeinfo/node.c:1424
+msgid "Next"
+msgstr "Nastêpny"
+
+#: info/session.c:863
+msgid "Following Next node..."
+msgstr "Przej¶cie do wêz³a Nastêpny..."
+
+#: info/session.c:881
+msgid "Selecting first menu item..."
+msgstr "Wybranie pierwszego elementu menu..."
+
+#: info/session.c:893
+msgid "Selecting Next node..."
+msgstr "Wybranie wêz³a Nastêpny..."
+
+#: info/session.c:964
+#, c-format
+msgid "Moving Up %d time(s), then Next."
+msgstr "Przej¶cie W górê %d raz(y), potem Nastêpny."
+
+#: info/session.c:988
+msgid "No more nodes within this document."
+msgstr "Nie ma wiêcej wêz³ów w tym dokumencie."
+
+#: info/session.c:1011
+msgid "No `Prev' for this node."
+msgstr "Nie ma wêz³a `Poprzedni' dla tego wêz³a."
+
+#: info/session.c:1014 info/session.c:1073
+msgid "Moving Prev in this window."
+msgstr "Przej¶cie do wêz³a Poprzedni w tym oknie."
+
+#: info/session.c:1030
+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:1034
+msgid "Moving Up in this window."
+msgstr "Przej¶cie do wêz³a W górê w tym oknie."
+
+#: info/session.c:1084
+msgid "Moving to `Prev's last menu item."
+msgstr "Przej¶cie do ostatniego elementu menu wêz³a Poprzedni."
+
+#: info/session.c:1095
+msgid "Move forwards or down through node structure"
+msgstr "Przej¶cie do przodu lub w dó³ struktury wêz³a"
+
+#: info/session.c:1111
+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:1205
+msgid "Scroll forward in this window"
+msgstr "Przewijanie do przodu w tym oknie"
+
+#: info/session.c:1213
+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:1221
+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:1229
+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:1237
+msgid "Scroll backward in this window"
+msgstr "Przewijanie do ty³u w tym oknie"
+
+#: info/session.c:1245
+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:1254
+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:1262
+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:1270
+msgid "Move to the start of this node"
+msgstr "Przej¶cie na pocz±tek tego wêz³a"
+
+#: info/session.c:1277
+msgid "Move to the end of this node"
+msgstr "Przej¶cie na koniec tego wêz³a"
+
+#: info/session.c:1284
+msgid "Scroll down by lines"
+msgstr "Przewijanie w dó³ po linii"
+
+#: info/session.c:1301
+msgid "Scroll up by lines"
+msgstr "Przewijanie w górê po linii"
+
+#: info/session.c:1319
+msgid "Scroll down by half screen size"
+msgstr "Przewijanie w dó³ po po³owie rozmiaru ekranu"
+
+#: info/session.c:1345
+msgid "Scroll up by half screen size"
+msgstr "Przewijanie w górê po po³owie rozmiaru ekranu"
+
+#: info/session.c:1374
+msgid "Select the next window"
+msgstr "Wybranie nastêpnego okna"
+
+#: info/session.c:1413
+msgid "Select the previous window"
+msgstr "Wybranie poprzedniego okna"
+
+#: info/session.c:1464
+msgid "Split the current window"
+msgstr "Podzielenie aktualnego okna"
+
+#: info/session.c:1545
+msgid "Delete the current window"
+msgstr "Usuniêcie aktualnego okna"
+
+#: info/session.c:1553
+msgid "Cannot delete a permanent window"
+msgstr "Nie mo¿na usun±æ sta³ego okna"
+
+#: info/session.c:1585
+msgid "Delete all other windows"
+msgstr "Usuniêcie wszystkich innych okien"
+
+#: info/session.c:1631
+msgid "Scroll the other window"
+msgstr "Przewijanie innego okna"
+
+#: info/session.c:1652
+msgid "Scroll the other window backward"
+msgstr "Przewijanie innego okna do ty³u"
+
+#: info/session.c:1658
+msgid "Grow (or shrink) this window"
+msgstr "Powiêkszenie (lub zmniejszenie) tego okna"
+
+#: info/session.c:1669
+msgid "Divide the available screen space among the visible windows"
+msgstr "Podzielenie dostêpnego miejsca na ekranie miêdzy widoczne okna"
+
+#: info/session.c:1676
+msgid "Toggle the state of line wrapping in the current window"
+msgstr "Zmiana stanu zawijania linii w aktualnym oknie"
+
+#: info/session.c:1848
+msgid "Select the Next node"
+msgstr "Wybranie wêz³a Nastêpny"
+
+#: info/session.c:1856
+msgid "Select the Prev node"
+msgstr "Wybranie wêz³a Poprzedni"
+
+#: info/session.c:1864
+msgid "Select the Up node"
+msgstr "Wybranie wêz³a W górê"
+
+#: info/session.c:1871
+msgid "Select the last node in this file"
+msgstr "Wybranie ostatniego wêz³a w tym pliku"
+
+#: info/session.c:1898 info/session.c:1931
+msgid "This window has no additional nodes"
+msgstr "To okno nie ma dodatkowych wêz³ów"
+
+#: info/session.c:1904
+msgid "Select the first node in this file"
+msgstr "Wybranie pierwszego wêz³a w tym pliku"
+
+#: info/session.c:1938
+msgid "Select the last item in this node's menu"
+msgstr "Wybranie ostatniego elementu w menu tego wêz³a"
+
+#: info/session.c:1944
+msgid "Select this menu item"
+msgstr "Wybranie tego elementu menu"
+
+#: info/session.c:1977
+#, c-format
+msgid "There aren't %d items in this menu."
+msgstr "Nie ma %d elementów w tym menu."
+
+#: info/session.c:2171 info/session.c:2172
+#, c-format
+msgid "Menu item (%s): "
+msgstr "Element menu (%s): "
+
+#: info/session.c:2175
+msgid "Menu item: "
+msgstr "Element menu: "
+
+#: info/session.c:2182 info/session.c:2183
+#, c-format
+msgid "Follow xref (%s): "
+msgstr "Przej¶cie za odno¶nikiem (%s): "
+
+#: info/session.c:2186
+msgid "Follow xref: "
+msgstr "Przej¶cie za odno¶nikiem: "
+
+#: info/session.c:2315
+msgid "Read a menu item and select its node"
+msgstr "Odczytanie elementu menu i wybranie jego wêz³a"
+
+#: info/session.c:2323
+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:2329
+msgid "Move to the start of this node's menu"
+msgstr "Przej¶cie na pocz±tek menu tego wêz³a"
+
+#: info/session.c:2353
+msgid "Visit as many menu items at once as possible"
+msgstr "Odwiedzenie jednocze¶nie jak najwiêkszej liczby elementów menu"
+
+#: info/session.c:2381
+msgid "Read a node name and select it"
+msgstr "Odczytanie nazwy wêz³a i wybranie go"
+
+#: info/session.c:2436 info/session.c:2441
+msgid "Goto node: "
+msgstr "Przej¶cie do wêz³a: "
+
+#: info/session.c:2505
+#, c-format
+msgid "No menu in node `%s'."
+msgstr "Brak menu w wê¼le `%s'."
+
+#: info/session.c:2551
+#, c-format
+msgid "No menu item `%s' in node `%s'."
+msgstr "Brak elementu menu `%s' w wê¼le `%s'."
+
+#: info/session.c:2581
+#, 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:2631
+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:2633
+msgid "Follow menus: "
+msgstr "Pod±¿anie za menu: "
+
+#: info/session.c:2826
+msgid "Find the node describing program invocation"
+msgstr "Szukanie wêz³a opisuj±cego wywo³anie programu"
+
+#: info/session.c:2828
+#, c-format
+msgid "Find Invocation node of [%s]: "
+msgstr "Szukanie wêz³a Invocation dla [%s]: "
+
+#: info/session.c:2866
+msgid "Read a manpage reference and select it"
+msgstr "Odczytanie odno¶nika do strony podrêcznika i wybranie go"
+
+#: info/session.c:2870
+msgid "Get Manpage: "
+msgstr "Pobranie strony podrêcznika: "
+
+#: info/session.c:2900
+msgid "Select the node `Top' in this file"
+msgstr "Wybranie wêz³a `Szczytowy' w tym pliku"
+
+#: info/session.c:2906
+msgid "Select the node `(dir)'"
+msgstr "Wybranie wêz³a `(dir)'"
+
+#: info/session.c:2923 info/session.c:2925
+#, c-format
+msgid "Kill node (%s): "
+msgstr "Zabicie wêz³a (%s): "
+
+#: info/session.c:2977
+#, c-format
+msgid "Cannot kill node `%s'"
+msgstr "Nie mo¿na zabiæ wêz³a `%s'"
+
+#: info/session.c:2987
+msgid "Cannot kill the last node"
+msgstr "Nie mo¿na zabiæ ostatniego wêz³a"
+
+#: info/session.c:3073
+msgid "Select the most recently selected node"
+msgstr "Wybranie ostatnio wybranego wêz³a"
+
+#: info/session.c:3079
+msgid "Kill this node"
+msgstr "Zabicie tego wêz³a"
+
+#: info/session.c:3087
+msgid "Read the name of a file and select it"
+msgstr "Odczytanie nazwy pliku i wybranie go"
+
+#: info/session.c:3091
+msgid "Find file: "
+msgstr "Szukanie pliku: "
+
+#: info/session.c:3108
+#, c-format
+msgid "Cannot find `%s'."
+msgstr "Nie mo¿na znale¼æ `%s'."
+
+#: info/session.c:3151 info/session.c:3269
+#, c-format
+msgid "Could not create output file `%s'."
+msgstr "Nie mo¿na utworzyæ pliku wyj¶ciowego `%s'."
+
+#: info/session.c:3165 info/session.c:3287 info/session.c:3347
+msgid "Done."
+msgstr "Gotowe."
+
+#: info/session.c:3220
+#, c-format
+msgid "Writing node %s..."
+msgstr "Zapisywanie wêz³a %s..."
+
+#: info/session.c:3296
+msgid "Pipe the contents of this node through INFO_PRINT_COMMAND"
+msgstr "Przepuszczenie zawarto¶ci tego pliku przez INFO_PRINT_COMMAND"
+
+#: info/session.c:3331
+#, c-format
+msgid "Cannot open pipe to `%s'."
+msgstr "Nie mo¿na otworzyæ potoku do `%s'."
+
+#: info/session.c:3337
+#, c-format
+msgid "Printing node %s..."
+msgstr "Drukowanie wêz³a %s..."
+
+#: info/session.c:3567
+#, c-format
+msgid "Searching subfile %s ..."
+msgstr "Szukanie podpliku %s ..."
+
+#: info/session.c:3619
+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:3626
+msgid "Read a string and search for it"
+msgstr "Odczytanie ³añcucha i poszukiwanie go"
+
+#: info/session.c:3634
+msgid "Read a string and search backward for it"
+msgstr "Odczytanie ³añcucha i poszukiwanie go w ty³"
+
+#: info/session.c:3670 info/session.c:3677
+#, c-format
+msgid "%s%sfor string [%s]: "
+msgstr "%s%s³añcucha [%s]: "
+
+#: info/session.c:3671 info/session.c:3678
+msgid "Search backward"
+msgstr "Poszukiwanie w ty³"
+
+#: info/session.c:3672 info/session.c:3678
+msgid "Search"
+msgstr "Poszukiwanie"
+
+#: info/session.c:3673 info/session.c:3679
+msgid " case-sensitively "
+msgstr " uwzglêdniaj±c wielko¶æ liter "
+
+#: info/session.c:3674 info/session.c:3679
+msgid " "
+msgstr " "
+
+#: info/session.c:3718
+msgid "Search failed."
+msgstr "Poszukiwanie nie powiod³o siê."
+
+#: info/session.c:3736
+msgid "Repeat last search in the same direction"
+msgstr "Powtórzenie ostatniego poszukiwania w tym samym kierunku"
+
+#: info/session.c:3739 info/session.c:3749
+msgid "No previous search string"
+msgstr "Brak poprzedniego szukanego ³añcucha"
+
+#: info/session.c:3746
+msgid "Repeat last search in the reverse direction"
+msgstr "Powtórzenie ostatniego poszukiwania w odwrotnym kierunku"
+
+#: info/session.c:3765 info/session.c:3771
+msgid "Search interactively for a string as you type it"
+msgstr "Interaktywne poszukiwanie ³añcucha w trakcie wpisywania go"
+
+#: info/session.c:3851
+msgid "I-search backward: "
+msgstr "Interaktywne poszukiwanie wstecz: "
+
+#: info/session.c:3853
+msgid "I-search: "
+msgstr "Interaktywne poszukiwanie: "
+
+#: info/session.c:3878 info/session.c:3880
+msgid "Failing "
+msgstr "Bez powodzenia "
+
+#: info/session.c:4340
+msgid "Move to the previous cross reference"
+msgstr "Przej¶cie do poprzedniego odsy³acza"
+
+#: info/session.c:4349
+msgid "Move to the next cross reference"
+msgstr "Przej¶cie do nastêpnego odsy³acza"
+
+#: info/session.c:4359
+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:4382
+msgid "Cancel current operation"
+msgstr "Anulowanie bie¿±cej operacji"
+
+#: info/session.c:4389
+msgid "Quit"
+msgstr "Wyj¶cie"
+
+#: info/session.c:4398
+msgid "Move the cursor to a specific line of the window"
+msgstr "Przesuniêcie kursora do podanej linii w oknie"
+
+#: info/session.c:4430
+msgid "Redraw the display"
+msgstr "Odrysowanie ekranu"
+
+#: info/session.c:4467
+msgid "Quit using Info"
+msgstr "Wyj¶cie z Info"
+
+#: info/session.c:4480
+msgid "Run command bound to this key's lowercase variant"
+msgstr "Uruchomienie polecenia przypisanego do wariantu klawisza z ma³± liter±"
+
+#: info/session.c:4491
+#, c-format
+msgid "Unknown command (%s)."
+msgstr "Nieznane polecenie (%s)."
+
+#: info/session.c:4494
+#, c-format
+msgid "\"%s\" is invalid"
+msgstr "\"%s\" jest niepoprawne"
+
+#: info/session.c:4495
+#, c-format
+msgid "`%s' is invalid"
+msgstr "`%s' jest niepoprawne"
+
+#: info/session.c:4709
+msgid "Add this digit to the current numeric argument"
+msgstr "Dodanie tej cyfry do aktualnego argumentu liczbowego"
+
+#: info/session.c:4718
+msgid "Start (or multiply by 4) the current numeric argument"
+msgstr "Rozpoczêcie (lub pomno¿enie przez 4) aktualnego argumentu liczbowego"
+
+#: info/session.c:4733
+msgid "Internally used by \\[universal-argument]"
+msgstr "Wewnêtrznie u¿ywane przez \\[universal-argument]"
+
+#: info/tilde.c:338
+#, 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:64
+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:68
+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:74
+msgid "Explain the use of a variable"
+msgstr "Wyja¶nienie u¿ycia zmiennej"
+
+#: info/variables.c:80
+msgid "Describe variable: "
+msgstr "Opisanie zmiennej: "
+
+#: info/variables.c:99
+msgid "Set the value of an Info variable"
+msgstr "Ustawienie warto¶ci zmiennej Info"
+
+#: info/variables.c:105
+msgid "Set variable: "
+msgstr "Ustawienie zmiennej: "
+
+#: info/variables.c:123
+#, c-format
+msgid "Set %s to value (%d): "
+msgstr "Ustawienie %s na warto¶æ (%d): "
+
+#: info/variables.c:164
+#, c-format
+msgid "Set %s to value (%s): "
+msgstr "Ustawienie %s na warto¶æ (%s): "
+
+#: info/window.c:1138
+msgid "--*** Tags out of Date ***"
+msgstr "--*** Znaczniki s± nieaktualne ***"
+
+#: info/window.c:1149
+msgid "-----Info: (), lines ----, "
+msgstr "-----Info: (), linii ----, "
+
+#: info/window.c:1156
+#, c-format
+msgid "-%s---Info: %s, %d lines --%s--"
+msgstr "-%s---Info: %s, %d linii --%s--"
+
+#: info/window.c:1160
+#, c-format
+msgid "-%s%s-Info: (%s)%s, %d lines --%s--"
+msgstr "-%s%s-Info: (%s)%s, %d linii --%s--"
+
+#: info/window.c:1167
+#, c-format
+msgid " Subfile: %s"
+msgstr " Podplik: %s"
+
+#: lib/getopt.c:551 lib/getopt.c:570
+#, c-format
+msgid "%s: option `%s' is ambiguous\n"
+msgstr "%s: opcja `%s' jest niejednoznaczna\n"
+
+#: lib/getopt.c:603 lib/getopt.c:607
+#, c-format
+msgid "%s: option `--%s' doesn't allow an argument\n"
+msgstr "%s: opcja `--%s' nie przyjmuje argumentów\n"
+
+#: lib/getopt.c:616 lib/getopt.c:621
+#, c-format
+msgid "%s: option `%c%s' doesn't allow an argument\n"
+msgstr "%s: opcja `%c%s' nie przyjmuje argumentów\n"
+
+#: lib/getopt.c:667 lib/getopt.c:689 lib/getopt.c:1020 lib/getopt.c:1042
+#, c-format
+msgid "%s: option `%s' requires an argument\n"
+msgstr "%s: opcja `%s' wymaga argumentu\n"
+
+#: lib/getopt.c:727 lib/getopt.c:730
+#, c-format
+msgid "%s: unrecognized option `--%s'\n"
+msgstr "%s: nierozpoznana opcja `--%s'\n"
+
+#: lib/getopt.c:738 lib/getopt.c:741
+#, c-format
+msgid "%s: unrecognized option `%c%s'\n"
+msgstr "%s: nierozpoznana opcja `%c%s'\n"
+
+#: lib/getopt.c:796 lib/getopt.c:799
+#, c-format
+msgid "%s: illegal option -- %c\n"
+msgstr "%s: nieprawid³owa opcja -- %c\n"
+
+#: lib/getopt.c:805 lib/getopt.c:808
+#, c-format
+msgid "%s: invalid option -- %c\n"
+msgstr "%s: b³êdna opcja -- %c\n"
+
+#: lib/getopt.c:863 lib/getopt.c:882 lib/getopt.c:1095 lib/getopt.c:1116
+#, c-format
+msgid "%s: option requires an argument -- %c\n"
+msgstr "%s: opcja wymaga argumentu -- %c\n"
+
+#: lib/getopt.c:935 lib/getopt.c:954
+#, c-format
+msgid "%s: option `-W %s' is ambiguous\n"
+msgstr "%s: opcja `-W %s' jest niejednoznaczna\n"
+
+#: lib/getopt.c:978 lib/getopt.c:999
+#, c-format
+msgid "%s: option `-W %s' doesn't allow an argument\n"
+msgstr "%s: opcja `-W %s' nie przyjmuje argumentu\n"
+
+#: makeinfo/cmds.c:520 makeinfo/cmds.c:542
+#, c-format
+msgid "arguments to @%s ignored"
+msgstr "zignorowano argumenty dla @%s"
+
+#: makeinfo/cmds.c:585
+msgid "January"
+msgstr "stycznia"
+
+#: makeinfo/cmds.c:585
+msgid "February"
+msgstr "lutego"
+
+#: makeinfo/cmds.c:585
+msgid "March"
+msgstr "marca"
+
+#: makeinfo/cmds.c:585
+msgid "April"
+msgstr "kwietnia"
+
+#: makeinfo/cmds.c:585
+msgid "May"
+msgstr "maja"
+
+#: makeinfo/cmds.c:586
+msgid "June"
+msgstr "czerwca"
+
+#: makeinfo/cmds.c:586
+msgid "July"
+msgstr "lipca"
+
+#: makeinfo/cmds.c:586
+msgid "August"
+msgstr "sierpnia"
+
+#: makeinfo/cmds.c:586
+msgid "September"
+msgstr "wrze¶nia"
+
+#: makeinfo/cmds.c:586
+msgid "October"
+msgstr "pa¼dziernika"
+
+#: makeinfo/cmds.c:587
+msgid "November"
+msgstr "listopada"
+
+#: makeinfo/cmds.c:587
+msgid "December"
+msgstr "grudnia"
+
+#: makeinfo/cmds.c:936
+#, c-format
+msgid "unlikely character %c in @var"
+msgstr "niechciany znak %c w @var"
+
+#: makeinfo/cmds.c:979
+msgid "@sc argument all uppercase, thus no effect"
+msgstr "argument @sc zawiera same wielkie litery, wiêc brak efektu"
+
+#: makeinfo/cmds.c:1034
+#, c-format
+msgid "`{' expected, but saw `%c'"
+msgstr "oczekiwano `{', ale napotkano `%c'"
+
+#: makeinfo/cmds.c:1074
+msgid "end of file inside verb block"
+msgstr "koniec pliku wewn±trz bloku verb"
+
+#: makeinfo/cmds.c:1082
+#, c-format
+msgid "`}' expected, but saw `%c'"
+msgstr "oczekiwano `}', ale napotkano `%c'"
+
+#: makeinfo/cmds.c:1112
+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:1305
+#, c-format
+msgid "%c%s is obsolete"
+msgstr "%c%s jest przestarza³e"
+
+#: makeinfo/cmds.c:1414
+#, 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:1763 makeinfo/cmds.c:1819 makeinfo/footnote.c:82
+#, c-format
+msgid "Bad argument to %c%s"
+msgstr "Z³y argument dla %c%s"
+
+#: makeinfo/cmds.c:1773 makeinfo/makeinfo.c:4142
+msgid "asis"
+msgstr "zachowaj"
+
+#: makeinfo/cmds.c:1775 makeinfo/cmds.c:1805 makeinfo/makeinfo.c:4144
+msgid "none"
+msgstr "brak"
+
+#: makeinfo/cmds.c:1789
+#, c-format
+msgid "Bad argument to @%s"
+msgstr "Z³y argument dla @%s"
+
+#: makeinfo/cmds.c:1803
+msgid "insert"
+msgstr "wstaw"
+
+#: makeinfo/defun.c:84
+msgid "Missing `}' in @def arg"
+msgstr "Brakuje `}' w argumencie @def"
+
+#: makeinfo/defun.c:403
+msgid "Function"
+msgstr "Funkcja"
+
+#: makeinfo/defun.c:406
+msgid "Macro"
+msgstr "Makro"
+
+#: makeinfo/defun.c:409
+msgid "Special Form"
+msgstr "Forma specjalna"
+
+#: makeinfo/defun.c:413
+msgid "Variable"
+msgstr "Zmienna"
+
+#: makeinfo/defun.c:416
+msgid "User Option"
+msgstr "Opcja u¿ytkownika"
+
+#: makeinfo/defun.c:420
+msgid "Instance Variable"
+msgstr "Instancja zmiennej"
+
+#: makeinfo/defun.c:424
+msgid "Method"
+msgstr "Metoda"
+
+#: makeinfo/defun.c:500 makeinfo/defun.c:505 makeinfo/defun.c:545
+#: makeinfo/defun.c:644 makeinfo/xml.c:2229
+msgid "of"
+msgstr "typu"
+
+#: makeinfo/defun.c:509 makeinfo/defun.c:513 makeinfo/defun.c:517
+#: makeinfo/defun.c:551 makeinfo/defun.c:650 makeinfo/xml.c:2234
+msgid "on"
+msgstr "na"
+
+#: 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:435
+#, c-format
+msgid "%s: getwd: %s, %s\n"
+msgstr "%s: getwd: %s, %s\n"
+
+#: makeinfo/files.c:638
+#, c-format
+msgid "`%s' omitted before output filename"
+msgstr "Pominiêto `%s' przed nazw± pliku wyj¶ciowego"
+
+#: makeinfo/files.c:646
+#, c-format
+msgid "`%s' omitted since writing to stdout"
+msgstr "Pominiêto `%s' przy zapisie na standardowe wyj¶cie"
+
+#: makeinfo/files.c:694
+msgid "Output buffer not empty."
+msgstr "Bufor wyj¶ciowy niepusty."
+
+#: makeinfo/footnote.c:150
+#, c-format
+msgid "`%c%s' needs an argument `{...}', not just `%s'"
+msgstr "`%c%s' wymaga argumentu `{...}', a nie tylko `%s'"
+
+#: makeinfo/footnote.c:165
+#, c-format
+msgid "No closing brace for footnote `%s'"
+msgstr "Nie zamkniêty nawias dla przypisu `%s'"
+
+#: makeinfo/footnote.c:198
+msgid "Footnote defined without parent node"
+msgstr "Zdefiniowano przypis bez wêz³a nadrzêdnego"
+
+#: makeinfo/footnote.c:210
+msgid "Footnotes inside footnotes are not allowed"
+msgstr "Przypisy wewn±trz przypisów nie s± dozwolone"
+
+#: makeinfo/footnote.c:302 makeinfo/index.c:189
+msgid "Footnotes"
+msgstr "Przypisy"
+
+#: makeinfo/html.c:87
+#, c-format
+msgid "%s: could not open --css-file: %s"
+msgstr "%s: nie mo¿na otworzyæ pliku css: %s"
+
+#: makeinfo/html.c:172
+#, c-format
+msgid "%s:%d: --css-file ended in comment"
+msgstr "%s:%d: plik css zakoñczy³ siê wewn±trz komentarza"
+
+#: makeinfo/html.c:207
+msgid "Untitled"
+msgstr "Bez tytu³u"
+
+#: makeinfo/html.c:422
+msgid "[unexpected] no html tag to pop"
+msgstr "[nieoczekiwane] brak znacznika html do zdjêcia"
+
+#: makeinfo/html.c:752
+#, c-format
+msgid "[unexpected] invalid node name: `%s'"
+msgstr "[nieoczekiwane] b³êdna nazwa wêz³a: `%s'"
+
+#: makeinfo/index.c:169
+#, c-format
+msgid "Unknown index `%s'"
+msgstr "Nieznany indeks `%s'"
+
+#: makeinfo/index.c:234
+#, 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:412
+#, c-format
+msgid "Index `%s' already exists"
+msgstr "Indeks `%s' ju¿ istnieje"
+
+#: makeinfo/index.c:455
+#, c-format
+msgid "Unknown index `%s' and/or `%s' in @synindex"
+msgstr "Nieznany indeks `%s' i/lub `%s' w @synindex"
+
+#: makeinfo/index.c:661
+msgid "(line )"
+msgstr "(linia )"
+
+#: makeinfo/index.c:669
+#, c-format
+msgid "(line %*d)"
+msgstr "(linia %*d)"
+
+#: makeinfo/index.c:750
+#, c-format
+msgid "Unknown index `%s' in @printindex"
+msgstr "Nieznany indeks `%s' w @printindex"
+
+#: makeinfo/index.c:819
+#, c-format
+msgid "Entry for index `%s' outside of any node"
+msgstr "Wpis dla indeksu `%s' poza jakimkolwiek wêz³em"
+
+#: makeinfo/index.c:822 makeinfo/index.c:858
+msgid "(outside of any node)"
+msgstr "(poza jakimkolwiek wêz³em)"
+
+#: makeinfo/index.c:919 makeinfo/index.c:925
+msgid "See "
+msgstr "Patrz "
+
+#: makeinfo/insertion.c:160
+msgid "@item not allowed in argument to @itemize"
+msgstr "@item nie jest dozwolone w argumencie @itemize"
+
+#: makeinfo/insertion.c:238
+msgid "Broken-Type in insertion_type_pname"
+msgstr "Broken-Type w insertion_type_pname"
+
+#: makeinfo/insertion.c:334
+msgid "Enumeration stack overflow"
+msgstr "Przepe³nienie stosu numerowania"
+
+#: makeinfo/insertion.c:366
+#, c-format
+msgid "lettering overflow, restarting at %c"
+msgstr "przepe³nienie, restart od %c"
+
+#: makeinfo/insertion.c:631
+#, c-format
+msgid "%s requires an argument: the formatter for %citem"
+msgstr "%s wymaga argumentu: formatowania dla %citem"
+
+#: makeinfo/insertion.c:719
+#, c-format
+msgid "%cfloat environments cannot be nested"
+msgstr "¦rodowiska %cfloat nie mog± byæ zagnie¿d¿one"
+
+#: makeinfo/insertion.c:973
+#, c-format
+msgid "`@end' expected `%s', but saw `%s'"
+msgstr "`@end' oczekiwa³o `%s', ale napotkano `%s'"
+
+#: makeinfo/insertion.c:1337
+#, c-format
+msgid "No matching `%cend %s'"
+msgstr "Brak pasuj±cego `%cend %s'"
+
+#: makeinfo/insertion.c:1592
+#, c-format
+msgid "%s requires letter or digit"
+msgstr "%s wymaga litery lub cyfry"
+
+#: makeinfo/insertion.c:1687
+msgid "end of file inside verbatim block"
+msgstr "koniec pliku wewn±trz bloku dos³ownego"
+
+#: makeinfo/insertion.c:1913
+#, c-format
+msgid "@%s not meaningful outside `@float' environment"
+msgstr "@%s nic nie znaczy poza ¶rodowiskiem `@float'"
+
+#: makeinfo/insertion.c:1949
+msgid "@menu seen before first @node, creating `Top' node"
+msgstr "napotkano @menu przed pierwszym @node, tworzenie wêz³a `Top'"
+
+#: makeinfo/insertion.c:1950
+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:1962
+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:2018
+#, c-format
+msgid "@%s not meaningful outside `@titlepage' and `@quotation' environments"
+msgstr "@%s nic nie znaczy poza ¶rodowiskami `@titlepage' i `@quotation'"
+
+#: makeinfo/insertion.c:2032
+#, c-format
+msgid "@%s not meaningful outside `@titlepage' environment"
+msgstr "@%s nic nie znaczy poza ¶rodowiskiem `@titlepage'"
+
+#: makeinfo/insertion.c:2063
+#, c-format
+msgid "Unmatched `%c%s'"
+msgstr "Niedopasowane `%c%s'"
+
+#: makeinfo/insertion.c:2068
+#, c-format
+msgid "`%c%s' needs something after it"
+msgstr "`%c%s' wymaga czego¶ po sobie"
+
+#: makeinfo/insertion.c:2074
+#, c-format
+msgid "Bad argument `%s' to `@%s', using `%s'"
+msgstr "Z³y argument `%s' dla `@%s', u¿ycie `%s'"
+
+#: makeinfo/insertion.c:2171
+#, c-format
+msgid "@%s not meaningful inside `@%s' block"
+msgstr "@%s nic nie znaczy wewn±trz bloku `@%s'"
+
+#: makeinfo/insertion.c:2180
+#, c-format
+msgid "@itemx not meaningful inside `%s' block"
+msgstr "@itemx nic nie znaczy wewn±trz bloku `%s'"
+
+#: makeinfo/insertion.c:2356
+#, c-format
+msgid "%c%s found outside of an insertion block"
+msgstr "znaleziono %c%s na zewn±trz bloku wstawki"
+
+#: makeinfo/lang.c:580
+#, 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:655
+#, c-format
+msgid "unrecognized encoding name `%s'"
+msgstr "nierozpoznana nazwa kodowania `%s'"
+
+#: makeinfo/lang.c:663
+#, c-format
+msgid "sorry, encoding `%s' not supported"
+msgstr "niestety kodowanie `%s' nie jest obs³ugiwane"
+
+#: makeinfo/lang.c:715
+#, c-format
+msgid "invalid encoded character `%s'"
+msgstr "b³êdnie zakodowany znak `%s'"
+
+#: makeinfo/lang.c:1009
+#, 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:1013
+#, 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:355
+#, 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:586
+#, c-format
+msgid "%cend macro not found"
+msgstr "nie znaleziono makra %cend"
+
+#: makeinfo/macro.c:624
+msgid "@quote-arg only useful for single-argument macros"
+msgstr "@quote-arg jest u¿yteczne tylko do makr jednoargumentowych"
+
+#: makeinfo/macro.c:660
+#, c-format
+msgid "mismatched @end %s with @%s"
+msgstr "niedopasowane @end %s do @%s"
+
+#: makeinfo/makeinfo.c:184
+#, c-format
+msgid "Too many errors! Gave up.\n"
+msgstr "Zbyt du¿o b³êdów! Poddajê siê.\n"
+
+#: makeinfo/makeinfo.c:302
+#, c-format
+msgid "%s:%d: warning: "
+msgstr "%s:%d: uwaga: "
+
+#: makeinfo/makeinfo.c:321 makeinfo/makeinfo.c:2260
+#, c-format
+msgid "Misplaced %c"
+msgstr "¬le umieszczone %c"
+
+#: makeinfo/makeinfo.c:340
+#, c-format
+msgid "Try `%s --help' for more information.\n"
+msgstr "Polecenie `%s --help' poda wiêcej informacji.\n"
+
+#: makeinfo/makeinfo.c:343
+#, c-format
+msgid "Usage: %s [OPTION]... TEXINFO-FILE...\n"
+msgstr "Sk³adnia: %s [OPCJA]... PLIK-TEXINFO...\n"
+
+#: makeinfo/makeinfo.c:346
+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:350
+#, c-format
+msgid ""
+"General options:\n"
+" --error-limit=NUM quit after NUM errors (default %d).\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"
+" --reference-limit=NUM warn about at most NUM references (default %"
+"d).\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"
+" --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"
+" --reference-limit=ILE ostrze¿enie o najwy¿ej ILU odsy³aczach\n"
+" (domy¶lnie %d).\n"
+" -v, --verbose wyja¶nianie co siê dzieje.\n"
+" --version wy¶wietlenie informacji o wersji i "
+"zakoñczenie.\n"
+
+#: makeinfo/makeinfo.c:364
+#, 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:372
+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 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 (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 (katalogu w przypadku "
+"dzielonego\n"
+" HTML), ignoruj±c wszelkie @setfilename.\n"
+
+#: makeinfo/makeinfo.c:386
+#, c-format
+msgid ""
+"Options for Info and plain text:\n"
+" --enable-encoding output accented and special characters in\n"
+" Info output based on @documentencoding.\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\n"
+" in which they are defined (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"
+" --enable-encoding zapis znaków z akcentami i specjalnych w "
+"pliku\n"
+" 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:403
+msgid ""
+"Options for HTML:\n"
+" --css-include=FILE include FILE in HTML <style> output;\n"
+" read stdin if FILE is -.\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"
+
+#: makeinfo/makeinfo.c:409
+#, 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:416
+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:425
+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:444
+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:452
+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:603
+#, 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:647 makeinfo/makeinfo.c:673 makeinfo/makeinfo.c:692
+#: makeinfo/makeinfo.c:722 makeinfo/makeinfo.c:743
+#, 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:660
+#, 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:665
+#, 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:707
+#, 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:732
+#, 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:806
+#, c-format
+msgid "%s: missing file argument.\n"
+msgstr "%s: brakuj±cy argument plikowy.\n"
+
+#: makeinfo/makeinfo.c:997 makeinfo/makeinfo.c:3991
+#, c-format
+msgid "Multiline command %c%s used improperly"
+msgstr "Niew³a¶ciwie u¿yte wieloliniowe polecenie %c%s"
+
+#: makeinfo/makeinfo.c:1000
+#, c-format
+msgid "Expected `%s'"
+msgstr "Oczekiwano `%s'"
+
+#: makeinfo/makeinfo.c:1479
+#, c-format
+msgid "Can't create directory `%s': %s"
+msgstr "Nie mo¿na utworzyæ katalogu `%s': %s"
+
+#: makeinfo/makeinfo.c:1525
+#, c-format
+msgid "No `%s' found in `%s'"
+msgstr "Nie znaleziono `%s' w `%s'"
+
+#: makeinfo/makeinfo.c:1605
+#, 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:1638
+#, c-format
+msgid "Making %s file `%s' from `%s'.\n"
+msgstr "Tworzenie pliku %s `%s' z `%s'.\n"
+
+#: makeinfo/makeinfo.c:1673
+#, c-format
+msgid "This is %s, produced by makeinfo version %s from %s.\n"
+msgstr "To jest %s, wyprodukowany przez makeinfo w wersji %s z %s.\n"
+
+#: makeinfo/makeinfo.c:1709
+#, 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 "
+"zachowaæ.\n"
+
+#: makeinfo/makeinfo.c:1773
+#, 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 "
+"zachowaæ.\n"
+
+#: makeinfo/makeinfo.c:2034
+#, c-format
+msgid "Unknown command `%s'"
+msgstr "Nieznane polecenie `%s'"
+
+#: makeinfo/makeinfo.c:2056
+#, 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:2314
+#, c-format
+msgid "%c%s expected braces"
+msgstr "%c%s oczekiwa³o nawiasów klamrowych"
+
+#: makeinfo/makeinfo.c:2327
+msgid "Unmatched }"
+msgstr "Niedopasowany }"
+
+#: makeinfo/makeinfo.c:2375
+msgid "NO_NAME!"
+msgstr "BEZ_NAZWY!"
+
+#: makeinfo/makeinfo.c:2396
+#, c-format
+msgid "%c%s missing close brace"
+msgstr "w %c%s brakuje klamry zamykaj±cej"
+
+#: makeinfo/makeinfo.c:3309
+#, c-format
+msgid "@image file `%s' (for HTML) not readable: %s"
+msgstr "Plik @image `%s' (dla HTML) nieczytelny: %s"
+
+#: makeinfo/makeinfo.c:3315
+#, c-format
+msgid "No such file `%s'"
+msgstr "Nie ma pliku `%s'"
+
+#: makeinfo/makeinfo.c:3447
+#, c-format
+msgid "@image file `%s' (for text) unreadable: %s"
+msgstr "Plik @image `%s' (dla tekstu) nieczytelny: %s"
+
+#: makeinfo/makeinfo.c:3456
+msgid "@image missing filename argument"
+msgstr "Po @image brakuje argumentu plikowego"
+
+#: makeinfo/makeinfo.c:3675
+#, c-format
+msgid "undefined flag: %s"
+msgstr "niezdefiniowana flaga: %s"
+
+#: makeinfo/makeinfo.c:3676
+#, c-format
+msgid "{No value for `%s'}"
+msgstr "{Brak warto¶ci dla `%s'}"
+
+#: makeinfo/makeinfo.c:3728
+#, c-format
+msgid "%c%s requires a name"
+msgstr "%c%s wymaga nazwy"
+
+#: makeinfo/makeinfo.c:3834
+#, c-format
+msgid "Reached eof before matching @end %s"
+msgstr "Osi±gniêto koniec pliku przed znalezieniem @end %s"
+
+#: makeinfo/makeinfo.c:4082
+#, 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:254
+#, c-format
+msgid "ignoring stray text `%s' after @multitable"
+msgstr "zignorowano zab³±kany tekst `%s' po @multitable"
+
+#: makeinfo/multi.c:393
+#, c-format
+msgid "Too many columns in multitable item (max %d)"
+msgstr "Zbyt du¿o kolumn w elemencie multitable (maksymalnie %d)"
+
+#: makeinfo/multi.c:555
+#, c-format
+msgid "[unexpected] cannot select column #%d in multitable"
+msgstr "[nieoczekiwane] nie mo¿na wybraæ kolumny #%d w multitable"
+
+#: makeinfo/multi.c:584
+msgid "ignoring @tab outside of multitable"
+msgstr "zignorowano @tab poza multitable"
+
+#: makeinfo/multi.c:632
+#, c-format
+msgid "** Multicolumn output from last row:\n"
+msgstr "** Wielokolumnowe wyj¶cie z ostatniego wiersza:\n"
+
+#: makeinfo/multi.c:635
+#, c-format
+msgid "* column #%d: output = %s\n"
+msgstr "* kolumna #%d: wyj¶cie = %s\n"
+
+#: makeinfo/node.c:280
+#, c-format
+msgid "Node `%s' previously defined at line %d"
+msgstr "Wêze³ `%s' poprzednio zdefiniowany w linii %d"
+
+#: makeinfo/node.c:648
+#, c-format
+msgid "Formatting node %s...\n"
+msgstr "Formatowanie wêz³a %s...\n"
+
+#: makeinfo/node.c:716
+#, 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:879
+#, 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:920 makeinfo/node.c:1151
+#, 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:923
+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:925 makeinfo/node.c:1154
+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:955
+#, 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:991
+msgid "Next:"
+msgstr "Nastêpny:"
+
+#: makeinfo/node.c:1007
+msgid "Previous:"
+msgstr "Poprzedni:"
+
+#: makeinfo/node.c:1021
+msgid "Up:"
+msgstr "W górê:"
+
+#: makeinfo/node.c:1148
+#, 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:1153
+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:1347
+#, 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:1363
+msgid "Menu"
+msgstr "Menu"
+
+#: makeinfo/node.c:1365
+msgid "Cross"
+msgstr "Odsy³acz"
+
+#: makeinfo/node.c:1447
+#, 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:1450
+#, c-format
+msgid "This node (%s) has the bad Prev"
+msgstr "Ten wêze³ (%s) ma z³e pole Poprzedni"
+
+#: makeinfo/node.c:1462
+msgid "Prev"
+msgstr "Poprzedni"
+
+#: makeinfo/node.c:1505
+#, c-format
+msgid "Prev field of node `%s' not pointed to"
+msgstr "Pole Poprzedni wêz³a `%s' nie wskazywane"
+
+#: makeinfo/node.c:1509
+#, c-format
+msgid "This node (%s) has the bad Next"
+msgstr "Ten wêze³ (%s) ma z³e pole Nastêpny"
+
+#: makeinfo/node.c:1521
+#, 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:1524
+msgid "Up"
+msgstr "W górê"
+
+#: makeinfo/node.c:1590
+#, 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:1619
+#, c-format
+msgid "node `%s' has been referenced %d times"
+msgstr "wêze³ `%s' by³ wskazywany %d razy"
+
+#: makeinfo/node.c:1633
+#, c-format
+msgid "unreferenced node `%s'"
+msgstr "nie wskazywany wêze³ `%s'"
+
+#: makeinfo/node.c:1723
+#, c-format
+msgid "Removing %s\n"
+msgstr "Usuwanie %s\n"
+
+#: makeinfo/node.c:1727
+#, 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:562
+#, c-format
+msgid "Internal error (search_sectioning) \"%s\"!"
+msgstr "B³±d wewnêtrzny (search_sectioning) \"%s\"!"
+
+#: makeinfo/sectioning.c:623
+#, 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:639
+#, c-format
+msgid "Node with %ctop as a section already exists"
+msgstr "Wêze³ z %ctop jako sekcj± ju¿ istnieje"
+
+#: makeinfo/sectioning.c:647
+#, c-format
+msgid "Here is the %ctop node"
+msgstr "Tutaj jest wêze³ %ctop"
+
+#: makeinfo/sectioning.c:663
+#, c-format
+msgid "%ctop used before %cnode, defaulting to %s"
+msgstr "%ctop u¿yty przed %cnode, u¿ycie domy¶lnego %s"
+
+#: makeinfo/toc.c:197 makeinfo/toc.c:271 makeinfo/toc.c:273
+msgid "Table of Contents"
+msgstr "Spis tre¶ci"
+
+#: makeinfo/toc.c:304 makeinfo/toc.c:337 makeinfo/toc.c:339
+msgid "Short Contents"
+msgstr "Skrót tre¶ci"
+
+#: makeinfo/xml.c:1605
+#, c-format
+msgid "@image file `%s' unreadable: %s"
+msgstr "Plik @image `%s' nieczytelny: %s"
+
+#: makeinfo/xml.c:2097
+msgid ""
+"@headitem as the last item of @multitable produces invalid Docbook documents"
+msgstr ""
+"@headitem jako ostatni element @multitable tworzy niepoprawne dokumenty "
+"Docbook"
+
+#: util/install-info.c:154
+#, c-format
+msgid "%s: warning: "
+msgstr "%s: uwaga: "
+
+#: util/install-info.c:203
+#, c-format
+msgid " for %s"
+msgstr " dla %s"
+
+#: util/install-info.c:426
+#, c-format
+msgid "\tTry `%s --help' for a complete list of options.\n"
+msgstr "\t`%s --help' poda pe³n± listê opcji.\n"
+
+#: util/install-info.c:434
+#, c-format
+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 ""
+"Sk³adnia: %s [OPCJA]... [PLIK-INFO [PLIK-KATALOGU]]\n"
+"\n"
+"Instalacja lub usuniêcie wpisów katalogu dla PLIKU-INFO w pliku katalogu\n"
+"Info PLIK-KATALOGU.\n"
+"\n"
+"Opcje:\n"
+" --delete usuniêcie istniej±cych wpisów dla PLIKU-INFO\n"
+" z PLIKU-KATALOGU; nie wstawianie nowych wpisów.\n"
+" --dir-file=NAZWA podanie nazwy pliku z katalogiem Info.\n"
+" Jest to odpowiednik u¿ycia argumentu PLIK-KATALOGU.\n"
+" --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"
+" --help wy¶wietlenie tego opisu i zakoñczenie.\n"
+" --info-file=PLIK podanie pliku Info do zainstalowania w katalogu.\n"
+" Jest to odpowiednik u¿ycia argumentu PLIK-INFO.\n"
+" --info-dir=KAT to samo co --dir-file=KAT/dir.\n"
+" --item=TEKST to samo co --entry TEKST.\n"
+" Wpis w katalogu Info jest elementem menu.\n"
+" --quiet pominiêcie ostrze¿eñ.\n"
+" --remove to samo co --delete.\n"
+" --section=SEKCJA umieszczenie wpisów dla tego pliku w danej SEKCJI "
+"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"
+" --version wy¶wietlenie informacji o wersji i zakoñczenie.\n"
+
+#: util/install-info.c:488
+#, 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"
+
+#: util/install-info.c:513
+#, 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"
+
+#: util/install-info.c:600
+#, c-format
+msgid "%s: empty file"
+msgstr "%s: pusty plik"
+
+#: util/install-info.c:913 util/install-info.c:953
+msgid "START-INFO-DIR-ENTRY without matching END-INFO-DIR-ENTRY"
+msgstr "START-INFO-DIR-ENTRY bez odpowiadaj±cego END-INFO-DIR-ENTRY"
+
+#: util/install-info.c:948
+msgid "END-INFO-DIR-ENTRY without matching START-INFO-DIR-ENTRY"
+msgstr "END-INFO-DIR-ENTRY bez odpowiadaj±cego START-INFO-DIR-ENTRY"
+
+#: util/install-info.c:1191 util/install-info.c:1201
+#, c-format
+msgid "%s: already have dir file: %s\n"
+msgstr "%s: plik katalogu ju¿ istnieje: %s\n"
+
+#: util/install-info.c:1236
+#, c-format
+msgid "%s: Specify the Info file only once.\n"
+msgstr "%s: Nale¿y podaæ plik Info tylko raz.\n"
+
+#: util/install-info.c:1284
+#, c-format
+msgid "excess command line argument `%s'"
+msgstr "nadmiarowy argument linii poleceñ `%s'"
+
+#: util/install-info.c:1288
+msgid "No input file specified; try --help for more information."
+msgstr "Nie podano pliku wej¶ciowego; --help mo¿e podaæ wiêcej informacji."
+
+#: util/install-info.c:1291
+msgid "No dir file specified; try --help for more information."
+msgstr "Nie podano pliku katalogu; --help mo¿e podaæ wiêcej informacji."
+
+#: util/install-info.c:1313
+#, c-format
+msgid "no info dir entry in `%s'"
+msgstr "brak wpisu do katalogu info w `%s'"
+
+#: util/install-info.c:1426
+#, c-format
+msgid "menu item `%s' already exists, for file `%s'"
+msgstr "element menu `%s' ju¿ istnieje, dla pliku `%s'"
+
+#: util/install-info.c:1449
+#, c-format
+msgid "no entries found for `%s'; nothing deleted"
+msgstr "nie znaleziono wpisów dla `%s'; nic nie usuniêto"
+
+#: util/texindex.c:252
+msgid "display this help and exit"
+msgstr "wy¶wietlenie tego opisu i zakoñczenie"
+
+#: util/texindex.c:254
+msgid "keep temporary files around after processing"
+msgstr "zachowanie plików tymczasowych po przetwarzaniu"
+
+#: util/texindex.c:256
+msgid "do not keep temporary files around after processing (default)"
+msgstr "nie zachowywanie plików tymczasowych po przetwarzaniu (domy¶lne)"
+
+#: util/texindex.c:258
+msgid "send output to FILE"
+msgstr "zapisanie wyj¶cia do PLIKU"
+
+#: util/texindex.c:260
+msgid "display version information and exit"
+msgstr "wy¶wietlenie informacji o wersji i zakoñczenie"
+
+#: util/texindex.c:270
+#, c-format
+msgid "Usage: %s [OPTION]... FILE...\n"
+msgstr "Sk³adnia: %s [OPCJA]... PLIK...\n"
+
+#: util/texindex.c:271
+#, 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:274
+#, 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:276
+#, c-format
+msgid ""
+"\n"
+"Options:\n"
+msgstr ""
+"\n"
+"Opcje:\n"
+
+#: util/texindex.c:876 util/texindex.c:910 util/texindex.c:983
+#: util/texindex.c:1011
+#, c-format
+msgid "%s: not a texinfo index file"
+msgstr "%s: nie jest plikiem indeksu texinfo"
+
+#: util/texindex.c:968
+#, c-format
+msgid "failure reopening %s"
+msgstr "b³±d podczas ponownego otwierania %s"
+
+#: util/texindex.c:1218
+#, c-format
+msgid "No page number in %s"
+msgstr "Brak numeru strony w %s"
+
+#: util/texindex.c:1291
+#, 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/macros/texinfo/contrib/texinfo-hu/texinfo/po/quot.sed b/macros/texinfo/contrib/texinfo-hu/texinfo/po/quot.sed
new file mode 100644
index 0000000000..0122c46318
--- /dev/null
+++ b/macros/texinfo/contrib/texinfo-hu/texinfo/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/macros/texinfo/contrib/texinfo-hu/texinfo/po/remove-potcdate.sin b/macros/texinfo/contrib/texinfo-hu/texinfo/po/remove-potcdate.sin
new file mode 100644
index 0000000000..2436c49e78
--- /dev/null
+++ b/macros/texinfo/contrib/texinfo-hu/texinfo/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/macros/texinfo/contrib/texinfo-hu/texinfo/po/ro.gmo b/macros/texinfo/contrib/texinfo-hu/texinfo/po/ro.gmo
new file mode 100644
index 0000000000..3a4129a8a9
--- /dev/null
+++ b/macros/texinfo/contrib/texinfo-hu/texinfo/po/ro.gmo
Binary files differ
diff --git a/macros/texinfo/contrib/texinfo-hu/texinfo/po/ro.po b/macros/texinfo/contrib/texinfo-hu/texinfo/po/ro.po
new file mode 100644
index 0000000000..7979e8f3ff
--- /dev/null
+++ b/macros/texinfo/contrib/texinfo-hu/texinfo/po/ro.po
@@ -0,0 +1,3125 @@
+# 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.
+#
+#
+msgid ""
+msgstr ""
+"Project-Id-Version: texinfo 4.7.90\n"
+"Report-Msgid-Bugs-To: bug-texinfo@gnu.org\n"
+"POT-Creation-Date: 2004-12-21 16:20-0800\n"
+"PO-Revision-Date: 2004-12-04 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"
+
+#: info/echo-area.c:284 info/session.c:689
+msgid "Move forward a character"
+msgstr "Mergi înainte un caracter"
+
+#: info/echo-area.c:296 info/session.c:705
+msgid "Move backward a character"
+msgstr "Mergi înapoi un caracter"
+
+#: info/echo-area.c:308
+msgid "Move to the start of this line"
+msgstr "Mergi la începutul acestei linii"
+
+#: info/echo-area.c:313
+msgid "Move to the end of this line"
+msgstr "Mergi la sfârºitul acestei linii"
+
+#: info/echo-area.c:321 info/session.c:723
+msgid "Move forward a word"
+msgstr "Mergi înainte un cuvânt"
+
+#: info/echo-area.c:361 info/session.c:772
+msgid "Move backward a word"
+msgstr "Mergi înapoi un cuvânt"
+
+#: info/echo-area.c:401
+msgid "Delete the character under the cursor"
+msgstr "ªterge caracterul de sub cursor"
+
+#: info/echo-area.c:431
+msgid "Delete the character behind the cursor"
+msgstr "ªterge caracterul din stânga cursorului"
+
+#: info/echo-area.c:452
+msgid "Cancel or quit operation"
+msgstr "Renunþã sau terminã operaþiunea"
+
+#: info/echo-area.c:467
+msgid "Accept (or force completion of) this line"
+msgstr "Acceptã (sau forþeazã completarea) acestei linii"
+
+#: info/echo-area.c:472
+msgid "Insert next character verbatim"
+msgstr "Insereazã urmãtorul caracter identic (verbatim)"
+
+#: info/echo-area.c:480
+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:653
+msgid "Kill the word preceding the cursor"
+msgstr "ªterge (kill) cuvãntul din stânga cursorului"
+
+#: info/echo-area.c:868 info/echo-area.c:924
+msgid "No completions"
+msgstr "Nici o completare"
+
+#: info/echo-area.c:870
+msgid "Not complete"
+msgstr "Nu e completat"
+
+#: info/echo-area.c:911
+msgid "List possible completions"
+msgstr "Enumerã completãrile posibile"
+
+#: info/echo-area.c:928
+msgid "Sole completion"
+msgstr "O singurã completare"
+
+#: info/echo-area.c:937
+msgid "One completion:\n"
+msgstr "O completare:\n"
+
+#: info/echo-area.c:938
+#, c-format
+msgid "%d completions:\n"
+msgstr "%d completãri:\n"
+
+#: info/echo-area.c:1085
+msgid "Insert completion"
+msgstr "Insereazã completarea"
+
+#: info/echo-area.c:1220
+msgid "Building completions..."
+msgstr "Construim completãrile..."
+
+#: info/echo-area.c:1340
+msgid "Scroll the completions window"
+msgstr "Scroll fereastra de completãri"
+
+#: info/footnotes.c:213
+msgid "Footnotes could not be displayed"
+msgstr "Notele de subsol nu pot fi afiºate"
+
+#: info/footnotes.c:239
+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:172
+msgid "Look up a string in the index for this file"
+msgstr "Cautã un ºir în indexul acestui fiºier"
+
+#: info/indices.c:199
+msgid "Finding index entries..."
+msgstr "Cãutãm intrãri în index..."
+
+#: info/indices.c:207
+msgid "No indices found."
+msgstr "Nici am gãsit nici un index."
+
+#: info/indices.c:217
+msgid "Index entry: "
+msgstr "Intrare în index: "
+
+#: info/indices.c:325
+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:335
+msgid "No previous index search string."
+msgstr "Nu existã nici un ºir cãutat anterior."
+
+#: info/indices.c:342
+msgid "No index entries."
+msgstr "Nici o intrare în index."
+
+#: info/indices.c:375
+#, c-format
+msgid "No %sindex entries containing `%s'."
+msgstr "Nici o intrare în %sindex conþinând `%s'."
+
+#: info/indices.c:376
+msgid "more "
+msgstr "mai mult"
+
+#: info/indices.c:386
+msgid "CAN'T SEE THIS"
+msgstr "NU POT VEDEA ACEASTA"
+
+#: info/indices.c:422
+#, 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:541
+#, c-format
+msgid "Scanning indices of `%s'..."
+msgstr "Scanãm indexurile pentru `%s'..."
+
+#: info/indices.c:596
+#, 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:622
+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:626
+msgid "Index apropos: "
+msgstr "Index apropos: "
+
+#: info/indices.c:654
+#, 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:295 makeinfo/makeinfo.c:766 util/install-info.c:1266
+#: util/texindex.c:343
+#, c-format
+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"
+
+#: info/info.c:498
+#, 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:590
+msgid " -b, --speech-friendly be friendly to speech synthesizers.\n"
+msgstr ""
+" -b, --speech-friendly fii prietenos cu sintetizatoarele de "
+"vorbire.\n"
+
+#: info/info.c:597
+#, c-format
+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 -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"
+
+#: info/info.c:635 info/infokey.c:918 makeinfo/makeinfo.c:465
+#: util/install-info.c:466 util/texindex.c:292
+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:669
+#, c-format
+msgid "Cannot find node `%s'."
+msgstr "Nu pot gãsi nodul `%s'."
+
+#: info/info.c:670
+#, c-format
+msgid "Cannot find node `(%s)%s'."
+msgstr "Nu pot gãsi nodul `(%s)%s'."
+
+#: info/info.c:671
+msgid "Cannot find a window!"
+msgstr "Nu pot gãsi o fereastrã!"
+
+#: info/info.c:672
+msgid "Point doesn't appear within this window's node!"
+msgstr "Punctul nu apare în interiorul nodului acestei ferestre!"
+
+#: info/info.c:673
+msgid "Cannot delete the last window."
+msgstr "Nu pot ºterge ultima fereastrã."
+
+#: info/info.c:674
+msgid "No menu in this node."
+msgstr "Nici un meniu în acest nod"
+
+#: info/info.c:675
+msgid "No footnotes in this node."
+msgstr "Nici o notã de subsol în acest nod."
+
+#: info/info.c:676
+msgid "No cross references in this node."
+msgstr "Nici o referinþã la acelaºi pasaj în acest nod."
+
+#: info/info.c:677
+#, c-format
+msgid "No `%s' pointer for this node."
+msgstr "Nici un pointer `%s' pentru acest nod."
+
+#: info/info.c:678
+#, c-format
+msgid "Unknown Info command `%c'; try `?' for help."
+msgstr "Comandã Info necunoscutã `%c';încercaþi `?' pentru ajutor."
+
+#: info/info.c:679
+#, 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:680
+msgid "You are already at the last page of this node."
+msgstr "Sunteþi deja la ultima paginã a acestui nod."
+
+#: info/info.c:681
+msgid "You are already at the first page of this node."
+msgstr "Sunteþi deja la prima paginã a acestui nod."
+
+#: info/info.c:682
+msgid "Only one window."
+msgstr "O singurã fereastrã."
+
+#: info/info.c:683
+msgid "Resulting window would be too small."
+msgstr "Fereastra rezultantã ar fi prea micã."
+
+#: info/info.c:684
+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:46 info/infodoc.c:95
+msgid ""
+"Basic Commands in Info Windows\n"
+"******************************\n"
+msgstr ""
+"Comenzi de bazã în Fereastra Info\n"
+"*********************************\n"
+
+#: info/infodoc.c:49
+msgid "\\%-10[quit-help] Quit this help.\n"
+msgstr "\\%-10[quit-help] Terminã acest ajutor.\n"
+
+#: info/infodoc.c:50
+msgid "\\%-10[quit] Quit Info altogether.\n"
+msgstr "\\%-10[quit] Terminã Info complet.\n"
+
+#: info/infodoc.c:51
+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:53 info/infodoc.c:102
+msgid ""
+"Selecting other nodes:\n"
+"----------------------\n"
+msgstr ""
+"Selectaþi alte noduri:\n"
+"----------------------\n"
+
+#: info/infodoc.c:55
+msgid "\\%-10[next-node] Move to the \"next\" node of this node.\n"
+msgstr "\\%-10[next-node] Mergi la \"urmãtorul\" nod al acestui nod.\n"
+
+#: info/infodoc.c:56
+msgid "\\%-10[prev-node] Move to the \"previous\" node of this node.\n"
+msgstr "\\%-10[prev-node] Mergi la nodul \"precedent\" al acestui nod.\n"
+
+#: info/infodoc.c:57
+msgid "\\%-10[up-node] Move \"up\" from this node.\n"
+msgstr "\\%-10[up-node] Mergi în \"sus\" de la acest nod.\n"
+
+#: info/infodoc.c:58
+msgid ""
+"\\%-10[menu-item] 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:60
+msgid ""
+"\\%-10[xref-item] Follow a cross reference. Reads name of reference.\n"
+msgstr ""
+"\\%-10[xref-item] Urmeazã o referinþã încruciºatã. Citeºte numele "
+"referinþei.\n"
+
+#: info/infodoc.c:61
+msgid "\\%-10[history-node] Move 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
+msgid ""
+"\\%-10[move-to-next-xref] Skip to next hypertext link within this node.\n"
+msgstr ""
+"\\%-10[move-to-next-xref] Sãri la urmãtoarea legãturã hypertext din acest "
+"nod.\n"
+
+#: info/infodoc.c:63
+msgid ""
+"\\%-10[move-to-prev-xref] Skip to previous hypertext link within this "
+"node.\n"
+msgstr ""
+"\\%-10[move-to-prev-xref] Sãri la legãtura hypertext precedentã din acest "
+"nod.\n"
+
+#: info/infodoc.c:64
+msgid ""
+"\\%-10[select-reference-this-line] Follow the hypertext link under cursor.\n"
+msgstr ""
+"\\%-10[select-reference-this-line] Urmeazã legãtura hypertext de sub "
+"cursor.\n"
+
+#: info/infodoc.c:65
+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"
+
+#: info/infodoc.c:66
+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"
+
+#: info/infodoc.c:68 info/infodoc.c:116
+msgid ""
+"Moving within a node:\n"
+"---------------------\n"
+msgstr ""
+"Mergi în interiorul nodului:\n"
+"----------------------------\n"
+
+#: info/infodoc.c:70
+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:71
+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:72
+msgid "\\%-10[next-line] Scroll forward 1 line.\n"
+msgstr "\\%-10[next-line] Scroll înainte 1 linie.\n"
+
+#: info/infodoc.c:73
+msgid "\\%-10[prev-line] Scroll backward 1 line.\n"
+msgstr "\\%-10[prev-line] Scroll înapoi 1 linie.\n"
+
+#: info/infodoc.c:74
+msgid "\\%-10[scroll-forward] Scroll forward a page.\n"
+msgstr "\\%-10[scroll-forward] Scroll înainte o paginã.\n"
+
+#: info/infodoc.c:75
+msgid "\\%-10[scroll-backward] Scroll backward a page.\n"
+msgstr "\\%-10[scroll-backward] Scroll înapoi o paginã.\n"
+
+#: info/infodoc.c:77 info/infodoc.c:125
+msgid ""
+"Other commands:\n"
+"---------------\n"
+msgstr ""
+"Alte comenzi:\n"
+"-------------\n"
+
+#: info/infodoc.c:79
+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"
+
+#: info/infodoc.c:80
+msgid "\\%-10[last-menu-item] Pick last item in node's menu.\n"
+msgstr "\\%-10[last-menu-item] Alege ultimul articol în meniul nodului.\n"
+
+#: info/infodoc.c:81
+msgid ""
+"\\%-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"
+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:83
+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"
+
+#: info/infodoc.c:85
+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"
+
+#: info/infodoc.c:87
+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"
+
+#: info/infodoc.c:98
+#, c-format
+msgid " %-10s Quit this help.\n"
+msgstr " %-10s Terminã acest ajutor.\n"
+
+#: info/infodoc.c:99
+#, c-format
+msgid " %-10s Quit Info altogether.\n"
+msgstr " %-10s Terminã Info complet.\n"
+
+#: info/infodoc.c:100
+#, c-format
+msgid " %-10s Invoke the Info tutorial.\n"
+msgstr " %-10s Invocã tuturialul Info.\n"
+
+#: info/infodoc.c:104
+#, 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:105
+#, 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:106
+#, c-format
+msgid " %-10s Move `up' from this node.\n"
+msgstr " %-10s Mergi în `sus' de la acest nod.\n"
+
+#: info/infodoc.c:107
+#, c-format
+msgid " %-10s Pick menu item specified by name.\n"
+msgstr " %-10s Alege articolul de meniu specificat prin nume.\n"
+
+#: info/infodoc.c:108
+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"
+
+#: info/infodoc.c:109
+#, 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:110
+#, 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:111
+#, c-format
+msgid " %-10s Skip to next hypertext link within this node.\n"
+msgstr " %-10s Sãri la urmãtoarea legãturã hypertext din acest nod.\n"
+
+#: info/infodoc.c:112
+#, c-format
+msgid " %-10s Follow the hypertext link under cursor.\n"
+msgstr " %-10s Sãri la legãtura hypertext de sub cursor.\n"
+
+#: info/infodoc.c:113
+#, 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:114
+#, 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:118
+#, c-format
+msgid " %-10s Scroll forward a page.\n"
+msgstr " %-10s Scroll înainte o paginã.\n"
+
+#: info/infodoc.c:119
+#, c-format
+msgid " %-10s Scroll backward a page.\n"
+msgstr " %-10s Scroll înapoi o paginã.\n"
+
+#: info/infodoc.c:120
+#, c-format
+msgid " %-10s Go to the beginning of this node.\n"
+msgstr " %-10s Mergi la începutul acestui nod.\n"
+
+#: info/infodoc.c:121
+#, 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:122
+#, c-format
+msgid " %-10s Scroll forward 1 line.\n"
+msgstr " %-10s Scroll înainte 1 linie.\n"
+
+#: info/infodoc.c:123
+#, c-format
+msgid " %-10s Scroll backward 1 line.\n"
+msgstr " %-10s Scroll înapoi 1 linie.\n"
+
+#: info/infodoc.c:127
+#, 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:128
+#, c-format
+msgid " %-10s Pick last item in node's menu.\n"
+msgstr " %-10s Alege ultimul articol în meniul nodului.\n"
+
+#: info/infodoc.c:129
+#, c-format
+msgid ""
+" %-10s Search for a specified string in the index entries of this Info\n"
+msgstr ""
+" %-10s Cautã ºirul specificat în intrãrile indexului acestui fiºier Info\n"
+
+#: info/infodoc.c:130
+msgid ""
+" file, and select the node referenced by the first entry "
+"found.\n"
+msgstr " ºi selecteazã nodul referit de prima intrare gãsitã.\n"
+
+#: info/infodoc.c:131
+#, c-format
+msgid " %-10s Move to node specified by name.\n"
+msgstr " %-10s Mergi la nodul specificat prin nume.\n"
+
+#: info/infodoc.c:132
+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"
+
+#: info/infodoc.c:133
+#, c-format
+msgid " %-10s Search forward for a specified string,\n"
+msgstr " %-10s Cautã înainte un ºir specificat,\n"
+
+#: info/infodoc.c:134 info/infodoc.c:136
+msgid ""
+" and select the node in which the next occurrence is found.\n"
+msgstr " ºi selecteazã nodul în care acesta este gãsit.\n"
+
+#: info/infodoc.c:135
+#, c-format
+msgid " %-10s Search backward for a specified string\n"
+msgstr " %-10s Cautã înapoi un ºir specificat\n"
+
+#: info/infodoc.c:316
+msgid "The current search path is:\n"
+msgstr "Calea curentã de cãutare este:\n"
+
+#: info/infodoc.c:320
+msgid ""
+"Commands available in Info windows:\n"
+"\n"
+msgstr ""
+"Comenzile disponibile în fereastra Info:\n"
+"\n"
+
+#: info/infodoc.c:324
+msgid ""
+"Commands available in the echo area:\n"
+"\n"
+msgstr ""
+"Comenzile disponibile în zona de ecou:\n"
+"\n"
+
+#: info/infodoc.c:347
+#, 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:351
+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:375
+msgid "--- Use `\\[history-node]' or `\\[kill-node]' to exit ---\n"
+msgstr ""
+"--- Folosiþi `\\[history-node]' sau `\\[kill-node]' pentru a termina ---\n"
+
+#: info/infodoc.c:485
+msgid "Display help message"
+msgstr "Afiºeazã mesaj de ajutor"
+
+#: info/infodoc.c:503
+msgid "Visit Info node `(info)Help'"
+msgstr "Viziteazã nodul Info `(info)Ajutor'"
+
+#: info/infodoc.c:641
+msgid "Print documentation for KEY"
+msgstr "Tipãreºte documentaþie pentru tastã (KEY)"
+
+#: info/infodoc.c:653
+#, c-format
+msgid "Describe key: %s"
+msgstr "Descrie tastã (key): %s"
+
+#: info/infodoc.c:664
+#, c-format
+msgid "ESC %s is undefined."
+msgstr "ESC %s nu este definit(ã)."
+
+#: info/infodoc.c:680 info/infodoc.c:709
+#, c-format
+msgid "%s is undefined."
+msgstr "%s nu este definit(ã)."
+
+#: info/infodoc.c:730
+#, c-format
+msgid "%s is defined to %s."
+msgstr "%s este definit(ã) ca %s."
+
+#: info/infodoc.c:1153
+msgid "Show what to type to execute a given command"
+msgstr "Aratã ce trebuie tasta pentru a executa o anumitã comandã"
+
+#: info/infodoc.c:1157
+msgid "Where is command: "
+msgstr "Unde este comanda: "
+
+#: info/infodoc.c:1179
+#, c-format
+msgid "`%s' is not on any keys"
+msgstr "`%s' nu este pe nici o tastã"
+
+#: info/infodoc.c:1186
+#, c-format
+msgid "%s can only be invoked via %s."
+msgstr "%s poate fi invocat doar via %s."
+
+#: info/infodoc.c:1190
+#, c-format
+msgid "%s can be invoked via %s."
+msgstr "%s poate fi invocat via %s."
+
+#: info/infodoc.c:1195
+#, c-format
+msgid "There is no function named `%s'"
+msgstr "Nu existã nii o funcþie numitã `%s'"
+
+#: info/infokey.c:145
+#, c-format
+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"
+"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"
+
+#: 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:1500
+#, c-format
+msgid "Ignoring invalid infokey file `%s' - too small"
+msgstr "Ignorãm fiºier infokey incorect `%s' - prea mic"
+
+#: info/infomap.c:1503
+#, c-format
+msgid "Ignoring invalid infokey file `%s' - too big"
+msgstr "Ignorãm fiºier infokey incorect `%s' - prea mare"
+
+#: info/infomap.c:1516
+#, c-format
+msgid "Error reading infokey file `%s' - short read"
+msgstr "Eroare la citirea fiºierului infokey `%s' - citit scurt"
+
+#: info/infomap.c:1535
+#, 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:1544
+#, 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:1560
+#, 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:1581
+#, 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:1716
+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:1766
+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:69
+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:73
+msgid "Describe command: "
+msgstr "Descrie comanda: "
+
+#: info/m-x.c:96
+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:140
+msgid "Cannot execute an `echo-area' command here."
+msgstr "Nu pot executa o comandã `zonã ecou' aici."
+
+#: info/m-x.c:154
+#, c-format
+msgid "Undefined command: %s"
+msgstr "Comandã nedefinitã: %s"
+
+#: info/m-x.c:160
+msgid "Set the height of the displayed window"
+msgstr "Seteazã înãlþimea ferestrei de afiºare"
+
+#: info/m-x.c:173
+#, c-format
+msgid "Set screen height to (%d): "
+msgstr "Seteazã înãlþimea ecranului ls (%d): "
+
+#: info/makedoc.c:162 info/makedoc.c:170
+#, 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:550
+#, c-format
+msgid "Couldn't manipulate the file %s.\n"
+msgstr "Nu ap putut manipula fiºierul %s.\n"
+
+#: info/nodemenu.c:31
+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:202
+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:224
+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:304
+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:317
+msgid "Select visited node: "
+msgstr "Selecteazã nodul vizitat: "
+
+#: info/nodemenu.c:337 info/session.c:2264
+#, c-format
+msgid "The reference disappeared! (%s)."
+msgstr "Referinþa a dispãrut! (%s)."
+
+#: info/session.c:162
+#, 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:620
+msgid "Move down to the next line"
+msgstr "Mergi la linia urmãtoare"
+
+#: info/session.c:635
+msgid "Move up to the previous line"
+msgstr "Mergi la linia precedentã"
+
+#: info/session.c:650
+msgid "Move to the end of the line"
+msgstr "Mergi la sfârºitul liniei"
+
+#: info/session.c:670
+msgid "Move to the start of the line"
+msgstr "Mergi la începutul liniei"
+
+#: info/session.c:860 makeinfo/node.c:1424
+msgid "Next"
+msgstr "Urmãtor"
+
+#: info/session.c:863
+msgid "Following Next node..."
+msgstr "Urmeazã nodul Urmãtor..."
+
+#: info/session.c:881
+msgid "Selecting first menu item..."
+msgstr "Selectare primul articol din meniu..."
+
+#: info/session.c:893
+msgid "Selecting Next node..."
+msgstr "Selectare nod Urmãtor..."
+
+#: info/session.c:964
+#, c-format
+msgid "Moving Up %d time(s), then Next."
+msgstr "Merg în Sus %d ori, apoi Urmãtor."
+
+#: info/session.c:988
+msgid "No more nodes within this document."
+msgstr "Nu mai sunt alte noduri în acest document."
+
+#: info/session.c:1011
+msgid "No `Prev' for this node."
+msgstr "Nici un `Prec' pentru acest nod."
+
+#: info/session.c:1014 info/session.c:1073
+msgid "Moving Prev in this window."
+msgstr "Mut Prec în aceatã fereastã"
+
+#: info/session.c:1030
+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:1034
+msgid "Moving Up in this window."
+msgstr "Merg în Sus în aceastã fe"
+
+#: info/session.c:1084
+msgid "Moving to `Prev's last menu item."
+msgstr "Merg la ultimul articol din meniul `Prec'"
+
+#: info/session.c:1095
+msgid "Move forwards or down through node structure"
+msgstr "Mergi înainte sau jos prin structura de noduri"
+
+#: info/session.c:1111
+msgid "Move backwards or up through node structure"
+msgstr "Mergi înapoi sau sus prin structura de noduri"
+
+#: info/session.c:1205
+msgid "Scroll forward in this window"
+msgstr "Scroll înainte în aceastã fereastrã"
+
+#: info/session.c:1213
+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:1221
+msgid "Scroll forward in this window staying within node"
+msgstr "Scroll înainte în aceastã fereastrã, rãmâi în nod"
+
+#: info/session.c:1229
+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:1237
+msgid "Scroll backward in this window"
+msgstr "Scroll înapoi în acestã fereastrã"
+
+#: info/session.c:1245
+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:1254
+msgid "Scroll backward in this window staying within node"
+msgstr "Scroll înapoi în aceastã fereastrã, rãmâi în nod"
+
+#: info/session.c:1262
+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:1270
+msgid "Move to the start of this node"
+msgstr "Mergi la începutul acestui nod"
+
+#: info/session.c:1277
+msgid "Move to the end of this node"
+msgstr "Mergi la sfârºitul acestui nod"
+
+#: info/session.c:1284
+msgid "Scroll down by lines"
+msgstr "Scroll jos pe linii"
+
+#: info/session.c:1301
+msgid "Scroll up by lines"
+msgstr "Scroll sus pe linii"
+
+#: info/session.c:1319
+msgid "Scroll down by half screen size"
+msgstr "Scroll jos jumãtate de ecran"
+
+#: info/session.c:1345
+msgid "Scroll up by half screen size"
+msgstr "Scroll sus jumãtate de ecran"
+
+#: info/session.c:1374
+msgid "Select the next window"
+msgstr "Selecteazã fereastra urmãtoare"
+
+#: info/session.c:1413
+msgid "Select the previous window"
+msgstr "Selecteazã fereastra precedentã"
+
+#: info/session.c:1464
+msgid "Split the current window"
+msgstr "Împarte fereastra curentã"
+
+#: info/session.c:1545
+msgid "Delete the current window"
+msgstr "ªterge fereastra curentã"
+
+#: info/session.c:1553
+msgid "Cannot delete a permanent window"
+msgstr "Nu pot ºterge o fereastrã permanentã"
+
+#: info/session.c:1585
+msgid "Delete all other windows"
+msgstr "ªterge toate celelalte ferestre"
+
+#: info/session.c:1631
+msgid "Scroll the other window"
+msgstr "Scroll-eazã cealaltã fereastrã"
+
+#: info/session.c:1652
+msgid "Scroll the other window backward"
+msgstr "Scroll-eazã cealaltã fereastrã înapoi"
+
+#: info/session.c:1658
+msgid "Grow (or shrink) this window"
+msgstr "Creºte sau micºoreazã aceastã fereastrã"
+
+#: info/session.c:1669
+msgid "Divide the available screen space among the visible windows"
+msgstr "Împarte spaþiul de ecran disponibil între ferestrele vizibile"
+
+#: info/session.c:1676
+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:1848
+msgid "Select the Next node"
+msgstr "Selecteazã nodul Urmãtor"
+
+#: info/session.c:1856
+msgid "Select the Prev node"
+msgstr "Selectezã nodul Prec"
+
+#: info/session.c:1864
+msgid "Select the Up node"
+msgstr "Selecteazã nodul Sus"
+
+#: info/session.c:1871
+msgid "Select the last node in this file"
+msgstr "Selecteazã ultimul nod din acest fiºier"
+
+#: info/session.c:1898 info/session.c:1931
+msgid "This window has no additional nodes"
+msgstr "Acestã fereastrã nu mai are nici un nod"
+
+#: info/session.c:1904
+msgid "Select the first node in this file"
+msgstr "Selecteazã primul nod din acest fiºier"
+
+#: info/session.c:1938
+msgid "Select the last item in this node's menu"
+msgstr "Selecteazã ultimul articol din meniul acestui nod"
+
+#: info/session.c:1944
+msgid "Select this menu item"
+msgstr "Selecteazã acest articol de meniu"
+
+#: info/session.c:1977
+#, c-format
+msgid "There aren't %d items in this menu."
+msgstr "Nu existã %d articole în acest meniu"
+
+#: info/session.c:2171 info/session.c:2172
+#, c-format
+msgid "Menu item (%s): "
+msgstr "Articol meniu (%s): "
+
+#: info/session.c:2175
+msgid "Menu item: "
+msgstr "Articol meniu: "
+
+#: info/session.c:2182 info/session.c:2183
+#, c-format
+msgid "Follow xref (%s): "
+msgstr "Urmeazã ref (%s): "
+
+#: info/session.c:2186
+msgid "Follow xref: "
+msgstr "Urmeazã ref: "
+
+#: info/session.c:2315
+msgid "Read a menu item and select its node"
+msgstr "Citeºte un articol de meniu ºi selecteazã nodul sãu"
+
+#: info/session.c:2323
+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:2329
+msgid "Move to the start of this node's menu"
+msgstr "Mergi la începutul meniului acestui nod"
+
+#: info/session.c:2353
+msgid "Visit as many menu items at once as possible"
+msgstr "Viziteazã cât mai multe articole de meniu posibile deodatã"
+
+#: info/session.c:2381
+msgid "Read a node name and select it"
+msgstr "Citeºte numele unui nod ºi selecteazã-l"
+
+#: info/session.c:2436 info/session.c:2441
+msgid "Goto node: "
+msgstr "Du-te la nod: "
+
+#: info/session.c:2505
+#, c-format
+msgid "No menu in node `%s'."
+msgstr "Nici un meniu în nod `%s'."
+
+#: info/session.c:2551
+#, c-format
+msgid "No menu item `%s' in node `%s'."
+msgstr "Nici un articol de meniu `%s' în nod `%s'."
+
+#: info/session.c:2581
+#, 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:2631
+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:2633
+msgid "Follow menus: "
+msgstr "Urmeazã meniurile: "
+
+#: info/session.c:2826
+msgid "Find the node describing program invocation"
+msgstr "Gãseºte nodul ce descrie invocarea programului"
+
+#: info/session.c:2828
+#, c-format
+msgid "Find Invocation node of [%s]: "
+msgstr "Gãseºte nodul Invocare pentru [%s]: "
+
+#: info/session.c:2866
+msgid "Read a manpage reference and select it"
+msgstr "Citeºte o referinþã de paginã de manul ºi selecteazã-o"
+
+#: info/session.c:2870
+msgid "Get Manpage: "
+msgstr "Obþine paginã manual (manpage): "
+
+#: info/session.c:2900
+msgid "Select the node `Top' in this file"
+msgstr "Selecteazã nodul `Vârf' în acest fiºier"
+
+#: info/session.c:2906
+msgid "Select the node `(dir)'"
+msgstr "Selecteazã nodul `(dir)'"
+
+#: info/session.c:2923 info/session.c:2925
+#, c-format
+msgid "Kill node (%s): "
+msgstr "Distruge nodul (%s): "
+
+#: info/session.c:2977
+#, c-format
+msgid "Cannot kill node `%s'"
+msgstr "Nu pot distruge nodul `%s'"
+
+#: info/session.c:2987
+msgid "Cannot kill the last node"
+msgstr "Nu pot distruge ultimul nod"
+
+#: info/session.c:3073
+msgid "Select the most recently selected node"
+msgstr "Selecteazã cel mai recent nod selectat"
+
+#: info/session.c:3079
+msgid "Kill this node"
+msgstr "Distruge acest nod"
+
+#: info/session.c:3087
+msgid "Read the name of a file and select it"
+msgstr "Citeºte numele unui fiºier ºi selecteazã-l"
+
+#: info/session.c:3091
+msgid "Find file: "
+msgstr "Gãseºte fiºier: "
+
+#: info/session.c:3108
+#, c-format
+msgid "Cannot find `%s'."
+msgstr "Nu pot gãsi `%s'."
+
+#: info/session.c:3151 info/session.c:3269
+#, c-format
+msgid "Could not create output file `%s'."
+msgstr "Nu am putut crea fiºier ieºire `%s'."
+
+#: info/session.c:3165 info/session.c:3287 info/session.c:3347
+msgid "Done."
+msgstr "Terminat."
+
+#: info/session.c:3220
+#, c-format
+msgid "Writing node %s..."
+msgstr "Scriu nod %s..."
+
+#: info/session.c:3296
+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:3331
+#, c-format
+msgid "Cannot open pipe to `%s'."
+msgstr "Nu pot deschide conexiune (pipe) cãtre `%s'."
+
+#: info/session.c:3337
+#, c-format
+msgid "Printing node %s..."
+msgstr "Tipãresc nod %s..."
+
+#: info/session.c:3567
+#, c-format
+msgid "Searching subfile %s ..."
+msgstr "Caut subfiºier %s ..."
+
+#: info/session.c:3619
+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:3626
+msgid "Read a string and search for it"
+msgstr "Citeºte un ºir ºi cautã-l"
+
+#: info/session.c:3634
+msgid "Read a string and search backward for it"
+msgstr "Citeºte un ºir ºi cautã-l înapoi"
+
+#: info/session.c:3670 info/session.c:3677
+#, c-format
+msgid "%s%sfor string [%s]: "
+msgstr "%s%s pentru ºir [%s]: "
+
+#: info/session.c:3671 info/session.c:3678
+msgid "Search backward"
+msgstr "Cautã înapoi"
+
+#: info/session.c:3672 info/session.c:3678
+msgid "Search"
+msgstr "Cautã"
+
+#: info/session.c:3673 info/session.c:3679
+msgid " case-sensitively "
+msgstr " þinând cont de litere mari/mici"
+
+#: info/session.c:3674 info/session.c:3679
+msgid " "
+msgstr " "
+
+#: info/session.c:3718
+msgid "Search failed."
+msgstr "Cãutare eºuatã."
+
+#: info/session.c:3736
+msgid "Repeat last search in the same direction"
+msgstr "Repetã ultima cãutare în aceeaºi direcþie"
+
+#: info/session.c:3739 info/session.c:3749
+msgid "No previous search string"
+msgstr "Nici un ºir cãutat anterior"
+
+#: info/session.c:3746
+msgid "Repeat last search in the reverse direction"
+msgstr "Repetã ultima cãutare în direcþie opusã"
+
+#: info/session.c:3765 info/session.c:3771
+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:3851
+msgid "I-search backward: "
+msgstr "I-cautã înapoi: "
+
+#: info/session.c:3853
+msgid "I-search: "
+msgstr "I-cautã: "
+
+#: info/session.c:3878 info/session.c:3880
+msgid "Failing "
+msgstr "Eºuez "
+
+#: info/session.c:4340
+msgid "Move to the previous cross reference"
+msgstr "Mergi la referinþa precedentã"
+
+#: info/session.c:4349
+msgid "Move to the next cross reference"
+msgstr "Mergi la referinþa urmãtoare"
+
+#: info/session.c:4359
+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:4382
+msgid "Cancel current operation"
+msgstr "Renunþã la operaþia curentã"
+
+#: info/session.c:4389
+msgid "Quit"
+msgstr "Ieºi"
+
+#: info/session.c:4398
+msgid "Move the cursor to a specific line of the window"
+msgstr "Mutã cursorul la o anumitã linie din fereastrã"
+
+#: info/session.c:4430
+msgid "Redraw the display"
+msgstr "Redeseneazã ecranul"
+
+#: info/session.c:4467
+msgid "Quit using Info"
+msgstr "Ieºi din Info"
+
+#: info/session.c:4480
+msgid "Run command bound to this key's lowercase variant"
+msgstr "Ruleazã comanda legatã de litera micã de pe tastã"
+
+#: info/session.c:4491
+#, c-format
+msgid "Unknown command (%s)."
+msgstr "Comandã necunoscutã (%s)."
+
+#: info/session.c:4494
+#, c-format
+msgid "\"%s\" is invalid"
+msgstr "\"%s\" este invalid"
+
+#: info/session.c:4495
+#, c-format
+msgid "`%s' is invalid"
+msgstr "`%s' este invalid"
+
+#: info/session.c:4709
+msgid "Add this digit to the current numeric argument"
+msgstr "Adaugã aceastã cifrã la argumentul numeric curent"
+
+#: info/session.c:4718
+msgid "Start (or multiply by 4) the current numeric argument"
+msgstr "Începe (sau înmulþeºte cu 4) argumentul numeric curent"
+
+#: info/session.c:4733
+msgid "Internally used by \\[universal-argument]"
+msgstr "Folosit intern de \\[argument-universal]"
+
+#: info/tilde.c:338
+#, 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:64
+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:68
+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:74
+msgid "Explain the use of a variable"
+msgstr "Explicã folosirea unei variabile"
+
+#: info/variables.c:80
+msgid "Describe variable: "
+msgstr "Descrie variabila: "
+
+#: info/variables.c:99
+msgid "Set the value of an Info variable"
+msgstr "Seteazã valoarea unei variabile Info"
+
+#: info/variables.c:105
+msgid "Set variable: "
+msgstr "Seteazã variabilã: "
+
+#: info/variables.c:123
+#, c-format
+msgid "Set %s to value (%d): "
+msgstr "Seteazã %s cu valoarea (%d): "
+
+#: info/variables.c:164
+#, c-format
+msgid "Set %s to value (%s): "
+msgstr "Seteazã %s cu valoarea (%s): "
+
+#: info/window.c:1138
+msgid "--*** Tags out of Date ***"
+msgstr "--*** Tag-uri Vechi ***"
+
+#: info/window.c:1149
+msgid "-----Info: (), lines ----, "
+msgstr "-----Info: (), linii ----, "
+
+#: info/window.c:1156
+#, c-format
+msgid "-%s---Info: %s, %d lines --%s--"
+msgstr "-%s---Info: %s, %d linii --%s--"
+
+#: info/window.c:1160
+#, c-format
+msgid "-%s%s-Info: (%s)%s, %d lines --%s--"
+msgstr "-%s%s-Info: (%s)%s, %d linii --%s--"
+
+#: info/window.c:1167
+#, c-format
+msgid " Subfile: %s"
+msgstr " Subfiºier: %s"
+
+#: lib/getopt.c:551 lib/getopt.c:570
+#, c-format
+msgid "%s: option `%s' is ambiguous\n"
+msgstr "%s: opþiunea `%s' este ambiguã\n"
+
+#: lib/getopt.c:603 lib/getopt.c:607
+#, c-format
+msgid "%s: option `--%s' doesn't allow an argument\n"
+msgstr "%s: opþiunea `--%s' nu permite un argument\n"
+
+#: lib/getopt.c:616 lib/getopt.c:621
+#, c-format
+msgid "%s: option `%c%s' doesn't allow an argument\n"
+msgstr "%s: opþiunea `%c%s' nu permite un argument\n"
+
+#: lib/getopt.c:667 lib/getopt.c:689 lib/getopt.c:1020 lib/getopt.c:1042
+#, c-format
+msgid "%s: option `%s' requires an argument\n"
+msgstr "%s: opþiunea `%s' necesitã un argument\n"
+
+#: lib/getopt.c:727 lib/getopt.c:730
+#, c-format
+msgid "%s: unrecognized option `--%s'\n"
+msgstr "%s: opþiune nerecunoscutã `--%s'\n"
+
+#: lib/getopt.c:738 lib/getopt.c:741
+#, c-format
+msgid "%s: unrecognized option `%c%s'\n"
+msgstr "%s: opþiune nerecunoscutã `%c%s'\n"
+
+#: lib/getopt.c:796 lib/getopt.c:799
+#, c-format
+msgid "%s: illegal option -- %c\n"
+msgstr "%s: opþiune ilegalã -- %c\n"
+
+#: lib/getopt.c:805 lib/getopt.c:808
+#, c-format
+msgid "%s: invalid option -- %c\n"
+msgstr "%s: opþiune invalidã -- %c\n"
+
+#: lib/getopt.c:863 lib/getopt.c:882 lib/getopt.c:1095 lib/getopt.c:1116
+#, c-format
+msgid "%s: option requires an argument -- %c\n"
+msgstr "%s: opþiunea necesitã un argument -- %c\n"
+
+#: lib/getopt.c:935 lib/getopt.c:954
+#, c-format
+msgid "%s: option `-W %s' is ambiguous\n"
+msgstr "%s: opþiunea `-W %s' este ambiguã\n"
+
+#: lib/getopt.c:978 lib/getopt.c:999
+#, c-format
+msgid "%s: option `-W %s' doesn't allow an argument\n"
+msgstr "%s: opþiunea `-W %s' nu permite un argument\n"
+
+#: makeinfo/cmds.c:520 makeinfo/cmds.c:542
+#, c-format
+msgid "arguments to @%s ignored"
+msgstr "argumentele pentru @%s ignorate"
+
+#: makeinfo/cmds.c:585
+msgid "January"
+msgstr "Ianuarie"
+
+#: makeinfo/cmds.c:585
+msgid "February"
+msgstr "Februarie"
+
+#: makeinfo/cmds.c:585
+msgid "March"
+msgstr "Martie"
+
+#: makeinfo/cmds.c:585
+msgid "April"
+msgstr "Aprilie"
+
+#: makeinfo/cmds.c:585
+msgid "May"
+msgstr "Mai"
+
+#: makeinfo/cmds.c:586
+msgid "June"
+msgstr "Iunie"
+
+#: makeinfo/cmds.c:586
+msgid "July"
+msgstr "Iulie"
+
+#: makeinfo/cmds.c:586
+msgid "August"
+msgstr "August"
+
+#: makeinfo/cmds.c:586
+msgid "September"
+msgstr "Septembrie"
+
+#: makeinfo/cmds.c:586
+msgid "October"
+msgstr "Octombrie"
+
+#: makeinfo/cmds.c:587
+msgid "November"
+msgstr "Noiembrie"
+
+#: makeinfo/cmds.c:587
+msgid "December"
+msgstr "Decembrie"
+
+#: makeinfo/cmds.c:936
+#, c-format
+msgid "unlikely character %c in @var"
+msgstr "caracter neverosimil %c în @var"
+
+#: makeinfo/cmds.c:979
+msgid "@sc argument all uppercase, thus no effect"
+msgstr "argumentul @sc în litere mari, prin urmare fãrã efect"
+
+#: makeinfo/cmds.c:1034
+#, c-format
+msgid "`{' expected, but saw `%c'"
+msgstr "`{' aºteptat, dar am vãzut `%c'"
+
+#: makeinfo/cmds.c:1074
+msgid "end of file inside verb block"
+msgstr "sfârºit de fiºier în interiorul blocului de verb"
+
+#: makeinfo/cmds.c:1082
+#, c-format
+msgid "`}' expected, but saw `%c'"
+msgstr "`}' aºteptat, dar am vãzut `%c'"
+
+#: makeinfo/cmds.c:1112
+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:1305
+#, c-format
+msgid "%c%s is obsolete"
+msgstr "%c%s este depãsit"
+
+#: makeinfo/cmds.c:1414
+#, c-format
+msgid "@sp requires a positive numeric argument, not `%s'"
+msgstr "@sp necesitã un argument numeric pozitiv, nu `%s'"
+
+#: makeinfo/cmds.c:1763 makeinfo/cmds.c:1819 makeinfo/footnote.c:82
+#, c-format
+msgid "Bad argument to %c%s"
+msgstr "Argument nepotrivit pentru %c%s"
+
+#: makeinfo/cmds.c:1773 makeinfo/makeinfo.c:4142
+msgid "asis"
+msgstr "aºacume"
+
+#: makeinfo/cmds.c:1775 makeinfo/cmds.c:1805 makeinfo/makeinfo.c:4144
+msgid "none"
+msgstr "nimic"
+
+#: makeinfo/cmds.c:1789
+#, c-format
+msgid "Bad argument to @%s"
+msgstr "Argument nepotrivit pentru @%s"
+
+#: makeinfo/cmds.c:1803
+msgid "insert"
+msgstr "insereazã"
+
+#: makeinfo/defun.c:84
+msgid "Missing `}' in @def arg"
+msgstr "Lipseºte `}' în @def arg"
+
+#: makeinfo/defun.c:403
+msgid "Function"
+msgstr "Funcþie"
+
+#: makeinfo/defun.c:406
+msgid "Macro"
+msgstr "Macro"
+
+#: makeinfo/defun.c:409
+msgid "Special Form"
+msgstr "Formã Specialº"
+
+#: makeinfo/defun.c:413
+msgid "Variable"
+msgstr "Variabilã"
+
+#: makeinfo/defun.c:416
+msgid "User Option"
+msgstr "Opþiune Utilizator"
+
+#: makeinfo/defun.c:420
+msgid "Instance Variable"
+msgstr "Instanþiere Variabilã"
+
+#: makeinfo/defun.c:424
+msgid "Method"
+msgstr "Metodã"
+
+#: makeinfo/defun.c:500 makeinfo/defun.c:505 makeinfo/defun.c:545
+#: makeinfo/defun.c:644 makeinfo/xml.c:2229
+msgid "of"
+msgstr "din"
+
+#: makeinfo/defun.c:509 makeinfo/defun.c:513 makeinfo/defun.c:517
+#: makeinfo/defun.c:551 makeinfo/defun.c:650 makeinfo/xml.c:2234
+msgid "on"
+msgstr "pe"
+
+#: 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:435
+#, c-format
+msgid "%s: getwd: %s, %s\n"
+msgstr "%s: getwd: %s, %s\n"
+
+#: makeinfo/files.c:638
+#, c-format
+msgid "`%s' omitted before output filename"
+msgstr "`%s' omis înainte de numele fiºierului de ieºire"
+
+#: makeinfo/files.c:646
+#, c-format
+msgid "`%s' omitted since writing to stdout"
+msgstr "`%s' omis întrucât scriu la ieºirea standard (stdout)"
+
+#: makeinfo/files.c:694
+msgid "Output buffer not empty."
+msgstr "Buffer-ul de ieºire nu este gol."
+
+#: makeinfo/footnote.c:150
+#, c-format
+msgid "`%c%s' needs an argument `{...}', not just `%s'"
+msgstr "`%c%s' necesitã un argument `{...}', nu numai `%s'"
+
+#: makeinfo/footnote.c:165
+#, c-format
+msgid "No closing brace for footnote `%s'"
+msgstr "Nici o parantezã de închidere pentru nota de subsol `%s'"
+
+#: makeinfo/footnote.c:198
+msgid "Footnote defined without parent node"
+msgstr "Nota de subsol definitã fãrã nod pãrinte"
+
+#: makeinfo/footnote.c:210
+msgid "Footnotes inside footnotes are not allowed"
+msgstr "Nu sun permise note de subsol în note de subsol"
+
+#: makeinfo/footnote.c:302 makeinfo/index.c:189
+msgid "Footnotes"
+msgstr "Note de subsol"
+
+#: makeinfo/html.c:87
+#, c-format
+msgid "%s: could not open --css-file: %s"
+msgstr "%s: nu am putut deschide --css-file: %s"
+
+#: makeinfo/html.c:172
+#, c-format
+msgid "%s:%d: --css-file ended in comment"
+msgstr "%s:%d: --css-file s-a terminat cu un comentariu"
+
+#: makeinfo/html.c:207
+msgid "Untitled"
+msgstr "Fãrã titlu"
+
+#: makeinfo/html.c:422
+msgid "[unexpected] no html tag to pop"
+msgstr "[neaºteptat] nici un tag html de ridicat"
+
+#: makeinfo/html.c:752
+#, c-format
+msgid "[unexpected] invalid node name: `%s'"
+msgstr "[neaºteptat] nume de nod invalid: `%s'"
+
+#: makeinfo/index.c:169
+#, c-format
+msgid "Unknown index `%s'"
+msgstr "Index necunoscut `%s'"
+
+#: makeinfo/index.c:234
+#, c-format
+msgid "Info cannot handle `:' in index entry `%s'"
+msgstr "Info nu poate folosi `:' în intrarea de index `%s'"
+
+#: makeinfo/index.c:412
+#, c-format
+msgid "Index `%s' already exists"
+msgstr "Indez-ul `%s' existã deja"
+
+#: makeinfo/index.c:455
+#, c-format
+msgid "Unknown index `%s' and/or `%s' in @synindex"
+msgstr "Index-ul necunoscut `%s' ºi/sau `%s' în @synindex"
+
+#: makeinfo/index.c:661
+msgid "(line )"
+msgstr "(linie )"
+
+#: makeinfo/index.c:669
+#, c-format
+msgid "(line %*d)"
+msgstr "(linia %*d)"
+
+#: makeinfo/index.c:750
+#, c-format
+msgid "Unknown index `%s' in @printindex"
+msgstr "Index necunoscut `%s' în @printindex"
+
+#: makeinfo/index.c:819
+#, 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:822 makeinfo/index.c:858
+msgid "(outside of any node)"
+msgstr "(în afara oricãrui nod)"
+
+#: makeinfo/index.c:919 makeinfo/index.c:925
+msgid "See "
+msgstr "Vezi "
+
+#: makeinfo/insertion.c:160
+msgid "@item not allowed in argument to @itemize"
+msgstr "@item nu este permis în argument la @itemize"
+
+#: makeinfo/insertion.c:238
+msgid "Broken-Type in insertion_type_pname"
+msgstr "Tip-Greºit în insertion_type_pname"
+
+#: makeinfo/insertion.c:334
+msgid "Enumeration stack overflow"
+msgstr "Stivã de enumerare inundatã (overflow)"
+
+#: makeinfo/insertion.c:366
+#, c-format
+msgid "lettering overflow, restarting at %c"
+msgstr "inundate (overflow) la tipãrire, reîncep la %c"
+
+#: makeinfo/insertion.c:631
+#, c-format
+msgid "%s requires an argument: the formatter for %citem"
+msgstr "%s necesitã un argument: formatatorul pentru %citem"
+
+#: makeinfo/insertion.c:719
+#, c-format
+msgid "%cfloat environments cannot be nested"
+msgstr "mediile %cfloat nu pot fi încuibãrite"
+
+#: makeinfo/insertion.c:973
+#, c-format
+msgid "`@end' expected `%s', but saw `%s'"
+msgstr "`@end' a aºteptat `%s', dar a vãzut `%s'"
+
+#: makeinfo/insertion.c:1337
+#, c-format
+msgid "No matching `%cend %s'"
+msgstr "Nici o potrivire %cend %s'"
+
+#: makeinfo/insertion.c:1592
+#, c-format
+msgid "%s requires letter or digit"
+msgstr "%s necesitã litere sau cifre"
+
+#: makeinfo/insertion.c:1687
+msgid "end of file inside verbatim block"
+msgstr "sfârºit de fiºier în interiorul blocului neformatat (verbatim)"
+
+#: makeinfo/insertion.c:1913
+#, c-format
+msgid "@%s not meaningful outside `@float' environment"
+msgstr "@%s nu are sens în exteriorul mediului `@float'"
+
+#: makeinfo/insertion.c:1949
+msgid "@menu seen before first @node, creating `Top' node"
+msgstr "@menu vãzut înainte de primul @node, creez nodul `Vârf'"
+
+#: makeinfo/insertion.c:1950
+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:1962
+msgid "@detailmenu seen before first node, creating `Top' node"
+msgstr "@detailmenu vãzut înainte de primul nod, creez nodul `Vârf'"
+
+#: makeinfo/insertion.c:2018
+#, 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:2032
+#, c-format
+msgid "@%s not meaningful outside `@titlepage' environment"
+msgstr "@%s nu are sens în exteriorul mediului `@titlepage'"
+
+#: makeinfo/insertion.c:2063
+#, c-format
+msgid "Unmatched `%c%s'"
+msgstr "`%c%s' fãrã pereche"
+
+#: makeinfo/insertion.c:2068
+#, c-format
+msgid "`%c%s' needs something after it"
+msgstr "`%c%s' necesitã ceva dupã el"
+
+#: makeinfo/insertion.c:2074
+#, c-format
+msgid "Bad argument `%s' to `@%s', using `%s'"
+msgstr "Argument greºit `%s' pentru `@%s', folosesc `%s'"
+
+#: makeinfo/insertion.c:2171
+#, c-format
+msgid "@%s not meaningful inside `@%s' block"
+msgstr "@%s nu are sens în interiorul blocului `@%s'"
+
+#: makeinfo/insertion.c:2180
+#, c-format
+msgid "@itemx not meaningful inside `%s' block"
+msgstr "@itemx nu are sens în interiorul blocului `%s'"
+
+#: makeinfo/insertion.c:2356
+#, 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:580
+#, 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:655
+#, c-format
+msgid "unrecognized encoding name `%s'"
+msgstr "nume de codare nerecunoscut `%s'"
+
+#: makeinfo/lang.c:663
+#, c-format
+msgid "sorry, encoding `%s' not supported"
+msgstr "ne pare rãu, codarea `%s' nu este suportatã"
+
+#: makeinfo/lang.c:715
+#, c-format
+msgid "invalid encoded character `%s'"
+msgstr "caracter codat invalid `%s'"
+
+#: makeinfo/lang.c:1009
+#, 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:1013
+#, 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:355
+#, 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:586
+#, c-format
+msgid "%cend macro not found"
+msgstr "%cend macro nu a fost gãsit"
+
+#: makeinfo/macro.c:624
+msgid "@quote-arg only useful for single-argument macros"
+msgstr "@quote-arg folositor numai pentru macro-uri cu un singur argument"
+
+#: makeinfo/macro.c:660
+#, c-format
+msgid "mismatched @end %s with @%s"
+msgstr "nepotrivire @end %s cu @%s"
+
+#: makeinfo/makeinfo.c:184
+#, c-format
+msgid "Too many errors! Gave up.\n"
+msgstr "Prea multe erori! Am renunþat.\n"
+
+#: makeinfo/makeinfo.c:302
+#, c-format
+msgid "%s:%d: warning: "
+msgstr "%s:%d: avertisment: "
+
+#: makeinfo/makeinfo.c:321 makeinfo/makeinfo.c:2260
+#, c-format
+msgid "Misplaced %c"
+msgstr "%c nelalocul lui"
+
+#: makeinfo/makeinfo.c:340
+#, c-format
+msgid "Try `%s --help' for more information.\n"
+msgstr "Încercaþi `%s --help' pentru informaþii suplimentare.\n"
+
+#: makeinfo/makeinfo.c:343
+#, c-format
+msgid "Usage: %s [OPTION]... TEXINFO-FILE...\n"
+msgstr "Folosire: %s [OPÞIUNE]... FIªIER-TEXINFO...\n"
+
+#: makeinfo/makeinfo.c:346
+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:350
+#, c-format
+msgid ""
+"General options:\n"
+" --error-limit=NUM quit after NUM errors (default %d).\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"
+" --reference-limit=NUM warn about at most NUM references (default %"
+"d).\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:364
+#, 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:372
+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 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 (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:386
+#, c-format
+msgid ""
+"Options for Info and plain text:\n"
+" --enable-encoding output accented and special characters in\n"
+" Info output based on @documentencoding.\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\n"
+" in which they are defined (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:403
+msgid ""
+"Options for HTML:\n"
+" --css-include=FILE include FILE in HTML <style> output;\n"
+" read stdin if FILE is -.\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:409
+#, 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:416
+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:425
+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:444
+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:452
+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:603
+#, 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:647 makeinfo/makeinfo.c:673 makeinfo/makeinfo.c:692
+#: makeinfo/makeinfo.c:722 makeinfo/makeinfo.c:743
+#, 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:660
+#, 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:665
+#, 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:707
+#, 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:732
+#, 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:806
+#, c-format
+msgid "%s: missing file argument.\n"
+msgstr "%s: lipseºte fiºierul argument.\n"
+
+#: makeinfo/makeinfo.c:997 makeinfo/makeinfo.c:3991
+#, c-format
+msgid "Multiline command %c%s used improperly"
+msgstr "Comandã pe multiple linii %c%s folositã incorect"
+
+#: makeinfo/makeinfo.c:1000
+#, c-format
+msgid "Expected `%s'"
+msgstr "Am aºteptat `%s'"
+
+#: makeinfo/makeinfo.c:1479
+#, c-format
+msgid "Can't create directory `%s': %s"
+msgstr "Nu pot crea directorul `%s': %s"
+
+#: makeinfo/makeinfo.c:1525
+#, c-format
+msgid "No `%s' found in `%s'"
+msgstr "Nici un `%s' nu a fost gãsit în `%s'"
+
+#: makeinfo/makeinfo.c:1605
+#, 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:1638
+#, c-format
+msgid "Making %s file `%s' from `%s'.\n"
+msgstr "Creez fiºierul %s `%s' din `%s'.\n"
+
+#: makeinfo/makeinfo.c:1673
+#, c-format
+msgid "This is %s, produced by makeinfo version %s from %s.\n"
+msgstr "Acesta este %s, produs de makeinfo versiunea %s din %s.\n"
+
+#: makeinfo/makeinfo.c:1709
+#, 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:1773
+#, 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:2034
+#, c-format
+msgid "Unknown command `%s'"
+msgstr "Comandã necunoscutã `%s'"
+
+#: makeinfo/makeinfo.c:2056
+#, 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:2314
+#, c-format
+msgid "%c%s expected braces"
+msgstr "%c%s am aºteptat paranteze"
+
+#: makeinfo/makeinfo.c:2327
+msgid "Unmatched }"
+msgstr "} fãrã pereche"
+
+#: makeinfo/makeinfo.c:2375
+msgid "NO_NAME!"
+msgstr "NICI_UN_NUME!"
+
+#: makeinfo/makeinfo.c:2396
+#, c-format
+msgid "%c%s missing close brace"
+msgstr "%c%s lipseºte paranteza de închidere"
+
+#: makeinfo/makeinfo.c:3309
+#, 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:3315
+#, c-format
+msgid "No such file `%s'"
+msgstr "Nici un fiºier `%s'"
+
+#: makeinfo/makeinfo.c:3447
+#, 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:3456
+msgid "@image missing filename argument"
+msgstr "@image lipseºte fiºierul argument."
+
+#: makeinfo/makeinfo.c:3675
+#, c-format
+msgid "undefined flag: %s"
+msgstr "marcaj nedefinit: %s"
+
+#: makeinfo/makeinfo.c:3676
+#, c-format
+msgid "{No value for `%s'}"
+msgstr "{Nici o valoare pentru `%s'}"
+
+#: makeinfo/makeinfo.c:3728
+#, c-format
+msgid "%c%s requires a name"
+msgstr "%c%s necesitã un nume"
+
+#: makeinfo/makeinfo.c:3834
+#, c-format
+msgid "Reached eof before matching @end %s"
+msgstr "Am ajuns la eof înainte de a potrivi @end %s"
+
+#: makeinfo/makeinfo.c:4082
+#, 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:254
+#, c-format
+msgid "ignoring stray text `%s' after @multitable"
+msgstr "ignor text aiurea `%s' dupã @multitable"
+
+#: makeinfo/multi.c:393
+#, c-format
+msgid "Too many columns in multitable item (max %d)"
+msgstr "Prea multe coloane în articol multitabel (max %d)"
+
+#: makeinfo/multi.c:555
+#, c-format
+msgid "[unexpected] cannot select column #%d in multitable"
+msgstr "[neaºteptat] nu pot selecta coloana #%d în multitabel"
+
+#: makeinfo/multi.c:584
+msgid "ignoring @tab outside of multitable"
+msgstr "ignor @tab în afara multitabelului"
+
+#: makeinfo/multi.c:632
+#, c-format
+msgid "** Multicolumn output from last row:\n"
+msgstr "** Ieºirea multitabel din ultimul rând:\n"
+
+#: makeinfo/multi.c:635
+#, c-format
+msgid "* column #%d: output = %s\n"
+msgstr "* coloana #%d: ieºire = %s\n"
+
+#: makeinfo/node.c:280
+#, c-format
+msgid "Node `%s' previously defined at line %d"
+msgstr "Nodul `%s' definit anterior la linia %d"
+
+#: makeinfo/node.c:648
+#, c-format
+msgid "Formatting node %s...\n"
+msgstr "Formatez nodul %s...\n"
+
+#: makeinfo/node.c:716
+#, 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:879
+#, c-format
+msgid "No node name specified for `%c%s' command"
+msgstr "Nici un nume specificat pentru comanda `%c%s'"
+
+#: makeinfo/node.c:920 makeinfo/node.c:1151
+#, 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:923
+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:925 makeinfo/node.c:1154
+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:955
+#, 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:991
+msgid "Next:"
+msgstr "Urmãtor:"
+
+#: makeinfo/node.c:1007
+msgid "Previous:"
+msgstr "Precedent:"
+
+#: makeinfo/node.c:1021
+msgid "Up:"
+msgstr "Sus:"
+
+#: makeinfo/node.c:1148
+#, 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:1153
+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:1347
+#, 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:1363
+msgid "Menu"
+msgstr "Meniu"
+
+#: makeinfo/node.c:1365
+msgid "Cross"
+msgstr "Traverseazã"
+
+#: makeinfo/node.c:1447
+#, 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:1450
+#, c-format
+msgid "This node (%s) has the bad Prev"
+msgstr "Acest nod (%s) are un Prec incorect"
+
+#: makeinfo/node.c:1462
+msgid "Prev"
+msgstr "Prec"
+
+#: makeinfo/node.c:1505
+#, c-format
+msgid "Prev field of node `%s' not pointed to"
+msgstr "Câmpul Prec al nodului `%s' nu este referit"
+
+#: makeinfo/node.c:1509
+#, c-format
+msgid "This node (%s) has the bad Next"
+msgstr "Acest nod (%s) are referinþa Urmãtor incorectã"
+
+#: makeinfo/node.c:1521
+#, 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:1524
+msgid "Up"
+msgstr "Sus"
+
+#: makeinfo/node.c:1590
+#, 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:1619
+#, c-format
+msgid "node `%s' has been referenced %d times"
+msgstr "nodul `%s' a fost referit de %d ori"
+
+#: makeinfo/node.c:1633
+#, c-format
+msgid "unreferenced node `%s'"
+msgstr "nod nereferit `%s'"
+
+#: makeinfo/node.c:1723
+#, c-format
+msgid "Removing %s\n"
+msgstr "ªterg %s\n"
+
+#: makeinfo/node.c:1727
+#, 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:562
+#, c-format
+msgid "Internal error (search_sectioning) \"%s\"!"
+msgstr "Eroare internã (search_sectioning) \"%s\"!"
+
+#: makeinfo/sectioning.c:623
+#, 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:639
+#, c-format
+msgid "Node with %ctop as a section already exists"
+msgstr "Nodul cu %ctop ca ºi secþiune existã deja"
+
+#: makeinfo/sectioning.c:647
+#, c-format
+msgid "Here is the %ctop node"
+msgstr "Aici este nodul %ctop"
+
+#: makeinfo/sectioning.c:663
+#, c-format
+msgid "%ctop used before %cnode, defaulting to %s"
+msgstr "%ctop folosit înaintea lui %cnode, implicit cãtre %s"
+
+#: makeinfo/toc.c:197 makeinfo/toc.c:271 makeinfo/toc.c:273
+msgid "Table of Contents"
+msgstr "Cuprins"
+
+#: makeinfo/toc.c:304 makeinfo/toc.c:337 makeinfo/toc.c:339
+msgid "Short Contents"
+msgstr "Rezumate"
+
+#: makeinfo/xml.c:1605
+#, c-format
+msgid "@image file `%s' unreadable: %s"
+msgstr "Fiºierul @image `%s' nu poate fi citit: %s"
+
+#: makeinfo/xml.c:2097
+msgid ""
+"@headitem as the last item of @multitable produces invalid Docbook documents"
+msgstr ""
+"@headitem ca ultimul articol din @multitable produce documenteDocbook "
+"invalide"
+
+#: util/install-info.c:154
+#, c-format
+msgid "%s: warning: "
+msgstr "%s: avertisment: "
+
+#: util/install-info.c:203
+#, c-format
+msgid " for %s"
+msgstr " pentru %s"
+
+#: util/install-info.c:426
+#, 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"
+
+#: util/install-info.c:434
+#, c-format
+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 ""
+"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"
+
+#: util/install-info.c:488
+#, 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"
+
+#: util/install-info.c:513
+#, 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"
+
+#: util/install-info.c:600
+#, c-format
+msgid "%s: empty file"
+msgstr "%s: fiºier gol"
+
+#: util/install-info.c:913 util/install-info.c:953
+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"
+
+#: util/install-info.c:948
+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"
+
+#: util/install-info.c:1191 util/install-info.c:1201
+#, c-format
+msgid "%s: already have dir file: %s\n"
+msgstr "%s: are deja fiºier dir: %s\n"
+
+#: util/install-info.c:1236
+#, c-format
+msgid "%s: Specify the Info file only once.\n"
+msgstr "%s: Specificã fiºierul Info o singurã datã.\n"
+
+#: util/install-info.c:1284
+#, c-format
+msgid "excess command line argument `%s'"
+msgstr "argument suplimentar în linia de comandã `%s'"
+
+#: util/install-info.c:1288
+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."
+
+#: util/install-info.c:1291
+msgid "No dir file specified; try --help for more information."
+msgstr ""
+"Nici un fiºier dir specificat; încercaþi --help pentru informaþii "
+"suplimentare."
+
+#: util/install-info.c:1313
+#, c-format
+msgid "no info dir entry in `%s'"
+msgstr "nici o intrare dir info în `%s'"
+
+#: util/install-info.c:1426
+#, c-format
+msgid "menu item `%s' already exists, for file `%s'"
+msgstr "articol meniu `%s' existã deja, pentru fiºier `%s'"
+
+#: util/install-info.c:1449
+#, c-format
+msgid "no entries found for `%s'; nothing deleted"
+msgstr "nici o intrare gãsitã pentru `%s'; n-am ºters nimic"
+
+#: util/texindex.c:252
+msgid "display this help and exit"
+msgstr "afiºeazã acest mesaj ºi terminã"
+
+#: util/texindex.c:254
+msgid "keep temporary files around after processing"
+msgstr "pãstreazã fiºierele temporare dupã procesare"
+
+#: util/texindex.c:256
+msgid "do not keep temporary files around after processing (default)"
+msgstr "nu pãstra fiºierele temporare dupã procesare (implicit)"
+
+#: util/texindex.c:258
+msgid "send output to FILE"
+msgstr "trimite ieºire în FIªIER"
+
+#: util/texindex.c:260
+msgid "display version information and exit"
+msgstr "afiºeazã informaþii despre versiune ºi terminã"
+
+#: util/texindex.c:270
+#, c-format
+msgid "Usage: %s [OPTION]... FILE...\n"
+msgstr "Folosire: %s [OPÞIUNI]... FIªIER...\n"
+
+#: util/texindex.c:271
+#, 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:274
+#, 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:276
+#, c-format
+msgid ""
+"\n"
+"Options:\n"
+msgstr ""
+"\n"
+"Opþiuni:\n"
+
+#: util/texindex.c:876 util/texindex.c:910 util/texindex.c:983
+#: util/texindex.c:1011
+#, c-format
+msgid "%s: not a texinfo index file"
+msgstr "%s: nu este un fiºier index texinfo"
+
+#: util/texindex.c:968
+#, c-format
+msgid "failure reopening %s"
+msgstr "am eºuat sã redeschid %s"
+
+#: util/texindex.c:1218
+#, c-format
+msgid "No page number in %s"
+msgstr "Nici un numãr de paginã în %s"
+
+#: util/texindex.c:1291
+#, c-format
+msgid "entry %s follows an entry with a secondary name"
+msgstr "intrarea %s urmeazã o intrare cu nume secundar"
+
+#~ msgid "%s: Specify the Info directory only once.\n"
+#~ msgstr "%s: Specificã directorul Info o singurã datã.\n"
diff --git a/macros/texinfo/contrib/texinfo-hu/texinfo/po/ru.gmo b/macros/texinfo/contrib/texinfo-hu/texinfo/po/ru.gmo
new file mode 100644
index 0000000000..04eba1eaee
--- /dev/null
+++ b/macros/texinfo/contrib/texinfo-hu/texinfo/po/ru.gmo
Binary files differ
diff --git a/macros/texinfo/contrib/texinfo-hu/texinfo/po/ru.po b/macros/texinfo/contrib/texinfo-hu/texinfo/po/ru.po
new file mode 100644
index 0000000000..b245a565d0
--- /dev/null
+++ b/macros/texinfo/contrib/texinfo-hu/texinfo/po/ru.po
@@ -0,0 +1,3115 @@
+# ðÅÒÅ×ÏÄÙ ÓÏÏÂÝÅÎÉÊ ÄÌÑ GNU Texinfo.
+# Copyright (C) 1999 Free Software Foundation, Inc.
+# Oleg S. Tihonov <ost@tatnipi.ru>, 1999, 2001, 2002, 2003, 2004
+#
+msgid ""
+msgstr ""
+"Project-Id-Version: texinfo 4.7.92\n"
+"Report-Msgid-Bugs-To: bug-texinfo@gnu.org\n"
+"POT-Creation-Date: 2004-12-21 16:20-0800\n"
+"PO-Revision-Date: 2004-12-16 08:19+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"
+
+#: info/echo-area.c:284 info/session.c:689
+msgid "Move forward a character"
+msgstr "óÍÅÓÔÉÔØÓÑ ÎÁ ÓÉÍ×ÏÌ ×ÐÅÒÅÄ"
+
+#: info/echo-area.c:296 info/session.c:705
+msgid "Move backward a character"
+msgstr "óÍÅÓÔÉÔØÓÑ ÎÁ ÓÉÍ×ÏÌ ÎÁÚÁÄ"
+
+#: info/echo-area.c:308
+msgid "Move to the start of this line"
+msgstr "óÍÅÓÔÉÔØÓÑ × ÎÁÞÁÌÏ ÓÔÒÏËÉ"
+
+#: info/echo-area.c:313
+msgid "Move to the end of this line"
+msgstr "óÍÅÓÔÉÔØÓÑ × ËÏÎÅÃ ÓÔÒÏËÉ"
+
+#: info/echo-area.c:321 info/session.c:723
+msgid "Move forward a word"
+msgstr "óÍÅÓÔÉÔØÓÑ ÎÁ ÓÌÏ×Ï ×ÐÅÒÅÄ"
+
+#: info/echo-area.c:361 info/session.c:772
+msgid "Move backward a word"
+msgstr "óÍÅÓÔÉÔØÓÑ ÎÁ ÓÌÏ×Ï ÎÁÚÁÄ"
+
+#: info/echo-area.c:401
+msgid "Delete the character under the cursor"
+msgstr "õÄÁÌÉÔØ ÓÌÅÄÕÀÝÉÊ ÓÉÍ×ÏÌ"
+
+#: info/echo-area.c:431
+msgid "Delete the character behind the cursor"
+msgstr "õÄÁÌÉÔØ ÐÒÅÄÙÄÕÝÉÊ ÓÉÍ×ÏÌ"
+
+#: info/echo-area.c:452
+msgid "Cancel or quit operation"
+msgstr "ïÔÍÅÎÉÔØ ÉÌÉ ÐÒÅÒ×ÁÔØ ÄÅÊÓÔ×ÉÅ"
+
+#: info/echo-area.c:467
+msgid "Accept (or force completion of) this line"
+msgstr "ðÒÉÎÑÔØ (ÉÌÉ ÚÁ×ÅÒÛÉÔØ) ÔÅËÕÝÕÀ ÓÔÒÏËÕ"
+
+#: info/echo-area.c:472
+msgid "Insert next character verbatim"
+msgstr "÷ÓÔÁ×ÉÔØ ÓÌÅÄÕÀÝÉÊ ÓÉÍ×ÏÌ \"ËÁË ÅÓÔØ\""
+
+#: info/echo-area.c:480
+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:653
+msgid "Kill the word preceding the cursor"
+msgstr "õÎÉÞÔÏÖÉÔØ ÐÒÅÄÙÄÕÝÅÅ ÓÌÏ×Ï"
+
+#: info/echo-area.c:868 info/echo-area.c:924
+msgid "No completions"
+msgstr "úÁ×ÅÒÛÅÎÉÊ ÎÅÔ"
+
+#: info/echo-area.c:870
+msgid "Not complete"
+msgstr "îÅ ÚÁ×ÅÒÛÅÎÏ"
+
+#: info/echo-area.c:911
+msgid "List possible completions"
+msgstr "ðÏËÁÚÁÔØ ×ÏÚÍÏÖÎÙÅ ÚÁ×ÅÒÛÅÎÉÑ"
+
+#: info/echo-area.c:928
+msgid "Sole completion"
+msgstr "åÄÉÎÓÔ×ÅÎÎÏÅ ÚÁ×ÅÒÛÅÎÉÅ"
+
+#: info/echo-area.c:937
+msgid "One completion:\n"
+msgstr "åÄÉÎÓÔ×ÅÎÎÏÅ ÚÁ×ÅÒÛÅÎÉÅ:\n"
+
+#: info/echo-area.c:938
+#, c-format
+msgid "%d completions:\n"
+msgstr "úÁ×ÅÒÛÅÎÉÊ: %d :\n"
+
+#: info/echo-area.c:1085
+msgid "Insert completion"
+msgstr "÷ÓÔÁ×ÉÔØ ÚÁ×ÅÒÛÅÎÉÅ"
+
+#: info/echo-area.c:1220
+msgid "Building completions..."
+msgstr "óÏÓÔÁ×ÌÅÎÉÅ ÚÁ×ÅÒÛÅÎÉÊ..."
+
+#: info/echo-area.c:1340
+msgid "Scroll the completions window"
+msgstr "ðÒÏËÒÕÔÉÔØ ÏËÎÏ ÚÁ×ÅÒÛÅÎÉÊ"
+
+#: info/footnotes.c:213
+msgid "Footnotes could not be displayed"
+msgstr "óÎÏÓËÉ ÎÅ ÍÏÇÕÔ ÂÙÔØ ÐÏËÁÚÁÎÙ"
+
+#: info/footnotes.c:239
+msgid "Show the footnotes associated with this node in another window"
+msgstr "ðÏËÁÚÁÔØ ÓÎÏÓËÉ, Ó×ÑÚÁÎÎÙÅ Ó ÜÔÏÊ ÎÏÄÏÊ, × ÄÒÕÇÏÍ ÏËÎÅ"
+
+#: info/footnotes.h:26
+msgid "---------- Footnotes ----------"
+msgstr "---------- óÎÏÓËÉ ----------"
+
+#: info/indices.c:172
+msgid "Look up a string in the index for this file"
+msgstr "îÁÊÔÉ ÓÔÒÏËÕ × ÁÌÆÁ×ÉÔÎÏÍ ÕËÁÚÁÔÅÌÅ ÄÌÑ ÄÁÎÎÏÇÏ ÆÁÊÌÁ"
+
+#: info/indices.c:199
+msgid "Finding index entries..."
+msgstr "ðÏÉÓË × ÁÌÆÁ×ÉÔÎÏÍ ÕËÁÚÁÔÅÌÅ..."
+
+#: info/indices.c:207
+msgid "No indices found."
+msgstr "îÅ ÎÁÊÄÅÎ ÁÌÆÁ×ÉÔÎÙÊ ÕËÁÚÁÔÅÌØ."
+
+#: info/indices.c:217
+msgid "Index entry: "
+msgstr "ðÕÎËÔ × ÁÌÆÁ×ÉÔÎÏÍ ÕËÁÚÁÔÅÌÅ: "
+
+#: info/indices.c:325
+msgid ""
+"Go to the next matching index item from the last `\\[index-search]' command"
+msgstr ""
+"ðÅÒÅÊÔÉ Ë ÓÌÅÄÕÀÝÅÍÕ ÐÕÎËÔÕ ÁÌÆÁ×ÉÔÎÏÇÏ ÕËÁÚÁÔÅÌÑ, ÓÏÏÔ×ÅÔÓÔ×ÕÀÝÅÍÕ\n"
+"ÐÏÓÌÅÄÎÅÊ ËÏÍÁÎÄÅ `\\[index-search]'"
+
+#: info/indices.c:335
+msgid "No previous index search string."
+msgstr "óÔÒÏËÁ ÐÏÉÓËÁ × ÁÌÆÁ×ÉÔÎÏÍ ÕËÁÚÁÔÅÌÅ ÎÅ ÂÙÌÁ ÒÁÎØÛÅ ÚÁÄÁÎÁ."
+
+#: info/indices.c:342
+msgid "No index entries."
+msgstr "îÅ ÎÁÊÄÅÎ ÁÌÆÁ×ÉÔÎÙÊ ÕËÁÚÁÔÅÌØ."
+
+#: info/indices.c:375
+#, c-format
+msgid "No %sindex entries containing `%s'."
+msgstr "÷ ÁÌÆÁ×ÉÔÎÏÍ ÕËÁÚÁÔÅÌÅ %s ÎÅ ÎÁÊÄÅÎÏ ÐÕÎËÔÏ×, ÓÏÄÅÒÖÁÝÉÈ `%s'."
+
+#: info/indices.c:376
+msgid "more "
+msgstr "ÂÏÌØÛÅ "
+
+#: info/indices.c:386
+msgid "CAN'T SEE THIS"
+msgstr "üÔÏ ÎÅ×ÉÄÉÍÙÊ ÔÅËÓÔ!"
+
+#: info/indices.c:422
+#, c-format
+msgid "Found `%s' in %s. (`\\[next-index-match]' tries to find next.)"
+msgstr ""
+"îÁÊÄÅÎÁ `%s' × %s. (`\\[next-index-match]' ÎÁÈÏÄÉÔ ÓÌÅÄÕÀÝÅÅ ÓÏ×ÐÁÄÅÎÉÅ.)"
+
+#: info/indices.c:541
+#, c-format
+msgid "Scanning indices of `%s'..."
+msgstr "ðÏÉÓË × ÁÌÆÁ×ÉÔÎÏÍ ÕËÁÚÁÔÅÌÅ ÆÁÊÌÁ `%s'..."
+
+#: info/indices.c:596
+#, c-format
+msgid "No available info files have `%s' in their indices."
+msgstr "îÉ ÏÄÉÎ ÉÚ info-ÆÁÊÌÏ× ÎÅ ÓÏÄÅÒÖÉÔ `%s' × ÁÌÆÁ×ÉÔÎÙÈ ÕËÁÚÁÔÅÌÑÈ."
+
+#: info/indices.c:622
+msgid "Grovel all known info file's indices for a string and build a menu"
+msgstr ""
+"úÁÐÕÓËÁÅÔ ÐÏÉÓË ÓÔÒÏËÉ × ÁÌÆÁ×ÉÔÎÙÈ ÕËÁÚÁÔÅÌÑÈ ×ÓÅÈ Info-ÆÁÊÌÏ× É ÓÏÚÄÁÅÔ "
+"ÍÅÎÀ"
+
+#: info/indices.c:626
+msgid "Index apropos: "
+msgstr "ëÌÀÞÅ×ÏÅ ÓÌÏ×Ï ÄÌÑ ÐÏÉÓËÁ: "
+
+#: info/indices.c:654
+#, 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:295 makeinfo/makeinfo.c:766 util/install-info.c:1266
+#: util/texindex.c:343
+#, c-format
+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"
+
+#: info/info.c:498
+#, c-format
+msgid "no index entries found for `%s'\n"
+msgstr "ÄÌÑ `%s' ÎÅ ÎÁÊÄÅÎÏ ×ÈÏÖÄÅÎÉÊ × ÉÍÅÎÎÏÍ ÕËÁÚÁÔÅÌÅ\n"
+
+#: info/info.c:590
+msgid " -b, --speech-friendly be friendly to speech synthesizers.\n"
+msgstr ""
+" -b, --speech-friendly ×Ù×ÏÄÉÔØ × ÆÏÒÍÁÔÅ, ÕÄÏÂÎÏÍ ÄÌÑ ÓÉÎÔÅÚÁÔÏÒÏ× "
+"ÒÅÞÉ.\n"
+
+#: info/info.c:597
+#, c-format
+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 -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"
+
+#: info/info.c:635 info/infokey.c:918 makeinfo/makeinfo.c:465
+#: util/install-info.c:466 util/texindex.c:292
+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:669
+#, c-format
+msgid "Cannot find node `%s'."
+msgstr "îÅ×ÏÚÍÏÖÎÏ ÎÁÊÔÉ ÎÏÄÕ `%s'."
+
+#: info/info.c:670
+#, c-format
+msgid "Cannot find node `(%s)%s'."
+msgstr "îÅ×ÏÚÍÏÖÎÏ ÎÁÊÔÉ ÎÏÄÕ `(%s)%s'."
+
+#: info/info.c:671
+msgid "Cannot find a window!"
+msgstr "îÅ×ÏÚÍÏÖÎÏ ÎÁÊÔÉ ÏËÎÏ!"
+
+#: info/info.c:672
+msgid "Point doesn't appear within this window's node!"
+msgstr "ôÏÞËÁ ÎÁÈÏÄÉÔÓÑ ×ÎÅ ÎÏÄÙ ÜÔÏÇÏ ÏËÎÁ!"
+
+#: info/info.c:673
+msgid "Cannot delete the last window."
+msgstr "îÅ×ÏÚÍÏÖÎÏ ÕÄÁÌÉÔØ ÐÏÓÌÅÄÎÅÅ ÏËÎÏ."
+
+#: info/info.c:674
+msgid "No menu in this node."
+msgstr "÷ ÜÔÏÊ ÎÏÄÅ ÎÅÔ ÍÅÎÀ."
+
+#: info/info.c:675
+msgid "No footnotes in this node."
+msgstr "îÁ ÜÔÏÊ ÎÏÄÅ ÎÅÔ ÓÓÙÌÏË."
+
+#: info/info.c:676
+msgid "No cross references in this node."
+msgstr "îÁ ÜÔÏÊ ÎÏÄÅ ÎÅÔ ÓÓÙÌÏË."
+
+#: info/info.c:677
+#, c-format
+msgid "No `%s' pointer for this node."
+msgstr "äÌÑ ÜÔÏÊ ÎÏÄÙ ÎÅÔ ÓÓÙÌËÉ `%s'."
+
+#: info/info.c:678
+#, c-format
+msgid "Unknown Info command `%c'; try `?' for help."
+msgstr "ëÏÍÁÎÄÁ Info `%c' ÎÅÉÚ×ÅÓÔÎÁ; ÐÏÐÒÏÂÕÊÔÅ `?' ÄÌÑ ÐÏÌÕÞÅÎÉÑ ÓÐÒÁ×ËÉ."
+
+#: info/info.c:679
+#, c-format
+msgid "Terminal type `%s' is not smart enough to run Info."
+msgstr ""
+"ôÅÒÍÉÎÁÌ ÔÉÐÁ `%s' ÎÅ ÏÂÌÁÄÁÅÔ ÄÏÓÔÁÔÏÞÎÙÍÉ ×ÏÚÍÏÖÎÏÓÔÑÍÉ ÄÌÑ ÚÁÐÕÓËÁ Info."
+
+#: info/info.c:680
+msgid "You are already at the last page of this node."
+msgstr "÷Ù ÕÖÅ ÎÁÈÏÄÉÔÅÓØ ÎÁ ÐÏÓÌÅÄÎÅÊ ÓÔÒÁÎÉÃÅ ÜÔÏÊ ÎÏÄÙ."
+
+#: info/info.c:681
+msgid "You are already at the first page of this node."
+msgstr "÷Ù ÕÖÅ ÎÁÈÏÄÉÔÅÓØ ÎÁ ÐÅÒ×ÏÊ ÓÔÒÁÎÉÃÅ ÜÔÏÊ ÎÏÄÙ."
+
+#: info/info.c:682
+msgid "Only one window."
+msgstr "ôÏÌØËÏ ÏÄÎÏ ÏËÎÏ."
+
+#: info/info.c:683
+msgid "Resulting window would be too small."
+msgstr "ðÏÌÕÞÉ×ÛÅÅÓÑ ÏËÎÏ ÂÙÌÏ ÂÙ ÓÌÉÛËÏÍ ÍÁÌÅÎØËÉÍ."
+
+#: info/info.c:684
+msgid "Not enough room for a help window, please delete a window."
+msgstr ""
+"îÅ È×ÁÔÁÅÔ ÍÅÓÔÁ ÄÌÑ ÓÐÒÁ×ÏÞÎÏÇÏ ÏËÎÁ, ÐÏÖÁÌÕÊÓÔÁ, ÕÄÁÌÉÔÅ ËÁËÏÅ-ÎÉÂÕÄØ ÏËÎÏ."
+
+#: info/infodoc.c:46 info/infodoc.c:95
+msgid ""
+"Basic Commands in Info Windows\n"
+"******************************\n"
+msgstr ""
+"ïÓÎÏ×ÎÙÅ ËÏÍÁÎÄÙ × ÏËÎÁÈ Info\n"
+"******************************\n"
+
+#: info/infodoc.c:49
+msgid "\\%-10[quit-help] Quit this help.\n"
+msgstr "\\%-10[quit-help] ðÏËÉÎÕÔØ ÜÔÕ ÓÐÒÁ×ËÕ.\n"
+
+#: info/infodoc.c:50
+msgid "\\%-10[quit] Quit Info altogether.\n"
+msgstr "\\%-10[quit] ðÏËÉÎÕÔØ ÔÁËÖÅ Info.\n"
+
+#: info/infodoc.c:51
+msgid "\\%-10[get-info-help-node] Invoke the Info tutorial.\n"
+msgstr "\\%-10[get-info-help-node] ÷ÙÚ×ÁÔØ ÏÂÕÞÁÀÝÅÅ ÒÕËÏ×ÏÄÓÔ×Ï.\n"
+
+#: info/infodoc.c:53 info/infodoc.c:102
+msgid ""
+"Selecting other nodes:\n"
+"----------------------\n"
+msgstr ""
+"÷ÙÂÏÒ ÄÒÕÇÏÊ ÎÏÄÙ:\n"
+"------------------\n"
+
+#: info/infodoc.c:55
+msgid "\\%-10[next-node] Move to the \"next\" node of this node.\n"
+msgstr "\\%-10[next-node] ðÅÒÅÊÔÉ Ë \"ÓÌÅÄÕÀÝÅÊ\" ÎÏÄÅ.\n"
+
+#: info/infodoc.c:56
+msgid "\\%-10[prev-node] Move to the \"previous\" node of this node.\n"
+msgstr "\\%-10[prev-node] ðÅÒÅÊÔÉ Ë \"ÐÒÅÄÙÄÕÝÅÊ\" ÎÏÄÅ.\n"
+
+#: info/infodoc.c:57
+msgid "\\%-10[up-node] Move \"up\" from this node.\n"
+msgstr "\\%-10[up-node] ðÅÒÅÊÔÉ Ë ÎÏÄÅ \"××ÅÒÈ\".\n"
+
+#: info/infodoc.c:58
+msgid ""
+"\\%-10[menu-item] 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:60
+msgid ""
+"\\%-10[xref-item] Follow a cross reference. Reads name of reference.\n"
+msgstr "\\%-10[xref-item] ðÅÒÅÊÔÉ ÐÏ ÓÓÙÌËÅ. óÞÉÔÙ×ÁÅÔ ÉÍÑ ÓÓÙÌËÉ.\n"
+
+#: info/infodoc.c:61
+msgid "\\%-10[history-node] Move to the last node seen in this window.\n"
+msgstr "\\%-10[history-node] ðÅÒÅÊÔÉ ÎÁ ÐÏÓÌÅÄÎÀÀ ÎÏÄÕ × ÜÔÏÍ ÏËÎÅ.\n"
+
+#: info/infodoc.c:62
+msgid ""
+"\\%-10[move-to-next-xref] Skip to next hypertext link within this node.\n"
+msgstr ""
+"\\%-10[move-to-next-xref] ðÅÒÅÍÅÓÔÉÔØÓÑ Ë ÓÌÅÄÕÀÝÅÊ ÇÉÐÅÒÓÓÙÌËÅ × ÜÔÏÊ "
+"ÎÏÄÅ.\n"
+
+#: info/infodoc.c:63
+msgid ""
+"\\%-10[move-to-prev-xref] Skip to previous hypertext link within this "
+"node.\n"
+msgstr ""
+"\\%-10[move-to-prev-xref] ðÅÒÅÍÅÓÔÉÔØÓÑ Ë ÓÌÅÄÕÀÝÅÊ ÇÉÐÅÒÓÓÙÌËÅ × ÜÔÏÊ "
+"ÎÏÄÅ.\n"
+
+#: info/infodoc.c:64
+msgid ""
+"\\%-10[select-reference-this-line] Follow the hypertext link under cursor.\n"
+msgstr ""
+"\\%-10[select-reference-this-line] ðÅÒÅÊÔÉ ÐÏ ÇÉÐÅÒÓÓÙÌËÅ ÐÏÄ ËÕÒÓÏÒÏÍ.\n"
+
+#: info/infodoc.c:65
+msgid ""
+"\\%-10[dir-node] Move to the `directory' node. Equivalent to `\\[goto-"
+"node] (DIR)'.\n"
+msgstr "\\%-10[dir-node] ðÅÒÅÊÔÉ Ë ËÏÒÎÅ×ÏÊ ÎÏÄÅ. üË×É×ÁÌÅÎÔÎÏ `g (DIR)'.\n"
+
+#: info/infodoc.c:66
+msgid ""
+"\\%-10[top-node] Move to the Top node. Equivalent to `\\[goto-node] Top'.\n"
+msgstr "\\%-10[top-node] ðÅÒÅÊÔÉ Ë ÎÏÄÅ Top. üË×É×ÁÌÅÎÔÎÏ `g Top'.\n"
+
+#: info/infodoc.c:68 info/infodoc.c:116
+msgid ""
+"Moving within a node:\n"
+"---------------------\n"
+msgstr ""
+"ðÅÒÅÍÅÝÅÎÉÅ ×ÎÕÔÒÉ ÎÏÄÙ:\n"
+"------------------------\n"
+
+#: info/infodoc.c:70
+msgid "\\%-10[beginning-of-node] Go to the beginning of this node.\n"
+msgstr "\\%-10[beginning-of-node] ðÅÒÅÍÅÓÔÉÔØÓÑ × ÎÁÞÁÌÏ ÜÔÏÊ ÎÏÄÙ.\n"
+
+#: info/infodoc.c:71
+msgid "\\%-10[end-of-node] Go to the end of this node.\n"
+msgstr "\\%-10[end-of-node] ðÅÒÅÍÅÓÔÉÔØÓÑ × ËÏÎÅà ÜÔÏÊ ÎÏÄÙ.\n"
+
+#: info/infodoc.c:72
+msgid "\\%-10[next-line] Scroll forward 1 line.\n"
+msgstr "\\%-10[next-line] ðÒÏËÒÕÔÉÔØ ÎÁ ÓÔÒÁÎÉÃÕ ×ÐÅÒÅÄ.\n"
+
+#: info/infodoc.c:73
+msgid "\\%-10[prev-line] Scroll backward 1 line.\n"
+msgstr "\\%-10[prev-line] ðÒÏËÒÕÔÉÔØ ÎÁ ÓÔÒÁÎÉÃÕ ÎÁÚÁÄ.\n"
+
+#: info/infodoc.c:74
+msgid "\\%-10[scroll-forward] Scroll forward a page.\n"
+msgstr "\\%-10[scroll-forward] ðÒÏËÒÕÔÉÔØ ÎÁ ÓÔÒÁÎÉÃÕ ×ÐÅÒÅÄ.\n"
+
+#: info/infodoc.c:75
+msgid "\\%-10[scroll-backward] Scroll backward a page.\n"
+msgstr "\\%-10[scroll-backward] ðÒÏËÒÕÔÉÔØ ÎÁ ÓÔÒÁÎÉÃÕ ÎÁÚÁÄ.\n"
+
+#: info/infodoc.c:77 info/infodoc.c:125
+msgid ""
+"Other commands:\n"
+"---------------\n"
+msgstr ""
+"äÒÕÇÉÅ ËÏÍÁÎÄÙ:\n"
+"---------------\n"
+
+#: info/infodoc.c:79
+msgid "\\%-10[menu-digit] Pick first ... ninth item in node's menu.\n"
+msgstr ""
+"\\%-10[menu-digit] ÷ÙÂÒÁÔØ ÐÅÒ×ÙÊ ... ÄÅ×ÑÔÙÊ ÐÕÎËÔ ÍÅÎÀ × ÔÅËÕÝÅÊ ÎÏÄÅ.\n"
+
+#: info/infodoc.c:80
+msgid "\\%-10[last-menu-item] Pick last item in node's menu.\n"
+msgstr "\\%-10[last-menu-item] ÷ÙÂÒÁÔØ ÐÏÓÌÅÄÎÉÊ ÐÕÎËÔ ÍÅÎÀ × ÔÅËÕÝÅÊ ÎÏÄÅ\n"
+
+#: info/infodoc.c:81
+msgid ""
+"\\%-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"
+msgstr ""
+"\\%-10[index-search] éÓËÁÔØ ÚÁÄÁÎÎÕÀ ÓÔÒÏËÕ × ÁÌÆÁ×ÉÔÎÙÈ ÕËÁÚÁÔÅÌÑÈ\n"
+" Info-ÆÁÊÌÁ É ×ÙÂÒÁÔØ ÎÏÄÕ ÐÏ ÐÅÒ×ÏÊ ÎÁÊÄÅÎÎÏÊ ÓÓÙÌËÅ.\n"
+
+#: info/infodoc.c:83
+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"
+
+#: info/infodoc.c:85
+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"
+
+#: info/infodoc.c:87
+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"
+
+#: info/infodoc.c:98
+#, c-format
+msgid " %-10s Quit this help.\n"
+msgstr " %-10s ðÏËÉÎÕÔØ ÜÔÕ ÓÐÒÁ×ËÕ.\n"
+
+#: info/infodoc.c:99
+#, c-format
+msgid " %-10s Quit Info altogether.\n"
+msgstr " %-10s ðÏËÉÎÕÔØ ÔÁËÖÅ Info.\n"
+
+#: info/infodoc.c:100
+#, c-format
+msgid " %-10s Invoke the Info tutorial.\n"
+msgstr " %-10s ÷ÙÚ×ÁÔØ ÏÂÕÞÁÀÝÅÅ ÒÕËÏ×ÏÄÓÔ×Ï.\n"
+
+#: info/infodoc.c:104
+#, c-format
+msgid " %-10s Move to the `next' node of this node.\n"
+msgstr " %-10s ðÅÒÅÊÔÉ Ë `ÓÌÅÄÕÀÝÅÊ' ÎÏÄÅ.\n"
+
+#: info/infodoc.c:105
+#, c-format
+msgid " %-10s Move to the `previous' node of this node.\n"
+msgstr " %-10s ðÅÒÅÊÔÉ Ë `ÐÒÅÄÙÄÕÝÅÊ' ÎÏÄÅ.\n"
+
+#: info/infodoc.c:106
+#, c-format
+msgid " %-10s Move `up' from this node.\n"
+msgstr " %-10s ðÅÒÅÊÔÉ Ë ÎÏÄÅ `××ÅÒÈ'.\n"
+
+#: info/infodoc.c:107
+#, c-format
+msgid " %-10s Pick menu item specified by name.\n"
+msgstr " %-10s ðÅÒÅÊÔÉ Ë ÚÁÄÁÎÎÏÍÕ ÐÕÎËÔÕ ÍÅÎÀ.\n"
+
+#: info/infodoc.c:108
+msgid " Picking a menu item causes another node to be selected.\n"
+msgstr ""
+" ðÒÉ ÐÅÒÅÈÏÄÅ Ë ÚÁÄÁÎÎÏÍÕ ÐÕÎËÔÕ ÍÅÎÀ ×ÙÂÉÒÁÅÔÓÑ ÄÒÕÇÁÑ ÎÏÄÁ.\n"
+
+#: info/infodoc.c:109
+#, c-format
+msgid " %-10s Follow a cross reference. Reads name of reference.\n"
+msgstr " %-10s ðÅÒÅÊÔÉ ÐÏ ÓÓÙÌËÅ. óÞÉÔÙ×ÁÅÔ ÉÍÑ ÓÓÙÌËÉ.\n"
+
+#: info/infodoc.c:110
+#, c-format
+msgid " %-10s Move to the last node seen in this window.\n"
+msgstr " %-10s ðÅÒÅÊÔÉ ÎÁ ÐÏÓÌÅÄÎÀÀ ÎÏÄÕ × ÜÔÏÍ ÏËÎÅ.\n"
+
+#: info/infodoc.c:111
+#, c-format
+msgid " %-10s Skip to next hypertext link within this node.\n"
+msgstr " %-10s ðÅÒÅÍÅÓÔÉÔØÓÑ Ë ÓÌÅÄÕÀÝÅÊ ÇÉÐÅÒÓÓÙÌËÅ × ÜÔÏÊ ÎÏÄÅ.\n"
+
+#: info/infodoc.c:112
+#, c-format
+msgid " %-10s Follow the hypertext link under cursor.\n"
+msgstr " %-10s ðÅÒÅÊÔÉ ÐÏ ÇÉÐÅÒÓÓÙÌËÅ ÐÏÄ ËÕÒÓÏÒÏÍ.\n"
+
+#: info/infodoc.c:113
+#, c-format
+msgid " %-10s Move to the `directory' node. Equivalent to `g (DIR)'.\n"
+msgstr " %-10s ðÅÒÅÊÔÉ Ë ËÏÒÎÅ×ÏÊ ÎÏÄÅ. üË×É×ÁÌÅÎÔÎÏ `g (DIR)'.\n"
+
+#: info/infodoc.c:114
+#, c-format
+msgid " %-10s Move to the Top node. Equivalent to `g Top'.\n"
+msgstr " %-10s ðÅÒÅÊÔÉ Ë ÎÏÄÅ Top. üË×É×ÁÌÅÎÔÎÏ `g Top'.\n"
+
+#: info/infodoc.c:118
+#, c-format
+msgid " %-10s Scroll forward a page.\n"
+msgstr " %-10s ðÒÏËÒÕÔÉÔØ ÎÁ ÓÔÒÁÎÉÃÕ ×ÐÅÒÅÄ.\n"
+
+#: info/infodoc.c:119
+#, c-format
+msgid " %-10s Scroll backward a page.\n"
+msgstr " %-10s ðÒÏËÒÕÔÉÔØ ÎÁ ÓÔÒÁÎÉÃÕ ÎÁÚÁÄ.\n"
+
+#: info/infodoc.c:120
+#, c-format
+msgid " %-10s Go to the beginning of this node.\n"
+msgstr " %-10s ðÅÒÅÍÅÓÔÉÔØÓÑ × ÎÁÞÁÌÏ ÜÔÏÊ ÎÏÄÙ.\n"
+
+#: info/infodoc.c:121
+#, c-format
+msgid " %-10s Go to the end of this node.\n"
+msgstr " %-10s ðÅÒÅÍÅÓÔÉÔØÓÑ × ËÏÎÅà ÜÔÏÊ ÎÏÄÙ.\n"
+
+#: info/infodoc.c:122
+#, c-format
+msgid " %-10s Scroll forward 1 line.\n"
+msgstr " %-10s ðÒÏËÒÕÔÉÔØ ÎÁ ÓÔÒÁÎÉÃÕ ×ÐÅÒÅÄ.\n"
+
+#: info/infodoc.c:123
+#, c-format
+msgid " %-10s Scroll backward 1 line.\n"
+msgstr " %-10s ðÒÏËÒÕÔÉÔØ ÎÁ ÓÔÒÁÎÉÃÕ ÎÁÚÁÄ.\n"
+
+#: info/infodoc.c:127
+#, c-format
+msgid " %-10s Pick first ... ninth item in node's menu.\n"
+msgstr " %-10s ÷ÙÂÒÁÔØ ÐÅÒ×ÙÊ ... ÄÅ×ÑÔÙÊ ÐÕÎËÔ ÍÅÎÀ × ÔÅËÕÝÅÊ ÎÏÄÅ.\n"
+
+#: info/infodoc.c:128
+#, c-format
+msgid " %-10s Pick last item in node's menu.\n"
+msgstr " %-10s ÷ÙÂÒÁÔØ ÐÏÓÌÅÄÎÉÊ ÐÕÎËÔ ÍÅÎÀ × ÔÅËÕÝÅÊ ÎÏÄÅ\n"
+
+#: info/infodoc.c:129
+#, c-format
+msgid ""
+" %-10s Search for a specified string in the index entries of this Info\n"
+msgstr ""
+" %-10s ðÒÏÉÚ×ÅÓÔÉ ÐÏÉÓË ÚÁÄÁÎÎÏÊ ÓÔÒÏËÉ ÓÒÅÄÉ ×ÈÏÖÄÅÎÉÊ ÉÍÅÎÎÙÈ ÕËÁÚÁÔÅÌÅÊ "
+"ÜÔÏÇÏ\n"
+
+#: info/infodoc.c:130
+msgid ""
+" file, and select the node referenced by the first entry "
+"found.\n"
+msgstr " Info-ÆÁÊÌÁ É ×ÙÂÒÁÔØ ÎÏÄÕ ÐÏ ÐÅÒ×ÏÊ ÎÁÊÄÅÎÎÏÊ ÓÓÙÌËÅ.\n"
+
+#: info/infodoc.c:131
+#, c-format
+msgid " %-10s Move to node specified by name.\n"
+msgstr " %-10s ðÅÒÅÊÔÉ Ë ÚÁÄÁÎÎÏÊ ÎÏÄÅ.\n"
+
+#: info/infodoc.c:132
+msgid ""
+" You may include a filename as well, as in (FILENAME)NODENAME.\n"
+msgstr " ÷Ù ÍÏÖÅÔÅ ÚÁÄÁÔØ ÔÁËÖÅ ÉÍÑ ÆÁÊÌÁ, ÎÁÐÒÉÍÅÒ (æáêì)îïäá.\n"
+
+#: info/infodoc.c:133
+#, c-format
+msgid " %-10s Search forward for a specified string,\n"
+msgstr " %-10s îÁÊÔÉ ÚÁÄÁÎÎÕÀ ÓÔÒÏËÕ, É ÐÅÒÅÊÔÉ Ë\n"
+
+#: info/infodoc.c:134 info/infodoc.c:136
+msgid ""
+" and select the node in which the next occurrence is found.\n"
+msgstr " ÎÏÄÅ, × ËÏÔÏÒÏÊ ÎÁÊÄÅÎÏ ÓÌÅÄÕÀÝÅÅ ×ÈÏÖÄÅÎÉÅ.\n"
+
+#: info/infodoc.c:135
+#, c-format
+msgid " %-10s Search backward for a specified string\n"
+msgstr " %-10s îÁÊÔÉ ÚÁÄÁÎÎÕÀ ÓÔÒÏËÕ × ÏÂÒÁÔÎÏÍ ÎÁÐÒÁ×ÌÅÎÉÉ, É ÐÅÒÅÊÔÉ Ë\n"
+
+#: info/infodoc.c:316
+msgid "The current search path is:\n"
+msgstr "ôÅËÕÝÉÊ ÐÕÔØ ÐÏÉÓËÁ:\n"
+
+#: info/infodoc.c:320
+msgid ""
+"Commands available in Info windows:\n"
+"\n"
+msgstr ""
+"ëÏÍÁÎÄÙ, ÄÏÓÔÕÐÎÙÅ × ÏËÎÁÈ Info:\n"
+"\n"
+
+#: info/infodoc.c:324
+msgid ""
+"Commands available in the echo area:\n"
+"\n"
+msgstr ""
+"ëÏÍÁÎÄÙ, ÄÏÓÔÕÐÎÙÅ × ÜÈÏ-ÏÂÌÁÓÔÉ:\n"
+"\n"
+
+#: info/infodoc.c:347
+#, c-format
+msgid ""
+"The following commands can only be invoked via %s:\n"
+"\n"
+msgstr ""
+"óÌÅÄÕÀÝÉÅ ËÏÍÁÎÄÙ ÍÏÇÕÔ ÂÙÔØ ×ÙÚ×ÁÎÙ ÔÏÌØËÏ Ó ÐÏÍÏÝØÀ %s:\n"
+"\n"
+
+#: info/infodoc.c:351
+msgid ""
+"The following commands cannot be invoked at all:\n"
+"\n"
+msgstr ""
+"óÌÅÄÕÀÝÉÅ ËÏÍÁÎÄÙ ×ÏÏÂÝÅ ÎÅ ÍÏÇÕÔ ÂÙÔØ ×ÙÚ×ÁÎÙ:\n"
+"\n"
+
+#: info/infodoc.c:375
+msgid "--- Use `\\[history-node]' or `\\[kill-node]' to exit ---\n"
+msgstr ""
+"--- éÓÐÏÌØÚÕÊÔÅ `\\[history-node]' ÉÌÉ `\\[kill-node]' ÄÌÑ ×ÙÈÏÄÁ ---\n"
+
+#: info/infodoc.c:485
+msgid "Display help message"
+msgstr "ðÏËÁÚÁÔØ ÓÐÒÁ×ËÕ"
+
+#: info/infodoc.c:503
+msgid "Visit Info node `(info)Help'"
+msgstr "ïÂÒÁÔÉÔØÓÑ Ë Info-ÎÏÄÅ `(info)Help'"
+
+#: info/infodoc.c:641
+msgid "Print documentation for KEY"
+msgstr "ðÏËÁÚÁÔØ ÉÎÆÏÒÍÁÃÉÀ Ï ëìá÷éûå"
+
+#: info/infodoc.c:653
+#, c-format
+msgid "Describe key: %s"
+msgstr "ïÐÉÓÁÔØ ËÌÁ×ÉÛÕ: %s"
+
+#: info/infodoc.c:664
+#, c-format
+msgid "ESC %s is undefined."
+msgstr "ESC %s ÎÅÏÐÒÅÄÅÌÅÎÏ."
+
+#: info/infodoc.c:680 info/infodoc.c:709
+#, c-format
+msgid "%s is undefined."
+msgstr "%s ÎÅÏÐÒÅÄÅÌÅÎÏ."
+
+#: info/infodoc.c:730
+#, c-format
+msgid "%s is defined to %s."
+msgstr "%s ÐÒÉ×ÑÚÁÎÏ Ë %s."
+
+#: info/infodoc.c:1153
+msgid "Show what to type to execute a given command"
+msgstr "ðÏËÁÚÙ×ÁÅÔ, ÞÔÏ ÎÕÖÎÏ ÎÁÐÅÞÁÔÁÔØ, ÞÔÏÂÙ ×ÙÐÏÌÎÉÔØ ÄÁÎÎÕÀ ËÏÍÁÎÄÕ"
+
+#: info/infodoc.c:1157
+msgid "Where is command: "
+msgstr "ëÏÍÁÎÄÁ: "
+
+#: info/infodoc.c:1179
+#, c-format
+msgid "`%s' is not on any keys"
+msgstr "`%s' ÎÅ ÐÒÉ×ÑÚÁÎÁ ÎÉ Ë ËÁËÉÍ ËÌÁ×ÉÛÁÍ"
+
+#: info/infodoc.c:1186
+#, c-format
+msgid "%s can only be invoked via %s."
+msgstr "%s ÍÏÖÅÔ ÂÙÔØ ×ÙÚ×ÁÎÁ ÔÏÌØËÏ Ó ÐÏÍÏÝØÀ %s."
+
+#: info/infodoc.c:1190
+#, c-format
+msgid "%s can be invoked via %s."
+msgstr "%s ÍÏÖÅÔ ÂÙÔØ ×ÙÚ×ÁÎÁ Ó ÐÏÍÏÝØÀ %s."
+
+#: info/infodoc.c:1195
+#, c-format
+msgid "There is no function named `%s'"
+msgstr "æÕÎËÃÉÉ Ó ÉÍÅÎÅÍ `%s' ÎÅÔ"
+
+#: info/infokey.c:145
+#, c-format
+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"
+"íÙ îå ÐÒÅÄÏÓÔÁ×ÌÑÅÍ ÇÁÒÁÎÔÉÊ. ÷Ù ÍÏÖÅÔÅ ÒÁÓÐÒÏÓÔÒÁÎÑÔØ ÜÔÉ ÐÒÏÇÒÁÍÍÙ, ÐÒÉ\n"
+"ÓÏÂÌÀÄÅÎÉÉ ÕÓÌÏ×ÉÊ õÎÉ×ÅÒÓÁÌØÎÏÊ ïÂÝÅÓÔ×ÅÎÎÏÊ ìÉÃÅÎÚÉÉ GNU.\n"
+"äÌÑ ÐÏÌÕÞÅÎÉÑ ÐÏÄÒÏÂÎÏÊ ÉÎÆÏÒÍÁÃÉÉ Ï ×ÏÚÍÏÖÎÏÓÔÉ ÒÁÓÐÒÏÓÔÒÁÎÅÎÉÑ ÓÍÏÔÒÉÔÅ\n"
+"ÆÁÊÌ COPYING.\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:1500
+#, c-format
+msgid "Ignoring invalid infokey file `%s' - too small"
+msgstr "îÅÐÒÁ×ÉÌØÎÙÊ ÆÁÊÌ infokey `%s' ÉÇÎÏÒÉÒÕÅÔÓÑ - ÓÌÉÛËÏÍ ÍÁÌÅÎØËÉÊ"
+
+#: info/infomap.c:1503
+#, c-format
+msgid "Ignoring invalid infokey file `%s' - too big"
+msgstr "îÅÐÒÁ×ÉÌØÎÙÊ ÆÁÊÌ infokey `%s' ÉÇÎÏÒÉÒÕÅÔÓÑ - ÓÌÉÛËÏÍ ÂÏÌØÛÏÊ"
+
+#: info/infomap.c:1516
+#, c-format
+msgid "Error reading infokey file `%s' - short read"
+msgstr "ïÛÉÂËÁ ÞÔÅÎÉÑ ÆÁÊÌÁ infokey `%s' - ÞÔÅÎÉÅ ÐÒÅÒ×ÁÎÏ"
+
+#: info/infomap.c:1535
+#, c-format
+msgid ""
+"Invalid infokey file `%s' (bad magic numbers) -- run infokey to update it"
+msgstr ""
+"æÁÊÌ infokey `%s' ÎÅÐÒÉÅÍÌÅÍ (ÎÅ×ÅÒÎÁÑ ÓÉÇÎÁÔÕÒÁ) -- ÚÁÐÕÓÔÉÔÅ infokey, "
+"ÞÔÏÂÙ ÏÂÎÏ×ÉÔØ ÅÇÏ"
+
+#: info/infomap.c:1544
+#, c-format
+msgid "Your infokey file `%s' is out of date -- run infokey to update it"
+msgstr "æÁÊÌ infokey `%s' ÕÓÔÁÒÅÌ -- ÚÁÐÕÓÔÉÔÅ infokey, ÞÔÏÂÙ ÏÂÎÏ×ÉÔØ ÅÇÏ"
+
+#: info/infomap.c:1560
+#, 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:1581
+#, c-format
+msgid ""
+"Invalid infokey file `%s' (bad section code) -- run infokey to update it"
+msgstr ""
+"æÁÊÌ infokey `%s' ÎÅÐÒÉÅÍÌÅÍ (ÎÅ×ÅÒÎÙÊ ËÏÄ ÒÁÚÄÅÌÁ) -- ÚÁÐÕÓÔÉÔÅ infokey, "
+"ÞÔÏÂÙ ÏÂÎÏ×ÉÔØ ÅÇÏ"
+
+#: info/infomap.c:1716
+msgid "Bad data in infokey file -- some key bindings ignored"
+msgstr ""
+"ðÏ×ÒÅÖÄÅÎÎÙÅ ÄÁÎÎÙÅ × ÆÁÊÌÅ infokey -- ÎÅËÏÔÏÒÙÅ ÐÒÉ×ÑÚËÉ ÐÒÏÉÇÎÏÒÉÒÏ×ÁÎÙ"
+
+#: info/infomap.c:1766
+msgid "Bad data in infokey file -- some var settings ignored"
+msgstr ""
+"ðÏ×ÒÅÖÄÅÎÎÙÅ ÄÁÎÎÙÅ × ÆÁÊÌÅ infokey -- ÎÅËÏÔÏÒÙÅ ÕÓÔÁÎÏ×ËÉ ÐÅÒÅÍÅÎÎÙÈ "
+"ÐÒÏÉÇÎÏÒÉÒÏ×ÁÎÙ"
+
+#: info/m-x.c:69
+msgid "Read the name of an Info command and describe it"
+msgstr "óÞÉÔÁÔØ ÉÍÑ ËÏÍÁÎÄÙ Info É ÐÏËÁÚÁÔØ ÅÅ ÏÐÉÓÁÎÉÅ"
+
+#: info/m-x.c:73
+msgid "Describe command: "
+msgstr "ïÐÉÓÁÔØ ËÏÍÁÎÄÕ: "
+
+#: info/m-x.c:96
+msgid "Read a command name in the echo area and execute it"
+msgstr "óÞÉÔÁÔØ ÉÍÑ ËÏÍÁÎÄÙ × ÜÈÏ-ÏÂÌÁÓÔÉ É ÉÓÐÏÌÎÉÔØ ÅÅ"
+
+#: info/m-x.c:140
+msgid "Cannot execute an `echo-area' command here."
+msgstr "úÄÅÓØ ÎÅÌØÚÑ ×ÙÐÏÌÎÉÔØ ËÏÍÁÎÄÕ ÜÈÏ-ÏÂÌÁÓÔÉ."
+
+#: info/m-x.c:154
+#, c-format
+msgid "Undefined command: %s"
+msgstr "îÅÏÐÒÅÄÅÌÅÎÎÁÑ ËÏÍÁÎÄÁ: %s"
+
+#: info/m-x.c:160
+msgid "Set the height of the displayed window"
+msgstr "õÓÔÁÎÏ×ÉÔØ ×ÙÓÏÔÕ ÏÔÏÂÒÁÖÁÅÍÏÇÏ ÏËÎÁ"
+
+#: info/m-x.c:173
+#, c-format
+msgid "Set screen height to (%d): "
+msgstr "õÓÔÁÎÏ×ÉÔØ ×ÙÓÏÔÕ ÜËÒÁÎÁ ÒÁ×ÎÏÊ (%d): "
+
+#: info/makedoc.c:162 info/makedoc.c:170
+#, c-format
+msgid ""
+" Source files groveled to make this file include:\n"
+"\n"
+msgstr ""
+" üÔÏÔ ÆÁÊÌ ×ËÌÀÞÁÅÔ:\n"
+"\n"
+
+#: info/makedoc.c:550
+#, c-format
+msgid "Couldn't manipulate the file %s.\n"
+msgstr "îÅ×ÏÚÍÏÖÎÏ ÏÂÒÁÂÏÔÁÔØ ÆÁÊÌ %s.\n"
+
+#: info/nodemenu.c:31
+msgid ""
+"\n"
+"* Menu:\n"
+" (File)Node Lines Size Containing File\n"
+" ---------- ----- ---- ---------------"
+msgstr ""
+"\n"
+"* Menu:\n"
+" (æÁÊÌ)îÏÄÁ óÔÒÏË òÁÚÍÅÒ æÁÊÌ\n"
+" ---------- ----- ------ ----"
+
+#: info/nodemenu.c:202
+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:224
+msgid "Make a window containing a menu of all of the currently visited nodes"
+msgstr "óÏÚÄÁÔØ ÏËÎÏ, ÓÏÄÅÒÖÁÝÅÅ ÍÅÎÀ ÐÏÓÅÝÅÎÎÙÈ ÒÁÎÅÅ ÎÏÄ"
+
+#: info/nodemenu.c:304
+msgid "Select a node which has been previously visited in a visible window"
+msgstr "÷ÙÂÒÁÔØ ÒÁÎÅÅ ÐÏÓÅÝÅÎÎÕÀ ÎÏÄÕ × ×ÉÄÉÍÏÍ ÏËÎÅ"
+
+#: info/nodemenu.c:317
+msgid "Select visited node: "
+msgstr "÷ÙÂÒÁÔØ ÐÏÓÅÝÅÎÎÕÀ ÒÁÎÅÅ ÎÏÄÕ: "
+
+#: info/nodemenu.c:337 info/session.c:2264
+#, c-format
+msgid "The reference disappeared! (%s)."
+msgstr "óÓÙÌËÁ ÉÓÞÅÚÌÁ! (%s)."
+
+#: info/session.c:162
+#, 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:620
+msgid "Move down to the next line"
+msgstr "óÍÅÓÔÉÔØÓÑ ÎÁ ÓÔÒÏËÕ ÎÉÖÅ"
+
+#: info/session.c:635
+msgid "Move up to the previous line"
+msgstr "óÍÅÓÔÉÔØÓÑ ÎÁ ÓÔÒÏËÕ ×ÙÛÅ"
+
+#: info/session.c:650
+msgid "Move to the end of the line"
+msgstr "óÍÅÓÔÉÔØÓÑ × ËÏÎÅÃ ÓÔÒÏËÉ"
+
+#: info/session.c:670
+msgid "Move to the start of the line"
+msgstr "óÍÅÓÔÉÔØÓÑ × ÎÁÞÁÌÏ ÓÔÒÏËÉ"
+
+#: info/session.c:860 makeinfo/node.c:1424
+msgid "Next"
+msgstr "óÌÅÄÕÀÝÁÑ"
+
+#: info/session.c:863
+msgid "Following Next node..."
+msgstr "ðÅÒÅÈÏÄ ÎÁ ÎÏÄÕ \"óÌÅÄÕÀÝÁÑ\"..."
+
+#: info/session.c:881
+msgid "Selecting first menu item..."
+msgstr "÷ÙÂÉÒÁÅÔÓÑ ÐÅÒ×ÙÊ ÐÕÎËÔ ÍÅÎÀ..."
+
+#: info/session.c:893
+msgid "Selecting Next node..."
+msgstr "÷ÙÂÉÒÁÅÔÓÑ ÎÏÄÁ \"óÌÅÄÕÀÝÁÑ\"..."
+
+#: info/session.c:964
+#, c-format
+msgid "Moving Up %d time(s), then Next."
+msgstr "ðÅÒÅÍÅÝÅÎÉÅ \"÷×ÅÒÈ\" %d ÒÁÚ(Á), ÚÁÔÅÍ \"óÌÅÄÕÀÝÁÑ\"."
+
+#: info/session.c:988
+msgid "No more nodes within this document."
+msgstr "÷ ÜÔÏÍ ÄÏËÕÍÅÎÔÅ ÂÏÌØÛÅ ÎÅÔ ÎÏÄ."
+
+#: info/session.c:1011
+msgid "No `Prev' for this node."
+msgstr "äÌÑ ÜÔÏÊ ÎÏÄÙ ÎÅÔ ÓÓÙÌËÉ `ðÒÅÄÙÄÕÝÁÑ'."
+
+#: info/session.c:1014 info/session.c:1073
+msgid "Moving Prev in this window."
+msgstr "ðÅÒÅÈÏÄ ÎÁ ÎÏÄÕ \"ðÒÅÄÙÄÕÝÁÑ\" × ÜÔÏÍ ÏËÎÅ."
+
+#: info/session.c:1030
+msgid "No `Prev' or `Up' for this node within this document."
+msgstr "÷ ÜÔÏÍ ÄÏËÕÍÅÎÔÅ ÎÅÔ ÓÓÙÌËÉ `ðÒÅÄÙÄÕÝÁÑ' ÉÌÉ `÷×ÅÒÈ' ÄÌÑ ÜÔÏÊ ÎÏÄÙ."
+
+#: info/session.c:1034
+msgid "Moving Up in this window."
+msgstr "ðÅÒÅÈÏÄ ÎÁ ÎÏÄÕ \"÷×ÅÒÈ\" × ÜÔÏÍ ÏËÎÅ."
+
+#: info/session.c:1084
+msgid "Moving to `Prev's last menu item."
+msgstr "ðÅÒÅÈÏÄ ÎÁ ÐÏÓÌÅÄÎÉÊ ÐÕÎËÔ ÍÅÎÀ ÎÏÄÙ `ðÒÅÄÙÄÕÝÁÑ'."
+
+#: info/session.c:1095
+msgid "Move forwards or down through node structure"
+msgstr "ðÒÏÄ×ÉÇÁÔØÓÑ ×ÐÅÒÅÄ ÉÌÉ ×ÎÉÚ ÐÏ ÓÔÒÕËÔÕÒÅ ÎÏÄ"
+
+#: info/session.c:1111
+msgid "Move backwards or up through node structure"
+msgstr "ðÒÏÄ×ÉÇÁÔØÓÑ ÎÁÚÁÄ ÉÌÉ ××ÅÒÈ ÐÏ ÓÔÒÕËÔÕÒÅ ÎÏÄ"
+
+#: info/session.c:1205
+msgid "Scroll forward in this window"
+msgstr "ðÒÏËÒÕÔÉÔØ ×ÐÅÒÅÄ ÔÅËÕÝÅÅ ÏËÎÏ"
+
+#: info/session.c:1213
+msgid "Scroll forward in this window and set default window size"
+msgstr "ðÒÏËÒÕÔÉÔØ ÔÅËÕÝÅÅ ÏËÎÏ ×ÐÅÒÅÄ É ÕÓÔÁÎÏ×ÉÔØ ÒÁÚÍÅÒ ÏËÎÁ ÐÏ ÕÍÏÌÞÁÎÉÀ"
+
+#: info/session.c:1221
+msgid "Scroll forward in this window staying within node"
+msgstr "ðÒÏËÒÕÔÉÔØ ×ÐÅÒÅÄ ÔÅËÕÝÅÅ ÏËÎÏ, ÏÓÔÁ×ÁÑÓØ × ÔÅËÕÝÅÊ ÎÏÄÅ"
+
+#: info/session.c:1229
+msgid ""
+"Scroll forward in this window staying within node and set default window size"
+msgstr ""
+"ðÒÏËÒÕÔÉÔØ ÔÅËÕÝÅÅ ÏËÎÏ ×ÐÅÒÅÄ, ÏÓÔÁ×ÁÑÓØ × ÔÅËÕÝÅÊ ÎÏÄÅ, É ÕÓÔÁÎÏ×ÉÔØ "
+"ÒÁÚÍÅÒ ÏËÎÁ ÐÏ ÕÍÏÌÞÁÎÉÀ"
+
+#: info/session.c:1237
+msgid "Scroll backward in this window"
+msgstr "ðÒÏËÒÕÔÉÔØ ÎÁÚÁÄ ÔÅËÕÝÅÅ ÏËÎÏ"
+
+#: info/session.c:1245
+msgid "Scroll backward in this window and set default window size"
+msgstr "ðÒÏËÒÕÔÉÔØ ÔÅËÕÝÅÅ ÏËÎÏ ÎÁÚÁÄ É ÕÓÔÁÎÏ×ÉÔØ ÒÁÚÍÅÒ ÏËÎÁ ÐÏ ÕÍÏÌÞÁÎÉÀ"
+
+#: info/session.c:1254
+msgid "Scroll backward in this window staying within node"
+msgstr "ðÒÏËÒÕÔÉÔØ ÎÁÚÁÄ ÔÅËÕÝÅÅ ÏËÎÏ, ÏÓÔÁ×ÁÑÓØ × ÔÅËÕÝÅÊ ÎÏÄÅ"
+
+#: info/session.c:1262
+msgid ""
+"Scroll backward in this window staying within node and set default window "
+"size"
+msgstr ""
+"ðÒÏËÒÕÔÉÔØ ÔÅËÕÝÅÅ ÏËÎÏ ÎÁÚÁÄ, ÏÓÔÁ×ÁÑÓØ × ÔÅËÕÝÅÊ ÎÏÄÅ, É ÕÓÔÁÎÏ×ÉÔØ ÒÁÚÍÅÒ "
+"ÏËÎÁ ÐÏ ÕÍÏÌÞÁÎÉÀ"
+
+#: info/session.c:1270
+msgid "Move to the start of this node"
+msgstr "ðÅÒÅÍÅÓÔÉÔØÓÑ × ÎÁÞÁÌÏ ÎÏÄÙ"
+
+#: info/session.c:1277
+msgid "Move to the end of this node"
+msgstr "ðÅÒÅÍÅÓÔÉÔØÓÑ × ËÏÎÅà ÎÏÄÙ"
+
+#: info/session.c:1284
+msgid "Scroll down by lines"
+msgstr "ðÒÏËÒÕÔÉÔØ ÎÁ ÎÅÓËÏÌØËÏ ÓÔÒÏË ×ÎÉÚ"
+
+#: info/session.c:1301
+msgid "Scroll up by lines"
+msgstr "ðÒÏËÒÕÔÉÔØ ÎÁ ÎÅÓËÏÌØËÏ ÓÔÒÏË ××ÅÒÈ"
+
+#: info/session.c:1319
+msgid "Scroll down by half screen size"
+msgstr "ðÒÏËÒÕÔÉÔØ ÎÁ ÐÏÌÜËÒÁÎÁ ×ÎÉÚ"
+
+#: info/session.c:1345
+msgid "Scroll up by half screen size"
+msgstr "ðÒÏËÒÕÔÉÔØ ÎÁ ÐÏÌÜËÒÁÎÁ ××ÅÒÈ"
+
+#: info/session.c:1374
+msgid "Select the next window"
+msgstr "÷ÙÂÒÁÔØ ÓÌÅÄÕÀÝÅÅ ÏËÎÏ"
+
+#: info/session.c:1413
+msgid "Select the previous window"
+msgstr "÷ÙÂÒÁÔØ ÐÒÅÄÙÄÕÝÅÅ ÏËÎÏ"
+
+#: info/session.c:1464
+msgid "Split the current window"
+msgstr "òÁÚÂÉÔØ ÔÅËÕÝÅÅ ÏËÎÏ"
+
+#: info/session.c:1545
+msgid "Delete the current window"
+msgstr "õÄÁÌÉÔØ ÔÅËÕÝÅÅ ÏËÎÏ"
+
+#: info/session.c:1553
+msgid "Cannot delete a permanent window"
+msgstr "îÅ×ÏÚÍÏÖÎÏ ÕÄÁÌÉÔØ ÐÏÓÔÏÑÎÎÏÅ ÏËÎÏ"
+
+#: info/session.c:1585
+msgid "Delete all other windows"
+msgstr "õÄÁÌÉÔØ ×ÓÅ ÏÓÔÁÌØÎÙÅ ÏËÎÁ"
+
+#: info/session.c:1631
+msgid "Scroll the other window"
+msgstr "ðÒÏËÒÕÔÉÔØ ÄÒÕÇÏÅ ÏËÎÏ"
+
+#: info/session.c:1652
+msgid "Scroll the other window backward"
+msgstr "ðÒÏËÒÕÔÉÔØ ÄÒÕÇÏÅ ÏËÎÏ ÎÁÚÁÄ"
+
+#: info/session.c:1658
+msgid "Grow (or shrink) this window"
+msgstr "õ×ÅÌÉÞÉÔØ (ÉÌÉ ÕÍÅÎØÛÉÔØ) ÔÅËÕÝÅÅ ÏËÎÏ"
+
+#: info/session.c:1669
+msgid "Divide the available screen space among the visible windows"
+msgstr "òÁÚÄÅÌÉÔØ ÄÏÓÔÕÐÎÏÅ ÍÅÓÔÏ ÎÁ ÜËÒÁÎÅ ÍÅÖÄÕ ×ÉÄÉÍÙÍÉ ÏËÎÁÍÉ"
+
+#: info/session.c:1676
+msgid "Toggle the state of line wrapping in the current window"
+msgstr "ðÅÒÅËÌÀÞÉÔØ ÒÅÖÉÍ ÒÁÚÂÉ×ÁÎÉÑ ÓÔÒÏË × ÔÅËÕÝÅÍ ÏËÎÅ"
+
+#: info/session.c:1848
+msgid "Select the Next node"
+msgstr "ðÅÒÅÊÔÉ ÎÁ `óÌÅÄÕÀÝÕÀ' ÎÏÄÕ"
+
+#: info/session.c:1856
+msgid "Select the Prev node"
+msgstr "ðÅÒÅÊÔÉ ÎÁ `ðÒÅÄÙÄÕÝÕÀ' ÎÏÄÕ"
+
+#: info/session.c:1864
+msgid "Select the Up node"
+msgstr "ðÅÒÅÊÔÉ ÎÁ `÷ÅÒÈÎÀÀ' ÎÏÄÕ"
+
+#: info/session.c:1871
+msgid "Select the last node in this file"
+msgstr "ðÅÒÅÊÔÉ ÎÁ ÐÏÓÌÅÄÎÀÀ ÎÏÄÕ × ÆÁÊÌÅ"
+
+#: info/session.c:1898 info/session.c:1931
+msgid "This window has no additional nodes"
+msgstr "üÔÏ ÏËÎÏ ÎÅ ÉÍÅÅÔ ÄÏÐÏÌÎÉÔÅÌØÎÙÈ ÎÏÄ"
+
+#: info/session.c:1904
+msgid "Select the first node in this file"
+msgstr "ðÅÒÅÊÔÉ ÎÁ ÐÅÒ×ÕÀ ÎÏÄÕ × ÆÁÊÌÅ"
+
+#: info/session.c:1938
+msgid "Select the last item in this node's menu"
+msgstr "÷ÙÂÒÁÔØ ÐÏÓÌÅÄÎÉÊ ÐÕÎËÔ ÍÅÎÀ × ÔÅËÕÝÅÊ ÎÏÄÅ"
+
+#: info/session.c:1944
+msgid "Select this menu item"
+msgstr "÷ÙÂÒÁÔØ ÚÁÄÁÎÎÙÊ ÐÕÎËÔ ÍÅÎÀ"
+
+#: info/session.c:1977
+#, c-format
+msgid "There aren't %d items in this menu."
+msgstr "÷ ÜÔÏÍ ÍÅÎÀ ÎÅÔ %d ÐÕÎËÔÏ×."
+
+#: info/session.c:2171 info/session.c:2172
+#, c-format
+msgid "Menu item (%s): "
+msgstr "ðÕÎËÔ ÍÅÎÀ (%s): "
+
+#: info/session.c:2175
+msgid "Menu item: "
+msgstr "ðÕÎËÔ ÍÅÎÀ: "
+
+#: info/session.c:2182 info/session.c:2183
+#, c-format
+msgid "Follow xref (%s): "
+msgstr "ðÅÒÅÊÔÉ ÐÏ ÓÓÙÌËÅ (%s): "
+
+#: info/session.c:2186
+msgid "Follow xref: "
+msgstr "ðÅÒÅÊÔÉ ÐÏ ÓÓÙÌËÅ: "
+
+#: info/session.c:2315
+msgid "Read a menu item and select its node"
+msgstr "óÞÉÔÁÔØ ÉÍÑ ÐÕÎËÔÁ ÍÅÎÀ É ÐÅÒÅÊÔÉ Ë ÓÏÏÔ×ÅÔÓÔ×ÕÀÝÅÊ ÎÏÄÅ"
+
+#: info/session.c:2323
+msgid "Read a footnote or cross reference and select its node"
+msgstr "óÞÉÔÁÔØ ÉÍÑ ÓÓÙÌËÉ ÉÌÉ ÓÎÏÓËÉ É ÐÅÒÅÊÔÉ Ë ÓÏÏÔ×ÅÔÓÔ×ÕÀÝÅÊ ÎÏÄÅ"
+
+#: info/session.c:2329
+msgid "Move to the start of this node's menu"
+msgstr "óÍÅÓÔÉÔØÓÑ Ë ÎÁÞÁÌÕ ÍÅÎÀ ÔÅËÕÝÅÊ ÎÏÄÙ"
+
+#: info/session.c:2353
+msgid "Visit as many menu items at once as possible"
+msgstr "ðÒÏÓÍÏÔÒÅÔØ ÏÄÎÏ×ÒÅÍÅÎÎÏ ËÁË ÍÏÖÎÏ ÂÏÌØÛÅ ÎÏÄ"
+
+#: info/session.c:2381
+msgid "Read a node name and select it"
+msgstr "óÞÉÔÁÔØ ÉÍÑ ÎÏÄÙ É ÐÅÒÅÊÔÉ Ë ÎÅÊ"
+
+#: info/session.c:2436 info/session.c:2441
+msgid "Goto node: "
+msgstr "ðÅÒÅÊÔÉ Ë ÎÏÄÅ: "
+
+#: info/session.c:2505
+#, c-format
+msgid "No menu in node `%s'."
+msgstr "÷ ÎÏÄÅ `%s' ÎÅÔ ÍÅÎÀ."
+
+#: info/session.c:2551
+#, c-format
+msgid "No menu item `%s' in node `%s'."
+msgstr "ðÕÎËÔ ÍÅÎÀ `%s' ÏÔÓÕÔÓÔ×ÕÅÔ × ÎÏÄÅ `%s'."
+
+#: info/session.c:2581
+#, c-format
+msgid "Unable to find node referenced by `%s' in `%s'."
+msgstr "îÅ×ÏÚÍÏÖÎÏ ÎÁÊÔÉ ÎÏÄÕ ÐÏ ÓÓÙÌËÅ `%s' × `%s'."
+
+#: info/session.c:2631
+msgid "Read a list of menus starting from dir and follow them"
+msgstr "óÞÉÔÁÔØ ÓÐÉÓÏË ÍÅÎÀ, ÎÁÞÉÎÁÀÝÉÊÓÑ Ó dir É ÐÒÏÓÌÅÄÏ×ÁÔØ ÐÏ ÎÉÍ"
+
+#: info/session.c:2633
+msgid "Follow menus: "
+msgstr "ðÒÏÓÌÅÄÏ×ÁÔØ ÐÏ ÍÅÎÀ: "
+
+#: info/session.c:2826
+msgid "Find the node describing program invocation"
+msgstr "îÁÈÏÄÉÔ ÎÏÄÕ, ÒÁÓÓËÁÚÙ×ÁÀÝÕÀ, ËÁË ×ÙÚÙ×ÁÔØ ÐÒÏÇÒÁÍÍÕ"
+
+#: info/session.c:2828
+#, c-format
+msgid "Find Invocation node of [%s]: "
+msgstr "îÁÊÔÉ ÎÏÄÕ Invocation ÄÌÑ [%s]: "
+
+#: info/session.c:2866
+msgid "Read a manpage reference and select it"
+msgstr "óÞÉÔÁÔØ ÉÍÑ manpage É ÐÅÒÅÊÔÉ Ë ÎÅÊ"
+
+#: info/session.c:2870
+msgid "Get Manpage: "
+msgstr "ðÒÏÓÍÏÔÒÅÔØ manpage: "
+
+#: info/session.c:2900
+msgid "Select the node `Top' in this file"
+msgstr "ðÅÒÅÊÔÉ ÎÁ `ðÅÒ×ÕÀ' ÎÏÄÕ"
+
+#: info/session.c:2906
+msgid "Select the node `(dir)'"
+msgstr "ðÅÒÅÊÔÉ ÎÁ ÎÏÄÕ `(dir)'"
+
+#: info/session.c:2923 info/session.c:2925
+#, c-format
+msgid "Kill node (%s): "
+msgstr "õÄÁÌÉÔØ ÎÏÄÕ (%s): "
+
+#: info/session.c:2977
+#, c-format
+msgid "Cannot kill node `%s'"
+msgstr "îÅ×ÏÚÍÏÖÎÏ ÕÄÁÌÉÔØ ÎÏÄÕ `%s'"
+
+#: info/session.c:2987
+msgid "Cannot kill the last node"
+msgstr "îÅ×ÏÚÍÏÖÎÏ ÕÄÁÌÉÔØ ÐÏÓÌÅÄÎÀÀ ÎÏÄÕ"
+
+#: info/session.c:3073
+msgid "Select the most recently selected node"
+msgstr "ðÅÒÅÊÔÉ Ë ÐÏÓÌÅÄÎÅÊ ×ÙÂÒÁÎÎÏÊ ÎÏÄÅ"
+
+#: info/session.c:3079
+msgid "Kill this node"
+msgstr "õÄÁÌÉÔØ ÔÅËÕÝÕÀ ÎÏÄÕ"
+
+#: info/session.c:3087
+msgid "Read the name of a file and select it"
+msgstr "óÞÉÔÁÔØ ÉÍÑ ÆÁÊÌÁ É ÐÅÒÅÊÔÉ Ë ÎÅÍÕ"
+
+#: info/session.c:3091
+msgid "Find file: "
+msgstr "ïÂÒÁÔÉÔØÓÑ Ë ÆÁÊÌÕ: "
+
+#: info/session.c:3108
+#, c-format
+msgid "Cannot find `%s'."
+msgstr "îÅ×ÏÚÍÏÖÎÏ ÎÁÊÔÉ `%s'."
+
+#: info/session.c:3151 info/session.c:3269
+#, c-format
+msgid "Could not create output file `%s'."
+msgstr "îÅ×ÏÚÍÏÖÎÏ ÓÏÚÄÁÔØ ×ÙÈÏÄÎÏÊ ÆÁÊÌ `%s'."
+
+#: info/session.c:3165 info/session.c:3287 info/session.c:3347
+msgid "Done."
+msgstr "úÁ×ÅÒÛÅÎÏ."
+
+#: info/session.c:3220
+#, c-format
+msgid "Writing node %s..."
+msgstr "úÁÐÉÓØ ÎÏÄÙ %s..."
+
+#: info/session.c:3296
+msgid "Pipe the contents of this node through INFO_PRINT_COMMAND"
+msgstr "îÁÐÒÁ×ÉÔØ ÓÏÄÅÒÖÉÍÏÅ ÜÔÏÊ ÎÏÄÙ ÎÁ ×ÈÏÄ ËÏÍÁÎÄÙ INFO_PRINT_COMMAND"
+
+#: info/session.c:3331
+#, c-format
+msgid "Cannot open pipe to `%s'."
+msgstr "îÅ×ÏÚÍÏÖÎÏ ÏÔËÒÙÔØ ËÁÎÁÌ Ë `%s'."
+
+#: info/session.c:3337
+#, c-format
+msgid "Printing node %s..."
+msgstr "ðÅÞÁÔØ ÎÏÄÙ %s..."
+
+#: info/session.c:3567
+#, c-format
+msgid "Searching subfile %s ..."
+msgstr "ðÏÉÓË ÆÁÊÌÁ %s ..."
+
+#: info/session.c:3619
+msgid "Read a string and search for it case-sensitively"
+msgstr "óÞÉÔÁÔØ ÓÔÒÏËÕ É ÚÁÐÕÓÔÉÔØ ÒÅÇÉÓÔÒÏÚÁ×ÉÓÉÍÙÊ ÐÏÉÓË"
+
+#: info/session.c:3626
+msgid "Read a string and search for it"
+msgstr "óÞÉÔÁÔØ ÓÔÒÏËÕ É ÚÁÐÕÓÔÉÔØ ÐÏÉÓË"
+
+#: info/session.c:3634
+msgid "Read a string and search backward for it"
+msgstr "óÞÉÔÁÔØ ÓÔÒÏËÕ É ÚÁÐÕÓÔÉÔØ ÐÏÉÓË × ÏÂÒÁÔÎÏÍ ÎÁÐÒÁ×ÌÅÎÉÉ"
+
+#: info/session.c:3670 info/session.c:3677
+#, c-format
+msgid "%s%sfor string [%s]: "
+msgstr "%s%s ÓÔÒÏËÉ [%s]: "
+
+#: info/session.c:3671 info/session.c:3678
+msgid "Search backward"
+msgstr "ïÂÒÁÔÎÙÊ ÐÏÉÓË"
+
+#: info/session.c:3672 info/session.c:3678
+msgid "Search"
+msgstr "ðÏÉÓË"
+
+#: info/session.c:3673 info/session.c:3679
+msgid " case-sensitively "
+msgstr " c ÕÞÅÔÏÍ ÒÅÇÉÓÔÒÁ "
+
+#: info/session.c:3674 info/session.c:3679
+msgid " "
+msgstr " "
+
+#: info/session.c:3718
+msgid "Search failed."
+msgstr "îÅ ÎÁÊÄÅÎÏ"
+
+#: info/session.c:3736
+msgid "Repeat last search in the same direction"
+msgstr "ðÏ×ÔÏÒÉÔØ ÐÏÓÌÅÄÎÉÊ ÐÏÉÓË × ÔÏÍ ÖÅ ÎÁÐÒÁ×ÌÅÎÉÉ"
+
+#: info/session.c:3739 info/session.c:3749
+msgid "No previous search string"
+msgstr "îÅÔ ÓÔÒÏËÉ ÐÒÅÄÙÄÕÝÅÇÏ ÐÏÉÓËÁ"
+
+#: info/session.c:3746
+msgid "Repeat last search in the reverse direction"
+msgstr "ðÏ×ÔÏÒÉÔØ ÐÏÓÌÅÄÎÉÊ ÐÏÉÓË × ÏÂÒÁÔÎÏÍ ÎÁÐÒÁ×ÌÅÎÉÉ"
+
+#: info/session.c:3765 info/session.c:3771
+msgid "Search interactively for a string as you type it"
+msgstr "úÁÐÕÓÔÉÔØ ÉÎÔÅÒÁËÔÉ×ÎÙÊ ÎÁÒÁÝÉ×ÁÅÍÙÊ ÐÏÉÓË"
+
+#: info/session.c:3851
+msgid "I-search backward: "
+msgstr "îÁÒÁÝÉ×ÁÅÍÙÊ ÏÂÒÁÔÎÙÊ ÐÏÉÓË: "
+
+#: info/session.c:3853
+msgid "I-search: "
+msgstr "îÁÒÁÝÉ×ÁÅÍÙÊ ÐÏÉÓË: "
+
+#: info/session.c:3878 info/session.c:3880
+msgid "Failing "
+msgstr "îÅ ÎÁÊÄÅÎÏ "
+
+#: info/session.c:4340
+msgid "Move to the previous cross reference"
+msgstr "óÍÅÓÔÉÔØÓÑ Ë ÐÒÅÄÙÄÕÝÅÊ ÓÓÙÌËÅ"
+
+#: info/session.c:4349
+msgid "Move to the next cross reference"
+msgstr "óÍÅÓÔÉÔØÓÑ Ë ÓÌÅÄÕÀÝÅÊ ÓÓÙÌËÅ"
+
+#: info/session.c:4359
+msgid "Select reference or menu item appearing on this line"
+msgstr "÷ÙÂÒÁÔØ ÓÓÙÌËÕ ÉÌÉ ÐÕÎËÔ ÍÅÎÀ, ÎÁÈÏÄÑÝÉÊÓÑ ÎÁ ÄÁÎÎÏÊ ÓÔÒÏËÅ"
+
+#: info/session.c:4382
+msgid "Cancel current operation"
+msgstr "ïÔÍÅÎÉÔØ ×ÙÐÏÌÎÅÎÉÅ ÔÅËÕÝÅÊ ËÏÍÁÎÄÙ"
+
+#: info/session.c:4389
+msgid "Quit"
+msgstr "÷ÙÈÏÄ"
+
+#: info/session.c:4398
+msgid "Move the cursor to a specific line of the window"
+msgstr "ðÅÒÅÍÅÓÔÉÔØ ËÕÒÓÏÒ Ë ÚÁÄÁÎÎÏÊ ÓÔÒÏËÅ ÏËÎÁ"
+
+#: info/session.c:4430
+msgid "Redraw the display"
+msgstr "ðÅÒÅÒÉÓÏ×ÁÔØ ÜËÒÁÎ"
+
+#: info/session.c:4467
+msgid "Quit using Info"
+msgstr "÷ÙÊÔÉ ÉÚ Info"
+
+#: info/session.c:4480
+msgid "Run command bound to this key's lowercase variant"
+msgstr "úÁÐÕÓÔÉÔØ ËÏÍÁÎÄÕ, ÐÒÉ×ÑÚÁÎÎÕÀ Ë ÜÔÏÊ ËÌÁ×ÉÛÅ × ÎÉÖÎÅÍ ÒÅÇÉÓÔÒÅ"
+
+#: info/session.c:4491
+#, c-format
+msgid "Unknown command (%s)."
+msgstr "îÅÉÚ×ÅÓÔÎÁÑ ËÏÍÁÎÄÁ (%s)."
+
+#: info/session.c:4494
+#, c-format
+msgid "\"%s\" is invalid"
+msgstr "\"%s\" ÎÅ×ÅÒÎÁÑ ËÏÍÁÎÄÁ"
+
+#: info/session.c:4495
+#, c-format
+msgid "`%s' is invalid"
+msgstr "`%s' ÎÅ×ÅÒÎÏ"
+
+#: info/session.c:4709
+msgid "Add this digit to the current numeric argument"
+msgstr "äÏÂÁ×ÌÑÅÔ ÃÉÆÒÕ Ë ÔÅËÕÝÅÍÕ ÞÉÓÌÏ×ÏÍÕ ÁÒÇÕÍÅÎÔÕ"
+
+#: info/session.c:4718
+msgid "Start (or multiply by 4) the current numeric argument"
+msgstr "îÁÞÁÔØ (ÉÌÉ ÕÍÎÏÖÉÔØ ÎÁ 4) ÔÅËÕÝÉÊ ÞÉÓÌÏ×ÏÊ ÁÒÇÕÍÅÎÔ"
+
+#: info/session.c:4733
+msgid "Internally used by \\[universal-argument]"
+msgstr "éÓÐÏÌØÚÕÅÔÓÑ ÆÕÎËÃÉÅÊ \\[universal-argument]"
+
+#: info/tilde.c:338
+#, 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:64
+msgid "The number lines to scroll when the cursor moves out of the window"
+msgstr "þÉÓÌÏ ÐÒÏËÒÕÞÉ×ÁÅÍÙÈ ÓÔÒÏË, ËÏÇÄÁ ËÕÒÓÏÒ ÐÅÒÅÍÅÝÁÅÔÓÑ ÚÁ ÐÒÅÄÅÌÙ ÏËÎÁ"
+
+#: info/variables.c:68
+msgid "When \"On\", Info accepts and displays ISO Latin characters"
+msgstr "åÓÌÉ ÕÓÔÁÎÏ×ÌÅÎÏ (\"On\"), Info ÏÔÏÂÒÁÖÁÅÔ ÓÉÍ×ÏÌÙ ISO Latin"
+
+#: info/variables.c:74
+msgid "Explain the use of a variable"
+msgstr "ïÐÉÓÁÔØ ÉÓÐÏÌØÚÏ×ÁÎÉÅ ÐÅÒÅÍÅÎÎÏÊ"
+
+#: info/variables.c:80
+msgid "Describe variable: "
+msgstr "ïÐÉÓÁÔØ ÐÅÒÅÍÅÎÎÕÀ: "
+
+#: info/variables.c:99
+msgid "Set the value of an Info variable"
+msgstr "õÓÔÁÎÏ×ÉÔØ ÚÎÁÞÅÎÉÅ ÐÅÒÅÍÅÎÎÏÊ"
+
+#: info/variables.c:105
+msgid "Set variable: "
+msgstr "õÓÔÁÎÏ×ÉÔØ ÐÅÒÅÍÅÎÎÕÀ: "
+
+#: info/variables.c:123
+#, c-format
+msgid "Set %s to value (%d): "
+msgstr "õÓÔÁÎÏ×ÉÔØ ÚÎÁÞÅÎÉÅ %s ÒÁ×ÎÙÍ (%d): "
+
+#: info/variables.c:164
+#, c-format
+msgid "Set %s to value (%s): "
+msgstr "õÓÔÁÎÏ×ÉÔØ ÚÎÁÞÅÎÉÅ %s ÒÁ×ÎÙÍ (%s): "
+
+#: info/window.c:1138
+msgid "--*** Tags out of Date ***"
+msgstr "--*** ôÅÇÉ ÕÓÔÁÒÅÌÉ ***"
+
+#: info/window.c:1149
+msgid "-----Info: (), lines ----, "
+msgstr "-----Info: (), ÓÔÒÏË ----, "
+
+#: info/window.c:1156
+#, c-format
+msgid "-%s---Info: %s, %d lines --%s--"
+msgstr "-%s---Info: %s, ÓÔÒÏË: %d --%s--"
+
+#: info/window.c:1160
+#, c-format
+msgid "-%s%s-Info: (%s)%s, %d lines --%s--"
+msgstr "-%s%s-Info: (%s)%s, ÓÔÒÏË: %d --%s--"
+
+#: info/window.c:1167
+#, c-format
+msgid " Subfile: %s"
+msgstr " æÁÊÌ: %s"
+
+#: lib/getopt.c:551 lib/getopt.c:570
+#, c-format
+msgid "%s: option `%s' is ambiguous\n"
+msgstr "%s: ÎÅÏÄÎÏÚÎÁÞÎÙÊ ËÌÀÞ `%s'\n"
+
+#: lib/getopt.c:603 lib/getopt.c:607
+#, c-format
+msgid "%s: option `--%s' doesn't allow an argument\n"
+msgstr "%s: ËÌÀÞ `--%s' ÄÏÌÖÅÎ ÉÓÐÏÌØÚÏ×ÁÔØÓÑ ÂÅÚ ÁÒÇÕÍÅÎÔÁ\n"
+
+#: lib/getopt.c:616 lib/getopt.c:621
+#, c-format
+msgid "%s: option `%c%s' doesn't allow an argument\n"
+msgstr "%s: ËÌÀÞ `%c%s' ÄÏÌÖÅÎ ÉÓÐÏÌØÚÏ×ÁÔØÓÑ ÂÅÚ ÁÒÇÕÍÅÎÔÁ\n"
+
+#: lib/getopt.c:667 lib/getopt.c:689 lib/getopt.c:1020 lib/getopt.c:1042
+#, c-format
+msgid "%s: option `%s' requires an argument\n"
+msgstr "%s: ËÌÀÞ `%s' ÄÏÌÖÅÎ ÉÓÐÏÌØÚÏ×ÁÔØÓÑ c ÁÒÇÕÍÅÎÔÏÍ\n"
+
+#: lib/getopt.c:727 lib/getopt.c:730
+#, c-format
+msgid "%s: unrecognized option `--%s'\n"
+msgstr "%s: ÎÅÉÚ×ÅÓÔÎÙÊ ËÌÀÞ `--%s'\n"
+
+#: lib/getopt.c:738 lib/getopt.c:741
+#, c-format
+msgid "%s: unrecognized option `%c%s'\n"
+msgstr "%s: ÎÅÉÚ×ÅÓÔÎÙÊ ËÌÀÞ `%c%s'\n"
+
+#: lib/getopt.c:796 lib/getopt.c:799
+#, c-format
+msgid "%s: illegal option -- %c\n"
+msgstr "%s: ÎÅÄÏÐÕÓÔÉÍÙÊ ËÌÀÞ -- %c\n"
+
+#: lib/getopt.c:805 lib/getopt.c:808
+#, c-format
+msgid "%s: invalid option -- %c\n"
+msgstr "%s: ÎÅ×ÅÒÎÙÊ ËÌÀÞ -- %c\n"
+
+#: lib/getopt.c:863 lib/getopt.c:882 lib/getopt.c:1095 lib/getopt.c:1116
+#, c-format
+msgid "%s: option requires an argument -- %c\n"
+msgstr "%s: ËÌÀÞ %c ÄÏÌÖÅÎ ÂÙ ÉÓÐÏÌØÚÏ×ÁÔØÓÑ c ÁÒÇÕÍÅÎÔÏÍ\n"
+
+#: lib/getopt.c:935 lib/getopt.c:954
+#, c-format
+msgid "%s: option `-W %s' is ambiguous\n"
+msgstr "%s: ÎÅÏÄÎÏÚÎÁÞÎÙÊ ËÌÀÞ `-W %s'\n"
+
+#: lib/getopt.c:978 lib/getopt.c:999
+#, c-format
+msgid "%s: option `-W %s' doesn't allow an argument\n"
+msgstr "%s: ËÌÀÞ `-W %s' ÄÏÌÖÅÎ ÉÓÐÏÌØÚÏ×ÁÔØÓÑ ÂÅÚ ÁÒÇÕÍÅÎÔÁ\n"
+
+#: makeinfo/cmds.c:520 makeinfo/cmds.c:542
+#, c-format
+msgid "arguments to @%s ignored"
+msgstr "ÁÒÇÕÍÅÎÔÙ ÄÌÑ @%s ÉÇÎÏÒÉÒÏ×ÁÎÙ"
+
+#: makeinfo/cmds.c:585
+msgid "January"
+msgstr "ÑÎ×ÁÒÑ"
+
+#: makeinfo/cmds.c:585
+msgid "February"
+msgstr "ÆÅ×ÒÁÌÑ"
+
+#: makeinfo/cmds.c:585
+msgid "March"
+msgstr "ÍÁÒÔÁ"
+
+#: makeinfo/cmds.c:585
+msgid "April"
+msgstr "ÁÐÒÅÌÑ"
+
+#: makeinfo/cmds.c:585
+msgid "May"
+msgstr "ÍÁÑ"
+
+#: makeinfo/cmds.c:586
+msgid "June"
+msgstr "ÉÀÎÑ"
+
+#: makeinfo/cmds.c:586
+msgid "July"
+msgstr "ÉÀÌÑ"
+
+#: makeinfo/cmds.c:586
+msgid "August"
+msgstr "Á×ÇÕÓÔÁ"
+
+#: makeinfo/cmds.c:586
+msgid "September"
+msgstr "ÓÅÎÔÑÂÒÑ"
+
+#: makeinfo/cmds.c:586
+msgid "October"
+msgstr "ÏËÔÑÂÒÑ"
+
+#: makeinfo/cmds.c:587
+msgid "November"
+msgstr "ÎÏÑÂÒÑ"
+
+#: makeinfo/cmds.c:587
+msgid "December"
+msgstr "ÄÅËÁÂÒÑ"
+
+#: makeinfo/cmds.c:936
+#, c-format
+msgid "unlikely character %c in @var"
+msgstr "ÍÁÌÏ×ÅÒÏÑÔÎÙÊ ÚÎÁË %c × @var"
+
+#: makeinfo/cmds.c:979
+msgid "@sc argument all uppercase, thus no effect"
+msgstr "×ÅÓØ ÁÒÇÕÍÅÎÔ @sc ÎÁÂÒÁÎ ÚÁÇÌÁ×ÎÙÍÉ ÂÕË×ÁÍÉ, ÒÅÚÕÌØÔÁÔÁ ÎÅ ÂÕÄÅÔ"
+
+#: makeinfo/cmds.c:1034
+#, c-format
+msgid "`{' expected, but saw `%c'"
+msgstr "ÏÖÉÄÁÌÏÓØ `{', ×ÓÔÒÅÞÅÎÏ `%c'"
+
+#: makeinfo/cmds.c:1074
+msgid "end of file inside verb block"
+msgstr "ËÏÎÅà ÆÁÊÌÁ ×ÓÔÒÅÞÅÎ ×ÎÕÔÒÉ ÎÅÏËÏÎÞÅÎÎÏÇÏ ÂÌÏËÁ"
+
+#: makeinfo/cmds.c:1082
+#, c-format
+msgid "`}' expected, but saw `%c'"
+msgstr "ÏÖÉÄÁÌÏÓØ `}', ×ÓÔÒÅÞÅÎÏ `%c'"
+
+#: makeinfo/cmds.c:1112
+msgid ""
+"@strong{Note...} produces a spurious cross-reference in Info; reword to "
+"avoid that"
+msgstr ""
+"@strong{Note...} ÓÏÚÄÁÅÔ × Info ÌÏÖÎÕÀ ÐÅÒÅËÒÅÓÔÎÕÀ ÓÓÙÌËÕ; ÐÅÒÅÆÒÁÚÉÒÕÊÔÅ "
+"ÔÅËÓÔ, ÞÔÏÂÙ ÉÚÂÅÖÁÔØ ÜÔÏÇÏ"
+
+#: makeinfo/cmds.c:1305
+#, c-format
+msgid "%c%s is obsolete"
+msgstr "ëÏÍÁÎÄÁ %c%s ÕÓÔÁÒÅÌÁ É ÎÅ ÉÓÐÏÌØÚÕÅÔÓÑ"
+
+#: makeinfo/cmds.c:1414
+#, c-format
+msgid "@sp requires a positive numeric argument, not `%s'"
+msgstr "ËÏÍÁÎÄÅ @sp ÎÕÖÎÏ ÕËÁÚÁÔØ ÐÏÌÏÖÉÔÅÌØÎÙÊ ÞÉÓÌÏ×ÏÊ ÁÒÇÕÍÅÎÔ, Á ÎÅ `%s'"
+
+#: makeinfo/cmds.c:1763 makeinfo/cmds.c:1819 makeinfo/footnote.c:82
+#, c-format
+msgid "Bad argument to %c%s"
+msgstr "ðÌÏÈÏÊ ÁÒÇÕÍÅÎÔ ÄÌÑ %c%s"
+
+#: makeinfo/cmds.c:1773 makeinfo/makeinfo.c:4142
+msgid "asis"
+msgstr "asis"
+
+#: makeinfo/cmds.c:1775 makeinfo/cmds.c:1805 makeinfo/makeinfo.c:4144
+msgid "none"
+msgstr "none"
+
+#: makeinfo/cmds.c:1789
+#, c-format
+msgid "Bad argument to @%s"
+msgstr "ðÌÏÈÏÊ ÁÒÇÕÍÅÎÔ ÄÌÑ @%s"
+
+# ???
+#: makeinfo/cmds.c:1803
+msgid "insert"
+msgstr "insert"
+
+#: makeinfo/defun.c:84
+msgid "Missing `}' in @def arg"
+msgstr "÷ ÁÒÇÕÍÅÎÔÅ @def ÐÒÏÐÕÝÅÎÁ `}'"
+
+#: makeinfo/defun.c:403
+msgid "Function"
+msgstr "æÕÎËÃÉÑ"
+
+#: makeinfo/defun.c:406
+msgid "Macro"
+msgstr "íÁËÒÏ"
+
+#: makeinfo/defun.c:409
+msgid "Special Form"
+msgstr "óÐÅÃÉÁÌØÎÁÑ ÆÏÒÍÁ"
+
+#: makeinfo/defun.c:413
+msgid "Variable"
+msgstr "ðÅÒÅÍÅÎÎÁÑ"
+
+#: makeinfo/defun.c:416
+msgid "User Option"
+msgstr "ðÏÌØÚÏ×ÁÔÅÌØÓËÉÊ ÐÁÒÁÍÅÔÒ"
+
+#: makeinfo/defun.c:420
+msgid "Instance Variable"
+msgstr "ðÅÒÅÍÅÎÎÁÑ ÜËÚÅÍÐÌÑÒÁ"
+
+#: makeinfo/defun.c:424
+msgid "Method"
+msgstr "íÅÔÏÄ"
+
+#: makeinfo/defun.c:500 makeinfo/defun.c:505 makeinfo/defun.c:545
+#: makeinfo/defun.c:644 makeinfo/xml.c:2229
+msgid "of"
+msgstr "ÉÚ"
+
+#: makeinfo/defun.c:509 makeinfo/defun.c:513 makeinfo/defun.c:517
+#: makeinfo/defun.c:551 makeinfo/defun.c:650 makeinfo/xml.c:2234
+msgid "on"
+msgstr "ÎÁÄ"
+
+#: makeinfo/defun.c:711
+#, c-format
+msgid "Must be in `@%s' environment to use `@%s'"
+msgstr "îÕÖÎÏ ÂÙÔØ × ÂÌÏËÅ `@%s', ÞÔÏÂÙ ÉÓÐÏÌØÚÏ×ÁÔØ `@%s'"
+
+#: makeinfo/files.c:435
+#, c-format
+msgid "%s: getwd: %s, %s\n"
+msgstr "%s: getwd: %s, %s\n"
+
+#: makeinfo/files.c:638
+#, c-format
+msgid "`%s' omitted before output filename"
+msgstr "ÐÅÒÅÄ ÉÍÅÎÅÍ ×ÙÈÏÄÎÏÇÏ ÆÁÊÌÁ ÏÐÕÝÅÎÏ `%s'"
+
+#: makeinfo/files.c:646
+#, c-format
+msgid "`%s' omitted since writing to stdout"
+msgstr "`%s' ÏÐÕÝÅÎÏ, ÐÏÓËÏÌØËÕ ÐÅÞÁÔØ ÉÄÅÔ ÎÁ ÓÔÁÎÄÁÒÔÎÙÊ ×Ù×ÏÄ"
+
+#: makeinfo/files.c:694
+msgid "Output buffer not empty."
+msgstr "÷ÙÈÏÄÎÏÊ ÂÕÆÅÒ ÎÅ ÐÕÓÔ."
+
+#: makeinfo/footnote.c:150
+#, c-format
+msgid "`%c%s' needs an argument `{...}', not just `%s'"
+msgstr "`%c%s' ÔÒÅÂÕÅÔ ÁÒÇÕÍÅÎÔ `{...}', Á ÎÅ ÐÒÏÓÔÏ `%s'"
+
+#: makeinfo/footnote.c:165
+#, c-format
+msgid "No closing brace for footnote `%s'"
+msgstr "äÌÑ ÓÎÏÓËÉ `%s' ÎÅÔ ÚÁËÒÙ×ÁÀÝÅÊ ÆÉÇÕÒÎÏÊ ÓËÏÂËÉ"
+
+#: makeinfo/footnote.c:198
+msgid "Footnote defined without parent node"
+msgstr "óÎÏÓËÁ ÏÐÒÅÄÅÌÅÎÁ ÂÅÚ ÒÏÄÉÔÅÌØÓËÏÊ ÎÏÄÙ"
+
+#: makeinfo/footnote.c:210
+msgid "Footnotes inside footnotes are not allowed"
+msgstr "óÎÏÓËÉ ÉÚ ÓÎÏÓÏË ÚÁÐÒÅÝÅÎÙ"
+
+#: makeinfo/footnote.c:302 makeinfo/index.c:189
+msgid "Footnotes"
+msgstr "óÎÏÓËÉ"
+
+#: makeinfo/html.c:87
+#, c-format
+msgid "%s: could not open --css-file: %s"
+msgstr "%s: ÎÅ×ÏÚÍÏÖÎÏ ÏÔËÒÙÔØ css-ÆÁÊÌ: %s"
+
+#: makeinfo/html.c:172
+#, c-format
+msgid "%s:%d: --css-file ended in comment"
+msgstr "%s:%d: css-ÆÁÊÌ ÏÂÒÙ×ÁÅÔÓÑ × ËÏÍÍÅÎÔÁÒÉÉ"
+
+#: makeinfo/html.c:207
+msgid "Untitled"
+msgstr "âÅÚ ÚÁÇÏÌÏ×ËÁ"
+
+#: makeinfo/html.c:422
+msgid "[unexpected] no html tag to pop"
+msgstr ""
+"[ÎÅÐÒÅÄ×ÉÄÅÎÎÁÑ ÓÉÔÕÁÃÉÑ] × ÓÔÅËÅ html-ÔÅÇÏ× ÎÅÔ ÜÌÅÍÅÎÔÁ ÄÌÑ ×ÙÔÁÌËÉ×ÁÎÉÑ"
+
+#: makeinfo/html.c:752
+#, c-format
+msgid "[unexpected] invalid node name: `%s'"
+msgstr "[ÎÅÐÒÅÄ×ÉÄÅÎÎÁÑ ÓÉÔÕÁÃÉÑ] ÎÅ×ÅÒÎÏÅ ÉÍÑ ÎÏÄÙ: `%s'"
+
+#: makeinfo/index.c:169
+#, c-format
+msgid "Unknown index `%s'"
+msgstr "éÍÅÎÎÏÊ ÕËÁÚÁÔÅÌØ `%s' ÎÅÉÚ×ÅÓÔÅÎ"
+
+#: makeinfo/index.c:234
+#, c-format
+msgid "Info cannot handle `:' in index entry `%s'"
+msgstr ""
+"Info ÎÅ ÍÏÖÅÔ ÏÂÒÁÂÏÔÁÔØ ÚÎÁË `:' ×Ï ×ÈÏÖÄÅÎÉÉ ÁÌÆÁ×ÉÔÎÏÇÏ ÕËÁÚÁÔÅÌÑ `%s'"
+
+#: makeinfo/index.c:412
+#, c-format
+msgid "Index `%s' already exists"
+msgstr "éÍÅÎÎÏÊ ÕËÁÚÁÔÅÌØ `%s' ÕÖÅ ÓÕÝÅÓÔ×ÕÅÔ"
+
+#: makeinfo/index.c:455
+#, c-format
+msgid "Unknown index `%s' and/or `%s' in @synindex"
+msgstr "îÅÉÚ×ÅÓÔÅÎ ÉÍÅÎÎÏÊ ÕËÁÚÁÔÅÌØ `%s' É/ÉÌÉ `%s' × @synindex"
+
+#: makeinfo/index.c:661
+msgid "(line )"
+msgstr "(ÓÔÒÏËÁ )"
+
+#: makeinfo/index.c:669
+#, c-format
+msgid "(line %*d)"
+msgstr "(ÓÔÒÏËÁ %*d)"
+
+#: makeinfo/index.c:750
+#, c-format
+msgid "Unknown index `%s' in @printindex"
+msgstr "îÅÉÚ×ÅÓÔÅÎ ÉÍÅÎÎÏÊ ÕËÁÚÁÔÅÌØ `%s' × @printindex"
+
+#: makeinfo/index.c:819
+#, c-format
+msgid "Entry for index `%s' outside of any node"
+msgstr "÷ÈÏÖÄÅÎÉÅ ÄÌÑ ÉÍÅÎÎÏÇÏ ÕËÁÚÁÔÅÌÑ `%s' ×ÎÅ ÎÏÄÙ"
+
+#: makeinfo/index.c:822 makeinfo/index.c:858
+msgid "(outside of any node)"
+msgstr "(×ÎÅ ËÁËÏÊ-ÌÉÂÏ ÎÏÄÙ)"
+
+#: makeinfo/index.c:919 makeinfo/index.c:925
+msgid "See "
+msgstr "óÍÏÔÒÉÔÅ "
+
+#: makeinfo/insertion.c:160
+msgid "@item not allowed in argument to @itemize"
+msgstr "ÎÅÌØÚÑ ÚÁÄÁ×ÁÔØ @item × ÁÒÇÕÍÅÎÔÅ ÄÌÑ @itemize"
+
+#: makeinfo/insertion.c:238
+msgid "Broken-Type in insertion_type_pname"
+msgstr "Broken-Type × insertion_type_pname"
+
+#: makeinfo/insertion.c:334
+msgid "Enumeration stack overflow"
+msgstr "ðÅÒÅÐÏÌÎÅÎÉÅ ÓÔÅËÁ ÐÅÒÅÞÉÓÌÅÎÉÑ"
+
+#: makeinfo/insertion.c:366
+#, c-format
+msgid "lettering overflow, restarting at %c"
+msgstr "ÚÁËÏÎÞÉÌÓÑ ÁÌÆÁ×ÉÔ, ×ÏÚ×ÒÁÔ ÎÁ %c"
+
+#: makeinfo/insertion.c:631
+#, c-format
+msgid "%s requires an argument: the formatter for %citem"
+msgstr "%s ÄÏÌÖÎÁ ÉÓÐÏÌØÚÏ×ÁÔØÓÑ c ÁÒÇÕÍÅÎÔÏÍ: ÆÏÒÍÁÔÏÍ ÄÌÑ %citem"
+
+#: makeinfo/insertion.c:719
+#, c-format
+msgid "%cfloat environments cannot be nested"
+msgstr "ÂÌÏËÉ %cfloat ÎÅÌØÚÑ ×ËÌÁÄÙ×ÁÔØ ÄÒÕÇ × ÄÒÕÇÁ"
+
+#: makeinfo/insertion.c:973
+#, c-format
+msgid "`@end' expected `%s', but saw `%s'"
+msgstr "ÏÖÉÄÁÌÏÓØ `@end' Ó `%s', ×ÓÔÒÅÞÅÎÏ `%s'"
+
+#: makeinfo/insertion.c:1337
+#, c-format
+msgid "No matching `%cend %s'"
+msgstr "îÅÔ ÐÁÒÎÏÊ `%cend %s'"
+
+#: makeinfo/insertion.c:1592
+#, c-format
+msgid "%s requires letter or digit"
+msgstr "%s ÔÒÅÂÕÅÔ ÂÕË×Ù ÉÌÉ ÃÉÆÒÙ"
+
+#: makeinfo/insertion.c:1687
+msgid "end of file inside verbatim block"
+msgstr "ËÏÎÅà ÆÁÊÌÁ ×ÓÔÒÅÞÅÎ ×ÎÕÔÒÉ ÎÅÏËÏÎÞÅÎÎÏÇÏ ÂÌÏËÁ"
+
+#: makeinfo/insertion.c:1913
+#, c-format
+msgid "@%s not meaningful outside `@float' environment"
+msgstr "@%s ÎÅ ÉÍÅÅÔ ÓÍÙÓÌÁ ×ÎÅ ÂÌÏËÁ `@float'"
+
+#: makeinfo/insertion.c:1949
+msgid "@menu seen before first @node, creating `Top' node"
+msgstr "@menu ×ÓÔÒÅÞÅÎÏ ÐÅÒÅÄ ÐÅÒ×ÏÊ @node, ÂÕÄÅÔ ÓÏÚÄÁÎÁ ÎÏÄÁ `Top'"
+
+#: makeinfo/insertion.c:1950
+msgid ""
+"perhaps your @top node should be wrapped in @ifnottex rather than @ifinfo?"
+msgstr ""
+"×ÅÒÏÑÔÎÏ, ×ÁÛÁ ÎÏÄÁ @top ÄÏÌÖÎÁ ÂÙÔØ × ÂÌÏËÅ @ifnottex, Á ÎÅ × @ifinfo?"
+
+#: makeinfo/insertion.c:1962
+msgid "@detailmenu seen before first node, creating `Top' node"
+msgstr "@detailmenu ×ÓÔÒÅÞÅÎÏ ÐÅÒÅÄ ÐÅÒ×ÏÊ @node, ÂÕÄÅÔ ÓÏÚÄÁÎÁ ÎÏÄÁ `Top'"
+
+#: makeinfo/insertion.c:2018
+#, c-format
+msgid "@%s not meaningful outside `@titlepage' and `@quotation' environments"
+msgstr "@%s ÎÅ ÉÍÅÅÔ ÓÍÙÓÌÁ ×ÎÅ ÂÌÏËÁ `@titlepage' ÉÌÉ `@quotation'"
+
+#: makeinfo/insertion.c:2032
+#, c-format
+msgid "@%s not meaningful outside `@titlepage' environment"
+msgstr "@%s ÎÅ ÉÍÅÅÔ ÓÍÙÓÌÁ ×ÎÅ ÂÌÏËÁ `@titlepage'"
+
+#: makeinfo/insertion.c:2063
+#, c-format
+msgid "Unmatched `%c%s'"
+msgstr "îÅÐÁÒÎÁÑ `%c%s'"
+
+#: makeinfo/insertion.c:2068
+#, c-format
+msgid "`%c%s' needs something after it"
+msgstr "ðÏÓÌÅ `%c%s' ÄÏÌÖÎÏ ÞÔÏ-ÔÏ ÉÄÔÉ"
+
+#: makeinfo/insertion.c:2074
+#, c-format
+msgid "Bad argument `%s' to `@%s', using `%s'"
+msgstr "ðÌÏÈÏÊ ÁÒÇÕÍÅÎÔ `%s' ÄÌÑ `@%s', ÂÕÄÅÔ ÉÓÐÏÌØÚÏ×ÁÎ `%s'"
+
+#: makeinfo/insertion.c:2171
+#, c-format
+msgid "@%s not meaningful inside `@%s' block"
+msgstr "@%s ÎÅ ÉÍÅÅÔ ÓÍÙÓÌÁ ×ÎÕÔÒÉ ÂÌÏËÁ `@%s'"
+
+#: makeinfo/insertion.c:2180
+#, c-format
+msgid "@itemx not meaningful inside `%s' block"
+msgstr "@itemx ÎÅ ÉÍÅÅÔ ÓÍÙÓÌÁ ×ÎÕÔÒÉ ÂÌÏËÁ `%s'"
+
+#: makeinfo/insertion.c:2356
+#, c-format
+msgid "%c%s found outside of an insertion block"
+msgstr "%c%s ×ÓÔÒÅÞÅÎÁ ×ÎÅ ÂÌÏËÁ ×ÓÔÁ×ËÉ"
+
+#: makeinfo/lang.c:580
+#, c-format
+msgid "%s is not a valid ISO 639 language code"
+msgstr "%s ÎÅ Ñ×ÌÑÅÔÓÑ ×ÅÒÎÙÍ ËÏÄÏÍ ÑÚÙËÁ ÉÚ ISO 639"
+
+#: makeinfo/lang.c:655
+#, c-format
+msgid "unrecognized encoding name `%s'"
+msgstr "ÉÍÑ ËÏÄÉÒÏ×ËÉ `%s' ÎÅ ÒÁÓÐÏÚÎÁÎÏ"
+
+#: makeinfo/lang.c:663
+#, c-format
+msgid "sorry, encoding `%s' not supported"
+msgstr "ÉÚ×ÉÎÉÔÅ, ËÏÄÉÒÏ×ËÁ `%s' ÎÅ ÐÏÄÄÅÒÖÉ×ÁÅÔÓÑ"
+
+#: makeinfo/lang.c:715
+#, c-format
+msgid "invalid encoded character `%s'"
+msgstr "ÎÅÐÒÁ×ÉÌØÎÏ ÚÁËÏÄÉÒÏ×ÁÎÎÙÊ ÚÎÁË `%s'"
+
+#: makeinfo/lang.c:1009
+#, c-format
+msgid "%c%s expects `i' or `j' as argument, not `%c'"
+msgstr "%c%s ÏÖÉÄÁÅÔ × ËÁÞÅÓÔ×Å ÁÒÇÕÍÅÎÔÁ `i' ÉÌÉ `j', Á ÎÅ `%c'"
+
+#: makeinfo/lang.c:1013
+#, 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:355
+#, 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:586
+#, c-format
+msgid "%cend macro not found"
+msgstr "ÎÅ ×ÓÔÒÅÞÅÎÏ %cend macro"
+
+#: makeinfo/macro.c:624
+msgid "@quote-arg only useful for single-argument macros"
+msgstr "@quote-arg ÐÏÌÅÚÎÁ, ÔÏÌØËÏ ÅÓÌÉ ÍÁËÒÏ ÐÒÉÎÉÍÁÅÔ ÏÄÉÎ ÁÒÇÕÍÅÎÔ"
+
+#: makeinfo/macro.c:660
+#, c-format
+msgid "mismatched @end %s with @%s"
+msgstr "ÎÅÐÁÒÎÙÅ @end %s É @%s"
+
+#: makeinfo/makeinfo.c:184
+#, c-format
+msgid "Too many errors! Gave up.\n"
+msgstr "óÌÉÛËÏÍ ÍÎÏÇÏ ÏÛÉÂÏË! ïÓÔÁÎÏ×ËÁ.\n"
+
+#: makeinfo/makeinfo.c:302
+#, c-format
+msgid "%s:%d: warning: "
+msgstr "%s:%d: ÐÒÅÄÕÐÒÅÖÄÅÎÉÅ: "
+
+#: makeinfo/makeinfo.c:321 makeinfo/makeinfo.c:2260
+#, c-format
+msgid "Misplaced %c"
+msgstr "úÄÅÓØ ÎÅ ÄÏÌÖÎÏ ÂÙÔØ %c"
+
+#: makeinfo/makeinfo.c:340
+#, c-format
+msgid "Try `%s --help' for more information.\n"
+msgstr "ðÏÐÒÏÂÕÊÔÅ `%s --help' ÄÌÑ ÐÏÌÕÞÅÎÉÑ ÂÏÌÅÅ ÐÏÄÒÏÂÎÏÇÏ ÏÐÉÓÁÎÉÑ.\n"
+
+#: makeinfo/makeinfo.c:343
+#, c-format
+msgid "Usage: %s [OPTION]... TEXINFO-FILE...\n"
+msgstr "éÓÐÏÌØÚÏ×ÁÎÉÅ: %s [ëìàþ]... TEXINFO-æáêì...\n"
+
+#: makeinfo/makeinfo.c:346
+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:350
+#, c-format
+msgid ""
+"General options:\n"
+" --error-limit=NUM quit after NUM errors (default %d).\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"
+" --reference-limit=NUM warn about at most NUM references (default %"
+"d).\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:364
+#, 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:372
+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 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 (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:386
+#, c-format
+msgid ""
+"Options for Info and plain text:\n"
+" --enable-encoding output accented and special characters in\n"
+" Info output based on @documentencoding.\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\n"
+" in which they are defined (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:403
+msgid ""
+"Options for HTML:\n"
+" --css-include=FILE include FILE in HTML <style> output;\n"
+" read stdin if FILE is -.\n"
+msgstr ""
+"ëÌÀÞÉ ÄÌÑ HTML:\n"
+" --css-include=æáêì ×ËÌÀÞÉÔØ æáêì × ÔÅÇ <style> × ×Ù×ÏÄÅ HTML;\n"
+" ÞÉÔÁÔØ ÓÔÁÎÄÁÒÔÎÙÊ ××ÏÄ, ÅÓÌÉ æáêì ÚÁÄÁÎ ËÁË "
+"-.\n"
+
+#: makeinfo/makeinfo.c:409
+#, 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:416
+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:425
+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:444
+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:452
+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:603
+#, c-format
+msgid "%s: Ignoring unrecognized TEXINFO_OUTPUT_FORMAT value `%s'.\n"
+msgstr "%s: ÎÅÉÚ×ÅÓÔÎÏÅ ÚÎÁÞÅÎÉÅ TEXINFO_OUTPUT_FORMAT `%s' ÉÇÎÏÒÉÒÏ×ÁÎÏ.\n"
+
+#: makeinfo/makeinfo.c:647 makeinfo/makeinfo.c:673 makeinfo/makeinfo.c:692
+#: makeinfo/makeinfo.c:722 makeinfo/makeinfo.c:743
+#, c-format
+msgid "%s: %s arg must be numeric, not `%s'.\n"
+msgstr "%s: %s ÁÒÇÕÍÅÎÔ ÄÏÌÖÅÎ ÂÙÔØ ÞÉÓÌÏ×ÙÍ, ÎÅ `%s'.\n"
+
+#: makeinfo/makeinfo.c:660
+#, c-format
+msgid "%s: could not open macro expansion output `%s'"
+msgstr "%s: ÎÅ×ÏÚÍÏÖÎÏ ÏÔËÒÙÔØ ×ÙÈÏÄÎÏÊ ÆÁÊÌ ÍÁËÒÏÒÁÓÛÉÒÅÎÉÑ `%s'"
+
+#: makeinfo/makeinfo.c:665
+#, c-format
+msgid "%s: ignoring second macro expansion output `%s'.\n"
+msgstr "%s: ×ÔÏÒÏÊ ×ÙÈÏÄÎÏÊ ÆÁÊÌ ÍÁËÒÏÒÁÓÛÉÒÅÎÉÑ `%s' ÉÇÎÏÒÉÒÏ×ÁÎ.\n"
+
+#: makeinfo/makeinfo.c:707
+#, 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:732
+#, 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:806
+#, c-format
+msgid "%s: missing file argument.\n"
+msgstr "%s: ÐÒÏÐÕÝÅÎ ÁÒÇÕÍÅÎÔ, ÚÁÄÁÀÝÉÊ ÆÁÊÌ.\n"
+
+#: makeinfo/makeinfo.c:997 makeinfo/makeinfo.c:3991
+#, c-format
+msgid "Multiline command %c%s used improperly"
+msgstr "îÅÐÒÁ×ÉÌØÎÏ ÉÓÐÏÌØÚÏ×ÁÎÁ ÍÎÏÇÏÓÔÒÏÞÎÁÑ ËÏÍÁÎÄÁ %c%s"
+
+#: makeinfo/makeinfo.c:1000
+#, c-format
+msgid "Expected `%s'"
+msgstr "ïÖÉÄÁÅÔÓÑ `%s'"
+
+#: makeinfo/makeinfo.c:1479
+#, c-format
+msgid "Can't create directory `%s': %s"
+msgstr "îÅ×ÏÚÍÏÖÎÏ ÓÏÚÄÁÔØ ËÁÔÁÌÏÇ `%s': %s"
+
+#: makeinfo/makeinfo.c:1525
+#, c-format
+msgid "No `%s' found in `%s'"
+msgstr "`%s' ÎÅ ÎÁÊÄÅÎ × `%s'"
+
+#: makeinfo/makeinfo.c:1605
+#, c-format
+msgid "%s: Skipping macro expansion to stdout as Info output is going there.\n"
+msgstr ""
+"%s: òÁÓËÒÙÔÉÅ ÍÁËÒÏÓÏ× × ÓÔÁÎÄÁÒÔÎÙÊ ×Ù×ÏÄ ÎÅ ÐÒÏÉÚ×ÏÄÉÔÓÑ,\n"
+"ÔÁË ËÁË ÔÕÄÁ ÎÁÐÒÁ×ÌÅÎ ×Ù×ÏÄ × ÆÏÒÍÁÔÅ Info.\n"
+
+#: makeinfo/makeinfo.c:1638
+#, c-format
+msgid "Making %s file `%s' from `%s'.\n"
+msgstr "óÏÚÄÁÎÉÅ %s-ÆÁÊÌÁ `%s' ÉÚ `%s'.\n"
+
+#: makeinfo/makeinfo.c:1673
+#, c-format
+msgid "This is %s, produced by makeinfo version %s from %s.\n"
+msgstr "üÔÏ %s, ÓÏÚÄÁÎÎÙÊ makeinfo ×ÅÒÓÉÉ %s ÉÚ %s.\n"
+
+#: makeinfo/makeinfo.c:1709
+#, 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:1773
+#, 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:2034
+#, c-format
+msgid "Unknown command `%s'"
+msgstr "îÅÉÚ×ÅÓÔÎÁÑ ËÏÍÁÎÄÁ `%s'"
+
+#: makeinfo/makeinfo.c:2056
+#, c-format
+msgid "Use braces to give a command as an argument to @%s"
+msgstr ""
+"éÓÐÏÌØÚÕÊÔÅ ÆÉÇÕÒÎÙÅ ÓËÏÂËÉ, ÞÔÏÂÙ ÐÅÒÅÄÁÔØ @%s ËÏÍÁÎÄÕ × ËÁÞÅÓÔ×Å ÁÒÇÕÍÅÎÔÁ"
+
+#: makeinfo/makeinfo.c:2314
+#, c-format
+msgid "%c%s expected braces"
+msgstr "%c%s ÐÏÄÒÁÚÕÍÅ×ÁÅÔ ÆÉÇÕÒÎÙÅ ÓËÏÂËÉ"
+
+#: makeinfo/makeinfo.c:2327
+msgid "Unmatched }"
+msgstr "îÅÐÁÒÎÁÑ }"
+
+#: makeinfo/makeinfo.c:2375
+msgid "NO_NAME!"
+msgstr "âåú_éíåîé!"
+
+#: makeinfo/makeinfo.c:2396
+#, c-format
+msgid "%c%s missing close brace"
+msgstr "%c%s ÐÒÏÐÕÝÅÎÁ ÚÁËÒÙ×ÁÀÝÁÑ ÓËÏÂËÁ"
+
+#: makeinfo/makeinfo.c:3309
+#, c-format
+msgid "@image file `%s' (for HTML) not readable: %s"
+msgstr "îÅ×ÏÚÍÏÖÎÏ ÐÒÏÞÉÔÁÔØ ÆÁÊÌ `%s' × ËÏÍÁÎÄÅ @image (ÄÌÑ HTML): %s"
+
+#: makeinfo/makeinfo.c:3315
+#, c-format
+msgid "No such file `%s'"
+msgstr "æÁÊÌ `%s' ÎÅ ÓÕÝÅÓÔ×ÕÅÔ"
+
+#: makeinfo/makeinfo.c:3447
+#, c-format
+msgid "@image file `%s' (for text) unreadable: %s"
+msgstr "îÅ×ÏÚÍÏÖÎÏ ÐÒÏÞÉÔÁÔØ ÆÁÊÌ `%s' × ËÏÍÁÎÄÅ @image (ÄÌÑ ÔÅËÓÔÁ): %s"
+
+#: makeinfo/makeinfo.c:3456
+msgid "@image missing filename argument"
+msgstr "ÐÏÓÌÅ @image ÐÒÏÐÕÝÅÎ ÁÒÇÕÍÅÎÔ ÚÁÄÁÀÝÉÊ ÆÁÊÌ "
+
+#: makeinfo/makeinfo.c:3675
+#, c-format
+msgid "undefined flag: %s"
+msgstr "ÎÅÏÐÒÅÄÅÌÅÎÎÙÊ ÆÌÁÇ: %s"
+
+#: makeinfo/makeinfo.c:3676
+#, c-format
+msgid "{No value for `%s'}"
+msgstr "{úÎÁÞÅÎÉÅ `%s' ÎÅ ÚÁÄÁÎÏ}"
+
+#: makeinfo/makeinfo.c:3728
+#, c-format
+msgid "%c%s requires a name"
+msgstr "ËÏÍÁÎÄÅ %c%s ÎÕÖÎÏ ÕËÁÚÁÔØ ÉÍÑ"
+
+#: makeinfo/makeinfo.c:3834
+#, c-format
+msgid "Reached eof before matching @end %s"
+msgstr "ëÏÎÅà ÆÁÊÌÁ ÒÁÎØÛÅ ÓÏÏÔ×ÅÔÓÔ×ÕÀÝÅÊ ËÏÍÁÎÄÙ @end %s"
+
+#: makeinfo/makeinfo.c:4082
+#, 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:254
+#, c-format
+msgid "ignoring stray text `%s' after @multitable"
+msgstr "ÔÅËÓÔ `%s' ÐÏÓÌÅ @multitable ÉÇÎÏÒÉÒÏ×ÁÎ"
+
+#: makeinfo/multi.c:393
+#, c-format
+msgid "Too many columns in multitable item (max %d)"
+msgstr "óÌÉÛËÏÍ ÍÎÏÇÏ ËÏÌÏÎÏË × ÜÌÅÍÅÎÔÅ ÔÁÂÌÉÃÙ (ÍÁËÓÉÍÕÍ %d)"
+
+#: makeinfo/multi.c:555
+#, c-format
+msgid "[unexpected] cannot select column #%d in multitable"
+msgstr "[ÎÅÐÒÅÄ×ÉÄÅÎÎÁÑ ÓÉÔÕÁÃÉÑ] ÎÅ×ÏÚÍÏÖÎÏ ×ÙÂÒÁÔØ ËÏÌÏÎËÕ #%d × ÔÁÂÌÉÃÅ"
+
+#: makeinfo/multi.c:584
+msgid "ignoring @tab outside of multitable"
+msgstr "@tab ×ÎÅ ÔÁÂÌÉÃÙ ÉÇÎÏÒÉÒÏ×ÁÎ"
+
+#: makeinfo/multi.c:632
+#, c-format
+msgid "** Multicolumn output from last row:\n"
+msgstr "** íÎÏÇÏËÏÌÏÎÏÞÎÙÊ ×Ù×ÏÄ ÉÚ ÐÏÓÌÅÄÎÅÊ ÓÔÒÏËÉ:\n"
+
+#: makeinfo/multi.c:635
+#, c-format
+msgid "* column #%d: output = %s\n"
+msgstr "* ËÏÌÏÎËÁ %d: ×Ù×ÏÄ = %s\n"
+
+#: makeinfo/node.c:280
+#, c-format
+msgid "Node `%s' previously defined at line %d"
+msgstr "îÏÄÁ `%s' ÂÙÌÁ ÒÁÎÅÅ ÏÐÒÅÄÅÌÅÎÁ × ÓÔÒÏËÅ %d"
+
+#: makeinfo/node.c:648
+#, c-format
+msgid "Formatting node %s...\n"
+msgstr "æÏÒÍÁÔÉÒÏ×ÁÎÉÅ ÎÏÄÙ %s...\n"
+
+#: makeinfo/node.c:716
+#, c-format
+msgid "Node `%s' requires a sectioning command (e.g., %c%s)"
+msgstr "äÌÑ ÎÏÄÙ `%s' ÔÒÅÂÕÅÔÓÑ ËÏÍÁÎÄÁ ÏÐÉÓÁÎÉÑ ÓÔÒÕËÔÕÒÙ ÇÌÁ× (ÎÁÐÒ. %c%s)"
+
+#: makeinfo/node.c:879
+#, c-format
+msgid "No node name specified for `%c%s' command"
+msgstr "äÌÑ ËÏÍÁÎÄÙ `%c%s' ÎÅ ÚÁÄÁÎÏ ÉÍÑ ÎÏÄÙ"
+
+#: makeinfo/node.c:920 makeinfo/node.c:1151
+#, c-format
+msgid "Anchor `%s' and node `%s' map to the same file name"
+msgstr "íÁÒËÅÒ `%s' É ÎÏÄÁ `%s' ÓÓÙÌÁÀÔÓÑ ÎÁ ÏÄÎÏ É ÔÏ ÖÅ ÉÍÑ ÆÁÊÌÁ"
+
+#: makeinfo/node.c:923
+msgid "This @anchor command ignored; references to it will not work"
+msgstr "äÁÎÎÁÑ ËÏÍÁÎÄÁ @anchor ÉÇÎÏÒÉÒÕÅÔÓÑ; ÓÓÙÌËÉ ÎÁ ÎÅÅ ÎÅ ÂÕÄÕÔ ÒÁÂÏÔÁÔØ"
+
+#: makeinfo/node.c:925 makeinfo/node.c:1154
+msgid "Rename this anchor or use the `--no-split' option"
+msgstr "ðÅÒÅÉÍÅÎÕÊÔÅ ÜÔÏÔ ÍÁÒËÅÒ ÉÌÉ ÉÓÐÏÌØÚÕÊÔÅ ËÌÀÞ `--no-split'"
+
+#: makeinfo/node.c:955
+#, c-format
+msgid "Unexpected string at end of split-HTML file `%s'"
+msgstr "îÅÏÖÉÄÁÎÎÁÑ ÓÔÒÏËÁ × ËÏÎÃÅ ÒÁÚÂÉÔÏÇÏ HTML-ÆÁÊÌÁ `%s'"
+
+#: makeinfo/node.c:991
+msgid "Next:"
+msgstr "óÌÅÄÕÀÝÁÑ:"
+
+#: makeinfo/node.c:1007
+msgid "Previous:"
+msgstr "ðÒÅÄÙÄÕÝÁÑ:"
+
+#: makeinfo/node.c:1021
+msgid "Up:"
+msgstr "÷×ÅÒÈ:"
+
+#: makeinfo/node.c:1148
+#, c-format
+msgid "Anchors `%s' and `%s' map to the same file name"
+msgstr "íÁÒËÅÒÙ `%s' É `%s' ÓÓÙÌÁÀÔÓÑ ÎÁ ÏÄÎÏ É ÔÏ ÖÅ ÉÍÑ ÆÁÊÌÁ"
+
+#: makeinfo/node.c:1153
+msgid "@anchor command ignored; references to it will not work"
+msgstr "ëÏÍÁÎÄÁ @anchor ÉÇÎÏÒÉÒÕÅÔÓÑ; ÓÓÙÌËÉ ÎÁ ÎÅÅ ÎÅ ÂÕÄÕÔ ÒÁÂÏÔÁÔØ"
+
+# ÚÄÅÓØ %s ÍÏÖÅÔ ÂÙÔØ `cross' ÉÌÉ `menu'
+#: makeinfo/node.c:1347
+#, c-format
+msgid "%s reference to nonexistent node `%s' (perhaps incorrect sectioning?)"
+msgstr ""
+"%s ÎÁ ÎÅÓÕÝÅÓÔ×ÕÀÝÕÀ ÎÏÄÕ `%s' (×ÏÚÍÏÖÎÏ, ÎÅÐÒÁ×ÉÌØÎÏ ÏÐÉÓÁÎÁ ÓÔÒÕËÔÕÒÁ "
+"ÇÌÁ×?)"
+
+#: makeinfo/node.c:1363
+msgid "Menu"
+msgstr "óÓÙÌËÁ ÉÚ ÍÅÎÀ"
+
+#: makeinfo/node.c:1365
+msgid "Cross"
+msgstr "ðÅÒÅËÒÅÓÔÎÁÑ ÓÓÙÌËÁ"
+
+#: makeinfo/node.c:1447
+#, c-format
+msgid "Next field of node `%s' not pointed to (perhaps incorrect sectioning?)"
+msgstr ""
+"îÁ ÐÏÌÅ Next ÎÏÄÙ `%s' ÎÅÔ ÓÓÙÌÏË (×ÏÚÍÏÖÎÏ, ÎÅÐÒÁ×ÉÌØÎÏ ÏÐÉÓÁÎÁ ÓÔÒÕËÔÕÒÁ "
+"ÇÌÁ×?)"
+
+#: makeinfo/node.c:1450
+#, c-format
+msgid "This node (%s) has the bad Prev"
+msgstr "÷ ÜÔÏÊ ÎÏÄÅ (%s) ÎÅÐÒÁ×ÉÌØÎÙÊ ÕËÁÚÁÔÅÌØ Prev"
+
+#: makeinfo/node.c:1462
+msgid "Prev"
+msgstr "ðÒÅÄÙÄÕÝÁÑ"
+
+#: makeinfo/node.c:1505
+#, c-format
+msgid "Prev field of node `%s' not pointed to"
+msgstr "îÁ ÐÏÌÅ Prev ÎÏÄÙ `%s' ÎÅÔ ÓÓÙÌÏË"
+
+#: makeinfo/node.c:1509
+#, c-format
+msgid "This node (%s) has the bad Next"
+msgstr "÷ ÜÔÏÊ ÎÏÄÅ (%s) ÎÅÐÒÁ×ÉÌØÎÙÊ ÕËÁÚÁÔÅÌØ Next"
+
+#: makeinfo/node.c:1521
+#, c-format
+msgid "`%s' has no Up field (perhaps incorrect sectioning?)"
+msgstr ""
+"÷ ÎÏÄÅ `%s' ÎÅÔ ÐÏÌÑ Up (×ÏÚÍÏÖÎÏ, ÎÅÐÒÁ×ÉÌØÎÏ ÏÐÉÓÁÎÁ ÓÔÒÕËÔÕÒÁ ÇÌÁ×?)"
+
+#: makeinfo/node.c:1524
+msgid "Up"
+msgstr "÷×ÅÒÈ"
+
+#: makeinfo/node.c:1590
+#, c-format
+msgid "Node `%s' lacks menu item for `%s' despite being its Up target"
+msgstr "îÏÄÁ `%s' ÎÅ ÉÍÅÅÔ ÐÕÎËÔÁ ÍÅÎÀ ÄÌÑ `%s', ÈÏÔÑ ÎÁ ÎÅÅ ÓÓÙÌÁÅÔÓÑ ÐÏÌÅ Up"
+
+#: makeinfo/node.c:1619
+#, c-format
+msgid "node `%s' has been referenced %d times"
+msgstr "ÎÁ ÎÏÄÕ `%s' ÐÏÑ×ÉÌÏÓØ %d ÓÓÙÌÏË"
+
+#: makeinfo/node.c:1633
+#, c-format
+msgid "unreferenced node `%s'"
+msgstr "ÎÁ ÎÏÄÕ `%s' ÎÅÔ ÓÓÙÌÏË"
+
+#: makeinfo/node.c:1723
+#, c-format
+msgid "Removing %s\n"
+msgstr "õÄÁÌÅÎÉÅ %s\n"
+
+#: makeinfo/node.c:1727
+#, 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:562
+#, c-format
+msgid "Internal error (search_sectioning) \"%s\"!"
+msgstr "÷ÎÕÔÒÅÎÎÑÑ ÏÛÉÂËÁ (search_sectioning) \"%s\"!"
+
+#: makeinfo/sectioning.c:623
+#, c-format
+msgid "%c%s is obsolete; use %c%s instead"
+msgstr "ëÏÍÁÎÄÁ %c%s ÕÓÔÁÒÅÌÁ; ÉÓÐÏÌØÚÕÊÔÅ ×ÍÅÓÔÏ ÎÅÅ %c%s"
+
+#: makeinfo/sectioning.c:639
+#, c-format
+msgid "Node with %ctop as a section already exists"
+msgstr "îÏÄÁ Ó %ctop × ËÁÞÅÓÔ×Å ÒÁÚÄÅÌÁ ÕÖÅ ÓÕÝÅÓÔ×ÕÅÔ"
+
+#: makeinfo/sectioning.c:647
+#, c-format
+msgid "Here is the %ctop node"
+msgstr "úÄÅÓØ ÎÁÈÏÄÉÔÓÑ ÎÏÄÁ %ctop"
+
+#: makeinfo/sectioning.c:663
+#, c-format
+msgid "%ctop used before %cnode, defaulting to %s"
+msgstr "%ctop ×ÓÔÒÅÞÅÎÁ ÐÅÒÅÄ %cnode, ÐÏ ÕÍÏÌÞÁÎÉÀ ÉÓÐÏÌØÚÕÅÔÓÑ %s"
+
+#: makeinfo/toc.c:197 makeinfo/toc.c:271 makeinfo/toc.c:273
+msgid "Table of Contents"
+msgstr "óÏÄÅÒÖÁÎÉÅ"
+
+#: makeinfo/toc.c:304 makeinfo/toc.c:337 makeinfo/toc.c:339
+msgid "Short Contents"
+msgstr "ëÒÁÔËÏÅ ÓÏÄÅÒÖÁÎÉÅ"
+
+#: makeinfo/xml.c:1605
+#, c-format
+msgid "@image file `%s' unreadable: %s"
+msgstr "ÎÅ×ÏÚÍÏÖÎÏ ÐÒÏÞÉÔÁÔØ @image ÆÁÊÌ `%s': %s"
+
+#: makeinfo/xml.c:2097
+msgid ""
+"@headitem as the last item of @multitable produces invalid Docbook documents"
+msgstr ""
+"ÉÓÐÏÌØÚÏ×ÁÎÉÅ @headitem × ËÁÞÅÓÔ×Å ÐÏÓÌÅÄÎÅÇÏ ÜÌÅÍÅÎÔÁ @multitable ×ÙÄÁÅÔ "
+"ÎÅËÏÒÒÅËÔÎÙÅ ÄÏËÕÍÅÎÔÙ Docbook"
+
+#: util/install-info.c:154
+#, c-format
+msgid "%s: warning: "
+msgstr "%s: ÐÒÅÄÕÐÒÅÖÄÅÎÉÅ: "
+
+#: util/install-info.c:203
+#, c-format
+msgid " for %s"
+msgstr " ÄÌÑ %s"
+
+#: util/install-info.c:426
+#, c-format
+msgid "\tTry `%s --help' for a complete list of options.\n"
+msgstr "\túÁÐÕÓÔÉÔÅ `%s --help' ÄÌÑ ÐÏÌÕÞÅÎÉÑ ÐÏÌÎÏÇÏ ÓÐÉÓËÁ ËÌÀÞÅÊ.\n"
+
+#: util/install-info.c:434
+#, c-format
+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-æáêìá ÉÚ\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"
+
+#: util/install-info.c:488
+#, 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"
+
+#: util/install-info.c:513
+#, c-format
+msgid "%s: could not read (%s) and could not create (%s)\n"
+msgstr "%s: ÎÅ×ÏÚÍÏÖÎÏ ÐÒÏÞÉÔÁÔØ (%s) É ÓÏÚÄÁÔØ (%s)\n"
+
+#: util/install-info.c:600
+#, c-format
+msgid "%s: empty file"
+msgstr "%s: ÐÕÓÔÏÊ ÆÁÊÌ"
+
+#: util/install-info.c:913 util/install-info.c:953
+msgid "START-INFO-DIR-ENTRY without matching END-INFO-DIR-ENTRY"
+msgstr "START-INFO-DIR-ENTRY ÂÅÚ ÓÏÏÔ×ÅÔÓÔ×ÕÀÝÅÇÏ END-INFO-DIR-ENTRY"
+
+#: util/install-info.c:948
+msgid "END-INFO-DIR-ENTRY without matching START-INFO-DIR-ENTRY"
+msgstr "END-INFO-DIR-ENTRY ÂÅÚ ÓÏÏÔ×ÅÔÓÔ×ÕÀÝÅÇÏ START-INFO-DIR-ENTRY"
+
+#: util/install-info.c:1191 util/install-info.c:1201
+#, c-format
+msgid "%s: already have dir file: %s\n"
+msgstr "%s: ÕÖÅ ÓÕÝÅÓÔ×ÕÅÔ ÆÁÊÌ dir: %s\n"
+
+#: util/install-info.c:1236
+#, c-format
+msgid "%s: Specify the Info file only once.\n"
+msgstr "%s: íÏÖÎÏ ÚÁÄÁÔØ ÔÏÌØËÏ ÏÄÉÎ Info-ÆÁÊÌ.\n"
+
+#: util/install-info.c:1284
+#, c-format
+msgid "excess command line argument `%s'"
+msgstr "ÉÚÌÉÛÎÉÊ ÁÒÇÕÍÅÎÔ `%s'"
+
+#: util/install-info.c:1288
+msgid "No input file specified; try --help for more information."
+msgstr ""
+"îÅ ÚÁÄÁÎ ×ÈÏÄÎÏÊ ÆÁÊÌ.\n"
+"ðÏÐÒÏÂÕÊÔÅ `%s --help' ÄÌÑ ÐÏÌÕÞÅÎÉÑ ÂÏÌÅÅ ÐÏÄÒÏÂÎÏÇÏ ÏÐÉÓÁÎÉÑ."
+
+#: util/install-info.c:1291
+msgid "No dir file specified; try --help for more information."
+msgstr ""
+"îÅ ÚÁÄÁÎ ÆÁÊÌ ËÁÔÁÌÏÇÁ.\n"
+"ðÏÐÒÏÂÕÊÔÅ `%s --help' ÄÌÑ ÐÏÌÕÞÅÎÉÑ ÂÏÌÅÅ ÐÏÄÒÏÂÎÏÇÏ ÏÐÉÓÁÎÉÑ."
+
+#: util/install-info.c:1313
+#, c-format
+msgid "no info dir entry in `%s'"
+msgstr "× `%s' ÎÅÔ ×ÈÏÖÄÅÎÉÑ ÄÌÑ ËÁÔÁÌÏÇÁ Info"
+
+#: util/install-info.c:1426
+#, c-format
+msgid "menu item `%s' already exists, for file `%s'"
+msgstr "ÐÕÎËÔ ÍÅÎÀ `%s' ÕÖÅ ÓÕÝÅÓÔ×ÕÅÔ, ÄÌÑ ÆÁÊÌÁ `%s'"
+
+#: util/install-info.c:1449
+#, c-format
+msgid "no entries found for `%s'; nothing deleted"
+msgstr "ÎÅ ÎÁÊÄÅÎÏ ×ÈÏÖÄÅÎÉÊ ÄÌÑ `%s'; ÎÉÞÅÇÏ ÎÅ ÕÄÁÌÅÎÏ"
+
+#: util/texindex.c:252
+msgid "display this help and exit"
+msgstr "ÐÏËÁÚÁÔØ ÜÔÕ ÓÐÒÁ×ËÕ É ×ÙÊÔÉ"
+
+#: util/texindex.c:254
+msgid "keep temporary files around after processing"
+msgstr "ÓÏÈÒÁÎÑÔØ ×ÒÅÍÅÎÎÙÅ ÆÁÊÌÙ ÐÏÓÌÅ ÒÁÂÏÔÙ"
+
+#: util/texindex.c:256
+msgid "do not keep temporary files around after processing (default)"
+msgstr "ÎÅ ÓÏÈÒÁÎÑÔØ ×ÒÅÍÅÎÎÙÅ ÆÁÊÌÙ (ÐÏ ÕÍÏÌÞÁÎÉÀ)"
+
+#: util/texindex.c:258
+msgid "send output to FILE"
+msgstr "ÚÁÐÉÓÁÔØ ×Ù×ÏÄ × æáêì"
+
+#: util/texindex.c:260
+msgid "display version information and exit"
+msgstr "ÐÏËÁÚÁÔØ ÉÎÆÏÒÍÁÃÉÀ Ï ×ÅÒÓÉÉ É ×ÙÊÔÉ"
+
+#: util/texindex.c:270
+#, c-format
+msgid "Usage: %s [OPTION]... FILE...\n"
+msgstr "éÓÐÏÌØÚÏ×ÁÎÉÅ: %s [ëìàþ]... æáêì...\n"
+
+#: util/texindex.c:271
+#, c-format
+msgid "Generate a sorted index for each TeX output FILE.\n"
+msgstr ""
+"óÏÚÄÁÅÔ ÓÏÒÔÉÒÏ×ÁÎÎÙÊ ÁÌÆÁ×ÉÔÎÙÊ ÕËÁÚÁÔÅÌØ ÄÌÑ\n"
+"ËÁÖÄÏÇÏ ×ÙÈÏÄÎÏÇÏ TeX-ÆÁÊÌÁ.\n"
+
+#: util/texindex.c:274
+#, 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:276
+#, c-format
+msgid ""
+"\n"
+"Options:\n"
+msgstr ""
+"\n"
+"ëÌÀÞÉ:\n"
+
+#: util/texindex.c:876 util/texindex.c:910 util/texindex.c:983
+#: util/texindex.c:1011
+#, c-format
+msgid "%s: not a texinfo index file"
+msgstr "%s: ÎÅ texinfo-ÆÁÊÌ Ó ÁÌÆÁ×ÉÔÎÙÍ ÕËÁÚÁÔÅÌÅÍ"
+
+#: util/texindex.c:968
+#, c-format
+msgid "failure reopening %s"
+msgstr "ÏÛÉÂËÁ ÐÏ×ÔÏÒÎÏÇÏ ÏÔËÒÙÔÉÑ %s"
+
+#: util/texindex.c:1218
+#, c-format
+msgid "No page number in %s"
+msgstr "÷ %s ÎÅÔ ÎÏÍÅÒÁ ÓÔÒÁÎÉÃÙ"
+
+#: util/texindex.c:1291
+#, c-format
+msgid "entry %s follows an entry with a secondary name"
+msgstr "ÚÁ ×ÈÏÖÄÅÎÉÅÍ %s ÓÌÅÄÕÅÔ ×ÈÏÖÄÅÎÉÅ Ó ×ÔÏÒÉÞÎÙÍ ÉÍÅÎÅÍ"
diff --git a/macros/texinfo/contrib/texinfo-hu/texinfo/po/stamp-po b/macros/texinfo/contrib/texinfo-hu/texinfo/po/stamp-po
new file mode 100644
index 0000000000..9788f70238
--- /dev/null
+++ b/macros/texinfo/contrib/texinfo-hu/texinfo/po/stamp-po
@@ -0,0 +1 @@
+timestamp
diff --git a/macros/texinfo/contrib/texinfo-hu/texinfo/po/sv.gmo b/macros/texinfo/contrib/texinfo-hu/texinfo/po/sv.gmo
new file mode 100644
index 0000000000..ab3833a478
--- /dev/null
+++ b/macros/texinfo/contrib/texinfo-hu/texinfo/po/sv.gmo
Binary files differ
diff --git a/macros/texinfo/contrib/texinfo-hu/texinfo/po/sv.po b/macros/texinfo/contrib/texinfo-hu/texinfo/po/sv.po
new file mode 100644
index 0000000000..ad89cd65ac
--- /dev/null
+++ b/macros/texinfo/contrib/texinfo-hu/texinfo/po/sv.po
@@ -0,0 +1,3369 @@
+# Swedish messages for texinfo.
+# Copyright (C) 2001, 2002, 2003, 2004 Free Software Foundation, Inc.
+# Christian Rose <menthos@menthos.com>, 2001, 2002, 2003, 2004.
+#
+msgid ""
+msgstr ""
+"Project-Id-Version: texinfo 4.7.91\n"
+"Report-Msgid-Bugs-To: bug-texinfo@gnu.org\n"
+"POT-Creation-Date: 2004-12-21 16:20-0800\n"
+"PO-Revision-Date: 2004-12-12 22:41+0100\n"
+"Last-Translator: Christian Rose <menthos@menthos.com>\n"
+"Language-Team: Swedish <sv@li.org>\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=iso-8859-1\n"
+"Content-Transfer-Encoding: 8bit\n"
+
+#: info/echo-area.c:284 info/session.c:689
+msgid "Move forward a character"
+msgstr "Gå ett tecken framåt"
+
+#: info/echo-area.c:296 info/session.c:705
+msgid "Move backward a character"
+msgstr "Gå ett tecken bakåt"
+
+#: info/echo-area.c:308
+msgid "Move to the start of this line"
+msgstr "Gå till början på raden"
+
+#: info/echo-area.c:313
+msgid "Move to the end of this line"
+msgstr "Gå till slutet på raden"
+
+#: info/echo-area.c:321 info/session.c:723
+msgid "Move forward a word"
+msgstr "Gå ett ord framåt"
+
+#: info/echo-area.c:361 info/session.c:772
+msgid "Move backward a word"
+msgstr "Gå ett ord bakåt"
+
+#: info/echo-area.c:401
+msgid "Delete the character under the cursor"
+msgstr "Ta bort tecknet under markören"
+
+#: info/echo-area.c:431
+msgid "Delete the character behind the cursor"
+msgstr "Ta bort tecknet bakom markören"
+
+#: info/echo-area.c:452
+msgid "Cancel or quit operation"
+msgstr "Avbryt eller avsluta operation"
+
+#: info/echo-area.c:467
+msgid "Accept (or force completion of) this line"
+msgstr "Acceptera (eller tvinga komplettering av) denna rad"
+
+#: info/echo-area.c:472
+msgid "Insert next character verbatim"
+msgstr "Infoga nästa tecken ordagrant"
+
+#: info/echo-area.c:480
+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:653
+msgid "Kill the word preceding the cursor"
+msgstr "Döda ordet före markören"
+
+#: info/echo-area.c:868 info/echo-area.c:924
+msgid "No completions"
+msgstr "Inga kompletteringar"
+
+#: info/echo-area.c:870
+msgid "Not complete"
+msgstr "Inte fullständig"
+
+#: info/echo-area.c:911
+msgid "List possible completions"
+msgstr "Visa möjliga kompletteringar"
+
+#: info/echo-area.c:928
+msgid "Sole completion"
+msgstr "Enda komplettering"
+
+#: info/echo-area.c:937
+msgid "One completion:\n"
+msgstr "En komplettering:\n"
+
+#: info/echo-area.c:938
+#, c-format
+msgid "%d completions:\n"
+msgstr "%d kompletteringar:\n"
+
+#: info/echo-area.c:1085
+msgid "Insert completion"
+msgstr "Infoga komplettering"
+
+#: info/echo-area.c:1220
+msgid "Building completions..."
+msgstr "Bygger kompletteringar..."
+
+#: info/echo-area.c:1340
+msgid "Scroll the completions window"
+msgstr "Rulla kompletteringsfönstret"
+
+#: info/footnotes.c:213
+msgid "Footnotes could not be displayed"
+msgstr "Fotnoter kunde inte visas"
+
+#: info/footnotes.c:239
+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:172
+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:199
+msgid "Finding index entries..."
+msgstr "Söker indexposter..."
+
+#: info/indices.c:207
+msgid "No indices found."
+msgstr "Inga index hittades."
+
+#: info/indices.c:217
+msgid "Index entry: "
+msgstr "Indexpost: "
+
+#: info/indices.c:325
+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:335
+msgid "No previous index search string."
+msgstr "Det finns ingen tidigare indexsöksträng."
+
+#: info/indices.c:342
+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:375
+#, c-format
+msgid "No %sindex entries containing `%s'."
+msgstr "Inga %sindexposter som innehåller \"%s\"."
+
+#: info/indices.c:376
+msgid "more "
+msgstr "fler "
+
+#: info/indices.c:386
+msgid "CAN'T SEE THIS"
+msgstr "KAN INTE SE DETTA"
+
+#: info/indices.c:422
+#, 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:541
+#, c-format
+msgid "Scanning indices of `%s'..."
+msgstr "Genomsöker index av \"%s\"..."
+
+#: info/indices.c:596
+#, 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:622
+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:626
+msgid "Index apropos: "
+msgstr "Index-apropos: "
+
+#: info/indices.c:654
+#, 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:295 makeinfo/makeinfo.c:766 util/install-info.c:1266
+#: util/texindex.c:343
+#, c-format
+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"
+
+#: info/info.c:498
+#, c-format
+msgid "no index entries found for `%s'\n"
+msgstr "inga indexposter för \"%s\" hittades\n"
+
+#: info/info.c:590
+msgid " -b, --speech-friendly be friendly to speech synthesizers.\n"
+msgstr " -b, --speech-friendly var vänlig mot talsyntesprogram.\n"
+
+#: info/info.c:597
+#, c-format
+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 -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 -f ./foo.info visa filen ./foo.info, sök inte i katalogen\n"
+
+#: info/info.c:635 info/infokey.c:918 makeinfo/makeinfo.c:465
+#: util/install-info.c:466 util/texindex.c:292
+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:669
+#, c-format
+msgid "Cannot find node `%s'."
+msgstr "Kan inte hitta noden \"%s\"."
+
+#: info/info.c:670
+#, c-format
+msgid "Cannot find node `(%s)%s'."
+msgstr "Kan inte hitta noden \"(%s)%s\"."
+
+#: info/info.c:671
+msgid "Cannot find a window!"
+msgstr "Kan inte hitta ett fönster!"
+
+#: info/info.c:672
+msgid "Point doesn't appear within this window's node!"
+msgstr "Punkten finns inte inom detta fönsters nod!"
+
+#: info/info.c:673
+msgid "Cannot delete the last window."
+msgstr "Kan inte ta bort det sista fönstret."
+
+#: info/info.c:674
+msgid "No menu in this node."
+msgstr "Ingen meny i denna nod."
+
+#: info/info.c:675
+msgid "No footnotes in this node."
+msgstr "Inga fotnoter i denna nod."
+
+#: info/info.c:676
+msgid "No cross references in this node."
+msgstr "Inga korsreferenser i denna nod."
+
+#: info/info.c:677
+#, c-format
+msgid "No `%s' pointer for this node."
+msgstr "Ingen \"%s\"-pekare för denna nod."
+
+#: info/info.c:678
+#, c-format
+msgid "Unknown Info command `%c'; try `?' for help."
+msgstr "Okänt Info-kommando \"%c\". Prova \"?\" för hjälp."
+
+#: info/info.c:679
+#, 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:680
+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:681
+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:682
+msgid "Only one window."
+msgstr "Endast ett fönster."
+
+#: info/info.c:683
+msgid "Resulting window would be too small."
+msgstr "Resulterande fönstret skulle bli för litet."
+
+#: info/info.c:684
+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:46 info/infodoc.c:95
+msgid ""
+"Basic Commands in Info Windows\n"
+"******************************\n"
+msgstr ""
+"Grundläggande kommandon i Info-fönster\n"
+"**************************************\n"
+
+#: info/infodoc.c:49
+msgid "\\%-10[quit-help] Quit this help.\n"
+msgstr "\\%-10[quit-help] Avsluta denna hjälp.\n"
+
+#: info/infodoc.c:50
+msgid "\\%-10[quit] Quit Info altogether.\n"
+msgstr "\\%-10[quit] Avsluta Info helt.\n"
+
+#: info/infodoc.c:51
+msgid "\\%-10[get-info-help-node] Invoke the Info tutorial.\n"
+msgstr "\\%-10[get-info-help-node] Starta Info-handboken.\n"
+
+#: info/infodoc.c:53 info/infodoc.c:102
+msgid ""
+"Selecting other nodes:\n"
+"----------------------\n"
+msgstr ""
+"Välja andra noder:\n"
+"------------------\n"
+
+#: info/infodoc.c:55
+msgid "\\%-10[next-node] Move to the \"next\" node of this node.\n"
+msgstr "\\%-10[next-node] Gå till nästa nod från denna nod.\n"
+
+#: info/infodoc.c:56
+msgid "\\%-10[prev-node] Move to the \"previous\" node of this node.\n"
+msgstr "\\%-10[prev-node] Gå till föregående nod från denna nod.\n"
+
+#: info/infodoc.c:57
+msgid "\\%-10[up-node] Move \"up\" from this node.\n"
+msgstr "\\%-10[up-node] Gå upp från denna nod.\n"
+
+#: info/infodoc.c:58
+msgid ""
+"\\%-10[menu-item] Pick menu item specified by name.\n"
+" Picking a menu item causes another node to be selected.\n"
+msgstr ""
+"\\%-10[menu-item] Välj den menypost som anges med namn.\n"
+" Att välja en menypost gör att en annan nod väljs.\n"
+
+#: info/infodoc.c:60
+msgid ""
+"\\%-10[xref-item] Follow a cross reference. Reads name of reference.\n"
+msgstr ""
+"\\%-10[xref-item] Följ en korsreferens. Läser namnet på en referens.\n"
+
+#: info/infodoc.c:61
+msgid "\\%-10[history-node] Move 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[move-to-next-xref] Skip to next hypertext link within this node.\n"
+msgstr ""
+"\\%-10[move-to-next-xref] Hoppa till nästa hypertextlänk i denna nod.\n"
+
+#: info/infodoc.c:63
+msgid ""
+"\\%-10[move-to-prev-xref] Skip to previous hypertext link within this "
+"node.\n"
+msgstr ""
+"\\%-10[move-to-prev-xref] Hoppa till nästa hypertextlänk i denna nod.\n"
+
+#: info/infodoc.c:64
+msgid ""
+"\\%-10[select-reference-this-line] Follow the hypertext link under cursor.\n"
+msgstr ""
+"\\%-10[select-reference-this-line] Följ hypertextlänken under markören.\n"
+
+#: info/infodoc.c:65
+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"
+
+#: info/infodoc.c:66
+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"
+
+#: info/infodoc.c:68 info/infodoc.c:116
+msgid ""
+"Moving within a node:\n"
+"---------------------\n"
+msgstr ""
+"Förflyttning inom en nod:\n"
+"-------------------------\n"
+
+#: info/infodoc.c:70
+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:71
+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:72
+msgid "\\%-10[next-line] Scroll forward 1 line.\n"
+msgstr "\\%-10[next-line] Rulla en rad framåt.\n"
+
+#: info/infodoc.c:73
+msgid "\\%-10[prev-line] Scroll backward 1 line.\n"
+msgstr "\\%-10[prev-line] Rulla en rad bakåt.\n"
+
+#: info/infodoc.c:74
+msgid "\\%-10[scroll-forward] Scroll forward a page.\n"
+msgstr "\\%-10[scroll-forward] Rulla en sida framåt.\n"
+
+#: info/infodoc.c:75
+msgid "\\%-10[scroll-backward] Scroll backward a page.\n"
+msgstr "\\%-10[scroll-backward] Rulla en sida bakåt.\n"
+
+#: info/infodoc.c:77 info/infodoc.c:125
+msgid ""
+"Other commands:\n"
+"---------------\n"
+msgstr ""
+"Andra kommandon:\n"
+"----------------\n"
+
+#: info/infodoc.c:79
+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"
+
+#: info/infodoc.c:80
+msgid "\\%-10[last-menu-item] Pick last item in node's menu.\n"
+msgstr "\\%-10[last-menu-item] Välj det sista objektet i nodens meny.\n"
+
+#: info/infodoc.c:81
+msgid ""
+"\\%-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"
+msgstr ""
+"\\%-10[index-search] Sök efter en angiven sträng i indexposterna i denna\n"
+" Info-fil, och välj noden som refereras av den första posten\n"
+" som hittas.\n"
+
+#: info/infodoc.c:83
+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å till den nod som anges.\n"
+" Du kan även inkludera ett filnamn, som exempelvis\n"
+" (FILNAMN)NODNAMN.\n"
+
+#: info/infodoc.c:85
+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"
+
+#: info/infodoc.c:87
+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"
+
+#: info/infodoc.c:98
+#, c-format
+msgid " %-10s Quit this help.\n"
+msgstr " %-10s Avsluta denna hjälp.\n"
+
+#: info/infodoc.c:99
+#, c-format
+msgid " %-10s Quit Info altogether.\n"
+msgstr " %-10s Avsluta Info helt.\n"
+
+#: info/infodoc.c:100
+#, c-format
+msgid " %-10s Invoke the Info tutorial.\n"
+msgstr " %-10s Starta Info-handboken.\n"
+
+#: info/infodoc.c:104
+#, 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:105
+#, 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:106
+#, c-format
+msgid " %-10s Move `up' from this node.\n"
+msgstr " %-10s Gå upp från denna nod.\n"
+
+#: info/infodoc.c:107
+#, c-format
+msgid " %-10s Pick menu item specified by name.\n"
+msgstr " %-10s Välj angiven menypost.\n"
+
+#: info/infodoc.c:108
+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"
+
+#: info/infodoc.c:109
+#, 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:110
+#, 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:111
+#, 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:112
+#, c-format
+msgid " %-10s Follow the hypertext link under cursor.\n"
+msgstr " %-10s Följ hypertextlänken under markören.\n"
+
+#: info/infodoc.c:113
+#, 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:114
+#, 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:118
+#, c-format
+msgid " %-10s Scroll forward a page.\n"
+msgstr " %-10s Rulla en sida framåt.\n"
+
+#: info/infodoc.c:119
+#, c-format
+msgid " %-10s Scroll backward a page.\n"
+msgstr " %-10s Rulla en sida bakåt.\n"
+
+#: info/infodoc.c:120
+#, 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:121
+#, c-format
+msgid " %-10s Go to the end of this node.\n"
+msgstr " %-10s Gå till slutet på denna nod.\n"
+
+#: info/infodoc.c:122
+#, c-format
+msgid " %-10s Scroll forward 1 line.\n"
+msgstr " %-10s Rulla en rad framåt.\n"
+
+#: info/infodoc.c:123
+#, c-format
+msgid " %-10s Scroll backward 1 line.\n"
+msgstr " %-10s Rulla en rad bakåt.\n"
+
+#: info/infodoc.c:127
+#, 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:128
+#, c-format
+msgid " %-10s Pick last item in node's menu.\n"
+msgstr " %-10s Välj det sista 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.
+#
+#: info/infodoc.c:129
+#, c-format
+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"
+
+#: info/infodoc.c:130
+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"
+
+#: info/infodoc.c:131
+#, c-format
+msgid " %-10s Move to node specified by name.\n"
+msgstr " %-10s Gå till den nod som anges.\n"
+
+#: info/infodoc.c:132
+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 forward through 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.
+#
+#: info/infodoc.c:133
+#, c-format
+msgid " %-10s Search forward for a specified string,\n"
+msgstr " %-10s Sök framåt efter en angiven sträng,\n"
+
+#: info/infodoc.c:134 info/infodoc.c:136
+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"
+
+# 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.
+#
+#: info/infodoc.c:135
+#, c-format
+msgid " %-10s Search backward for a specified string\n"
+msgstr " %-10s Sök bakåt efter en angiven sträng,\n"
+
+#: info/infodoc.c:316
+msgid "The current search path is:\n"
+msgstr "Den aktuella sökvägen är:\n"
+
+#: info/infodoc.c:320
+msgid ""
+"Commands available in Info windows:\n"
+"\n"
+msgstr ""
+"Kommandon som är tillgängliga i Info-fönster:\n"
+"\n"
+
+#: info/infodoc.c:324
+msgid ""
+"Commands available in the echo area:\n"
+"\n"
+msgstr ""
+"Kommandon som är tillgängliga i echo-området:\n"
+"\n"
+
+#: info/infodoc.c:347
+#, 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:351
+msgid ""
+"The following commands cannot be invoked at all:\n"
+"\n"
+msgstr ""
+"Följande kommandon kan inte startas alls:\n"
+"\n"
+
+#: info/infodoc.c:375
+msgid "--- Use `\\[history-node]' or `\\[kill-node]' to exit ---\n"
+msgstr ""
+"--- Använd \"\\[history-node]\" eller \"\\[kill-node]\" för att avsluta ---\n"
+
+#: info/infodoc.c:485
+msgid "Display help message"
+msgstr "Visa hjälpmeddelande"
+
+#: info/infodoc.c:503
+msgid "Visit Info node `(info)Help'"
+msgstr "Besök Info-noden \"(info)Help\""
+
+#: info/infodoc.c:641
+msgid "Print documentation for KEY"
+msgstr "Visa dokumentationen för NYCKEL"
+
+#: info/infodoc.c:653
+#, c-format
+msgid "Describe key: %s"
+msgstr "Beskriv nyckel: %s"
+
+#: info/infodoc.c:664
+#, c-format
+msgid "ESC %s is undefined."
+msgstr "ESC %s är odefinierad."
+
+#: info/infodoc.c:680 info/infodoc.c:709
+#, c-format
+msgid "%s is undefined."
+msgstr "%s är odefinierad."
+
+#: info/infodoc.c:730
+#, c-format
+msgid "%s is defined to %s."
+msgstr "%s är definierad till %s."
+
+#: info/infodoc.c:1153
+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:1157
+msgid "Where is command: "
+msgstr "Var är kommando: "
+
+#: info/infodoc.c:1179
+#, c-format
+msgid "`%s' is not on any keys"
+msgstr "\"%s\" finns inte på några tangenter"
+
+#: info/infodoc.c:1186
+#, c-format
+msgid "%s can only be invoked via %s."
+msgstr "%s kan endast startas via %s."
+
+#: info/infodoc.c:1190
+#, c-format
+msgid "%s can be invoked via %s."
+msgstr "%s kan startas via %s."
+
+#: info/infodoc.c:1195
+#, c-format
+msgid "There is no function named `%s'"
+msgstr "Det finns ingen funktion med namnet \"%s\""
+
+#: info/infokey.c:145
+#, c-format
+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"
+
+#: 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:1500
+#, c-format
+msgid "Ignoring invalid infokey file `%s' - too small"
+msgstr "Ignorerar ogiltig infonyckelfil \"%s\" - för liten"
+
+#: info/infomap.c:1503
+#, c-format
+msgid "Ignoring invalid infokey file `%s' - too big"
+msgstr "Ignorerar ogiltig infonyckelfil \"%s\" - för stor"
+
+#: info/infomap.c:1516
+#, c-format
+msgid "Error reading infokey file `%s' - short read"
+msgstr "Fel vid läsning av infonyckelfilen \"%s\" - kort läsning"
+
+#: info/infomap.c:1535
+#, 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:1544
+#, 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:1560
+#, 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:1581
+#, 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:1716
+msgid "Bad data in infokey file -- some key bindings ignored"
+msgstr "Felaktig data i infonyckelfil -- en del bindningar ignorerades"
+
+#: info/infomap.c:1766
+msgid "Bad data in infokey file -- some var settings ignored"
+msgstr "Felaktig data i infonyckelfil -- en del inställningar ignorerades"
+
+#: info/m-x.c:69
+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:73
+msgid "Describe command: "
+msgstr "Beskriv kommando: "
+
+#: info/m-x.c:96
+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:140
+msgid "Cannot execute an `echo-area' command here."
+msgstr "Kan inte köra ett \"echo-area\"-kommando här."
+
+#: info/m-x.c:154
+#, c-format
+msgid "Undefined command: %s"
+msgstr "Odefinierat kommando: %s"
+
+#: info/m-x.c:160
+msgid "Set the height of the displayed window"
+msgstr "Ställ in höjden på det visade fönstret"
+
+#: info/m-x.c:173
+#, c-format
+msgid "Set screen height to (%d): "
+msgstr "Ställ in skärmhöjden till (%d): "
+
+#: info/makedoc.c:162 info/makedoc.c:170
+#, 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:550
+#, c-format
+msgid "Couldn't manipulate the file %s.\n"
+msgstr "Kunde inte manipulera filen %s.\n"
+
+#: info/nodemenu.c:31
+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:202
+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:224
+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:304
+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:317
+msgid "Select visited node: "
+msgstr "Välj besökt nod: "
+
+#: info/nodemenu.c:337 info/session.c:2264
+#, c-format
+msgid "The reference disappeared! (%s)."
+msgstr "Referensen försvann! (%s)."
+
+#: info/session.c:162
+#, 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:620
+msgid "Move down to the next line"
+msgstr "Gå ned till nästa rad"
+
+#: info/session.c:635
+msgid "Move up to the previous line"
+msgstr "Gå upp till föregående rad"
+
+#: info/session.c:650
+msgid "Move to the end of the line"
+msgstr "Gå till slutet på raden"
+
+#: info/session.c:670
+msgid "Move to the start of the line"
+msgstr "Gå till början på raden"
+
+# src/menus.c:332
+#: info/session.c:860 makeinfo/node.c:1424
+msgid "Next"
+msgstr "Nästa"
+
+#: info/session.c:863
+msgid "Following Next node..."
+msgstr "Följer nästa-nod..."
+
+#: info/session.c:881
+msgid "Selecting first menu item..."
+msgstr "Väljer första menyposten..."
+
+#: info/session.c:893
+msgid "Selecting Next node..."
+msgstr "Väljer nästa nod..."
+
+#: info/session.c:964
+#, c-format
+msgid "Moving Up %d time(s), then Next."
+msgstr "Går upp %d gång(er), sedan Nästa."
+
+#: info/session.c:988
+msgid "No more nodes within this document."
+msgstr "Inga fler noder i detta dokument."
+
+#: info/session.c:1011
+msgid "No `Prev' for this node."
+msgstr "Ingen \"Föreg\" för denna nod."
+
+#: info/session.c:1014 info/session.c:1073
+msgid "Moving Prev in this window."
+msgstr "Gå till föregående i detta fönster."
+
+#: info/session.c:1030
+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:1034
+msgid "Moving Up in this window."
+msgstr "Går upp i detta fönster."
+
+#: info/session.c:1084
+msgid "Moving to `Prev's last menu item."
+msgstr "Gå till \"Föreg\"s senaste menypost."
+
+#: info/session.c:1095
+msgid "Move forwards or down through node structure"
+msgstr "Gå framåt eller nedåt i nodstrukturen"
+
+#: info/session.c:1111
+msgid "Move backwards or up through node structure"
+msgstr "Gå bakåt eller upp i nodstrukturen"
+
+#: info/session.c:1205
+msgid "Scroll forward in this window"
+msgstr "Rulla framåt i detta fönster"
+
+#: info/session.c:1213
+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:1221
+msgid "Scroll forward in this window staying within node"
+msgstr "Rulla framåt i detta fönster och stanna inom noden"
+
+#: info/session.c:1229
+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:1237
+msgid "Scroll backward in this window"
+msgstr "Rulla bakåt i detta fönster"
+
+#: info/session.c:1245
+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:1254
+msgid "Scroll backward in this window staying within node"
+msgstr "Rulla bakåt i detta fönster och stanna inom noden"
+
+#: info/session.c:1262
+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:1270
+msgid "Move to the start of this node"
+msgstr "Gå till början på denna nod"
+
+#: info/session.c:1277
+msgid "Move to the end of this node"
+msgstr "Gå till slutet på denna nod"
+
+#: info/session.c:1284
+msgid "Scroll down by lines"
+msgstr "Rulla nedåt radvis"
+
+#: info/session.c:1301
+msgid "Scroll up by lines"
+msgstr "Rulla uppåt radvis"
+
+#: info/session.c:1319
+msgid "Scroll down by half screen size"
+msgstr "Rulla nedåt med halva skärmstorleken"
+
+#: info/session.c:1345
+msgid "Scroll up by half screen size"
+msgstr "Rulla uppåt med halva skärmstorleken"
+
+#: info/session.c:1374
+msgid "Select the next window"
+msgstr "Välj nästa fönster"
+
+#: info/session.c:1413
+msgid "Select the previous window"
+msgstr "Välj föregående fönster"
+
+#: info/session.c:1464
+msgid "Split the current window"
+msgstr "Dela aktuellt fönster"
+
+#: info/session.c:1545
+msgid "Delete the current window"
+msgstr "Ta bort aktuellt fönster"
+
+#: info/session.c:1553
+msgid "Cannot delete a permanent window"
+msgstr "Kan inte ta bort ett permanent fönster"
+
+#: info/session.c:1585
+msgid "Delete all other windows"
+msgstr "Ta bort alla andra fönster"
+
+#: info/session.c:1631
+msgid "Scroll the other window"
+msgstr "Rulla det andra fönstret"
+
+#: info/session.c:1652
+msgid "Scroll the other window backward"
+msgstr "Rulla det andra fönstret bakåt"
+
+#: info/session.c:1658
+msgid "Grow (or shrink) this window"
+msgstr "Väx (eller krymp) detta fönster"
+
+#: info/session.c:1669
+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:1676
+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:1848
+msgid "Select the Next node"
+msgstr "Välj nästa nod"
+
+#: info/session.c:1856
+msgid "Select the Prev node"
+msgstr "Välj föregående nod"
+
+#: info/session.c:1864
+msgid "Select the Up node"
+msgstr "Välj uppnoden"
+
+#: info/session.c:1871
+msgid "Select the last node in this file"
+msgstr "Välj den sista noden i denna fil"
+
+#: info/session.c:1898 info/session.c:1931
+msgid "This window has no additional nodes"
+msgstr "Detta fönster har inga ytterligare noder"
+
+#: info/session.c:1904
+msgid "Select the first node in this file"
+msgstr "Välj den första noden i denna fil"
+
+#: info/session.c:1938
+msgid "Select the last item in this node's menu"
+msgstr "Välj det sista objektet i denna nods meny"
+
+#: info/session.c:1944
+msgid "Select this menu item"
+msgstr "Välj denna menypost"
+
+#: info/session.c:1977
+#, c-format
+msgid "There aren't %d items in this menu."
+msgstr "Det finns inte %d poster i denna meny."
+
+#: info/session.c:2171 info/session.c:2172
+#, c-format
+msgid "Menu item (%s): "
+msgstr "Menypost (%s): "
+
+#: info/session.c:2175
+msgid "Menu item: "
+msgstr "Menypost: "
+
+#: info/session.c:2182 info/session.c:2183
+#, c-format
+msgid "Follow xref (%s): "
+msgstr "Följ xref (%s): "
+
+#: info/session.c:2186
+msgid "Follow xref: "
+msgstr "Följ xref: "
+
+#: info/session.c:2315
+msgid "Read a menu item and select its node"
+msgstr "Läs en menypost och välj dess nod"
+
+#: info/session.c:2323
+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:2329
+msgid "Move to the start of this node's menu"
+msgstr "Gå till början på denna nods meny"
+
+#: info/session.c:2353
+msgid "Visit as many menu items at once as possible"
+msgstr "Besök så många menyposter som möjligt samtidigt"
+
+#: info/session.c:2381
+msgid "Read a node name and select it"
+msgstr "Läs ett nodnamn och välj det"
+
+#: info/session.c:2436 info/session.c:2441
+msgid "Goto node: "
+msgstr "Gå till nod: "
+
+#: info/session.c:2505
+#, c-format
+msgid "No menu in node `%s'."
+msgstr "Ingen meny i noden \"%s\"."
+
+#: info/session.c:2551
+#, c-format
+msgid "No menu item `%s' in node `%s'."
+msgstr "Ingen menypost \"%s\" i noden \"%s\"."
+
+#: info/session.c:2581
+#, 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:2631
+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:2633
+msgid "Follow menus: "
+msgstr "Följ menyer: "
+
+#: info/session.c:2826
+msgid "Find the node describing program invocation"
+msgstr "Hitta den nod som beskriver start av programmet"
+
+#: info/session.c:2828
+#, c-format
+msgid "Find Invocation node of [%s]: "
+msgstr "Hitta programstartnod för [%s]: "
+
+#: info/session.c:2866
+msgid "Read a manpage reference and select it"
+msgstr "Läs en referens till manualsida och välj den"
+
+#: info/session.c:2870
+msgid "Get Manpage: "
+msgstr "Hämta manualsida: "
+
+#: info/session.c:2900
+msgid "Select the node `Top' in this file"
+msgstr "Välj noden \"Top\" i denna fil"
+
+#: info/session.c:2906
+msgid "Select the node `(dir)'"
+msgstr "Välj noden \"(dir)\""
+
+#: info/session.c:2923 info/session.c:2925
+#, c-format
+msgid "Kill node (%s): "
+msgstr "Döda noden (%s): "
+
+#: info/session.c:2977
+#, c-format
+msgid "Cannot kill node `%s'"
+msgstr "Kan inte döda noden \"%s\""
+
+#: info/session.c:2987
+msgid "Cannot kill the last node"
+msgstr "Kan inte döda den sista noden"
+
+#: info/session.c:3073
+msgid "Select the most recently selected node"
+msgstr "Välj den senast valda noden"
+
+#: info/session.c:3079
+msgid "Kill this node"
+msgstr "Döda denna nod"
+
+#: info/session.c:3087
+msgid "Read the name of a file and select it"
+msgstr "Läs namnet på en fil och välj den"
+
+#: info/session.c:3091
+msgid "Find file: "
+msgstr "Sök fil: "
+
+#: info/session.c:3108
+#, c-format
+msgid "Cannot find `%s'."
+msgstr "Kan inte hitta \"%s\"."
+
+#: info/session.c:3151 info/session.c:3269
+#, c-format
+msgid "Could not create output file `%s'."
+msgstr "Kunde inte skapa utdatafilen \"%s\"."
+
+#: info/session.c:3165 info/session.c:3287 info/session.c:3347
+msgid "Done."
+msgstr "Färdig."
+
+#: info/session.c:3220
+#, c-format
+msgid "Writing node %s..."
+msgstr "Skriver noden %s..."
+
+#: info/session.c:3296
+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:3331
+#, c-format
+msgid "Cannot open pipe to `%s'."
+msgstr "Kan inte öppna rör till \"%s\"."
+
+#: info/session.c:3337
+#, c-format
+msgid "Printing node %s..."
+msgstr "Skriver ut noden %s..."
+
+#: info/session.c:3567
+#, c-format
+msgid "Searching subfile %s ..."
+msgstr "Söker i underfilen %s..."
+
+#: info/session.c:3619
+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:3626
+msgid "Read a string and search for it"
+msgstr "Läs en sträng och sök efter den"
+
+#: info/session.c:3634
+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:3670 info/session.c:3677
+#, c-format
+msgid "%s%sfor string [%s]: "
+msgstr "%s%sefter stängen [%s]: "
+
+#: info/session.c:3671 info/session.c:3678
+msgid "Search backward"
+msgstr "Sök baklänges"
+
+#: info/session.c:3672 info/session.c:3678
+msgid "Search"
+msgstr "Sök"
+
+#: info/session.c:3673 info/session.c:3679
+msgid " case-sensitively "
+msgstr " skiljandes på VERSALER/gemener "
+
+#: info/session.c:3674 info/session.c:3679
+msgid " "
+msgstr " "
+
+#: info/session.c:3718
+msgid "Search failed."
+msgstr "Sökningen misslyckades."
+
+#: info/session.c:3736
+msgid "Repeat last search in the same direction"
+msgstr "Upprepa den senaste sökningen i samma riktning"
+
+#: info/session.c:3739 info/session.c:3749
+msgid "No previous search string"
+msgstr "Ingen tidigare söksträng"
+
+#: info/session.c:3746
+msgid "Repeat last search in the reverse direction"
+msgstr "Upprepa den senaste sökningen i omvänd riktning"
+
+#: info/session.c:3765 info/session.c:3771
+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:3851
+msgid "I-search backward: "
+msgstr "I-sök baklänges: "
+
+#: info/session.c:3853
+msgid "I-search: "
+msgstr "I-sök: "
+
+#: info/session.c:3878 info/session.c:3880
+msgid "Failing "
+msgstr "Misslyckas "
+
+#: info/session.c:4340
+msgid "Move to the previous cross reference"
+msgstr "Gå till föregående korsreferens"
+
+#: info/session.c:4349
+msgid "Move to the next cross reference"
+msgstr "Gå till nästa korsreferens"
+
+#: info/session.c:4359
+msgid "Select reference or menu item appearing on this line"
+msgstr "Välj referens eller menypost som finns på denna rad"
+
+#: info/session.c:4382
+msgid "Cancel current operation"
+msgstr "Avbryt aktuell åtgärd"
+
+#: info/session.c:4389
+msgid "Quit"
+msgstr "Avsluta"
+
+#: info/session.c:4398
+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:4430
+msgid "Redraw the display"
+msgstr "Rita om displayen"
+
+#: info/session.c:4467
+msgid "Quit using Info"
+msgstr "Avsluta användandet av Info"
+
+#: info/session.c:4480
+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:4491
+#, c-format
+msgid "Unknown command (%s)."
+msgstr "Okänt kommando (%s)."
+
+#: info/session.c:4494
+#, c-format
+msgid "\"%s\" is invalid"
+msgstr "\"%s\" är ogiltigt"
+
+#: info/session.c:4495
+#, c-format
+msgid "`%s' is invalid"
+msgstr "\"%s\" är ogiltigt"
+
+#: info/session.c:4709
+msgid "Add this digit to the current numeric argument"
+msgstr "Lägg till denna siffra till det aktuella numeriska argumentet"
+
+#: info/session.c:4718
+msgid "Start (or multiply by 4) the current numeric argument"
+msgstr "Börja (eller multiplicera med 4) det numeriska argumentet"
+
+#: info/session.c:4733
+msgid "Internally used by \\[universal-argument]"
+msgstr "Används internt av \\[universal-argument]"
+
+#: info/tilde.c:338
+#, 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:64
+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:68
+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:74
+msgid "Explain the use of a variable"
+msgstr "Förklara användandet av en variabel"
+
+#: info/variables.c:80
+msgid "Describe variable: "
+msgstr "Beskriv variabel: "
+
+#: info/variables.c:99
+msgid "Set the value of an Info variable"
+msgstr "Ställ in värdet på en Info-variabel"
+
+#: info/variables.c:105
+msgid "Set variable: "
+msgstr "Ställ in variabel: "
+
+#: info/variables.c:123
+#, c-format
+msgid "Set %s to value (%d): "
+msgstr "Ställ in %s till värdet (%d): "
+
+#: info/variables.c:164
+#, c-format
+msgid "Set %s to value (%s): "
+msgstr "Ställ in %s till värdet (%s): "
+
+#: info/window.c:1138
+msgid "--*** Tags out of Date ***"
+msgstr "--*** För gamla taggar ***"
+
+#: info/window.c:1149
+msgid "-----Info: (), lines ----, "
+msgstr "-----Info: (), rader ----, "
+
+#: info/window.c:1156
+#, c-format
+msgid "-%s---Info: %s, %d lines --%s--"
+msgstr "-%s---Info: %s, %d rader --%s--"
+
+#: info/window.c:1160
+#, c-format
+msgid "-%s%s-Info: (%s)%s, %d lines --%s--"
+msgstr "-%s%s-Info: (%s)%s, %d rader --%s--"
+
+#: info/window.c:1167
+#, c-format
+msgid " Subfile: %s"
+msgstr " Underfil: %s"
+
+#: lib/getopt.c:551 lib/getopt.c:570
+#, c-format
+msgid "%s: option `%s' is ambiguous\n"
+msgstr "%s: flaggan \"%s\" är flertydig\n"
+
+#: lib/getopt.c:603 lib/getopt.c:607
+#, c-format
+msgid "%s: option `--%s' doesn't allow an argument\n"
+msgstr "%s: flaggan \"--%s\" tillåter inget argument\n"
+
+#: lib/getopt.c:616 lib/getopt.c:621
+#, c-format
+msgid "%s: option `%c%s' doesn't allow an argument\n"
+msgstr "%s: flaggan \"%c%s\" tillåter inget argument\n"
+
+#: lib/getopt.c:667 lib/getopt.c:689 lib/getopt.c:1020 lib/getopt.c:1042
+#, c-format
+msgid "%s: option `%s' requires an argument\n"
+msgstr "%s: flaggan \"%s\" kräver ett argument\n"
+
+#: lib/getopt.c:727 lib/getopt.c:730
+#, c-format
+msgid "%s: unrecognized option `--%s'\n"
+msgstr "%s: okänd flagga \"--%s\"\n"
+
+#: lib/getopt.c:738 lib/getopt.c:741
+#, c-format
+msgid "%s: unrecognized option `%c%s'\n"
+msgstr "%s: okänd flagga \"%c%s\"\n"
+
+#: lib/getopt.c:796 lib/getopt.c:799
+#, c-format
+msgid "%s: illegal option -- %c\n"
+msgstr "%s: otillåten flagga -- %c\n"
+
+#: lib/getopt.c:805 lib/getopt.c:808
+#, c-format
+msgid "%s: invalid option -- %c\n"
+msgstr "%s: ogiltig flagga -- %c\n"
+
+#: lib/getopt.c:863 lib/getopt.c:882 lib/getopt.c:1095 lib/getopt.c:1116
+#, c-format
+msgid "%s: option requires an argument -- %c\n"
+msgstr "%s: flaggan kräver ett argument -- %c\n"
+
+#: lib/getopt.c:935 lib/getopt.c:954
+#, c-format
+msgid "%s: option `-W %s' is ambiguous\n"
+msgstr "%s: flaggan \"-W %s\" är flertydig\n"
+
+#: lib/getopt.c:978 lib/getopt.c:999
+#, c-format
+msgid "%s: option `-W %s' doesn't allow an argument\n"
+msgstr "%s: flaggan \"-W %s\" tillåter inget argument\n"
+
+#: makeinfo/cmds.c:520 makeinfo/cmds.c:542
+#, 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:585
+msgid "January"
+msgstr "januari"
+
+#: makeinfo/cmds.c:585
+msgid "February"
+msgstr "februari"
+
+#: makeinfo/cmds.c:585
+msgid "March"
+msgstr "mars"
+
+#: makeinfo/cmds.c:585
+msgid "April"
+msgstr "april"
+
+#: makeinfo/cmds.c:585
+msgid "May"
+msgstr "maj"
+
+#: makeinfo/cmds.c:586
+msgid "June"
+msgstr "juni"
+
+#: makeinfo/cmds.c:586
+msgid "July"
+msgstr "juli"
+
+#: makeinfo/cmds.c:586
+msgid "August"
+msgstr "augusti"
+
+#: makeinfo/cmds.c:586
+msgid "September"
+msgstr "september"
+
+#: makeinfo/cmds.c:586
+msgid "October"
+msgstr "oktober"
+
+#: makeinfo/cmds.c:587
+msgid "November"
+msgstr "november"
+
+#: makeinfo/cmds.c:587
+msgid "December"
+msgstr "december"
+
+#: makeinfo/cmds.c:936
+#, c-format
+msgid "unlikely character %c in @var"
+msgstr "osannolikt tecken %c i @var"
+
+#: makeinfo/cmds.c:979
+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:1034
+#, c-format
+msgid "`{' expected, but saw `%c'"
+msgstr "\"{\" förväntades, men såg \"%c\""
+
+#: makeinfo/cmds.c:1074
+msgid "end of file inside verb block"
+msgstr "filslut inuti verb-block"
+
+#: makeinfo/cmds.c:1082
+#, 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:1112
+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:1305
+#, c-format
+msgid "%c%s is obsolete"
+msgstr "%c%s är föråldrat"
+
+#: makeinfo/cmds.c:1414
+#, c-format
+msgid "@sp requires a positive numeric argument, not `%s'"
+msgstr "@sp kräver ett positivt numeriskt argument, inte \"%s\""
+
+#: makeinfo/cmds.c:1763 makeinfo/cmds.c:1819 makeinfo/footnote.c:82
+#, c-format
+msgid "Bad argument to %c%s"
+msgstr "Felaktigt argument till %c%s"
+
+#: makeinfo/cmds.c:1773 makeinfo/makeinfo.c:4142
+msgid "asis"
+msgstr "oförändrad"
+
+#: makeinfo/cmds.c:1775 makeinfo/cmds.c:1805 makeinfo/makeinfo.c:4144
+msgid "none"
+msgstr "ingen"
+
+#: makeinfo/cmds.c:1789
+#, c-format
+msgid "Bad argument to @%s"
+msgstr "Felaktigt argument till @%s"
+
+#: makeinfo/cmds.c:1803
+msgid "insert"
+msgstr "infoga"
+
+#: makeinfo/defun.c:84
+msgid "Missing `}' in @def arg"
+msgstr "\"}\" saknas i @def-argumentet"
+
+#: makeinfo/defun.c:403
+msgid "Function"
+msgstr "Funktion"
+
+#: makeinfo/defun.c:406
+msgid "Macro"
+msgstr "Makro"
+
+#: makeinfo/defun.c:409
+msgid "Special Form"
+msgstr "Specialform"
+
+#: makeinfo/defun.c:413
+msgid "Variable"
+msgstr "Variabel"
+
+#: makeinfo/defun.c:416
+msgid "User Option"
+msgstr "Användarflagga"
+
+#: makeinfo/defun.c:420
+msgid "Instance Variable"
+msgstr "Instansvariabel"
+
+#: makeinfo/defun.c:424
+msgid "Method"
+msgstr "Metod"
+
+#: makeinfo/defun.c:500 makeinfo/defun.c:505 makeinfo/defun.c:545
+#: makeinfo/defun.c:644 makeinfo/xml.c:2229
+msgid "of"
+msgstr "av"
+
+#: makeinfo/defun.c:509 makeinfo/defun.c:513 makeinfo/defun.c:517
+#: makeinfo/defun.c:551 makeinfo/defun.c:650 makeinfo/xml.c:2234
+msgid "on"
+msgstr "på"
+
+#: 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:435
+#, c-format
+msgid "%s: getwd: %s, %s\n"
+msgstr "%s: getwd: %s, %s\n"
+
+#: makeinfo/files.c:638
+#, c-format
+msgid "`%s' omitted before output filename"
+msgstr "\"%s\" utelämnades innan utdatafilnamnet"
+
+#: makeinfo/files.c:646
+#, c-format
+msgid "`%s' omitted since writing to stdout"
+msgstr "\"%s\" utelämnades efter skrivning till standard ut"
+
+#: makeinfo/files.c:694
+msgid "Output buffer not empty."
+msgstr "Utdatabufferten är inte tom."
+
+#: makeinfo/footnote.c:150
+#, c-format
+msgid "`%c%s' needs an argument `{...}', not just `%s'"
+msgstr "\"%c%s\" behöver ett argument \"{...}\", inte bara \"%s\""
+
+#: makeinfo/footnote.c:165
+#, c-format
+msgid "No closing brace for footnote `%s'"
+msgstr "Ingen avslutande klammer för fotnoten \"%s\""
+
+#: makeinfo/footnote.c:198
+msgid "Footnote defined without parent node"
+msgstr "Fotnoten definierad utan föräldernod"
+
+#: makeinfo/footnote.c:210
+msgid "Footnotes inside footnotes are not allowed"
+msgstr "Fotnoter inuti fotnoter är inte tillåtet"
+
+#: makeinfo/footnote.c:302 makeinfo/index.c:189
+msgid "Footnotes"
+msgstr "Fotnoter"
+
+#: makeinfo/html.c:87
+#, c-format
+msgid "%s: could not open --css-file: %s"
+msgstr "%s: kunde inte öppna --css-fil: %s"
+
+#: makeinfo/html.c:172
+#, c-format
+msgid "%s:%d: --css-file ended in comment"
+msgstr "%s:%d: --css-fil slutade med kommentar"
+
+#: makeinfo/html.c:207
+msgid "Untitled"
+msgstr "Namnlös"
+
+# to pop?
+#: makeinfo/html.c:422
+msgid "[unexpected] no html tag to pop"
+msgstr "[oväntat] ingen html-tagg att poppa"
+
+#: makeinfo/html.c:752
+#, c-format
+msgid "[unexpected] invalid node name: `%s'"
+msgstr "[oväntat] ogiltigt nodnamn: \"%s\""
+
+#: makeinfo/index.c:169
+#, c-format
+msgid "Unknown index `%s'"
+msgstr "Okänt index \"%s\""
+
+#: makeinfo/index.c:234
+#, c-format
+msgid "Info cannot handle `:' in index entry `%s'"
+msgstr "Info kan inte hantera \":\" i indexposten \"%s\""
+
+#: makeinfo/index.c:412
+#, c-format
+msgid "Index `%s' already exists"
+msgstr "Indexet \"%s\" finns redan"
+
+#: makeinfo/index.c:455
+#, c-format
+msgid "Unknown index `%s' and/or `%s' in @synindex"
+msgstr "Okänt index \"%s\" och/eller \"%s\" i @synindex"
+
+#: makeinfo/index.c:661
+msgid "(line )"
+msgstr "(rad )"
+
+#: makeinfo/index.c:669
+#, c-format
+msgid "(line %*d)"
+msgstr "(rad %*d)"
+
+#: makeinfo/index.c:750
+#, c-format
+msgid "Unknown index `%s' in @printindex"
+msgstr "Okänt index \"%s\" i @printindex"
+
+#: makeinfo/index.c:819
+#, 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:822 makeinfo/index.c:858
+msgid "(outside of any node)"
+msgstr "(utanför alla noder)"
+
+#: makeinfo/index.c:919 makeinfo/index.c:925
+msgid "See "
+msgstr "Se "
+
+#: makeinfo/insertion.c:160
+msgid "@item not allowed in argument to @itemize"
+msgstr "@item är inte tillåtet i argument till @itemize"
+
+#: makeinfo/insertion.c:238
+msgid "Broken-Type in insertion_type_pname"
+msgstr "Felaktig typ i insertion_type_pname"
+
+#: makeinfo/insertion.c:334
+msgid "Enumeration stack overflow"
+msgstr "Uppräkningsstacken har flödat över"
+
+#: makeinfo/insertion.c:366
+#, c-format
+msgid "lettering overflow, restarting at %c"
+msgstr "bokstaveringen har flödat över, startar om vid %c"
+
+#: makeinfo/insertion.c:631
+#, c-format
+msgid "%s requires an argument: the formatter for %citem"
+msgstr "%s kräver ett argument: formateraren för %citem"
+
+#: makeinfo/insertion.c:719
+#, c-format
+msgid "%cfloat environments cannot be nested"
+msgstr "%cfloat-omgivningar kan inte nästlas"
+
+#: makeinfo/insertion.c:973
+#, c-format
+msgid "`@end' expected `%s', but saw `%s'"
+msgstr "\"@end\" förväntade \"%s\", men såg \"%s\""
+
+#: makeinfo/insertion.c:1337
+#, c-format
+msgid "No matching `%cend %s'"
+msgstr "Inget matchande \"%cend %s\""
+
+#: makeinfo/insertion.c:1592
+#, c-format
+msgid "%s requires letter or digit"
+msgstr "%s kräver bokstav eller siffra"
+
+#: makeinfo/insertion.c:1687
+msgid "end of file inside verbatim block"
+msgstr "filslut inuti bokstavligt block"
+
+#: makeinfo/insertion.c:1913
+#, c-format
+msgid "@%s not meaningful outside `@float' environment"
+msgstr "@%s är inte meningsfullt utanför \"@float\"-omgivning"
+
+#: makeinfo/insertion.c:1949
+msgid "@menu seen before first @node, creating `Top' node"
+msgstr "@menu sågs innan första @node, skapar \"Top\"-nod"
+
+#: makeinfo/insertion.c:1950
+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:1962
+msgid "@detailmenu seen before first node, creating `Top' node"
+msgstr "@detailmenu sågs innan första noden, skapar \"Top\"-nod"
+
+#: makeinfo/insertion.c:2018
+#, 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:2032
+#, c-format
+msgid "@%s not meaningful outside `@titlepage' environment"
+msgstr "@%s är inte meningsfullt utanför \"@titlepage\"-omgivning"
+
+#: makeinfo/insertion.c:2063
+#, c-format
+msgid "Unmatched `%c%s'"
+msgstr "Ensamt \"%c%s\""
+
+#: makeinfo/insertion.c:2068
+#, c-format
+msgid "`%c%s' needs something after it"
+msgstr "\"%c%s\" kräver någonting efter sig"
+
+#: makeinfo/insertion.c:2074
+#, c-format
+msgid "Bad argument `%s' to `@%s', using `%s'"
+msgstr "Felaktigt argument \"%s\" till \"@%s\", använder \"%s\""
+
+#: makeinfo/insertion.c:2171
+#, c-format
+msgid "@%s not meaningful inside `@%s' block"
+msgstr "@%s är inte meningsfullt inuti \"@%s\"-block"
+
+#: makeinfo/insertion.c:2180
+#, c-format
+msgid "@itemx not meaningful inside `%s' block"
+msgstr "@itemx är inte meningsfullt inuti \"%s\"-block"
+
+#: makeinfo/insertion.c:2356
+#, c-format
+msgid "%c%s found outside of an insertion block"
+msgstr "%c%s hittades utanför ett insättningsblock"
+
+#: makeinfo/lang.c:580
+#, 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:655
+#, c-format
+msgid "unrecognized encoding name `%s'"
+msgstr "okänt kodningsnamn \"%s\""
+
+#: makeinfo/lang.c:663
+#, c-format
+msgid "sorry, encoding `%s' not supported"
+msgstr "tyvärr, kodningen \"%s\" stöds inte"
+
+#: makeinfo/lang.c:715
+#, c-format
+msgid "invalid encoded character `%s'"
+msgstr "ogiltigt kodat tecken \"%s\""
+
+#: makeinfo/lang.c:1009
+#, 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:1013
+#, 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:355
+#, 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:586
+#, c-format
+msgid "%cend macro not found"
+msgstr "Makrot %cend hittades inte"
+
+#: makeinfo/macro.c:624
+msgid "@quote-arg only useful for single-argument macros"
+msgstr "@quote-arg är endast användbart för makron med ett argument"
+
+#: makeinfo/macro.c:660
+#, c-format
+msgid "mismatched @end %s with @%s"
+msgstr "@end %s och @%s passar inte"
+
+#: makeinfo/makeinfo.c:184
+#, c-format
+msgid "Too many errors! Gave up.\n"
+msgstr "För många fel! Gav upp.\n"
+
+#: makeinfo/makeinfo.c:302
+#, c-format
+msgid "%s:%d: warning: "
+msgstr "%s:%d: varning: "
+
+#: makeinfo/makeinfo.c:321 makeinfo/makeinfo.c:2260
+#, c-format
+msgid "Misplaced %c"
+msgstr "Felplacerat %c"
+
+#: makeinfo/makeinfo.c:340
+#, c-format
+msgid "Try `%s --help' for more information.\n"
+msgstr "Prova \"%s --help\" för mer information.\n"
+
+#: makeinfo/makeinfo.c:343
+#, c-format
+msgid "Usage: %s [OPTION]... TEXINFO-FILE...\n"
+msgstr "Användning: %s [FLAGGA]... TEXINFO-FIL...\n"
+
+#: makeinfo/makeinfo.c:346
+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:350
+#, c-format
+msgid ""
+"General options:\n"
+" --error-limit=NUM quit after NUM errors (default %d).\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"
+" --reference-limit=NUM warn about at most NUM references (default %"
+"d).\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"
+" --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"
+" --reference-limit=ANTAL varna vid som mest ANTAL referenser\n"
+" (standardvärde %d).\n"
+" -v, --verbose förklara vad som görs.\n"
+" --version visa versionsinformation och avsluta.\n"
+
+#: makeinfo/makeinfo.c:364
+#, 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:372
+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 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 (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 därigenom\n"
+" vanlig text) eller från HTML (och producera\n"
+" därigenom kortare utdata). Skriv även till\n"
+" 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:386
+#, c-format
+msgid ""
+"Options for Info and plain text:\n"
+" --enable-encoding output accented and special characters in\n"
+" Info output based on @documentencoding.\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\n"
+" in which they are defined (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"
+" --enable-encoding generera tecken med accent och specialtecken\n"
+" i Info-utdata baserat på @documentencoding.\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:403
+msgid ""
+"Options for HTML:\n"
+" --css-include=FILE include FILE in HTML <style> output;\n"
+" read stdin if FILE is -.\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"
+
+#: makeinfo/makeinfo.c:409
+#, 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:416
+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:425
+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:444
+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:452
+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:603
+#, 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:647 makeinfo/makeinfo.c:673 makeinfo/makeinfo.c:692
+#: makeinfo/makeinfo.c:722 makeinfo/makeinfo.c:743
+#, 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:660
+#, c-format
+msgid "%s: could not open macro expansion output `%s'"
+msgstr "%s: kunde inte öppna makroexpansionsutdata \"%s\""
+
+#: makeinfo/makeinfo.c:665
+#, c-format
+msgid "%s: ignoring second macro expansion output `%s'.\n"
+msgstr "%s: ignorerar andra makroexpansionsutdata \"%s\".\n"
+
+#: makeinfo/makeinfo.c:707
+#, 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:732
+#, 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:806
+#, c-format
+msgid "%s: missing file argument.\n"
+msgstr "%s: filargument saknas.\n"
+
+#: makeinfo/makeinfo.c:997 makeinfo/makeinfo.c:3991
+#, c-format
+msgid "Multiline command %c%s used improperly"
+msgstr "Flerradskommandot %c%s används felaktigt"
+
+#: makeinfo/makeinfo.c:1000
+#, c-format
+msgid "Expected `%s'"
+msgstr "\"%s\" förväntades"
+
+#: makeinfo/makeinfo.c:1479
+#, c-format
+msgid "Can't create directory `%s': %s"
+msgstr "Kan inte skapa katalogen \"%s\": %s"
+
+#: makeinfo/makeinfo.c:1525
+#, c-format
+msgid "No `%s' found in `%s'"
+msgstr "Inget \"%s\" hittades i \"%s\""
+
+#: makeinfo/makeinfo.c:1605
+#, 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:1638
+#, c-format
+msgid "Making %s file `%s' from `%s'.\n"
+msgstr "Skapar %s-fil \"%s\" från \"%s\".\n"
+
+#: makeinfo/makeinfo.c:1673
+#, c-format
+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"
+
+#: makeinfo/makeinfo.c:1709
+#, 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:1773
+#, 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:2034
+#, c-format
+msgid "Unknown command `%s'"
+msgstr "Okänt kommando \"%s\""
+
+#: makeinfo/makeinfo.c:2056
+#, 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:2314
+#, c-format
+msgid "%c%s expected braces"
+msgstr "%c%s förväntade klamrar"
+
+#: makeinfo/makeinfo.c:2327
+msgid "Unmatched }"
+msgstr "Ensam }"
+
+#: makeinfo/makeinfo.c:2375
+msgid "NO_NAME!"
+msgstr "INGET_NAMN!"
+
+#: makeinfo/makeinfo.c:2396
+#, c-format
+msgid "%c%s missing close brace"
+msgstr "%c%s saknar avslutande klammer"
+
+#: makeinfo/makeinfo.c:3309
+#, 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:3315
+#, c-format
+msgid "No such file `%s'"
+msgstr "Det finns ingen sådan fil \"%s\""
+
+#: makeinfo/makeinfo.c:3447
+#, c-format
+msgid "@image file `%s' (for text) unreadable: %s"
+msgstr "@image-filen \"%s\" (för text) är oläslig: %s"
+
+#: makeinfo/makeinfo.c:3456
+msgid "@image missing filename argument"
+msgstr "@image saknar filnamnsargument"
+
+#: makeinfo/makeinfo.c:3675
+#, c-format
+msgid "undefined flag: %s"
+msgstr "odefinierad flagga: %s"
+
+#: makeinfo/makeinfo.c:3676
+#, c-format
+msgid "{No value for `%s'}"
+msgstr "{Inget värde för \"%s\"}"
+
+#: makeinfo/makeinfo.c:3728
+#, c-format
+msgid "%c%s requires a name"
+msgstr "%c%s kräver ett namn"
+
+#: makeinfo/makeinfo.c:3834
+#, c-format
+msgid "Reached eof before matching @end %s"
+msgstr "Nådde filslut innan matchande @end %s"
+
+#: makeinfo/makeinfo.c:4082
+#, 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:254
+#, c-format
+msgid "ignoring stray text `%s' after @multitable"
+msgstr "ignorerar lös text \"%s\" efter @multitable"
+
+#: makeinfo/multi.c:393
+#, c-format
+msgid "Too many columns in multitable item (max %d)"
+msgstr "För många kolumner i multitabellsobjekt (max %d)"
+
+#: makeinfo/multi.c:555
+#, c-format
+msgid "[unexpected] cannot select column #%d in multitable"
+msgstr "[oväntat] kan inte välja kolumn %d i multitabell"
+
+#: makeinfo/multi.c:584
+msgid "ignoring @tab outside of multitable"
+msgstr "ignorerar @tab utanför multitabell"
+
+#: makeinfo/multi.c:632
+#, c-format
+msgid "** Multicolumn output from last row:\n"
+msgstr "** Utdata på flera kolumner från senaste raden:\n"
+
+#: makeinfo/multi.c:635
+#, c-format
+msgid "* column #%d: output = %s\n"
+msgstr "* kolumn %d: utdata = %s\n"
+
+#: makeinfo/node.c:280
+#, c-format
+msgid "Node `%s' previously defined at line %d"
+msgstr "Noden \"%s\" är tidigare definierad på rad %d"
+
+#: makeinfo/node.c:648
+#, c-format
+msgid "Formatting node %s...\n"
+msgstr "Formaterar noden %s...\n"
+
+#: makeinfo/node.c:716
+#, 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:879
+#, c-format
+msgid "No node name specified for `%c%s' command"
+msgstr "Inget nodnamn angivet för kommandot \"%c%s\""
+
+#: makeinfo/node.c:920 makeinfo/node.c:1151
+#, 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:923
+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:925 makeinfo/node.c:1154
+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:955
+#, 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\""
+
+# src/menus.c:332
+#: makeinfo/node.c:991
+msgid "Next:"
+msgstr "Nästa:"
+
+#: makeinfo/node.c:1007
+msgid "Previous:"
+msgstr "Föregående:"
+
+#: makeinfo/node.c:1021
+msgid "Up:"
+msgstr "Upp:"
+
+#: makeinfo/node.c:1148
+#, 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:1153
+msgid "@anchor command ignored; references to it will not work"
+msgstr ""
+"@anchor-kommandot ignoreras; referenser till det kommer inte att fungera"
+
+#: makeinfo/node.c:1347
+#, 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:1363
+msgid "Menu"
+msgstr "Meny"
+
+#: makeinfo/node.c:1365
+msgid "Cross"
+msgstr "Kors"
+
+#: makeinfo/node.c:1447
+#, 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:1450
+#, c-format
+msgid "This node (%s) has the bad Prev"
+msgstr "Denna nod (%s) har den felaktiga föregående-noden"
+
+#: makeinfo/node.c:1462
+msgid "Prev"
+msgstr "Föreg"
+
+#: makeinfo/node.c:1505
+#, 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:1509
+#, c-format
+msgid "This node (%s) has the bad Next"
+msgstr "Denna nod (%s) har den felaktiga nästa-noden"
+
+#: makeinfo/node.c:1521
+#, c-format
+msgid "`%s' has no Up field (perhaps incorrect sectioning?)"
+msgstr "\"%s\" har inget upp-fält (kanske felaktig avsnittsindelning?)"
+
+#: makeinfo/node.c:1524
+msgid "Up"
+msgstr "Upp"
+
+#: makeinfo/node.c:1590
+#, 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:1619
+#, c-format
+msgid "node `%s' has been referenced %d times"
+msgstr "noden \"%s\" har refererats %d gånger"
+
+#: makeinfo/node.c:1633
+#, c-format
+msgid "unreferenced node `%s'"
+msgstr "orefererad nod \"%s\""
+
+#: makeinfo/node.c:1723
+#, c-format
+msgid "Removing %s\n"
+msgstr "Tar bort %s\n"
+
+#: makeinfo/node.c:1727
+#, 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:562
+#, c-format
+msgid "Internal error (search_sectioning) \"%s\"!"
+msgstr "Internt fel (search_sectioning) \"%s\"!"
+
+#: makeinfo/sectioning.c:623
+#, 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:639
+#, c-format
+msgid "Node with %ctop as a section already exists"
+msgstr "En nod med %ctop som en sektion finns redan"
+
+#: makeinfo/sectioning.c:647
+#, c-format
+msgid "Here is the %ctop node"
+msgstr "Här är %ctop-noden"
+
+#: makeinfo/sectioning.c:663
+#, c-format
+msgid "%ctop used before %cnode, defaulting to %s"
+msgstr "%ctop användes innan %cnode, använder %s som standard"
+
+#: makeinfo/toc.c:197 makeinfo/toc.c:271 makeinfo/toc.c:273
+msgid "Table of Contents"
+msgstr "Innehållsförteckning"
+
+#: makeinfo/toc.c:304 makeinfo/toc.c:337 makeinfo/toc.c:339
+msgid "Short Contents"
+msgstr "Kort innehållsförteckning"
+
+#: makeinfo/xml.c:1605
+#, c-format
+msgid "@image file `%s' unreadable: %s"
+msgstr "@image-filen \"%s\" är oläslig: %s"
+
+#: makeinfo/xml.c:2097
+msgid ""
+"@headitem as the last item of @multitable produces invalid Docbook documents"
+msgstr ""
+"@headitem som det sista objektet i @multitable genererar ogiltiga Docbook-"
+"dokument"
+
+#: util/install-info.c:154
+#, c-format
+msgid "%s: warning: "
+msgstr "%s: varning: "
+
+# char *s = concat ("", strerror (errno), _(" for %s"));
+#
+#: util/install-info.c:203
+#, c-format
+msgid " for %s"
+msgstr " för %s"
+
+#: util/install-info.c:426
+#, 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"
+
+#: util/install-info.c:434
+#, c-format
+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 ""
+"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"
+" --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"
+" --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 sektion. Om du inte\n"
+" anger några avsnitt kommer de att bestämmas från\n"
+" information i själva Info-filen.\n"
+" --version visa versionsinformation och avsluta.\n"
+
+#: util/install-info.c:488
+#, 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"
+
+#: util/install-info.c:513
+#, 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"
+
+#: util/install-info.c:600
+#, c-format
+msgid "%s: empty file"
+msgstr "%s: tom fil"
+
+#: util/install-info.c:913 util/install-info.c:953
+msgid "START-INFO-DIR-ENTRY without matching END-INFO-DIR-ENTRY"
+msgstr "START-INFO-DIR-ENTRY utan matchande END-INFO-DIR-ENTRY"
+
+#: util/install-info.c:948
+msgid "END-INFO-DIR-ENTRY without matching START-INFO-DIR-ENTRY"
+msgstr "END-INFO-DIR-ENTRY utan matchande START-INFO-DIR-ENTRY"
+
+#: util/install-info.c:1191 util/install-info.c:1201
+#, c-format
+msgid "%s: already have dir file: %s\n"
+msgstr "%s: har redan katalogfilen: %s\n"
+
+#: util/install-info.c:1236
+#, c-format
+msgid "%s: Specify the Info file only once.\n"
+msgstr "%s: Ange Info-filen endast en gång.\n"
+
+#: util/install-info.c:1284
+#, c-format
+msgid "excess command line argument `%s'"
+msgstr "för många kommandoradsargument \"%s\""
+
+#: util/install-info.c:1288
+msgid "No input file specified; try --help for more information."
+msgstr "Ingen indatafil angiven; prova --help för mer information."
+
+#: util/install-info.c:1291
+msgid "No dir file specified; try --help for more information."
+msgstr "Ingen katalogfil angiven; prova --help för mer information."
+
+#: util/install-info.c:1313
+#, c-format
+msgid "no info dir entry in `%s'"
+msgstr "ingen info-katalogpost i \"%s\""
+
+#: util/install-info.c:1426
+#, c-format
+msgid "menu item `%s' already exists, for file `%s'"
+msgstr "menyposten \"%s\" finns redan, för filen \"%s\""
+
+#: util/install-info.c:1449
+#, c-format
+msgid "no entries found for `%s'; nothing deleted"
+msgstr "inga poster hittades för \"%s\"; ingenting togs bort"
+
+#: util/texindex.c:252
+msgid "display this help and exit"
+msgstr "visa denna hjälptext och avsluta"
+
+#: util/texindex.c:254
+msgid "keep temporary files around after processing"
+msgstr "behåll temporära filer efter behandling"
+
+#: util/texindex.c:256
+msgid "do not keep temporary files around after processing (default)"
+msgstr "behåll inte temporära filer efter behandling (standardalternativ)"
+
+#: util/texindex.c:258
+msgid "send output to FILE"
+msgstr "skicka utdata till FIL"
+
+#: util/texindex.c:260
+msgid "display version information and exit"
+msgstr "visa versionsinformation och avsluta"
+
+#: util/texindex.c:270
+#, c-format
+msgid "Usage: %s [OPTION]... FILE...\n"
+msgstr "Användning: %s [FLAGGA]... FIL...\n"
+
+#: util/texindex.c:271
+#, 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:274
+#, 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:276
+#, c-format
+msgid ""
+"\n"
+"Options:\n"
+msgstr ""
+"\n"
+"Flaggor:\n"
+
+#: util/texindex.c:876 util/texindex.c:910 util/texindex.c:983
+#: util/texindex.c:1011
+#, c-format
+msgid "%s: not a texinfo index file"
+msgstr "%s: inte en texinfo-indexfil"
+
+#: util/texindex.c:968
+#, c-format
+msgid "failure reopening %s"
+msgstr "misslyckande vid återöppnande av %s"
+
+#: util/texindex.c:1218
+#, c-format
+msgid "No page number in %s"
+msgstr "Inget sidnummer i %s"
+
+#: util/texindex.c:1291
+#, 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 "%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 "First argument to cross-reference may not be empty"
+#~ msgstr "Första argumentet till korsreferens kan inte vara tomt"
+
+#~ msgid "see "
+#~ msgstr "se "
+
+#~ msgid "`.' or `,' must follow cross reference, not %c"
+#~ msgstr "\".\" eller \",\" måste följa på korsreferens, inte %c"
+
+#~ msgid "First argument to @inforef may not be empty"
+#~ msgstr "Första argumentet till @inforef kan inte vara tomt"
+
+#~ 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 "virtual memory exhausted"
+#~ msgstr "virtuellt minne slut"
+
+#~ 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/macros/texinfo/contrib/texinfo-hu/texinfo/po/texinfo.pot b/macros/texinfo/contrib/texinfo-hu/texinfo/po/texinfo.pot
new file mode 100644
index 0000000000..9075642154
--- /dev/null
+++ b/macros/texinfo/contrib/texinfo-hu/texinfo/po/texinfo.pot
@@ -0,0 +1,2787 @@
+# 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: PACKAGE VERSION\n"
+"Report-Msgid-Bugs-To: bug-texinfo@gnu.org\n"
+"POT-Creation-Date: 2004-12-21 16:20-0800\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"
+
+#: info/echo-area.c:284 info/session.c:689
+msgid "Move forward a character"
+msgstr ""
+
+#: info/echo-area.c:296 info/session.c:705
+msgid "Move backward a character"
+msgstr ""
+
+#: info/echo-area.c:308
+msgid "Move to the start of this line"
+msgstr ""
+
+#: info/echo-area.c:313
+msgid "Move to the end of this line"
+msgstr ""
+
+#: info/echo-area.c:321 info/session.c:723
+msgid "Move forward a word"
+msgstr ""
+
+#: info/echo-area.c:361 info/session.c:772
+msgid "Move backward a word"
+msgstr ""
+
+#: info/echo-area.c:401
+msgid "Delete the character under the cursor"
+msgstr ""
+
+#: info/echo-area.c:431
+msgid "Delete the character behind the cursor"
+msgstr ""
+
+#: info/echo-area.c:452
+msgid "Cancel or quit operation"
+msgstr ""
+
+#: info/echo-area.c:467
+msgid "Accept (or force completion of) this line"
+msgstr ""
+
+#: info/echo-area.c:472
+msgid "Insert next character verbatim"
+msgstr ""
+
+#: info/echo-area.c:480
+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:653
+msgid "Kill the word preceding the cursor"
+msgstr ""
+
+#: info/echo-area.c:868 info/echo-area.c:924
+msgid "No completions"
+msgstr ""
+
+#: info/echo-area.c:870
+msgid "Not complete"
+msgstr ""
+
+#: info/echo-area.c:911
+msgid "List possible completions"
+msgstr ""
+
+#: info/echo-area.c:928
+msgid "Sole completion"
+msgstr ""
+
+#: info/echo-area.c:937
+msgid "One completion:\n"
+msgstr ""
+
+#: info/echo-area.c:938
+#, c-format
+msgid "%d completions:\n"
+msgstr ""
+
+#: info/echo-area.c:1085
+msgid "Insert completion"
+msgstr ""
+
+#: info/echo-area.c:1220
+msgid "Building completions..."
+msgstr ""
+
+#: info/echo-area.c:1340
+msgid "Scroll the completions window"
+msgstr ""
+
+#: info/footnotes.c:213
+msgid "Footnotes could not be displayed"
+msgstr ""
+
+#: info/footnotes.c:239
+msgid "Show the footnotes associated with this node in another window"
+msgstr ""
+
+#: info/footnotes.h:26
+msgid "---------- Footnotes ----------"
+msgstr ""
+
+#: info/indices.c:172
+msgid "Look up a string in the index for this file"
+msgstr ""
+
+#: info/indices.c:199
+msgid "Finding index entries..."
+msgstr ""
+
+#: info/indices.c:207
+msgid "No indices found."
+msgstr ""
+
+#: info/indices.c:217
+msgid "Index entry: "
+msgstr ""
+
+#: info/indices.c:325
+msgid ""
+"Go to the next matching index item from the last `\\[index-search]' command"
+msgstr ""
+
+#: info/indices.c:335
+msgid "No previous index search string."
+msgstr ""
+
+#: info/indices.c:342
+msgid "No index entries."
+msgstr ""
+
+#: info/indices.c:375
+#, c-format
+msgid "No %sindex entries containing `%s'."
+msgstr ""
+
+#: info/indices.c:376
+msgid "more "
+msgstr ""
+
+#: info/indices.c:386
+msgid "CAN'T SEE THIS"
+msgstr ""
+
+#: info/indices.c:422
+#, c-format
+msgid "Found `%s' in %s. (`\\[next-index-match]' tries to find next.)"
+msgstr ""
+
+#: info/indices.c:541
+#, c-format
+msgid "Scanning indices of `%s'..."
+msgstr ""
+
+#: info/indices.c:596
+#, c-format
+msgid "No available info files have `%s' in their indices."
+msgstr ""
+
+#: info/indices.c:622
+msgid "Grovel all known info file's indices for a string and build a menu"
+msgstr ""
+
+#: info/indices.c:626
+msgid "Index apropos: "
+msgstr ""
+
+#: info/indices.c:654
+#, 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:295 makeinfo/makeinfo.c:766 util/install-info.c:1266
+#: util/texindex.c:343
+#, c-format
+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 ""
+
+#: info/info.c:498
+#, c-format
+msgid "no index entries found for `%s'\n"
+msgstr ""
+
+#: info/info.c:590
+msgid " -b, --speech-friendly be friendly to speech synthesizers.\n"
+msgstr ""
+
+#: info/info.c:597
+#, c-format
+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 -f ./foo.info show file ./foo.info, not searching dir\n"
+msgstr ""
+
+#: info/info.c:635 info/infokey.c:918 makeinfo/makeinfo.c:465
+#: util/install-info.c:466 util/texindex.c:292
+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:669
+#, c-format
+msgid "Cannot find node `%s'."
+msgstr ""
+
+#: info/info.c:670
+#, c-format
+msgid "Cannot find node `(%s)%s'."
+msgstr ""
+
+#: info/info.c:671
+msgid "Cannot find a window!"
+msgstr ""
+
+#: info/info.c:672
+msgid "Point doesn't appear within this window's node!"
+msgstr ""
+
+#: info/info.c:673
+msgid "Cannot delete the last window."
+msgstr ""
+
+#: info/info.c:674
+msgid "No menu in this node."
+msgstr ""
+
+#: info/info.c:675
+msgid "No footnotes in this node."
+msgstr ""
+
+#: info/info.c:676
+msgid "No cross references in this node."
+msgstr ""
+
+#: info/info.c:677
+#, c-format
+msgid "No `%s' pointer for this node."
+msgstr ""
+
+#: info/info.c:678
+#, c-format
+msgid "Unknown Info command `%c'; try `?' for help."
+msgstr ""
+
+#: info/info.c:679
+#, c-format
+msgid "Terminal type `%s' is not smart enough to run Info."
+msgstr ""
+
+#: info/info.c:680
+msgid "You are already at the last page of this node."
+msgstr ""
+
+#: info/info.c:681
+msgid "You are already at the first page of this node."
+msgstr ""
+
+#: info/info.c:682
+msgid "Only one window."
+msgstr ""
+
+#: info/info.c:683
+msgid "Resulting window would be too small."
+msgstr ""
+
+#: info/info.c:684
+msgid "Not enough room for a help window, please delete a window."
+msgstr ""
+
+#: info/infodoc.c:46 info/infodoc.c:95
+msgid ""
+"Basic Commands in Info Windows\n"
+"******************************\n"
+msgstr ""
+
+#: info/infodoc.c:49
+msgid "\\%-10[quit-help] Quit this help.\n"
+msgstr ""
+
+#: info/infodoc.c:50
+msgid "\\%-10[quit] Quit Info altogether.\n"
+msgstr ""
+
+#: info/infodoc.c:51
+msgid "\\%-10[get-info-help-node] Invoke the Info tutorial.\n"
+msgstr ""
+
+#: info/infodoc.c:53 info/infodoc.c:102
+msgid ""
+"Selecting other nodes:\n"
+"----------------------\n"
+msgstr ""
+
+#: info/infodoc.c:55
+msgid "\\%-10[next-node] Move to the \"next\" node of this node.\n"
+msgstr ""
+
+#: info/infodoc.c:56
+msgid "\\%-10[prev-node] Move to the \"previous\" node of this node.\n"
+msgstr ""
+
+#: info/infodoc.c:57
+msgid "\\%-10[up-node] Move \"up\" from this node.\n"
+msgstr ""
+
+#: info/infodoc.c:58
+msgid ""
+"\\%-10[menu-item] Pick menu item specified by name.\n"
+" Picking a menu item causes another node to be selected.\n"
+msgstr ""
+
+#: info/infodoc.c:60
+msgid ""
+"\\%-10[xref-item] Follow a cross reference. Reads name of reference.\n"
+msgstr ""
+
+#: info/infodoc.c:61
+msgid "\\%-10[history-node] Move to the last node seen in this window.\n"
+msgstr ""
+
+#: info/infodoc.c:62
+msgid ""
+"\\%-10[move-to-next-xref] Skip to next hypertext link within this node.\n"
+msgstr ""
+
+#: info/infodoc.c:63
+msgid ""
+"\\%-10[move-to-prev-xref] Skip to previous hypertext link within this "
+"node.\n"
+msgstr ""
+
+#: info/infodoc.c:64
+msgid ""
+"\\%-10[select-reference-this-line] Follow the hypertext link under cursor.\n"
+msgstr ""
+
+#: info/infodoc.c:65
+msgid ""
+"\\%-10[dir-node] Move to the `directory' node. Equivalent to `\\[goto-"
+"node] (DIR)'.\n"
+msgstr ""
+
+#: info/infodoc.c:66
+msgid ""
+"\\%-10[top-node] Move to the Top node. Equivalent to `\\[goto-node] Top'.\n"
+msgstr ""
+
+#: info/infodoc.c:68 info/infodoc.c:116
+msgid ""
+"Moving within a node:\n"
+"---------------------\n"
+msgstr ""
+
+#: info/infodoc.c:70
+msgid "\\%-10[beginning-of-node] Go to the beginning of this node.\n"
+msgstr ""
+
+#: info/infodoc.c:71
+msgid "\\%-10[end-of-node] Go to the end of this node.\n"
+msgstr ""
+
+#: info/infodoc.c:72
+msgid "\\%-10[next-line] Scroll forward 1 line.\n"
+msgstr ""
+
+#: info/infodoc.c:73
+msgid "\\%-10[prev-line] Scroll backward 1 line.\n"
+msgstr ""
+
+#: info/infodoc.c:74
+msgid "\\%-10[scroll-forward] Scroll forward a page.\n"
+msgstr ""
+
+#: info/infodoc.c:75
+msgid "\\%-10[scroll-backward] Scroll backward a page.\n"
+msgstr ""
+
+#: info/infodoc.c:77 info/infodoc.c:125
+msgid ""
+"Other commands:\n"
+"---------------\n"
+msgstr ""
+
+#: info/infodoc.c:79
+msgid "\\%-10[menu-digit] Pick first ... ninth item in node's menu.\n"
+msgstr ""
+
+#: info/infodoc.c:80
+msgid "\\%-10[last-menu-item] Pick last item in node's menu.\n"
+msgstr ""
+
+#: info/infodoc.c:81
+msgid ""
+"\\%-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"
+msgstr ""
+
+#: info/infodoc.c:83
+msgid ""
+"\\%-10[goto-node] Move to node specified by name.\n"
+" You may include a filename as well, as in (FILENAME)NODENAME.\n"
+msgstr ""
+
+#: info/infodoc.c:85
+msgid ""
+"\\%-10[search] Search forward for a specified string\n"
+" and select the node in which the next occurrence is found.\n"
+msgstr ""
+
+#: info/infodoc.c:87
+msgid ""
+"\\%-10[search-backward] Search backward for a specified string\n"
+" and select the node in which the previous occurrence is "
+"found.\n"
+msgstr ""
+
+#: info/infodoc.c:98
+#, c-format
+msgid " %-10s Quit this help.\n"
+msgstr ""
+
+#: info/infodoc.c:99
+#, c-format
+msgid " %-10s Quit Info altogether.\n"
+msgstr ""
+
+#: info/infodoc.c:100
+#, c-format
+msgid " %-10s Invoke the Info tutorial.\n"
+msgstr ""
+
+#: info/infodoc.c:104
+#, c-format
+msgid " %-10s Move to the `next' node of this node.\n"
+msgstr ""
+
+#: info/infodoc.c:105
+#, c-format
+msgid " %-10s Move to the `previous' node of this node.\n"
+msgstr ""
+
+#: info/infodoc.c:106
+#, c-format
+msgid " %-10s Move `up' from this node.\n"
+msgstr ""
+
+#: info/infodoc.c:107
+#, c-format
+msgid " %-10s Pick menu item specified by name.\n"
+msgstr ""
+
+#: info/infodoc.c:108
+msgid " Picking a menu item causes another node to be selected.\n"
+msgstr ""
+
+#: info/infodoc.c:109
+#, c-format
+msgid " %-10s Follow a cross reference. Reads name of reference.\n"
+msgstr ""
+
+#: info/infodoc.c:110
+#, c-format
+msgid " %-10s Move to the last node seen in this window.\n"
+msgstr ""
+
+#: info/infodoc.c:111
+#, c-format
+msgid " %-10s Skip to next hypertext link within this node.\n"
+msgstr ""
+
+#: info/infodoc.c:112
+#, c-format
+msgid " %-10s Follow the hypertext link under cursor.\n"
+msgstr ""
+
+#: info/infodoc.c:113
+#, c-format
+msgid " %-10s Move to the `directory' node. Equivalent to `g (DIR)'.\n"
+msgstr ""
+
+#: info/infodoc.c:114
+#, c-format
+msgid " %-10s Move to the Top node. Equivalent to `g Top'.\n"
+msgstr ""
+
+#: info/infodoc.c:118
+#, c-format
+msgid " %-10s Scroll forward a page.\n"
+msgstr ""
+
+#: info/infodoc.c:119
+#, c-format
+msgid " %-10s Scroll backward a page.\n"
+msgstr ""
+
+#: info/infodoc.c:120
+#, c-format
+msgid " %-10s Go to the beginning of this node.\n"
+msgstr ""
+
+#: info/infodoc.c:121
+#, c-format
+msgid " %-10s Go to the end of this node.\n"
+msgstr ""
+
+#: info/infodoc.c:122
+#, c-format
+msgid " %-10s Scroll forward 1 line.\n"
+msgstr ""
+
+#: info/infodoc.c:123
+#, c-format
+msgid " %-10s Scroll backward 1 line.\n"
+msgstr ""
+
+#: info/infodoc.c:127
+#, c-format
+msgid " %-10s Pick first ... ninth item in node's menu.\n"
+msgstr ""
+
+#: info/infodoc.c:128
+#, c-format
+msgid " %-10s Pick last item in node's menu.\n"
+msgstr ""
+
+#: info/infodoc.c:129
+#, c-format
+msgid ""
+" %-10s Search for a specified string in the index entries of this Info\n"
+msgstr ""
+
+#: info/infodoc.c:130
+msgid ""
+" file, and select the node referenced by the first entry "
+"found.\n"
+msgstr ""
+
+#: info/infodoc.c:131
+#, c-format
+msgid " %-10s Move to node specified by name.\n"
+msgstr ""
+
+#: info/infodoc.c:132
+msgid ""
+" You may include a filename as well, as in (FILENAME)NODENAME.\n"
+msgstr ""
+
+#: info/infodoc.c:133
+#, c-format
+msgid " %-10s Search forward for a specified string,\n"
+msgstr ""
+
+#: info/infodoc.c:134 info/infodoc.c:136
+msgid ""
+" and select the node in which the next occurrence is found.\n"
+msgstr ""
+
+#: info/infodoc.c:135
+#, c-format
+msgid " %-10s Search backward for a specified string\n"
+msgstr ""
+
+#: info/infodoc.c:316
+msgid "The current search path is:\n"
+msgstr ""
+
+#: info/infodoc.c:320
+msgid ""
+"Commands available in Info windows:\n"
+"\n"
+msgstr ""
+
+#: info/infodoc.c:324
+msgid ""
+"Commands available in the echo area:\n"
+"\n"
+msgstr ""
+
+#: info/infodoc.c:347
+#, c-format
+msgid ""
+"The following commands can only be invoked via %s:\n"
+"\n"
+msgstr ""
+
+#: info/infodoc.c:351
+msgid ""
+"The following commands cannot be invoked at all:\n"
+"\n"
+msgstr ""
+
+#: info/infodoc.c:375
+msgid "--- Use `\\[history-node]' or `\\[kill-node]' to exit ---\n"
+msgstr ""
+
+#: info/infodoc.c:485
+msgid "Display help message"
+msgstr ""
+
+#: info/infodoc.c:503
+msgid "Visit Info node `(info)Help'"
+msgstr ""
+
+#: info/infodoc.c:641
+msgid "Print documentation for KEY"
+msgstr ""
+
+#: info/infodoc.c:653
+#, c-format
+msgid "Describe key: %s"
+msgstr ""
+
+#: info/infodoc.c:664
+#, c-format
+msgid "ESC %s is undefined."
+msgstr ""
+
+#: info/infodoc.c:680 info/infodoc.c:709
+#, c-format
+msgid "%s is undefined."
+msgstr ""
+
+#: info/infodoc.c:730
+#, c-format
+msgid "%s is defined to %s."
+msgstr ""
+
+#: info/infodoc.c:1153
+msgid "Show what to type to execute a given command"
+msgstr ""
+
+#: info/infodoc.c:1157
+msgid "Where is command: "
+msgstr ""
+
+#: info/infodoc.c:1179
+#, c-format
+msgid "`%s' is not on any keys"
+msgstr ""
+
+#: info/infodoc.c:1186
+#, c-format
+msgid "%s can only be invoked via %s."
+msgstr ""
+
+#: info/infodoc.c:1190
+#, c-format
+msgid "%s can be invoked via %s."
+msgstr ""
+
+#: info/infodoc.c:1195
+#, c-format
+msgid "There is no function named `%s'"
+msgstr ""
+
+#: info/infokey.c:145
+#, c-format
+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 ""
+
+#: 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:1500
+#, c-format
+msgid "Ignoring invalid infokey file `%s' - too small"
+msgstr ""
+
+#: info/infomap.c:1503
+#, c-format
+msgid "Ignoring invalid infokey file `%s' - too big"
+msgstr ""
+
+#: info/infomap.c:1516
+#, c-format
+msgid "Error reading infokey file `%s' - short read"
+msgstr ""
+
+#: info/infomap.c:1535
+#, c-format
+msgid ""
+"Invalid infokey file `%s' (bad magic numbers) -- run infokey to update it"
+msgstr ""
+
+#: info/infomap.c:1544
+#, c-format
+msgid "Your infokey file `%s' is out of date -- run infokey to update it"
+msgstr ""
+
+#: info/infomap.c:1560
+#, c-format
+msgid ""
+"Invalid infokey file `%s' (bad section length) -- run infokey to update it"
+msgstr ""
+
+#: info/infomap.c:1581
+#, c-format
+msgid ""
+"Invalid infokey file `%s' (bad section code) -- run infokey to update it"
+msgstr ""
+
+#: info/infomap.c:1716
+msgid "Bad data in infokey file -- some key bindings ignored"
+msgstr ""
+
+#: info/infomap.c:1766
+msgid "Bad data in infokey file -- some var settings ignored"
+msgstr ""
+
+#: info/m-x.c:69
+msgid "Read the name of an Info command and describe it"
+msgstr ""
+
+#: info/m-x.c:73
+msgid "Describe command: "
+msgstr ""
+
+#: info/m-x.c:96
+msgid "Read a command name in the echo area and execute it"
+msgstr ""
+
+#: info/m-x.c:140
+msgid "Cannot execute an `echo-area' command here."
+msgstr ""
+
+#: info/m-x.c:154
+#, c-format
+msgid "Undefined command: %s"
+msgstr ""
+
+#: info/m-x.c:160
+msgid "Set the height of the displayed window"
+msgstr ""
+
+#: info/m-x.c:173
+#, c-format
+msgid "Set screen height to (%d): "
+msgstr ""
+
+#: info/makedoc.c:162 info/makedoc.c:170
+#, c-format
+msgid ""
+" Source files groveled to make this file include:\n"
+"\n"
+msgstr ""
+
+#: info/makedoc.c:550
+#, c-format
+msgid "Couldn't manipulate the file %s.\n"
+msgstr ""
+
+#: info/nodemenu.c:31
+msgid ""
+"\n"
+"* Menu:\n"
+" (File)Node Lines Size Containing File\n"
+" ---------- ----- ---- ---------------"
+msgstr ""
+
+#: info/nodemenu.c:202
+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:224
+msgid "Make a window containing a menu of all of the currently visited nodes"
+msgstr ""
+
+#: info/nodemenu.c:304
+msgid "Select a node which has been previously visited in a visible window"
+msgstr ""
+
+#: info/nodemenu.c:317
+msgid "Select visited node: "
+msgstr ""
+
+#: info/nodemenu.c:337 info/session.c:2264
+#, c-format
+msgid "The reference disappeared! (%s)."
+msgstr ""
+
+#: info/session.c:162
+#, c-format
+msgid ""
+"Welcome to Info version %s. Type \\[get-help-window] for help, \\[menu-item] "
+"for menu item."
+msgstr ""
+
+#: info/session.c:620
+msgid "Move down to the next line"
+msgstr ""
+
+#: info/session.c:635
+msgid "Move up to the previous line"
+msgstr ""
+
+#: info/session.c:650
+msgid "Move to the end of the line"
+msgstr ""
+
+#: info/session.c:670
+msgid "Move to the start of the line"
+msgstr ""
+
+#: info/session.c:860 makeinfo/node.c:1424
+msgid "Next"
+msgstr ""
+
+#: info/session.c:863
+msgid "Following Next node..."
+msgstr ""
+
+#: info/session.c:881
+msgid "Selecting first menu item..."
+msgstr ""
+
+#: info/session.c:893
+msgid "Selecting Next node..."
+msgstr ""
+
+#: info/session.c:964
+#, c-format
+msgid "Moving Up %d time(s), then Next."
+msgstr ""
+
+#: info/session.c:988
+msgid "No more nodes within this document."
+msgstr ""
+
+#: info/session.c:1011
+msgid "No `Prev' for this node."
+msgstr ""
+
+#: info/session.c:1014 info/session.c:1073
+msgid "Moving Prev in this window."
+msgstr ""
+
+#: info/session.c:1030
+msgid "No `Prev' or `Up' for this node within this document."
+msgstr ""
+
+#: info/session.c:1034
+msgid "Moving Up in this window."
+msgstr ""
+
+#: info/session.c:1084
+msgid "Moving to `Prev's last menu item."
+msgstr ""
+
+#: info/session.c:1095
+msgid "Move forwards or down through node structure"
+msgstr ""
+
+#: info/session.c:1111
+msgid "Move backwards or up through node structure"
+msgstr ""
+
+#: info/session.c:1205
+msgid "Scroll forward in this window"
+msgstr ""
+
+#: info/session.c:1213
+msgid "Scroll forward in this window and set default window size"
+msgstr ""
+
+#: info/session.c:1221
+msgid "Scroll forward in this window staying within node"
+msgstr ""
+
+#: info/session.c:1229
+msgid ""
+"Scroll forward in this window staying within node and set default window size"
+msgstr ""
+
+#: info/session.c:1237
+msgid "Scroll backward in this window"
+msgstr ""
+
+#: info/session.c:1245
+msgid "Scroll backward in this window and set default window size"
+msgstr ""
+
+#: info/session.c:1254
+msgid "Scroll backward in this window staying within node"
+msgstr ""
+
+#: info/session.c:1262
+msgid ""
+"Scroll backward in this window staying within node and set default window "
+"size"
+msgstr ""
+
+#: info/session.c:1270
+msgid "Move to the start of this node"
+msgstr ""
+
+#: info/session.c:1277
+msgid "Move to the end of this node"
+msgstr ""
+
+#: info/session.c:1284
+msgid "Scroll down by lines"
+msgstr ""
+
+#: info/session.c:1301
+msgid "Scroll up by lines"
+msgstr ""
+
+#: info/session.c:1319
+msgid "Scroll down by half screen size"
+msgstr ""
+
+#: info/session.c:1345
+msgid "Scroll up by half screen size"
+msgstr ""
+
+#: info/session.c:1374
+msgid "Select the next window"
+msgstr ""
+
+#: info/session.c:1413
+msgid "Select the previous window"
+msgstr ""
+
+#: info/session.c:1464
+msgid "Split the current window"
+msgstr ""
+
+#: info/session.c:1545
+msgid "Delete the current window"
+msgstr ""
+
+#: info/session.c:1553
+msgid "Cannot delete a permanent window"
+msgstr ""
+
+#: info/session.c:1585
+msgid "Delete all other windows"
+msgstr ""
+
+#: info/session.c:1631
+msgid "Scroll the other window"
+msgstr ""
+
+#: info/session.c:1652
+msgid "Scroll the other window backward"
+msgstr ""
+
+#: info/session.c:1658
+msgid "Grow (or shrink) this window"
+msgstr ""
+
+#: info/session.c:1669
+msgid "Divide the available screen space among the visible windows"
+msgstr ""
+
+#: info/session.c:1676
+msgid "Toggle the state of line wrapping in the current window"
+msgstr ""
+
+#: info/session.c:1848
+msgid "Select the Next node"
+msgstr ""
+
+#: info/session.c:1856
+msgid "Select the Prev node"
+msgstr ""
+
+#: info/session.c:1864
+msgid "Select the Up node"
+msgstr ""
+
+#: info/session.c:1871
+msgid "Select the last node in this file"
+msgstr ""
+
+#: info/session.c:1898 info/session.c:1931
+msgid "This window has no additional nodes"
+msgstr ""
+
+#: info/session.c:1904
+msgid "Select the first node in this file"
+msgstr ""
+
+#: info/session.c:1938
+msgid "Select the last item in this node's menu"
+msgstr ""
+
+#: info/session.c:1944
+msgid "Select this menu item"
+msgstr ""
+
+#: info/session.c:1977
+#, c-format
+msgid "There aren't %d items in this menu."
+msgstr ""
+
+#: info/session.c:2171 info/session.c:2172
+#, c-format
+msgid "Menu item (%s): "
+msgstr ""
+
+#: info/session.c:2175
+msgid "Menu item: "
+msgstr ""
+
+#: info/session.c:2182 info/session.c:2183
+#, c-format
+msgid "Follow xref (%s): "
+msgstr ""
+
+#: info/session.c:2186
+msgid "Follow xref: "
+msgstr ""
+
+#: info/session.c:2315
+msgid "Read a menu item and select its node"
+msgstr ""
+
+#: info/session.c:2323
+msgid "Read a footnote or cross reference and select its node"
+msgstr ""
+
+#: info/session.c:2329
+msgid "Move to the start of this node's menu"
+msgstr ""
+
+#: info/session.c:2353
+msgid "Visit as many menu items at once as possible"
+msgstr ""
+
+#: info/session.c:2381
+msgid "Read a node name and select it"
+msgstr ""
+
+#: info/session.c:2436 info/session.c:2441
+msgid "Goto node: "
+msgstr ""
+
+#: info/session.c:2505
+#, c-format
+msgid "No menu in node `%s'."
+msgstr ""
+
+#: info/session.c:2551
+#, c-format
+msgid "No menu item `%s' in node `%s'."
+msgstr ""
+
+#: info/session.c:2581
+#, c-format
+msgid "Unable to find node referenced by `%s' in `%s'."
+msgstr ""
+
+#: info/session.c:2631
+msgid "Read a list of menus starting from dir and follow them"
+msgstr ""
+
+#: info/session.c:2633
+msgid "Follow menus: "
+msgstr ""
+
+#: info/session.c:2826
+msgid "Find the node describing program invocation"
+msgstr ""
+
+#: info/session.c:2828
+#, c-format
+msgid "Find Invocation node of [%s]: "
+msgstr ""
+
+#: info/session.c:2866
+msgid "Read a manpage reference and select it"
+msgstr ""
+
+#: info/session.c:2870
+msgid "Get Manpage: "
+msgstr ""
+
+#: info/session.c:2900
+msgid "Select the node `Top' in this file"
+msgstr ""
+
+#: info/session.c:2906
+msgid "Select the node `(dir)'"
+msgstr ""
+
+#: info/session.c:2923 info/session.c:2925
+#, c-format
+msgid "Kill node (%s): "
+msgstr ""
+
+#: info/session.c:2977
+#, c-format
+msgid "Cannot kill node `%s'"
+msgstr ""
+
+#: info/session.c:2987
+msgid "Cannot kill the last node"
+msgstr ""
+
+#: info/session.c:3073
+msgid "Select the most recently selected node"
+msgstr ""
+
+#: info/session.c:3079
+msgid "Kill this node"
+msgstr ""
+
+#: info/session.c:3087
+msgid "Read the name of a file and select it"
+msgstr ""
+
+#: info/session.c:3091
+msgid "Find file: "
+msgstr ""
+
+#: info/session.c:3108
+#, c-format
+msgid "Cannot find `%s'."
+msgstr ""
+
+#: info/session.c:3151 info/session.c:3269
+#, c-format
+msgid "Could not create output file `%s'."
+msgstr ""
+
+#: info/session.c:3165 info/session.c:3287 info/session.c:3347
+msgid "Done."
+msgstr ""
+
+#: info/session.c:3220
+#, c-format
+msgid "Writing node %s..."
+msgstr ""
+
+#: info/session.c:3296
+msgid "Pipe the contents of this node through INFO_PRINT_COMMAND"
+msgstr ""
+
+#: info/session.c:3331
+#, c-format
+msgid "Cannot open pipe to `%s'."
+msgstr ""
+
+#: info/session.c:3337
+#, c-format
+msgid "Printing node %s..."
+msgstr ""
+
+#: info/session.c:3567
+#, c-format
+msgid "Searching subfile %s ..."
+msgstr ""
+
+#: info/session.c:3619
+msgid "Read a string and search for it case-sensitively"
+msgstr ""
+
+#: info/session.c:3626
+msgid "Read a string and search for it"
+msgstr ""
+
+#: info/session.c:3634
+msgid "Read a string and search backward for it"
+msgstr ""
+
+#: info/session.c:3670 info/session.c:3677
+#, c-format
+msgid "%s%sfor string [%s]: "
+msgstr ""
+
+#: info/session.c:3671 info/session.c:3678
+msgid "Search backward"
+msgstr ""
+
+#: info/session.c:3672 info/session.c:3678
+msgid "Search"
+msgstr ""
+
+#: info/session.c:3673 info/session.c:3679
+msgid " case-sensitively "
+msgstr ""
+
+#: info/session.c:3674 info/session.c:3679
+msgid " "
+msgstr ""
+
+#: info/session.c:3718
+msgid "Search failed."
+msgstr ""
+
+#: info/session.c:3736
+msgid "Repeat last search in the same direction"
+msgstr ""
+
+#: info/session.c:3739 info/session.c:3749
+msgid "No previous search string"
+msgstr ""
+
+#: info/session.c:3746
+msgid "Repeat last search in the reverse direction"
+msgstr ""
+
+#: info/session.c:3765 info/session.c:3771
+msgid "Search interactively for a string as you type it"
+msgstr ""
+
+#: info/session.c:3851
+msgid "I-search backward: "
+msgstr ""
+
+#: info/session.c:3853
+msgid "I-search: "
+msgstr ""
+
+#: info/session.c:3878 info/session.c:3880
+msgid "Failing "
+msgstr ""
+
+#: info/session.c:4340
+msgid "Move to the previous cross reference"
+msgstr ""
+
+#: info/session.c:4349
+msgid "Move to the next cross reference"
+msgstr ""
+
+#: info/session.c:4359
+msgid "Select reference or menu item appearing on this line"
+msgstr ""
+
+#: info/session.c:4382
+msgid "Cancel current operation"
+msgstr ""
+
+#: info/session.c:4389
+msgid "Quit"
+msgstr ""
+
+#: info/session.c:4398
+msgid "Move the cursor to a specific line of the window"
+msgstr ""
+
+#: info/session.c:4430
+msgid "Redraw the display"
+msgstr ""
+
+#: info/session.c:4467
+msgid "Quit using Info"
+msgstr ""
+
+#: info/session.c:4480
+msgid "Run command bound to this key's lowercase variant"
+msgstr ""
+
+#: info/session.c:4491
+#, c-format
+msgid "Unknown command (%s)."
+msgstr ""
+
+#: info/session.c:4494
+#, c-format
+msgid "\"%s\" is invalid"
+msgstr ""
+
+#: info/session.c:4495
+#, c-format
+msgid "`%s' is invalid"
+msgstr ""
+
+#: info/session.c:4709
+msgid "Add this digit to the current numeric argument"
+msgstr ""
+
+#: info/session.c:4718
+msgid "Start (or multiply by 4) the current numeric argument"
+msgstr ""
+
+#: info/session.c:4733
+msgid "Internally used by \\[universal-argument]"
+msgstr ""
+
+#: info/tilde.c:338
+#, 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:64
+msgid "The number lines to scroll when the cursor moves out of the window"
+msgstr ""
+
+#: info/variables.c:68
+msgid "When \"On\", Info accepts and displays ISO Latin characters"
+msgstr ""
+
+#: info/variables.c:74
+msgid "Explain the use of a variable"
+msgstr ""
+
+#: info/variables.c:80
+msgid "Describe variable: "
+msgstr ""
+
+#: info/variables.c:99
+msgid "Set the value of an Info variable"
+msgstr ""
+
+#: info/variables.c:105
+msgid "Set variable: "
+msgstr ""
+
+#: info/variables.c:123
+#, c-format
+msgid "Set %s to value (%d): "
+msgstr ""
+
+#: info/variables.c:164
+#, c-format
+msgid "Set %s to value (%s): "
+msgstr ""
+
+#: info/window.c:1138
+msgid "--*** Tags out of Date ***"
+msgstr ""
+
+#: info/window.c:1149
+msgid "-----Info: (), lines ----, "
+msgstr ""
+
+#: info/window.c:1156
+#, c-format
+msgid "-%s---Info: %s, %d lines --%s--"
+msgstr ""
+
+#: info/window.c:1160
+#, c-format
+msgid "-%s%s-Info: (%s)%s, %d lines --%s--"
+msgstr ""
+
+#: info/window.c:1167
+#, c-format
+msgid " Subfile: %s"
+msgstr ""
+
+#: lib/getopt.c:551 lib/getopt.c:570
+#, c-format
+msgid "%s: option `%s' is ambiguous\n"
+msgstr ""
+
+#: lib/getopt.c:603 lib/getopt.c:607
+#, c-format
+msgid "%s: option `--%s' doesn't allow an argument\n"
+msgstr ""
+
+#: lib/getopt.c:616 lib/getopt.c:621
+#, c-format
+msgid "%s: option `%c%s' doesn't allow an argument\n"
+msgstr ""
+
+#: lib/getopt.c:667 lib/getopt.c:689 lib/getopt.c:1020 lib/getopt.c:1042
+#, c-format
+msgid "%s: option `%s' requires an argument\n"
+msgstr ""
+
+#: lib/getopt.c:727 lib/getopt.c:730
+#, c-format
+msgid "%s: unrecognized option `--%s'\n"
+msgstr ""
+
+#: lib/getopt.c:738 lib/getopt.c:741
+#, c-format
+msgid "%s: unrecognized option `%c%s'\n"
+msgstr ""
+
+#: lib/getopt.c:796 lib/getopt.c:799
+#, c-format
+msgid "%s: illegal option -- %c\n"
+msgstr ""
+
+#: lib/getopt.c:805 lib/getopt.c:808
+#, c-format
+msgid "%s: invalid option -- %c\n"
+msgstr ""
+
+#: lib/getopt.c:863 lib/getopt.c:882 lib/getopt.c:1095 lib/getopt.c:1116
+#, c-format
+msgid "%s: option requires an argument -- %c\n"
+msgstr ""
+
+#: lib/getopt.c:935 lib/getopt.c:954
+#, c-format
+msgid "%s: option `-W %s' is ambiguous\n"
+msgstr ""
+
+#: lib/getopt.c:978 lib/getopt.c:999
+#, c-format
+msgid "%s: option `-W %s' doesn't allow an argument\n"
+msgstr ""
+
+#: makeinfo/cmds.c:520 makeinfo/cmds.c:542
+#, c-format
+msgid "arguments to @%s ignored"
+msgstr ""
+
+#: makeinfo/cmds.c:585
+msgid "January"
+msgstr ""
+
+#: makeinfo/cmds.c:585
+msgid "February"
+msgstr ""
+
+#: makeinfo/cmds.c:585
+msgid "March"
+msgstr ""
+
+#: makeinfo/cmds.c:585
+msgid "April"
+msgstr ""
+
+#: makeinfo/cmds.c:585
+msgid "May"
+msgstr ""
+
+#: makeinfo/cmds.c:586
+msgid "June"
+msgstr ""
+
+#: makeinfo/cmds.c:586
+msgid "July"
+msgstr ""
+
+#: makeinfo/cmds.c:586
+msgid "August"
+msgstr ""
+
+#: makeinfo/cmds.c:586
+msgid "September"
+msgstr ""
+
+#: makeinfo/cmds.c:586
+msgid "October"
+msgstr ""
+
+#: makeinfo/cmds.c:587
+msgid "November"
+msgstr ""
+
+#: makeinfo/cmds.c:587
+msgid "December"
+msgstr ""
+
+#: makeinfo/cmds.c:936
+#, c-format
+msgid "unlikely character %c in @var"
+msgstr ""
+
+#: makeinfo/cmds.c:979
+msgid "@sc argument all uppercase, thus no effect"
+msgstr ""
+
+#: makeinfo/cmds.c:1034
+#, c-format
+msgid "`{' expected, but saw `%c'"
+msgstr ""
+
+#: makeinfo/cmds.c:1074
+msgid "end of file inside verb block"
+msgstr ""
+
+#: makeinfo/cmds.c:1082
+#, c-format
+msgid "`}' expected, but saw `%c'"
+msgstr ""
+
+#: makeinfo/cmds.c:1112
+msgid ""
+"@strong{Note...} produces a spurious cross-reference in Info; reword to "
+"avoid that"
+msgstr ""
+
+#: makeinfo/cmds.c:1305
+#, c-format
+msgid "%c%s is obsolete"
+msgstr ""
+
+#: makeinfo/cmds.c:1414
+#, c-format
+msgid "@sp requires a positive numeric argument, not `%s'"
+msgstr ""
+
+#: makeinfo/cmds.c:1763 makeinfo/cmds.c:1819 makeinfo/footnote.c:82
+#, c-format
+msgid "Bad argument to %c%s"
+msgstr ""
+
+#: makeinfo/cmds.c:1773 makeinfo/makeinfo.c:4142
+msgid "asis"
+msgstr ""
+
+#: makeinfo/cmds.c:1775 makeinfo/cmds.c:1805 makeinfo/makeinfo.c:4144
+msgid "none"
+msgstr ""
+
+#: makeinfo/cmds.c:1789
+#, c-format
+msgid "Bad argument to @%s"
+msgstr ""
+
+#: makeinfo/cmds.c:1803
+msgid "insert"
+msgstr ""
+
+#: makeinfo/defun.c:84
+msgid "Missing `}' in @def arg"
+msgstr ""
+
+#: makeinfo/defun.c:403
+msgid "Function"
+msgstr ""
+
+#: makeinfo/defun.c:406
+msgid "Macro"
+msgstr ""
+
+#: makeinfo/defun.c:409
+msgid "Special Form"
+msgstr ""
+
+#: makeinfo/defun.c:413
+msgid "Variable"
+msgstr ""
+
+#: makeinfo/defun.c:416
+msgid "User Option"
+msgstr ""
+
+#: makeinfo/defun.c:420
+msgid "Instance Variable"
+msgstr ""
+
+#: makeinfo/defun.c:424
+msgid "Method"
+msgstr ""
+
+#: makeinfo/defun.c:500 makeinfo/defun.c:505 makeinfo/defun.c:545
+#: makeinfo/defun.c:644 makeinfo/xml.c:2229
+msgid "of"
+msgstr ""
+
+#: makeinfo/defun.c:509 makeinfo/defun.c:513 makeinfo/defun.c:517
+#: makeinfo/defun.c:551 makeinfo/defun.c:650 makeinfo/xml.c:2234
+msgid "on"
+msgstr ""
+
+#: makeinfo/defun.c:711
+#, c-format
+msgid "Must be in `@%s' environment to use `@%s'"
+msgstr ""
+
+#: makeinfo/files.c:435
+#, c-format
+msgid "%s: getwd: %s, %s\n"
+msgstr ""
+
+#: makeinfo/files.c:638
+#, c-format
+msgid "`%s' omitted before output filename"
+msgstr ""
+
+#: makeinfo/files.c:646
+#, c-format
+msgid "`%s' omitted since writing to stdout"
+msgstr ""
+
+#: makeinfo/files.c:694
+msgid "Output buffer not empty."
+msgstr ""
+
+#: makeinfo/footnote.c:150
+#, c-format
+msgid "`%c%s' needs an argument `{...}', not just `%s'"
+msgstr ""
+
+#: makeinfo/footnote.c:165
+#, c-format
+msgid "No closing brace for footnote `%s'"
+msgstr ""
+
+#: makeinfo/footnote.c:198
+msgid "Footnote defined without parent node"
+msgstr ""
+
+#: makeinfo/footnote.c:210
+msgid "Footnotes inside footnotes are not allowed"
+msgstr ""
+
+#: makeinfo/footnote.c:302 makeinfo/index.c:189
+msgid "Footnotes"
+msgstr ""
+
+#: makeinfo/html.c:87
+#, c-format
+msgid "%s: could not open --css-file: %s"
+msgstr ""
+
+#: makeinfo/html.c:172
+#, c-format
+msgid "%s:%d: --css-file ended in comment"
+msgstr ""
+
+#: makeinfo/html.c:207
+msgid "Untitled"
+msgstr ""
+
+#: makeinfo/html.c:422
+msgid "[unexpected] no html tag to pop"
+msgstr ""
+
+#: makeinfo/html.c:752
+#, c-format
+msgid "[unexpected] invalid node name: `%s'"
+msgstr ""
+
+#: makeinfo/index.c:169
+#, c-format
+msgid "Unknown index `%s'"
+msgstr ""
+
+#: makeinfo/index.c:234
+#, c-format
+msgid "Info cannot handle `:' in index entry `%s'"
+msgstr ""
+
+#: makeinfo/index.c:412
+#, c-format
+msgid "Index `%s' already exists"
+msgstr ""
+
+#: makeinfo/index.c:455
+#, c-format
+msgid "Unknown index `%s' and/or `%s' in @synindex"
+msgstr ""
+
+#: makeinfo/index.c:661
+msgid "(line )"
+msgstr ""
+
+#: makeinfo/index.c:669
+#, c-format
+msgid "(line %*d)"
+msgstr ""
+
+#: makeinfo/index.c:750
+#, c-format
+msgid "Unknown index `%s' in @printindex"
+msgstr ""
+
+#: makeinfo/index.c:819
+#, c-format
+msgid "Entry for index `%s' outside of any node"
+msgstr ""
+
+#: makeinfo/index.c:822 makeinfo/index.c:858
+msgid "(outside of any node)"
+msgstr ""
+
+#: makeinfo/index.c:919 makeinfo/index.c:925
+msgid "See "
+msgstr ""
+
+#: makeinfo/insertion.c:160
+msgid "@item not allowed in argument to @itemize"
+msgstr ""
+
+#: makeinfo/insertion.c:238
+msgid "Broken-Type in insertion_type_pname"
+msgstr ""
+
+#: makeinfo/insertion.c:334
+msgid "Enumeration stack overflow"
+msgstr ""
+
+#: makeinfo/insertion.c:366
+#, c-format
+msgid "lettering overflow, restarting at %c"
+msgstr ""
+
+#: makeinfo/insertion.c:631
+#, c-format
+msgid "%s requires an argument: the formatter for %citem"
+msgstr ""
+
+#: makeinfo/insertion.c:719
+#, c-format
+msgid "%cfloat environments cannot be nested"
+msgstr ""
+
+#: makeinfo/insertion.c:973
+#, c-format
+msgid "`@end' expected `%s', but saw `%s'"
+msgstr ""
+
+#: makeinfo/insertion.c:1337
+#, c-format
+msgid "No matching `%cend %s'"
+msgstr ""
+
+#: makeinfo/insertion.c:1592
+#, c-format
+msgid "%s requires letter or digit"
+msgstr ""
+
+#: makeinfo/insertion.c:1687
+msgid "end of file inside verbatim block"
+msgstr ""
+
+#: makeinfo/insertion.c:1913
+#, c-format
+msgid "@%s not meaningful outside `@float' environment"
+msgstr ""
+
+#: makeinfo/insertion.c:1949
+msgid "@menu seen before first @node, creating `Top' node"
+msgstr ""
+
+#: makeinfo/insertion.c:1950
+msgid ""
+"perhaps your @top node should be wrapped in @ifnottex rather than @ifinfo?"
+msgstr ""
+
+#: makeinfo/insertion.c:1962
+msgid "@detailmenu seen before first node, creating `Top' node"
+msgstr ""
+
+#: makeinfo/insertion.c:2018
+#, c-format
+msgid "@%s not meaningful outside `@titlepage' and `@quotation' environments"
+msgstr ""
+
+#: makeinfo/insertion.c:2032
+#, c-format
+msgid "@%s not meaningful outside `@titlepage' environment"
+msgstr ""
+
+#: makeinfo/insertion.c:2063
+#, c-format
+msgid "Unmatched `%c%s'"
+msgstr ""
+
+#: makeinfo/insertion.c:2068
+#, c-format
+msgid "`%c%s' needs something after it"
+msgstr ""
+
+#: makeinfo/insertion.c:2074
+#, c-format
+msgid "Bad argument `%s' to `@%s', using `%s'"
+msgstr ""
+
+#: makeinfo/insertion.c:2171
+#, c-format
+msgid "@%s not meaningful inside `@%s' block"
+msgstr ""
+
+#: makeinfo/insertion.c:2180
+#, c-format
+msgid "@itemx not meaningful inside `%s' block"
+msgstr ""
+
+#: makeinfo/insertion.c:2356
+#, c-format
+msgid "%c%s found outside of an insertion block"
+msgstr ""
+
+#: makeinfo/lang.c:580
+#, c-format
+msgid "%s is not a valid ISO 639 language code"
+msgstr ""
+
+#: makeinfo/lang.c:655
+#, c-format
+msgid "unrecognized encoding name `%s'"
+msgstr ""
+
+#: makeinfo/lang.c:663
+#, c-format
+msgid "sorry, encoding `%s' not supported"
+msgstr ""
+
+#: makeinfo/lang.c:715
+#, c-format
+msgid "invalid encoded character `%s'"
+msgstr ""
+
+#: makeinfo/lang.c:1009
+#, c-format
+msgid "%c%s expects `i' or `j' as argument, not `%c'"
+msgstr ""
+
+#: makeinfo/lang.c:1013
+#, 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:355
+#, 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:586
+#, c-format
+msgid "%cend macro not found"
+msgstr ""
+
+#: makeinfo/macro.c:624
+msgid "@quote-arg only useful for single-argument macros"
+msgstr ""
+
+#: makeinfo/macro.c:660
+#, c-format
+msgid "mismatched @end %s with @%s"
+msgstr ""
+
+#: makeinfo/makeinfo.c:184
+#, c-format
+msgid "Too many errors! Gave up.\n"
+msgstr ""
+
+#: makeinfo/makeinfo.c:302
+#, c-format
+msgid "%s:%d: warning: "
+msgstr ""
+
+#: makeinfo/makeinfo.c:321 makeinfo/makeinfo.c:2260
+#, c-format
+msgid "Misplaced %c"
+msgstr ""
+
+#: makeinfo/makeinfo.c:340
+#, c-format
+msgid "Try `%s --help' for more information.\n"
+msgstr ""
+
+#: makeinfo/makeinfo.c:343
+#, c-format
+msgid "Usage: %s [OPTION]... TEXINFO-FILE...\n"
+msgstr ""
+
+#: makeinfo/makeinfo.c:346
+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:350
+#, c-format
+msgid ""
+"General options:\n"
+" --error-limit=NUM quit after NUM errors (default %d).\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"
+" --reference-limit=NUM warn about at most NUM references (default %"
+"d).\n"
+" -v, --verbose explain what is being done.\n"
+" --version display version information and exit.\n"
+msgstr ""
+
+#: makeinfo/makeinfo.c:364
+#, 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:372
+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 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 (directory if split HTML),\n"
+msgstr ""
+
+#: makeinfo/makeinfo.c:386
+#, c-format
+msgid ""
+"Options for Info and plain text:\n"
+" --enable-encoding output accented and special characters in\n"
+" Info output based on @documentencoding.\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\n"
+" in which they are defined (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:403
+msgid ""
+"Options for HTML:\n"
+" --css-include=FILE include FILE in HTML <style> output;\n"
+" read stdin if FILE is -.\n"
+msgstr ""
+
+#: makeinfo/makeinfo.c:409
+#, 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:416
+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:425
+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:444
+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:452
+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:603
+#, c-format
+msgid "%s: Ignoring unrecognized TEXINFO_OUTPUT_FORMAT value `%s'.\n"
+msgstr ""
+
+#: makeinfo/makeinfo.c:647 makeinfo/makeinfo.c:673 makeinfo/makeinfo.c:692
+#: makeinfo/makeinfo.c:722 makeinfo/makeinfo.c:743
+#, c-format
+msgid "%s: %s arg must be numeric, not `%s'.\n"
+msgstr ""
+
+#: makeinfo/makeinfo.c:660
+#, c-format
+msgid "%s: could not open macro expansion output `%s'"
+msgstr ""
+
+#: makeinfo/makeinfo.c:665
+#, c-format
+msgid "%s: ignoring second macro expansion output `%s'.\n"
+msgstr ""
+
+#: makeinfo/makeinfo.c:707
+#, c-format
+msgid "%s: --paragraph-indent arg must be numeric/`none'/`asis', not `%s'.\n"
+msgstr ""
+
+#: makeinfo/makeinfo.c:732
+#, c-format
+msgid "%s: --footnote-style arg must be `separate' or `end', not `%s'.\n"
+msgstr ""
+
+#: makeinfo/makeinfo.c:806
+#, c-format
+msgid "%s: missing file argument.\n"
+msgstr ""
+
+#: makeinfo/makeinfo.c:997 makeinfo/makeinfo.c:3991
+#, c-format
+msgid "Multiline command %c%s used improperly"
+msgstr ""
+
+#: makeinfo/makeinfo.c:1000
+#, c-format
+msgid "Expected `%s'"
+msgstr ""
+
+#: makeinfo/makeinfo.c:1479
+#, c-format
+msgid "Can't create directory `%s': %s"
+msgstr ""
+
+#: makeinfo/makeinfo.c:1525
+#, c-format
+msgid "No `%s' found in `%s'"
+msgstr ""
+
+#: makeinfo/makeinfo.c:1605
+#, c-format
+msgid "%s: Skipping macro expansion to stdout as Info output is going there.\n"
+msgstr ""
+
+#: makeinfo/makeinfo.c:1638
+#, c-format
+msgid "Making %s file `%s' from `%s'.\n"
+msgstr ""
+
+#: makeinfo/makeinfo.c:1673
+#, c-format
+msgid "This is %s, produced by makeinfo version %s from %s.\n"
+msgstr ""
+
+#: makeinfo/makeinfo.c:1709
+#, c-format
+msgid ""
+"%s: Removing macro output file `%s' due to errors; use --force to preserve.\n"
+msgstr ""
+
+#: makeinfo/makeinfo.c:1773
+#, c-format
+msgid "%s: Removing output file `%s' due to errors; use --force to preserve.\n"
+msgstr ""
+
+#: makeinfo/makeinfo.c:2034
+#, c-format
+msgid "Unknown command `%s'"
+msgstr ""
+
+#: makeinfo/makeinfo.c:2056
+#, c-format
+msgid "Use braces to give a command as an argument to @%s"
+msgstr ""
+
+#: makeinfo/makeinfo.c:2314
+#, c-format
+msgid "%c%s expected braces"
+msgstr ""
+
+#: makeinfo/makeinfo.c:2327
+msgid "Unmatched }"
+msgstr ""
+
+#: makeinfo/makeinfo.c:2375
+msgid "NO_NAME!"
+msgstr ""
+
+#: makeinfo/makeinfo.c:2396
+#, c-format
+msgid "%c%s missing close brace"
+msgstr ""
+
+#: makeinfo/makeinfo.c:3309
+#, c-format
+msgid "@image file `%s' (for HTML) not readable: %s"
+msgstr ""
+
+#: makeinfo/makeinfo.c:3315
+#, c-format
+msgid "No such file `%s'"
+msgstr ""
+
+#: makeinfo/makeinfo.c:3447
+#, c-format
+msgid "@image file `%s' (for text) unreadable: %s"
+msgstr ""
+
+#: makeinfo/makeinfo.c:3456
+msgid "@image missing filename argument"
+msgstr ""
+
+#: makeinfo/makeinfo.c:3675
+#, c-format
+msgid "undefined flag: %s"
+msgstr ""
+
+#: makeinfo/makeinfo.c:3676
+#, c-format
+msgid "{No value for `%s'}"
+msgstr ""
+
+#: makeinfo/makeinfo.c:3728
+#, c-format
+msgid "%c%s requires a name"
+msgstr ""
+
+#: makeinfo/makeinfo.c:3834
+#, c-format
+msgid "Reached eof before matching @end %s"
+msgstr ""
+
+#: makeinfo/makeinfo.c:4082
+#, 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:254
+#, c-format
+msgid "ignoring stray text `%s' after @multitable"
+msgstr ""
+
+#: makeinfo/multi.c:393
+#, c-format
+msgid "Too many columns in multitable item (max %d)"
+msgstr ""
+
+#: makeinfo/multi.c:555
+#, c-format
+msgid "[unexpected] cannot select column #%d in multitable"
+msgstr ""
+
+#: makeinfo/multi.c:584
+msgid "ignoring @tab outside of multitable"
+msgstr ""
+
+#: makeinfo/multi.c:632
+#, c-format
+msgid "** Multicolumn output from last row:\n"
+msgstr ""
+
+#: makeinfo/multi.c:635
+#, c-format
+msgid "* column #%d: output = %s\n"
+msgstr ""
+
+#: makeinfo/node.c:280
+#, c-format
+msgid "Node `%s' previously defined at line %d"
+msgstr ""
+
+#: makeinfo/node.c:648
+#, c-format
+msgid "Formatting node %s...\n"
+msgstr ""
+
+#: makeinfo/node.c:716
+#, c-format
+msgid "Node `%s' requires a sectioning command (e.g., %c%s)"
+msgstr ""
+
+#: makeinfo/node.c:879
+#, c-format
+msgid "No node name specified for `%c%s' command"
+msgstr ""
+
+#: makeinfo/node.c:920 makeinfo/node.c:1151
+#, c-format
+msgid "Anchor `%s' and node `%s' map to the same file name"
+msgstr ""
+
+#: makeinfo/node.c:923
+msgid "This @anchor command ignored; references to it will not work"
+msgstr ""
+
+#: makeinfo/node.c:925 makeinfo/node.c:1154
+msgid "Rename this anchor or use the `--no-split' option"
+msgstr ""
+
+#: makeinfo/node.c:955
+#, c-format
+msgid "Unexpected string at end of split-HTML file `%s'"
+msgstr ""
+
+#: makeinfo/node.c:991
+msgid "Next:"
+msgstr ""
+
+#: makeinfo/node.c:1007
+msgid "Previous:"
+msgstr ""
+
+#: makeinfo/node.c:1021
+msgid "Up:"
+msgstr ""
+
+#: makeinfo/node.c:1148
+#, c-format
+msgid "Anchors `%s' and `%s' map to the same file name"
+msgstr ""
+
+#: makeinfo/node.c:1153
+msgid "@anchor command ignored; references to it will not work"
+msgstr ""
+
+#: makeinfo/node.c:1347
+#, c-format
+msgid "%s reference to nonexistent node `%s' (perhaps incorrect sectioning?)"
+msgstr ""
+
+#: makeinfo/node.c:1363
+msgid "Menu"
+msgstr ""
+
+#: makeinfo/node.c:1365
+msgid "Cross"
+msgstr ""
+
+#: makeinfo/node.c:1447
+#, c-format
+msgid "Next field of node `%s' not pointed to (perhaps incorrect sectioning?)"
+msgstr ""
+
+#: makeinfo/node.c:1450
+#, c-format
+msgid "This node (%s) has the bad Prev"
+msgstr ""
+
+#: makeinfo/node.c:1462
+msgid "Prev"
+msgstr ""
+
+#: makeinfo/node.c:1505
+#, c-format
+msgid "Prev field of node `%s' not pointed to"
+msgstr ""
+
+#: makeinfo/node.c:1509
+#, c-format
+msgid "This node (%s) has the bad Next"
+msgstr ""
+
+#: makeinfo/node.c:1521
+#, c-format
+msgid "`%s' has no Up field (perhaps incorrect sectioning?)"
+msgstr ""
+
+#: makeinfo/node.c:1524
+msgid "Up"
+msgstr ""
+
+#: makeinfo/node.c:1590
+#, c-format
+msgid "Node `%s' lacks menu item for `%s' despite being its Up target"
+msgstr ""
+
+#: makeinfo/node.c:1619
+#, c-format
+msgid "node `%s' has been referenced %d times"
+msgstr ""
+
+#: makeinfo/node.c:1633
+#, c-format
+msgid "unreferenced node `%s'"
+msgstr ""
+
+#: makeinfo/node.c:1723
+#, c-format
+msgid "Removing %s\n"
+msgstr ""
+
+#: makeinfo/node.c:1727
+#, 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:562
+#, c-format
+msgid "Internal error (search_sectioning) \"%s\"!"
+msgstr ""
+
+#: makeinfo/sectioning.c:623
+#, c-format
+msgid "%c%s is obsolete; use %c%s instead"
+msgstr ""
+
+#: makeinfo/sectioning.c:639
+#, c-format
+msgid "Node with %ctop as a section already exists"
+msgstr ""
+
+#: makeinfo/sectioning.c:647
+#, c-format
+msgid "Here is the %ctop node"
+msgstr ""
+
+#: makeinfo/sectioning.c:663
+#, c-format
+msgid "%ctop used before %cnode, defaulting to %s"
+msgstr ""
+
+#: makeinfo/toc.c:197 makeinfo/toc.c:271 makeinfo/toc.c:273
+msgid "Table of Contents"
+msgstr ""
+
+#: makeinfo/toc.c:304 makeinfo/toc.c:337 makeinfo/toc.c:339
+msgid "Short Contents"
+msgstr ""
+
+#: makeinfo/xml.c:1605
+#, c-format
+msgid "@image file `%s' unreadable: %s"
+msgstr ""
+
+#: makeinfo/xml.c:2097
+msgid ""
+"@headitem as the last item of @multitable produces invalid Docbook documents"
+msgstr ""
+
+#: util/install-info.c:154
+#, c-format
+msgid "%s: warning: "
+msgstr ""
+
+#: util/install-info.c:203
+#, c-format
+msgid " for %s"
+msgstr ""
+
+#: util/install-info.c:426
+#, c-format
+msgid "\tTry `%s --help' for a complete list of options.\n"
+msgstr ""
+
+#: util/install-info.c:434
+#, c-format
+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 ""
+
+#: util/install-info.c:488
+#, 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 ""
+
+#: util/install-info.c:513
+#, c-format
+msgid "%s: could not read (%s) and could not create (%s)\n"
+msgstr ""
+
+#: util/install-info.c:600
+#, c-format
+msgid "%s: empty file"
+msgstr ""
+
+#: util/install-info.c:913 util/install-info.c:953
+msgid "START-INFO-DIR-ENTRY without matching END-INFO-DIR-ENTRY"
+msgstr ""
+
+#: util/install-info.c:948
+msgid "END-INFO-DIR-ENTRY without matching START-INFO-DIR-ENTRY"
+msgstr ""
+
+#: util/install-info.c:1191 util/install-info.c:1201
+#, c-format
+msgid "%s: already have dir file: %s\n"
+msgstr ""
+
+#: util/install-info.c:1236
+#, c-format
+msgid "%s: Specify the Info file only once.\n"
+msgstr ""
+
+#: util/install-info.c:1284
+#, c-format
+msgid "excess command line argument `%s'"
+msgstr ""
+
+#: util/install-info.c:1288
+msgid "No input file specified; try --help for more information."
+msgstr ""
+
+#: util/install-info.c:1291
+msgid "No dir file specified; try --help for more information."
+msgstr ""
+
+#: util/install-info.c:1313
+#, c-format
+msgid "no info dir entry in `%s'"
+msgstr ""
+
+#: util/install-info.c:1426
+#, c-format
+msgid "menu item `%s' already exists, for file `%s'"
+msgstr ""
+
+#: util/install-info.c:1449
+#, c-format
+msgid "no entries found for `%s'; nothing deleted"
+msgstr ""
+
+#: util/texindex.c:252
+msgid "display this help and exit"
+msgstr ""
+
+#: util/texindex.c:254
+msgid "keep temporary files around after processing"
+msgstr ""
+
+#: util/texindex.c:256
+msgid "do not keep temporary files around after processing (default)"
+msgstr ""
+
+#: util/texindex.c:258
+msgid "send output to FILE"
+msgstr ""
+
+#: util/texindex.c:260
+msgid "display version information and exit"
+msgstr ""
+
+#: util/texindex.c:270
+#, c-format
+msgid "Usage: %s [OPTION]... FILE...\n"
+msgstr ""
+
+#: util/texindex.c:271
+#, c-format
+msgid "Generate a sorted index for each TeX output FILE.\n"
+msgstr ""
+
+#: util/texindex.c:274
+#, c-format
+msgid "Usually FILE... is specified as `foo.%c%c' for a document `foo.texi'.\n"
+msgstr ""
+
+#: util/texindex.c:276
+#, c-format
+msgid ""
+"\n"
+"Options:\n"
+msgstr ""
+
+#: util/texindex.c:876 util/texindex.c:910 util/texindex.c:983
+#: util/texindex.c:1011
+#, c-format
+msgid "%s: not a texinfo index file"
+msgstr ""
+
+#: util/texindex.c:968
+#, c-format
+msgid "failure reopening %s"
+msgstr ""
+
+#: util/texindex.c:1218
+#, c-format
+msgid "No page number in %s"
+msgstr ""
+
+#: util/texindex.c:1291
+#, c-format
+msgid "entry %s follows an entry with a secondary name"
+msgstr ""
diff --git a/macros/texinfo/contrib/texinfo-hu/texinfo/po/tr.gmo b/macros/texinfo/contrib/texinfo-hu/texinfo/po/tr.gmo
new file mode 100644
index 0000000000..09fa6558c6
--- /dev/null
+++ b/macros/texinfo/contrib/texinfo-hu/texinfo/po/tr.gmo
Binary files differ
diff --git a/macros/texinfo/contrib/texinfo-hu/texinfo/po/tr.po b/macros/texinfo/contrib/texinfo-hu/texinfo/po/tr.po
new file mode 100644
index 0000000000..6745a02f04
--- /dev/null
+++ b/macros/texinfo/contrib/texinfo-hu/texinfo/po/tr.po
@@ -0,0 +1,3123 @@
+# translation of texinfo-4.7.92.po to Turkish
+# texinfo-4.7.92 Türkçe Çevirisi
+# Copyright (C) 2002, 2004 Free Software Foundation, Inc.
+# This file is distributed under the same license as the texinfo package.
+# Eyüp Hakan Duran <hakan_duran@hotmail.com>, 2002, 2004.
+msgid ""
+msgstr ""
+"Project-Id-Version: texinfo-4.7.92\n"
+"Report-Msgid-Bugs-To: bug-texinfo@gnu.org\n"
+"POT-Creation-Date: 2004-12-21 16:20-0800\n"
+"PO-Revision-Date: 2004-12-21 21:22+0200\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.3\n"
+
+#: info/echo-area.c:284 info/session.c:689
+msgid "Move forward a character"
+msgstr "Bir karakter ileri gider"
+
+#: info/echo-area.c:296 info/session.c:705
+msgid "Move backward a character"
+msgstr "Bir karakter geri gider"
+
+#: info/echo-area.c:308
+msgid "Move to the start of this line"
+msgstr "Satýrýn baþlangýcýna gider"
+
+#: info/echo-area.c:313
+msgid "Move to the end of this line"
+msgstr "Satýrýn sonuna gider"
+
+#: info/echo-area.c:321 info/session.c:723
+msgid "Move forward a word"
+msgstr "Bir kelime ileri gider"
+
+#: info/echo-area.c:361 info/session.c:772
+msgid "Move backward a word"
+msgstr "Bir kelime geri gider"
+
+#: info/echo-area.c:401
+msgid "Delete the character under the cursor"
+msgstr "Ýmlecin altýndaki karakteri siler"
+
+#: info/echo-area.c:431
+msgid "Delete the character behind the cursor"
+msgstr "Ýmleçden önceki karakteri siler"
+
+#: info/echo-area.c:452
+msgid "Cancel or quit operation"
+msgstr "Ýþlemi keser ya da çýkar"
+
+#: info/echo-area.c:467
+msgid "Accept (or force completion of) this line"
+msgstr "Bu satýrý kabul eder (ya da tamamlanmasý için zorlar)"
+
+#: info/echo-area.c:472
+msgid "Insert next character verbatim"
+msgstr "Sonraki karakteri aynen yerleþtirir"
+
+#: info/echo-area.c:480
+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:653
+msgid "Kill the word preceding the cursor"
+msgstr "Ýmleçten önceki kelimeyi siler"
+
+#: info/echo-area.c:868 info/echo-area.c:924
+msgid "No completions"
+msgstr "Tamamlama yok"
+
+#: info/echo-area.c:870
+msgid "Not complete"
+msgstr "Bitmedi"
+
+#: info/echo-area.c:911
+msgid "List possible completions"
+msgstr "Olasý tamamlamalarý listeler"
+
+#: info/echo-area.c:928
+msgid "Sole completion"
+msgstr "Tek tamamlama"
+
+#: info/echo-area.c:937
+msgid "One completion:\n"
+msgstr "Bir tamamlama:\n"
+
+#: info/echo-area.c:938
+#, c-format
+msgid "%d completions:\n"
+msgstr "%d tamamlama:\n"
+
+#: info/echo-area.c:1085
+msgid "Insert completion"
+msgstr "Tamamlamayý yerleþtir"
+
+#: info/echo-area.c:1220
+msgid "Building completions..."
+msgstr "Tamamlamalarý oluþturuyor..."
+
+#: info/echo-area.c:1340
+msgid "Scroll the completions window"
+msgstr "Tamamlama penceresini kaydýrýr"
+
+#: info/footnotes.c:213
+msgid "Footnotes could not be displayed"
+msgstr "Dipnotlar gösterilemedi"
+
+#: info/footnotes.c:239
+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:172
+msgid "Look up a string in the index for this file"
+msgstr "Bu dosyada indeks içinde bir dizgeyi arar"
+
+#: info/indices.c:199
+msgid "Finding index entries..."
+msgstr "indeks girdilerini buluyor..."
+
+#: info/indices.c:207
+msgid "No indices found."
+msgstr "Hiç indis yok."
+
+#: info/indices.c:217
+msgid "Index entry: "
+msgstr "indeks giriþi: "
+
+#: info/indices.c:325
+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:335
+msgid "No previous index search string."
+msgstr "Daha önce bir indeks arama dizgesi yok."
+
+#: info/indices.c:342
+msgid "No index entries."
+msgstr "Hiç indeks girdisi yok."
+
+#: info/indices.c:375
+#, c-format
+msgid "No %sindex entries containing `%s'."
+msgstr "`%s' içeren %sindex girdisi yok."
+
+#: info/indices.c:376
+msgid "more "
+msgstr "daha"
+
+#: info/indices.c:386
+msgid "CAN'T SEE THIS"
+msgstr "BU GÖRÜLMEZ"
+
+#: info/indices.c:422
+#, 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:541
+#, c-format
+msgid "Scanning indices of `%s'..."
+msgstr "`%s' indislerini tarýyor..."
+
+#: info/indices.c:596
+#, 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:622
+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:626
+msgid "Index apropos: "
+msgstr "Ýndeks hakkýnda:"
+
+#: info/indices.c:654
+#, 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:295 makeinfo/makeinfo.c:766 util/install-info.c:1266
+#: util/texindex.c:343
+#, c-format
+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 ""
+"Garanti yoktur. Bu yazýlýmý GNU Genel Kamu Lisansý koþullarý\n"
+"altýnda daðýtabilirsiniz. Bu konuda daha fazla bilgi için\n"
+"COPYING isimli dosyaya bakýn.\n"
+
+#: info/info.c:498
+#, c-format
+msgid "no index entries found for `%s'\n"
+msgstr "`%s' için indeks girdisi yok.\n"
+
+#: info/info.c:590
+msgid " -b, --speech-friendly be friendly to speech synthesizers.\n"
+msgstr ""
+" -b, --speech-friendly konuþma sentezcilerine dostça davranýr.\n"
+
+#: info/info.c:597
+#, c-format
+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 -f ./foo.info show file ./foo.info, not searching dir\n"
+msgstr ""
+"Kullaným: %s [SEÇENEK]... [MENÜ-ÖÐESÝ...]\n"
+"\n"
+"Info biçeminde belge okur\n"
+"\n"
+"Seçenekler:\n"
+" --apropos=DÝZGE DÝZGE'yi tüm elkitaplarýnýn tüm indislerinde "
+"ara.\n"
+" -d, --directory=DIR DIR'ý INFOPATH'a ekle.\n"
+" --dribble=DOSYAADI DOSYAADI'ndaki kullanýcý tuþbasýmlarýný "
+"anýmsa.\n"
+" -f, --file=DOSYAADI uðranacak Info dosyasýný belirle.\n"
+" -h, --help bu yardýmý görüntüle ve çýk.\n"
+" --index-search=DÝZGE DÝZGE indeks giriþince iþaret edilen düðüme "
+"git.\n"
+" -n, --node=DÜÐÜMADI ilk uðranan Info dosyasýndaki düðümleri "
+"belirle.\n"
+" -o, --output=DOSYAADI seçili düðümleri DOSYAADI'na çýkar.\n"
+" -R, --raw-escapes klavuz sayfalarýndan ANSI kaçýþlarýný (esc) "
+"silme.\n"
+" --restore=DOSYAADI ilk tuþ vuruþlarýný DOSYAADI'ndan oku.\n"
+" -O, --show-options, --usage komut-satýrý seçenekler düðümüne git.\n"
+"%s --subnodes menü öðelerini özyinelemeli çýkar.\n"
+" --vi-keys vi ve less benzeri tuþ baðlayýcýlarý kullan.\n"
+" --version sürüm bilgisini göster ve çýk.\n"
+"\n"
+"Eðer mevcutsa, ilk seçenek-olmayan argüman, baþlanacak menü giriþidir;\n"
+"INFOPATH boyunca tüm `dir' dosyalarýnda aranýr.\n"
+"Mevcut deðilse, bilgi tüm `dir' dosyalarýný birleþtirip sonucu gösterir.\n"
+"Kalan tüm argümanlar, ilk uðranan düðüme göreceli olarak\n"
+"menü öðesi adlarý muamelesi görür.\n"
+"\n"
+"Örnekler:\n"
+" info üst-düzey dir menüsünü göster\n"
+" info emacs üst-düzey dir'den emacs düðümünde baþla\n"
+" info emacs buffers emacs klavuzu içindeki tampon düðümden baþla\n"
+" info --show-options emacs emacs'ýn komut satýrý seçenekleri olan düðümden "
+"baþla\n"
+" info -f ./foo.info dir'i aramadan ./foo.info dosyasýný göster\n"
+
+#: info/info.c:635 info/infokey.c:918 makeinfo/makeinfo.c:465
+#: util/install-info.c:466 util/texindex.c:292
+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:669
+#, c-format
+msgid "Cannot find node `%s'."
+msgstr "`%s' düðümü bulunamadý."
+
+#: info/info.c:670
+#, c-format
+msgid "Cannot find node `(%s)%s'."
+msgstr "`(%s)%s' düðümü bulunamadý."
+
+#: info/info.c:671
+msgid "Cannot find a window!"
+msgstr "Bir pencere bulunamadý!"
+
+#: info/info.c:672
+msgid "Point doesn't appear within this window's node!"
+msgstr "Orasý bu pencerenin düðümü gibi görünmüyor!"
+
+#: info/info.c:673
+msgid "Cannot delete the last window."
+msgstr "Son pencere silinemez."
+
+#: info/info.c:674
+msgid "No menu in this node."
+msgstr "Bu düðümde menü yok."
+
+#: info/info.c:675
+msgid "No footnotes in this node."
+msgstr "Bu düðümde dipnot yok."
+
+#: info/info.c:676
+msgid "No cross references in this node."
+msgstr "Bu düðümde çapraz baþvuru yok."
+
+#: info/info.c:677
+#, c-format
+msgid "No `%s' pointer for this node."
+msgstr "Bu düðüm için `%s' yer gösterici yok."
+
+#: info/info.c:678
+#, c-format
+msgid "Unknown Info command `%c'; try `?' for help."
+msgstr "Info komutu `%c' bilinmiyor; yardým almak için `?' deneyin."
+
+#: info/info.c:679
+#, 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:680
+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:681
+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:682
+msgid "Only one window."
+msgstr "Sadece bir pencere."
+
+#: info/info.c:683
+msgid "Resulting window would be too small."
+msgstr "Pencere çok küçük olacaktý."
+
+#: info/info.c:684
+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:46 info/infodoc.c:95
+msgid ""
+"Basic Commands in Info Windows\n"
+"******************************\n"
+msgstr ""
+"Info Pencerelerindeki Temel Komutlar\n"
+"************************************\n"
+
+#: info/infodoc.c:49
+msgid "\\%-10[quit-help] Quit this help.\n"
+msgstr "\\%-10[quit help] Bu yardýmdan çýkar \n"
+
+#: info/infodoc.c:50
+msgid "\\%-10[quit] Quit Info altogether.\n"
+msgstr "\\%-10[quit] Info'dan büsbütün çýkar.\n"
+
+#: info/infodoc.c:51
+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:53 info/infodoc.c:102
+msgid ""
+"Selecting other nodes:\n"
+"----------------------\n"
+msgstr ""
+"Diðer düðümleri seçme:\n"
+"----------------------\n"
+
+#: info/infodoc.c:55
+msgid "\\%-10[next-node] Move to the \"next\" node of this node.\n"
+msgstr "\\%-10[next-node] Bu düðümün \"next\" düðümüne gider.\n"
+
+#: info/infodoc.c:56
+msgid "\\%-10[prev-node] Move to the \"previous\" node of this node.\n"
+msgstr "\\%-10[prev-node] Bu düðümün \"previous\" düðümüne gider.\n"
+
+#: info/infodoc.c:57
+msgid "\\%-10[up-node] Move \"up\" from this node.\n"
+msgstr "\\%-10[up-node] Bu düðümden \"up\" gider.\n"
+
+#: info/infodoc.c:58
+msgid ""
+"\\%-10[menu-item] Pick menu item specified by name.\n"
+" Picking a menu item causes another node to be selected.\n"
+msgstr ""
+"\\%-10[menu-item] Ý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:60
+msgid ""
+"\\%-10[xref-item] Follow a cross reference. Reads name of reference.\n"
+msgstr ""
+"\\%-10[xref-item] Bir çapraz baþvuruyu izler. Baþvurunun adýný okur.\n"
+
+#: info/infodoc.c:61
+msgid "\\%-10[history-node] Move 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[move-to-next-xref] Skip to next hypertext link within this node.\n"
+msgstr ""
+"\\%-10[move-to-next-xref] Bu düðüm içinde sonraki URL linkine atlar.\n"
+
+#: info/infodoc.c:63
+msgid ""
+"\\%-10[move-to-prev-xref] Skip to previous hypertext link within this "
+"node.\n"
+msgstr "\\%-10[move-to-prev-xref] Bu düðüm içinde önceki URL linkine atlar.\n"
+
+#: info/infodoc.c:64
+msgid ""
+"\\%-10[select-reference-this-line] Follow the hypertext link under cursor.\n"
+msgstr ""
+"\\%-10[select-reference-this-line] Ýmleç altýndaki URL linkini izler.\n"
+
+#: info/infodoc.c:65
+msgid ""
+"\\%-10[dir-node] Move to the `directory' node. Equivalent to `\\[goto-"
+"node] (DIR)'.\n"
+msgstr ""
+"\\%-10[dir-node] `dizin' düðümüne gider. `\\[goto-node] (DIR)'a eþdeðer.\n"
+
+#: info/infodoc.c:66
+msgid ""
+"\\%-10[top-node] Move to the Top node. Equivalent to `\\[goto-node] Top'.\n"
+msgstr ""
+"\\%-10[top-node] En üst düðüme gider. `\\[goto-node] Top'a eþdeðer.\n"
+
+#: info/infodoc.c:68 info/infodoc.c:116
+msgid ""
+"Moving within a node:\n"
+"---------------------\n"
+msgstr ""
+"Bir düðüm içinde dolaþým:\n"
+"-------------------------\n"
+
+#: info/infodoc.c:70
+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:71
+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:72
+msgid "\\%-10[next-line] Scroll forward 1 line.\n"
+msgstr "\\%-10[next-line] Bir satýr ileri kaydýrýr.\n"
+
+#: info/infodoc.c:73
+msgid "\\%-10[prev-line] Scroll backward 1 line.\n"
+msgstr "\\%-10[prev-line] Bir satýr geri kaydýrýr.\n"
+
+#: info/infodoc.c:74
+msgid "\\%-10[scroll-forward] Scroll forward a page.\n"
+msgstr "\\%-10[scroll-forward] Ýleriye doðru bir sayfa kaydýrýr.\n"
+
+#: info/infodoc.c:75
+msgid "\\%-10[scroll-backward] Scroll backward a page.\n"
+msgstr "\\%-10[scroll-backward] Geriye doðru bir sayfa kaydýrýr.\n"
+
+#: info/infodoc.c:77 info/infodoc.c:125
+msgid ""
+"Other commands:\n"
+"---------------\n"
+msgstr ""
+"Diðer komutlar:\n"
+"---------------\n"
+
+#: info/infodoc.c:79
+msgid "\\%-10[menu-digit] Pick first ... ninth item in node's menu.\n"
+msgstr "\\%-10[menu-digit] Düðümün menüsündeki ilk ...inci öðeyi seçer.\n"
+
+#: info/infodoc.c:80
+msgid "\\%-10[last-menu-item] Pick last item in node's menu.\n"
+msgstr "\\%-10[last-menu-item] Düðümün menüsündeki son öðeyi seçer.\n"
+
+#: info/infodoc.c:81
+msgid ""
+"\\%-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"
+msgstr ""
+"\\%-10[index-search] 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:83
+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] Ýsmiyle belirtilen düðüme gider.\n"
+" (DOSYAADI)DÜÐÜMADI þeklinde bir dosya adý da "
+"ekleyebilirsiniz.\n"
+
+#: info/infodoc.c:85
+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] Belirli bir dizgeyi ileriye doðru arar\n"
+" ve sonraki bulunanýn içinde olduðu düðümü seçer.\n"
+
+#: info/infodoc.c:87
+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] Belirli bir dizgeyi geriye doðru arar\n"
+" ve önceki bulunanýn içinde olduðu düðümü seçer.\n"
+
+#: info/infodoc.c:98
+#, c-format
+msgid " %-10s Quit this help.\n"
+msgstr " %-10s Bu yardým penceresinden çýkar.\n"
+
+#: info/infodoc.c:99
+#, c-format
+msgid " %-10s Quit Info altogether.\n"
+msgstr " %-10s Info büsbütün çýkar.\n"
+
+#: info/infodoc.c:100
+#, c-format
+msgid " %-10s Invoke the Info tutorial.\n"
+msgstr " %-10s Info öðreticiyi yardýma çaðýrýr.\n"
+
+#: info/infodoc.c:104
+#, 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:105
+#, 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:106
+#, c-format
+msgid " %-10s Move `up' from this node.\n"
+msgstr " %-10s Bu düðümden `yukarý' gider.\n"
+
+#: info/infodoc.c:107
+#, c-format
+msgid " %-10s Pick menu item specified by name.\n"
+msgstr " %-10s Ýsmi ile belirtilen menü öðesini seçer.\n"
+
+#: info/infodoc.c:108
+msgid " Picking a menu item causes another node to be selected.\n"
+msgstr ""
+" Diðer düðümün seçilmesine sebep olan bir menü öðesini "
+"seçiyor.\n"
+
+#: info/infodoc.c:109
+#, 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:110
+#, 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:111
+#, 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:112
+#, c-format
+msgid " %-10s Follow the hypertext link under cursor.\n"
+msgstr " %-10s Ýmleç altýndaki URL baðýný izler.\n"
+
+#: info/infodoc.c:113
+#, 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:114
+#, 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:118
+#, c-format
+msgid " %-10s Scroll forward a page.\n"
+msgstr " %-10s Bir sayfa ileri kaydýrýr.\n"
+
+#: info/infodoc.c:119
+#, c-format
+msgid " %-10s Scroll backward a page.\n"
+msgstr " %-10s Bir sayfa geri kaydýrýr.\n"
+
+#: info/infodoc.c:120
+#, 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:121
+#, c-format
+msgid " %-10s Go to the end of this node.\n"
+msgstr " %-10s Bu düðümün sonuna gider.\n"
+
+#: info/infodoc.c:122
+#, c-format
+msgid " %-10s Scroll forward 1 line.\n"
+msgstr " %-10s Bir satýr ileri kaydýrýr.\n"
+
+#: info/infodoc.c:123
+#, c-format
+msgid " %-10s Scroll backward 1 line.\n"
+msgstr " %-10s Bir satýr geri kaydýrýr.\n"
+
+#: info/infodoc.c:127
+#, c-format
+msgid " %-10s Pick first ... ninth item in node's menu.\n"
+msgstr " %-10s Önce seçer ... düðüm menüsündeki dokuzuncu öðe.\n"
+
+#: info/infodoc.c:128
+#, 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:129
+#, c-format
+msgid ""
+" %-10s Search for a specified string in the index entries of this Info\n"
+msgstr " %-10s Bu Info'nun indeks girdilerinde belirtilen bir dizgeyi arar\n"
+
+#: info/infodoc.c:130
+msgid ""
+" file, and select the node referenced by the first entry "
+"found.\n"
+msgstr ""
+" dosyasý ve bulunan ilk girdi tarafýndan baðýntýlanan düðümü "
+"seçer.\n"
+
+#: info/infodoc.c:131
+#, c-format
+msgid " %-10s Move to node specified by name.\n"
+msgstr " %-10s ismiyle belirtilen düðüme gider.\n"
+
+#: info/infodoc.c:132
+msgid ""
+" You may include a filename as well, as in (FILENAME)NODENAME.\n"
+msgstr ""
+" (DOSYAÝSMÝ)DÜÐÜMÝSMÝ þeklinde bir dosyayý dahil "
+"edebilirsiniz.\n"
+
+#: info/infodoc.c:133
+#, c-format
+msgid " %-10s Search forward for a specified string,\n"
+msgstr " %-10s Belirli bir dizgeyi ileriye doðru arar,\n"
+
+#: info/infodoc.c:134 info/infodoc.c:136
+msgid ""
+" and select the node in which the next occurrence is found.\n"
+msgstr " ve bulunan sonraki oluþumdaki düðümü seçer.\n"
+
+#: info/infodoc.c:135
+#, c-format
+msgid " %-10s Search backward for a specified string\n"
+msgstr " %-10s Belirli bir dizgeyi geriye doðru arar\n"
+
+#: info/infodoc.c:316
+msgid "The current search path is:\n"
+msgstr "Þu anki arama yolu:\n"
+
+#: info/infodoc.c:320
+msgid ""
+"Commands available in Info windows:\n"
+"\n"
+msgstr ""
+"Info pencerelerinde kullanýlabilecek komutlar:\n"
+"\n"
+
+#: info/infodoc.c:324
+msgid ""
+"Commands available in the echo area:\n"
+"\n"
+msgstr ""
+"Eko alanýnda kullanýlabilecek komutlar:\n"
+"\n"
+
+#: info/infodoc.c:347
+#, 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:351
+msgid ""
+"The following commands cannot be invoked at all:\n"
+"\n"
+msgstr " tümü\n"
+
+#: info/infodoc.c:375
+msgid "--- Use `\\[history-node]' or `\\[kill-node]' to exit ---\n"
+msgstr ""
+"--- Çýkmak için `\\[geçmiþ-düðüm]' ya da `\\[kaldýrýlan-düðüm]' kullanýn "
+"---\n"
+
+#: info/infodoc.c:485
+msgid "Display help message"
+msgstr "Bu yardým iletisini gösterir"
+
+#: info/infodoc.c:503
+msgid "Visit Info node `(info)Help'"
+msgstr "Info düðümünü `(info)Help' ziyaret eder"
+
+#: info/infodoc.c:641
+msgid "Print documentation for KEY"
+msgstr "KEY ile ilgili belgeleri basar"
+
+#: info/infodoc.c:653
+#, c-format
+msgid "Describe key: %s"
+msgstr "Tuþ açýklamasý: %s"
+
+#: info/infodoc.c:664
+#, c-format
+msgid "ESC %s is undefined."
+msgstr "ESC %s atanmamýþ."
+
+#: info/infodoc.c:680 info/infodoc.c:709
+#, c-format
+msgid "%s is undefined."
+msgstr "%s atanmamýþ."
+
+#: info/infodoc.c:730
+#, c-format
+msgid "%s is defined to %s."
+msgstr "%s %s olarak atanmýþ."
+
+#: info/infodoc.c:1153
+msgid "Show what to type to execute a given command"
+msgstr "Verilen komutu çalýþtýracak türü gösterir"
+
+#: info/infodoc.c:1157
+msgid "Where is command: "
+msgstr "Komutun yeri: "
+
+#: info/infodoc.c:1179
+#, c-format
+msgid "`%s' is not on any keys"
+msgstr "`%s' bir tuþ üzerinde deðil"
+
+#: info/infodoc.c:1186
+#, c-format
+msgid "%s can only be invoked via %s."
+msgstr "%s sadece %s üzerinden çaðrýlabilir."
+
+#: info/infodoc.c:1190
+#, c-format
+msgid "%s can be invoked via %s."
+msgstr "%s, %s üzerinden çaðrýlabilir."
+
+#: info/infodoc.c:1195
+#, c-format
+msgid "There is no function named `%s'"
+msgstr "`%s' isimli bir iþlev yok"
+
+#: info/infokey.c:145
+#, c-format
+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 ""
+"Kopyahakký (C) %s Free Software Foundation, Inc.\n"
+"Garanti yoktur. Bu yazýlýmý GNU Genel Kamu Lisansý koþullarý\n"
+"altýnda daðýtabilirsiniz. Bu konuda daha fazla bilgi için\n"
+"COPYING isimli dosyaya baký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:1500
+#, 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:1503
+#, 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:1516
+#, c-format
+msgid "Error reading infokey file `%s' - short read"
+msgstr "infokey dosyasý `%s' okumada hata - çok kýsa"
+
+#: info/infomap.c:1535
+#, 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:1544
+#, 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:1560
+#, 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:1581
+#, 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:1716
+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:1766
+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:69
+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:73
+msgid "Describe command: "
+msgstr "Komut açýklamasý: "
+
+#: info/m-x.c:96
+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:140
+msgid "Cannot execute an `echo-area' command here."
+msgstr "Bir `eko-alaný' komutu burada çalýþtýrýlamaz."
+
+#: info/m-x.c:154
+#, c-format
+msgid "Undefined command: %s"
+msgstr "tanýmlanmamýþ komut: %s"
+
+#: info/m-x.c:160
+msgid "Set the height of the displayed window"
+msgstr "Gösterilen pencerenin yüksekliði belirtilir"
+
+#: info/m-x.c:173
+#, c-format
+msgid "Set screen height to (%d): "
+msgstr "Ekran yüksekliðini (%d) ye ayarlar: "
+
+#: info/makedoc.c:162 info/makedoc.c:170
+#, 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:550
+#, c-format
+msgid "Couldn't manipulate the file %s.\n"
+msgstr "%s dosyasý manipüle edilemedi.\n"
+
+#: info/nodemenu.c:31
+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:202
+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:224
+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:304
+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:317
+msgid "Select visited node: "
+msgstr "Uðramýþ olduðunuz düðümü seçiniz: "
+
+#: info/nodemenu.c:337 info/session.c:2264
+#, c-format
+msgid "The reference disappeared! (%s)."
+msgstr "Referans yokoldu! (%s)."
+
+#: info/session.c:162
+#, 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:620
+msgid "Move down to the next line"
+msgstr "Sonraki satýra (aþaðý) gider"
+
+#: info/session.c:635
+msgid "Move up to the previous line"
+msgstr "Önceki satýra (yukarý) gider"
+
+#: info/session.c:650
+msgid "Move to the end of the line"
+msgstr "Satýr sonuna gider"
+
+#: info/session.c:670
+msgid "Move to the start of the line"
+msgstr "Satýr baþýna gider"
+
+#: info/session.c:860 makeinfo/node.c:1424
+msgid "Next"
+msgstr "Sonraki"
+
+#: info/session.c:863
+msgid "Following Next node..."
+msgstr "Sonraki düðümü izliyor..."
+
+#: info/session.c:881
+msgid "Selecting first menu item..."
+msgstr "Ýlk menü öðesi seçiliyor..."
+
+#: info/session.c:893
+msgid "Selecting Next node..."
+msgstr "Sonraki düðüm seçiliyor..."
+
+#: info/session.c:964
+#, c-format
+msgid "Moving Up %d time(s), then Next."
+msgstr "%d kez Yukarý gidip, Sonrakine geçiliyor."
+
+#: info/session.c:988
+msgid "No more nodes within this document."
+msgstr "Bu belge içinde baþka düðüm yok."
+
+#: info/session.c:1011
+msgid "No `Prev' for this node."
+msgstr "Bu düðüm için baþka `Önceki' yok."
+
+#: info/session.c:1014 info/session.c:1073
+msgid "Moving Prev in this window."
+msgstr "Bu pencerede Öncekine gidiliyor."
+
+#: info/session.c:1030
+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:1034
+msgid "Moving Up in this window."
+msgstr "Bu pencere içinde Yukarýya gidiliyor."
+
+#: info/session.c:1084
+msgid "Moving to `Prev's last menu item."
+msgstr "`Önceki'nin son menü öðesine gidiliyor."
+
+#: info/session.c:1095
+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:1111
+msgid "Move backwards or up through node structure"
+msgstr "Düðüm yapýsý içinde geriye ya da yukarýya gider"
+
+#: info/session.c:1205
+msgid "Scroll forward in this window"
+msgstr "Bu pencerede ileriye doðru kaydýrýr"
+
+#: info/session.c:1213
+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:1221
+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:1229
+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:1237
+msgid "Scroll backward in this window"
+msgstr "Bu pencerede geriye doðru kaydýrýr"
+
+#: info/session.c:1245
+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:1254
+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:1262
+msgid ""
+"Scroll backward in this window staying within node and set default window "
+"size"
+msgstr "geri ve set öntanýmlý"
+
+#: info/session.c:1270
+msgid "Move to the start of this node"
+msgstr "Bu düðümün baþlangýcýna gider"
+
+#: info/session.c:1277
+msgid "Move to the end of this node"
+msgstr "Bu düðümün sonuna gider"
+
+#: info/session.c:1284
+msgid "Scroll down by lines"
+msgstr "Aþaðýya doðru satýr kaydýrýr"
+
+#: info/session.c:1301
+msgid "Scroll up by lines"
+msgstr "Yukarýya doðru satýr kaydýrýr"
+
+#: info/session.c:1319
+msgid "Scroll down by half screen size"
+msgstr "Aþaðýya doðru yarým ekran boyutu kaydýrýr"
+
+#: info/session.c:1345
+msgid "Scroll up by half screen size"
+msgstr "Yukarýya doðru yarým ekran boyutu kaydýrýr"
+
+#: info/session.c:1374
+msgid "Select the next window"
+msgstr "Sonraki pencereyi seçer"
+
+#: info/session.c:1413
+msgid "Select the previous window"
+msgstr "Önceki pencereyi seçer"
+
+#: info/session.c:1464
+msgid "Split the current window"
+msgstr "Mevcut pencereyi böler"
+
+#: info/session.c:1545
+msgid "Delete the current window"
+msgstr "Mevcut pencereyi siler"
+
+#: info/session.c:1553
+msgid "Cannot delete a permanent window"
+msgstr "Kalýcý bir pencere silinemez"
+
+#: info/session.c:1585
+msgid "Delete all other windows"
+msgstr "Diðer tüm pencereleri siler"
+
+#: info/session.c:1631
+msgid "Scroll the other window"
+msgstr "Diðer pencereyi kaydýrýr"
+
+#: info/session.c:1652
+msgid "Scroll the other window backward"
+msgstr "Diðer pencereyi geriye doðru kaydýrýr"
+
+#: info/session.c:1658
+msgid "Grow (or shrink) this window"
+msgstr "Bu pencereyi büyütür (ya da küçültür)"
+
+#: info/session.c:1669
+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:1676
+msgid "Toggle the state of line wrapping in the current window"
+msgstr "Mevcut penceredeki satýr sarma durumunu deðiþtirir"
+
+#: info/session.c:1848
+msgid "Select the Next node"
+msgstr "Sonraki düðümü seçer"
+
+#: info/session.c:1856
+msgid "Select the Prev node"
+msgstr "Önceki düðümü seçer"
+
+#: info/session.c:1864
+msgid "Select the Up node"
+msgstr "Üstteki düðümü seçer"
+
+#: info/session.c:1871
+msgid "Select the last node in this file"
+msgstr "Bu dosyadaki son düðümü seçer"
+
+#: info/session.c:1898 info/session.c:1931
+msgid "This window has no additional nodes"
+msgstr "Bu pencerenin baþka düðümü yok"
+
+#: info/session.c:1904
+msgid "Select the first node in this file"
+msgstr "Bu dosyadaki ilk düðümü seçer"
+
+#: info/session.c:1938
+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:1944
+msgid "Select this menu item"
+msgstr "Bu menü öðesini seçer"
+
+#: info/session.c:1977
+#, c-format
+msgid "There aren't %d items in this menu."
+msgstr "Bu menüde %d adet öðe yok."
+
+#: info/session.c:2171 info/session.c:2172
+#, c-format
+msgid "Menu item (%s): "
+msgstr "Menü öðesi (%s): "
+
+#: info/session.c:2175
+msgid "Menu item: "
+msgstr "Menü öðesi: "
+
+#: info/session.c:2182 info/session.c:2183
+#, c-format
+msgid "Follow xref (%s): "
+msgstr "Ýzlenecek xref (%s): "
+
+#: info/session.c:2186
+msgid "Follow xref: "
+msgstr "Ýzlenecek xref: "
+
+#: info/session.c:2315
+msgid "Read a menu item and select its node"
+msgstr "Bir menü öðesini okur ve düðümünü seçer"
+
+#: info/session.c:2323
+msgid "Read a footnote or cross reference and select its node"
+msgstr "Oku yada ve select"
+
+#: info/session.c:2329
+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:2353
+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:2381
+msgid "Read a node name and select it"
+msgstr "Bir düðüm adý okur ve seçer"
+
+#: info/session.c:2436 info/session.c:2441
+msgid "Goto node: "
+msgstr "Düðüme gider: "
+
+#: info/session.c:2505
+#, c-format
+msgid "No menu in node `%s'."
+msgstr "Menüsü olmayan düðüm `%s'."
+
+#: info/session.c:2551
+#, c-format
+msgid "No menu item `%s' in node `%s'."
+msgstr "`%2$s' düðümünde `%1$s' menü öðesi yok."
+
+#: info/session.c:2581
+#, 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:2631
+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:2633
+msgid "Follow menus: "
+msgstr "Menüleri izle: "
+
+#: info/session.c:2826
+msgid "Find the node describing program invocation"
+msgstr "Program çaðýrmayý açýklayan düðümü bulur"
+
+#: info/session.c:2828
+#, c-format
+msgid "Find Invocation node of [%s]: "
+msgstr "[%s]'in çaðýrma düðümünü bulur: "
+
+#: info/session.c:2866
+msgid "Read a manpage reference and select it"
+msgstr "Bir klavuz sayfasý baþvurusunu okur ve seçer"
+
+#: info/session.c:2870
+msgid "Get Manpage: "
+msgstr "Alýnacak klavuz sayfasý: "
+
+#: info/session.c:2900
+msgid "Select the node `Top' in this file"
+msgstr "Bu dosyadaki `En Üst' düðümü seç"
+
+#: info/session.c:2906
+msgid "Select the node `(dir)'"
+msgstr "`(dizin)' düðümünü seç"
+
+#: info/session.c:2923 info/session.c:2925
+#, c-format
+msgid "Kill node (%s): "
+msgstr "Düðümü öldür (%s): "
+
+#: info/session.c:2977
+#, c-format
+msgid "Cannot kill node `%s'"
+msgstr "Öldürülemeyen düðüm `%s' "
+
+#: info/session.c:2987
+msgid "Cannot kill the last node"
+msgstr "Son düðüm öldürülemiyor"
+
+#: info/session.c:3073
+msgid "Select the most recently selected node"
+msgstr "En son seçilen düðümü seçer"
+
+#: info/session.c:3079
+msgid "Kill this node"
+msgstr "Bu düðümü öldürür"
+
+#: info/session.c:3087
+msgid "Read the name of a file and select it"
+msgstr "Bir dosyanýn adýný okur ve seçer"
+
+#: info/session.c:3091
+msgid "Find file: "
+msgstr "Dosyayý bul: "
+
+#: info/session.c:3108
+#, c-format
+msgid "Cannot find `%s'."
+msgstr "`%s' bulunamýyor."
+
+#: info/session.c:3151 info/session.c:3269
+#, c-format
+msgid "Could not create output file `%s'."
+msgstr "Çýktý dosyasý `%s' oluþturulamýyor."
+
+#: info/session.c:3165 info/session.c:3287 info/session.c:3347
+msgid "Done."
+msgstr "Bitti."
+
+#: info/session.c:3220
+#, c-format
+msgid "Writing node %s..."
+msgstr "%s düðümü yazýlýyor..."
+
+#: info/session.c:3296
+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:3331
+#, c-format
+msgid "Cannot open pipe to `%s'."
+msgstr "Veri yolu `%s''e açýlamýyor."
+
+#: info/session.c:3337
+#, c-format
+msgid "Printing node %s..."
+msgstr "%s düðümü yazdýrýlýyor..."
+
+#: info/session.c:3567
+#, c-format
+msgid "Searching subfile %s ..."
+msgstr "%s altdosyasý aranýyor ..."
+
+#: info/session.c:3619
+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:3626
+msgid "Read a string and search for it"
+msgstr "Bir dizge okur ve (onu) arar"
+
+#: info/session.c:3634
+msgid "Read a string and search backward for it"
+msgstr "Bir dizge okur ve (onu) geriye doðru arar"
+
+#: info/session.c:3670 info/session.c:3677
+#, c-format
+msgid "%s%sfor string [%s]: "
+msgstr "%s%s için dizge [%s]: "
+
+#: info/session.c:3671 info/session.c:3678
+msgid "Search backward"
+msgstr "Geriye doðru ara"
+
+#: info/session.c:3672 info/session.c:3678
+msgid "Search"
+msgstr "Ara"
+
+#: info/session.c:3673 info/session.c:3679
+msgid " case-sensitively "
+msgstr " büyük/küçük harf duyarlý þekilde "
+
+#: info/session.c:3674 info/session.c:3679
+msgid " "
+msgstr " "
+
+#: info/session.c:3718
+msgid "Search failed."
+msgstr "Arama baþarýsýz"
+
+#: info/session.c:3736
+msgid "Repeat last search in the same direction"
+msgstr "Son aramayý ayný yönde yineler"
+
+#: info/session.c:3739 info/session.c:3749
+msgid "No previous search string"
+msgstr "Daha önceden arama dizgesi yok"
+
+#: info/session.c:3746
+msgid "Repeat last search in the reverse direction"
+msgstr "Son aramayý ters yönde yineler"
+
+#: info/session.c:3765 info/session.c:3771
+msgid "Search interactively for a string as you type it"
+msgstr "Bir dizgeyi siz yazarken etkileþimli þekilde arar"
+
+#: info/session.c:3851
+msgid "I-search backward: "
+msgstr "I-arama, geriye doðru: "
+
+#: info/session.c:3853
+msgid "I-search: "
+msgstr "I-arama: "
+
+#: info/session.c:3878 info/session.c:3880
+msgid "Failing "
+msgstr "Baþarýlamýyor "
+
+#: info/session.c:4340
+msgid "Move to the previous cross reference"
+msgstr "Önceki çapraz baþvuruya gider"
+
+#: info/session.c:4349
+msgid "Move to the next cross reference"
+msgstr "Sonraki çapraz baþvuruya gider"
+
+#: info/session.c:4359
+msgid "Select reference or menu item appearing on this line"
+msgstr "Bu satýrdaki referans ya da menü öðesini seçer"
+
+#: info/session.c:4382
+msgid "Cancel current operation"
+msgstr "Mevcut iþlemi iptal eder"
+
+#: info/session.c:4389
+msgid "Quit"
+msgstr "Çýk"
+
+#: info/session.c:4398
+msgid "Move the cursor to a specific line of the window"
+msgstr "Ýmleci pencerenin belirli bir satýrýna taþýr"
+
+#: info/session.c:4430
+msgid "Redraw the display"
+msgstr "Görüntüyü yeniden çizer"
+
+#: info/session.c:4467
+msgid "Quit using Info"
+msgstr "Info'dan çýkar"
+
+#: info/session.c:4480
+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:4491
+#, c-format
+msgid "Unknown command (%s)."
+msgstr "Bilinmeyen komut (%s)."
+
+#: info/session.c:4494
+#, c-format
+msgid "\"%s\" is invalid"
+msgstr "\"%s\" geçersiz"
+
+#: info/session.c:4495
+#, c-format
+msgid "`%s' is invalid"
+msgstr "`%s' geçersiz"
+
+#: info/session.c:4709
+msgid "Add this digit to the current numeric argument"
+msgstr "Mevcut sayýsal argümana bu sayýyý ekle"
+
+#: info/session.c:4718
+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:4733
+msgid "Internally used by \\[universal-argument]"
+msgstr "Dahili olarak \\[universal argument] tarafýndan kullanýlýyor"
+
+#: info/tilde.c:338
+#, 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:64
+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:68
+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:74
+msgid "Explain the use of a variable"
+msgstr "Bir deðiþkenin kullanýmýný açýklar"
+
+#: info/variables.c:80
+msgid "Describe variable: "
+msgstr "Açýklanacak deðiþken: "
+
+#: info/variables.c:99
+msgid "Set the value of an Info variable"
+msgstr "Bir Info deðiþkeninin deðerini belirler"
+
+#: info/variables.c:105
+msgid "Set variable: "
+msgstr "Deðiþkeni ata: "
+
+#: info/variables.c:123
+#, c-format
+msgid "Set %s to value (%d): "
+msgstr "%s'e atanacak deðer (%d): "
+
+#: info/variables.c:164
+#, c-format
+msgid "Set %s to value (%s): "
+msgstr "%s'e atanacak deðer (%s): "
+
+#: info/window.c:1138
+msgid "--*** Tags out of Date ***"
+msgstr "..*** Eskimiþ Etiketler ***"
+
+#: info/window.c:1149
+msgid "-----Info: (), lines ----, "
+msgstr "-----Info: (), satýr ----, "
+
+#: info/window.c:1156
+#, c-format
+msgid "-%s---Info: %s, %d lines --%s--"
+msgstr "-%s---Info: %s, %d satýr --%s--"
+
+#: info/window.c:1160
+#, c-format
+msgid "-%s%s-Info: (%s)%s, %d lines --%s--"
+msgstr "-%s%s-Info: (%s)%s, %d satýr --%s--"
+
+#: info/window.c:1167
+#, c-format
+msgid " Subfile: %s"
+msgstr " Altdosya: %s"
+
+#: lib/getopt.c:551 lib/getopt.c:570
+#, c-format
+msgid "%s: option `%s' is ambiguous\n"
+msgstr "%s: `%s' seçeneði belirsiz\n"
+
+#: lib/getopt.c:603 lib/getopt.c:607
+#, 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"
+
+#: lib/getopt.c:616 lib/getopt.c:621
+#, 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"
+
+#: lib/getopt.c:667 lib/getopt.c:689 lib/getopt.c:1020 lib/getopt.c:1042
+#, c-format
+msgid "%s: option `%s' requires an argument\n"
+msgstr "%s: `%s' seçeneði bir argümanla kullanýlýr\n"
+
+#: lib/getopt.c:727 lib/getopt.c:730
+#, c-format
+msgid "%s: unrecognized option `--%s'\n"
+msgstr "%s: `--%s' seçeneði bilinmiyor\n"
+
+#: lib/getopt.c:738 lib/getopt.c:741
+#, c-format
+msgid "%s: unrecognized option `%c%s'\n"
+msgstr "%s: `%c%s' seçeneði bilinmiyor\n"
+
+#: lib/getopt.c:796 lib/getopt.c:799
+#, c-format
+msgid "%s: illegal option -- %c\n"
+msgstr "%s: kuraldýþý seçenek -- %c\n"
+
+#: lib/getopt.c:805 lib/getopt.c:808
+#, c-format
+msgid "%s: invalid option -- %c\n"
+msgstr "%s: geçersiz seçenek -- %c\n"
+
+#: lib/getopt.c:863 lib/getopt.c:882 lib/getopt.c:1095 lib/getopt.c:1116
+#, c-format
+msgid "%s: option requires an argument -- %c\n"
+msgstr "%s: seçenek bir argümanla kullanýlýr -- %c\n"
+
+#: lib/getopt.c:935 lib/getopt.c:954
+#, c-format
+msgid "%s: option `-W %s' is ambiguous\n"
+msgstr "%s: `-W %s' seçeneði belirsiz\n"
+
+#: lib/getopt.c:978 lib/getopt.c:999
+#, 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"
+
+#: makeinfo/cmds.c:520 makeinfo/cmds.c:542
+#, c-format
+msgid "arguments to @%s ignored"
+msgstr "@%s'ye argümanlar yok sayýldý"
+
+#: makeinfo/cmds.c:585
+msgid "January"
+msgstr "Ocak"
+
+#: makeinfo/cmds.c:585
+msgid "February"
+msgstr "Þubat"
+
+#: makeinfo/cmds.c:585
+msgid "March"
+msgstr "Mart"
+
+#: makeinfo/cmds.c:585
+msgid "April"
+msgstr "Nisan"
+
+#: makeinfo/cmds.c:585
+msgid "May"
+msgstr "Mayýs"
+
+#: makeinfo/cmds.c:586
+msgid "June"
+msgstr "Haziran"
+
+#: makeinfo/cmds.c:586
+msgid "July"
+msgstr "Temmuz"
+
+#: makeinfo/cmds.c:586
+msgid "August"
+msgstr "Aðustos"
+
+#: makeinfo/cmds.c:586
+msgid "September"
+msgstr "Eylül"
+
+#: makeinfo/cmds.c:586
+msgid "October"
+msgstr "Ekim"
+
+#: makeinfo/cmds.c:587
+msgid "November"
+msgstr "Kasým"
+
+#: makeinfo/cmds.c:587
+msgid "December"
+msgstr "Aralýk"
+
+#: makeinfo/cmds.c:936
+#, c-format
+msgid "unlikely character %c in @var"
+msgstr "@var içinde düþük olasýlýklý karakter %c"
+
+#: makeinfo/cmds.c:979
+msgid "@sc argument all uppercase, thus no effect"
+msgstr "@sc argümaný tamamen büyükharf(le yazýlmýþ), etkisiz"
+
+#: makeinfo/cmds.c:1034
+#, c-format
+msgid "`{' expected, but saw `%c'"
+msgstr "`{' beklenirdi, `%c' görüldü"
+
+#: makeinfo/cmds.c:1074
+msgid "end of file inside verb block"
+msgstr "fiil bloðu içinde dosya sonu"
+
+#: makeinfo/cmds.c:1082
+#, c-format
+msgid "`}' expected, but saw `%c'"
+msgstr "`}' beklenirdi, `%c' görüldü"
+
+#: makeinfo/cmds.c:1112
+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:1305
+#, c-format
+msgid "%c%s is obsolete"
+msgstr "%c%s kullanýmdan kalkmýþ"
+
+#: makeinfo/cmds.c:1414
+#, 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:1763 makeinfo/cmds.c:1819 makeinfo/footnote.c:82
+#, c-format
+msgid "Bad argument to %c%s"
+msgstr "%c%s'ye hatalý argüman"
+
+#: makeinfo/cmds.c:1773 makeinfo/makeinfo.c:4142
+msgid "asis"
+msgstr "asis"
+
+#: makeinfo/cmds.c:1775 makeinfo/cmds.c:1805 makeinfo/makeinfo.c:4144
+msgid "none"
+msgstr "yok"
+
+#: makeinfo/cmds.c:1789
+#, c-format
+msgid "Bad argument to @%s"
+msgstr "@%s'ye hatalý argüman"
+
+#: makeinfo/cmds.c:1803
+msgid "insert"
+msgstr "ekle"
+
+#: makeinfo/defun.c:84
+msgid "Missing `}' in @def arg"
+msgstr "@def arg'da kayýp `}'"
+
+#: makeinfo/defun.c:403
+msgid "Function"
+msgstr "Ýþlev"
+
+#: makeinfo/defun.c:406
+msgid "Macro"
+msgstr "Makro"
+
+#: makeinfo/defun.c:409
+msgid "Special Form"
+msgstr "Özel Form"
+
+#: makeinfo/defun.c:413
+msgid "Variable"
+msgstr "Deðiþken"
+
+#: makeinfo/defun.c:416
+msgid "User Option"
+msgstr "Kullanýcý Seçeneði"
+
+#: makeinfo/defun.c:420
+msgid "Instance Variable"
+msgstr "Durum Deðiþkeni"
+
+#: makeinfo/defun.c:424
+msgid "Method"
+msgstr "Yöntem"
+
+#: makeinfo/defun.c:500 makeinfo/defun.c:505 makeinfo/defun.c:545
+#: makeinfo/defun.c:644 makeinfo/xml.c:2229
+msgid "of"
+msgstr "kapalý"
+
+#: makeinfo/defun.c:509 makeinfo/defun.c:513 makeinfo/defun.c:517
+#: makeinfo/defun.c:551 makeinfo/defun.c:650 makeinfo/xml.c:2234
+msgid "on"
+msgstr "açýk"
+
+#: 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:435
+#, c-format
+msgid "%s: getwd: %s, %s\n"
+msgstr "%s: getwd: %s, %s\n"
+
+#: makeinfo/files.c:638
+#, c-format
+msgid "`%s' omitted before output filename"
+msgstr "`%s' çýktý dosya adýndan önce yok sayýldý"
+
+#: makeinfo/files.c:646
+#, c-format
+msgid "`%s' omitted since writing to stdout"
+msgstr "stdout'a yazýlýyor olduðundan `%s' yok sayýldý"
+
+#: makeinfo/files.c:694
+msgid "Output buffer not empty."
+msgstr "Çýktý tamponu boþ deðil"
+
+#: makeinfo/footnote.c:150
+#, 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:165
+#, c-format
+msgid "No closing brace for footnote `%s'"
+msgstr "Dipnot `%s' için kapama } yok"
+
+#: makeinfo/footnote.c:198
+msgid "Footnote defined without parent node"
+msgstr "Dipnot, ebeveyn düðümsüz tanýmlanmýþ"
+
+#: makeinfo/footnote.c:210
+msgid "Footnotes inside footnotes are not allowed"
+msgstr "Dipnot içi dipnotlara izin verilmez"
+
+#: makeinfo/footnote.c:302 makeinfo/index.c:189
+msgid "Footnotes"
+msgstr "Dipnotlar"
+
+#: makeinfo/html.c:87
+#, c-format
+msgid "%s: could not open --css-file: %s"
+msgstr "%s: açýlamayan --css-dosyasý: %s"
+
+#: makeinfo/html.c:172
+#, c-format
+msgid "%s:%d: --css-file ended in comment"
+msgstr "%s:%d: --css-dosyasý yorum içinde sonlandý"
+
+#: makeinfo/html.c:207
+msgid "Untitled"
+msgstr "Adsýz"
+
+#: makeinfo/html.c:422
+msgid "[unexpected] no html tag to pop"
+msgstr "hayýr :"
+
+#: makeinfo/html.c:752
+#, c-format
+msgid "[unexpected] invalid node name: `%s'"
+msgstr "[beklenmeyen] geçersiz düðüm ismi: `%s'"
+
+#: makeinfo/index.c:169
+#, c-format
+msgid "Unknown index `%s'"
+msgstr "Bilinmeyen indeks `%s'"
+
+#: makeinfo/index.c:234
+#, c-format
+msgid "Info cannot handle `:' in index entry `%s'"
+msgstr "Info, `%s' indeks girdisindeki `:''yi kullanamýyor"
+
+#: makeinfo/index.c:412
+#, c-format
+msgid "Index `%s' already exists"
+msgstr "Ýndeks `%s' zaten mevcut"
+
+#: makeinfo/index.c:455
+#, 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:661
+msgid "(line )"
+msgstr "(satýr )"
+
+#: makeinfo/index.c:669
+#, c-format
+msgid "(line %*d)"
+msgstr "(satýr %*d)"
+
+#: makeinfo/index.c:750
+#, c-format
+msgid "Unknown index `%s' in @printindex"
+msgstr "@printindex içinde bilinmeyen indeks `%s'"
+
+#: makeinfo/index.c:819
+#, c-format
+msgid "Entry for index `%s' outside of any node"
+msgstr "`%s' indeks girdisi tüm düðümlerin dýþýnda"
+
+#: makeinfo/index.c:822 makeinfo/index.c:858
+msgid "(outside of any node)"
+msgstr "(tüm düðümlerin dýþýnda)"
+
+#: makeinfo/index.c:919 makeinfo/index.c:925
+msgid "See "
+msgstr "Bkz "
+
+#: makeinfo/insertion.c:160
+msgid "@item not allowed in argument to @itemize"
+msgstr "@item, @itemize'a argüman olarak kullanýlamaz"
+
+#: makeinfo/insertion.c:238
+msgid "Broken-Type in insertion_type_pname"
+msgstr "insertion_type_pname içinde Kýrýk-Tip"
+
+#: makeinfo/insertion.c:334
+msgid "Enumeration stack overflow"
+msgstr "Numaralandýrma yýðýn taþmasý"
+
+#: makeinfo/insertion.c:366
+#, c-format
+msgid "lettering overflow, restarting at %c"
+msgstr "harflendirme taþmasý, %c'den yeniden baþlanýyor"
+
+#: makeinfo/insertion.c:631
+#, 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:719
+#, c-format
+msgid "%cfloat environments cannot be nested"
+msgstr "%cfloat çevreler içiçelendirilemez"
+
+#: makeinfo/insertion.c:973
+#, c-format
+msgid "`@end' expected `%s', but saw `%s'"
+msgstr "`@end' `%1$s' beklerdi, `%2$s' gördü"
+
+#: makeinfo/insertion.c:1337
+#, c-format
+msgid "No matching `%cend %s'"
+msgstr "Eþleþen `%cend %s' yok"
+
+#: makeinfo/insertion.c:1592
+#, c-format
+msgid "%s requires letter or digit"
+msgstr "%s harf ya da rakam gerektirir"
+
+#: makeinfo/insertion.c:1687
+msgid "end of file inside verbatim block"
+msgstr "verbatim bloðu içinde dosya sonu"
+
+#: makeinfo/insertion.c:1913
+#, c-format
+msgid "@%s not meaningful outside `@float' environment"
+msgstr "`@float' çevresi dýþýnda @%s anlamlý deðil"
+
+#: makeinfo/insertion.c:1949
+msgid "@menu seen before first @node, creating `Top' node"
+msgstr "önce Üst"
+
+#: makeinfo/insertion.c:1950
+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:1962
+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:2018
+#, 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:2032
+#, c-format
+msgid "@%s not meaningful outside `@titlepage' environment"
+msgstr "`@titlepage' çevresi dýþýnda @%s anlamlý deðil"
+
+#: makeinfo/insertion.c:2063
+#, c-format
+msgid "Unmatched `%c%s'"
+msgstr "Eþleþmeyen `%c%s'"
+
+#: makeinfo/insertion.c:2068
+#, c-format
+msgid "`%c%s' needs something after it"
+msgstr "`%c%s' sonrasýnda birþeyler gereklidir"
+
+#: makeinfo/insertion.c:2074
+#, 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:2171
+#, c-format
+msgid "@%s not meaningful inside `@%s' block"
+msgstr "`@%s' bloðu içinde @%s anlamlý deðil"
+
+#: makeinfo/insertion.c:2180
+#, c-format
+msgid "@itemx not meaningful inside `%s' block"
+msgstr "`%s' bloðunun içinde @itemx anlamlý deðil"
+
+#: makeinfo/insertion.c:2356
+#, c-format
+msgid "%c%s found outside of an insertion block"
+msgstr "%c%s, bir ekleme bloðunun dýþýnda bulundu"
+
+#: makeinfo/lang.c:580
+#, 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:655
+#, c-format
+msgid "unrecognized encoding name `%s'"
+msgstr "tanýnmayan kodlama adý `%s'"
+
+#: makeinfo/lang.c:663
+#, c-format
+msgid "sorry, encoding `%s' not supported"
+msgstr "üzgünüm, `%s' kodlamasý desteklenmiyor"
+
+#: makeinfo/lang.c:715
+#, c-format
+msgid "invalid encoded character `%s'"
+msgstr "geçersiz kodlanmýþ karakter `%s'"
+
+#: makeinfo/lang.c:1009
+#, 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:1013
+#, 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:355
+#, 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:586
+#, c-format
+msgid "%cend macro not found"
+msgstr "%cson makrosu bulunamadý"
+
+#: makeinfo/macro.c:624
+msgid "@quote-arg only useful for single-argument macros"
+msgstr "@quote arg.ý yalnýzca tek argümanlý makrolarda yararlý"
+
+#: makeinfo/macro.c:660
+#, c-format
+msgid "mismatched @end %s with @%s"
+msgstr "@%s ile eþleþmeyen @end %s"
+
+#: makeinfo/makeinfo.c:184
+#, c-format
+msgid "Too many errors! Gave up.\n"
+msgstr "Çok sayýda hata! Vazgeçildi.\n"
+
+#: makeinfo/makeinfo.c:302
+#, c-format
+msgid "%s:%d: warning: "
+msgstr "%s:%d: uyarý: "
+
+#: makeinfo/makeinfo.c:321 makeinfo/makeinfo.c:2260
+#, c-format
+msgid "Misplaced %c"
+msgstr "Yanlýþ yerleþtirilmiþ %c"
+
+#: makeinfo/makeinfo.c:340
+#, c-format
+msgid "Try `%s --help' for more information.\n"
+msgstr "Daha fazla bilgi için `%s --help' yazýn.\n"
+
+#: makeinfo/makeinfo.c:343
+#, c-format
+msgid "Usage: %s [OPTION]... TEXINFO-FILE...\n"
+msgstr "Kullaným: %s [SEÇENEK]... TEXINFO-DOSYASI...\n"
+
+#: makeinfo/makeinfo.c:346
+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:350
+#, c-format
+msgid ""
+"General options:\n"
+" --error-limit=NUM quit after NUM errors (default %d).\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"
+" --reference-limit=NUM warn about at most NUM references (default %"
+"d).\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"
+" --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"
+" --reference-limit=ADET en fazla ADET referansta uyar (öntanýmlý %d).\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:364
+#, 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 çýktýsý üretir.\n"
+" --html Info yerine HTML çýktýsý üretir.\n"
+" --xml Info yerine XML (TexinfoML) çýktýsý üretir.\n"
+" --plaintext Info yerine salt metin çýktýsý üretir.\n"
+
+#: makeinfo/makeinfo.c:372
+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 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 (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 çýktýsýnda düðüm ayraçlarýný, Node:\n"
+" satýrlarýný ve menüleri baskýlar (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:386
+#, c-format
+msgid ""
+"Options for Info and plain text:\n"
+" --enable-encoding output accented and special characters in\n"
+" Info output based on @documentencoding.\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\n"
+" in which they are defined (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"
+" --enable-encoding aksanlý ve özel karakterlerin çýktýsýný "
+"@documentencoding'e\n"
+" dayalý olarak Info çýktýsýna yazar.\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-indet=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:403
+msgid ""
+"Options for HTML:\n"
+" --css-include=FILE include FILE in HTML <style> output;\n"
+" read stdin if FILE is -.\n"
+msgstr ""
+"HTML seçenekleri:\n"
+" --css-include=DOSYA DOSYA'yý HTML <style> çýktýsýnda içer;\n"
+" eðer DOSYA - ise stdin'i oku.\n"
+
+#: makeinfo/makeinfo.c:409
+#, 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:416
+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:425
+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:444
+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:452
+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"
+" makeinfe --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:603
+#, 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:647 makeinfo/makeinfo.c:673 makeinfo/makeinfo.c:692
+#: makeinfo/makeinfo.c:722 makeinfo/makeinfo.c:743
+#, 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:660
+#, c-format
+msgid "%s: could not open macro expansion output `%s'"
+msgstr "%s:makro geniþleme çýktýsý `%s' açýlamadý"
+
+#: makeinfo/makeinfo.c:665
+#, 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:707
+#, 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:732
+#, 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:806
+#, c-format
+msgid "%s: missing file argument.\n"
+msgstr "%s: dosya argümaný eksik.\n"
+
+#: makeinfo/makeinfo.c:997 makeinfo/makeinfo.c:3991
+#, c-format
+msgid "Multiline command %c%s used improperly"
+msgstr "Çok satýrlý komut %c%s uygunsuz kullanýldý"
+
+#: makeinfo/makeinfo.c:1000
+#, c-format
+msgid "Expected `%s'"
+msgstr "`%s' gerekir"
+
+#: makeinfo/makeinfo.c:1479
+#, c-format
+msgid "Can't create directory `%s': %s"
+msgstr "`%1$s' dizini oluþturulamýyor: %2$s"
+
+#: makeinfo/makeinfo.c:1525
+#, c-format
+msgid "No `%s' found in `%s'"
+msgstr "`%2$s' içinde `%1$s' yok"
+
+#: makeinfo/makeinfo.c:1605
+#, 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:1638
+#, 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:1673
+#, c-format
+msgid "This is %s, produced by makeinfo version %s from %s.\n"
+msgstr "Bu %1$s, makeinfo sürümü %2$s tarafýndan, %3$s'den üretilmiþtir.\n"
+
+#: makeinfo/makeinfo.c:1709
+#, 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:1773
+#, 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:2034
+#, c-format
+msgid "Unknown command `%s'"
+msgstr "Bilinmeyen komut `%s'"
+
+#: makeinfo/makeinfo.c:2056
+#, 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:2314
+#, c-format
+msgid "%c%s expected braces"
+msgstr "%c%s küme parantezi bekledi"
+
+#: makeinfo/makeinfo.c:2327
+msgid "Unmatched }"
+msgstr "Eþleþmemiþ }"
+
+#: makeinfo/makeinfo.c:2375
+msgid "NO_NAME!"
+msgstr "ÝSÝMSÝZ!"
+
+#: makeinfo/makeinfo.c:2396
+#, c-format
+msgid "%c%s missing close brace"
+msgstr "%c%s eksik kapama }"
+
+#: makeinfo/makeinfo.c:3309
+#, 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:3315
+#, c-format
+msgid "No such file `%s'"
+msgstr "`%s' adýnda dosya yok"
+
+#: makeinfo/makeinfo.c:3447
+#, 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:3456
+msgid "@image missing filename argument"
+msgstr "@image eksik dosyaadý argümaný"
+
+#: makeinfo/makeinfo.c:3675
+#, c-format
+msgid "undefined flag: %s"
+msgstr "tanýmlanmamýþ bayrak: %s"
+
+#: makeinfo/makeinfo.c:3676
+#, c-format
+msgid "{No value for `%s'}"
+msgstr "(`%s' için deðer yok)"
+
+#: makeinfo/makeinfo.c:3728
+#, c-format
+msgid "%c%s requires a name"
+msgstr "%c%s bir isim gerektirir"
+
+#: makeinfo/makeinfo.c:3834
+#, c-format
+msgid "Reached eof before matching @end %s"
+msgstr "Eþleþen @end %s'den önce dosya sonuna ulaþýldý"
+
+#: makeinfo/makeinfo.c:4082
+#, 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:254
+#, c-format
+msgid "ignoring stray text `%s' after @multitable"
+msgstr "@multitable'dan sonraki baþýboþ metin `%s' yoksayýlýyor"
+
+#: makeinfo/multi.c:393
+#, c-format
+msgid "Too many columns in multitable item (max %d)"
+msgstr "Çok-tablolu öðede, çok fazla sütun (maks %d)"
+
+#: makeinfo/multi.c:555
+#, c-format
+msgid "[unexpected] cannot select column #%d in multitable"
+msgstr "[beklenmeyen] çok-tabloluda sütun #%d seçilemiyor"
+
+#: makeinfo/multi.c:584
+msgid "ignoring @tab outside of multitable"
+msgstr "çok-tablolunun dýþýndaki @tab yoksayýlýyor"
+
+#: makeinfo/multi.c:632
+#, c-format
+msgid "** Multicolumn output from last row:\n"
+msgstr "**Son satýrdan çok-sütunlu çýktý:\n"
+
+#: makeinfo/multi.c:635
+#, c-format
+msgid "* column #%d: output = %s\n"
+msgstr "* sütun #%d: çýktý = %s\n"
+
+#: makeinfo/node.c:280
+#, 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:648
+#, c-format
+msgid "Formatting node %s...\n"
+msgstr "Düðüm %s biçimleniyor...\n"
+
+#: makeinfo/node.c:716
+#, 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:879
+#, 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:920 makeinfo/node.c:1151
+#, 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:923
+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:925 makeinfo/node.c:1154
+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:955
+#, 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:991
+msgid "Next:"
+msgstr "Sonraki:"
+
+#: makeinfo/node.c:1007
+msgid "Previous:"
+msgstr "Önceki:"
+
+#: makeinfo/node.c:1021
+msgid "Up:"
+msgstr "Yukarý:"
+
+#: makeinfo/node.c:1148
+#, 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:1153
+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:1347
+#, 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:1363
+msgid "Menu"
+msgstr "Menü"
+
+#: makeinfo/node.c:1365
+msgid "Cross"
+msgstr "Çapraz"
+
+#: makeinfo/node.c:1447
+#, 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:1450
+#, c-format
+msgid "This node (%s) has the bad Prev"
+msgstr "Bu düðüm (%s) hatalý Önceki'ne sahip"
+
+#: makeinfo/node.c:1462
+msgid "Prev"
+msgstr "Önceki"
+
+#: makeinfo/node.c:1505
+#, 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:1509
+#, c-format
+msgid "This node (%s) has the bad Next"
+msgstr "Bu düðüm (%s) hatalý Sonraki'ne sahip"
+
+#: makeinfo/node.c:1521
+#, 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:1524
+msgid "Up"
+msgstr "Yukarý"
+
+#: makeinfo/node.c:1590
+#, 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:1619
+#, c-format
+msgid "node `%s' has been referenced %d times"
+msgstr "düðüm `%s''e %d kez baþvuruldu"
+
+#: makeinfo/node.c:1633
+#, c-format
+msgid "unreferenced node `%s'"
+msgstr "baþvurulmamýþ düðüm `%s'"
+
+#: makeinfo/node.c:1723
+#, c-format
+msgid "Removing %s\n"
+msgstr "%s siliniyor\n"
+
+#: makeinfo/node.c:1727
+#, 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:562
+#, c-format
+msgid "Internal error (search_sectioning) \"%s\"!"
+msgstr "Dahili hata (search_sectioning) \"%s\"!"
+
+#: makeinfo/sectioning.c:623
+#, 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:639
+#, 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:647
+#, c-format
+msgid "Here is the %ctop node"
+msgstr "Ýþte %cüst düðüm"
+
+#: makeinfo/sectioning.c:663
+#, c-format
+msgid "%ctop used before %cnode, defaulting to %s"
+msgstr "%cüst, %cdüðümden önce kullanýldý, %s'e öntanýmlanýyor"
+
+#: makeinfo/toc.c:197 makeinfo/toc.c:271 makeinfo/toc.c:273
+msgid "Table of Contents"
+msgstr "Ýçindekiler Tablosu"
+
+#: makeinfo/toc.c:304 makeinfo/toc.c:337 makeinfo/toc.c:339
+msgid "Short Contents"
+msgstr "Kýsa Ýçerik"
+
+#: makeinfo/xml.c:1605
+#, c-format
+msgid "@image file `%s' unreadable: %s"
+msgstr "@image dosyasý `%1$s' okunamýyor: %2$s"
+
+#: makeinfo/xml.c:2097
+msgid ""
+"@headitem as the last item of @multitable produces invalid Docbook documents"
+msgstr "@multitable'ýn son öðesi @headitem geçersiz Docbook belgeleri üretiyor"
+
+#: util/install-info.c:154
+#, c-format
+msgid "%s: warning: "
+msgstr "%s: uyarý: "
+
+#: util/install-info.c:203
+#, c-format
+msgid " for %s"
+msgstr " %s için"
+
+#: util/install-info.c:426
+#, 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"
+
+#: util/install-info.c:434
+#, c-format
+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 ""
+"Kullaným: %s [SEÇENEK]... [INFO-DOSYASI [DIR-DOSYASI]]\n"
+"\n"
+"Info dizin dosyasý DIR-DOSYASI içindeki INFO-DOSYASI'ndan dizin girdilerini\n"
+"kurar ya da siler.\n"
+"\n"
+"Seçenekler:\n"
+" --delete INFO-DOSYASI için mevcut girdileri DIR-DOSYASI'ndan "
+"siler;\n"
+" yeni girdi eklemez.\n"
+" --dir-file=ÝSÝM Info dizin dosyasýnýn adýný belirler.\n"
+" Bu, DIR-DOSYASI argümanýný kullanmaya eþdeðerdir.\n"
+" --entry=METÝN METÝN'i bir Info dizin girdisi olarak ekler.\n"
+" METÝN, bir Info öðe satýrý þeklinde olmalý\n"
+" artý, boþlukla baþlayan sýfýr ya da daha çok fazladan "
+"satýrý bulunmalýdýr.\n"
+" Birden fazla girdi belirtirseniz hepsi eklenir.\n"
+" Hiç girdi belirtmezseniz, (girdiler) Info dosyasýndaki "
+"bilgiden\n"
+" belirlenir.\n"
+" --help bu yardýmý görüntüler ve çýkar.\n"
+" --info-file=DOSYA dizine kurulacak Info dosyasýný belirler.\n"
+" Bu, INFO-DOSYASI argümanýný kullanmaya eþdeðerdir.\n"
+" --info-dir=DIR --dir-file=DIR/dir ile ayný.\n"
+" --item=METÝN --entry METÝN ile ayný.\n"
+" Bir Info dizin girdisi, gerçekte bir menü öðesidir.\n"
+" --quiet uyarýlarý baskýlar.\n"
+" --remove --delete ile ayný.\n"
+" --section=KIS bu dosyanýn girdilerini dizinin KIS bölümüne koyar.\n"
+" Bir bölümden fazlasýný belirtirseniz, tüm girdiler\n"
+" herbir bölüme eklenir.\n"
+" Hiçbir bölüm belirtmezseniz, (bölümler) Info "
+"dosyasýndaki bilgiden\n"
+" belirlenir.\n"
+" --version sürüm bilgisini görüntüler ve çýkar.\n"
+
+#: util/install-info.c:488
+#, 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"
+
+#: util/install-info.c:513
+#, 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"
+
+#: util/install-info.c:600
+#, c-format
+msgid "%s: empty file"
+msgstr "%s: boþ dosya"
+
+#: util/install-info.c:913 util/install-info.c:953
+msgid "START-INFO-DIR-ENTRY without matching END-INFO-DIR-ENTRY"
+msgstr "Eþleþen END-INFO-DIR-ENTRY'siz START-INFO-DIR-ENTRY"
+
+#: util/install-info.c:948
+msgid "END-INFO-DIR-ENTRY without matching START-INFO-DIR-ENTRY"
+msgstr "Eþleþen START-INFO-DIR-ENTRY'siz END-INFO-DIR-ENTRY"
+
+#: util/install-info.c:1191 util/install-info.c:1201
+#, c-format
+msgid "%s: already have dir file: %s\n"
+msgstr "%s: zaten dir dosyasý var: %s\n"
+
+#: util/install-info.c:1236
+#, c-format
+msgid "%s: Specify the Info file only once.\n"
+msgstr "%s: Info dosyasýný yalnýzca bir kez belirtin.\n"
+
+#: util/install-info.c:1284
+#, c-format
+msgid "excess command line argument `%s'"
+msgstr "fazladan komut satýrý argümaný `%s'"
+
+#: util/install-info.c:1288
+msgid "No input file specified; try --help for more information."
+msgstr "Girdi dosyasý belirtilmemiþ; daha fazla bilgi için --help deneyin."
+
+#: util/install-info.c:1291
+msgid "No dir file specified; try --help for more information."
+msgstr "dizin dosyasý belirtilmemiþ; daha fazla bilgi için --help deneyin."
+
+#: util/install-info.c:1313
+#, c-format
+msgid "no info dir entry in `%s'"
+msgstr "`%s' içinde info dizin girdisi yok"
+
+#: util/install-info.c:1426
+#, c-format
+msgid "menu item `%s' already exists, for file `%s'"
+msgstr "`%2$s' dosyasý için menü öðesi `%1$s' zaten mevcut"
+
+#: util/install-info.c:1449
+#, c-format
+msgid "no entries found for `%s'; nothing deleted"
+msgstr "`%s' için girdi bulunamadý; hiçbir þey silinmedi"
+
+#: util/texindex.c:252
+msgid "display this help and exit"
+msgstr "bu yardýmý görüntüler ve çýkar"
+
+#: util/texindex.c:254
+msgid "keep temporary files around after processing"
+msgstr "iþlemden sonra geçici dosyalarý etrafta bulundurur"
+
+#: util/texindex.c:256
+msgid "do not keep temporary files around after processing (default)"
+msgstr "iþlemden sonra geçici dosyalarý etrafta bulundurmaz (öntanýmlý)"
+
+#: util/texindex.c:258
+msgid "send output to FILE"
+msgstr "çýktýyý DOSYA'ya gönderir"
+
+#: util/texindex.c:260
+msgid "display version information and exit"
+msgstr "sürüm bilgisini görüntüler ve çýkar"
+
+#: util/texindex.c:270
+#, c-format
+msgid "Usage: %s [OPTION]... FILE...\n"
+msgstr "Kullaným: %s [SEÇENEK]... DOSYA...\n"
+
+#: util/texindex.c:271
+#, 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:274
+#, 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:276
+#, c-format
+msgid ""
+"\n"
+"Options:\n"
+msgstr ""
+"\n"
+"Seçenekler:\n"
+
+#: util/texindex.c:876 util/texindex.c:910 util/texindex.c:983
+#: util/texindex.c:1011
+#, c-format
+msgid "%s: not a texinfo index file"
+msgstr "%s: bir texinfo indeks dosyasý deðil"
+
+#: util/texindex.c:968
+#, c-format
+msgid "failure reopening %s"
+msgstr "%s'i yeniden açmada hata"
+
+#: util/texindex.c:1218
+#, c-format
+msgid "No page number in %s"
+msgstr "%s'de sayfa numarasý yok"
+
+#: util/texindex.c:1291
+#, c-format
+msgid "entry %s follows an entry with a secondary name"
+msgstr "%s girdisi, ikincil isimli bir girdiyi takip ediyor"
+
+#~ msgid "\"\" is invalid"
+#~ msgstr "\"\" geçersiz"
+
+#~ msgid "%s is an invalid ISO code, using %c"
+#~ msgstr "%s geçersiz bir ISO kodu, %c kullanýlýyor"
+
+#~ msgid "Cannot specify more than one macro expansion output"
+#~ msgstr "Birden fazla makro geniþleme çýktýsý belirtilemez"
+
+#~ msgid "File exists, but is not a directory"
+#~ msgstr "Dosya mevcut, ancak bir dizin deðil"
+
+#~ msgid "First argument to cross-reference may not be empty"
+#~ msgstr "Çapraz baþvuru kurulacak ilk argüman boþ olmayabilir"
+
+#~ msgid "see "
+#~ msgstr "bkz "
+
+#~ msgid "`.' or `,' must follow cross reference, not %c"
+#~ msgstr "`.' ya da `,' çapraz baþvuruyu izlemelidir, %c'yi deðil"
+
+#~ msgid "First argument to @inforef may not be empty"
+#~ msgstr "@inforef'e ilk argüman boþ olmayabilir"
+
+#~ msgid "Node:"
+#~ msgstr "Düðüm:"
+
+#~ msgid "%s: TOC should be here, but it was not found"
+#~ msgstr "%s: Ýçindekiler burada olmalýydý, ama bulunamadý"
+
+#~ msgid "%s: Specify the Info directory only once.\n"
+#~ msgstr "%s: Info dizinini yalnýzca bir kez belirtin.\n"
diff --git a/macros/texinfo/contrib/texinfo-hu/texinfo/po/zh_CN.gmo b/macros/texinfo/contrib/texinfo-hu/texinfo/po/zh_CN.gmo
new file mode 100644
index 0000000000..2c5fc24235
--- /dev/null
+++ b/macros/texinfo/contrib/texinfo-hu/texinfo/po/zh_CN.gmo
Binary files differ
diff --git a/macros/texinfo/contrib/texinfo-hu/texinfo/po/zh_CN.po b/macros/texinfo/contrib/texinfo-hu/texinfo/po/zh_CN.po
new file mode 100644
index 0000000000..3ac4534110
--- /dev/null
+++ b/macros/texinfo/contrib/texinfo-hu/texinfo/po/zh_CN.po
@@ -0,0 +1,3050 @@
+# SOME DESCRIPTIVE TITLE.
+# 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.
+#
+msgid ""
+msgstr ""
+"Project-Id-Version: texinfo 4.2\n"
+"Report-Msgid-Bugs-To: bug-texinfo@gnu.org\n"
+"POT-Creation-Date: 2004-12-21 16:20-0800\n"
+"PO-Revision-Date: 2002-05-06 16:10+0800\n"
+"Last-Translator: Wang Li <charles@linux.net.cn>\n"
+"Language-Team: Chinese (simplified) <i18n-translation@lists.linux.net.cn>\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=gb2312\n"
+"Content-Transfer-Encoding: 8bit\n"
+
+#: info/echo-area.c:284 info/session.c:689
+msgid "Move forward a character"
+msgstr "ÏòÇ°Òƶ¯Ò»¸ö×Ö·û"
+
+#: info/echo-area.c:296 info/session.c:705
+msgid "Move backward a character"
+msgstr "ÏòºóÒƶ¯Ò»¸ö×Ö·û"
+
+#: info/echo-area.c:308
+msgid "Move to the start of this line"
+msgstr "Òƶ¯µ½±¾ÐеĿªÍ·"
+
+#: info/echo-area.c:313
+msgid "Move to the end of this line"
+msgstr "Òƶ¯µ½±¾ÐеÄĩβ"
+
+#: info/echo-area.c:321 info/session.c:723
+msgid "Move forward a word"
+msgstr "ÏòÇ°Òƶ¯Ò»¸öµ¥´Ê"
+
+#: info/echo-area.c:361 info/session.c:772
+msgid "Move backward a word"
+msgstr "ÏòºóÒƶ¯Ò»¸öµ¥´Ê"
+
+#: info/echo-area.c:401
+msgid "Delete the character under the cursor"
+msgstr "ɾ³ý¹â±êλÖõÄ×Ö·û"
+
+#: info/echo-area.c:431
+msgid "Delete the character behind the cursor"
+msgstr "ɾ³ý¹â±êÖ®ºóµÄ×Ö·û"
+
+#: info/echo-area.c:452
+msgid "Cancel or quit operation"
+msgstr "È¡Ïû»òÍ˳ö²Ù×÷"
+
+#: info/echo-area.c:467
+msgid "Accept (or force completion of) this line"
+msgstr "½ÓÊÜ(»òÇ¿ÖÆÍê³É)±¾ÐÐ"
+
+#: info/echo-area.c:472
+msgid "Insert next character verbatim"
+msgstr "Ô­Ñù²åÈëÏÂÒ»¸ö×Ö·û"
+
+#: info/echo-area.c:480
+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:653
+msgid "Kill the word preceding the cursor"
+msgstr "¼ôÇйâ±ê֮ǰµÄµ¥´Ê"
+
+#: info/echo-area.c:868 info/echo-area.c:924
+msgid "No completions"
+msgstr "ûÓв¹Æë"
+
+#: info/echo-area.c:870
+msgid "Not complete"
+msgstr "δ²¹Æë"
+
+#: info/echo-area.c:911
+msgid "List possible completions"
+msgstr "ÁоٿÉÄܵIJ¹Æë"
+
+#: info/echo-area.c:928
+msgid "Sole completion"
+msgstr "ΨһµÄ²¹Æë"
+
+#: info/echo-area.c:937
+msgid "One completion:\n"
+msgstr "Ò»¸ö²¹Æ룺\n"
+
+#: info/echo-area.c:938
+#, c-format
+msgid "%d completions:\n"
+msgstr "%d ¸ö²¹Æ룺\n"
+
+#: info/echo-area.c:1085
+msgid "Insert completion"
+msgstr "²åÈë²¹Æë"
+
+#: info/echo-area.c:1220
+msgid "Building completions..."
+msgstr "ÕýÔÚ´´½¨²¹Æë..."
+
+#: info/echo-area.c:1340
+msgid "Scroll the completions window"
+msgstr "¹ö¶¯²¹Æë´°¿Ú"
+
+#: info/footnotes.c:213
+msgid "Footnotes could not be displayed"
+msgstr "ÎÞ·¨ÏÔʾ½Å×¢"
+
+#: info/footnotes.c:239
+msgid "Show the footnotes associated with this node in another window"
+msgstr "ÔÚÁíÒ»¸ö´°¿ÚÖÐÏÔʾÓڸýڵãÏà¹ØµÄ½Å×¢"
+
+#: info/footnotes.h:26
+msgid "---------- Footnotes ----------"
+msgstr "---------- ½Å×¢ ----------"
+
+#: info/indices.c:172
+msgid "Look up a string in the index for this file"
+msgstr "ÔÚ±¾ÎļþµÄË÷ÒýÖÐËÑË÷×Ö·û´®"
+
+#: info/indices.c:199
+msgid "Finding index entries..."
+msgstr "ÕýÔÚËÑË÷Ë÷ÒýÌõÄ¿..."
+
+#: info/indices.c:207
+msgid "No indices found."
+msgstr "δÕÒµ½Ë÷Òý¡£"
+
+#: info/indices.c:217
+msgid "Index entry: "
+msgstr "Ë÷ÒýÌõÄ¿£º"
+
+#: info/indices.c:325
+msgid ""
+"Go to the next matching index item from the last `\\[index-search]' command"
+msgstr "´Ó×îºóÒ»¸ö¡°\\[index-search]¡±ÃüÁîתÒƵ½ÏÂÒ»¸öÆ¥ÅäµÄË÷ÒýÏîÄ¿"
+
+#: info/indices.c:335
+msgid "No previous index search string."
+msgstr "ûÓÐÉÏÒ»¸öË÷ÒýËÑË÷×Ö·û´®¡£"
+
+#: info/indices.c:342
+msgid "No index entries."
+msgstr "ûÓÐË÷ÒýÌõÄ¿¡£"
+
+#: info/indices.c:375
+#, fuzzy, c-format
+msgid "No %sindex entries containing `%s'."
+msgstr "ûÓÐ %sË÷ÒýÌõÄ¿º¬ÓС°%s¡±¡£"
+
+#: info/indices.c:376
+msgid "more "
+msgstr "¸ü¶à "
+
+#: info/indices.c:386
+msgid "CAN'T SEE THIS"
+msgstr "¿´²»µ½Õâ¸ö"
+
+#: info/indices.c:422
+#, fuzzy, 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:541
+#, fuzzy, c-format
+msgid "Scanning indices of `%s'..."
+msgstr "ÕýÔÚËÑË÷¡°%s¡±µÄË÷Òý..."
+
+#: info/indices.c:596
+#, fuzzy, c-format
+msgid "No available info files have `%s' in their indices."
+msgstr "ÔÚ¿ÉÓÃµÄ info ÎļþµÄË÷ÒýÖоù²»º¬ÓС°%s¡±¡£"
+
+#: info/indices.c:622
+msgid "Grovel all known info file's indices for a string and build a menu"
+msgstr "ÕûÀíËùÓÐÒÑÖª info Îļþº¬Óб»²éѯ×Ö·û´®µÄË÷Òý²¢½¨Á¢Ò»¸ö²Ëµ¥"
+
+#: info/indices.c:626
+msgid "Index apropos: "
+msgstr "Ë÷Òýº¬ÓУº"
+
+#: info/indices.c:654
+#, 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 "³¢ÊÔ --¸ü¶àµÄÇóÖúÐÅÏ¢¡£\n"
+
+#: info/info.c:295 makeinfo/makeinfo.c:766 util/install-info.c:1266
+#: util/texindex.c:343
+#, fuzzy, c-format
+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 ""
+"°æȨËùÓÐ (C) %s ×ÔÓÉÈí¼þ»ù½ð»á¡£\n"
+"±¾Èí¼þûÓÐÈκε£±£¡£Äú¿ÉÒÔ°´ÕÕͨÓÃ\n"
+"¹«¹²Ðí¿ÉÖ¤(GPL)µÄÌõ¿î·¢Ðб¾Èí¼þ¡£\n"
+"Õâ·½ÃæµÄÏêÇ飬ÇëÔĶÁÃûΪ COPYING µÄÎļþ¡£\n"
+
+#: info/info.c:498
+#, c-format
+msgid "no index entries found for `%s'\n"
+msgstr "ÕÒ²»µ½º¬ÓС°%s¡±µÄË÷Òý\n"
+
+#: info/info.c:590
+msgid " -b, --speech-friendly be friendly to speech synthesizers.\n"
+msgstr ""
+
+#: info/info.c:597
+#, fuzzy, c-format
+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 -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"
+
+#: info/info.c:635 info/infokey.c:918 makeinfo/makeinfo.c:465
+#: util/install-info.c:466 util/texindex.c:292
+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:669
+#, c-format
+msgid "Cannot find node `%s'."
+msgstr "ÎÞ·¨ÕÒµ½½Úµã¡°%s¡±¡£"
+
+#: info/info.c:670
+#, c-format
+msgid "Cannot find node `(%s)%s'."
+msgstr "ÎÞ·¨ÕÒµ½½Úµã¡°(%s)%s¡±¡£"
+
+#: info/info.c:671
+msgid "Cannot find a window!"
+msgstr "ÎÞ·¨ÕÒµ½Ò»¸ö´°¿Ú£¡"
+
+#: info/info.c:672
+msgid "Point doesn't appear within this window's node!"
+msgstr "¹â±êûÓгöÏÖÔڸô°¿ÚµÄ½ÚµãÖ®ÖУ¡"
+
+#: info/info.c:673
+msgid "Cannot delete the last window."
+msgstr "ÎÞ·¨É¾³ý×îºóµÄ´°¿Ú¡£"
+
+#: info/info.c:674
+msgid "No menu in this node."
+msgstr "¸Ã½ÚµãÖÐûÓв˵¥¡£"
+
+#: info/info.c:675
+msgid "No footnotes in this node."
+msgstr "¸Ã½ÚµãÖÐûÓнÅ×¢¡£"
+
+#: info/info.c:676
+msgid "No cross references in this node."
+msgstr "¸Ã½ÚµãÖÐûÓн»²æÒýÓá£"
+
+#: info/info.c:677
+#, c-format
+msgid "No `%s' pointer for this node."
+msgstr "¸Ã½ÚµãÖÐûÓС°%s¡±Ö¸Õë"
+
+#: info/info.c:678
+#, c-format
+msgid "Unknown Info command `%c'; try `?' for help."
+msgstr "δ֪µÄ Info ÃüÁî¡°%c¡±£»ÇëÒÔ¡°?¡±»ñµÃ°ïÖú¡£"
+
+#: info/info.c:679
+#, c-format
+msgid "Terminal type `%s' is not smart enough to run Info."
+msgstr "ÖÕ¶ËÀàÐÍ¡°%s¡±µÄÄÜÁ¦²»×ãÒÔÖ§³Ö Info µÄÔËÐС£"
+
+#: info/info.c:680
+msgid "You are already at the last page of this node."
+msgstr "ÄúÒѾ­ÔڸýڵãµÄ×îºóÒ»¸öÒ³ÃæÖÐÁË¡£"
+
+#: info/info.c:681
+msgid "You are already at the first page of this node."
+msgstr "ÄúÒѾ­ÔڸýڵãµÄµÚÒ»Ò³ÖÐÁË¡£"
+
+#: info/info.c:682
+msgid "Only one window."
+msgstr "Ö»ÓÐÒ»¸ö´°¿Ú¡£"
+
+#: info/info.c:683
+msgid "Resulting window would be too small."
+msgstr "½á¹û´°¿Ú½«»á̫С¡£"
+
+#: info/info.c:684
+msgid "Not enough room for a help window, please delete a window."
+msgstr "ûÓÐ×ã¹»µÄ¿Õ¼äÓÃÓÚÇóÖú´°¿Ú£¬Çëɾ³ýÒ»¸ö´°¿Ú¡£"
+
+#: info/infodoc.c:46 info/infodoc.c:95
+msgid ""
+"Basic Commands in Info Windows\n"
+"******************************\n"
+msgstr ""
+"Info ´°¿ÚÖеĻù±¾ÃüÁî\n"
+"******************************\n"
+
+#: info/infodoc.c:49
+msgid "\\%-10[quit-help] Quit this help.\n"
+msgstr "\\%-10[quit-help] Í˳ö¸ÃÇóÖú¡£\n"
+
+#: info/infodoc.c:50
+msgid "\\%-10[quit] Quit Info altogether.\n"
+msgstr "\\%-10[quit] Ò»²¢Í˳ö Info¡£\n"
+
+#: info/infodoc.c:51
+msgid "\\%-10[get-info-help-node] Invoke the Info tutorial.\n"
+msgstr "\\%-10[get-info-help-node] µ÷Óà Info ½Ì³Ì¡£\n"
+
+#: info/infodoc.c:53 info/infodoc.c:102
+msgid ""
+"Selecting other nodes:\n"
+"----------------------\n"
+msgstr ""
+"Ñ¡ÔñÆäËü½Úµã£º\n"
+"----------------------\n"
+
+#: info/infodoc.c:55
+msgid "\\%-10[next-node] Move to the \"next\" node of this node.\n"
+msgstr "\\%-10[next-node] Òƶ¯µ½±¾½ÚµãµÄ¡°ÏÂÒ»¸ö¡±½Úµã¡£\n"
+
+#: info/infodoc.c:56
+msgid "\\%-10[prev-node] Move to the \"previous\" node of this node.\n"
+msgstr "\\%-10[prev-node] Òƶ¯µ½±¾½ÚµãµÄ¡°ÉÏÒ»¸ö¡±½Úµã¡£\n"
+
+#: info/infodoc.c:57
+msgid "\\%-10[up-node] Move \"up\" from this node.\n"
+msgstr "\\%-10[up-node] Òƶ¯µ½±¾½ÚµãµÄ¡°Éϲ㡱½Úµã¡£\n"
+
+#: info/infodoc.c:58
+msgid ""
+"\\%-10[menu-item] 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:60
+msgid ""
+"\\%-10[xref-item] Follow a cross reference. Reads name of reference.\n"
+msgstr "\\%-10[xref-item] ¸úËæ½»²æÒýÓ᣶ÁÈ¡ÒýÓõÄÃû³Æ¡£\n"
+
+#: info/infodoc.c:61
+msgid "\\%-10[history-node] Move to the last node seen in this window.\n"
+msgstr "\\%-10[history-node] Òƶ¯µ½±¾´°¿ÚµÄ×îºóÒ»¸ö¿É¼ûµÄ½Úµã¡£\n"
+
+#: info/infodoc.c:62
+msgid ""
+"\\%-10[move-to-next-xref] Skip to next hypertext link within this node.\n"
+msgstr "\\%-10[move-to-next-xref] Ìøתµ½±¾½ÚµãÖеÄÏÂÒ»¸ö³¬Îı¾Á¬½Ó¡£\n"
+
+#: info/infodoc.c:63
+msgid ""
+"\\%-10[move-to-prev-xref] Skip to previous hypertext link within this "
+"node.\n"
+msgstr "\\%-10[move-to-prev-xref] Ìøתµ½±¾½ÚµãÖеÄÉÏÒ»¸ö³¬Îı¾Á¬½Ó¡£\n"
+
+#: info/infodoc.c:64
+msgid ""
+"\\%-10[select-reference-this-line] Follow the hypertext link under cursor.\n"
+msgstr "\\%-10[select-reference-this-line] ¸úËæ¹â±êϵij¬Îı¾Á¬½Ó¡£\n"
+
+#: info/infodoc.c:65
+msgid ""
+"\\%-10[dir-node] Move to the `directory' node. Equivalent to `\\[goto-"
+"node] (DIR)'.\n"
+msgstr ""
+"\\%-10[dir-node] Òƶ¯µ½¡°directory¡±½Úµã¡£µÈ¼ÛÓÚ¡°\\[goto-node] (DIR)¡±¡£\n"
+
+#: info/infodoc.c:66
+msgid ""
+"\\%-10[top-node] Move to the Top node. Equivalent to `\\[goto-node] Top'.\n"
+msgstr "\\%-10[top-node] Òƶ¯µ½¶¥²ã½Úµã¡£µÈ¼ÛÓÚ¡°\\[goto-node] Top¡±¡£\n"
+
+#: info/infodoc.c:68 info/infodoc.c:116
+msgid ""
+"Moving within a node:\n"
+"---------------------\n"
+msgstr ""
+"ÔÚÒ»¸ö½ÚµãÖÐÒƶ¯£º\n"
+"---------------------\n"
+
+#: info/infodoc.c:70
+msgid "\\%-10[beginning-of-node] Go to the beginning of this node.\n"
+msgstr "\\%-10[beginning-of-node] Òƶ¯µ½±¾½ÚµãµÄ¿ªÍ·¡£\n"
+
+#: info/infodoc.c:71
+msgid "\\%-10[end-of-node] Go to the end of this node.\n"
+msgstr "\\%-10[end-of-node] Òƶ¯µ½±¾½ÚµãµÄĩβ¡£\n"
+
+#: info/infodoc.c:72
+#, fuzzy
+msgid "\\%-10[next-line] Scroll forward 1 line.\n"
+msgstr " %-10s ÏòÇ°¹ö¶¯Ò»ÐС£\n"
+
+#: info/infodoc.c:73
+#, fuzzy
+msgid "\\%-10[prev-line] Scroll backward 1 line.\n"
+msgstr " %-10s Ïòºó¹ö¶¯Ò»ÐС£\n"
+
+#: info/infodoc.c:74
+msgid "\\%-10[scroll-forward] Scroll forward a page.\n"
+msgstr "\\%-10[scroll-forward] ÏòÇ°¹ö¶¯Ò»Ò³¡£\n"
+
+#: info/infodoc.c:75
+msgid "\\%-10[scroll-backward] Scroll backward a page.\n"
+msgstr "\\%-10[scroll-backward] Ïòºó¹ö¶¯Ò»Ò³¡£\n"
+
+#: info/infodoc.c:77 info/infodoc.c:125
+msgid ""
+"Other commands:\n"
+"---------------\n"
+msgstr ""
+"ÆäËüÃüÁ\n"
+"---------------\n"
+
+#: info/infodoc.c:79
+msgid "\\%-10[menu-digit] Pick first ... ninth item in node's menu.\n"
+msgstr "\\%-10[menu-digit] Ñ¡È¡½Úµã²Ëµ¥ÖеĵÚÒ»ÖÁµÚ¾Å¸öÏîÄ¿¡£\n"
+
+#: info/infodoc.c:80
+msgid "\\%-10[last-menu-item] Pick last item in node's menu.\n"
+msgstr "\\%-10[last-menu-item] Ñ¡È¡½Úµã²Ëµ¥µÄ×îºóÒ»¸öÏîÄ¿¡£\n"
+
+#: info/infodoc.c:81
+msgid ""
+"\\%-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"
+msgstr ""
+"\\%-10[index-search] ÔÚ±¾ Info ÎļþµÄË÷ÒýÌõÄ¿ÖÐËÑË÷Ö¸¶¨µÄ×Ö·û´®£¬\n"
+" ²¢Ñ¡ÔñµÚÒ»¸öÕÒµ½µÄÌõÄ¿ËùÒýÓõĽڵ㡣\n"
+
+#: info/infodoc.c:83
+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"
+
+#: info/infodoc.c:85
+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] ÏòÇ°ËÑË÷Ö¸¶¨µÄ×Ö·û´®\n"
+" ²¢Ñ¡ÔñËùÕÒµ½µÄÏÂÒ»¸öʵÀýËùÔڵĽڵ㡣\n"
+
+#: info/infodoc.c:87
+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"
+
+#: info/infodoc.c:98
+#, c-format
+msgid " %-10s Quit this help.\n"
+msgstr " %-10s Í˳ö±¾ÇóÖú¡£\n"
+
+#: info/infodoc.c:99
+#, c-format
+msgid " %-10s Quit Info altogether.\n"
+msgstr " %-10s Ò»²¢Í˳ö Info¡£\n"
+
+#: info/infodoc.c:100
+#, c-format
+msgid " %-10s Invoke the Info tutorial.\n"
+msgstr " %-10s µ÷Óà Info ½Ì³Ì¡£\n"
+
+#: info/infodoc.c:104
+#, c-format
+msgid " %-10s Move to the `next' node of this node.\n"
+msgstr " %-10s Òƶ¯µ½±¾½ÚµãµÄ¡°ÏÂÒ»¸ö¡±½Úµã¡£\n"
+
+#: info/infodoc.c:105
+#, c-format
+msgid " %-10s Move to the `previous' node of this node.\n"
+msgstr " %-10s Òƶ¯µ½±¾½ÚµãµÄ¡°ÉÏÒ»¸ö¡±½Úµã¡£\n"
+
+#: info/infodoc.c:106
+#, c-format
+msgid " %-10s Move `up' from this node.\n"
+msgstr " %-10s Òƶ¯µ½±¾½ÚµãµÄ¡°Éϲ㡱½Úµã¡£\n"
+
+#: info/infodoc.c:107
+#, c-format
+msgid " %-10s Pick menu item specified by name.\n"
+msgstr " %-10s Ñ¡È¡ÓÉÃû³ÆÖ¸¶¨µÄ²Ëµ¥ÏîÄ¿¡£\n"
+
+#: info/infodoc.c:108
+msgid " Picking a menu item causes another node to be selected.\n"
+msgstr " Ñ¡È¡Ò»¸ö²Ëµ¥ÏîÄ¿½«Ñ¡ÖÐÁíÒ»¸ö½Úµã¡£\n"
+
+#: info/infodoc.c:109
+#, c-format
+msgid " %-10s Follow a cross reference. Reads name of reference.\n"
+msgstr " %-10s ¸úËæ½»²æÒýÓ᣶ÁÈ¡ÒýÓõÄÃû³Æ¡£\n"
+
+#: info/infodoc.c:110
+#, c-format
+msgid " %-10s Move to the last node seen in this window.\n"
+msgstr " %-10s Òƶ¯µ½±¾´°¿ÚÖеÄ×îºóÒ»¸ö¿É¼ûµÄ½Úµã¡£\n"
+
+#: info/infodoc.c:111
+#, c-format
+msgid " %-10s Skip to next hypertext link within this node.\n"
+msgstr " %-10s Ìøתµ½±¾½ÚµãÖеÄÏÂÒ»¸ö³¬Îı¾Á¬½Ó¡£\n"
+
+#: info/infodoc.c:112
+#, c-format
+msgid " %-10s Follow the hypertext link under cursor.\n"
+msgstr " %-10s ¸úËæ¹â±êλÖõij¬Îı¾Á¬½Ó¡£\n"
+
+#: info/infodoc.c:113
+#, c-format
+msgid " %-10s Move to the `directory' node. Equivalent to `g (DIR)'.\n"
+msgstr " %-10s Òƶ¯µ½¡°directory¡±½Úµã¡£µÈ¼ÛÓÚ¡°g (DIR)¡±¡£\n"
+
+#: info/infodoc.c:114
+#, c-format
+msgid " %-10s Move to the Top node. Equivalent to `g Top'.\n"
+msgstr " %-10s Òƶ¯µ½¶¥²ã½Úµã¡£µÈ¼ÛÓÚ¡°g Top¡±¡£\n"
+
+#: info/infodoc.c:118
+#, c-format
+msgid " %-10s Scroll forward a page.\n"
+msgstr " %-10s ÏòÇ°¹ö¶¯Ò»Ò³¡£\n"
+
+#: info/infodoc.c:119
+#, c-format
+msgid " %-10s Scroll backward a page.\n"
+msgstr " %-10s Ïòºó¹ö¶¯Ò»Ò³¡£\n"
+
+#: info/infodoc.c:120
+#, c-format
+msgid " %-10s Go to the beginning of this node.\n"
+msgstr " %-10s תÒƵ½±¾½ÚµãµÄ¿ªÍ·¡£\n"
+
+#: info/infodoc.c:121
+#, c-format
+msgid " %-10s Go to the end of this node.\n"
+msgstr " %-10s תÒƵ½±¾½ÚµãµÄĩβ¡£\n"
+
+#: info/infodoc.c:122
+#, c-format
+msgid " %-10s Scroll forward 1 line.\n"
+msgstr " %-10s ÏòÇ°¹ö¶¯Ò»ÐС£\n"
+
+#: info/infodoc.c:123
+#, c-format
+msgid " %-10s Scroll backward 1 line.\n"
+msgstr " %-10s Ïòºó¹ö¶¯Ò»ÐС£\n"
+
+#: info/infodoc.c:127
+#, c-format
+msgid " %-10s Pick first ... ninth item in node's menu.\n"
+msgstr " %-10s Ñ¡È¡½Úµã²Ëµ¥ÖеĵÚÒ»ÖÁµÚ¾Å¸öÏîÄ¿¡£\n"
+
+#: info/infodoc.c:128
+#, c-format
+msgid " %-10s Pick last item in node's menu.\n"
+msgstr " %-10s Ñ¡È¡½Úµã²Ëµ¥ÖеÄ×îºóÒ»¸öÏîÄ¿¡£\n"
+
+#: info/infodoc.c:129
+#, c-format
+msgid ""
+" %-10s Search for a specified string in the index entries of this Info\n"
+msgstr " %-10s ÔÚ±¾ Info ÎļþÖеÄË÷ÒýÌõÄ¿ÖÐËÑË÷Ö¸¶¨µÄ×Ö·û´®£¬\n"
+
+#: info/infodoc.c:130
+msgid ""
+" file, and select the node referenced by the first entry "
+"found.\n"
+msgstr " ²¢Ñ¡ÔñµÚÒ»¸öÕÒµ½µÄÌõÄ¿ËùÒýÓõĽڵ㡣\n"
+
+#: info/infodoc.c:131
+#, c-format
+msgid " %-10s Move to node specified by name.\n"
+msgstr " %-10s Òƶ¯µ½ÓÉÃû×ÖÖ¸¶¨µÄ½Úµã¡£\n"
+
+#: info/infodoc.c:132
+msgid ""
+" You may include a filename as well, as in (FILENAME)NODENAME.\n"
+msgstr " Äú»¹¿ÉÒÔͬʱ¸ø³öÎļþÃû£¬ÐÎʽΪ (ÎļþÃû)½ÚµãÃû¡£\n"
+
+#: info/infodoc.c:133
+#, c-format
+msgid " %-10s Search forward for a specified string,\n"
+msgstr " %-10s ÏòÇ°ËÑË÷Ö¸¶¨µÄ×Ö·û´®£¬\n"
+
+#: info/infodoc.c:134 info/infodoc.c:136
+msgid ""
+" and select the node in which the next occurrence is found.\n"
+msgstr " ²¢Ñ¡ÔñÕÒµ½µÄÏÂÒ»¸öʵÀýËùÔڵĽڵ㡣\n"
+
+#: info/infodoc.c:135
+#, c-format
+msgid " %-10s Search backward for a specified string\n"
+msgstr " %-10s ÏòºóËÑË÷Ö¸¶¨µÄ×Ö·û´®\n"
+
+#: info/infodoc.c:316
+msgid "The current search path is:\n"
+msgstr "µ±Ç°ËÑË÷·¾¶Îª£º\n"
+
+#: info/infodoc.c:320
+msgid ""
+"Commands available in Info windows:\n"
+"\n"
+msgstr ""
+"Info ´°¿ÚÖпÉÓõÄÃüÁ\n"
+"\n"
+
+#: info/infodoc.c:324
+msgid ""
+"Commands available in the echo area:\n"
+"\n"
+msgstr ""
+"»ØÏÔÇøÖпÉÓõÄÃüÁ\n"
+"\n"
+
+#: info/infodoc.c:347
+#, c-format
+msgid ""
+"The following commands can only be invoked via %s:\n"
+"\n"
+msgstr ""
+"ÒÔÏÂÃüÁîÖ»ÄÜͨ¹ý %s µ÷Óãº\n"
+"\n"
+
+#: info/infodoc.c:351
+msgid ""
+"The following commands cannot be invoked at all:\n"
+"\n"
+msgstr ""
+"ÒÔÏÂÃüÁî¸ù±¾ÎÞ·¨µ÷Óãº\n"
+"\n"
+
+#: info/infodoc.c:375
+msgid "--- Use `\\[history-node]' or `\\[kill-node]' to exit ---\n"
+msgstr "--- Óá°\\[history-node]¡±»ò¡°\\[kill-node]¡±Í˳ö ---\n"
+
+#: info/infodoc.c:485
+msgid "Display help message"
+msgstr "ÏÔʾÇóÖúÏûÏ¢"
+
+#: info/infodoc.c:503
+msgid "Visit Info node `(info)Help'"
+msgstr "·ÃÎÊ Info ½Úµã¡°(info)Help¡±"
+
+#: info/infodoc.c:641
+msgid "Print documentation for KEY"
+msgstr "´òÓ¡¹ØÓÚ KEY µÄÎĵµ"
+
+#: info/infodoc.c:653
+#, c-format
+msgid "Describe key: %s"
+msgstr "˵Ã÷°´¼ü£º%s"
+
+#: info/infodoc.c:664
+#, c-format
+msgid "ESC %s is undefined."
+msgstr "ESC %s 䶨Òå¡£"
+
+#: info/infodoc.c:680 info/infodoc.c:709
+#, c-format
+msgid "%s is undefined."
+msgstr "%s 䶨Òå¡£"
+
+#: info/infodoc.c:730
+#, c-format
+msgid "%s is defined to %s."
+msgstr "%s ±»¶¨ÒåΪ %s¡£"
+
+#: info/infodoc.c:1153
+msgid "Show what to type to execute a given command"
+msgstr "ÏÔʾִÐиø¶¨ÃüÁîËùÐèµÄ°´¼ü"
+
+#: info/infodoc.c:1157
+msgid "Where is command: "
+msgstr ""
+
+#: info/infodoc.c:1179
+#, c-format
+msgid "`%s' is not on any keys"
+msgstr "¡°%s¡±Î´°ó¶¨µ½Èκΰ´¼ü"
+
+#: info/infodoc.c:1186
+#, c-format
+msgid "%s can only be invoked via %s."
+msgstr "%s ²»ÄÜͨ¹ý %s µ÷Óá£"
+
+#: info/infodoc.c:1190
+#, c-format
+msgid "%s can be invoked via %s."
+msgstr "%s ¿ÉÒÔͨ¹ý %s µ÷Óá£"
+
+#: info/infodoc.c:1195
+#, c-format
+msgid "There is no function named `%s'"
+msgstr "ûÓÐÃûΪ¡°%s¡±µÄº¯Êý"
+
+#: info/infokey.c:145
+#, c-format
+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"
+
+#: 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:1500
+#, c-format
+msgid "Ignoring invalid infokey file `%s' - too small"
+msgstr "ºöÂÔ·Ç·¨µÄ infokey Îļþ¡°%s¡± - ̫С"
+
+#: info/infomap.c:1503
+#, c-format
+msgid "Ignoring invalid infokey file `%s' - too big"
+msgstr "ºöÂÔ·Ç·¨µÄ infokey Îļþ¡°%s¡± - Ì«´ó"
+
+#: info/infomap.c:1516
+#, c-format
+msgid "Error reading infokey file `%s' - short read"
+msgstr "¶ÁÈë infokey Îļþ¡°%s¡±Ê±³ö´í - ¶ÁÈëÖжÏ"
+
+#: info/infomap.c:1535
+#, c-format
+msgid ""
+"Invalid infokey file `%s' (bad magic numbers) -- run infokey to update it"
+msgstr "·Ç·¨µÄ infokey Îļþ¡°%s¡± (´íÎóµÄ magic ±àºÅ) -- ÔËÐÐ infokey ÒÔ±ã¸üÐÂ"
+
+#: info/infomap.c:1544
+#, c-format
+msgid "Your infokey file `%s' is out of date -- run infokey to update it"
+msgstr "ÄúµÄ infokey Îļþ¡°%s¡± ¹ýʱÁË -- ÔËÐÐ infokey ÒÔ±ã¸üÐÂ"
+
+#: info/infomap.c:1560
+#, c-format
+msgid ""
+"Invalid infokey file `%s' (bad section length) -- run infokey to update it"
+msgstr "·Ç·¨µÄ infokey Îļþ¡°%s¡± (´íÎóµÄ½Ú³¤¶È) -- ÔËÐÐ infokey ÒÔ±ã¸üÐÂ"
+
+#: info/infomap.c:1581
+#, c-format
+msgid ""
+"Invalid infokey file `%s' (bad section code) -- run infokey to update it"
+msgstr "·Ç·¨µÄ infokey Îļþ¡°%s¡± (´íÎóµÄ½Ú±àÂë) -- ÔËÐÐ infokey ÒÔ±ã¸üÐÂ"
+
+#: info/infomap.c:1716
+msgid "Bad data in infokey file -- some key bindings ignored"
+msgstr "infokey ÎļþÖеĴíÎóÊý¾Ý -- ºöÂÔijЩ°´¼ü°ó¶¨"
+
+#: info/infomap.c:1766
+msgid "Bad data in infokey file -- some var settings ignored"
+msgstr "infokey ÎļþÖеĴíÎóÊý¾Ý -- ºöÂÔijЩ±äÁ¿ÉèÖÃ"
+
+#: info/m-x.c:69
+msgid "Read the name of an Info command and describe it"
+msgstr "¶ÁÈ¡ Info ÃüÁîÃû³Æ²¢ËµÃ÷Ëü"
+
+#: info/m-x.c:73
+msgid "Describe command: "
+msgstr "˵Ã÷ÃüÁ"
+
+#: info/m-x.c:96
+msgid "Read a command name in the echo area and execute it"
+msgstr "ÔÚ»ØÏÔÇø¶ÁÈëÃüÁîÃû²¢Ö´ÐÐËü"
+
+#: info/m-x.c:140
+msgid "Cannot execute an `echo-area' command here."
+msgstr "ÎÞ·¨ÔÚÕâÀïÔËÐС°»ØÏÔÇø¡±ÃüÁî¡£"
+
+#: info/m-x.c:154
+#, fuzzy, c-format
+msgid "Undefined command: %s"
+msgstr "δ֪µÄÃüÁî¡°%s¡±"
+
+#: info/m-x.c:160
+msgid "Set the height of the displayed window"
+msgstr "É趨ÏÔʾ´°¿ÚµÄ¸ß¶È"
+
+#: info/m-x.c:173
+#, c-format
+msgid "Set screen height to (%d): "
+msgstr "½«ÆÁÄ»¸ß¶ÈÉèÖÃΪ (%d)£º"
+
+#: info/makedoc.c:162 info/makedoc.c:170
+#, c-format
+msgid ""
+" Source files groveled to make this file include:\n"
+"\n"
+msgstr ""
+" ÕûÀíÔ´ÎļþÒÔʹ±¾Îļþ°üÀ¨£º\n"
+"\n"
+
+#: info/makedoc.c:550
+#, c-format
+msgid "Couldn't manipulate the file %s.\n"
+msgstr "ÎÞ·¨²Ù×÷Îļþ %s¡£\n"
+
+#: info/nodemenu.c:31
+msgid ""
+"\n"
+"* Menu:\n"
+" (File)Node Lines Size Containing File\n"
+" ---------- ----- ---- ---------------"
+msgstr ""
+"\n"
+"* ²Ëµ¥£º\n"
+" (Îļþ)½Úµã ÐÐ ´óС º¬ÓÐÎļþ\n"
+" ---------- ----- ---- ---------------"
+
+#: info/nodemenu.c:202
+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:224
+msgid "Make a window containing a menu of all of the currently visited nodes"
+msgstr "ʹһ¸ö´°¿Úº¬ÓÐÒ»¸ö°üÀ¨ËùÓе±Ç°·ÃÎʽڵãµÄ²Ëµ¥"
+
+#: info/nodemenu.c:304
+msgid "Select a node which has been previously visited in a visible window"
+msgstr "Ñ¡ÔñÒ»¸öÒѾ­ÔڿɼûµÄ´°¿ÚÖзÃÎʵĽڵã"
+
+#: info/nodemenu.c:317
+msgid "Select visited node: "
+msgstr "Ñ¡ÔñÒÑ·ÃÎʵĽڵ㣺"
+
+#: info/nodemenu.c:337 info/session.c:2264
+#, c-format
+msgid "The reference disappeared! (%s)."
+msgstr "ÒýÓÃÏûʧÁË£¡(%s)¡£"
+
+#: info/session.c:162
+#, 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:620
+msgid "Move down to the next line"
+msgstr "ÏòÏÂÒƶ¯µ½ÏÂÒ»ÐÐ"
+
+#: info/session.c:635
+msgid "Move up to the previous line"
+msgstr "ÏòÉÏÒƶ¯µ½ÉÏÒ»ÐÐ"
+
+#: info/session.c:650
+msgid "Move to the end of the line"
+msgstr "Òƶ¯µ½ÐеÄĩβ"
+
+#: info/session.c:670
+msgid "Move to the start of the line"
+msgstr "Òƶ¯µ½ÐеĿªÍ·"
+
+#: info/session.c:860 makeinfo/node.c:1424
+msgid "Next"
+msgstr "ÏÂÒ»¸ö"
+
+#: info/session.c:863
+msgid "Following Next node..."
+msgstr "¸úËæÏÂÒ»¸ö½Úµã..."
+
+#: info/session.c:881
+msgid "Selecting first menu item..."
+msgstr "Ñ¡ÔñµÚÒ»¸ö²Ëµ¥Ïî..."
+
+#: info/session.c:893
+msgid "Selecting Next node..."
+msgstr "Ñ¡ÔñÏÂÒ»¸ö½Úµã..."
+
+#: info/session.c:964
+#, c-format
+msgid "Moving Up %d time(s), then Next."
+msgstr "ÏòÉÏÒƶ¯ %d ´Î£¬¶øºóºóÒÆ¡£"
+
+#: info/session.c:988
+msgid "No more nodes within this document."
+msgstr "±¾ÎĵµÖÐûÓиü¶àµÄ½Úµã¡£"
+
+#: info/session.c:1011
+msgid "No `Prev' for this node."
+msgstr "±¾½ÚµãûÓС°ÉÏÒ»¸ö¡±¡£"
+
+#: info/session.c:1014 info/session.c:1073
+msgid "Moving Prev in this window."
+msgstr "ÔÚ±¾´°¿ÚÖÐÏòÉÏÒƶ¯¡£"
+
+#: info/session.c:1030
+msgid "No `Prev' or `Up' for this node within this document."
+msgstr "ÔÚ±¾ÎĵµÖÐûÓб¾½ÚµãµÄ¡°ÉÏÒ»¸ö¡±»ò¡°Éϲ㡱½Úµã¡£"
+
+#: info/session.c:1034
+msgid "Moving Up in this window."
+msgstr "ÔÚ±¾´°¿ÚÖÐÏòÉϲãÒƶ¯"
+
+#: info/session.c:1084
+msgid "Moving to `Prev's last menu item."
+msgstr "Òƶ¯µ½Ç°Ò»¸öµÄ×îºóÒ»¸ö²Ëµ¥ÏîÄ¿¡£"
+
+#: info/session.c:1095
+msgid "Move forwards or down through node structure"
+msgstr "ÔÚ½Úµã½á¹¹ÖÐÏòÇ°»òÏòϲãÒƶ¯"
+
+#: info/session.c:1111
+msgid "Move backwards or up through node structure"
+msgstr "ÔÚ½Úµã½á¹¹ÖÐÏòºó»òÏòÉϲãÒƶ¯"
+
+#: info/session.c:1205
+msgid "Scroll forward in this window"
+msgstr "ÔÚ±¾´°¿ÚÖÐÏòÇ°¹ö¶¯"
+
+#: info/session.c:1213
+msgid "Scroll forward in this window and set default window size"
+msgstr "ÔÚ±¾´°¿ÚÖÐÏòÇ°¹ö¶¯²¢ÉèÖÃΪĬÈÏ´°¿Ú´óС"
+
+#: info/session.c:1221
+msgid "Scroll forward in this window staying within node"
+msgstr "ÔÚ±¾´°¿ÚÖÐÏòÇ°¹ö¶¯(²»´©Ô½½Úµã)"
+
+#: info/session.c:1229
+msgid ""
+"Scroll forward in this window staying within node and set default window size"
+msgstr "ÔÚ±¾´°¿ÚÖÐÏòÇ°¹ö¶¯(²»´©Ô½½Úµã)²¢ÉèÖÃĬÈÏ´°¿Ú´óС"
+
+#: info/session.c:1237
+msgid "Scroll backward in this window"
+msgstr "ÔÚ±¾´°¿ÚÖÐÏòºó¹ö¶¯"
+
+#: info/session.c:1245
+msgid "Scroll backward in this window and set default window size"
+msgstr "ÔÚ±¾´°¿ÚÖÐÏòºó¹ö¶¯²¢ÉèÖÃΪĬÈÏ´°¿Ú´óС"
+
+#: info/session.c:1254
+msgid "Scroll backward in this window staying within node"
+msgstr "ÔÚ±¾´°¿ÚÖÐÏòºó¹ö¶¯(²»´©Ô½½Úµã)"
+
+#: info/session.c:1262
+msgid ""
+"Scroll backward in this window staying within node and set default window "
+"size"
+msgstr "ÔÚ±¾´°¿ÚÖÐÏòºó¹ö¶¯(²»´©Ô½½Úµã)²¢ÉèÖÃΪĬÈÏ´°¿Ú´óС"
+
+#: info/session.c:1270
+msgid "Move to the start of this node"
+msgstr "Òƶ¯µ½±¾½ÚµãµÄ¿ªÍ·"
+
+#: info/session.c:1277
+msgid "Move to the end of this node"
+msgstr "Òƶ¯µ½±¾½ÚµãµÄĩβ"
+
+#: info/session.c:1284
+msgid "Scroll down by lines"
+msgstr "°´ÐÐÏòϹö¶¯"
+
+#: info/session.c:1301
+msgid "Scroll up by lines"
+msgstr "°´ÐÐÏòÉϹö¶¯"
+
+#: info/session.c:1319
+msgid "Scroll down by half screen size"
+msgstr "ÏòϹö¶¯°ë¸öÆÁÄ»"
+
+#: info/session.c:1345
+msgid "Scroll up by half screen size"
+msgstr "ÏòÉϹö¶¯°ë¸öÆÁÄ»"
+
+#: info/session.c:1374
+msgid "Select the next window"
+msgstr "Ñ¡ÔñÏÂÒ»¸ö´°¿Ú"
+
+#: info/session.c:1413
+msgid "Select the previous window"
+msgstr "Ñ¡ÔñÉÏÒ»¸ö´°¿Ú"
+
+#: info/session.c:1464
+msgid "Split the current window"
+msgstr "²ð·Öµ±Ç°´°¿Ú"
+
+#: info/session.c:1545
+msgid "Delete the current window"
+msgstr "ɾ³ýµ±Ç°´°¿Ú"
+
+#: info/session.c:1553
+msgid "Cannot delete a permanent window"
+msgstr "ÎÞ·¨É¾³ýÓÀ¾Ã´°¿Ú"
+
+#: info/session.c:1585
+msgid "Delete all other windows"
+msgstr "ɾ³ýËùÓÐÆäËü´°¿Ú"
+
+#: info/session.c:1631
+msgid "Scroll the other window"
+msgstr "¹ö¶¯ÆäËü´°¿Ú"
+
+#: info/session.c:1652
+msgid "Scroll the other window backward"
+msgstr "Ïòºó¹ö¶¯ÆäËü´°¿Ú"
+
+#: info/session.c:1658
+msgid "Grow (or shrink) this window"
+msgstr "À©´ó(»òËõС)±¾´°¿Ú"
+
+#: info/session.c:1669
+msgid "Divide the available screen space among the visible windows"
+msgstr "ÔڿɼûµÄ´°¿Ú¼ä·ÖÅä¿ÉÓõÄÆÁÄ»¿Õ¼ä"
+
+#: info/session.c:1676
+msgid "Toggle the state of line wrapping in the current window"
+msgstr "ÔÚµ±Ç°´°¿ÚÖÐÇл»ÐоíÈÆ״̬"
+
+#: info/session.c:1848
+msgid "Select the Next node"
+msgstr "Ñ¡ÔñÏÂÒ»¸ö½Úµã"
+
+#: info/session.c:1856
+msgid "Select the Prev node"
+msgstr "Ñ¡ÔñÉÏÒ»¸ö½Úµã"
+
+#: info/session.c:1864
+msgid "Select the Up node"
+msgstr "Ñ¡ÔñÉϲã½Úµã"
+
+#: info/session.c:1871
+msgid "Select the last node in this file"
+msgstr "Ñ¡Ôñ±¾ÎļþµÄ×îºóÒ»¸ö½Úµã"
+
+#: info/session.c:1898 info/session.c:1931
+msgid "This window has no additional nodes"
+msgstr "¸Ã´°¿ÚûÓи½¼Ó½Úµã"
+
+#: info/session.c:1904
+msgid "Select the first node in this file"
+msgstr "Ñ¡Ôñ±¾ÎļþµÄµÚÒ»¸ö½Úµã"
+
+#: info/session.c:1938
+msgid "Select the last item in this node's menu"
+msgstr "Ñ¡Ôñ±¾½Úµã²Ëµ¥ÖеÄ×îºóÒ»Ïî"
+
+#: info/session.c:1944
+msgid "Select this menu item"
+msgstr "Ñ¡Ôñ±¾²Ëµ¥ÏîÄ¿"
+
+#: info/session.c:1977
+#, c-format
+msgid "There aren't %d items in this menu."
+msgstr "±¾²Ëµ¥ÖÐûÓÐµÚ %d ¸öÏîÄ¿¡£"
+
+#: info/session.c:2171 info/session.c:2172
+#, c-format
+msgid "Menu item (%s): "
+msgstr "²Ëµ¥Ïî (%s)£º"
+
+#: info/session.c:2175
+msgid "Menu item: "
+msgstr "²Ëµ¥Ï"
+
+#: info/session.c:2182 info/session.c:2183
+#, c-format
+msgid "Follow xref (%s): "
+msgstr "¸úËæ½»²æÒýÓà (%s)£º"
+
+#: info/session.c:2186
+msgid "Follow xref: "
+msgstr "¸úËæ½»²æÒýÓãº"
+
+#: info/session.c:2315
+msgid "Read a menu item and select its node"
+msgstr "¶ÁÈ¡²Ëµ¥ÏѡÔñËüµÄ½Úµã"
+
+#: info/session.c:2323
+msgid "Read a footnote or cross reference and select its node"
+msgstr "¶ÁÈ¡½Å×¢»ò½»²æÒýÓò¢Ñ¡ÔñËüµÄ½Úµã"
+
+#: info/session.c:2329
+msgid "Move to the start of this node's menu"
+msgstr "Òƶ¯µ½±¾½Úµã²Ëµ¥µÄ¿ªÍ·"
+
+#: info/session.c:2353
+msgid "Visit as many menu items at once as possible"
+msgstr "Á¢¿Ì·ÃÎʾ¡¿ÉÄܶàµÄ²Ëµ¥Ïî"
+
+#: info/session.c:2381
+msgid "Read a node name and select it"
+msgstr "¶ÁÈ¡½ÚµãÃû²¢Ñ¡ÔñËü"
+
+#: info/session.c:2436 info/session.c:2441
+msgid "Goto node: "
+msgstr "תµ½½Úµã£º"
+
+#: info/session.c:2505
+#, c-format
+msgid "No menu in node `%s'."
+msgstr "½Úµã¡°%s¡±ÖÐûÓв˵¥¡£"
+
+#: info/session.c:2551
+#, c-format
+msgid "No menu item `%s' in node `%s'."
+msgstr "½Úµã¡°%2$s¡±ÖÐûÓв˵¥Ïî¡°%1$s¡±¡£"
+
+#: info/session.c:2581
+#, c-format
+msgid "Unable to find node referenced by `%s' in `%s'."
+msgstr "ÎÞ·¨ÔÚ¡°%2$s¡±ÖÐÕÒµ½ÓÉ¡°%1$s¡±ÒýÓõĽڵ㡣"
+
+#: info/session.c:2631
+msgid "Read a list of menus starting from dir and follow them"
+msgstr "¶ÁÈ¡×Ô dir ¿ªÊ¼µÄ²Ëµ¥µÄÁÐ±í²¢¸úËæËüÃÇ"
+
+#: info/session.c:2633
+msgid "Follow menus: "
+msgstr "¸úËæ²Ëµ¥£º"
+
+#: info/session.c:2826
+msgid "Find the node describing program invocation"
+msgstr "Ñ°ÕÒ˵Ã÷³ÌÐòµ÷ÓõĽڵã"
+
+#: info/session.c:2828
+#, c-format
+msgid "Find Invocation node of [%s]: "
+msgstr "Ñ°ÕÒ [%s] µÄµ÷Óýڵ㣺"
+
+#: info/session.c:2866
+msgid "Read a manpage reference and select it"
+msgstr "¶ÁÈ¡Ò»¸ö man ÊÖ²áµÄÒýÓò¢Ñ¡ÔñËü"
+
+#: info/session.c:2870
+msgid "Get Manpage: "
+msgstr "»ñÈ¡ man Êֲ᣺"
+
+#: info/session.c:2900
+msgid "Select the node `Top' in this file"
+msgstr "Ñ¡Ôñ±¾ÎļþÖеġ°¶¥¡±½Úµã"
+
+#: info/session.c:2906
+msgid "Select the node `(dir)'"
+msgstr "Ñ¡Ôñ½Úµã¡°(dir)¡±"
+
+#: info/session.c:2923 info/session.c:2925
+#, c-format
+msgid "Kill node (%s): "
+msgstr "ɾ³ý½Úµã (%s)£º"
+
+#: info/session.c:2977
+#, c-format
+msgid "Cannot kill node `%s'"
+msgstr "ÎÞ·¨É¾³ý½Úµã¡°%s¡±"
+
+#: info/session.c:2987
+msgid "Cannot kill the last node"
+msgstr "ÎÞ·¨É¾³ý×îºóµÄ½Úµã"
+
+#: info/session.c:3073
+msgid "Select the most recently selected node"
+msgstr "Ñ¡Ôñ×î½üÑ¡ÔñµÄ½Úµã"
+
+#: info/session.c:3079
+msgid "Kill this node"
+msgstr "ɾ³ý±¾½Úµã"
+
+#: info/session.c:3087
+msgid "Read the name of a file and select it"
+msgstr "¶ÁÈ¡ÎļþÃû²¢Ñ¡ÔñËü"
+
+#: info/session.c:3091
+msgid "Find file: "
+msgstr "Ñ°ÕÒÎļþ£º"
+
+#: info/session.c:3108
+#, c-format
+msgid "Cannot find `%s'."
+msgstr "ÎÞ·¨Ñ°ÕÒ¡°%s¡±¡£"
+
+#: info/session.c:3151 info/session.c:3269
+#, c-format
+msgid "Could not create output file `%s'."
+msgstr "ÎÞ·¨´´½¨Êä³öÎļþ¡°%s¡±¡£"
+
+#: info/session.c:3165 info/session.c:3287 info/session.c:3347
+msgid "Done."
+msgstr "Íê³É¡£"
+
+#: info/session.c:3220
+#, c-format
+msgid "Writing node %s..."
+msgstr "ÕýÔÚдÈë½Úµã %s..."
+
+#: info/session.c:3296
+msgid "Pipe the contents of this node through INFO_PRINT_COMMAND"
+msgstr "ͨ¹ý¹ÜµÀ½«±¾½ÚµãµÄÄÚÈÝÊä³öµ½ INFO_PRINT_COMMAND"
+
+#: info/session.c:3331
+#, c-format
+msgid "Cannot open pipe to `%s'."
+msgstr "ÎÞ·¨´ò¿ªµ½¡°%s¡±µÄ¹ÜµÀ¡£"
+
+#: info/session.c:3337
+#, c-format
+msgid "Printing node %s..."
+msgstr "ÕýÔÚ´òÓ¡½Úµã %s..."
+
+#: info/session.c:3567
+#, c-format
+msgid "Searching subfile %s ..."
+msgstr "ÕýÔÚËÑË÷×ÓÎļþ %s ..."
+
+#: info/session.c:3619
+msgid "Read a string and search for it case-sensitively"
+msgstr "¶ÁÈ¡Ò»¸ö×Ö·û´®²¢ÒÔ´óСдÃô¸ÐµÄ·½Ê½ËÑË÷Ëü"
+
+#: info/session.c:3626
+msgid "Read a string and search for it"
+msgstr "¶ÁÈ¡Ò»¸ö×Ö·û´®²¢ËÑË÷Ëü"
+
+#: info/session.c:3634
+msgid "Read a string and search backward for it"
+msgstr "¶ÁÈ¡Ò»¸ö×Ö·û´®²¢ÏòºóËÑË÷Ëü"
+
+#: info/session.c:3670 info/session.c:3677
+#, c-format
+msgid "%s%sfor string [%s]: "
+msgstr "%2$s%1$s×Ö·û´® [%3$s]£º"
+
+#: info/session.c:3671 info/session.c:3678
+msgid "Search backward"
+msgstr "ÏòºóËÑË÷"
+
+#: info/session.c:3672 info/session.c:3678
+msgid "Search"
+msgstr "ËÑË÷"
+
+#: info/session.c:3673 info/session.c:3679
+msgid " case-sensitively "
+msgstr "´óСдÃô¸ÐµØ"
+
+#: info/session.c:3674 info/session.c:3679
+msgid " "
+msgstr " "
+
+#: info/session.c:3718
+msgid "Search failed."
+msgstr "ËÑË÷ʧ°Ü¡£"
+
+#: info/session.c:3736
+msgid "Repeat last search in the same direction"
+msgstr "ÒÔÏàͬµÄ·½ÏòÖظ´×îºóµÄËÑË÷"
+
+#: info/session.c:3739 info/session.c:3749
+msgid "No previous search string"
+msgstr "ûÓÐÉÏ´ÎËÑË÷×Ö·û´®"
+
+#: info/session.c:3746
+msgid "Repeat last search in the reverse direction"
+msgstr "ÒÔÏà·´µÄ·½ÏòÖظ´×îºóµÄËÑË÷"
+
+#: info/session.c:3765 info/session.c:3771
+msgid "Search interactively for a string as you type it"
+msgstr "ÔÚÄãÊäÈëµÄͬʱ½»»¥Ê½µØËÑË÷×Ö·û´®"
+
+#: info/session.c:3851
+msgid "I-search backward: "
+msgstr "ÏòºóµÝÔöËÑË÷£º"
+
+#: info/session.c:3853
+msgid "I-search: "
+msgstr "µÝÔöËÑË÷£º"
+
+#: info/session.c:3878 info/session.c:3880
+msgid "Failing "
+msgstr "ʧ°Ü "
+
+#: info/session.c:4340
+msgid "Move to the previous cross reference"
+msgstr "Òƶ¯µ½ÉÏÒ»¸ö½»²æÒýÓÃ"
+
+#: info/session.c:4349
+msgid "Move to the next cross reference"
+msgstr "Òƶ¯µ½ÏÂÒ»¸ö½»²æÒýÓÃ"
+
+#: info/session.c:4359
+msgid "Select reference or menu item appearing on this line"
+msgstr "Ñ¡Ôñ³öÏÖÔÚ±¾ÐÐÖеÄÒýÓûò²Ëµ¥Ïî"
+
+#: info/session.c:4382
+msgid "Cancel current operation"
+msgstr "È¡Ïûµ±Ç°²Ù×÷"
+
+#: info/session.c:4389
+msgid "Quit"
+msgstr "Í˳ö"
+
+#: info/session.c:4398
+msgid "Move the cursor to a specific line of the window"
+msgstr "½«¹â±êÒƶ¯µ½´°¿ÚµÄÖ¸¶¨ÐÐ"
+
+#: info/session.c:4430
+msgid "Redraw the display"
+msgstr "ÖØ»­ÏÔʾ"
+
+#: info/session.c:4467
+msgid "Quit using Info"
+msgstr "Í˳ö Info"
+
+#: info/session.c:4480
+msgid "Run command bound to this key's lowercase variant"
+msgstr "ÔËÐе½°ó¶¨µ½±¾°´¼üµÄСд°æ±¾µÄÃüÁî"
+
+#: info/session.c:4491
+#, c-format
+msgid "Unknown command (%s)."
+msgstr "δ֪µÄÃüÁî (%s)¡£"
+
+#: info/session.c:4494
+#, c-format
+msgid "\"%s\" is invalid"
+msgstr "¡°%s¡±Îª·Ç·¨"
+
+#: info/session.c:4495
+#, fuzzy, c-format
+msgid "`%s' is invalid"
+msgstr "¡°%s¡±Îª·Ç·¨"
+
+#: info/session.c:4709
+msgid "Add this digit to the current numeric argument"
+msgstr "½«±¾Êý×ÖÌí¼Óµ½µ±Ç°ÊýÖµ²ÎÊýÖÐ"
+
+#: info/session.c:4718
+msgid "Start (or multiply by 4) the current numeric argument"
+msgstr "¿ªÆô(»ò³ËÒÔ 4)µ±Ç°ÊýÖµ²ÎÊý"
+
+#: info/session.c:4733
+msgid "Internally used by \\[universal-argument]"
+msgstr "ÓÉ \\[universal-argument] ÄÚ²¿Ê¹ÓÃ"
+
+#: info/tilde.c:338
+#, 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:64
+msgid "The number lines to scroll when the cursor moves out of the window"
+msgstr "µ±¹â±êÒƳö´°¿ÚÊÇËù¹ö¶¯µÄÐÐÊý"
+
+#: info/variables.c:68
+msgid "When \"On\", Info accepts and displays ISO Latin characters"
+msgstr "ÔÚ¡°¿ª¡±Ê±£¬Info ½ÓÊܲ¢ÏÔʾ ISO À­¶¡×Ö·û"
+
+#: info/variables.c:74
+msgid "Explain the use of a variable"
+msgstr "½âÊͱäÁ¿µÄÓ÷¨"
+
+#: info/variables.c:80
+msgid "Describe variable: "
+msgstr "˵Ã÷±äÁ¿£º"
+
+#: info/variables.c:99
+msgid "Set the value of an Info variable"
+msgstr "É趨 Info ±äÁ¿µÄÖµ"
+
+#: info/variables.c:105
+msgid "Set variable: "
+msgstr "É趨±äÁ¿£º"
+
+#: info/variables.c:123
+#, c-format
+msgid "Set %s to value (%d): "
+msgstr "½« %s É趨Ϊֵ (%d)£º"
+
+#: info/variables.c:164
+#, c-format
+msgid "Set %s to value (%s): "
+msgstr "½« %s É趨Ϊֵ (%s)£º"
+
+#: info/window.c:1138
+msgid "--*** Tags out of Date ***"
+msgstr "--*** ±ê¼Ç¹ýÆÚ ***"
+
+#: info/window.c:1149
+msgid "-----Info: (), lines ----, "
+msgstr "-----Info£º()£¬ÐÐ ----£¬"
+
+#: info/window.c:1156
+#, c-format
+msgid "-%s---Info: %s, %d lines --%s--"
+msgstr "-%s---Info£º%s£¬%d ÐÐ --%s--"
+
+#: info/window.c:1160
+#, c-format
+msgid "-%s%s-Info: (%s)%s, %d lines --%s--"
+msgstr "-%s%s-Info£º(%s)%s£¬%d ÐÐ --%s--"
+
+#: info/window.c:1167
+#, c-format
+msgid " Subfile: %s"
+msgstr " ×ÓÎļþ£º%s"
+
+#: lib/getopt.c:551 lib/getopt.c:570
+#, c-format
+msgid "%s: option `%s' is ambiguous\n"
+msgstr "%s£ºÑ¡Ïî¡°%s¡±º¬Òå²»Ã÷È·\n"
+
+#: lib/getopt.c:603 lib/getopt.c:607
+#, c-format
+msgid "%s: option `--%s' doesn't allow an argument\n"
+msgstr "%s£ºÑ¡Ïî¡°--%s¡±²»½ÓÊܲÎÊý\n"
+
+#: lib/getopt.c:616 lib/getopt.c:621
+#, c-format
+msgid "%s: option `%c%s' doesn't allow an argument\n"
+msgstr "%s£ºÑ¡Ïî¡°%c%s¡±²»½ÓÊܲÎÊý\n"
+
+#: lib/getopt.c:667 lib/getopt.c:689 lib/getopt.c:1020 lib/getopt.c:1042
+#, c-format
+msgid "%s: option `%s' requires an argument\n"
+msgstr "%s£ºÑ¡Ïî¡°%s¡±ÐèÒªÒ»¸ö²ÎÊý\n"
+
+#: lib/getopt.c:727 lib/getopt.c:730
+#, c-format
+msgid "%s: unrecognized option `--%s'\n"
+msgstr "%s£º²»ÄÜʶ±ðµÄÑ¡Ïî¡°--%s¡±\n"
+
+#: lib/getopt.c:738 lib/getopt.c:741
+#, c-format
+msgid "%s: unrecognized option `%c%s'\n"
+msgstr "%s£º²»ÄÜʶ±ðµÄÑ¡Ïî¡°%c%s¡±\n"
+
+#: lib/getopt.c:796 lib/getopt.c:799
+#, c-format
+msgid "%s: illegal option -- %c\n"
+msgstr "%s£º·Ç·¨Ñ¡Ïî -- %c\n"
+
+#: lib/getopt.c:805 lib/getopt.c:808
+#, c-format
+msgid "%s: invalid option -- %c\n"
+msgstr "%s£ºÎÞЧѡÏî -- %c\n"
+
+#: lib/getopt.c:863 lib/getopt.c:882 lib/getopt.c:1095 lib/getopt.c:1116
+#, c-format
+msgid "%s: option requires an argument -- %c\n"
+msgstr "%s£ºÑ¡ÏîÐèÒªÒ»¸ö²ÎÊý -- %c\n"
+
+#: lib/getopt.c:935 lib/getopt.c:954
+#, c-format
+msgid "%s: option `-W %s' is ambiguous\n"
+msgstr "%s£ºÑ¡Ïî¡°-W %s¡±µÄº¬Òå²»Çå\n"
+
+#: lib/getopt.c:978 lib/getopt.c:999
+#, c-format
+msgid "%s: option `-W %s' doesn't allow an argument\n"
+msgstr "%s£ºÑ¡Ïî¡°-W %s¡±²»½ÓÊܲÎÊý\n"
+
+#: makeinfo/cmds.c:520 makeinfo/cmds.c:542
+#, fuzzy, c-format
+msgid "arguments to @%s ignored"
+msgstr "%c%s µÄ´íÎó²ÎÊý"
+
+#: makeinfo/cmds.c:585
+msgid "January"
+msgstr "Ò»ÔÂ"
+
+#: makeinfo/cmds.c:585
+msgid "February"
+msgstr "¶þÔÂ"
+
+#: makeinfo/cmds.c:585
+msgid "March"
+msgstr "ÈýÔÂ"
+
+#: makeinfo/cmds.c:585
+msgid "April"
+msgstr "ËÄÔÂ"
+
+#: makeinfo/cmds.c:585
+msgid "May"
+msgstr "ÎåÔÂ"
+
+#: makeinfo/cmds.c:586
+msgid "June"
+msgstr "ÁùÔÂ"
+
+#: makeinfo/cmds.c:586
+msgid "July"
+msgstr "ÆßÔÂ"
+
+#: makeinfo/cmds.c:586
+msgid "August"
+msgstr "°ËÔÂ"
+
+#: makeinfo/cmds.c:586
+msgid "September"
+msgstr "¾ÅÔÂ"
+
+#: makeinfo/cmds.c:586
+msgid "October"
+msgstr "Ê®ÔÂ"
+
+#: makeinfo/cmds.c:587
+msgid "November"
+msgstr "ʮһÔÂ"
+
+#: makeinfo/cmds.c:587
+msgid "December"
+msgstr "Ê®¶þÔÂ"
+
+#: makeinfo/cmds.c:936
+#, c-format
+msgid "unlikely character %c in @var"
+msgstr "@var Öв»¿É¿¿µÄ×Ö·û %c"
+
+#: makeinfo/cmds.c:979
+msgid "@sc argument all uppercase, thus no effect"
+msgstr "@sc µÄ²ÎÊýÈ«²¿Îª´óд£¬Òò´ËÎÞЧ"
+
+#: makeinfo/cmds.c:1034
+#, c-format
+msgid "`{' expected, but saw `%c'"
+msgstr "ӦΪ¡°{¡±£¬µ«¿´µ½ÁË¡°%c¡±"
+
+#: makeinfo/cmds.c:1074
+msgid "end of file inside verb block"
+msgstr "ÎļþÔÚÔ­ÎÄ¿éÖнáÊø"
+
+#: makeinfo/cmds.c:1082
+#, c-format
+msgid "`}' expected, but saw `%c'"
+msgstr "ӦΪ¡°}¡±£¬µ«¿´µ½ÁË¡°%c¡±"
+
+#: makeinfo/cmds.c:1112
+msgid ""
+"@strong{Note...} produces a spurious cross-reference in Info; reword to "
+"avoid that"
+msgstr ""
+
+#: makeinfo/cmds.c:1305
+#, c-format
+msgid "%c%s is obsolete"
+msgstr "%c%s Òѹýʱ"
+
+#: makeinfo/cmds.c:1414
+#, c-format
+msgid "@sp requires a positive numeric argument, not `%s'"
+msgstr "@sp ÐèÒªÕýÊý²ÎÊý£¬¶ø²»ÊÇ¡°%s¡±"
+
+#: makeinfo/cmds.c:1763 makeinfo/cmds.c:1819 makeinfo/footnote.c:82
+#, c-format
+msgid "Bad argument to %c%s"
+msgstr "%c%s µÄ´íÎó²ÎÊý"
+
+#: makeinfo/cmds.c:1773 makeinfo/makeinfo.c:4142
+msgid "asis"
+msgstr "asis"
+
+#: makeinfo/cmds.c:1775 makeinfo/cmds.c:1805 makeinfo/makeinfo.c:4144
+msgid "none"
+msgstr "none"
+
+#: makeinfo/cmds.c:1789
+#, fuzzy, c-format
+msgid "Bad argument to @%s"
+msgstr "%c%s µÄ´íÎó²ÎÊý"
+
+#: makeinfo/cmds.c:1803
+msgid "insert"
+msgstr ""
+
+#: makeinfo/defun.c:84
+msgid "Missing `}' in @def arg"
+msgstr "@def µÄ²ÎÊýÒÅ©ÁË¡°}¡±"
+
+#: makeinfo/defun.c:403
+msgid "Function"
+msgstr "º¯Êý"
+
+#: makeinfo/defun.c:406
+msgid "Macro"
+msgstr "ºê"
+
+#: makeinfo/defun.c:409
+msgid "Special Form"
+msgstr "ÌØÊâÐÎʽ"
+
+#: makeinfo/defun.c:413
+msgid "Variable"
+msgstr "±äÁ¿"
+
+#: makeinfo/defun.c:416
+msgid "User Option"
+msgstr "Óû§Ñ¡Ïî"
+
+#: makeinfo/defun.c:420
+msgid "Instance Variable"
+msgstr "ʵÀý±äÁ¿"
+
+#: makeinfo/defun.c:424
+msgid "Method"
+msgstr "·½·¨"
+
+#: makeinfo/defun.c:500 makeinfo/defun.c:505 makeinfo/defun.c:545
+#: makeinfo/defun.c:644 makeinfo/xml.c:2229
+msgid "of"
+msgstr ""
+
+#: makeinfo/defun.c:509 makeinfo/defun.c:513 makeinfo/defun.c:517
+#: makeinfo/defun.c:551 makeinfo/defun.c:650 makeinfo/xml.c:2234
+msgid "on"
+msgstr ""
+
+#: makeinfo/defun.c:711
+#, c-format
+msgid "Must be in `@%s' environment to use `@%s'"
+msgstr ""
+
+#: makeinfo/files.c:435
+#, c-format
+msgid "%s: getwd: %s, %s\n"
+msgstr "%s£ºgetwd£º%s£¬%s\n"
+
+#: makeinfo/files.c:638
+#, c-format
+msgid "`%s' omitted before output filename"
+msgstr ""
+
+#: makeinfo/files.c:646
+#, c-format
+msgid "`%s' omitted since writing to stdout"
+msgstr ""
+
+#: makeinfo/files.c:694
+msgid "Output buffer not empty."
+msgstr ""
+
+#: makeinfo/footnote.c:150
+#, c-format
+msgid "`%c%s' needs an argument `{...}', not just `%s'"
+msgstr "¡°%c%s¡±ÐèÒª²ÎÊý¡°{...}¡±£¬¶ø²»½ö½öÊÇ¡°%s¡±"
+
+#: makeinfo/footnote.c:165
+#, c-format
+msgid "No closing brace for footnote `%s'"
+msgstr "½Å×¢¡°%s¡±Ã»Óбպϻ¨À¨ºÅ"
+
+#: makeinfo/footnote.c:198
+msgid "Footnote defined without parent node"
+msgstr "¶¨ÒåµÄ½ÅעûÓи¸½Úµã"
+
+#: makeinfo/footnote.c:210
+msgid "Footnotes inside footnotes are not allowed"
+msgstr "½Å×¢ÄڵĽÅ×¢ÊDz»ÔÊÐíµÄ"
+
+#: makeinfo/footnote.c:302 makeinfo/index.c:189
+msgid "Footnotes"
+msgstr "½Å×¢"
+
+#: makeinfo/html.c:87
+#, c-format
+msgid "%s: could not open --css-file: %s"
+msgstr ""
+
+#: makeinfo/html.c:172
+#, c-format
+msgid "%s:%d: --css-file ended in comment"
+msgstr ""
+
+#: makeinfo/html.c:207
+msgid "Untitled"
+msgstr "ÎÞ±êÌâ"
+
+#: makeinfo/html.c:422
+msgid "[unexpected] no html tag to pop"
+msgstr ""
+
+#: makeinfo/html.c:752
+#, fuzzy, c-format
+msgid "[unexpected] invalid node name: `%s'"
+msgstr "ÎÞЧµÄ½Å×¢Ãû£º¡°%s¡±"
+
+#: makeinfo/index.c:169
+#, c-format
+msgid "Unknown index `%s'"
+msgstr "δ֪µÄË÷Òý¡°%s¡±"
+
+#: makeinfo/index.c:234
+#, c-format
+msgid "Info cannot handle `:' in index entry `%s'"
+msgstr "Info ÎÞ·¨´¦ÀíË÷ÒýÌõÄ¿¡°%s¡±Öеġ°:¡±"
+
+#: makeinfo/index.c:412
+#, c-format
+msgid "Index `%s' already exists"
+msgstr "Ë÷Òý¡°%s¡±ÒѾ­´æÔÚ"
+
+#: makeinfo/index.c:455
+#, c-format
+msgid "Unknown index `%s' and/or `%s' in @synindex"
+msgstr "@synindex ÖеÄδ֪Ë÷Òý¡°%s¡±ºÍ/»ò¡°%s¡±"
+
+#: makeinfo/index.c:661
+msgid "(line )"
+msgstr ""
+
+#: makeinfo/index.c:669
+#, c-format
+msgid "(line %*d)"
+msgstr ""
+
+#: makeinfo/index.c:750
+#, c-format
+msgid "Unknown index `%s' in @printindex"
+msgstr "@printindex ÖеÄδ֪Ë÷Òý¡°%s¡±"
+
+#: makeinfo/index.c:819
+#, c-format
+msgid "Entry for index `%s' outside of any node"
+msgstr "¹ØÓÚË÷Òý¡°%s¡±µÄÌõÄ¿³¬³öÁËËùÓнڵã"
+
+#: makeinfo/index.c:822 makeinfo/index.c:858
+msgid "(outside of any node)"
+msgstr "(³¬³öÈκνڵã)"
+
+#: makeinfo/index.c:919 makeinfo/index.c:925
+msgid "See "
+msgstr "²ÎÔÄ "
+
+#: makeinfo/insertion.c:160
+msgid "@item not allowed in argument to @itemize"
+msgstr ""
+
+#: makeinfo/insertion.c:238
+msgid "Broken-Type in insertion_type_pname"
+msgstr "insertion_type_pname ÖеĴíÎóÀàÐÍ"
+
+#: makeinfo/insertion.c:334
+msgid "Enumeration stack overflow"
+msgstr "ö¾ÙÕ»Òç³ö"
+
+#: makeinfo/insertion.c:366
+#, c-format
+msgid "lettering overflow, restarting at %c"
+msgstr "×Ö·û±àºÅÒç³ö£¬´Ó %c ÖØпªÊ¼"
+
+#: makeinfo/insertion.c:631
+#, c-format
+msgid "%s requires an argument: the formatter for %citem"
+msgstr ""
+
+#: makeinfo/insertion.c:719
+#, c-format
+msgid "%cfloat environments cannot be nested"
+msgstr ""
+
+#: makeinfo/insertion.c:973
+#, c-format
+msgid "`@end' expected `%s', but saw `%s'"
+msgstr "¡°@end¡±ÐèÒª¡°%s¡±£¬µ«¿´µ½¡°%s¡±"
+
+#: makeinfo/insertion.c:1337
+#, c-format
+msgid "No matching `%cend %s'"
+msgstr "ûÓÐÆ¥ÅäµÄ¡°%cend %s¡±"
+
+#: makeinfo/insertion.c:1592
+#, c-format
+msgid "%s requires letter or digit"
+msgstr "%s ÐèÒª×Öĸ»òÊý×Ö"
+
+#: makeinfo/insertion.c:1687
+msgid "end of file inside verbatim block"
+msgstr "ÎļþÔÚÔ­ÎÄ¿éÖнáÊø"
+
+#: makeinfo/insertion.c:1913
+#, fuzzy, c-format
+msgid "@%s not meaningful outside `@float' environment"
+msgstr "ÔÚ¡°@%2$s¡±¿éÖС°@%1$s¡±ÊÇûÓÐÒâÒåµÄ"
+
+#: makeinfo/insertion.c:1949
+msgid "@menu seen before first @node, creating `Top' node"
+msgstr "ÔÚµÚÒ»¸ö½Úµã֮ǰÓöµ½ @menu£¬ÕýÔÚ´´½¨¡°¶¥¡±½Úµã"
+
+#: makeinfo/insertion.c:1950
+msgid ""
+"perhaps your @top node should be wrapped in @ifnottex rather than @ifinfo?"
+msgstr "ÄúµÄ @top ½Úµã¿ÉÄÜÓ¦¸Ã°üº¬ÔÚ @ifnottex ¶ø²»ÊÇ @ifinfo ÖУ¿"
+
+#: makeinfo/insertion.c:1962
+msgid "@detailmenu seen before first node, creating `Top' node"
+msgstr "ÔÚµÚÒ»¸ö½Úµã֮ǰÓöµ½ @detailmenu£¬ÕýÔÚ´´½¨¡°¶¥¡±½Úµã"
+
+#: makeinfo/insertion.c:2018
+#, c-format
+msgid "@%s not meaningful outside `@titlepage' and `@quotation' environments"
+msgstr ""
+
+#: makeinfo/insertion.c:2032
+#, fuzzy, c-format
+msgid "@%s not meaningful outside `@titlepage' environment"
+msgstr "ÔÚ¡°@%2$s¡±¿éÖС°@%1$s¡±ÊÇûÓÐÒâÒåµÄ"
+
+#: makeinfo/insertion.c:2063
+#, c-format
+msgid "Unmatched `%c%s'"
+msgstr "δƥÅäµÄ¡°%c%s¡±"
+
+#: makeinfo/insertion.c:2068
+#, c-format
+msgid "`%c%s' needs something after it"
+msgstr "¡°%c%s¡±Ö®ºóÐèÒªÓÐЩʲô"
+
+#: makeinfo/insertion.c:2074
+#, fuzzy, c-format
+msgid "Bad argument `%s' to `@%s', using `%s'"
+msgstr "¡°%s¡±µÄ´íÎó²ÎÊý£¬¡°%s¡±£¬Ê¹Óá°%s¡±"
+
+#: makeinfo/insertion.c:2171
+#, c-format
+msgid "@%s not meaningful inside `@%s' block"
+msgstr "ÔÚ¡°@%2$s¡±¿éÖС°@%1$s¡±ÊÇûÓÐÒâÒåµÄ"
+
+#: makeinfo/insertion.c:2180
+#, c-format
+msgid "@itemx not meaningful inside `%s' block"
+msgstr "ÔÚ¡°%s¡±¿éÖÐ @itemx ÊÇûÓÐÒâÒåµÄ"
+
+#: makeinfo/insertion.c:2356
+#, c-format
+msgid "%c%s found outside of an insertion block"
+msgstr "ÔÚ²åÈë¿éÖ®Íâ·¢ÏÖÁË %c%s"
+
+#: makeinfo/lang.c:580
+#, c-format
+msgid "%s is not a valid ISO 639 language code"
+msgstr "%s ÔÚ ISO 639 ÓïÑÔ±àÂëÖÐÊÇÎÞЧµÄ"
+
+#: makeinfo/lang.c:655
+#, fuzzy, c-format
+msgid "unrecognized encoding name `%s'"
+msgstr "²»ÄÜʶ±ðµÄ±àÂëÃû³Æ¡°%s¡±"
+
+#: makeinfo/lang.c:663
+#, c-format
+msgid "sorry, encoding `%s' not supported"
+msgstr "±§Ç¸£¬²»Ö§³Ö±àÂë¡°%s¡±"
+
+#: makeinfo/lang.c:715
+#, c-format
+msgid "invalid encoded character `%s'"
+msgstr "ÎÞЧµÄ±àÂë×Ö·û¡°%s¡±"
+
+#: makeinfo/lang.c:1009
+#, c-format
+msgid "%c%s expects `i' or `j' as argument, not `%c'"
+msgstr "%c%s µÄ²ÎÊýӦΪ¡°i¡±»ò¡°j¡±£¬¶ø²»ÊÇ¡°%c¡±"
+
+#: makeinfo/lang.c:1013
+#, 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:355
+#, 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 "ÔÚµÚ %2$d ÐÐÖÐÒÔ¹ý¶àµÄ²ÎÊýµ÷Óúꡰ%1$s¡±"
+
+#: makeinfo/macro.c:586
+#, c-format
+msgid "%cend macro not found"
+msgstr "ÕÒ²»µ½ºê %cend"
+
+#: makeinfo/macro.c:624
+msgid "@quote-arg only useful for single-argument macros"
+msgstr "@quote-arg Ö»¶Ôµ¥²ÎÊýºêÓÐÓÃ"
+
+#: makeinfo/macro.c:660
+#, c-format
+msgid "mismatched @end %s with @%s"
+msgstr "@end %s ºÍ @%s ²»Æ¥Åä"
+
+#: makeinfo/makeinfo.c:184
+#, c-format
+msgid "Too many errors! Gave up.\n"
+msgstr "¹ý¶àµÄ´íÎ󣡷ÅÆú¡£\n"
+
+#: makeinfo/makeinfo.c:302
+#, c-format
+msgid "%s:%d: warning: "
+msgstr "%s£º%d£º¾¯¸æ£º"
+
+#: makeinfo/makeinfo.c:321 makeinfo/makeinfo.c:2260
+#, c-format
+msgid "Misplaced %c"
+msgstr "´íÎó·ÅÖÃµÄ %c"
+
+#: makeinfo/makeinfo.c:340
+#, c-format
+msgid "Try `%s --help' for more information.\n"
+msgstr "ÊÔÓá°%s --help¡±ÒÔ»ñÈ¡¸ü¶àÐÅÏ¢¡£\n"
+
+#: makeinfo/makeinfo.c:343
+#, c-format
+msgid "Usage: %s [OPTION]... TEXINFO-FILE...\n"
+msgstr "Ó÷¨£º%s [Ñ¡Ïî]... TEXINFO-Îļþ...\n"
+
+#: makeinfo/makeinfo.c:346
+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:350
+#, c-format
+msgid ""
+"General options:\n"
+" --error-limit=NUM quit after NUM errors (default %d).\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"
+" --reference-limit=NUM warn about at most NUM references (default %"
+"d).\n"
+" -v, --verbose explain what is being done.\n"
+" --version display version information and exit.\n"
+msgstr ""
+"ͨÓÃÑ¡Ï\n"
+" --error-limit=NUM ÔÚ NUM ¸ö´íÎóºóÍ˳ö (ĬÈÏΪ %d).\n"
+" --force ¼´Ê±³öÏÖ´íÎóÒ²±£ÁôÊä³öÎļþ¡£\n"
+" --help ÏÔʾ¸ÃÇóÖúÐÅÏ¢²¢Í˳ö¡£\n"
+" --no-validate ²»½øÐн»²æÒýÓüì²é¡£\n"
+" --no-warn ²»Êä³ö¾¯¸æ (²»Éæ¼°´íÎó)¡£\n"
+" --reference-limit=NUM ¶ÔÖÁ¶à NUM ¸öÒýÓýøÐо¯¸æ (ĬÈÏΪ %d)¡£\n"
+" -v, --verbose ½âÊͶ¼×öÁËЩʲô¡£\n"
+" --version ÏÔʾ°æ±¾ÐÅÏ¢²¢Í˳ö¡£\n"
+
+#: makeinfo/makeinfo.c:364
+#, 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 ¶ø²»ÊÇ Info¡£\n"
+" --html Êä³ö HTML ¶ø²»ÊÇ Info¡£\n"
+" --xml Êä³ö XML (TexinfoML) ¶ø²»ÊÇ Info¡£\n"
+
+#: makeinfo/makeinfo.c:372
+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 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 (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:386
+#, c-format
+msgid ""
+"Options for Info and plain text:\n"
+" --enable-encoding output accented and special characters in\n"
+" Info output based on @documentencoding.\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\n"
+" in which they are defined (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 ÐÐ (ĬÈÏΪ %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:403
+msgid ""
+"Options for HTML:\n"
+" --css-include=FILE include FILE in HTML <style> output;\n"
+" read stdin if FILE is -.\n"
+msgstr ""
+
+#: makeinfo/makeinfo.c:409
+#, 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:416
+#, 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 ½« DIR ¸½¼Óµ½ @include ËÑË÷·¾¶Ö®ºó¡£\n"
+" -P DIR ½« DIR ×·¼Óµ½ @include ËÑË÷·¾¶Ö®Ç°¡£\n"
+" -U VAR È¡Ïû±äÁ¿ VAR µÄ¶¨Ò壬¾ÍÏó @clear¡£\n"
+
+#: makeinfo/makeinfo.c:425
+#, 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 ¼´Ê¹²»ÊÇÉú³É 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:444
+#, 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"
+" Èç¹ûÉú³ÉÆÕͨÎı¾£¬Ôò --ifplaintext ĬÈÏ¿ªÆô¶øÆäËüĬÈϹرգ»\n"
+
+#: makeinfo/makeinfo.c:452
+#, 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 дÈëµ½ foo µÄ @setfilename\n"
+" makeinfo --html foo.texi ½« HTML дÈëµ½ @setfilename\n"
+" makeinfo --xml foo.texi ½« 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:603
+#, c-format
+msgid "%s: Ignoring unrecognized TEXINFO_OUTPUT_FORMAT value `%s'.\n"
+msgstr ""
+
+#: makeinfo/makeinfo.c:647 makeinfo/makeinfo.c:673 makeinfo/makeinfo.c:692
+#: makeinfo/makeinfo.c:722 makeinfo/makeinfo.c:743
+#, c-format
+msgid "%s: %s arg must be numeric, not `%s'.\n"
+msgstr "%s£º%s ²ÎÊý±ØÐëΪÊýÖµ£¬¶ø²»ÊÇ¡°%s¡±¡£\n"
+
+#: makeinfo/makeinfo.c:660
+#, fuzzy, c-format
+msgid "%s: could not open macro expansion output `%s'"
+msgstr "ÎÞ·¨´ò¿ªºêÀ©Õ¹Êä³ö¡°%s¡±"
+
+#: makeinfo/makeinfo.c:665
+#, fuzzy, c-format
+msgid "%s: ignoring second macro expansion output `%s'.\n"
+msgstr "ÎÞ·¨´ò¿ªºêÀ©Õ¹Êä³ö¡°%s¡±"
+
+#: makeinfo/makeinfo.c:707
+#, 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:732
+#, 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:806
+#, c-format
+msgid "%s: missing file argument.\n"
+msgstr "%s£ºÒÅ©Îļþ²ÎÊý¡£\n"
+
+#: makeinfo/makeinfo.c:997 makeinfo/makeinfo.c:3991
+#, c-format
+msgid "Multiline command %c%s used improperly"
+msgstr ""
+
+#: makeinfo/makeinfo.c:1000
+#, c-format
+msgid "Expected `%s'"
+msgstr "ӦΪ¡°%s¡±"
+
+#: makeinfo/makeinfo.c:1479
+#, c-format
+msgid "Can't create directory `%s': %s"
+msgstr "ÎÞ·¨´´½¨Ä¿Â¼¡°%s¡±£º%s"
+
+#: makeinfo/makeinfo.c:1525
+#, c-format
+msgid "No `%s' found in `%s'"
+msgstr "ÔÚ¡°%2$s¡±ÖÐÕÒ²»µ½¡°%1$s¡±"
+
+#: makeinfo/makeinfo.c:1605
+#, c-format
+msgid "%s: Skipping macro expansion to stdout as Info output is going there.\n"
+msgstr ""
+
+#: makeinfo/makeinfo.c:1638
+#, c-format
+msgid "Making %s file `%s' from `%s'.\n"
+msgstr "´Ó¡°%3$s¡±´´½¨ %1$s Îļþ¡°%2$s¡±¡£\n"
+
+#: makeinfo/makeinfo.c:1673
+#, c-format
+msgid "This is %s, produced by makeinfo version %s from %s.\n"
+msgstr "ÕâÊÇ %s£¬ÓÉ makeinfo °æ±¾ %s ´Ó %s Éú³É¡£\n"
+
+#: makeinfo/makeinfo.c:1709
+#, 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:1773
+#, c-format
+msgid "%s: Removing output file `%s' due to errors; use --force to preserve.\n"
+msgstr "%s£ºÓÉÓÚ´íÎóɾ³ýºêÊä³öÎļþ¡°%s¡±£»Óà --force ±£ÁôºêÊä³ö¡£\n"
+
+#: makeinfo/makeinfo.c:2034
+#, c-format
+msgid "Unknown command `%s'"
+msgstr "δ֪µÄÃüÁî¡°%s¡±"
+
+#: makeinfo/makeinfo.c:2056
+#, c-format
+msgid "Use braces to give a command as an argument to @%s"
+msgstr "ʹÓû¨À¨ºÅ½«Ò»¸öÃüÁîÓÃ×÷ @%s µÄ²ÎÊý"
+
+#: makeinfo/makeinfo.c:2314
+#, fuzzy, c-format
+msgid "%c%s expected braces"
+msgstr "%c%s ÐèÒª¡°{...}¡±"
+
+#: makeinfo/makeinfo.c:2327
+msgid "Unmatched }"
+msgstr "²»Æ¥ÅäµÄ }"
+
+#: makeinfo/makeinfo.c:2375
+msgid "NO_NAME!"
+msgstr "ÎÞÃû×Ö£¡"
+
+#: makeinfo/makeinfo.c:2396
+#, c-format
+msgid "%c%s missing close brace"
+msgstr "%c%s ÒÅ©±ÕºÏ»¨À¨ºÅ"
+
+#: makeinfo/makeinfo.c:3309
+#, c-format
+msgid "@image file `%s' (for HTML) not readable: %s"
+msgstr "@image Îļþ¡°%s¡±(¶Ô HTML)²»¿É¶Á£º%s"
+
+#: makeinfo/makeinfo.c:3315
+#, fuzzy, c-format
+msgid "No such file `%s'"
+msgstr "ÔÚ¡°%2$s¡±ÖÐÕÒ²»µ½¡°%1$s¡±"
+
+#: makeinfo/makeinfo.c:3447
+#, c-format
+msgid "@image file `%s' (for text) unreadable: %s"
+msgstr "@image Îļþ¡°%s¡±(¶ÔÎı¾)²»¿É¶Á£º%s"
+
+#: makeinfo/makeinfo.c:3456
+msgid "@image missing filename argument"
+msgstr "@image ÒÅ©ÎļþÃû²ÎÊý"
+
+#: makeinfo/makeinfo.c:3675
+#, c-format
+msgid "undefined flag: %s"
+msgstr ""
+
+#: makeinfo/makeinfo.c:3676
+#, c-format
+msgid "{No value for `%s'}"
+msgstr "{ûÓС°%s¡±µÄÖµ}"
+
+#: makeinfo/makeinfo.c:3728
+#, c-format
+msgid "%c%s requires a name"
+msgstr "%c%s ÐèÒªÒ»¸öÃû×Ö"
+
+#: makeinfo/makeinfo.c:3834
+#, c-format
+msgid "Reached eof before matching @end %s"
+msgstr "ÎļþÔÚÓöµ½Æ¥ÅäµÄ @end %s Ç°¾Í½áÊøÁË"
+
+#: makeinfo/makeinfo.c:4082
+#, 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:254
+#, c-format
+msgid "ignoring stray text `%s' after @multitable"
+msgstr "ºöÂÔ @multitable Ö®ºóµÄ¹ýÊ£Îı¾¡°%s¡±"
+
+#: makeinfo/multi.c:393
+#, c-format
+msgid "Too many columns in multitable item (max %d)"
+msgstr "ÔÚ¶àÁбí¸ñÏîÄ¿Öк¬ÓÐÌ«¶àµÄÁÐ (×î´óΪ %d)"
+
+#: makeinfo/multi.c:555
+#, fuzzy, c-format
+msgid "[unexpected] cannot select column #%d in multitable"
+msgstr "ÎÞ·¨ÔÚ¶àÁбí¸ñÖÐÑ¡ÔñµÚ %d ÁÐ"
+
+#: makeinfo/multi.c:584
+msgid "ignoring @tab outside of multitable"
+msgstr "ºöÂÔ¶àÁбí¸ñÍâµÄ @tab"
+
+#: makeinfo/multi.c:632
+#, c-format
+msgid "** Multicolumn output from last row:\n"
+msgstr "** ×îºóÒ»ÐеĶàÁÐÊä³ö£º\n"
+
+#: makeinfo/multi.c:635
+#, c-format
+msgid "* column #%d: output = %s\n"
+msgstr "* ÁÐ #%d£ºÊä³ö = %s\n"
+
+#: makeinfo/node.c:280
+#, c-format
+msgid "Node `%s' previously defined at line %d"
+msgstr "½Úµã¡°%s¡±ÔÚÇ°ÃæµÄ(µÚ %d ÐÐ)¶¨Òå"
+
+#: makeinfo/node.c:648
+#, c-format
+msgid "Formatting node %s...\n"
+msgstr "ÕýÔÚ¸ñʽ»¯½Úµã %s...\n"
+
+#: makeinfo/node.c:716
+#, fuzzy, c-format
+msgid "Node `%s' requires a sectioning command (e.g., %c%s)"
+msgstr "½Úµã¡°%s¡±ÐèÒªÒ»¸ö½ÚÃüÁî (ÀýÈ磺%c%s)"
+
+#: makeinfo/node.c:879
+#, c-format
+msgid "No node name specified for `%c%s' command"
+msgstr "ûÓÐΪ¡°%c%s¡±ÃüÁîÖ¸¶¨½ÚÃû³Æ"
+
+#: makeinfo/node.c:920 makeinfo/node.c:1151
+#, c-format
+msgid "Anchor `%s' and node `%s' map to the same file name"
+msgstr "Anchor¡°%s¡±ºÍ½Úµã¡°%s¡±Ó³É䵽ͬһ¸öÎļþÃû"
+
+#: makeinfo/node.c:923
+msgid "This @anchor command ignored; references to it will not work"
+msgstr "ºöÂԸà @anchor ÃüÁ¶ÔËüµÄÒýÓý«ÎÞ·¨¹¤×÷"
+
+#: makeinfo/node.c:925 makeinfo/node.c:1154
+msgid "Rename this anchor or use the `--no-split' option"
+msgstr "ÖØÃüÃû anchor »òʹÓá°--no-split¡±Ñ¡Ïî"
+
+#: makeinfo/node.c:955
+#, c-format
+msgid "Unexpected string at end of split-HTML file `%s'"
+msgstr "ÔÚ·ÖÁ¢ HTML Îļþ¡°%s¡±µÄĩβµÄÒâÍâ×Ö·û´®"
+
+#: makeinfo/node.c:991
+msgid "Next:"
+msgstr "ÏÂÒ»¸ö£º"
+
+#: makeinfo/node.c:1007
+msgid "Previous:"
+msgstr "ÉÏÒ»¸ö£º"
+
+#: makeinfo/node.c:1021
+msgid "Up:"
+msgstr "Éϲ㣺"
+
+#: makeinfo/node.c:1148
+#, c-format
+msgid "Anchors `%s' and `%s' map to the same file name"
+msgstr "Anchor¡°%s¡±ºÍ¡°%s¡±Ó³É䵽ͬһ¸öÎļþÃû"
+
+#: makeinfo/node.c:1153
+msgid "@anchor command ignored; references to it will not work"
+msgstr "ºöÂÔ @anchor ÃüÁ¶ÔËüµÄÒýÓý«²»Äܹ¤×÷"
+
+#: makeinfo/node.c:1347
+#, fuzzy, c-format
+msgid "%s reference to nonexistent node `%s' (perhaps incorrect sectioning?)"
+msgstr "%sÒýÓõ½²»´æÔڵĽڵ㡰%s¡±"
+
+#: makeinfo/node.c:1363
+msgid "Menu"
+msgstr "²Ëµ¥"
+
+#: makeinfo/node.c:1365
+msgid "Cross"
+msgstr "½»²æÒýÓÃ"
+
+#: makeinfo/node.c:1447
+#, fuzzy, c-format
+msgid "Next field of node `%s' not pointed to (perhaps incorrect sectioning?)"
+msgstr "½Úµã¡°%s¡±µÄÏÂÒ»¸öÓòûÓÐÖ¸Ïò"
+
+#: makeinfo/node.c:1450
+#, c-format
+msgid "This node (%s) has the bad Prev"
+msgstr "¸Ã½Úµã (%s) º¬ÓдíÎóµÄÉÏÒ»¸ö"
+
+#: makeinfo/node.c:1462
+msgid "Prev"
+msgstr "ÉÏÒ»¸ö"
+
+#: makeinfo/node.c:1505
+#, c-format
+msgid "Prev field of node `%s' not pointed to"
+msgstr "½Úµã¡°%s¡±µÄÉÏÒ»¸öÓòûÓÐÖ¸Ïò"
+
+#: makeinfo/node.c:1509
+#, c-format
+msgid "This node (%s) has the bad Next"
+msgstr "¸Ã½Úµã (%s) º¬ÓдíÎóµÄÏÂÒ»¸ö"
+
+#: makeinfo/node.c:1521
+#, c-format
+msgid "`%s' has no Up field (perhaps incorrect sectioning?)"
+msgstr ""
+
+#: makeinfo/node.c:1524
+msgid "Up"
+msgstr "Éϲã"
+
+#: makeinfo/node.c:1590
+#, c-format
+msgid "Node `%s' lacks menu item for `%s' despite being its Up target"
+msgstr "¾¡¹Ü½Úµã¡°%s¡±ÊÇ¡°%s¡±µÄÉϲã½Úµã£¬µ«È±ÉÙÏà¹ØµÄ²Ëµ¥Ïî"
+
+#: makeinfo/node.c:1619
+#, c-format
+msgid "node `%s' has been referenced %d times"
+msgstr "½Úµã¡°%s¡±Òѱ»ÒýÓÃÁË %d ´Î"
+
+#: makeinfo/node.c:1633
+#, c-format
+msgid "unreferenced node `%s'"
+msgstr "δÒýÓõĽڵ㡰%s¡±"
+
+#: makeinfo/node.c:1723
+#, c-format
+msgid "Removing %s\n"
+msgstr ""
+
+#: makeinfo/node.c:1727
+#, 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 "ÄÚ²¿´íÎó (search_sectioning) ¡°%s¡±£¡"
+
+#: makeinfo/sectioning.c:562
+#, c-format
+msgid "Internal error (search_sectioning) \"%s\"!"
+msgstr "ÄÚ²¿´íÎó (search_sectioning) ¡°%s¡±£¡"
+
+#: makeinfo/sectioning.c:623
+#, c-format
+msgid "%c%s is obsolete; use %c%s instead"
+msgstr "%c%s Òѹýʱ£»Óà %c%s ´úÌæ"
+
+#: makeinfo/sectioning.c:639
+#, c-format
+msgid "Node with %ctop as a section already exists"
+msgstr "´øÓÐ %ctop µÄ½Úµã×÷Ϊһ¸ö½ÚÒѾ­´æÔÚ"
+
+#: makeinfo/sectioning.c:647
+#, c-format
+msgid "Here is the %ctop node"
+msgstr "ÕâÀïÊÇ %ctop ½Úµã"
+
+#: makeinfo/sectioning.c:663
+#, c-format
+msgid "%ctop used before %cnode, defaulting to %s"
+msgstr "%ctop ÔÚ %cnode ֮ǰʹÓã¬Ä¬ÈÏΪ %s"
+
+#: makeinfo/toc.c:197 makeinfo/toc.c:271 makeinfo/toc.c:273
+msgid "Table of Contents"
+msgstr "Ŀ¼"
+
+#: makeinfo/toc.c:304 makeinfo/toc.c:337 makeinfo/toc.c:339
+msgid "Short Contents"
+msgstr "¼ò¶ÌĿ¼"
+
+#: makeinfo/xml.c:1605
+#, c-format
+msgid "@image file `%s' unreadable: %s"
+msgstr "@image Îļþ¡°%s¡±²»¿É¶Á£º%s"
+
+#: makeinfo/xml.c:2097
+msgid ""
+"@headitem as the last item of @multitable produces invalid Docbook documents"
+msgstr ""
+
+#: util/install-info.c:154
+#, c-format
+msgid "%s: warning: "
+msgstr "%s£º¾¯¸æ£º"
+
+#: util/install-info.c:203
+#, c-format
+msgid " for %s"
+msgstr ""
+
+#: util/install-info.c:426
+#, c-format
+msgid "\tTry `%s --help' for a complete list of options.\n"
+msgstr "\tÊÔÓá°%s --help¡±ÒÔ»ñµÃÑ¡ÏîµÄÍêÕûÁÐ±í¡£\n"
+
+#: util/install-info.c:434
+#, c-format
+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 Ŀ¼ÌõĿʵ¼ÊÉÏÊDz˵¥ÏîÄ¿¡£\n"
+" --quiet ²»ÒªÊä³ö¾¯¸æ¡£\n"
+" --remove µÈͬÓÚ --delete¡£\n"
+" --section=SEC ½«¸ÃÎļþµÄÌõÄ¿´æ´¢µ½Ä¿Â¼µÄ½Ú SEC ÖС£\n"
+" Èç¹ûÄúÖ¸Ã÷¶àÓÚÒ»¸ö½Ú£¬½«¼ÓÈë¸÷¸ö\n"
+" ½ÚÖеÄËùÓÐÌõÄ¿¡£\n"
+" Èç¹ûÄúδָÃ÷Èκνڣ¬½«¸ù¾Ý Info\n"
+" Îļþ×ÔÉíµÄÐÅÏ¢À´ÅжÏËüÃÇ¡£\n"
+" --version ÏÔʾ°æ±¾ÐÅÏ¢²¢Í˳ö¡£\n"
+
+#: util/install-info.c:488
+#, 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 ""
+"ÕâÊÇÎļþ .../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"
+"* ²Ëµ¥£º\n"
+
+#: util/install-info.c:513
+#, c-format
+msgid "%s: could not read (%s) and could not create (%s)\n"
+msgstr "%s£º¼´ÎÞ·¨¶ÁÈë (%s) Ò²ÎÞ·¨´´½¨ (%s)\n"
+
+#: util/install-info.c:600
+#, c-format
+msgid "%s: empty file"
+msgstr "%s£º¿ÕÎļþ"
+
+#: util/install-info.c:913 util/install-info.c:953
+msgid "START-INFO-DIR-ENTRY without matching END-INFO-DIR-ENTRY"
+msgstr "START-INFO-DIR-ENTRY ûÓÐÆ¥ÅäµÄ END-INFO-DIR-ENTRY"
+
+#: util/install-info.c:948
+msgid "END-INFO-DIR-ENTRY without matching START-INFO-DIR-ENTRY"
+msgstr "END-INFO-DIR-ENTRY ûÓÐÆ¥ÅäµÄ START-INFO-DIR-ENTRY"
+
+#: util/install-info.c:1191 util/install-info.c:1201
+#, c-format
+msgid "%s: already have dir file: %s\n"
+msgstr ""
+
+#: util/install-info.c:1236
+#, c-format
+msgid "%s: Specify the Info file only once.\n"
+msgstr "%s£ºInfo ÎļþÖ»Ó¦¸ÃÖ¸¶¨Ò»´Î¡£\n"
+
+#: util/install-info.c:1284
+#, c-format
+msgid "excess command line argument `%s'"
+msgstr "¶àÓàµÄÃüÁîÐвÎÊý¡°%s¡±"
+
+#: util/install-info.c:1288
+msgid "No input file specified; try --help for more information."
+msgstr "ûÓÐÖ¸¶¨Êä³öÎļþ£»ÊÔÓà --help ÒÔ»ñµÃ¸ü¶àÐÅÏ¢¡£"
+
+#: util/install-info.c:1291
+msgid "No dir file specified; try --help for more information."
+msgstr "ûÓÐÖ¸¶¨Ä¿Â¼Îļþ£»ÊÔÓà --help ÒÔ»ñµÃ¸ü¶àÐÅÏ¢¡£"
+
+#: util/install-info.c:1313
+#, c-format
+msgid "no info dir entry in `%s'"
+msgstr "¡°%s¡±ÖÐûÓÐ info Ŀ¼ÌõÄ¿"
+
+#: util/install-info.c:1426
+#, c-format
+msgid "menu item `%s' already exists, for file `%s'"
+msgstr "ÔÚÎļþ¡°%2$s¡±Öв˵¥Ïî¡°%1$s¡±ÒÑ´æÔÚ"
+
+#: util/install-info.c:1449
+#, c-format
+msgid "no entries found for `%s'; nothing deleted"
+msgstr "ÕÒ²»µ½¹ØÓÚ¡°%s¡±µÄÌõÄ¿£»Î´É¾³ý"
+
+#: util/texindex.c:252
+msgid "display this help and exit"
+msgstr "ÏÔʾ¸ÃÇóÖúÐÅÏ¢²¢Í˳ö"
+
+#: util/texindex.c:254
+msgid "keep temporary files around after processing"
+msgstr "ÔÚ´¦ÀíÖ®ºó±£ÁôÁÙʱÎļþ"
+
+#: util/texindex.c:256
+msgid "do not keep temporary files around after processing (default)"
+msgstr "ÔÚ´¦ÀíÖ®ºóɾ³ýÁÙʱÎļþ (ĬÈÏ)"
+
+#: util/texindex.c:258
+msgid "send output to FILE"
+msgstr "½«Êä³öËÍÈë FILE"
+
+#: util/texindex.c:260
+msgid "display version information and exit"
+msgstr "ÏÔʾ°æ±¾ÐÅÏ¢²¢Í˳ö"
+
+#: util/texindex.c:270
+#, c-format
+msgid "Usage: %s [OPTION]... FILE...\n"
+msgstr "Ó÷¨£º%s [Ñ¡Ïî]... Îļþ...\n"
+
+#: util/texindex.c:271
+#, c-format
+msgid "Generate a sorted index for each TeX output FILE.\n"
+msgstr "Ϊÿ¸ö TeX Êä³öÎļþÉú³ÉÅÅÐòµÄË÷Òý¡£\n"
+
+#: util/texindex.c:274
+#, 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:276
+#, c-format
+msgid ""
+"\n"
+"Options:\n"
+msgstr ""
+"\n"
+"Ñ¡Ï\n"
+
+#: util/texindex.c:876 util/texindex.c:910 util/texindex.c:983
+#: util/texindex.c:1011
+#, c-format
+msgid "%s: not a texinfo index file"
+msgstr "%s£º²»ÊÇ texinfo Ë÷ÒýÎļþ"
+
+#: util/texindex.c:968
+#, c-format
+msgid "failure reopening %s"
+msgstr "ÖØдò¿ª %s ʧ°Ü"
+
+#: util/texindex.c:1218
+#, c-format
+msgid "No page number in %s"
+msgstr "%s ÖÐûÓÐÒ³Âë"
+
+#: util/texindex.c:1291
+#, c-format
+msgid "entry %s follows an entry with a secondary name"
+msgstr "ÌõÄ¿ %s ³öÏÖÔÚ¾ßÓдÎÒªÃû³ÆµÄÌõÄ¿Ö®ºó"
+
+#~ 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 "File exists, but is not a directory"
+#~ msgstr "Îļþ´æÔÚ£¬µ«²»ÊÇĿ¼"
+
+#~ msgid "First argument to cross-reference may not be empty"
+#~ msgstr "½»²æÒýÓõĵÚÒ»¸ö²ÎÊý²»ÄÜΪ¿Õ"
+
+#~ msgid "see "
+#~ msgstr "²ÎÔÄ "
+
+#~ msgid "`.' or `,' must follow cross reference, not %c"
+#~ msgstr "¡°.¡±»ò¡°,¡±Ö®ºó±ØÐëΪ½»²æÒýÓ㬶ø²»ÊÇ %c"
+
+#~ msgid "First argument to @inforef may not be empty"
+#~ msgstr "@inforef µÄµÚÒ»¸ö²ÎÊý²»ÄÜΪ¿Õ"
+
+#~ msgid "Node:"
+#~ msgstr "½Úµã£º"
+
+#~ msgid "%s: TOC should be here, but it was not found"
+#~ msgstr "%s£ºÄ¿Â¼Ó¦¸ÃÔÚÕâÀµ«Ëü²¢Î´³öÏÖ"
+
+#~ msgid "virtual memory exhausted"
+#~ msgstr "ÐéÄâÄÚ´æºÄ¾¡"
+
+#~ 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 "\\%-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"
diff --git a/macros/texinfo/contrib/texinfo-hu/texinfo/po/zh_TW.gmo b/macros/texinfo/contrib/texinfo-hu/texinfo/po/zh_TW.gmo
new file mode 100644
index 0000000000..0b973198cd
--- /dev/null
+++ b/macros/texinfo/contrib/texinfo-hu/texinfo/po/zh_TW.gmo
Binary files differ
diff --git a/macros/texinfo/contrib/texinfo-hu/texinfo/po/zh_TW.po b/macros/texinfo/contrib/texinfo-hu/texinfo/po/zh_TW.po
new file mode 100644
index 0000000000..404a08953a
--- /dev/null
+++ b/macros/texinfo/contrib/texinfo-hu/texinfo/po/zh_TW.po
@@ -0,0 +1,3111 @@
+# 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: 2004-12-21 16:20-0800\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"
+
+#: info/echo-area.c:284 info/session.c:689
+msgid "Move forward a character"
+msgstr "¦V«e²¾°Ê¤@­Ó¦r¤¸"
+
+#: info/echo-area.c:296 info/session.c:705
+msgid "Move backward a character"
+msgstr "¦V«á²¾°Ê¤@­Ó¦r¤¸"
+
+#: info/echo-area.c:308
+msgid "Move to the start of this line"
+msgstr "²¾¦Ü¥»¦æ¶}ÀY"
+
+#: info/echo-area.c:313
+msgid "Move to the end of this line"
+msgstr "²¾¦Ü¥»¦æµ²§À"
+
+#: info/echo-area.c:321 info/session.c:723
+msgid "Move forward a word"
+msgstr "¦V«e²¾°Ê¤@­Ó¦r"
+
+#: info/echo-area.c:361 info/session.c:772
+msgid "Move backward a word"
+msgstr "¦V«á²¾°Ê¤@­Ó¦r"
+
+#: info/echo-area.c:401
+msgid "Delete the character under the cursor"
+msgstr "§R°£´å¼Ð¦ì¸mªº¦r¤¸"
+
+#: info/echo-area.c:431
+msgid "Delete the character behind the cursor"
+msgstr "§R°£´å¼Ð¦ì¸m«áªº¦r¤¸"
+
+#: info/echo-area.c:452
+msgid "Cancel or quit operation"
+msgstr "¨ú®ø©Îµ²§ô¥Ø«eªº°Ê§@"
+
+#: info/echo-area.c:467
+msgid "Accept (or force completion of) this line"
+msgstr "±µ¨ü (©Î±j­¢§¹¦¨) ¥»¦æ"
+
+#: info/echo-area.c:472
+msgid "Insert next character verbatim"
+msgstr "¤£§@Âà´«, ´¡¤J¤U¤@­Ó¦r¤¸"
+
+#: info/echo-area.c:480
+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:653
+msgid "Kill the word preceding the cursor"
+msgstr "§R°£´å¼Ð«eªº³æ¦r, ¨Ã¸m¤J°Å¶Kï"
+
+#: info/echo-area.c:868 info/echo-area.c:924
+msgid "No completions"
+msgstr "¨S¦³¥i¯àªº§¹¦¨¥y"
+
+#: info/echo-area.c:870
+msgid "Not complete"
+msgstr "¥¼§¹¦¨"
+
+#: info/echo-area.c:911
+msgid "List possible completions"
+msgstr "¦C¥X¥i¯àªº§¹¦¨¥y"
+
+#: info/echo-area.c:928
+msgid "Sole completion"
+msgstr "³æ¤@ªº§¹¦¨¥y"
+
+#: info/echo-area.c:937
+msgid "One completion:\n"
+msgstr "¤@­Ó§¹¦¨¥y:\n"
+
+#: info/echo-area.c:938
+#, c-format
+msgid "%d completions:\n"
+msgstr "%d ­Ó§¹¦¨¥y:\n"
+
+#: info/echo-area.c:1085
+msgid "Insert completion"
+msgstr "´¡¤J§¹¦¨¥y"
+
+#: info/echo-area.c:1220
+msgid "Building completions..."
+msgstr "«Ø¥ß§¹¦¨¥y¤¤..."
+
+#: info/echo-area.c:1340
+msgid "Scroll the completions window"
+msgstr "±²°Ê§¹¦¨¥y¤À¹jµøµ¡"
+
+#: info/footnotes.c:213
+msgid "Footnotes could not be displayed"
+msgstr "µLªkÅã¥Üµù¸}"
+
+#: info/footnotes.c:239
+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:172
+msgid "Look up a string in the index for this file"
+msgstr "¦b¥»Àɮתº¯Á¤Þ¤º¬d¸ß¦r¦ê"
+
+#: info/indices.c:199
+msgid "Finding index entries..."
+msgstr "§ä´M¯Á¤Þ¶µ¥Ø..."
+
+#: info/indices.c:207
+msgid "No indices found."
+msgstr "§ä¤£¨ì¯Á¤Þ"
+
+#: info/indices.c:217
+msgid "Index entry: "
+msgstr "¯Á¤Þ¶µ¥Ø: "
+
+#: info/indices.c:325
+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:335
+msgid "No previous index search string."
+msgstr "¨S¦³«e¤@­Ó¯Á¤Þ·j´M¦r¦ê"
+
+#: info/indices.c:342
+msgid "No index entries."
+msgstr "¨S¦³¯Á¤Þ¶µ¥Ø."
+
+#: info/indices.c:375
+#, fuzzy, c-format
+msgid "No %sindex entries containing `%s'."
+msgstr "¨S¦³ %s¯Á¤Þ¶µ¥Ø¥]§t \"%s\"."
+
+#: info/indices.c:376
+msgid "more "
+msgstr "§ó¦hªº "
+
+#: info/indices.c:386
+msgid "CAN'T SEE THIS"
+msgstr ""
+
+#: info/indices.c:422
+#, 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:541
+#, fuzzy, c-format
+msgid "Scanning indices of `%s'..."
+msgstr "±½ºË \"%s\" ªº¯Á¤Þ¤¤..."
+
+#: info/indices.c:596
+#, c-format
+msgid "No available info files have `%s' in their indices."
+msgstr ""
+
+#: info/indices.c:622
+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:626
+msgid "Index apropos: "
+msgstr ""
+
+#: info/indices.c:654
+#, 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:295 makeinfo/makeinfo.c:766 util/install-info.c:1266
+#: util/texindex.c:343
+#, fuzzy, c-format
+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"
+
+#: info/info.c:498
+#, c-format
+msgid "no index entries found for `%s'\n"
+msgstr "§ä¤£¨ì¥]§t `%s' ªº¯Á¤Þ¶µ¥Ø\n"
+
+#: info/info.c:590
+msgid " -b, --speech-friendly be friendly to speech synthesizers.\n"
+msgstr ""
+
+#: info/info.c:597
+#, fuzzy, c-format
+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 -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"
+
+#: info/info.c:635 info/infokey.c:918 makeinfo/makeinfo.c:465
+#: util/install-info.c:466 util/texindex.c:292
+#, 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:669
+#, c-format
+msgid "Cannot find node `%s'."
+msgstr "§ä¤£¨ì `%s' ¸`ÂI."
+
+#: info/info.c:670
+#, c-format
+msgid "Cannot find node `(%s)%s'."
+msgstr "§ä¤£¨ì `(%s)%s' ¸`ÂI."
+
+#: info/info.c:671
+msgid "Cannot find a window!"
+msgstr "§ä¤£¨ì¤À¹jµøµ¡!"
+
+#: info/info.c:672
+msgid "Point doesn't appear within this window's node!"
+msgstr "´å¼Ð¦ì¸m¤£¦b¥»¤À¹jµøµ¡ªº¸`ÂI¤º!"
+
+#: info/info.c:673
+msgid "Cannot delete the last window."
+msgstr "µLªk§R°£¤W¤@­Ó¤À¹jµøµ¡."
+
+#: info/info.c:674
+msgid "No menu in this node."
+msgstr "¥»¸`ÂI¨S¦³¿ï³æ."
+
+#: info/info.c:675
+msgid "No footnotes in this node."
+msgstr "¥»¸`ÂI¨S¦³µù¸}."
+
+#: info/info.c:676
+msgid "No cross references in this node."
+msgstr "¥»¸`ÂI¨S¦³¥æ¤¬°Ñ·Ó."
+
+#: info/info.c:677
+#, c-format
+msgid "No `%s' pointer for this node."
+msgstr "¥»¸`ÂI¨S¦³ `%s' pointer."
+
+#: info/info.c:678
+#, c-format
+msgid "Unknown Info command `%c'; try `?' for help."
+msgstr "¥¼ª¾ªº Info ©R¥O `%c'; ¸Õ¸Õ `?' ¥H¨ú±o¨D§U¸ê°T."
+
+#: info/info.c:679
+#, c-format
+msgid "Terminal type `%s' is not smart enough to run Info."
+msgstr "²×ºÝ¾÷Ãþ«¬ `%s' µLªk¤ä´©°õ¦æ Info ©Ò»Ýªº»Ý¨D."
+
+#: info/info.c:680
+msgid "You are already at the last page of this node."
+msgstr "±z¤w¦b¥»¸`ÂIªº³Ì«á¤@­¶."
+
+#: info/info.c:681
+msgid "You are already at the first page of this node."
+msgstr "±z¤w¦b¥»¸`ÂIªº²Ä¤@­¶."
+
+#: info/info.c:682
+msgid "Only one window."
+msgstr "¥u¦³¤@­Ó¤À¹jµøµ¡."
+
+#: info/info.c:683
+msgid "Resulting window would be too small."
+msgstr "²£¥Íªº¤À¹jµøµ¡·|¤Ó¤p."
+
+#: info/info.c:684
+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:46 info/infodoc.c:95
+#, fuzzy
+msgid ""
+"Basic Commands in Info Windows\n"
+"******************************\n"
+msgstr "******************************\n"
+
+#: info/infodoc.c:49
+#, fuzzy
+msgid "\\%-10[quit-help] Quit this help.\n"
+msgstr " %-10s µ²§ô¥»¨D§U.\n"
+
+#: info/infodoc.c:50
+#, fuzzy
+msgid "\\%-10[quit] Quit Info altogether.\n"
+msgstr " %-10s ¤@¨Öµ²§ô Info µ{¦¡.\n"
+
+#: info/infodoc.c:51
+#, fuzzy
+msgid "\\%-10[get-info-help-node] Invoke the Info tutorial.\n"
+msgstr " %-10s °õ¦æ Info «ü¾É½Òµ{.\n"
+
+#: info/infodoc.c:53 info/infodoc.c:102
+#, fuzzy
+msgid ""
+"Selecting other nodes:\n"
+"----------------------\n"
+msgstr "----------------------\n"
+
+#: info/infodoc.c:55
+#, fuzzy
+msgid "\\%-10[next-node] Move to the \"next\" node of this node.\n"
+msgstr " %-10s ²¾¦Ü¥»¸`ÂIªº '¤U¤@­Ó (next)' ¸`ÂI.\n"
+
+#: info/infodoc.c:56
+#, fuzzy
+msgid "\\%-10[prev-node] Move to the \"previous\" node of this node.\n"
+msgstr " %-10s ²¾¦Ü¥»¸`ÂIªº '¤W¤@­Ó (previous)' ¸`ÂI.\n"
+
+#: info/infodoc.c:57
+#, fuzzy
+msgid "\\%-10[up-node] Move \"up\" from this node.\n"
+msgstr " %-10s ²¾¦Ü¥»¸`ÂIªº '¤W¤@¼h (up)' ¸`ÂI.\n"
+
+#: info/infodoc.c:58
+#, fuzzy
+msgid ""
+"\\%-10[menu-item] 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:60
+#, fuzzy
+msgid ""
+"\\%-10[xref-item] Follow a cross reference. Reads name of reference.\n"
+msgstr " %-10s ¸òÀH¥æ¤¬°Ñ·Ó. Ū¨ú°Ñ·Óªº¦WºÙ.\n"
+
+#: info/infodoc.c:61
+#, fuzzy
+msgid "\\%-10[history-node] Move to the last node seen in this window.\n"
+msgstr " %-10s ²¾°Ê¦Ü¥»¤À¹jµøµ¡¤¤, ¤W¤@­ÓÆ[¬Ýªº¸`ÂI.\n"
+
+#: info/infodoc.c:62
+#, fuzzy
+msgid ""
+"\\%-10[move-to-next-xref] Skip to next hypertext link within this node.\n"
+msgstr " %-10s ¸õ¨ì¥»¸`ÂI¤¤ªº¤U¤@­Ó¶W¥»¤å³sµ².\n"
+
+#: info/infodoc.c:63
+#, fuzzy
+msgid ""
+"\\%-10[move-to-prev-xref] Skip to previous hypertext link within this "
+"node.\n"
+msgstr " %-10s ¸õ¨ì¥»¸`ÂI¤¤ªº¤U¤@­Ó¶W¥»¤å³sµ².\n"
+
+#: info/infodoc.c:64
+#, fuzzy
+msgid ""
+"\\%-10[select-reference-this-line] Follow the hypertext link under cursor.\n"
+msgstr " %-10s ¸òÀH´å¼Ð¤Uªº¶W¥»¤å³sµ².\n"
+
+#: info/infodoc.c:65
+#, fuzzy
+msgid ""
+"\\%-10[dir-node] Move to the `directory' node. Equivalent to `\\[goto-"
+"node] (DIR)'.\n"
+msgstr " %-10s ²¾¦Ü `directory' ¸`ÂI. ¦P `g (DIR)'.\n"
+
+#: info/infodoc.c:66
+#, fuzzy
+msgid ""
+"\\%-10[top-node] Move to the Top node. Equivalent to `\\[goto-node] Top'.\n"
+msgstr " %-10s ²¾¦Ü Top ¸`ÂI. ¦P `g TOP'.\n"
+
+#: info/infodoc.c:68 info/infodoc.c:116
+#, fuzzy
+msgid ""
+"Moving within a node:\n"
+"---------------------\n"
+msgstr "---------------------\n"
+
+#: info/infodoc.c:70
+#, fuzzy
+msgid "\\%-10[beginning-of-node] Go to the beginning of this node.\n"
+msgstr " %-10s ²¾¦Ü¥»¸`ÂIªº¶}ÀY.\n"
+
+#: info/infodoc.c:71
+#, fuzzy
+msgid "\\%-10[end-of-node] Go to the end of this node.\n"
+msgstr " %-10s ²¾¦Ü¥»¸`ÂIªºµ²§À.\n"
+
+#: info/infodoc.c:72
+#, fuzzy
+msgid "\\%-10[next-line] Scroll forward 1 line.\n"
+msgstr " %-10s ©¹«e±²°Ê¤@¦æ.\n"
+
+#: info/infodoc.c:73
+#, fuzzy
+msgid "\\%-10[prev-line] Scroll backward 1 line.\n"
+msgstr " %-10s ©¹«á±²°Ê¤@¦æ.\n"
+
+#: info/infodoc.c:74
+#, fuzzy
+msgid "\\%-10[scroll-forward] Scroll forward a page.\n"
+msgstr " %-10s ¦V«e±²°Ê¤@­¶.\n"
+
+#: info/infodoc.c:75
+#, fuzzy
+msgid "\\%-10[scroll-backward] Scroll backward a page.\n"
+msgstr " %-10s ¦V«á±²°Ê¤@­¶.\n"
+
+#: info/infodoc.c:77 info/infodoc.c:125
+#, fuzzy
+msgid ""
+"Other commands:\n"
+"---------------\n"
+msgstr "---------------\n"
+
+#: info/infodoc.c:79
+#, fuzzy
+msgid "\\%-10[menu-digit] Pick first ... ninth item in node's menu.\n"
+msgstr " %-10s ¬D¿ï¸`ÂI¥Ø¿ý¤¤ªº²Ä¤@­Ó...²Ä¤E­Ó¶µ¥Ø.\n"
+
+#: info/infodoc.c:80
+#, fuzzy
+msgid "\\%-10[last-menu-item] Pick last item in node's menu.\n"
+msgstr " %-10s ¬D¿ï¸`ÂI¥Ø¿ýªº³Ì«á¤@­Ó¶µ¥Ø.\n"
+
+#: info/infodoc.c:81
+#, fuzzy
+msgid ""
+"\\%-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"
+msgstr " ¨Ã¥B¿ï¾Ü²Ä¤@­Ó·j´M¨ìªº¶µ¥Ø©Ò°Ñ·Óªº¸`ÂI.\n"
+
+#: info/infodoc.c:83
+#, 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"
+
+#: info/infodoc.c:85
+#, 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"
+
+#: info/infodoc.c:87
+#, 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"
+
+#: info/infodoc.c:98
+#, c-format
+msgid " %-10s Quit this help.\n"
+msgstr " %-10s µ²§ô¥»¨D§U.\n"
+
+#: info/infodoc.c:99
+#, c-format
+msgid " %-10s Quit Info altogether.\n"
+msgstr " %-10s ¤@¨Öµ²§ô Info µ{¦¡.\n"
+
+#: info/infodoc.c:100
+#, c-format
+msgid " %-10s Invoke the Info tutorial.\n"
+msgstr " %-10s °õ¦æ Info «ü¾É½Òµ{.\n"
+
+#: info/infodoc.c:104
+#, c-format
+msgid " %-10s Move to the `next' node of this node.\n"
+msgstr " %-10s ²¾¦Ü¥»¸`ÂIªº '¤U¤@­Ó (next)' ¸`ÂI.\n"
+
+#: info/infodoc.c:105
+#, c-format
+msgid " %-10s Move to the `previous' node of this node.\n"
+msgstr " %-10s ²¾¦Ü¥»¸`ÂIªº '¤W¤@­Ó (previous)' ¸`ÂI.\n"
+
+#: info/infodoc.c:106
+#, c-format
+msgid " %-10s Move `up' from this node.\n"
+msgstr " %-10s ²¾¦Ü¥»¸`ÂIªº '¤W¤@¼h (up)' ¸`ÂI.\n"
+
+#: info/infodoc.c:107
+#, c-format
+msgid " %-10s Pick menu item specified by name.\n"
+msgstr " %-10s ¥H¦WºÙ¿ï¨ú¿ï³æ¶µ¥Ø.\n"
+
+#: info/infodoc.c:108
+msgid " Picking a menu item causes another node to be selected.\n"
+msgstr " ¿ï¨ú¿ï³æ¶µ¥Ø¥H¿ï¾Ü¥t¤@­Ó¸`ÂI.\n"
+
+#: info/infodoc.c:109
+#, c-format
+msgid " %-10s Follow a cross reference. Reads name of reference.\n"
+msgstr " %-10s ¸òÀH¥æ¤¬°Ñ·Ó. Ū¨ú°Ñ·Óªº¦WºÙ.\n"
+
+#: info/infodoc.c:110
+#, c-format
+msgid " %-10s Move to the last node seen in this window.\n"
+msgstr " %-10s ²¾°Ê¦Ü¥»¤À¹jµøµ¡¤¤, ¤W¤@­ÓÆ[¬Ýªº¸`ÂI.\n"
+
+#: info/infodoc.c:111
+#, c-format
+msgid " %-10s Skip to next hypertext link within this node.\n"
+msgstr " %-10s ¸õ¨ì¥»¸`ÂI¤¤ªº¤U¤@­Ó¶W¥»¤å³sµ².\n"
+
+#: info/infodoc.c:112
+#, c-format
+msgid " %-10s Follow the hypertext link under cursor.\n"
+msgstr " %-10s ¸òÀH´å¼Ð¤Uªº¶W¥»¤å³sµ².\n"
+
+#: info/infodoc.c:113
+#, 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:114
+#, 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:118
+#, c-format
+msgid " %-10s Scroll forward a page.\n"
+msgstr " %-10s ¦V«e±²°Ê¤@­¶.\n"
+
+#: info/infodoc.c:119
+#, c-format
+msgid " %-10s Scroll backward a page.\n"
+msgstr " %-10s ¦V«á±²°Ê¤@­¶.\n"
+
+#: info/infodoc.c:120
+#, c-format
+msgid " %-10s Go to the beginning of this node.\n"
+msgstr " %-10s ²¾¦Ü¥»¸`ÂIªº¶}ÀY.\n"
+
+#: info/infodoc.c:121
+#, c-format
+msgid " %-10s Go to the end of this node.\n"
+msgstr " %-10s ²¾¦Ü¥»¸`ÂIªºµ²§À.\n"
+
+#: info/infodoc.c:122
+#, c-format
+msgid " %-10s Scroll forward 1 line.\n"
+msgstr " %-10s ©¹«e±²°Ê¤@¦æ.\n"
+
+#: info/infodoc.c:123
+#, c-format
+msgid " %-10s Scroll backward 1 line.\n"
+msgstr " %-10s ©¹«á±²°Ê¤@¦æ.\n"
+
+#: info/infodoc.c:127
+#, c-format
+msgid " %-10s Pick first ... ninth item in node's menu.\n"
+msgstr " %-10s ¬D¿ï¸`ÂI¥Ø¿ý¤¤ªº²Ä¤@­Ó...²Ä¤E­Ó¶µ¥Ø.\n"
+
+#: info/infodoc.c:128
+#, c-format
+msgid " %-10s Pick last item in node's menu.\n"
+msgstr " %-10s ¬D¿ï¸`ÂI¥Ø¿ýªº³Ì«á¤@­Ó¶µ¥Ø.\n"
+
+#: info/infodoc.c:129
+#, c-format
+msgid ""
+" %-10s Search for a specified string in the index entries of this Info\n"
+msgstr " %-10s ¦b¥» Info Àɪº¯Á¤Þ¶µ¥Ø¤¤, ·j´M¤@­Ó«ü©wªº¦r¦ê,\n"
+
+#: info/infodoc.c:130
+msgid ""
+" file, and select the node referenced by the first entry "
+"found.\n"
+msgstr " ¨Ã¥B¿ï¾Ü²Ä¤@­Ó·j´M¨ìªº¶µ¥Ø©Ò°Ñ·Óªº¸`ÂI.\n"
+
+#: info/infodoc.c:131
+#, c-format
+msgid " %-10s Move to node specified by name.\n"
+msgstr " %-10s ²¾°Ê¨ì«ü©w¦WºÙªº¸`ÂI.\n"
+
+#: info/infodoc.c:132
+msgid ""
+" 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:133
+#, fuzzy, c-format
+msgid " %-10s Search forward for a specified string,\n"
+msgstr " %-10s ¦b¥» Info Àɤ¤, ¦V«e·j´M¤@­Ó«ü©wªº¦r¦ê,\n"
+
+#: info/infodoc.c:134 info/infodoc.c:136
+msgid ""
+" and select the node in which the next occurrence is found.\n"
+msgstr " ¨Ã¥B¿ï¾Ü¤U¤@­Ó·j´M¨ìªº¦r¦ê©Ò¦bªº¸`ÂI.\n"
+
+#: info/infodoc.c:135
+#, fuzzy, c-format
+msgid " %-10s Search backward for a specified string\n"
+msgstr " %-10s ¦b¥» Info Àɤ¤, ¦V«á·j´M¤@­Ó«ü©wªº¦r¦ê,\n"
+
+#: info/infodoc.c:316
+msgid "The current search path is:\n"
+msgstr "¥Ø«eªº·j´M¸ô®|¬°:\n"
+
+#: info/infodoc.c:320
+msgid ""
+"Commands available in Info windows:\n"
+"\n"
+msgstr ""
+"¦b Info ¤À¹jµøµ¡¤¤¥i¥Îªº«ü¥O:\n"
+"\n"
+
+#: info/infodoc.c:324
+msgid ""
+"Commands available in the echo area:\n"
+"\n"
+msgstr ""
+"¦^À³°Ï¤¤¥i¥Îªº«ü¥O:\n"
+"\n"
+
+#: info/infodoc.c:347
+#, 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:351
+#, 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:375
+msgid "--- Use `\\[history-node]' or `\\[kill-node]' to exit ---\n"
+msgstr "--- ¨Ï¥Î `\\[history-node]' ©Î `\\[kill-node]' Â÷¶}---\n"
+
+#: info/infodoc.c:485
+msgid "Display help message"
+msgstr "Åã¥Ü¨D§U°T®§"
+
+#: info/infodoc.c:503
+msgid "Visit Info node `(info)Help'"
+msgstr "«ô³X Info ¸`ÂI `(info)Help'"
+
+#: info/infodoc.c:641
+msgid "Print documentation for KEY"
+msgstr "¦C¥X KEY ªº¤å¥ó"
+
+#: info/infodoc.c:653
+#, c-format
+msgid "Describe key: %s"
+msgstr "´y­z«öÁä«ü¥O: %s"
+
+#: info/infodoc.c:664
+#, c-format
+msgid "ESC %s is undefined."
+msgstr "ESC %s ¥¼©w¸q."
+
+#: info/infodoc.c:680 info/infodoc.c:709
+#, c-format
+msgid "%s is undefined."
+msgstr "%s ¥¼©w¸q."
+
+#: info/infodoc.c:730
+#, c-format
+msgid "%s is defined to %s."
+msgstr "%s ©w¸q¦¨ %s."
+
+#: info/infodoc.c:1153
+msgid "Show what to type to execute a given command"
+msgstr "Åã¥Ü°õ¦æ¬Y©R¥O©Ò»ÝÁä¤Jªº«öÁä"
+
+#: info/infodoc.c:1157
+msgid "Where is command: "
+msgstr ""
+
+#: info/infodoc.c:1179
+#, c-format
+msgid "`%s' is not on any keys"
+msgstr "`%s' ¥¼Ãìµ²¨ì¥ô¦ó«öÁä"
+
+#: info/infodoc.c:1186
+#, c-format
+msgid "%s can only be invoked via %s."
+msgstr "%s ¥u¯à¸g¥Ñ %s °õ¦æ."
+
+#: info/infodoc.c:1190
+#, c-format
+msgid "%s can be invoked via %s."
+msgstr "%s ¥i¸g¥Ñ %s °õ¦æ."
+
+#: info/infodoc.c:1195
+#, c-format
+msgid "There is no function named `%s'"
+msgstr "¨S¦³¦W¬° `%s' ªº¨ç¦¡"
+
+#: info/infokey.c:145
+#, c-format
+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 ¦Û¥Ñ³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"
+
+#: 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:1500
+#, c-format
+msgid "Ignoring invalid infokey file `%s' - too small"
+msgstr ""
+
+#: info/infomap.c:1503
+#, c-format
+msgid "Ignoring invalid infokey file `%s' - too big"
+msgstr ""
+
+#: info/infomap.c:1516
+#, c-format
+msgid "Error reading infokey file `%s' - short read"
+msgstr ""
+
+#: info/infomap.c:1535
+#, c-format
+msgid ""
+"Invalid infokey file `%s' (bad magic numbers) -- run infokey to update it"
+msgstr ""
+
+#: info/infomap.c:1544
+#, c-format
+msgid "Your infokey file `%s' is out of date -- run infokey to update it"
+msgstr ""
+
+#: info/infomap.c:1560
+#, c-format
+msgid ""
+"Invalid infokey file `%s' (bad section length) -- run infokey to update it"
+msgstr ""
+
+#: info/infomap.c:1581
+#, c-format
+msgid ""
+"Invalid infokey file `%s' (bad section code) -- run infokey to update it"
+msgstr ""
+
+#: info/infomap.c:1716
+msgid "Bad data in infokey file -- some key bindings ignored"
+msgstr ""
+
+#: info/infomap.c:1766
+msgid "Bad data in infokey file -- some var settings ignored"
+msgstr ""
+
+#: info/m-x.c:69
+msgid "Read the name of an Info command and describe it"
+msgstr "Ū¨ú Info ©R¥Oªº¦WºÙ, ¨Ã¥B´y­z¥¦"
+
+#: info/m-x.c:73
+msgid "Describe command: "
+msgstr "´y­z©R¥O: "
+
+#: info/m-x.c:96
+msgid "Read a command name in the echo area and execute it"
+msgstr "¦b¦^À³°Ï¤¤Åª¨ú©R¥O¦WºÙ, ¨Ã¥B°õ¦æ¥¦"
+
+#: info/m-x.c:140
+msgid "Cannot execute an `echo-area' command here."
+msgstr "µLªk¦b³o¸Ì°õ¦æ `echo-area' ©R¥O."
+
+#: info/m-x.c:154
+#, fuzzy, c-format
+msgid "Undefined command: %s"
+msgstr "¥¼ª¾ªº©R¥O `%s'"
+
+#: info/m-x.c:160
+msgid "Set the height of the displayed window"
+msgstr "³]©wÅã¥Üµøµ¡ªº°ª«×"
+
+#: info/m-x.c:173
+#, c-format
+msgid "Set screen height to (%d): "
+msgstr "³]©w¿Ã¹õ°ª«×¬° (%d): "
+
+#: info/makedoc.c:162 info/makedoc.c:170
+#, c-format
+msgid ""
+" Source files groveled to make this file include:\n"
+"\n"
+msgstr ""
+
+#: info/makedoc.c:550
+#, c-format
+msgid "Couldn't manipulate the file %s.\n"
+msgstr "µLªk³B²zÀÉ®× %s.\n"
+
+#: info/nodemenu.c:31
+msgid ""
+"\n"
+"* Menu:\n"
+" (File)Node Lines Size Containing File\n"
+" ---------- ----- ---- ---------------"
+msgstr ""
+"\n"
+"* ¿ï³æ:\n"
+" (ÀÉ®×)¸`ÂI ¦æ ¼Æ ¤j¤p ¥] §t ÀÉ ®×\n"
+" ---------- ----- ---- ---------------"
+
+#: info/nodemenu.c:202
+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:224
+msgid "Make a window containing a menu of all of the currently visited nodes"
+msgstr "²£¥Í¤@­Ó¤À¹jµøµ¡, ¥]§t©Ò¦³³Ìªñ«ô³X¹Lªº¸`ÂI¿ï³æ"
+
+#: info/nodemenu.c:304
+msgid "Select a node which has been previously visited in a visible window"
+msgstr "¿ï¨ú¤§«e¦b¥i¨£¤À¹jµøµ¡«ô³X¹Lªº¸`ÂI"
+
+#: info/nodemenu.c:317
+msgid "Select visited node: "
+msgstr "¿ï¨ú«ô³X¹Lªº¸`ÂI: "
+
+#: info/nodemenu.c:337 info/session.c:2264
+#, c-format
+msgid "The reference disappeared! (%s)."
+msgstr "¥æ¤¬°Ñ·Ó¤£¨£¤F! (%s)."
+
+#: info/session.c:162
+#, 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:620
+msgid "Move down to the next line"
+msgstr "²¾¦Ü¤U¤@¦æ"
+
+#: info/session.c:635
+msgid "Move up to the previous line"
+msgstr "²¾¦Ü¤W¤@¦æ"
+
+#: info/session.c:650
+msgid "Move to the end of the line"
+msgstr "²¾¦Ü¥»¦æµ²§À"
+
+#: info/session.c:670
+msgid "Move to the start of the line"
+msgstr "²¾¦Ü¥»¦æ¶}ÀY"
+
+#: info/session.c:860 makeinfo/node.c:1424
+msgid "Next"
+msgstr "¤U¤@­Ó"
+
+#: info/session.c:863
+msgid "Following Next node..."
+msgstr "¸òÀH¤U¤@­Ó¸`ÂI..."
+
+#: info/session.c:881
+msgid "Selecting first menu item..."
+msgstr "¿ï¨ú²Ä¤@­Ó¿ï³æ¶µ¥Ø..."
+
+#: info/session.c:893
+msgid "Selecting Next node..."
+msgstr "¿ï¨ú¤U¤@­Ó¸`ÂI..."
+
+#: info/session.c:964
+#, c-format
+msgid "Moving Up %d time(s), then Next."
+msgstr "©¹¤W¤@¼h²¾°Ê %d ¦¸, µM«á©¹¤U¤@­Ó¤è¦V²¾°Ê."
+
+#: info/session.c:988
+msgid "No more nodes within this document."
+msgstr "¥»¤å¥ó¤¤¨S¦³§ó¦hªº¸`ÂI¤F."
+
+#: info/session.c:1011
+msgid "No `Prev' for this node."
+msgstr "¥»¸`ÂI¨S¦³ `¤W¤@­Ó (Prev)' ¸`ÂI."
+
+#: info/session.c:1014 info/session.c:1073
+msgid "Moving Prev in this window."
+msgstr "¦V¥»¤À¹jµøµ¡ªº ¤W¤@­Ó (Prev) ¸`ÂI²¾°Ê."
+
+#: info/session.c:1030
+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:1034
+msgid "Moving Up in this window."
+msgstr "¦V¥»¤À¹jµøµ¡ªº¤W¤@¼h¸`ÂI²¾°Ê."
+
+#: info/session.c:1084
+msgid "Moving to `Prev's last menu item."
+msgstr "²¾¦Ü«e¤@­Ó¸`ÂIªº³Ì«á¤@­Ó¥Ø¿ý¶µ¥Ø."
+
+#: info/session.c:1095
+msgid "Move forwards or down through node structure"
+msgstr "¦b¸`ÂIµ²ºc¤¤, ©¹«e©Î©¹¤U²¾°Ê"
+
+#: info/session.c:1111
+msgid "Move backwards or up through node structure"
+msgstr "¦b¸`ÂIµ²ºc¤¤, ©¹«á©Î©¹¤U²¾°Ê"
+
+#: info/session.c:1205
+msgid "Scroll forward in this window"
+msgstr "¦b¥»¤À¹jµøµ¡¤¤¦V«e±²°Ê"
+
+#: info/session.c:1213
+msgid "Scroll forward in this window and set default window size"
+msgstr "¦b¥»¤À¹jµøµ¡¤¤¦V«e±²°Ê, ¨Ã¥B³]©w¦¨¹w³]ªº¤À¹jµøµ¡¤Ø¤o"
+
+#: info/session.c:1221
+#, fuzzy
+msgid "Scroll forward in this window staying within node"
+msgstr "¦b¥»¤À¹jµøµ¡¤¤¦V«e±²°Ê"
+
+#: info/session.c:1229
+#, 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:1237
+msgid "Scroll backward in this window"
+msgstr "¦b¥»¤À¹jµøµ¡¤¤¦V«á±²°Ê"
+
+#: info/session.c:1245
+msgid "Scroll backward in this window and set default window size"
+msgstr "¦b¥»¤À¹jµøµ¡¤¤¦V«á±²°Ê, ¨Ã¥B³]©w¦¨¹w³]ªº¤À¹jµøµ¡¤Ø¤o"
+
+#: info/session.c:1254
+#, fuzzy
+msgid "Scroll backward in this window staying within node"
+msgstr "¦b¥»¤À¹jµøµ¡¤¤¦V«á±²°Ê"
+
+#: info/session.c:1262
+#, 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:1270
+msgid "Move to the start of this node"
+msgstr "²¾¦Ü¥»¸`ÂIªº°_ÂI"
+
+#: info/session.c:1277
+msgid "Move to the end of this node"
+msgstr "²¾¦Ü¥»¸`ÂIªºµ²§À"
+
+#: info/session.c:1284
+msgid "Scroll down by lines"
+msgstr "¤@¦æ¦æ¦V¤U±²°Ê"
+
+#: info/session.c:1301
+msgid "Scroll up by lines"
+msgstr "¤@¦æ¦æ¦V¤W±²°Ê"
+
+#: info/session.c:1319
+msgid "Scroll down by half screen size"
+msgstr "¦V¤U±²°Ê¥b­Ó¿Ã¹õªº¤j¤p"
+
+#: info/session.c:1345
+msgid "Scroll up by half screen size"
+msgstr "¦V¤W±²°Ê¥b­Ó¿Ã¹õªº¤j¤p"
+
+#: info/session.c:1374
+msgid "Select the next window"
+msgstr "¿ï¾Ü¤U¤@­Ó¤À¹jµøµ¡"
+
+#: info/session.c:1413
+msgid "Select the previous window"
+msgstr "¿ï¾Ü«e¤@­Ó¤À¹jµøµ¡"
+
+#: info/session.c:1464
+msgid "Split the current window"
+msgstr "¤À¹j¥Ø«eªº¤À¹jµøµ¡"
+
+#: info/session.c:1545
+msgid "Delete the current window"
+msgstr "§R°£¥Ø«eªº¤À¹jµøµ¡"
+
+#: info/session.c:1553
+msgid "Cannot delete a permanent window"
+msgstr "µLªk§R°£©T©wªº¤À¹jµøµ¡"
+
+#: info/session.c:1585
+msgid "Delete all other windows"
+msgstr "§R°£©Ò¦³¨ä¥¦ªº¤À¹jµøµ¡"
+
+#: info/session.c:1631
+msgid "Scroll the other window"
+msgstr "±²°Ê¥t¤@­Ó¤À¹jµøµ¡"
+
+#: info/session.c:1652
+msgid "Scroll the other window backward"
+msgstr "¦V«á±²°Ê¥t¤@­Ó¤À¹jµøµ¡"
+
+#: info/session.c:1658
+msgid "Grow (or shrink) this window"
+msgstr "ÂX¤j (©ÎÁY¤p) ³o­Ó¤À¹jµøµ¡"
+
+#: info/session.c:1669
+msgid "Divide the available screen space among the visible windows"
+msgstr "¦b¥i¥Îªº¿Ã¹õªÅ¶¡¤¤, ¥­§¡¤À³Î©Ò¦³ªº¥i¨£¤À¹jµøµ¡"
+
+#: info/session.c:1676
+msgid "Toggle the state of line wrapping in the current window"
+msgstr "¤Á´«¥Ø«e¤À¹jµøµ¡ªº¦Û°Ê´«¦æª¬ºA"
+
+#: info/session.c:1848
+msgid "Select the Next node"
+msgstr "¿ï¨ú ¤U¤@­Ó ¸`ÂI"
+
+#: info/session.c:1856
+msgid "Select the Prev node"
+msgstr "¿ï¨ú «e¤@­Ó ¸`ÂI"
+
+#: info/session.c:1864
+msgid "Select the Up node"
+msgstr "¿ï¨ú ¤W¤@¼h ¸`ÂI"
+
+#: info/session.c:1871
+msgid "Select the last node in this file"
+msgstr "¿ï¨ú¥»Àɮתº³Ì«á¤@­Ó¸`ÂI"
+
+#: info/session.c:1898 info/session.c:1931
+msgid "This window has no additional nodes"
+msgstr "¥»¤À¹jµøµ¡¨S¦³ÃB¥~ªº¸`ÂI"
+
+#: info/session.c:1904
+msgid "Select the first node in this file"
+msgstr "¿ï¨ú¥»Àɮתº²Ä¤@­Ó¸`ÂI"
+
+#: info/session.c:1938
+msgid "Select the last item in this node's menu"
+msgstr "¿ï¨ú¥»¸`ÂI¿ï³æ¤¤, ³Ì«á¤@­Ó¶µ¥Ø"
+
+#: info/session.c:1944
+msgid "Select this menu item"
+msgstr "¿ï¾Ü³o¤@­Ó¿ï³æ¶µ¥Ø"
+
+#: info/session.c:1977
+#, c-format
+msgid "There aren't %d items in this menu."
+msgstr "¥»¿ï³æ¤¤¨S¦³ %d ­Ó¶µ¥Ø"
+
+#: info/session.c:2171 info/session.c:2172
+#, c-format
+msgid "Menu item (%s): "
+msgstr "¿ï³æ¶µ¥Ø (%s): "
+
+#: info/session.c:2175
+msgid "Menu item: "
+msgstr "¿ï³æ¶µ¥Ø: "
+
+#: info/session.c:2182 info/session.c:2183
+#, c-format
+msgid "Follow xref (%s): "
+msgstr "¸òÀH¥æ¤¬°Ñ·Ó (%s): "
+
+#: info/session.c:2186
+msgid "Follow xref: "
+msgstr "¸òÀH¥æ¤¬°Ñ·Ó: "
+
+#: info/session.c:2315
+msgid "Read a menu item and select its node"
+msgstr "Ū¨ú¤@­Ó¿ï³æ¶µ¥Ø, ¨Ã¥B¿ï¾Ü¥¦ªº¸`ÂI"
+
+#: info/session.c:2323
+msgid "Read a footnote or cross reference and select its node"
+msgstr "Ū¨ú¤@­Óµù¸}©Î¥æ¤¬°Ñ·Ó, ¨Ã¥B¿ï¾Ü¥¦ªº¸`ÂI"
+
+#: info/session.c:2329
+msgid "Move to the start of this node's menu"
+msgstr "²¾¦Ü¥»¸`ÂIªº¿ï³æ¶}ÀY"
+
+#: info/session.c:2353
+msgid "Visit as many menu items at once as possible"
+msgstr "¾¨¥i¯à¤@¦¸«ô³X³Ì¦h­Ó¿ï³æ¶µ¥Ø"
+
+#: info/session.c:2381
+msgid "Read a node name and select it"
+msgstr "Ū¨ú¸`ÂI¦WºÙ, ¨Ã¥B¿ï¾Ü¥¦"
+
+#: info/session.c:2436 info/session.c:2441
+msgid "Goto node: "
+msgstr "¸õ¦Ü¸`ÂI: "
+
+#: info/session.c:2505
+#, c-format
+msgid "No menu in node `%s'."
+msgstr "¸`ÂI `%s' ¤¤¨S¦³¿ï³æ."
+
+#: info/session.c:2551
+#, c-format
+msgid "No menu item `%s' in node `%s'."
+msgstr "¿ï³æ¶µ¥Ø `%s' ¤£¦b¸`ÂI `%s' ¤¤."
+
+#: info/session.c:2581
+#, c-format
+msgid "Unable to find node referenced by `%s' in `%s'."
+msgstr "³Q°Ñ·Óªº¸`ÂI `%s' ¦b `%s' ¤¤§ä¤£¨ì."
+
+#: info/session.c:2631
+msgid "Read a list of menus starting from dir and follow them"
+msgstr "Ū¨ú¦Û dir ¶}©lªº¸`ÂI±ø¦C, ¨Ã¥B¸òÀH¥¦­Ì"
+
+#: info/session.c:2633
+msgid "Follow menus: "
+msgstr "¸òÀH¿ï³æ: "
+
+#: info/session.c:2826
+msgid "Find the node describing program invocation"
+msgstr "§ä´M´y­zµ{¦¡°õ¦æ¤èªkªº¸`ÂI"
+
+#: info/session.c:2828
+#, c-format
+msgid "Find Invocation node of [%s]: "
+msgstr "§ä´M [%s] ªº°õ¦æ¤èªk¸`ÂI: "
+
+#: info/session.c:2866
+msgid "Read a manpage reference and select it"
+msgstr "Ū¨ú½u¤W¤â¥U (manpage) ªº°Ñ·Ó, ¨Ã¥B¿ï¾Ü¥¦"
+
+#: info/session.c:2870
+msgid "Get Manpage: "
+msgstr "¨ú±o½u¤W¤â¥U (Manpage): "
+
+#: info/session.c:2900
+msgid "Select the node `Top' in this file"
+msgstr "¿ï¨ú¥»Àɮפ¤ªº `Top' ¸`ÂI"
+
+#: info/session.c:2906
+msgid "Select the node `(dir)'"
+msgstr "¿ï¨ú¸`ÂI `(dir)'"
+
+#: info/session.c:2923 info/session.c:2925
+#, c-format
+msgid "Kill node (%s): "
+msgstr "§R°£¸`ÂI (%s): "
+
+#: info/session.c:2977
+#, c-format
+msgid "Cannot kill node `%s'"
+msgstr "µLªk§R°£¸`ÂI `%s'"
+
+#: info/session.c:2987
+msgid "Cannot kill the last node"
+msgstr "µLªk§R°£¤W¤@­Ó¸`ÂI"
+
+#: info/session.c:3073
+msgid "Select the most recently selected node"
+msgstr "¿ï¾Ü³Ìªñ¤@¦¸³Q¿ï¾Üªº¸`ÂI"
+
+#: info/session.c:3079
+msgid "Kill this node"
+msgstr "§R°£¥»¸`ÂI"
+
+#: info/session.c:3087
+msgid "Read the name of a file and select it"
+msgstr "Ū¨úÀɮצWºÙ, µM«á¿ï¨ú¥¦"
+
+#: info/session.c:3091
+msgid "Find file: "
+msgstr "§ä´MÀÉ®×: "
+
+#: info/session.c:3108
+#, c-format
+msgid "Cannot find `%s'."
+msgstr "µLªk§ä¨ì `%s'."
+
+#: info/session.c:3151 info/session.c:3269
+#, c-format
+msgid "Could not create output file `%s'."
+msgstr "µLªk«Ø¥ß¿é¥XÀÉ®× `%s'."
+
+#: info/session.c:3165 info/session.c:3287 info/session.c:3347
+msgid "Done."
+msgstr "§¹¦¨."
+
+#: info/session.c:3220
+#, c-format
+msgid "Writing node %s..."
+msgstr "¼g¤J¸`ÂI %s ¤¤..."
+
+#: info/session.c:3296
+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:3331
+#, c-format
+msgid "Cannot open pipe to `%s'."
+msgstr "µLªk¶}±Ò¦Ü `%s' ªººÞ¹D."
+
+#: info/session.c:3337
+#, c-format
+msgid "Printing node %s..."
+msgstr "¦C¦L¸`ÂI %s ¤¤..."
+
+#: info/session.c:3567
+#, c-format
+msgid "Searching subfile %s ..."
+msgstr "·j´M¤lÀÉ®× %s ..."
+
+#: info/session.c:3619
+msgid "Read a string and search for it case-sensitively"
+msgstr "Ū¨ú¤@­Ó¦r¦ê, µM«á¥H°Ï¤À¤j¤p¼g¤è¦¡·j´M"
+
+#: info/session.c:3626
+msgid "Read a string and search for it"
+msgstr "Ū¨ú¤@­Ó¦r¦ê, µM«á·j´M"
+
+#: info/session.c:3634
+msgid "Read a string and search backward for it"
+msgstr "Ū¨ú¤@­Ó¦r¦ê, µM«á¦V«á·j´M"
+
+#: info/session.c:3670 info/session.c:3677
+#, c-format
+msgid "%s%sfor string [%s]: "
+msgstr "%s%s [%s]: "
+
+#: info/session.c:3671 info/session.c:3678
+msgid "Search backward"
+msgstr "¦V«á·j´M¦r¦ê"
+
+#: info/session.c:3672 info/session.c:3678
+msgid "Search"
+msgstr "·j´M¦r¦ê"
+
+#: info/session.c:3673 info/session.c:3679
+msgid " case-sensitively "
+msgstr ", ¥H°Ï¤À¤j¤p¼gªº¤è¦¡"
+
+#: info/session.c:3674 info/session.c:3679
+msgid " "
+msgstr " "
+
+#: info/session.c:3718
+msgid "Search failed."
+msgstr "·j´M¥¢±Ñ."
+
+#: info/session.c:3736
+msgid "Repeat last search in the same direction"
+msgstr "¥H¦P¼Ëªº·j´M¤è¦V­«ÂФW¦¸ªº·j´M"
+
+#: info/session.c:3739 info/session.c:3749
+msgid "No previous search string"
+msgstr "¨S¦³«e¤@¦¸ªº·j´M¦r¦ê"
+
+#: info/session.c:3746
+msgid "Repeat last search in the reverse direction"
+msgstr "¥H¬Û¤Ïªº·j´M¤è¦V­«ÂФW¦¸ªº·j´M"
+
+#: info/session.c:3765 info/session.c:3771
+msgid "Search interactively for a string as you type it"
+msgstr "¥H¤¬°Ê¤è¦¡, Ãä¿é¤J¦r¦êÃä·j´M"
+
+#: info/session.c:3851
+msgid "I-search backward: "
+msgstr "¤Ï¦V¤¬°Ê·j´M: "
+
+#: info/session.c:3853
+msgid "I-search: "
+msgstr "¤¬°Ê·j´M: "
+
+#: info/session.c:3878 info/session.c:3880
+msgid "Failing "
+msgstr "¥¢±Ñ "
+
+#: info/session.c:4340
+msgid "Move to the previous cross reference"
+msgstr "²¾°Ê¦Ü«e¤@­Ó¥æ¤¬°Ñ·Ó"
+
+#: info/session.c:4349
+msgid "Move to the next cross reference"
+msgstr "²¾°Ê¦Ü¤U¤@­Ó¥æ¤¬°Ñ·Ó"
+
+#: info/session.c:4359
+msgid "Select reference or menu item appearing on this line"
+msgstr "¿ï¾Ü¥X²{¦b¥»¦æªº°Ñ·Ó©Î¿ï³æ¶µ¥Ø"
+
+#: info/session.c:4382
+msgid "Cancel current operation"
+msgstr "¨ú®ø¥Ø«eªº§@·~"
+
+#: info/session.c:4389
+msgid "Quit"
+msgstr "µ²§ô"
+
+#: info/session.c:4398
+msgid "Move the cursor to a specific line of the window"
+msgstr "²¾°Ê´å¼Ð¦Ü¤À¹jµøµ¡¤¤ªº«ü©w¦ì¸m"
+
+#: info/session.c:4430
+msgid "Redraw the display"
+msgstr "­«Ã¸µe­±"
+
+#: info/session.c:4467
+msgid "Quit using Info"
+msgstr "µ²§ô¨Ï¥Î Info"
+
+#: info/session.c:4480
+msgid "Run command bound to this key's lowercase variant"
+msgstr ""
+
+#: info/session.c:4491
+#, c-format
+msgid "Unknown command (%s)."
+msgstr "¥¼ª¾ªº©R¥O (%s)."
+
+#: info/session.c:4494
+#, c-format
+msgid "\"%s\" is invalid"
+msgstr "\"%s\" ¤£¦Xªk"
+
+#: info/session.c:4495
+#, fuzzy, c-format
+msgid "`%s' is invalid"
+msgstr "\"%s\" ¤£¦Xªk"
+
+#: info/session.c:4709
+msgid "Add this digit to the current numeric argument"
+msgstr "±N¥»¼Æ¦r¥[¦Ü¥Ø«eªº¼Æ­È¤Þ¼Æ"
+
+#: info/session.c:4718
+msgid "Start (or multiply by 4) the current numeric argument"
+msgstr "¶}©l¥Ø«eªº¼Æ­È¤Þ¼Æ (©Î¬O­¼¥H 4)"
+
+#: info/session.c:4733
+msgid "Internally used by \\[universal-argument]"
+msgstr "¦b¤º³¡³Q \\[universal-argument] ¨Ï¥Î"
+
+#: info/tilde.c:338
+#, 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:64
+msgid "The number lines to scroll when the cursor moves out of the window"
+msgstr "±±¨î·í´å¼Ð²¾°Ê¦Ü¤À¹jµøµ¡¥~®É, ±²°Êªº¦æ¼Æ"
+
+#: info/variables.c:68
+msgid "When \"On\", Info accepts and displays ISO Latin characters"
+msgstr "·í³]©w¦b \"On\" ®É, Info ¥i±µ¨ü¨ÃÅã¥Ü ISO Latin ¦r¤¸"
+
+#: info/variables.c:74
+msgid "Explain the use of a variable"
+msgstr "¸ÑÄÀÅܼƪº¥Îªk"
+
+#: info/variables.c:80
+msgid "Describe variable: "
+msgstr "´y­zÅܼÆ: "
+
+#: info/variables.c:99
+msgid "Set the value of an Info variable"
+msgstr "³]©w Info Åܼƪº¼Æ­È"
+
+#: info/variables.c:105
+msgid "Set variable: "
+msgstr "³]©wÅܼÆ: "
+
+#: info/variables.c:123
+#, c-format
+msgid "Set %s to value (%d): "
+msgstr "³]©w %s ªº¼Æ­È (%d): "
+
+#: info/variables.c:164
+#, c-format
+msgid "Set %s to value (%s): "
+msgstr "³]©w %s ªº¼Æ­È (%s): "
+
+#: info/window.c:1138
+msgid "--*** Tags out of Date ***"
+msgstr ""
+
+#: info/window.c:1149
+msgid "-----Info: (), lines ----, "
+msgstr "-----Info: (), ¦æ¼Æ ----, "
+
+#: info/window.c:1156
+#, c-format
+msgid "-%s---Info: %s, %d lines --%s--"
+msgstr "-%s---Info: %s, ¦@ %d ¦æ --%s--"
+
+#: info/window.c:1160
+#, c-format
+msgid "-%s%s-Info: (%s)%s, %d lines --%s--"
+msgstr "-%s%s-Info: (%s)%s, ¦@ %d ¦æ --%s--"
+
+#: info/window.c:1167
+#, c-format
+msgid " Subfile: %s"
+msgstr " ¤lÀÉ®×: %s"
+
+#: lib/getopt.c:551 lib/getopt.c:570
+#, c-format
+msgid "%s: option `%s' is ambiguous\n"
+msgstr "%s: ¿ï¶µ `%s' ¤£©ú\n"
+
+#: lib/getopt.c:603 lib/getopt.c:607
+#, c-format
+msgid "%s: option `--%s' doesn't allow an argument\n"
+msgstr "%s: ¿ï¶µ `--%s' ¤£¥i§t¦³¤Þ¼Æ\n"
+
+#: lib/getopt.c:616 lib/getopt.c:621
+#, c-format
+msgid "%s: option `%c%s' doesn't allow an argument\n"
+msgstr "%s: ¿ï¶µ `%c%s' ¤£¥i§t¦³¤Þ¼Æ\n"
+
+#: lib/getopt.c:667 lib/getopt.c:689 lib/getopt.c:1020 lib/getopt.c:1042
+#, c-format
+msgid "%s: option `%s' requires an argument\n"
+msgstr "%s: ¿ï¶µ `%s' ¥²¶·§t¦³¤Þ¼Æ\n"
+
+#: lib/getopt.c:727 lib/getopt.c:730
+#, c-format
+msgid "%s: unrecognized option `--%s'\n"
+msgstr "%s: ¥¼ª¾ªº¿ï¶µ `--%s'\n"
+
+#: lib/getopt.c:738 lib/getopt.c:741
+#, c-format
+msgid "%s: unrecognized option `%c%s'\n"
+msgstr "%s: ¥¼ª¾ªº¿ï¶µ `%c%s'\n"
+
+#: lib/getopt.c:796 lib/getopt.c:799
+#, c-format
+msgid "%s: illegal option -- %c\n"
+msgstr "%s: ¤£¦Xªkªº¿ï¶µ -- %c\n"
+
+#: lib/getopt.c:805 lib/getopt.c:808
+#, c-format
+msgid "%s: invalid option -- %c\n"
+msgstr "%s: µL®Äªº¿ï¶µ -- %c\n"
+
+#: lib/getopt.c:863 lib/getopt.c:882 lib/getopt.c:1095 lib/getopt.c:1116
+#, c-format
+msgid "%s: option requires an argument -- %c\n"
+msgstr "%s: ¿ï¶µ¥²¶·§t¦³¤Þ¼Æ -- %c\n"
+
+#: lib/getopt.c:935 lib/getopt.c:954
+#, c-format
+msgid "%s: option `-W %s' is ambiguous\n"
+msgstr "%s: ¿ï¶µ `-W %s' ¤£©ú½T\n"
+
+#: lib/getopt.c:978 lib/getopt.c:999
+#, c-format
+msgid "%s: option `-W %s' doesn't allow an argument\n"
+msgstr "%s: ¿ï¶µ `-W %s' ¤£¥i§t¦³¤Þ¼Æ\n"
+
+#: makeinfo/cmds.c:520 makeinfo/cmds.c:542
+#, fuzzy, c-format
+msgid "arguments to @%s ignored"
+msgstr "¹ï %c%s µL¥Îªº¤Þ¼Æ"
+
+#: makeinfo/cmds.c:585
+msgid "January"
+msgstr "¤@¤ë"
+
+#: makeinfo/cmds.c:585
+msgid "February"
+msgstr "¤G¤ë"
+
+#: makeinfo/cmds.c:585
+msgid "March"
+msgstr "¤T¤ë"
+
+#: makeinfo/cmds.c:585
+msgid "April"
+msgstr "¥|¤ë"
+
+#: makeinfo/cmds.c:585
+msgid "May"
+msgstr "¤­¤ë"
+
+#: makeinfo/cmds.c:586
+msgid "June"
+msgstr "¤»¤ë"
+
+#: makeinfo/cmds.c:586
+msgid "July"
+msgstr "¤C¤ë"
+
+#: makeinfo/cmds.c:586
+msgid "August"
+msgstr "¤K¤ë"
+
+#: makeinfo/cmds.c:586
+msgid "September"
+msgstr "¤E¤ë"
+
+#: makeinfo/cmds.c:586
+msgid "October"
+msgstr "¤Q¤ë"
+
+#: makeinfo/cmds.c:587
+msgid "November"
+msgstr "¤Q¤@¤ë"
+
+#: makeinfo/cmds.c:587
+msgid "December"
+msgstr "¤Q¤G¤ë"
+
+#: makeinfo/cmds.c:936
+#, c-format
+msgid "unlikely character %c in @var"
+msgstr ""
+
+#: makeinfo/cmds.c:979
+msgid "@sc argument all uppercase, thus no effect"
+msgstr "@sc ªº¤Þ¼Æ¥þ¬O¤j¼g, ©Ò¥H¨S¦³§@¥Î"
+
+#: makeinfo/cmds.c:1034
+#, c-format
+msgid "`{' expected, but saw `%c'"
+msgstr ""
+
+#: makeinfo/cmds.c:1074
+msgid "end of file inside verb block"
+msgstr ""
+
+#: makeinfo/cmds.c:1082
+#, c-format
+msgid "`}' expected, but saw `%c'"
+msgstr ""
+
+#: makeinfo/cmds.c:1112
+msgid ""
+"@strong{Note...} produces a spurious cross-reference in Info; reword to "
+"avoid that"
+msgstr ""
+
+#: makeinfo/cmds.c:1305
+#, c-format
+msgid "%c%s is obsolete"
+msgstr "%c%s ¤w¼o¤î¤£¥Î"
+
+#: makeinfo/cmds.c:1414
+#, c-format
+msgid "@sp requires a positive numeric argument, not `%s'"
+msgstr "@sp ¥²¶·¦³¤@­Ó¥¿¾ã¼Æªº¤Þ¼Æ, ¦Ó¤£¬O `%s'"
+
+#: makeinfo/cmds.c:1763 makeinfo/cmds.c:1819 makeinfo/footnote.c:82
+#, c-format
+msgid "Bad argument to %c%s"
+msgstr "¹ï %c%s µL¥Îªº¤Þ¼Æ"
+
+#: makeinfo/cmds.c:1773 makeinfo/makeinfo.c:4142
+msgid "asis"
+msgstr ""
+
+#: makeinfo/cmds.c:1775 makeinfo/cmds.c:1805 makeinfo/makeinfo.c:4144
+msgid "none"
+msgstr ""
+
+#: makeinfo/cmds.c:1789
+#, fuzzy, c-format
+msgid "Bad argument to @%s"
+msgstr "¹ï %c%s µL¥Îªº¤Þ¼Æ"
+
+#: makeinfo/cmds.c:1803
+msgid "insert"
+msgstr ""
+
+#: makeinfo/defun.c:84
+msgid "Missing `}' in @def arg"
+msgstr "@def °Ñ¼Æ¤¤¿òº| `}'"
+
+#: makeinfo/defun.c:403
+msgid "Function"
+msgstr ""
+
+#: makeinfo/defun.c:406
+msgid "Macro"
+msgstr ""
+
+#: makeinfo/defun.c:409
+msgid "Special Form"
+msgstr ""
+
+#: makeinfo/defun.c:413
+msgid "Variable"
+msgstr ""
+
+#: makeinfo/defun.c:416
+msgid "User Option"
+msgstr ""
+
+#: makeinfo/defun.c:420
+msgid "Instance Variable"
+msgstr ""
+
+#: makeinfo/defun.c:424
+msgid "Method"
+msgstr ""
+
+#: makeinfo/defun.c:500 makeinfo/defun.c:505 makeinfo/defun.c:545
+#: makeinfo/defun.c:644 makeinfo/xml.c:2229
+msgid "of"
+msgstr ""
+
+#: makeinfo/defun.c:509 makeinfo/defun.c:513 makeinfo/defun.c:517
+#: makeinfo/defun.c:551 makeinfo/defun.c:650 makeinfo/xml.c:2234
+msgid "on"
+msgstr ""
+
+#: makeinfo/defun.c:711
+#, c-format
+msgid "Must be in `@%s' environment to use `@%s'"
+msgstr ""
+
+#: makeinfo/files.c:435
+#, c-format
+msgid "%s: getwd: %s, %s\n"
+msgstr "%s: getwd: %s, %s\n"
+
+#: makeinfo/files.c:638
+#, c-format
+msgid "`%s' omitted before output filename"
+msgstr ""
+
+#: makeinfo/files.c:646
+#, c-format
+msgid "`%s' omitted since writing to stdout"
+msgstr ""
+
+#: makeinfo/files.c:694
+msgid "Output buffer not empty."
+msgstr ""
+
+#: makeinfo/footnote.c:150
+#, c-format
+msgid "`%c%s' needs an argument `{...}', not just `%s'"
+msgstr "`%c%s' ¥²¶·¥]§t¤Þ¼Æ `{...}', ¦Ó¤£¬O¥u¦³ `%s'"
+
+#: makeinfo/footnote.c:165
+#, c-format
+msgid "No closing brace for footnote `%s'"
+msgstr "µù¸} `%s' ¨S¦³¥k¤j¬A¸¹"
+
+#: makeinfo/footnote.c:198
+msgid "Footnote defined without parent node"
+msgstr "©w¸qµù¸}, ¦ý¬O¨S¦³¤÷¸`ÂI"
+
+#: makeinfo/footnote.c:210
+#, fuzzy
+msgid "Footnotes inside footnotes are not allowed"
+msgstr "©w¸qµù¸}, ¦ý¬O¨S¦³¤÷¸`ÂI"
+
+#: makeinfo/footnote.c:302 makeinfo/index.c:189
+msgid "Footnotes"
+msgstr "µù¸}"
+
+#: makeinfo/html.c:87
+#, c-format
+msgid "%s: could not open --css-file: %s"
+msgstr ""
+
+#: makeinfo/html.c:172
+#, c-format
+msgid "%s:%d: --css-file ended in comment"
+msgstr ""
+
+#: makeinfo/html.c:207
+msgid "Untitled"
+msgstr ""
+
+#: makeinfo/html.c:422
+msgid "[unexpected] no html tag to pop"
+msgstr ""
+
+#: makeinfo/html.c:752
+#, fuzzy, c-format
+msgid "[unexpected] invalid node name: `%s'"
+msgstr "%s: ¥¼ª¾ªº¿ï¶µ `%c%s'\n"
+
+#: makeinfo/index.c:169
+#, c-format
+msgid "Unknown index `%s'"
+msgstr "¥¼ª¾ªº¯Á¤Þ `%s'"
+
+#: makeinfo/index.c:234
+#, c-format
+msgid "Info cannot handle `:' in index entry `%s'"
+msgstr ""
+
+#: makeinfo/index.c:412
+#, c-format
+msgid "Index `%s' already exists"
+msgstr "¯Á¤Þ `%s' ¤w¦s¦b"
+
+#: makeinfo/index.c:455
+#, c-format
+msgid "Unknown index `%s' and/or `%s' in @synindex"
+msgstr "@synindex ¤¤¦³¥¼ª¾ªº¯Á¤Þ `%s' »P/©Î `%s'"
+
+#: makeinfo/index.c:661
+msgid "(line )"
+msgstr ""
+
+#: makeinfo/index.c:669
+#, c-format
+msgid "(line %*d)"
+msgstr ""
+
+#: makeinfo/index.c:750
+#, c-format
+msgid "Unknown index `%s' in @printindex"
+msgstr "@printindex ¤¤¦³¥¼ª¾ªº¯Á¤Þ `%s'"
+
+#: makeinfo/index.c:819
+#, c-format
+msgid "Entry for index `%s' outside of any node"
+msgstr "¯Á¤Þ `%s' ªº¶µ¥Ø¤£¦b¥ô¦óªº¸`ÂI¤º"
+
+#: makeinfo/index.c:822 makeinfo/index.c:858
+msgid "(outside of any node)"
+msgstr "(¤£¦b¥ô¦óªº¸`ÂI¤º)"
+
+#: makeinfo/index.c:919 makeinfo/index.c:925
+msgid "See "
+msgstr ""
+
+#: makeinfo/insertion.c:160
+msgid "@item not allowed in argument to @itemize"
+msgstr ""
+
+#: makeinfo/insertion.c:238
+msgid "Broken-Type in insertion_type_pname"
+msgstr ""
+
+#: makeinfo/insertion.c:334
+msgid "Enumeration stack overflow"
+msgstr ""
+
+#: makeinfo/insertion.c:366
+#, c-format
+msgid "lettering overflow, restarting at %c"
+msgstr ""
+
+#: makeinfo/insertion.c:631
+#, c-format
+msgid "%s requires an argument: the formatter for %citem"
+msgstr ""
+
+#: makeinfo/insertion.c:719
+#, c-format
+msgid "%cfloat environments cannot be nested"
+msgstr ""
+
+#: makeinfo/insertion.c:973
+#, c-format
+msgid "`@end' expected `%s', but saw `%s'"
+msgstr ""
+
+#: makeinfo/insertion.c:1337
+#, c-format
+msgid "No matching `%cend %s'"
+msgstr "No matching `%cend %s'"
+
+#: makeinfo/insertion.c:1592
+#, c-format
+msgid "%s requires letter or digit"
+msgstr "%s ¥²¶·­n¦³¦r¤¸©Î¬O¼Æ¦r"
+
+#: makeinfo/insertion.c:1687
+msgid "end of file inside verbatim block"
+msgstr ""
+
+#: makeinfo/insertion.c:1913
+#, fuzzy, c-format
+msgid "@%s not meaningful outside `@float' environment"
+msgstr "@%s ¦b `@%s' °Ï¶ô¤§¤º, ¨Ã¤£¨ã¦³·N¸q"
+
+#: makeinfo/insertion.c:1949
+msgid "@menu seen before first @node, creating `Top' node"
+msgstr "@menu ¦b²Ä¤@­Ó @node ¤§«e¥X²{, ±N«Ø¥ß `Top' ¸`ÂI"
+
+#: makeinfo/insertion.c:1950
+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:1962
+msgid "@detailmenu seen before first node, creating `Top' node"
+msgstr "¦b²Ä¤@­Ó¸`ÂI¤§«e¥X²{ @detailmenu, ±N«Ø¥ß `Top' ¸`ÂI"
+
+#: makeinfo/insertion.c:2018
+#, c-format
+msgid "@%s not meaningful outside `@titlepage' and `@quotation' environments"
+msgstr ""
+
+#: makeinfo/insertion.c:2032
+#, fuzzy, c-format
+msgid "@%s not meaningful outside `@titlepage' environment"
+msgstr "@%s ¦b `@%s' °Ï¶ô¤§¤º, ¨Ã¤£¨ã¦³·N¸q"
+
+#: makeinfo/insertion.c:2063
+#, c-format
+msgid "Unmatched `%c%s'"
+msgstr "¥¼°t¹ïªº `%c%s'"
+
+#: makeinfo/insertion.c:2068
+#, c-format
+msgid "`%c%s' needs something after it"
+msgstr "¦b `%c%s' ¤§«á¥²¶·­n¦³ªF¦è"
+
+#: makeinfo/insertion.c:2074
+#, fuzzy, c-format
+msgid "Bad argument `%s' to `@%s', using `%s'"
+msgstr "¹ï %c%s µL¥Îªº¤Þ¼Æ"
+
+#: makeinfo/insertion.c:2171
+#, c-format
+msgid "@%s not meaningful inside `@%s' block"
+msgstr "@%s ¦b `@%s' °Ï¶ô¤§¤º, ¨Ã¤£¨ã¦³·N¸q"
+
+#: makeinfo/insertion.c:2180
+#, c-format
+msgid "@itemx not meaningful inside `%s' block"
+msgstr "`%s' °Ï¶ô¤§¤º, @itemx ¨ÃµL·N¸q"
+
+#: makeinfo/insertion.c:2356
+#, c-format
+msgid "%c%s found outside of an insertion block"
+msgstr ""
+
+#: makeinfo/lang.c:580
+#, c-format
+msgid "%s is not a valid ISO 639 language code"
+msgstr "%s ¤£¬O¤@­Ó¦Xªkªº ISO 639 »y¨¥½X"
+
+#: makeinfo/lang.c:655
+#, fuzzy, c-format
+msgid "unrecognized encoding name `%s'"
+msgstr "%s: ¥¼ª¾ªº¿ï¶µ `%c%s'\n"
+
+#: makeinfo/lang.c:663
+#, c-format
+msgid "sorry, encoding `%s' not supported"
+msgstr ""
+
+#: makeinfo/lang.c:715
+#, c-format
+msgid "invalid encoded character `%s'"
+msgstr ""
+
+#: makeinfo/lang.c:1009
+#, c-format
+msgid "%c%s expects `i' or `j' as argument, not `%c'"
+msgstr "%c%s ´Á±æ¨Ï¥Î `i' ©Î `j' §@¬°¤Þ¼Æ, ¦Ó¤£¬O `%c'"
+
+#: makeinfo/lang.c:1013
+#, 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:355
+#, 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:586
+#, c-format
+msgid "%cend macro not found"
+msgstr ""
+
+#: makeinfo/macro.c:624
+msgid "@quote-arg only useful for single-argument macros"
+msgstr "@quote-arg ¥u¦b³æ¤@¤Þ¼Æªº¥¨¶°¦³¥Î"
+
+#: makeinfo/macro.c:660
+#, c-format
+msgid "mismatched @end %s with @%s"
+msgstr "@end %s »P @%s ¤£²Å¦X"
+
+#: makeinfo/makeinfo.c:184
+#, c-format
+msgid "Too many errors! Gave up.\n"
+msgstr "¿ù»~¹L¦h! ©ñ±ó.\n"
+
+#: makeinfo/makeinfo.c:302
+#, c-format
+msgid "%s:%d: warning: "
+msgstr "%s:%d: ĵ§i: "
+
+#: makeinfo/makeinfo.c:321 makeinfo/makeinfo.c:2260
+#, c-format
+msgid "Misplaced %c"
+msgstr "»~¸mªº %c"
+
+#: makeinfo/makeinfo.c:340
+#, c-format
+msgid "Try `%s --help' for more information.\n"
+msgstr "¸Õ¸Õ `%s --help' ¥H¨ú±o§ó¦hªº¸ê°T.\n"
+
+#: makeinfo/makeinfo.c:343
+#, fuzzy, c-format
+msgid "Usage: %s [OPTION]... TEXINFO-FILE...\n"
+msgstr "¥Îªk: %s [OPTION]... FILE...\n"
+
+#: makeinfo/makeinfo.c:346
+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:350
+#, c-format
+msgid ""
+"General options:\n"
+" --error-limit=NUM quit after NUM errors (default %d).\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"
+" --reference-limit=NUM warn about at most NUM references (default %"
+"d).\n"
+" -v, --verbose explain what is being done.\n"
+" --version display version information and exit.\n"
+msgstr ""
+
+#: makeinfo/makeinfo.c:364
+#, 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:372
+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 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 (directory if split HTML),\n"
+msgstr ""
+
+#: makeinfo/makeinfo.c:386
+#, c-format
+msgid ""
+"Options for Info and plain text:\n"
+" --enable-encoding output accented and special characters in\n"
+" Info output based on @documentencoding.\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\n"
+" in which they are defined (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:403
+msgid ""
+"Options for HTML:\n"
+" --css-include=FILE include FILE in HTML <style> output;\n"
+" read stdin if FILE is -.\n"
+msgstr ""
+
+#: makeinfo/makeinfo.c:409
+#, 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:416
+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:425
+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:444
+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:452
+#, 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:603
+#, c-format
+msgid "%s: Ignoring unrecognized TEXINFO_OUTPUT_FORMAT value `%s'.\n"
+msgstr ""
+
+#: makeinfo/makeinfo.c:647 makeinfo/makeinfo.c:673 makeinfo/makeinfo.c:692
+#: makeinfo/makeinfo.c:722 makeinfo/makeinfo.c:743
+#, c-format
+msgid "%s: %s arg must be numeric, not `%s'.\n"
+msgstr "%s: %s ¤Þ¼Æ¥²¶·¬°¼Æ­È, ¦Ó¤£¬O `%s'.\n"
+
+#: makeinfo/makeinfo.c:660
+#, fuzzy, c-format
+msgid "%s: could not open macro expansion output `%s'"
+msgstr "µLªk«Ø¥ß¿é¥XÀÉ®× `%s'."
+
+#: makeinfo/makeinfo.c:665
+#, c-format
+msgid "%s: ignoring second macro expansion output `%s'.\n"
+msgstr ""
+
+#: makeinfo/makeinfo.c:707
+#, 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:732
+#, 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:806
+#, c-format
+msgid "%s: missing file argument.\n"
+msgstr "%s: ¿òº|Àɮפ޼Æ.\n"
+
+#: makeinfo/makeinfo.c:997 makeinfo/makeinfo.c:3991
+#, c-format
+msgid "Multiline command %c%s used improperly"
+msgstr ""
+
+#: makeinfo/makeinfo.c:1000
+#, c-format
+msgid "Expected `%s'"
+msgstr "Expected `%s'"
+
+#: makeinfo/makeinfo.c:1479
+#, c-format
+msgid "Can't create directory `%s': %s"
+msgstr ""
+
+#: makeinfo/makeinfo.c:1525
+#, c-format
+msgid "No `%s' found in `%s'"
+msgstr "`%s' ¥¼¥X²{¦b `%s' ¤º"
+
+#: makeinfo/makeinfo.c:1605
+#, c-format
+msgid "%s: Skipping macro expansion to stdout as Info output is going there.\n"
+msgstr ""
+
+#: makeinfo/makeinfo.c:1638
+#, c-format
+msgid "Making %s file `%s' from `%s'.\n"
+msgstr ""
+
+#: makeinfo/makeinfo.c:1673
+#, c-format
+msgid "This is %s, produced by makeinfo version %s from %s.\n"
+msgstr "³o¬O %s, ¥Ñ makeinfo ª©¥» %s ¦Û %s ²£¥Íªº.\n"
+
+#: makeinfo/makeinfo.c:1709
+#, 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:1773
+#, 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:2034
+#, c-format
+msgid "Unknown command `%s'"
+msgstr "¥¼ª¾ªº©R¥O `%s'"
+
+#: makeinfo/makeinfo.c:2056
+#, 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:2314
+#, fuzzy, c-format
+msgid "%c%s expected braces"
+msgstr "%c%s ¹w­p­n¦³ `{...}'"
+
+#: makeinfo/makeinfo.c:2327
+msgid "Unmatched }"
+msgstr "¥¼°t¹ïªº }"
+
+#: makeinfo/makeinfo.c:2375
+msgid "NO_NAME!"
+msgstr "NO_NAME!"
+
+#: makeinfo/makeinfo.c:2396
+#, c-format
+msgid "%c%s missing close brace"
+msgstr "%c%s ¿òº|¥k¤j¬A¸¹"
+
+#: makeinfo/makeinfo.c:3309
+#, fuzzy, c-format
+msgid "@image file `%s' (for HTML) not readable: %s"
+msgstr "@image ÀÉ®× `%s' µLªkŪ¨ú: %s"
+
+#: makeinfo/makeinfo.c:3315
+#, fuzzy, c-format
+msgid "No such file `%s'"
+msgstr "`%s' ¥¼¥X²{¦b `%s' ¤º"
+
+#: makeinfo/makeinfo.c:3447
+#, fuzzy, c-format
+msgid "@image file `%s' (for text) unreadable: %s"
+msgstr "@image ÀÉ®× `%s' µLªkŪ¨ú: %s"
+
+#: makeinfo/makeinfo.c:3456
+msgid "@image missing filename argument"
+msgstr "@image ¨S¦³ÀɦW¤Þ¼Æ"
+
+#: makeinfo/makeinfo.c:3675
+#, c-format
+msgid "undefined flag: %s"
+msgstr ""
+
+#: makeinfo/makeinfo.c:3676
+#, c-format
+msgid "{No value for `%s'}"
+msgstr ""
+
+#: makeinfo/makeinfo.c:3728
+#, c-format
+msgid "%c%s requires a name"
+msgstr "%c%s ¥²¶·­n¦³¦WºÙ"
+
+#: makeinfo/makeinfo.c:3834
+#, c-format
+msgid "Reached eof before matching @end %s"
+msgstr "¦b°t¹ïªº @end %s ¤§«e, ¥ý¨ì¹FÀÉ®×µ²§À"
+
+#: makeinfo/makeinfo.c:4082
+#, 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:254
+#, c-format
+msgid "ignoring stray text `%s' after @multitable"
+msgstr ""
+
+#: makeinfo/multi.c:393
+#, c-format
+msgid "Too many columns in multitable item (max %d)"
+msgstr "multitable ¶µ¥Ø¤¤¦³¤Ó¦hªºÄæ¦ì (³Ì¤j­È¬° %d)"
+
+#: makeinfo/multi.c:555
+#, fuzzy, c-format
+msgid "[unexpected] cannot select column #%d in multitable"
+msgstr "µLªk¿ï¨ú multitable ¤¤ªºÄæ¦ì #%d"
+
+#: makeinfo/multi.c:584
+msgid "ignoring @tab outside of multitable"
+msgstr "©¿²¤ multitable ¥~ªº @tab"
+
+#: makeinfo/multi.c:632
+#, c-format
+msgid "** Multicolumn output from last row:\n"
+msgstr ""
+
+#: makeinfo/multi.c:635
+#, c-format
+msgid "* column #%d: output = %s\n"
+msgstr "* Äæ¦ì #%d: ¿é¥X = %s\n"
+
+#: makeinfo/node.c:280
+#, c-format
+msgid "Node `%s' previously defined at line %d"
+msgstr "¸`ÂI `%s' ¤w¦b²Ä %d ¦æ©w¸q¹L¤F"
+
+#: makeinfo/node.c:648
+#, c-format
+msgid "Formatting node %s...\n"
+msgstr "½s±Æ¸`ÂI %s ªº®æ¦¡¤¤...\n"
+
+#: makeinfo/node.c:716
+#, 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:879
+#, c-format
+msgid "No node name specified for `%c%s' command"
+msgstr "`%c%s' ©R¥O¤¤¥¼«ü©w¸`ÂI¦WºÙ"
+
+#: makeinfo/node.c:920 makeinfo/node.c:1151
+#, c-format
+msgid "Anchor `%s' and node `%s' map to the same file name"
+msgstr ""
+
+#: makeinfo/node.c:923
+msgid "This @anchor command ignored; references to it will not work"
+msgstr ""
+
+#: makeinfo/node.c:925 makeinfo/node.c:1154
+msgid "Rename this anchor or use the `--no-split' option"
+msgstr ""
+
+#: makeinfo/node.c:955
+#, c-format
+msgid "Unexpected string at end of split-HTML file `%s'"
+msgstr ""
+
+#: makeinfo/node.c:991
+msgid "Next:"
+msgstr "¤U¤@­Ó:"
+
+#: makeinfo/node.c:1007
+msgid "Previous:"
+msgstr "¤W¤@­Ó:"
+
+#: makeinfo/node.c:1021
+msgid "Up:"
+msgstr "¤W¤@¼h:"
+
+#: makeinfo/node.c:1148
+#, c-format
+msgid "Anchors `%s' and `%s' map to the same file name"
+msgstr ""
+
+#: makeinfo/node.c:1153
+msgid "@anchor command ignored; references to it will not work"
+msgstr ""
+
+#: makeinfo/node.c:1347
+#, fuzzy, c-format
+msgid "%s reference to nonexistent node `%s' (perhaps incorrect sectioning?)"
+msgstr "%s °Ñ·Ó¨ì¤£¦s¦bªº¸`ÂI: `%s'"
+
+#: makeinfo/node.c:1363
+msgid "Menu"
+msgstr "¥Ø¿ý"
+
+#: makeinfo/node.c:1365
+msgid "Cross"
+msgstr ""
+
+#: makeinfo/node.c:1447
+#, c-format
+msgid "Next field of node `%s' not pointed to (perhaps incorrect sectioning?)"
+msgstr ""
+
+#: makeinfo/node.c:1450
+#, c-format
+msgid "This node (%s) has the bad Prev"
+msgstr "¥»¸`ÂI (%s) ªº «e¤@­Ó (Prev) ¸`ÂI¦³°ÝÃD"
+
+#: makeinfo/node.c:1462
+msgid "Prev"
+msgstr "«e¤@­Ó"
+
+#: makeinfo/node.c:1505
+#, c-format
+msgid "Prev field of node `%s' not pointed to"
+msgstr ""
+
+#: makeinfo/node.c:1509
+#, c-format
+msgid "This node (%s) has the bad Next"
+msgstr "¥»¸`ÂI (%s) ªº ¤U¤@­Ó (Next) ¸`ÂI¦³°ÝÃD"
+
+#: makeinfo/node.c:1521
+#, c-format
+msgid "`%s' has no Up field (perhaps incorrect sectioning?)"
+msgstr ""
+
+#: makeinfo/node.c:1524
+msgid "Up"
+msgstr "¤W¤@¼h"
+
+#: makeinfo/node.c:1590
+#, c-format
+msgid "Node `%s' lacks menu item for `%s' despite being its Up target"
+msgstr ""
+
+#: makeinfo/node.c:1619
+#, c-format
+msgid "node `%s' has been referenced %d times"
+msgstr "¸`ÂI `%s' ¤w³Q°Ñ·Ó %d ¦¸"
+
+#: makeinfo/node.c:1633
+#, c-format
+msgid "unreferenced node `%s'"
+msgstr "¥¼³Q°Ñ·Óªº¸`ÂI `%s'"
+
+#: makeinfo/node.c:1723
+#, c-format
+msgid "Removing %s\n"
+msgstr ""
+
+#: makeinfo/node.c:1727
+#, 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:562
+#, c-format
+msgid "Internal error (search_sectioning) \"%s\"!"
+msgstr "¤º³¡¿ù»~ (search_sectioning) \"%s\"!"
+
+#: makeinfo/sectioning.c:623
+#, c-format
+msgid "%c%s is obsolete; use %c%s instead"
+msgstr "%c%s ¤w¼o±ó¤£¥Î; ½Ð§ï¥Î %c%s"
+
+#: makeinfo/sectioning.c:639
+#, c-format
+msgid "Node with %ctop as a section already exists"
+msgstr ""
+
+#: makeinfo/sectioning.c:647
+#, c-format
+msgid "Here is the %ctop node"
+msgstr ""
+
+#: makeinfo/sectioning.c:663
+#, c-format
+msgid "%ctop used before %cnode, defaulting to %s"
+msgstr ""
+
+#: makeinfo/toc.c:197 makeinfo/toc.c:271 makeinfo/toc.c:273
+msgid "Table of Contents"
+msgstr ""
+
+#: makeinfo/toc.c:304 makeinfo/toc.c:337 makeinfo/toc.c:339
+msgid "Short Contents"
+msgstr ""
+
+#: makeinfo/xml.c:1605
+#, c-format
+msgid "@image file `%s' unreadable: %s"
+msgstr "@image ÀÉ®× `%s' µLªkŪ¨ú: %s"
+
+#: makeinfo/xml.c:2097
+msgid ""
+"@headitem as the last item of @multitable produces invalid Docbook documents"
+msgstr ""
+
+#: util/install-info.c:154
+#, c-format
+msgid "%s: warning: "
+msgstr "%s: ĵ§i: "
+
+#: util/install-info.c:203
+#, c-format
+msgid " for %s"
+msgstr ""
+
+#: util/install-info.c:426
+#, c-format
+msgid "\tTry `%s --help' for a complete list of options.\n"
+msgstr "\t¸Õ¸Õ Try `%s --help' ¥H¨ú±o§¹¾ãªº°Ñ¼Æ¦Cªí.\n"
+
+#: util/install-info.c:434
+#, fuzzy, c-format
+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 ""
+"¥Îª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"
+
+#: util/install-info.c:488
+#, 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"
+
+#: util/install-info.c:513
+#, c-format
+msgid "%s: could not read (%s) and could not create (%s)\n"
+msgstr "%s: µLªkŪ¨ú (%s), ¦Ó¥BµLªk«Ø¥ß (%s)\n"
+
+#: util/install-info.c:600
+#, c-format
+msgid "%s: empty file"
+msgstr "%s: ªÅÀÉ®×"
+
+#: util/install-info.c:913 util/install-info.c:953
+msgid "START-INFO-DIR-ENTRY without matching END-INFO-DIR-ENTRY"
+msgstr "¦³ START-INFO-DIR-ENTRY, ¦ý¬O¨S¦³¬Û¹ïÀ³ªº END-INFO-DIR-ENTRY"
+
+#: util/install-info.c:948
+msgid "END-INFO-DIR-ENTRY without matching START-INFO-DIR-ENTRY"
+msgstr "¦³ END-INFO-DIR-ENTRY, ¦ý¬O¨S¦³¬Û¹ïÀ³ªº START-INFO-DIR-ENTRY"
+
+#: util/install-info.c:1191 util/install-info.c:1201
+#, c-format
+msgid "%s: already have dir file: %s\n"
+msgstr ""
+
+#: util/install-info.c:1236
+#, c-format
+msgid "%s: Specify the Info file only once.\n"
+msgstr "%s: ¥u¦³«ü©w Info Àɮפ@¦¸.\n"
+
+#: util/install-info.c:1284
+#, c-format
+msgid "excess command line argument `%s'"
+msgstr "¦h¾lªº©R¥O¦C¤Þ¼Æ `%s'"
+
+#: util/install-info.c:1288
+msgid "No input file specified; try --help for more information."
+msgstr "¥¼«ü©w¿é¤JÀÉ®×; ¸Õ¸Õ --help ¥H¨ú±o§ó¦hªº¸ê°T."
+
+#: util/install-info.c:1291
+msgid "No dir file specified; try --help for more information."
+msgstr "¥¼«ü©w dir ÀÉ®×; ¸Õ¸Õ --help ¥H¨ú±o¨ú¦hªº¸ê°T."
+
+#: util/install-info.c:1313
+#, c-format
+msgid "no info dir entry in `%s'"
+msgstr "`%s' ¤º¨S¦³ info dir ¶µ¥Ø"
+
+#: util/install-info.c:1426
+#, c-format
+msgid "menu item `%s' already exists, for file `%s'"
+msgstr "¥Ø¿ý¶µ¥Ø `%s' ¤w¦s¦b, ¬Oµ¹ÀÉ®× `%s' ªº"
+
+#: util/install-info.c:1449
+#, c-format
+msgid "no entries found for `%s'; nothing deleted"
+msgstr "§ä¤£¨ì `%s' ªº¶µ¥Ø; ¥¼§R°£¥ô¦ó¶µ¥Ø"
+
+#: util/texindex.c:252
+msgid "display this help and exit"
+msgstr "Åã¥Ü¨D§U¸ê°T, µM«áÂ÷¶}"
+
+#: util/texindex.c:254
+msgid "keep temporary files around after processing"
+msgstr "³B²z§¹²¦«á, ¤£²¾°£¼È¦sÀÉ"
+
+#: util/texindex.c:256
+msgid "do not keep temporary files around after processing (default)"
+msgstr "³B²z§¹²¦«á, ²¾°£¼È¦sÀÉ (¹w³]­È)"
+
+#: util/texindex.c:258
+msgid "send output to FILE"
+msgstr "±N¿é¥X°e¦Ü FILE"
+
+#: util/texindex.c:260
+msgid "display version information and exit"
+msgstr "Åã¥Üª©¥»¸ê°T, µM«áÂ÷¶}"
+
+#: util/texindex.c:270
+#, c-format
+msgid "Usage: %s [OPTION]... FILE...\n"
+msgstr "¥Îªk: %s [OPTION]... FILE...\n"
+
+#: util/texindex.c:271
+#, c-format
+msgid "Generate a sorted index for each TeX output FILE.\n"
+msgstr "¬°¨C­Ó TeX ¿é¥X FILE ²£¥Í¤@­Ó±Æ§Çªº¯Á¤Þ.\n"
+
+#: util/texindex.c:274
+#, 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:276
+#, c-format
+msgid ""
+"\n"
+"Options:\n"
+msgstr ""
+"\n"
+"¿ï¶µ:\n"
+
+#: util/texindex.c:876 util/texindex.c:910 util/texindex.c:983
+#: util/texindex.c:1011
+#, c-format
+msgid "%s: not a texinfo index file"
+msgstr "%s: ¤£¬O¤@­Ó texinfo ¯Á¤ÞÀÉ"
+
+#: util/texindex.c:968
+#, c-format
+msgid "failure reopening %s"
+msgstr "­«·s¶}±Ò %s ®Éµo¥Í¿ù»~"
+
+#: util/texindex.c:1218
+#, c-format
+msgid "No page number in %s"
+msgstr "¦b %s ¤¤¨S¦³­¶½X"
+
+#: util/texindex.c:1291
+#, c-format
+msgid "entry %s follows an entry with a secondary name"
+msgstr ""
+
+#~ 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 "`.' or `,' must follow cross reference, not %c"
+#~ msgstr "`.' ©Î `,' ¥²¶·¸òµÛ¥æ¤¬°Ñ·Ó, ¦Ó¤£¬O %c"
+
+#~ msgid "Node:"
+#~ msgstr "¸`ÂI:"
+
+#~ msgid "virtual memory exhausted"
+#~ msgstr "µêÀÀ°O¾ÐÅé¯ÓºÉ"
+
+#~ msgid "`%s' has no Up field"
+#~ msgstr "`%s' ¨S¦³ ¤W¤@¼h (Up) Äæ¦ì"
+
+#, fuzzy
+#~ msgid "\\%-10[scroll-forward] Scroll forward 1 line.\n"
+#~ msgstr " %-10s ©¹«e±²°Ê¤@¦æ.\n"
+
+#, fuzzy
+#~ msgid "\\%-10[scroll-backward] Scroll backward 1 line.\n"
+#~ msgstr " %-10s ©¹«á±²°Ê¤@¦æ.\n"
+
+#, 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/macros/texinfo/contrib/texinfo-hu/texinfo/updated b/macros/texinfo/contrib/texinfo-hu/texinfo/updated
new file mode 100644
index 0000000000..8a0b397272
--- /dev/null
+++ b/macros/texinfo/contrib/texinfo-hu/texinfo/updated
@@ -0,0 +1,9 @@
+
+Hungarian (magyar) TEX macro definitions for texinfo.tex.
+This is read when a source document says: @documentlanguage hu
+
+By Vozárik Lajos
+
+$Id: txi-hu.tex,v 1.01. 2007/06/11 12:45:59 vozarik Exp $
+mailto: Lajos Vozaarik, techn@toolstyle.hu
+***
diff --git a/macros/texinfo/contrib/texinfo-hu/texinfo/util/Makefile.am b/macros/texinfo/contrib/texinfo-hu/texinfo/util/Makefile.am
new file mode 100644
index 0000000000..6451fa9b65
--- /dev/null
+++ b/macros/texinfo/contrib/texinfo-hu/texinfo/util/Makefile.am
@@ -0,0 +1,45 @@
+# $Id: Makefile.am,v 1.14 2004/08/26 11:43:18 karl 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 = ginstall-info texindex
+bin_SCRIPTS = texi2dvi texi2pdf
+
+# Use `ginstall-info' in the definition of PROGRAMS and in dependencies
+# because automake generates an install-info target in every Makefile (a
+# bug, IMHO, but this is easier than patching 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
+INCLUDES = -I$(top_srcdir)/lib -I../intl -DLOCALEDIR=\"$(localedir)\"
+LDADD = ../lib/libtxi.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 \
+ prepinfo.awk tex3patch texi-docstring-magic.el texi2dvi texi2pdf txitextest \
+ $(dist_pkgdata_DATA) texinfo-cat.in
+CLEANFILES = $(pkgdata_DATA)
diff --git a/macros/texinfo/contrib/texinfo-hu/texinfo/util/Makefile.in b/macros/texinfo/contrib/texinfo-hu/texinfo/util/Makefile.in
new file mode 100644
index 0000000000..ca2ff2b942
--- /dev/null
+++ b/macros/texinfo/contrib/texinfo-hu/texinfo/util/Makefile.in
@@ -0,0 +1,579 @@
+# Makefile.in generated by automake 1.9.4 from Makefile.am.
+# @configure_input@
+
+# Copyright (C) 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002,
+# 2003, 2004 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.14 2004/08/26 11:43:18 karl 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.
+
+
+
+SOURCES = $(ginstall_info_SOURCES) texindex.c
+
+srcdir = @srcdir@
+top_srcdir = @top_srcdir@
+VPATH = @srcdir@
+pkgdatadir = $(datadir)/@PACKAGE@
+pkglibdir = $(libdir)/@PACKAGE@
+pkgincludedir = $(includedir)/@PACKAGE@
+top_builddir = ..
+am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd
+INSTALL = @INSTALL@
+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) texindex$(EXEEXT)
+subdir = util
+DIST_COMMON = README $(dist_pkgdata_DATA) $(srcdir)/Makefile.am \
+ $(srcdir)/Makefile.in
+ACLOCAL_M4 = $(top_srcdir)/aclocal.m4
+am__aclocal_m4_deps = $(top_srcdir)/m4/codeset.m4 \
+ $(top_srcdir)/m4/gettext.m4 $(top_srcdir)/m4/glibc21.m4 \
+ $(top_srcdir)/m4/iconv.m4 $(top_srcdir)/m4/intdiv0.m4 \
+ $(top_srcdir)/m4/intmax.m4 $(top_srcdir)/m4/inttypes-pri.m4 \
+ $(top_srcdir)/m4/inttypes.m4 $(top_srcdir)/m4/inttypes_h.m4 \
+ $(top_srcdir)/m4/lcmessage.m4 $(top_srcdir)/m4/lib-ld.m4 \
+ $(top_srcdir)/m4/lib-link.m4 $(top_srcdir)/m4/lib-prefix.m4 \
+ $(top_srcdir)/m4/longdouble.m4 $(top_srcdir)/m4/longlong.m4 \
+ $(top_srcdir)/m4/mkstemp.m4 $(top_srcdir)/m4/nls.m4 \
+ $(top_srcdir)/m4/onceonly_2_57.m4 $(top_srcdir)/m4/po.m4 \
+ $(top_srcdir)/m4/printf-posix.m4 $(top_srcdir)/m4/progtest.m4 \
+ $(top_srcdir)/m4/signed.m4 $(top_srcdir)/m4/size_max.m4 \
+ $(top_srcdir)/m4/stdint_h.m4 $(top_srcdir)/m4/strcase.m4 \
+ $(top_srcdir)/m4/uintmax_t.m4 $(top_srcdir)/m4/ulonglong.m4 \
+ $(top_srcdir)/m4/wchar_t.m4 $(top_srcdir)/m4/wint_t.m4 \
+ $(top_srcdir)/m4/xsize.m4 $(top_srcdir)/configure.ac
+am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \
+ $(ACLOCAL_M4)
+mkinstalldirs = $(SHELL) $(top_srcdir)/mkinstalldirs
+CONFIG_HEADER = $(top_builddir)/config.h
+CONFIG_CLEAN_FILES =
+am__installdirs = "$(DESTDIR)$(bindir)" "$(DESTDIR)$(bindir)" \
+ "$(DESTDIR)$(pkgdatadir)" "$(DESTDIR)$(pkgdatadir)"
+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 $(am__DEPENDENCIES_1)
+texindex_SOURCES = texindex.c
+texindex_OBJECTS = texindex.$(OBJEXT)
+texindex_LDADD = $(LDADD)
+texindex_DEPENDENCIES = ../lib/libtxi.a $(am__DEPENDENCIES_1)
+binSCRIPT_INSTALL = $(INSTALL_SCRIPT)
+SCRIPTS = $(bin_SCRIPTS)
+DEFAULT_INCLUDES = -I. -I$(srcdir) -I$(top_builddir)
+depcomp = $(SHELL) $(top_srcdir)/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) texindex.c
+DIST_SOURCES = $(ginstall_info_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)
+
+# 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@
+AMDEP_FALSE = @AMDEP_FALSE@
+AMDEP_TRUE = @AMDEP_TRUE@
+AMTAR = @AMTAR@
+AUTOCONF = @AUTOCONF@
+AUTOHEADER = @AUTOHEADER@
+AUTOMAKE = @AUTOMAKE@
+AWK = @AWK@
+BUILD_INCLUDED_LIBINTL = @BUILD_INCLUDED_LIBINTL@
+CATOBJEXT = @CATOBJEXT@
+CC = @CC@
+CCDEPMODE = @CCDEPMODE@
+CFLAGS = @CFLAGS@
+CPP = @CPP@
+CPPFLAGS = @CPPFLAGS@
+CYGPATH_W = @CYGPATH_W@
+DATADIRNAME = @DATADIRNAME@
+DEFS = @DEFS@
+DEPDIR = @DEPDIR@
+ECHO_C = @ECHO_C@
+ECHO_N = @ECHO_N@
+ECHO_T = @ECHO_T@
+EGREP = @EGREP@
+EXEEXT = @EXEEXT@
+GENCAT = @GENCAT@
+GLIBC21 = @GLIBC21@
+GMSGFMT = @GMSGFMT@
+HAVE_ASPRINTF = @HAVE_ASPRINTF@
+HAVE_POSIX_PRINTF = @HAVE_POSIX_PRINTF@
+HAVE_SNPRINTF = @HAVE_SNPRINTF@
+HAVE_WPRINTF = @HAVE_WPRINTF@
+HELP2MAN = @HELP2MAN@
+INSTALL_DATA = @INSTALL_DATA@
+INSTALL_PROGRAM = @INSTALL_PROGRAM@
+INSTALL_SCRIPT = @INSTALL_SCRIPT@
+INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@
+INSTALL_WARNINGS_FALSE = @INSTALL_WARNINGS_FALSE@
+INSTALL_WARNINGS_TRUE = @INSTALL_WARNINGS_TRUE@
+INSTOBJEXT = @INSTOBJEXT@
+INTLBISON = @INTLBISON@
+INTLLIBS = @INTLLIBS@
+INTLOBJS = @INTLOBJS@
+INTL_LIBTOOL_SUFFIX_PREFIX = @INTL_LIBTOOL_SUFFIX_PREFIX@
+LDFLAGS = @LDFLAGS@
+LIBICONV = @LIBICONV@
+LIBINTL = @LIBINTL@
+LIBOBJS = @LIBOBJS@
+LIBS = @LIBS@
+LTLIBICONV = @LTLIBICONV@
+LTLIBINTL = @LTLIBINTL@
+LTLIBOBJS = @LTLIBOBJS@
+MAINT = @MAINT@
+MAINTAINER_MODE_FALSE = @MAINTAINER_MODE_FALSE@
+MAINTAINER_MODE_TRUE = @MAINTAINER_MODE_TRUE@
+MAKEINFO = @MAKEINFO@
+MKINSTALLDIRS = @MKINSTALLDIRS@
+MSGFMT = @MSGFMT@
+MSGMERGE = @MSGMERGE@
+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@
+RANLIB = @RANLIB@
+SET_MAKE = @SET_MAKE@
+SHELL = @SHELL@
+STRIP = @STRIP@
+TERMLIBS = @TERMLIBS@
+TOOLS_ONLY_FALSE = @TOOLS_ONLY_FALSE@
+TOOLS_ONLY_TRUE = @TOOLS_ONLY_TRUE@
+USE_INCLUDED_LIBINTL = @USE_INCLUDED_LIBINTL@
+USE_NLS = @USE_NLS@
+VERSION = @VERSION@
+XGETTEXT = @XGETTEXT@
+ac_ct_CC = @ac_ct_CC@
+ac_ct_RANLIB = @ac_ct_RANLIB@
+ac_ct_STRIP = @ac_ct_STRIP@
+am__fastdepCC_FALSE = @am__fastdepCC_FALSE@
+am__fastdepCC_TRUE = @am__fastdepCC_TRUE@
+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@
+datadir = @datadir@
+exec_prefix = @exec_prefix@
+host = @host@
+host_alias = @host_alias@
+host_cpu = @host_cpu@
+host_os = @host_os@
+host_vendor = @host_vendor@
+includedir = @includedir@
+infodir = @infodir@
+install_sh = @install_sh@
+libdir = @libdir@
+libexecdir = @libexecdir@
+localstatedir = @localstatedir@
+mandir = @mandir@
+mkdir_p = @mkdir_p@
+native_tools = @native_tools@
+oldincludedir = @oldincludedir@
+prefix = @prefix@
+program_transform_name = @program_transform_name@
+sbindir = @sbindir@
+sharedstatedir = @sharedstatedir@
+sysconfdir = @sysconfdir@
+target_alias = @target_alias@
+bin_SCRIPTS = texi2dvi texi2pdf
+
+# Use `ginstall-info' in the definition of PROGRAMS and in dependencies
+# because automake generates an install-info target in every Makefile (a
+# bug, IMHO, but this is easier than patching Automake.)
+ginstall_info_SOURCES = install-info.c
+localedir = $(datadir)/locale
+INCLUDES = -I$(top_srcdir)/lib -I../intl -DLOCALEDIR=\"$(localedir)\"
+LDADD = ../lib/libtxi.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 \
+ prepinfo.awk tex3patch texi-docstring-magic.el texi2dvi texi2pdf txitextest \
+ $(dist_pkgdata_DATA) texinfo-cat.in
+
+CLEANFILES = $(pkgdata_DATA)
+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
+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_LDFLAGS) $(ginstall_info_OBJECTS) $(ginstall_info_LDADD) $(LIBS)
+texindex$(EXEEXT): $(texindex_OBJECTS) $(texindex_DEPENDENCIES)
+ @rm -f texindex$(EXEEXT)
+ $(LINK) $(texindex_LDFLAGS) $(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)/install-info.Po@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/texindex.Po@am__quote@
+
+.c.o:
+@am__fastdepCC_TRUE@ if $(COMPILE) -MT $@ -MD -MP -MF "$(DEPDIR)/$*.Tpo" -c -o $@ $<; \
+@am__fastdepCC_TRUE@ then mv -f "$(DEPDIR)/$*.Tpo" "$(DEPDIR)/$*.Po"; else rm -f "$(DEPDIR)/$*.Tpo"; exit 1; fi
+@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@ if $(COMPILE) -MT $@ -MD -MP -MF "$(DEPDIR)/$*.Tpo" -c -o $@ `$(CYGPATH_W) '$<'`; \
+@am__fastdepCC_TRUE@ then mv -f "$(DEPDIR)/$*.Tpo" "$(DEPDIR)/$*.Po"; else rm -f "$(DEPDIR)/$*.Tpo"; exit 1; fi
+@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) '$<'`
+uninstall-info-am:
+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; } \
+ END { 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; } \
+ END { 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=; \
+ 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; } \
+ END { 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)'; for file in $$list; do \
+ case $$file in \
+ $(srcdir)/*) file=`echo "$$file" | sed "s|^$$srcdirstrip/||"`;; \
+ $(top_srcdir)/*) file=`echo "$$file" | sed "s|^$$topsrcdirstrip/|$(top_builddir)/|"`;; \
+ esac; \
+ if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \
+ dir=`echo "$$file" | sed -e 's,/[^/]*$$,,'`; \
+ if test "$$dir" != "$$file" && test "$$dir" != "."; then \
+ dir="/$$dir"; \
+ $(mkdir_p) "$(distdir)$$dir"; \
+ else \
+ dir=''; \
+ fi; \
+ if test -d $$d/$$file; then \
+ 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 $(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."
+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-tags
+
+dvi: dvi-am
+
+dvi-am:
+
+html: html-am
+
+info: info-am
+
+info-am:
+
+install-data-am: install-dist_pkgdataDATA install-pkgdataDATA
+
+install-exec-am: install-binPROGRAMS install-binSCRIPTS
+
+install-info: install-info-am
+
+install-man:
+
+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-info-am \
+ uninstall-pkgdataDATA
+
+.PHONY: CTAGS GTAGS all all-am check check-am clean clean-binPROGRAMS \
+ clean-generic ctags distclean distclean-compile \
+ distclean-generic 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-exec install-exec-am \
+ install-info install-info-am install-man install-pkgdataDATA \
+ 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-info-am uninstall-pkgdataDATA
+
+
+# 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 >$@
+# 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/macros/texinfo/contrib/texinfo-hu/texinfo/util/README b/macros/texinfo/contrib/texinfo-hu/texinfo/util/README
new file mode 100644
index 0000000000..5354c3520b
--- /dev/null
+++ b/macros/texinfo/contrib/texinfo-hu/texinfo/util/README
@@ -0,0 +1,14 @@
+$Id: README,v 1.5 2004/04/11 17:56:47 karl Exp $
+texinfo/util/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.
+
+Assorted Texinfo-related programs and scripts.
+
+texindex, texi2dvi, and install-info get installed.
+The other items here are for your amusement and/or hacking pleasure.
+
diff --git a/macros/texinfo/contrib/texinfo-hu/texinfo/util/deref.c b/macros/texinfo/contrib/texinfo-hu/texinfo/util/deref.c
new file mode 100644
index 0000000000..e08be48105
--- /dev/null
+++ b/macros/texinfo/contrib/texinfo-hu/texinfo/util/deref.c
@@ -0,0 +1,209 @@
+/*
+ * 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 2 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, write to the Free Software
+ * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA
+ */
+
+/*
+ * 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/macros/texinfo/contrib/texinfo-hu/texinfo/util/dir-example b/macros/texinfo/contrib/texinfo-hu/texinfo/util/dir-example
new file mode 100644
index 0000000000..2b88f5f921
--- /dev/null
+++ b/macros/texinfo/contrib/texinfo-hu/texinfo/util/dir-example
@@ -0,0 +1,482 @@
+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.51 2004/12/18 02:11:43 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.
+* File permissions: (coreutils)File permissions. Access modes.
+* Finding files: (find). Operating on files matching certain criteria.
+* Gcal: (gcal). GNU calendar program.
+* Time: (time). Measuring program resource usage.
+
+Text creation and manipulation
+* Diffutils: (diff). Comparing and merging files.
+* Ed: (ed). Line editor.
+* Gawk: (gawk). A text scanning and processing language.
+* grep: (grep). Print lines matching a pattern.
+* m4: (m4). General-purpose text macro processor.
+* 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
+* a2ps: (a2ps). PostScript Generating Utility
+* PreScript: (a2ps) PreScript. Input language for a2ps
+* card: (a2ps) card. Print Reference Cards
+* fixps: (a2ps) fixps. Fixing Some Ill Designed PostScript Files
+* fixnt: (a2ps) fixnt. Fixing Microsoft NT PostScript Files
+* 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.
+* Binutils: (binutils). ar/copy/objdump/nm/size/strip/ranlib.
+* automake: (automake). Making Makefile.in's.
+* bison: (bison). GNU parser generator (Yacc replacement).
+* Cpp: (cpp). The GNU C preprocessor.
+* Cpplib: (cppinternals). Cpplib internals.
+* CVS: (cvs). Concurrent versions system for source control.
+* DejaGnu: (dejagnu). Testing framework.
+* Gdb: (gdb). The GNU debugger.
+* 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.
+* Identifier DB: (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). GNU 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.
+* xgettext: (gettext)xgettext Invocation. Extract strings into a PO file.
+* 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.
+
+Software libraries
+* Annotate: (annotate). High-level GDB to GUI's.
+* Bfd: (bfd). The Binary File Descriptor library.
+* CVS protocol: (cvsclient). CVS client/server protocol specification.
+* 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.
+* Regex: (regex). Regular expressions.
+* Termcap: (termcap). All about /etc/termcap.
+
+C++ libraries
+* Iostream: (iostream). C++ input/output.
+* Libg++: (libg++). C++ classes.
+* autosprintf: (autosprintf). Support for printf format strings in C++.
+
+GNU organization
+* Maintain: (maintain). GNU maintainer guidelines.
+* Standards: (standards). GNU coding standards.
+* Tasks: (tasks). GNU task list.
+
+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: (latex). LaTeX.
+* 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
+* Amd: (am-utils). Filesystem automounter.
+* CMUCL: (cmu-user). CMU Common Lisp.
+* File headers: (filehdr). Bibliographic information for computer files.
+* GCP: (gcp). Game club protocol.
+* GIMP: (pdb). The GIMP procedural database.
+* HTML: (snafu). Hypertext Markup Language 2.0 specification.
+* Jargon: (jargon). The jargon file.
+* Netpbm: (netpbm). Images/graphics manipulation programs.
+* JED: (jed). JED editor documentation.
+* octave: (octave). Octave - A language for numerical computation.
+* Perl: (perl). Practical extraction and report language.
+* PRCS: (prcs). Project revision control system.
+* Screen: (screen). Terminal multiplexer.
+
+Individual utilities
+* aclocal: (automake)Invoking aclocal. Generating aclocal.m4.
+* aid: (id-utils)aid invocation. Matching strings.
+* ar: (binutils)ar. Create/modify/extract 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
+* 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.
+* basename: (coreutils)basename invocation. Strip directory and suffix.
+* bibtex: (web2c)BibTeX invocation. Maintaining bibliographies.
+* c++filt: (binutils)c++filt. Demangle 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.
+* date: (coreutils)date invocation. Print/set system date and time.
+* dd: (coreutils)dd invocation. Copy and convert a file.
+* df: (coreutils)df invocation. Report filesystem disk usage.
+* diff: (diff)Invoking diff. Compare 2 files line by line.
+* diff3: (diff)Invoking diff3. Compare 3 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.
+* 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.
+* eid: (id-utils)eid invocation. Invoking an editor on matches.
+* 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 identifiers.
+* file-pr: (gnats)file-pr. Processing incoming traffic.
+* find: (find)Invoking find. Finding and acting on files.
+* fmt: (coreutils)fmt invocation. Reformat paragraph text.
+* fold: (coreutils)fold invocation. Wrap long input lines.
+* frm: (mailutils)frm. List headers from a mailbox.
+* 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.
+* gid: (id-utils)gid invocation. Listing all matching lines.
+* 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 real/effective uid/gid.
+* idx: (id-utils)idx invocation. Testing mkid scanners.
+* ifnames: (autoconf)ifnames Invocation. Listing conditionals in source.
+* iid: (id-utils)iid invocation. Interactive complex queries.
+* imap4d: (mailutils)imap4d. IMAP4 daemon.
+* 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 identifier 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.
+* 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 message-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.
+* newer: (web2c)Newer invocation. Compare modification times.
+* nice: (coreutils)nice invocation. Modify scheduling priority.
+* nl: (coreutils)nl invocation. Number lines and write files.
+* nlmconv: (binutils)nlmconv. Convert object to NetWare LM.
+* nm: (binutils)nm. List symbols in object files.
+* nohup: (coreutils)nohup invocation. Immunize to hangups.
+* objcopy: (binutils)objcopy. Copy/translate object files.
+* objdump: (binutils)objdump. Display info 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.
+* pid: (id-utils)pid invocation. Looking up filenames.
+* 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: (coreutils)pr invocation. Paginate or columnate files.
+* pr-addr: (gnats)pr-addr. Bug report address retrieval.
+* pr-edit: (gnats)pr-edit. The edit-pr driver.
+* printenv: (coreutils)printenv invocation. Print environment variables.
+* printf: (coreutils)printf invocation. Format and print data.
+* protoize: (gcc)Running Protoize. Add prototypes to sources.
+* 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. Index archive file contents.
+* readlink: (coreutils)readlink invocation. Print referent of a symlink.
+* readmsg: (mailutils)readmsg. Extract messages from a folder.
+* rm: (coreutils)rm invocation. Remove files.
+* rmdir: (coreutils)rmdir invocation. Remove empty directories.
+* 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
+* shar: (sharutils)shar invocation. Create shell archive.
+* shred: (coreutils)shred invocation. Remove files more securely.
+* sieve: (mailutils)sieve. Mail filtering utility.
+* size: (binutils)size. List object file section sizes.
+* 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.
+* 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.
+* tabs: (tput)Invoking tabs. Tab settings.
+* tac: (coreutils)tac invocation. Reverse files.
+* tail: (coreutils)tail invocation. Output the last part of files.
+* 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.
+* 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).
+* unprotoize: (gcc)Running Protoize. Remove prototypes from sources.
+* unshar: (sharutils)unshar invocation. Extract from shell archive.
+* updatedb: (find)Invoking updatedb. Building the locate database.
+* users: (coreutils)users invocation. Print current user names.
+* 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.
+* xargs: (find)Invoking xargs. Operating on many files.
+* 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/macros/texinfo/contrib/texinfo-hu/texinfo/util/fix-info-dir b/macros/texinfo/contrib/texinfo-hu/texinfo/util/fix-info-dir
new file mode 100644
index 0000000000..b1144ed6a4
--- /dev/null
+++ b/macros/texinfo/contrib/texinfo-hu/texinfo/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/macros/texinfo/contrib/texinfo-hu/texinfo/util/fixfonts b/macros/texinfo/contrib/texinfo-hu/texinfo/util/fixfonts
new file mode 100644
index 0000000000..ee2ea71921
--- /dev/null
+++ b/macros/texinfo/contrib/texinfo-hu/texinfo/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/macros/texinfo/contrib/texinfo-hu/texinfo/util/fixref.gawk b/macros/texinfo/contrib/texinfo-hu/texinfo/util/fixref.gawk
new file mode 100644
index 0000000000..f0e3cf6d60
--- /dev/null
+++ b/macros/texinfo/contrib/texinfo-hu/texinfo/util/fixref.gawk
@@ -0,0 +1,145 @@
+#! /usr/local/bin/gawk -f
+
+# fixref.awk --- fix xrefs in texinfo documents
+# Copyright, 1991, Arnold David Robbins, arnold@skeeve.atl.ga.us
+# Copyright, 1998, Arnold David Robbins, arnold@gnu.org
+
+# 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 2 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, write to the Free Software
+# Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA
+
+# 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/macros/texinfo/contrib/texinfo-hu/texinfo/util/gdoc b/macros/texinfo/contrib/texinfo-hu/texinfo/util/gdoc
new file mode 100644
index 0000000000..3c52fb0459
--- /dev/null
+++ b/macros/texinfo/contrib/texinfo-hu/texinfo/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/macros/texinfo/contrib/texinfo-hu/texinfo/util/gen-dir-node b/macros/texinfo/contrib/texinfo-hu/texinfo/util/gen-dir-node
new file mode 100644
index 0000000000..262bdd77a9
--- /dev/null
+++ b/macros/texinfo/contrib/texinfo-hu/texinfo/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/macros/texinfo/contrib/texinfo-hu/texinfo/util/gendocs.sh b/macros/texinfo/contrib/texinfo-hu/texinfo/util/gendocs.sh
new file mode 100644
index 0000000000..27d4f52d65
--- /dev/null
+++ b/macros/texinfo/contrib/texinfo-hu/texinfo/util/gendocs.sh
@@ -0,0 +1,285 @@
+#!/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.
+# $Id: gendocs.sh,v 1.13 2004/09/01 11:40:20 karl Exp $
+#
+# Copyright (C) 2003, 2004 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, you can either send email to this
+# program's maintainer or write to: The Free Software Foundation,
+# Inc.; 59 Temple Place, Suite 330; Boston, MA 02111-1307, USA.
+#
+# 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/texinfo/texinfo/util/gendocs.sh"
+templateurl="http://savannah.gnu.org/cgi-bin/viewcvs/texinfo/texinfo/util/gendocs_template"
+
+: ${MAKEINFO="makeinfo"}
+: ${TEXI2DVI="texi2dvi -t @finalout"}
+: ${DVIPS="dvips"}
+: ${DOCBOOK2TXT="docbook2txt"}
+: ${DOCBOOK2HTML="docbook2html"}
+: ${DOCBOOK2PDF="docbook2pdf"}
+: ${DOCBOOK2PS="docbook2ps"}
+: ${GENDOCS_TEMPLATE_DIR="."}
+unset CDPATH
+
+rcs_revision='$Revision: 1.13 $'
+rcs_version=`set - $rcs_revision; echo $2`
+program=`echo $0 | sed -e 's!.*/!!'`
+version="gendocs.sh $rcs_version
+
+Copyright (C) 2003 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 for 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.
+
+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.
+
+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;;
+ -*)
+ 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
+
+echo Generating output formats for $srcfile
+
+cmd="${MAKEINFO} -o $PACKAGE.info $srcfile"
+echo "Generating info files... ($cmd)"
+$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)"
+$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)"
+$cmd
+pdf_size="`calcsize $PACKAGE.pdf`"
+mv $PACKAGE.pdf $outdir/
+
+cmd="${MAKEINFO} -o $PACKAGE.txt --no-split --no-headers $srcfile"
+echo "Generating ASCII... ($cmd)"
+$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/
+
+cmd="${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
+$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="${MAKEINFO} --html -o $PACKAGE.html $html $srcfile"
+echo "Generating html by node... ($cmd)"
+$cmd
+split_html_dir=$PACKAGE.html
+(
+ cd ${split_html_dir} || exit 1
+ tar -czf ../$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}
+
+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="${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)"
+ $cmd
+ split_html_db_dir=html_node_db
+ (
+ cd ${split_html_db_dir} || exit 1
+ tar -czf ../$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)"
+ $cmd
+ docbook_ascii_size="`calcsize $PACKAGE-db.txt`"
+ mv $PACKAGE-db.txt $outdir/
+
+ cmd="${DOCBOOK2PS} ${outdir}/$PACKAGE-db.xml"
+ echo "Generating docbook PS... $(cmd)"
+ $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)"
+ $cmd
+ docbook_pdf_size="`calcsize $PACKAGE-db.pdf`"
+ mv $PACKAGE-db.pdf $outdir/
+fi
+
+echo Writing index file...
+curdate="`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!%%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" \
+$GENDOCS_TEMPLATE_DIR/gendocs_template >$outdir/index.html
+
+echo "Done! See $outdir/ subdirectory for new files."
diff --git a/macros/texinfo/contrib/texinfo-hu/texinfo/util/gendocs_template b/macros/texinfo/contrib/texinfo-hu/texinfo/util/gendocs_template
new file mode 100644
index 0000000000..6fb2cf950b
--- /dev/null
+++ b/macros/texinfo/contrib/texinfo-hu/texinfo/util/gendocs_template
@@ -0,0 +1,100 @@
+<?xml version="1.0" encoding="utf-8" ?>
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN"
+ "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
+<!-- $Id: gendocs_template,v 1.6 2004/09/23 13:16:19 karl Exp $ -->
+<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en">
+
+<head>
+<title>%%TITLE%% - GNU Project - Free Software Foundation (FSF)</title>
+<meta http-equiv="content-type" content='text/html; charset=utf-8' />
+<link rel="stylesheet" type="text/css" href="/gnu.css" />
+<link rev="made" href="webmasters@gnu.org" />
+</head>
+
+<!-- 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 -->
+
+<body>
+
+<h3>%%TITLE%%</h3>
+
+<address>Free Software Foundation</address>
+<address>last updated %%DATE%%</address>
+<p>
+<a href="/graphics/gnu-head.jpg">
+ <img src="/graphics/gnu-head-sm.jpg"
+ alt=" [image of the head of a GNU] "
+ width="129" height="122" />
+</a>
+<a href="/philosophy/gif.html">(no gifs due to patent problems)</a>
+</p>
+<hr />
+
+<p>This manual (%%PACKAGE%%) is available in the following formats:</p>
+
+<ul>
+ <li><a href="%%PACKAGE%%.html">HTML
+ (%%HTML_MONO_SIZE%%K characters)</a> - entirely on one web page.</li>
+ <li><a href="html_node/index.html">HTML</a> - with one web page per
+ node.</li>
+ <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>
+ <li><a href="%%PACKAGE%%.info.tar.gz">Info document
+ (%%INFO_TGZ_SIZE%%K characters gzipped tar file)</a>.</li>
+ <li><a href="%%PACKAGE%%.txt">ASCII text
+ (%%ASCII_SIZE%%K characters)</a>.</li>
+ <li><a href="%%PACKAGE%%.txt.gz">ASCII text compressed
+ (%%ASCII_GZ_SIZE%%K gzipped characters)</a>.</li>
+ <li><a href="%%PACKAGE%%.dvi.gz">TeX dvi file
+ (%%DVI_GZ_SIZE%%K characters gzipped)</a>.</li>
+ <li><a href="%%PACKAGE%%.ps.gz">PostScript file
+ (%%PS_GZ_SIZE%%K characters gzipped)</a>.</li>
+ <li><a href="%%PACKAGE%%.pdf">PDF file
+ (%%PDF_SIZE%%K characters)</a>.</li>
+ <li><a href="%%PACKAGE%%.texi.tar.gz">Texinfo source
+ (%%TEXI_TGZ_SIZE%%K characters gzipped tar file)</a></li>
+</ul>
+
+<p>(This page generated by the <a href="%%SCRIPTURL%%">%%SCRIPTNAME%%
+script</a>.)</p>
+
+<div class="copyright">
+<p>
+Return to the <a href="/home.html">GNU Project home page</a>.
+</p>
+
+<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="/home.html#ContactInfo">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 (C) 2004 Free Software Foundation, Inc.,
+59 Temple Place - Suite 330, Boston, MA 02111, USA
+<br />
+Verbatim copying and distribution of this entire article is
+permitted in any medium, provided this notice is preserved.
+</p>
+
+<p>
+Updated:
+<!-- timestamp start -->
+$Date: 2004/09/23 13:16:19 $ $Author: karl $
+<!-- timestamp end -->
+</p>
+</div>
+
+</body>
+</html>
diff --git a/macros/texinfo/contrib/texinfo-hu/texinfo/util/infosrch b/macros/texinfo/contrib/texinfo-hu/texinfo/util/infosrch
new file mode 100644
index 0000000000..af4a9a6290
--- /dev/null
+++ b/macros/texinfo/contrib/texinfo-hu/texinfo/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/macros/texinfo/contrib/texinfo-hu/texinfo/util/install-info-html b/macros/texinfo/contrib/texinfo-hu/texinfo/util/install-info-html
new file mode 100644
index 0000000000..4d102959d4
--- /dev/null
+++ b/macros/texinfo/contrib/texinfo-hu/texinfo/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/macros/texinfo/contrib/texinfo-hu/texinfo/util/install-info.c b/macros/texinfo/contrib/texinfo-hu/texinfo/util/install-info.c
new file mode 100644
index 0000000000..bbc7a8c25a
--- /dev/null
+++ b/macros/texinfo/contrib/texinfo-hu/texinfo/util/install-info.c
@@ -0,0 +1,1590 @@
+/* install-info -- create Info directory entry(ies) for an Info file.
+ $Id: install-info.c,v 1.12 2004/04/11 17:56:47 karl Exp $
+
+ Copyright (C) 1996, 1997, 1998, 1999, 2000, 2001, 2002, 2003, 2004 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 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., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.*/
+
+#include "system.h"
+#include <getopt.h>
+
+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;
+ /* 1 means output any needed new sections before this line. */
+ int add_sections_before;
+ /* 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;
+ int 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;
+};
+
+
+/* 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[] =
+{
+ { "delete", no_argument, NULL, 'r' },
+ { "dir-file", required_argument, NULL, 'd' },
+ { "entry", required_argument, NULL, 'e' },
+ { "help", no_argument, NULL, 'h' },
+ { "infodir", required_argument, NULL, 'D' },
+ { "info-dir", required_argument, NULL, 'D' },
+ { "info-file", required_argument, NULL, 'i' },
+ { "item", required_argument, NULL, 'e' },
+ { "quiet", no_argument, NULL, 'q' },
+ { "remove", no_argument, NULL, 'r' },
+ { "section", required_argument, NULL, 's' },
+ { "version", no_argument, NULL, 'V' },
+ { 0 }
+};
+
+/* 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;
+ }
+
+ 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. */
+ 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 = strncasecmp (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 = strncasecmp (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\
+\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\
+"), progname);
+
+ 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/"));
+}
+
+
+/* If DIRFILE does not exist, create a minimal one (or abort). If it
+ already exists, do nothing. */
+
+void
+ensure_dirfile_exists (char *dirfile)
+{
+ int 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[4];
+ 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);
+ }
+
+#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
+ 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 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;
+ fputs (this->text, output);
+ }
+ /* If we decided to add some sections here
+ because there are no such sections in the file,
+ output them now. */
+ if (dir_lines[i].add_sections_before)
+ {
+ struct spec_section *spec;
+ struct spec_section **sections;
+ int n_sections = 0;
+ struct spec_entry *entry;
+ struct spec_entry **entries;
+ int n_entries = 0;
+
+ /* Count the sections and allocate a vector for all of them. */
+ for (spec = input_sections; spec; spec = spec->next)
+ n_sections++;
+ sections = ((struct spec_section **)
+ xmalloc (n_sections * sizeof (struct spec_section *)));
+
+ /* Fill the vector SECTIONS with pointers to all the sections,
+ and sort them. */
+ j = 0;
+ for (spec = input_sections; spec; spec = spec->next)
+ sections[j++] = spec;
+ qsort (sections, n_sections, 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 < n_sections; j++)
+ {
+ spec = sections[j];
+ if (spec->missing)
+ {
+ int k;
+
+ putc ('\n', output);
+ fputs (spec->name, output);
+ putc ('\n', output);
+ 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);
+ }
+ }
+ }
+
+ free (entries);
+ free (sections);
+ }
+
+ /* 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 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 = *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. */
+int
+parse_dir_file (struct line_data *lines, int nlines, struct node **nodes,
+ const char *base_name)
+{
+ int node_header_flag = 0;
+ int something_deleted = 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;
+ }
+
+ /* 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, ':', base_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, ')', base_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;
+ }
+ }
+
+ /* 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;
+ }
+
+ return something_deleted;
+}
+
+int
+main (int argc, char **argv)
+{
+ char *opened_dirfilename;
+ char *compression_program;
+ char *infile_sans_info;
+ char *infile = 0, *dirfile = 0;
+
+ /* 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;
+ 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 -q was specified. */
+ int quiet_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);
+
+ while (1)
+ {
+ int opt = getopt_long (argc, argv, "i:d:e:s:hHr", 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 '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 '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;
+ entries_to_add = next;
+ n_entries_to_add++;
+ }
+ 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 'q':
+ quiet_flag = 1;
+ break;
+
+ case 'r':
+ delete_flag = 1;
+ 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 ("");
+ puts ("Copyright (C) 2004 Free Software Foundation, Inc.");
+ printf (_("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"));
+ xexit (0);
+
+ 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);
+
+ /* Read the Info file and parse it into lines, unless we're deleting. */
+ if (!delete_flag)
+ {
+ 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);
+ if (i > n_entries_to_add)
+ n_entries_to_add = i;
+
+ if (!delete_flag)
+ {
+ 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. */
+ 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;
+
+ /* 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;
+ }
+ for (ep = entries_to_add; ep; ep = ep->next)
+ ep->entry_sections = input_sections;
+ }
+ }
+
+ /* Now read in the Info dir file. */
+ dir_data = readfile (dirfile, &dir_size, ensure_dirfile_exists,
+ &opened_dirfilename, &compression_program);
+ dir_lines = findlines (dir_data, dir_size, &dir_nlines);
+
+ /* 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. */
+ {
+ 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);
+ }
+
+ something_deleted
+ = parse_dir_file (dir_lines, dir_nlines, &dir_nodes, infile_sans_info);
+
+ /* 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)
+ fatal (_("menu item `%s' already exists, for file `%s'"),
+ extract_menu_item_name (entry->text),
+ extract_menu_file_name (dir_lines[i].start));
+ 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;
+ }
+ insert_entry_here (entry, add_at_line,
+ dir_lines, n_entries_to_add);
+ }
+ }
+ }
+
+ /* Mark the end of the Top node as the place to add any
+ new sections that are needed. */
+ for (node = dir_nodes; node; node = node->next)
+ if (node->name && strcmp (node->name, "Top") == 0)
+ dir_lines[node->end_line].add_sections_before = 1;
+ }
+
+ if (delete_flag && !something_deleted && !quiet_flag)
+ warning (_("no entries found for `%s'; nothing deleted"), infile, 0);
+
+ 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 = 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 = 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 strncmp (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/macros/texinfo/contrib/texinfo-hu/texinfo/util/outline.gawk b/macros/texinfo/contrib/texinfo-hu/texinfo/util/outline.gawk
new file mode 100644
index 0000000000..329bb17529
--- /dev/null
+++ b/macros/texinfo/contrib/texinfo-hu/texinfo/util/outline.gawk
@@ -0,0 +1,145 @@
+#! /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 2 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, write to the Free Software
+# Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA
+
+# 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/macros/texinfo/contrib/texinfo-hu/texinfo/util/prepinfo.awk b/macros/texinfo/contrib/texinfo-hu/texinfo/util/prepinfo.awk
new file mode 100644
index 0000000000..273c97f846
--- /dev/null
+++ b/macros/texinfo/contrib/texinfo-hu/texinfo/util/prepinfo.awk
@@ -0,0 +1,356 @@
+#! /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 2 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, write to the Free Software
+# Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA
+
+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/macros/texinfo/contrib/texinfo-hu/texinfo/util/tex3patch b/macros/texinfo/contrib/texinfo-hu/texinfo/util/tex3patch
new file mode 100644
index 0000000000..046c794645
--- /dev/null
+++ b/macros/texinfo/contrib/texinfo-hu/texinfo/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/macros/texinfo/contrib/texinfo-hu/texinfo/util/texi-docstring-magic.el b/macros/texinfo/contrib/texinfo-hu/texinfo/util/texi-docstring-magic.el
new file mode 100644
index 0000000000..9cbca2b759
--- /dev/null
+++ b/macros/texinfo/contrib/texinfo-hu/texinfo/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.2 2004/04/11 17:56:47 karl Exp $
+;;
+;; This package is distributed under the terms of the
+;; GNU General Public License, Version 2.
+;; 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/macros/texinfo/contrib/texinfo-hu/texinfo/util/texi2dvi b/macros/texinfo/contrib/texinfo-hu/texinfo/util/texi2dvi
new file mode 100644
index 0000000000..40f2cb9710
--- /dev/null
+++ b/macros/texinfo/contrib/texinfo-hu/texinfo/util/texi2dvi
@@ -0,0 +1,795 @@
+#! /bin/sh
+# texi2dvi --- produce DVI (or PDF) files from Texinfo (or LaTeX) sources.
+# $Id: texi2dvi,v 1.34 2004/12/01 18:35:36 karl Exp $
+#
+# Copyright (C) 1992, 1993, 1994, 1995, 1996, 1997, 1998, 1999, 2001,
+# 2002, 2003, 2004 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, you can either send email to this
+# program's maintainer or write to: The Free Software Foundation,
+# Inc.; 59 Temple Place, Suite 330; Boston, MA 02111-1307, USA.
+#
+# 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.
+
+# This string is expanded by rcs automatically when this file is checked out.
+rcs_revision='$Revision: 1.34 $'
+rcs_version=`set - $rcs_revision; echo $2`
+program=`echo $0 | sed -e 's!.*/!!'`
+version="texi2dvi (GNU Texinfo 4.8) $rcs_version
+
+Copyright (C) 2004 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: $program [OPTION]... FILE...
+
+Run each Texinfo or LaTeX 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 (LaTeX or Texinfo).
+
+Makeinfo is used to perform Texinfo macro expansion before running TeX
+when needed.
+
+Operation modes:
+ -b, --batch no interaction
+ -c, --clean remove all auxiliary files
+ -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
+ -e, -E, --expand force macro expansion using makeinfo
+ -I DIR search DIR for Texinfo files
+ -l, --language=LANG specify the LANG of FILE (LaTeX or Texinfo)
+ -p, --pdf use pdftex or pdflatex for processing
+ -r, --recode call recode before TeX to translate input characters
+ -t, --command=CMD insert CMD in copy of input file
+ or --texinfo=CMD multiple values accumulate
+
+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/"
+
+# 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.
+batch=false # eval for batch mode
+clean=
+debug=
+escape='\'
+expand= # t for expansion via makeinfo
+miincludes= # makeinfo include path
+oformat=dvi
+oname= # --output
+quiet= # by default let the tools' message be displayed
+recode=false
+set_language=
+textra= # Extra TeX commands to insert in the input file.
+textra_cmd= # sed command to insert TEXTRA where appropriate
+tmpdir=${TMPDIR:-/tmp}/t2d$$ # avoid collisions on 8.3 filesystems.
+txincludes= # TEXINPUTS extensions, with trailing colon
+txiprereq=19990129 # minimum texinfo.tex version with macro expansion
+verbose=false # echo for verbose mode
+
+orig_pwd=`pwd`
+
+# Systems which define $COMSPEC or $ComSpec use semicolons to separate
+# directories in TEXINPUTS.
+if test -n "$COMSPEC$ComSpec"; then
+ path_sep=";"
+else
+ path_sep=":"
+fi
+
+# Pacify verbose cds.
+CDPATH=${ZSH_VERSION+.}$path_sep
+
+# In case someone crazy insists on using grep -E.
+: ${EGREP=egrep}
+
+# return true if program $1 is somewhere in PATH, else false.
+#
+findprog () {
+ foundprog=false
+ for dir in `echo $PATH | tr "$path_sep" " "`; do
+ if test -x "$dir/$1"; then # does anyone still need test -f?
+ foundprog=true
+ break
+ fi
+ done
+ $foundprog
+}
+
+# Report an error and exit with failure.
+fatal () {
+ echo "$0: $*" >&2
+ exit 1
+}
+
+# Save TEXINPUTS so we can construct a new TEXINPUTS path for each file.
+# Likewise for bibtex and makeindex.
+tex_envvars="BIBINPUTS BSTINPUTS INDEXSTYLE TEXINPUTS"
+for var in $tex_envvars; do
+ eval ${var}_orig=\$$var
+ export $var
+done
+
+
+# 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 | --b*) batch=true;;
+ -c | --c*) clean=t;;
+ -D | --d*) debug=t;;
+ -e | -E | --e*) expand=t;;
+ -h | --h*) echo "$usage"; exit 0;;
+ -I | --I*)
+ shift
+ miincludes="$miincludes -I $1"
+ txincludes="$txincludes$1$path_sep"
+ ;;
+ -l | --l*) shift; set_language=$1;;
+ -o | --o*)
+ shift
+ clean=t
+ case "$1" in
+ /* | ?:/*) oname=$1;;
+ *) oname="$orig_pwd/$1";;
+ esac;;
+ -p | --p*) oformat=pdf;;
+ -q | -s | --q* | --s*) quiet=t; batch=true;;
+ -r | --r*) recode=true;;
+ -t | --tex* | --com* ) shift; textra="$textra\\
+"`echo "$1" | sed 's/\\\\/\\\\\\\\/g'`;;
+ -v | --vers*) echo "$version"; exit 0;;
+ -V | --verb*) verbose=echo;;
+ --) # What remains are not options.
+ shift
+ while test x"$1" != x"$arg_sep"; do
+ set dummy ${1+"$@"} "$1"; shift
+ shift
+ done
+ break;;
+ -*)
+ echo "$0: Unknown or ambiguous option \`$1'." >&2
+ echo "$0: Try \`--help' for more information." >&2
+ exit 1;;
+ *) set dummy ${1+"$@"} "$1"; shift;;
+ esac
+ shift
+done
+# Pop the token
+shift
+
+# Interpret remaining command line args as filenames.
+case $# in
+ 0)
+ echo "$0: Missing file arguments." >&2
+ echo "$0: Try \`--help' for more information." >&2
+ exit 2
+ ;;
+ 1) ;;
+ *)
+ if test -n "$oname"; then
+ echo "$0: Can't use option \`--output' with more than one argument." >&2
+ exit 2
+ 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
+
+
+# Prepare the temporary directory. Remove it at exit, unless debugging.
+if test -z "$debug"; then
+ trap "cd / && rm -rf $tmpdir" 0 1 2 15
+fi
+
+# Create the temporary directory with strict rights
+(umask 077 && mkdir $tmpdir) || exit 1
+
+# Prepare the tools we might need. This may be extra work in some
+# cases, but improves the readability of the script.
+utildir=$tmpdir/utils
+mkdir $utildir || exit 1
+
+# 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_sed=$utildir/comment.sed
+cat <<EOF >$comment_iftex_sed
+/^@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/
+EOF
+# Uncommenting is simple: Remove any leading `@c texi2dvi'.
+uncomment_iftex_sed=$utildir/uncomment.sed
+cat <<EOF >$uncomment_iftex_sed
+s/^@c texi2dvi//
+EOF
+
+# Compute the list of xref files.
+# Takes the filename (without extension) of which we look for xref
+# files as argument. The index files must be reported last.
+get_xref_files ()
+{
+ # Get list of xref files (indexes, tables and lists).
+ # Find all files having root filename with a two-letter extension,
+ # saves the ones that are really Texinfo-related files. .?o? catches
+ # many files: .toc, .log, LaTeX tables and lists, FiXme's .lox, maybe more.
+ for this_file in "$1".?o? "$1".aux "$1".?? "$1".idx; do
+ # If file is empty, skip it.
+ test -s "$this_file" || continue
+ # 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.
+ first_character=`sed -n '1s/^\(.\).*$/\1/p;q' $this_file`
+ if (test "x$first_character" = "x\\" \
+ && sed 1q $this_file | grep -v '^\\input *texinfo' >/dev/null) \
+ || test "x$first_character" = "x'" \
+ || test "x$first_character" = "x@"; then
+ xref_files="$xref_files ./$this_file"
+ fi
+ done
+ echo "$xref_files"
+}
+
+# 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)
+
+# Tools' output. If quiet, discard, else redirect to the message flow.
+if test "$quiet" = t; then
+ exec 5>/dev/null
+else
+ exec 5>&1
+fi
+
+# Enable tracing
+if test "$debug" = t; then
+ exec 6>&1
+ set -x
+else
+ exec 6>/dev/null
+fi
+
+#
+# TeXify files.
+
+for command_line_filename in ${1+"$@"}; do
+ $verbose "Processing $command_line_filename ..."
+
+ # 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.
+ if test ! -r "$command_line_filename"; then
+ echo "$0: Could not read $command_line_filename, skipping." >&2
+ continue
+ fi
+
+ # Get the name of the current directory. We want the full path
+ # because in clean mode we are in tmp, in which case a relative
+ # path has no meaning.
+ filename_dir=`echo $command_line_filename | sed 's!/[^/]*$!!;s!^$!.!'`
+ filename_dir=`cd "$filename_dir" >/dev/null && pwd`
+
+ # Strip directory part but leave extension.
+ filename_ext=`basename "$command_line_filename"`
+ # Strip extension.
+ filename_noext=`echo "$filename_ext" | sed 's/\.[^.]*$//'`
+ ext=`echo "$filename_ext" | sed 's/^.*\.//'`
+
+ # _src. Use same basename since we want to generate aux files with
+ # the same basename as the manual. If --expand, then output the
+ # macro-expanded file to here, else copy the original file.
+ tmpdir_src=$tmpdir/src
+ filename_src=$tmpdir_src/$filename_noext.$ext
+
+ # _xtr. The file with the user's extra commands.
+ tmpdir_xtr=$tmpdir/xtr
+ filename_xtr=$tmpdir_xtr/$filename_noext.$ext
+
+ # _rcd. The Texinfo file recoded in 7bit.
+ tmpdir_rcd=$tmpdir/rcd
+ filename_rcd=$tmpdir_rcd/$filename_noext.$ext
+
+ # _bak. Copies of the previous xref files (another round is run if
+ # they differ from the new one).
+ tmpdir_bak=$tmpdir/bak
+
+ # Make all those directories and give up if we can't succeed.
+ mkdir $tmpdir_src $tmpdir_xtr $tmpdir_rcd $tmpdir_bak || exit 1
+
+ # 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 mode, where
+ # we've cd'd to a temp directory.
+ common="$orig_pwd$path_sep$filename_dir$path_sep$txincludes"
+ for var in $tex_envvars; do
+ eval ${var}="\$common\$${var}_orig"
+ export $var
+ done
+
+ # Convert relative paths to absolute paths, so we can run in another
+ # directory (e.g., in --clean mode, or during the macro-support detection.)
+ #
+ # 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.
+ 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'"
+ TEXINPUTS=`echo $TEXINPUTS | eval sed $replace_empty`
+ INDEXSTYLE=`echo $INDEXSTYLE | eval sed $replace_empty`
+ save_IFS=$IFS
+ IFS=$path_sep
+ set x $TEXINPUTS; shift
+ TEXINPUTS=.
+ for dir
+ do
+ case $dir in
+ EMPTY)
+ TEXINPUTS=$TEXINPUTS$path_sep
+ ;;
+ [\\/]* | ?:[\\/]*) # Absolute paths don't need to be expanded.
+ TEXINPUTS=$TEXINPUTS$path_sep$dir
+ ;;
+ *)
+ abs=`cd "$dir" && pwd` && TEXINPUTS=$TEXINPUTS$path_sep$abs
+ ;;
+ esac
+ done
+ set x $INDEXSTYLE; shift
+ INDEXSTYLE=.
+ for dir
+ do
+ case $dir in
+ EMPTY)
+ INDEXSTYLE=$INDEXSTYLE$path_sep
+ ;;
+ [\\/]* | ?:[\\/]*) # Absolute paths don't need to be expansed.
+ INDEXSTYLE=$INDEXSTYLE$path_sep$dir
+ ;;
+ *)
+ abs=`cd "$dir" && pwd` && INDEXSTYLE=$INDEXSTYLE$path_sep$abs
+ ;;
+ esac
+ done
+ IFS=$save_IFS
+
+ # 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
+ language=$set_language
+ elif sed 1q "$command_line_filename" | grep 'input texinfo' >&6; then
+ language=texinfo
+ else
+ language=
+ fi
+
+ # 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 ${language:-$filename_ext} in
+ [lL]a[tT]e[xX] | *.ltx | *.tex)
+ # Assume a LaTeX file. LaTeX needs bibtex and uses latex for
+ # compilation. No makeinfo.
+ language=latex
+ bibtex=${BIBTEX:-bibtex}
+ makeinfo= # no point in running makeinfo on latex source.
+ texindex=${MAKEINDEX:-makeindex}
+ textra_cmd=1i
+ if test $oformat = dvi; then
+ tex=${LATEX:-latex}
+ else
+ tex=${PDFLATEX:-pdflatex}
+ fi
+ thumbpdf=${THUMBPDF:-thumbpdf}
+ ;;
+
+ *)
+ # Assume a Texinfo file. Texinfo files need makeinfo, texindex and tex.
+ language=texinfo
+ bibtex=
+ texindex=${TEXINDEX:-texindex}
+ textra_cmd='/^@setfilename/a'
+ if test $oformat = dvi; then
+ # MetaPost also uses the TEX environment variable. If the user
+ # has set TEX=latex for that reason, don't bomb out.
+ if echo $TEX | grep 'latex$' >/dev/null; then
+ tex=tex # don't bother trying to find etex
+ else
+ tex=$TEX
+ fi
+ else
+ tex=$PDFTEX
+ fi
+ # 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 the tmpdir to avoid leaving files.
+ (
+ cd $tmpdir
+ 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
+ ) >$tmpdir/txiversion.out 2>$tmpdir/txiversion.err
+ if test $? != 0; then
+ cat $tmpdir/txiversion.out
+ cat $tmpdir/txiversion.err >&2
+ fatal "texinfo.tex appears to be broken, quitting."
+ fi
+ eval `sed -n 's/^.*\[\(.*\)version \(....\)-\(..\)-\(..\).*$/txiformat=\1 txiversion="\2\3\4"/p' $tmpdir/txiversion.out`
+ $verbose "texinfo.tex preloaded as \`$txiformat', version is \`$txiversion' ..."
+ if test "$txiprereq" -le "$txiversion" >/dev/null 2>&1; then
+ makeinfo=
+ else
+ makeinfo=${MAKEINFO:-makeinfo}
+ fi
+ # As long as we had to run TeX, offer the user this convenience:
+ test "$txiformat" = Texinfo && escape=@
+ fi
+ thumbpdf=${THUMBPDF:-thumbpdf}
+ ;;
+ esac
+
+ # Go to $tmpdir to try --help, since old versions that don't accept
+ # --help will generate a texput.log.
+ tex_help=`cd $tmpdir >/dev/null && $tex --help </dev/null 2>&1`
+
+ # If possible, make TeX report error locations in GNU format.
+ tex_args=
+ case $tex_help in
+ *file-line-error*) tex_args="$tex_args --file-line-error";;
+ esac
+
+ # Tell TeX to be batch if requested. (\batchmode does not show
+ # terminal output at all, so we don't want that.)
+ $batch && tex_args="$tex_args ${escape}nonstopmode ${escape}input"
+
+ # 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.
+ if test -n "$makeinfo"; then
+ $verbose "Macro-expanding $command_line_filename to $filename_src ..."
+ sed -f $comment_iftex_sed "$command_line_filename" \
+ | $makeinfo --footnote-style=end -I "$filename_dir" $miincludes \
+ -o /dev/null --macro-expand=- \
+ | sed -f $uncomment_iftex_sed >"$filename_src"
+ filename_input=$filename_src
+ fi
+
+ # If makeinfo failed (or was not even run), use the original file as input.
+ if test $? -ne 0 \
+ || test ! -r "$filename_src"; then
+ $verbose "Reverting to $command_line_filename ..."
+ filename_input=$filename_dir/$filename_ext
+ fi
+
+ # Used most commonly for @finalout, @smallbook, etc.
+ if test -n "$textra"; then
+ $verbose "Inserting extra commands: $textra"
+ sed "$textra_cmd\\
+$textra" "$filename_input" >"$filename_xtr"
+ filename_input=$filename_xtr
+ fi
+
+ # If this is a Texinfo file with a specified input encoding, and
+ # recode is available, then recode to plain 7 bit Texinfo.
+ if test $language = texinfo; then
+ pgm='s/\(^\|.* \)@documentencoding *\([^ ][^ ]*\)\( .*\|$\)/\2/
+ t found
+ d
+ :found
+ q'
+ encoding=`sed -e "$pgm" "$filename_input"`
+ if $recode && test -n "$encoding" && findprog recode; then
+ $verbose "Recoding from $encoding to Texinfo."
+ if recode "$encoding"..texinfo <"$filename_input" >"$filename_rcd" \
+ && test -s "$filename_rcd"; then
+ filename_input=$filename_rcd
+ else
+ $verbose "Recoding failed, using original input."
+ fi
+ fi
+ fi
+
+ # If clean mode was specified, then move to the temporary directory.
+ if test "$clean" = t; then
+ $verbose "cd $tmpdir_src"
+ cd "$tmpdir_src" || exit 1
+ fi
+
+ while :; do # will break out of loop below
+ orig_xref_files=`get_xref_files "$filename_noext"`
+
+ # Save copies of originals for later comparison.
+ if test -n "$orig_xref_files"; then
+ $verbose "Backing up xref files: `echo $orig_xref_files | sed 's|\./||g'`"
+ cp $orig_xref_files $tmpdir_bak
+ fi
+
+ # Run bibtex on current file.
+ # - If its input (AUX) exists.
+ # - If AUX contains both `\bibdata' and `\bibstyle'.
+ # - If some citations are missing (LOG contains `Citation').
+ # or the LOG complains of a missing .bbl
+ #
+ # 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.
+ #
+ # Don't try to be too smart. 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. 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.
+ if test -n "$bibtex" \
+ && test -r "$filename_noext.aux" \
+ && test -r "$filename_noext.log" \
+ && (grep '^\\bibdata[{]' "$filename_noext.aux" \
+ && grep '^\\bibstyle[{]' "$filename_noext.aux" \
+ && (grep 'Warning:.*Citation.*undefined' "$filename_noext.log" \
+ || grep 'No file .*\.bbl\.' "$filename_noext.log")) \
+ >&6 2>&1; \
+ then
+ $verbose "Running $bibtex $filename_noext ..."
+ $bibtex "$filename_noext" >&5 ||
+ fatal "$bibtex exited with bad status, quitting."
+ fi
+
+ # What we'll run texindex on -- exclude non-index files.
+ # Since we know index files are last, it is correct to remove everything
+ # before .aux and .?o?. But don't really do <anything>o<anything>
+ # -- don't match whitespace as <anything>.
+ # Otherwise, if orig_xref_files contains something like
+ # foo.xo foo.whatever
+ # the space after the o will get matched.
+ index_files=`echo "$orig_xref_files" \
+ | sed "s!.*\.aux!!g;
+ s!./$filename_noext\.[^ ]o[^ ]!!g;
+ s/^[ ]*//;s/[ ]*$//"`
+ # 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.
+ if test -n "$texindex" && test -n "$index_files"; then
+ $verbose "Running $texindex $index_files ..."
+ $texindex $index_files 2>&5 1>&2 ||
+ fatal "$texindex exited with bad status, quitting."
+ fi
+
+ # Finally, run TeX.
+ cmd="$tex $tex_args"
+ $verbose "Running $cmd $filename_input ..."
+ if $cmd "$filename_input" >&5; then :; else
+ echo "$0: $tex exited with bad status, quitting." >&2
+ echo "$0: see $filename_noext.log for errors." >&2
+ test "$clean" = t \
+ && cp "$filename_noext.log" "$orig_pwd"
+ exit 1
+ fi
+
+
+ # Decide if looping again is needed.
+ finished=t
+
+ # 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" "$filename_noext.log" >&6 2>&1; then
+ finished=
+ fi
+
+ # Check if xref files changed.
+ new_xref_files=`get_xref_files "$filename_noext"`
+ $verbose "Original xref files = `echo $orig_xref_files | sed 's|\./||g'`"
+ $verbose "New xref files = `echo $new_xref_files | sed 's|\./||g'`"
+
+ # If old and new lists don't at least have the same file list,
+ # then one file or another has definitely changed.
+ test "x$orig_xref_files" != "x$new_xref_files" && finished=
+
+ # File list is the same. We must compare each file until we find
+ # a difference.
+ if test -n "$finished"; then
+ for this_file in $new_xref_files; 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" "$tmpdir_bak/$this_file"; then :; else
+ # We only need to keep comparing until we find one that
+ # differs, because we'll have to run texindex & tex again no
+ # matter how many more there might be.
+ finished=
+ $verbose "xref file `echo $this_file | sed 's|\./||g'` differed ..."
+ test "$debug" = t && diff -c "$tmpdir_bak/$this_file" "$this_file"
+ break
+ fi
+ done
+ fi
+
+ # If finished, exit the loop, else rerun the loop.
+ test -n "$finished" && break
+ done # while :;
+
+ # If we were using thumbpdf and producing PDF, then run thumbpdf
+ # and TeX one last time.
+ if test $oformat = pdf \
+ && test -r "$filename_noext.log" \
+ && grep 'thumbpdf\.sty' "$filename_noext.log" >&6 2>&1; \
+ then
+ $verbose "Running $thumbpdf $filename_noext ..."
+ $thumbpdf "$filename_noext" >&5 ||
+ fatal "$thumbpdf exited with bad status, quitting."
+
+ $verbose "Running $cmd $filename_input..."
+ if $cmd "$filename_input" >&5; then :; else
+ echo "$0: $tex exited with bad status, quitting." >&2
+ echo "$0: see $filename_noext.log for errors." >&2
+ test "$clean" = t \
+ && cp "$filename_noext.log" "$orig_pwd"
+ exit 1
+ fi
+ fi
+
+
+ # If we were in clean mode, compilation was in a tmp directory.
+ # Copy the DVI (or PDF) file into the directory where the compilation
+ # has been done. (The temp dir is about to get removed anyway.)
+ # We also return to the original directory so that
+ # - the next file is processed in correct conditions
+ # - the temporary file can be removed
+ if test -n "$clean"; then
+ if test -n "$oname"; then
+ dest=$oname
+ else
+ dest=$orig_pwd
+ fi
+ $verbose "Copying $oformat file from `pwd` to $dest"
+ cp -p "./$filename_noext.$oformat" "$dest"
+ cd / # in case $orig_pwd is on a different drive (for DOS)
+ cd $orig_pwd || exit 1
+ fi
+
+ # Remove temporary files.
+ if test "x$debug" = "x"; then
+ $verbose "Removing $tmpdir_src $tmpdir_xtr $tmpdir_bak ..."
+ cd /
+ rm -rf $tmpdir_src $tmpdir_xtr $tmpdir_bak
+ fi
+done
+
+$verbose "$0: done."
+exit 0 # exit successfully, not however we ended the loop.
diff --git a/macros/texinfo/contrib/texinfo-hu/texinfo/util/texi2pdf b/macros/texinfo/contrib/texinfo-hu/texinfo/util/texi2pdf
new file mode 100644
index 0000000000..492128325d
--- /dev/null
+++ b/macros/texinfo/contrib/texinfo-hu/texinfo/util/texi2pdf
@@ -0,0 +1,19 @@
+#!/bin/sh
+# $Id: texi2pdf,v 1.1 2004/07/11 01:02:35 karl Exp $
+# Written by Thomas Esser. Public domain.
+# Execute texi2dvi --pdf.
+
+test -f /bin/sh5 && test -z "$RUNNING_SH5" \
+ && { UNAMES=`uname -s`; test "x$UNAMES" = xULTRIX; } 2>/dev/null \
+ && { RUNNING_SH5=true; export RUNNING_SH5; exec /bin/sh5 $0 ${1+"$@"}; }
+unset RUNNING_SH5
+
+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/macros/texinfo/contrib/texinfo-hu/texinfo/util/texindex.c b/macros/texinfo/contrib/texinfo-hu/texinfo/util/texindex.c
new file mode 100644
index 0000000000..569f877be0
--- /dev/null
+++ b/macros/texinfo/contrib/texinfo-hu/texinfo/util/texindex.c
@@ -0,0 +1,1628 @@
+/* texindex -- sort TeX index dribble output into an actual index.
+ $Id: texindex.c,v 1.11 2004/04/11 17:56:47 karl Exp $
+
+ Copyright (C) 1987, 1991, 1992, 1996, 1997, 1998, 1999, 2000, 2001,
+ 2002, 2003, 2004 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., 59 Temple Place - Suite 330, Boston, MA 02111-1307. */
+
+#include "system.h"
+#include <getopt.h>
+
+static 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
+
+char *mktemp (char *);
+
+#if !defined (SEEK_SET)
+# define SEEK_SET 0
+# define SEEK_CUR 1
+# define SEEK_END 2
+#endif /* !SEEK_SET */
+
+struct linebuffer;
+
+/* 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;
+
+/* Directory to use for temporary files. On Unix, it ends with a slash. */
+char *tempdir;
+
+/* Number of last temporary file. */
+int tempcount;
+
+/* Number of last temporary file already deleted.
+ Temporary files are deleted by `flush_tempfiles' in order of creation. */
+int last_deleted_tempcount;
+
+/* 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;
+
+/* Additional command switches .*/
+
+/* Nonzero means do not delete tempfiles -- for debugging. */
+int keep_tempfiles;
+
+/* Forward declarations of functions in this file. */
+void decode_command (int argc, char **argv);
+void sort_in_core (char *infile, int total, char *outfile);
+void sort_offline (char *infile, off_t 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 *);
+long readline (struct linebuffer *linebuffer, FILE *stream);
+int merge_files (char **infiles, int nfiles, char *outfile);
+int merge_direct (char **infiles, int nfiles, char *outfile);
+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 ();
+char *concat (char *s1, char *s2);
+void flush_tempfiles (int to_count);
+
+#define MAX_IN_CORE_SORT 500000
+
+int
+main (int argc, char **argv)
+{
+ int i;
+
+ tempcount = 0;
+ last_deleted_tempcount = 0;
+
+#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 = concat (infiles[i], "s");
+
+ need_initials = 0;
+ first_initial = '\0';
+
+ if (ptr < MAX_IN_CORE_SORT)
+ /* Sort a small amount of data. */
+ sort_in_core (infiles[i], (int)ptr, outfile);
+ else
+ sort_offline (infiles[i], ptr, outfile);
+ }
+
+ flush_tempfiles (tempcount);
+ 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") },
+ { "--keep", "-k", &keep_tempfiles, 1, (char *)NULL,
+ N_("keep temporary files around after processing") },
+ { "--no-keep", 0, &keep_tempfiles, 0, (char *)NULL,
+ N_("do not keep temporary files around after processing (default)") },
+ { "--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;
+
+ /* Store default values into parameter variables. */
+
+ tempdir = getenv ("TMPDIR");
+ if (tempdir == NULL)
+ tempdir = getenv ("TEMP");
+ if (tempdir == NULL)
+ tempdir = getenv ("TMP");
+ if (tempdir == NULL)
+ tempdir = DEFAULT_TMPDIR;
+ else
+ tempdir = concat (tempdir, "/");
+
+ keep_tempfiles = 0;
+
+ /* 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 ("");
+ puts ("Copyright (C) 2004 Free Software Foundation, Inc.");
+ printf (_("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"));
+ xexit (0);
+ }
+ else if ((strcmp (arg, "--keep") == 0) ||
+ (strcmp (arg, "-k") == 0))
+ {
+ keep_tempfiles = 1;
+ }
+ 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);
+}
+
+/* Return a name for temporary file COUNT. */
+
+static char *
+maketempname (int count)
+{
+ static char *tempbase = NULL;
+ char tempsuffix[10];
+
+ if (!tempbase)
+ {
+ int fd;
+ tempbase = concat (tempdir, "txidxXXXXXX");
+
+ fd = mkstemp (tempbase);
+ if (fd == -1)
+ pfatal_with_name (tempbase);
+ }
+
+ sprintf (tempsuffix, ".%d", count);
+ return concat (tempbase, tempsuffix);
+}
+
+
+/* Delete all temporary files up to TO_COUNT. */
+
+void
+flush_tempfiles (int to_count)
+{
+ if (keep_tempfiles)
+ return;
+ while (last_deleted_tempcount < to_count)
+ unlink (maketempname (++last_deleted_tempcount));
+}
+
+
+/* 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;
+ }
+}
+
+/* A `struct linebuffer' is a structure which holds a line of text.
+ `readline' reads a line from a stream into a linebuffer
+ and works regardless of the length of the line. */
+
+struct linebuffer
+{
+ long size;
+ char *buffer;
+};
+
+/* Initialize LINEBUFFER for use. */
+
+void
+initbuffer (struct linebuffer *linebuffer)
+{
+ linebuffer->size = 200;
+ linebuffer->buffer = (char *) xmalloc (200);
+}
+
+/* Read a line of text from STREAM into LINEBUFFER.
+ Return the length of the line. */
+
+long
+readline (struct linebuffer *linebuffer, FILE *stream)
+{
+ char *buffer = linebuffer->buffer;
+ char *p = linebuffer->buffer;
+ char *end = p + linebuffer->size;
+
+ while (1)
+ {
+ int c = getc (stream);
+ if (p == end)
+ {
+ buffer = (char *) xrealloc (buffer, linebuffer->size *= 2);
+ p += buffer - linebuffer->buffer;
+ end += buffer - linebuffer->buffer;
+ linebuffer->buffer = buffer;
+ }
+ if (c < 0 || c == '\n')
+ {
+ *p = 0;
+ break;
+ }
+ *p++ = c;
+ }
+
+ return p - buffer;
+}
+
+/* Sort an input file too big to sort in core. */
+
+void
+sort_offline (char *infile, off_t total, char *outfile)
+{
+ /* More than enough. */
+ int ntemps = 2 * (total + MAX_IN_CORE_SORT - 1) / MAX_IN_CORE_SORT;
+ char **tempfiles = (char **) xmalloc (ntemps * sizeof (char *));
+ FILE *istream = fopen (infile, "r");
+ int i;
+ struct linebuffer lb;
+ long linelength;
+ int failure = 0;
+
+ initbuffer (&lb);
+
+ /* Read in one line of input data. */
+
+ linelength = readline (&lb, istream);
+
+ if (lb.buffer[0] != '\\' && lb.buffer[0] != '@')
+ {
+ error (_("%s: not a texinfo index file"), infile);
+ return;
+ }
+
+ /* Split up the input into `ntemps' temporary files, or maybe fewer,
+ and put the new files' names into `tempfiles' */
+
+ for (i = 0; i < ntemps; i++)
+ {
+ char *outname = maketempname (++tempcount);
+ FILE *ostream = fopen (outname, "w");
+ long tempsize = 0;
+
+ if (!ostream)
+ pfatal_with_name (outname);
+ tempfiles[i] = outname;
+
+ /* Copy lines into this temp file as long as it does not make file
+ "too big" or until there are no more lines. */
+
+ while (tempsize + linelength + 1 <= MAX_IN_CORE_SORT)
+ {
+ tempsize += linelength + 1;
+ fputs (lb.buffer, ostream);
+ putc ('\n', ostream);
+
+ /* Read another line of input data. */
+
+ linelength = readline (&lb, istream);
+ if (!linelength && feof (istream))
+ break;
+
+ if (lb.buffer[0] != '\\' && lb.buffer[0] != '@')
+ {
+ error (_("%s: not a texinfo index file"), infile);
+ failure = 1;
+ goto fail;
+ }
+ }
+ fclose (ostream);
+ if (feof (istream))
+ break;
+ }
+
+ free (lb.buffer);
+
+fail:
+ /* Record number of temp files we actually needed. */
+
+ ntemps = i;
+
+ /* Sort each tempfile into another tempfile.
+ Delete the first set of tempfiles and put the names of the second
+ into `tempfiles'. */
+
+ for (i = 0; i < ntemps; i++)
+ {
+ char *newtemp = maketempname (++tempcount);
+ sort_in_core (tempfiles[i], MAX_IN_CORE_SORT, newtemp);
+ if (!keep_tempfiles)
+ unlink (tempfiles[i]);
+ tempfiles[i] = newtemp;
+ }
+
+ if (failure)
+ return;
+
+ /* Merge the tempfiles together and indexify. */
+
+ merge_files (tempfiles, ntemps, outfile);
+}
+
+/* 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++)
+ {
+ /* If -u was specified, 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);
+}
+
+/* Assume (and optionally verify) that each input file is sorted;
+ merge them and output the result.
+ Returns nonzero if any input file fails to be sorted.
+
+ This is the high-level interface that can handle an unlimited
+ number of files. */
+
+#define MAX_DIRECT_MERGE 10
+
+int
+merge_files (char **infiles, int nfiles, char *outfile)
+{
+ char **tempfiles;
+ int ntemps;
+ int i;
+ int value = 0;
+ int start_tempcount = tempcount;
+
+ if (nfiles <= MAX_DIRECT_MERGE)
+ return merge_direct (infiles, nfiles, outfile);
+
+ /* Merge groups of MAX_DIRECT_MERGE input files at a time,
+ making a temporary file to hold each group's result. */
+
+ ntemps = (nfiles + MAX_DIRECT_MERGE - 1) / MAX_DIRECT_MERGE;
+ tempfiles = (char **) xmalloc (ntemps * sizeof (char *));
+ for (i = 0; i < ntemps; i++)
+ {
+ int nf = MAX_DIRECT_MERGE;
+ if (i + 1 == ntemps)
+ nf = nfiles - i * MAX_DIRECT_MERGE;
+ tempfiles[i] = maketempname (++tempcount);
+ value |= merge_direct (&infiles[i * MAX_DIRECT_MERGE], nf, tempfiles[i]);
+ }
+
+ /* All temporary files that existed before are no longer needed
+ since their contents have been merged into our new tempfiles.
+ So delete them. */
+ flush_tempfiles (start_tempcount);
+
+ /* Now merge the temporary files we created. */
+
+ merge_files (tempfiles, ntemps, outfile);
+
+ free (tempfiles);
+
+ return value;
+}
+
+/* Assume (and optionally verify) that each input file is sorted;
+ merge them and output the result.
+ Returns nonzero if any input file fails to be sorted.
+
+ This version of merging will not work if the number of
+ input files gets too high. Higher level functions
+ use it only with a bounded number of input files. */
+
+int
+merge_direct (char **infiles, int nfiles, char *outfile)
+{
+ struct linebuffer *lb1, *lb2;
+ struct linebuffer **thisline, **prevline;
+ FILE **streams;
+ int i;
+ int nleft;
+ int lossage = 0;
+ int *file_lossage;
+ struct linebuffer *prev_out = 0;
+ FILE *ostream = stdout;
+
+ if (outfile)
+ {
+ ostream = fopen (outfile, "w");
+ }
+ if (!ostream)
+ pfatal_with_name (outfile);
+
+ init_index ();
+
+ if (nfiles == 0)
+ {
+ if (outfile)
+ fclose (ostream);
+ return 0;
+ }
+
+ /* For each file, make two line buffers. Also, for each file, there
+ is an element of `thisline' which points at any time to one of the
+ file's two buffers, and an element of `prevline' which points to
+ the other buffer. `thisline' is supposed to point to the next
+ available line from the file, while `prevline' holds the last file
+ line used, which is remembered so that we can verify that the file
+ is properly sorted. */
+
+ /* lb1 and lb2 contain one buffer each per file. */
+ lb1 = (struct linebuffer *) xmalloc (nfiles * sizeof (struct linebuffer));
+ lb2 = (struct linebuffer *) xmalloc (nfiles * sizeof (struct linebuffer));
+
+ /* thisline[i] points to the linebuffer holding the next available
+ line in file i, or is zero if there are no lines left in that file. */
+ thisline = (struct linebuffer **)
+ xmalloc (nfiles * sizeof (struct linebuffer *));
+ /* prevline[i] points to the linebuffer holding the last used line
+ from file i. This is just for verifying that file i is properly
+ sorted. */
+ prevline = (struct linebuffer **)
+ xmalloc (nfiles * sizeof (struct linebuffer *));
+ /* streams[i] holds the input stream for file i. */
+ streams = (FILE **) xmalloc (nfiles * sizeof (FILE *));
+ /* file_lossage[i] is nonzero if we already know file i is not
+ properly sorted. */
+ file_lossage = (int *) xmalloc (nfiles * sizeof (int));
+
+ /* Allocate and initialize all that storage. */
+
+ for (i = 0; i < nfiles; i++)
+ {
+ initbuffer (&lb1[i]);
+ initbuffer (&lb2[i]);
+ thisline[i] = &lb1[i];
+ prevline[i] = &lb2[i];
+ file_lossage[i] = 0;
+ streams[i] = fopen (infiles[i], "r");
+ if (!streams[i])
+ pfatal_with_name (infiles[i]);
+
+ readline (thisline[i], streams[i]);
+ }
+
+ /* Keep count of number of files not at eof. */
+ nleft = nfiles;
+
+ while (nleft)
+ {
+ struct linebuffer *best = 0;
+ struct linebuffer *exch;
+ int bestfile = -1;
+ int i;
+
+ /* Look at the next avail line of each file; choose the least one. */
+
+ for (i = 0; i < nfiles; i++)
+ {
+ if (thisline[i] &&
+ (!best ||
+ 0 < compare_general (best->buffer, thisline[i]->buffer,
+ (long) bestfile, (long) i, num_keyfields)))
+ {
+ best = thisline[i];
+ bestfile = i;
+ }
+ }
+
+ /* Output that line, unless it matches the previous one and we
+ don't want duplicates. */
+
+ if (!(prev_out &&
+ !compare_general (prev_out->buffer,
+ best->buffer, 0L, 1L, num_keyfields - 1)))
+ indexify (best->buffer, ostream);
+ prev_out = best;
+
+ /* Now make the line the previous of its file, and fetch a new
+ line from that file. */
+
+ exch = prevline[bestfile];
+ prevline[bestfile] = thisline[bestfile];
+ thisline[bestfile] = exch;
+
+ while (1)
+ {
+ /* If the file has no more, mark it empty. */
+
+ if (feof (streams[bestfile]))
+ {
+ thisline[bestfile] = 0;
+ /* Update the number of files still not empty. */
+ nleft--;
+ break;
+ }
+ readline (thisline[bestfile], streams[bestfile]);
+ if (thisline[bestfile]->buffer[0] || !feof (streams[bestfile]))
+ break;
+ }
+ }
+
+ finish_index (ostream);
+
+ /* Free all storage and close all input streams. */
+
+ for (i = 0; i < nfiles; i++)
+ {
+ fclose (streams[i]);
+ free (lb1[i].buffer);
+ free (lb2[i].buffer);
+ }
+ free (file_lossage);
+ free (lb1);
+ free (lb2);
+ free (thisline);
+ free (prevline);
+ free (streams);
+
+ if (outfile)
+ fclose (ostream);
+
+ return lossage;
+}
+
+/* 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 and S2. */
+
+char *
+concat (char *s1, char *s2)
+{
+ int len1 = strlen (s1), len2 = strlen (s2);
+ char *result = (char *) xmalloc (len1 + len2 + 1);
+
+ strcpy (result, s1);
+ strcpy (result + len1, s2);
+ *(result + len1 + len2) = 0;
+
+ return result;
+}
diff --git a/macros/texinfo/contrib/texinfo-hu/texinfo/util/texinfo-cat.in b/macros/texinfo/contrib/texinfo-hu/texinfo/util/texinfo-cat.in
new file mode 100644
index 0000000000..f0f0674ec8
--- /dev/null
+++ b/macros/texinfo/contrib/texinfo-hu/texinfo/util/texinfo-cat.in
@@ -0,0 +1,3 @@
+OVERRIDE YES
+
+PUBLIC "-//GNU//DTD TexinfoML V__VERSION__//EN" "texinfo.dtd"
diff --git a/macros/texinfo/contrib/texinfo-hu/texinfo/util/texinfo.dtd b/macros/texinfo/contrib/texinfo-hu/texinfo/util/texinfo.dtd
new file mode 100644
index 0000000000..617992a59f
--- /dev/null
+++ b/macros/texinfo/contrib/texinfo-hu/texinfo/util/texinfo.dtd
@@ -0,0 +1,484 @@
+<!-- $Id: texinfo.dtd,v 1.4 2004/12/19 15:08:55 karl Exp $
+ Document Type Definition for Texinfo.
+
+ Author: Philippe Martin (feloy@free.fr)
+ Contributors:
+ Karl Eichwalder (keichwa@gmx.net)
+ Alper Ersoy (dirt@gtk.org)
+
+ Copyright (C) 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.
+
+-->
+
+<!-- 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">
+
+<!-- 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;
+ | 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;)*">
+
+
+<!-- Inline -->
+<!-- ****** -->
+<!ENTITY % Inline.emphasize "strong | emph">
+<!ENTITY % Inline.fonts "b | i | r | sansserif | slanted | titlefont | tt">
+<!ENTITY % Inline.footnote "footnote">
+<!ENTITY % Inline.markup "code | command | env | file | option | samp
+ | dfn | cite | key | kbd | var | acronym | url">
+<!ENTITY % Inline.math "math">
+<!ENTITY % Inline.reference "xref | inforef | indexterm | email | uref">
+<!ENTITY % Inline.smallcaps "sc">
+
+<!ENTITY % Inline.phrase
+ "%Inline.emphasize; | %Inline.smallcaps; | %Inline.fonts;
+ | %Inline.markup; | %Inline.math; | %Inline.reference;
+ | %Inline.footnote; ">
+
+
+<!-- ************ -->
+<!-- * ELEMENTS * -->
+<!-- ************ -->
+
+<!-- TOP Level Element -->
+<!-- ***************** -->
+<!ELEMENT texinfo ((%metainformation; | titlepage | node | %block; | %toc;
+ | %variables; | %lang;)* )>
+<!ATTLIST texinfo xml:lang (%languagecodes;) 'en'>
+
+<!-- meta-information -->
+<!ELEMENT setfilename (#PCDATA)>
+<!ELEMENT settitle (#PCDATA | %Inline.phrase; | footnote)*>
+<!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; | image)*) >
+
+<!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; | footnote)*>
+<!ELEMENT chapheading (#PCDATA | %Inline.phrase; | footnote)*>
+<!ELEMENT heading (#PCDATA | %Inline.phrase; | footnote)*>
+<!ELEMENT subheading (#PCDATA | %Inline.phrase; | footnote)*>
+<!ELEMENT subsubheading (#PCDATA | %Inline.phrase; | footnote)*>
+<!ELEMENT title (#PCDATA | %Inline.phrase; | footnote)*>
+
+<!-- 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; | footnote | %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 | para)*>
+
+<!-- Floating displays -->
+<!ELEMENT float (floattype, floatpos, (%block;)*, caption?)>
+<!ATTLIST float
+ name CDATA #IMPLIED>
+<!ELEMENT floattype (#PCDATA)>
+<!ELEMENT floatpos (#PCDATA)>
+<!ELEMENT caption (#PCDATA | %Inline.phrase;)*>
+<!ELEMENT listoffloats EMPTY>
+<!ATTLIST listoffloats
+ type CDATA #IMPLIED>
+
+<!-- Lists -->
+<!ELEMENT itemize (itemfunction, (item | itemize | enumerate | indexterm)*)>
+<!ELEMENT enumerate (enumarg?, (item | itemize | enumerate)*)>
+<!ATTLIST enumerate
+ first CDATA #IMPLIED>
+
+<!ELEMENT item (%block;)*>
+<!ELEMENT enumarg (#PCDATA)>
+
+<!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)+>
+<!ELEMENT definitionterm (%definition.cmds; | indexterm)+>
+<!ELEMENT definitionitem (%block;)*>
+
+<!ELEMENT defcategory (#PCDATA | %Inline.phrase; | footnote)*>
+<!ELEMENT deffunction (#PCDATA | %Inline.phrase; | footnote)*>
+<!ELEMENT defvariable (#PCDATA | %Inline.phrase; | footnote)*>
+<!ELEMENT defparam (#PCDATA | %Inline.phrase; | footnote)*>
+<!ELEMENT defdelimiter (#PCDATA | %Inline.phrase; | footnote)*>
+<!ELEMENT deftype (#PCDATA | %Inline.phrase; | footnote)*>
+<!ELEMENT defparamtype (#PCDATA | %Inline.phrase; | footnote)*>
+<!ELEMENT defdatatype (#PCDATA | %Inline.phrase; | footnote)*>
+<!ELEMENT defclass (#PCDATA | %Inline.phrase; | footnote)*>
+<!ELEMENT defclassvar (#PCDATA | %Inline.phrase; | footnote)*>
+<!ELEMENT defoperation (#PCDATA | %Inline.phrase; | footnote)*>
+
+<!-- INLINE Elements -->
+<!-- *************** -->
+
+<!-- Emphasize -->
+<!ELEMENT strong (#PCDATA | %Inline.phrase;)*>
+<!ELEMENT emph (#PCDATA | %Inline.phrase;)*>
+
+<!-- small caps -->
+<!ELEMENT sc (#PCDATA | %Inline.phrase;)*>
+
+<!-- fonts -->
+<!ELEMENT i (#PCDATA | %Inline.phrase;)*>
+<!ELEMENT b (#PCDATA | %Inline.phrase;)*>
+<!ELEMENT tt (#PCDATA | %Inline.phrase;)*>
+<!ELEMENT r (#PCDATA | %Inline.phrase;)*>
+<!ELEMENT notfixedwidth (#PCDATA | %Inline.phrase;)*>
+<!ELEMENT titlefont (#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;)*>
+
+<!-- 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 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 neos EMPTY>
+
+<!ENTITY tex "TeX"> <!-- Should become an element. -->
+<!ENTITY latex "LaTeX"> <!-- Should become an element. -->
+<!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 "&#xa;"> <!-- Should become an element. -->
+<!ENTITY space " "> <!-- Should become an element. -->
+<!ENTITY dots "&#x2026;<neos/>">
+<!ENTITY enddots "&#x2026;">
+<!ENTITY amp "&#x26;">
+<!ENTITY ldquo "&#x201c;">
+<!ENTITY rdquo "&#x201d;">
+<!ENTITY mdash "&#x2014;">
+<!ENTITY ndash "&#x2013;">
+<!ENTITY period ".<neos/>">
+<!ENTITY eosperiod ".">
+<!ENTITY quest "?<neos/>">
+<!ENTITY eosquest "?">
+<!ENTITY excl "!<neos/>">
+<!ENTITY eosexcl "!">
+
+<!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 macr "&#xaf;">
+
+
+<!-- fixxme: not yet classified -->
+
+<!ELEMENT sp (#PCDATA)>
+<!ATTLIST sp
+ lines CDATA #IMPLIED>
+<!ELEMENT printindex (#PCDATA)>
+
diff --git a/macros/texinfo/contrib/texinfo-hu/texinfo/util/texinfo.xsl b/macros/texinfo/contrib/texinfo-hu/texinfo/util/texinfo.xsl
new file mode 100644
index 0000000000..5225517ec7
--- /dev/null
+++ b/macros/texinfo/contrib/texinfo-hu/texinfo/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/macros/texinfo/contrib/texinfo-hu/texinfo/util/txitextest b/macros/texinfo/contrib/texinfo-hu/texinfo/util/txitextest
new file mode 100644
index 0000000000..4542bc2364
--- /dev/null
+++ b/macros/texinfo/contrib/texinfo-hu/texinfo/util/txitextest
@@ -0,0 +1,77 @@
+#!/bin/sh
+# $Id: txitextest,v 1.5 2004/04/11 17:56:47 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=/u/texinfo/src
+PATH=$tsrc/util:$PATH
+
+tdoc=$tsrc/doc
+default_manuals="$tdoc/texinfo.txi $tdoc/info.texi $tdoc/info-stnd.texi"
+
+olddir=$HOME/gnu/src/gnulib/config
+newdir=$tdoc
+tempdir=/u/texinfo/@tests/testdir
+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 -f $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 -f $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