Index: automake/ChangeLog diff -c automake/ChangeLog:1.676.4.18 automake/ChangeLog:1.676.4.26 *** automake/ChangeLog:1.676.4.18 Thu May 24 13:35:40 2001 --- automake/ChangeLog Thu Jun 7 13:03:50 2001 *************** *** 1,4 **** --- 1,44 ---- + 2001-06-07 Gary V. Vaughan + + * configure.in (AM_INIT_AUTOMAKE): Set the fork identifier to + patch level 3, 1.4-p3. + * stamp-vti: Regenerated. + * version.texi: Ditto. + * configure: Ditto. + + * texinfo.tex: Updated from master copy at GNU. + + * config.guess, config.sub: Updated from master copies at GNU. + + From "Gerrit P. Haase" : + * Makefile.in: Regenerated. + * Makefile.am (install-data-hook): No slash after $(DESTDIR). + + * NEWS: Updated. + * Makefile.in: Regenerated. + * aclocal.m4: Regenerated. + * configure: Regenerated. + * stamp-vti: Regenerated. + * version.texi: Regenerated. + * m4/Makefile.in: Regenerated. + * tests/Makefile.in: Regenerated. + * automake.in (configure_ac): Set this new variable to whichever + of configure.ac and configure.in is found first, and use it + throughout in place of hardcoded configure.in. + * aclocal.in (configure_ac): Ditto. + + 2001-05-25 Tom Tromey + + From Karl Berry: + * automake.in (handle_texinfo): version.texi might be included in + multiple places. + 2001-05-24 Gary V. Vaughan + + * configure.in (AM_INIT_AUTOMAKE): Bumped the version number to + 1.4-p2a. + + Automake 1.4-p2 was released. * configure.in (AM_INIT_AUTOMAKE): Set the fork identifier to patch level 2, 1.4-p2. Index: automake/Makefile.am diff -c automake/Makefile.am:1.126.4.1 automake/Makefile.am:1.126.4.2 *** automake/Makefile.am:1.126.4.1 Sun May 13 16:13:54 2001 --- automake/Makefile.am Thu Jun 7 12:39:27 2001 *************** *** 29,35 **** install-data-hook: @for prog in $(script_DATA); do \ ! chmod +x $(DESTDIR)/$(scriptdir)/$$prog; \ done EXTRA_DIST = acinstall $(pkgdata_DATA) $(script_DATA) --- 29,35 ---- install-data-hook: @for prog in $(script_DATA); do \ ! chmod +x $(DESTDIR)$(scriptdir)/$$prog; \ done EXTRA_DIST = acinstall $(pkgdata_DATA) $(script_DATA) Index: automake/Makefile.in diff -c automake/Makefile.in:1.217.4.4 automake/Makefile.in:1.217.4.6 *** automake/Makefile.in:1.217.4.4 Sun May 13 16:13:54 2001 --- automake/Makefile.in Thu Jun 7 12:39:27 2001 *************** *** 1,4 **** ! # Makefile.in generated automatically by automake 1.4-p1 from Makefile.am # Copyright (C) 1994, 1995-8, 1999 Free Software Foundation, Inc. # This Makefile.in is free software; the Free Software Foundation --- 1,4 ---- ! # Makefile.in generated automatically by automake 1.4-p2 from Makefile.am # Copyright (C) 1994, 1995-8, 1999 Free Software Foundation, Inc. # This Makefile.in is free software; the Free Software Foundation *************** *** 569,575 **** install-data-hook: @for prog in $(script_DATA); do \ ! chmod +x $(DESTDIR)/$(scriptdir)/$$prog; \ done installcheck-local: --- 569,575 ---- install-data-hook: @for prog in $(script_DATA); do \ ! chmod +x $(DESTDIR)$(scriptdir)/$$prog; \ done installcheck-local: Index: automake/NEWS diff -c automake/NEWS:1.130.4.2 automake/NEWS:1.130.4.3 *** automake/NEWS:1.130.4.2 Thu May 24 13:35:40 2001 --- automake/NEWS Thu Jun 7 12:31:07 2001 *************** *** 1,3 **** --- 1,7 ---- + New in 1.4-p3: + * Deal with configure.ac as well as configure.in. + * Don't complain if `version.texi' is included in multiple places. + New in 1.4-p2: * Deal with AC_CONFIG_FILES from autoconf-2.50. * Improvements to f77 support. Index: automake/aclocal.in diff -c automake/aclocal.in:1.40 automake/aclocal.in:1.40.4.1 *** automake/aclocal.in:1.40 Sun Jan 10 10:37:04 1999 --- automake/aclocal.in Thu Jun 7 12:31:07 2001 *************** *** 2,8 **** # -*- perl -*- # @configure_input@ ! # aclocal - create aclocal.m4 by scanning configure.in # Copyright (C) 1996, 1997, 1998, 1999 Free Software Foundation, Inc. # This program is free software; you can redistribute it and/or modify --- 2,8 ---- # -*- perl -*- # @configure_input@ ! # aclocal - create aclocal.m4 by scanning configure.ac # Copyright (C) 1996, 1997, 1998, 1999 Free Software Foundation, Inc. # This program is free software; you can redistribute it and/or modify *************** *** 25,31 **** eval 'exec @PERL@ -S $0 ${1+"$@"}' if 0; ! # aclocal - scan configure.in and generate aclocal.m4. # Some constants. $VERSION = "@VERSION@"; --- 25,31 ---- eval 'exec @PERL@ -S $0 ${1+"$@"}' if 0; ! # aclocal - scan configure.ac and generate aclocal.m4. # Some constants. $VERSION = "@VERSION@"; *************** *** 60,65 **** --- 60,68 ---- # How much to say. $verbosity = 0; + # Name of the top autoconf input: `configure.ac' or `configure.in' + $configure_ac = ''; + @obsolete_macros = ( 'AC_FEATURE_CTYPE', *************** *** 121,127 **** local ($status) = @_; print "Usage: aclocal [OPTIONS] ...\n\n"; ! print "Generate aclocal.m4 by scanning configure.in\n --acdir=DIR directory holding config files --help print this help, then exit -I DIR add directory to search list for .m4 files --- 124,130 ---- local ($status) = @_; print "Usage: aclocal [OPTIONS] ...\n\n"; ! print "Generate aclocal.m4 by scanning configure.ac\n --acdir=DIR directory holding config files --help print this help, then exit -I DIR add directory to search list for .m4 files *************** *** 199,206 **** sub scan_configure { ! open (CONFIGURE, "configure.in") ! || die "aclocal: couldn't open \`configure.in': $!\n"; # Make sure we include acinclude.m4 if it exists. if (-f 'acinclude.m4') --- 202,219 ---- sub scan_configure { ! warn "aclocal: both `configure.ac' and `configure.in' present:" ! . " ignoring `configure.in'\n" ! if -f 'configure.ac' && -f 'configure.in'; ! $configure_ac = 'configure.in' ! if -f 'configure.in'; ! $configure_ac = 'configure.ac' ! if -f 'configure.ac'; ! die "aclocal: `configure.ac' or `configure.in' is required\n" ! if !$configure_ac; ! ! open (CONFIGURE, $configure_ac) ! || die "aclocal: couldn't open \`$configure_ac': $!\n"; # Make sure we include acinclude.m4 if it exists. if (-f 'acinclude.m4') *************** *** 217,223 **** if (/$obsolete_rx/o) { chop; ! warn "aclocal: configure.in: $.: obsolete macro \`$_'\n"; $exit_status = 1; next; } --- 230,236 ---- if (/$obsolete_rx/o) { chop; ! warn "aclocal: $configure_ac: $.: obsolete macro \`$_'\n"; $exit_status = 1; next; } *************** *** 227,233 **** if (! &search && /(^|\s+)(AM_[A-Z_]+)/) { # Macro not found, but AM_ prefix found. ! warn "aclocal: configure.in: $.: macro \`$2' not found in library\n"; $exit_status = 1; } } --- 240,246 ---- if (! &search && /(^|\s+)(AM_[A-Z_]+)/) { # Macro not found, but AM_ prefix found. ! warn "aclocal: $configure_ac: $.: macro \`$2' not found in library\n"; $exit_status = 1; } } *************** *** 350,356 **** if (! &search && /(^|\s+)(AM_[A-Z_]+)/) { # Macro not found, but AM_ prefix found. ! warn "aclocal: configure.in: $.: macro \`$2' not found in library\n"; $exit_status = 1; } } --- 363,369 ---- if (! &search && /(^|\s+)(AM_[A-Z_]+)/) { # Macro not found, but AM_ prefix found. ! warn "aclocal: $configure_ac: $.: macro \`$2' not found in library\n"; $exit_status = 1; } } Index: automake/aclocal.m4 diff -c automake/aclocal.m4:1.40.4.1 automake/aclocal.m4:1.40.4.2 *** automake/aclocal.m4:1.40.4.1 Tue May 8 17:40:52 2001 --- automake/aclocal.m4 Thu Jun 7 12:31:07 2001 *************** *** 1,4 **** ! dnl aclocal.m4 generated automatically by aclocal 1.4-p1 dnl Copyright (C) 1994, 1995-8, 1999 Free Software Foundation, Inc. dnl This file is free software; the Free Software Foundation --- 1,4 ---- ! dnl aclocal.m4 generated automatically by aclocal 1.4-p2 dnl Copyright (C) 1994, 1995-8, 1999 Free Software Foundation, Inc. dnl This file is free software; the Free Software Foundation Index: automake/automake.in diff -c automake/automake.in:1.644.4.8 automake/automake.in:1.644.4.10 *** automake/automake.in:1.644.4.8 Thu May 24 13:35:40 2001 --- automake/automake.in Thu Jun 7 12:31:07 2001 *************** *** 109,118 **** # TRUE if we should copy missing files; otherwise symlink if possible. $copy_missing = 0; ! # Files found by scanning configure.in for LIBOBJS. %libsources = (); ! # True if AM_C_PROTOTYPES appears in configure.in. $am_c_prototypes = 0; # Names used in AC_CONFIG_HEADER call. @config_fullnames holds the --- 109,121 ---- # TRUE if we should copy missing files; otherwise symlink if possible. $copy_missing = 0; ! # Name of the top autoconf input: `configure.ac' or `configure.in' ! $configure_ac = ''; ! ! # Files found by scanning configure.ac for LIBOBJS. %libsources = (); ! # True if AM_C_PROTOTYPES appears in configure.ac. $am_c_prototypes = 0; # Names used in AC_CONFIG_HEADER call. @config_fullnames holds the *************** *** 123,129 **** @config_fullnames = (); @config_names = (); @config_headers = (); ! # Line number at which AC_CONFIG_HEADER appears in configure.in. $config_header_line = 0; # Directory where output files go. Actually, output files are --- 126,132 ---- @config_fullnames = (); @config_names = (); @config_headers = (); ! # Line number at which AC_CONFIG_HEADER appears in configure.ac. $config_header_line = 0; # Directory where output files go. Actually, output files are *************** *** 154,163 **** @config_aux_path = ('.', '..', '../..'); $config_aux_dir = ''; ! # Whether AC_PROG_MAKE_SET has been seen in configure.in. $seen_make_set = 0; ! # Whether AM_GNU_GETTEXT has been seen in configure.in. $seen_gettext = 0; # Line number at which AM_GNU_GETTEXT seen. $ac_gettext_line = 0; --- 157,166 ---- @config_aux_path = ('.', '..', '../..'); $config_aux_dir = ''; ! # Whether AC_PROG_MAKE_SET has been seen in configure.ac. $seen_make_set = 0; ! # Whether AM_GNU_GETTEXT has been seen in configure.ac. $seen_gettext = 0; # Line number at which AM_GNU_GETTEXT seen. $ac_gettext_line = 0; *************** *** 172,178 **** # 1 if AC_PROG_INSTALL seen. $seen_prog_install = 0; ! # Whether AC_PATH_XTRA has been seen in configure.in. $seen_path_xtra = 0; # TRUE if AC_DECL_YYTEXT was seen. --- 175,181 ---- # 1 if AC_PROG_INSTALL seen. $seen_prog_install = 0; ! # Whether AC_PATH_XTRA has been seen in configure.ac. $seen_path_xtra = 0; # TRUE if AC_DECL_YYTEXT was seen. *************** *** 337,343 **** # Parse command line. &parse_arguments (@ARGV); ! # Do configure.in scan only once. &scan_configure; die "automake: no \`Makefile.am' found or specified\n" --- 340,346 ---- # Parse command line. &parse_arguments (@ARGV); ! # Do configure.ac scan only once. &scan_configure; die "automake: no \`Makefile.am' found or specified\n" *************** *** 377,383 **** } } ! &am_conf_error ("AC_PROG_INSTALL must be used in configure.in") if (! $seen_prog_install); exit $exit_status; --- 380,386 ---- } } ! &am_conf_error ("AC_PROG_INSTALL must be used in \`$configure_ac'") if (! $seen_prog_install); exit $exit_status; *************** *** 655,661 **** local ($am_time) = (stat ($makefile . '.am'))[9]; local ($in_time) = (stat ($out_file))[9]; # FIXME: should cache these times. ! local ($conf_time) = (stat ('configure.in'))[9]; # FIXME: how to do unsigned comparison? if ($am_time < $in_time || $am_time < $conf_time) { --- 658,664 ---- local ($am_time) = (stat ($makefile . '.am'))[9]; local ($in_time) = (stat ($out_file))[9]; # FIXME: should cache these times. ! local ($conf_time) = (stat ($configure_ac))[9]; # FIXME: how to do unsigned comparison? if ($am_time < $in_time || $am_time < $conf_time) { *************** *** 857,863 **** if (! $am_c_prototypes) { &am_line_error ('AUTOMAKE_OPTIONS', ! "option \`ansi2knr' in use but \`AM_C_PROTOTYPES' not in configure.in"); &keyed_aclocal_warning ('AM_C_PROTOTYPES'); # Only give this error once. $am_c_prototypes = 1; --- 860,866 ---- if (! $am_c_prototypes) { &am_line_error ('AUTOMAKE_OPTIONS', ! "option \`ansi2knr' in use but \`AM_C_PROTOTYPES' not in \`$configure_ac'"); &keyed_aclocal_warning ('AM_C_PROTOTYPES'); # Only give this error once. $am_c_prototypes = 1; *************** *** 1330,1336 **** $seen_libobjs = 1; if (! keys %libsources) { ! &am_line_error ($var, "\@$1" . "LIBOBJS\@ seen but never set in \`configure.in'"); } local ($iter, $rewrite); --- 1333,1339 ---- $seen_libobjs = 1; if (! keys %libsources) { ! &am_line_error ($var, "\@$1" . "LIBOBJS\@ seen but never set in \`$configure_ac'"); } local ($iter, $rewrite); *************** *** 1358,1364 **** { push (@dep_list, $lsearch); &am_line_error ($var, ! "\@$1" . "ALLOCA\@ seen but \`AC_FUNC_ALLOCA' not in \`configure.in'") if ! defined $libsources{'alloca.c'}; $dep_files{'.deps/alloca.P'} = 1; &require_file_with_line ($var, $FOREIGN, 'alloca.c'); --- 1361,1367 ---- { push (@dep_list, $lsearch); &am_line_error ($var, ! "\@$1" . "ALLOCA\@ seen but \`AC_FUNC_ALLOCA' not in \`$configure_ac'") if ! defined $libsources{'alloca.c'}; $dep_files{'.deps/alloca.P'} = 1; &require_file_with_line ($var, $FOREIGN, 'alloca.c'); *************** *** 1409,1415 **** # If a program is installed, this is required. We only want this # error to appear once. ! &am_conf_error ("AC_ARG_PROGRAM must be used in configure.in") unless $seen_arg_prog; $seen_arg_prog = 1; --- 1412,1418 ---- # If a program is installed, this is required. We only want this # error to appear once. ! &am_conf_error ("AC_ARG_PROGRAM must be used in \`$configure_ac'") unless $seen_arg_prog; $seen_arg_prog = 1; *************** *** 1549,1555 **** { if (&variable_defined ($key . '_LIBRARIES')) { ! &am_line_error ($key . '_LIBRARIES', "library used but \`RANLIB' not defined in \`configure.in'"); # Only get this error once. If this is ever printed, # we have a bug. $configure_vars{'RANLIB'} = 'BUG'; --- 1552,1558 ---- { if (&variable_defined ($key . '_LIBRARIES')) { ! &am_line_error ($key . '_LIBRARIES', "library used but \`RANLIB' not defined in \`$configure_ac'"); # Only get this error once. If this is ever printed, # we have a bug. $configure_vars{'RANLIB'} = 'BUG'; *************** *** 1647,1653 **** { if (!$seen_libtool) { ! &am_line_error ($key . '_LTLIBRARIES', "library used but \`LIBTOOL' not defined in \`configure.in'"); # Only get this error once. If this is ever printed, # we have a bug. $configure_vars{'LIBTOOL'} = 'BUG'; --- 1650,1656 ---- { if (!$seen_libtool) { ! &am_line_error ($key . '_LTLIBRARIES', "library used but \`LIBTOOL' not defined in \`$configure_ac'"); # Only get this error once. If this is ever printed, # we have a bug. $configure_vars{'LIBTOOL'} = 'BUG'; *************** *** 1832,1838 **** { # If a program is installed, this is required. We only want this # error to appear once. ! &am_conf_error ("AC_ARG_PROGRAM must be used in configure.in") unless $seen_arg_prog; $seen_arg_prog = 1; } --- 1835,1841 ---- { # If a program is installed, this is required. We only want this # error to appear once. ! &am_conf_error ("AC_ARG_PROGRAM must be used in \`$configure_ac'") unless $seen_arg_prog; $seen_arg_prog = 1; } *************** *** 1927,1939 **** if ($vtexi) { &am_error ("\`$vtexi', included in \`$info_cursor', also included in \`$versions{$vtexi}'") ! if (defined $versions{$vtexi}); $versions{$vtexi} = $info_cursor; # We number the stamp-vti files. This is doable since the # actual names don't matter much. We only number starting # with the second one, so that the common case looks nice. ! $vti = 'vti' . ($done ? $done : ''); &push_dist_common ($vtexi, 'stamp-' . $vti); push (@clean, $vti); --- 1930,1942 ---- if ($vtexi) { &am_error ("\`$vtexi', included in \`$info_cursor', also included in \`$versions{$vtexi}'") ! if (defined $versions{$vtexi} && $vtexi ne "version.texi"); $versions{$vtexi} = $info_cursor; # We number the stamp-vti files. This is doable since the # actual names don't matter much. We only number starting # with the second one, so that the common case looks nice. ! $vti = 'vti' . ($done ? ".$done" : ''); &push_dist_common ($vtexi, 'stamp-' . $vti); push (@clean, $vti); *************** *** 1960,1966 **** . 's/\@VTI\@/' . $vti . '/g; ' . 's/\@VTEXI\@/' . $vtexi . '/g;' . 's,\@MDDIR\@,' . $conf_pat . ',g;', ! 'texi-vers'); &push_phony_cleaners ($vti); } --- 1963,1970 ---- . 's/\@VTI\@/' . $vti . '/g; ' . 's/\@VTEXI\@/' . $vtexi . '/g;' . 's,\@MDDIR\@,' . $conf_pat . ',g;', ! 'texi-vers') ! unless $done > 1; &push_phony_cleaners ($vti); } *************** *** 2490,2500 **** } } ! # Always require configure.in and configure at top level, even if # they don't exist. This is especially important for configure, # since it won't be created until autoconf is run -- which might # be after automake is run. ! &push_dist_common ('configure.in', 'configure') if $relative_dir eq '.'; # Keys of %dist_common are names of files to distributed. We put --- 2494,2504 ---- } } ! # Always require configure.ac and configure at top level, even if # they don't exist. This is especially important for configure, # since it won't be created until autoconf is run -- which might # be after automake is run. ! &push_dist_common ($configure_ac, 'configure') if $relative_dir eq '.'; # Keys of %dist_common are names of files to distributed. We put *************** *** 2847,2853 **** ($seen_maint_mode ? "\@MAINTAINER_MODE_TRUE\@" : "") , ! "configure.in", ($acinclude ? ' acinclude.m4' : '') ); --- 2851,2857 ---- ($seen_maint_mode ? "\@MAINTAINER_MODE_TRUE\@" : "") , ! $configure_ac, ($acinclude ? ' acinclude.m4' : '') ); *************** *** 2921,2927 **** local ($local, $input, @secondary_inputs) = @_; # If SUBDIRS defined, require AC_PROG_MAKE_SET. ! &am_line_error ('SUBDIRS', "AC_PROG_MAKE_SET must be used in configure.in") if &variable_defined ('SUBDIRS') && ! $seen_make_set; local ($top_reldir); --- 2925,2931 ---- local ($local, $input, @secondary_inputs) = @_; # If SUBDIRS defined, require AC_PROG_MAKE_SET. ! &am_line_error ('SUBDIRS', "AC_PROG_MAKE_SET must be used in \`$configure_ac'") if &variable_defined ('SUBDIRS') && ! $seen_make_set; local ($top_reldir); *************** *** 2954,2960 **** . ': ' . ($seen_maint_mode ? "\@MAINTAINER_MODE_TRUE\@ " : '') . $amfile . ' ' ! . '$(top_srcdir)/configure.in $(ACLOCAL_M4)' . ' ' . join (' ', @include_stack) . "\n" . "\tcd \$(top_srcdir) && \$(AUTOMAKE) " --- 2958,2966 ---- . ': ' . ($seen_maint_mode ? "\@MAINTAINER_MODE_TRUE\@ " : '') . $amfile . ' ' ! . '$(top_srcdir)/' ! . $configure_ac ! . ' $(ACLOCAL_M4)' . ' ' . join (' ', @include_stack) . "\n" . "\tcd \$(top_srcdir) && \$(AUTOMAKE) " *************** *** 3155,3161 **** } &am_line_error ('CONFIG_HEADER', ! "\`CONFIG_HEADER' is an anachronism; now determined from \`configure.in'") if &variable_defined ('CONFIG_HEADER'); local ($one_name); --- 3161,3167 ---- } &am_line_error ('CONFIG_HEADER', ! "\`CONFIG_HEADER' is an anachronism; now determined from \`$configure_ac'") if &variable_defined ('CONFIG_HEADER'); local ($one_name); *************** *** 3220,3226 **** if ($local eq 'stamp-h') { # FIXME: allow real filename. ! &am_conf_error ('configure.in', $ac_output_line, 'stamp-h should not appear in AC_OUTPUT'); next; } --- 3226,3232 ---- if ($local eq 'stamp-h') { # FIXME: allow real filename. ! &am_conf_error ($configure_ac, $ac_output_line, 'stamp-h should not appear in AC_OUTPUT'); next; } *************** *** 3269,3275 **** if (! &variable_defined ('SUBDIRS')) { &am_conf_error ! ("AM_GNU_GETTEXT in configure.in but SUBDIRS not defined"); return; } --- 3275,3281 ---- if (! &variable_defined ('SUBDIRS')) { &am_conf_error ! ("AM_GNU_GETTEXT in \`$configure_ac' but SUBDIRS not defined"); return; } *************** *** 3279,3289 **** { &am_line_error ('SUBDIRS', ! "AM_GNU_GETTEXT in configure.in but \`po' not in SUBDIRS") if $contents{'SUBDIRS'} !~ /\bpo\b/; &am_line_error ('SUBDIRS', ! "AM_GNU_GETTEXT in configure.in but \`intl' not in SUBDIRS") if $contents{'SUBDIRS'} !~ /\bintl\b/; } --- 3285,3295 ---- { &am_line_error ('SUBDIRS', ! "AM_GNU_GETTEXT in \`$configure_ac' but \`po' not in SUBDIRS") if $contents{'SUBDIRS'} !~ /\bpo\b/; &am_line_error ('SUBDIRS', ! "AM_GNU_GETTEXT in \`$configure_ac' but \`intl' not in SUBDIRS") if $contents{'SUBDIRS'} !~ /\bintl\b/; } *************** *** 3313,3319 **** } else { ! &am_error ("AM_GNU_GETTEXT in configure.in but \`ALL_LINGUAS' not defined"); } } --- 3319,3325 ---- } else { ! &am_error ("AM_GNU_GETTEXT in \`$configure_ac' but \`ALL_LINGUAS' not defined"); } } *************** *** 3853,3859 **** if (&variable_defined ('lisp_LISP')) { $varname = 'lisp_LISP'; ! &am_error ("\`lisp_LISP' defined but \`AM_PATH_LISPDIR' not in \`configure.in'") if ! $seen_lispdir; } else --- 3859,3865 ---- if (&variable_defined ('lisp_LISP')) { $varname = 'lisp_LISP'; ! &am_error ("\`lisp_LISP' defined but \`AM_PATH_LISPDIR' not in \`$configure_ac'") if ! $seen_lispdir; } else *************** *** 3916,3922 **** if ($package_version !~ /^$GNITS_VERSION_PATTERN$/) { # FIXME: allow real filename. ! &am_conf_line_error ('configure.in', $package_version_line, "version \`$package_version' doesn't follow Gnits standards"); } --- 3922,3928 ---- if ($package_version !~ /^$GNITS_VERSION_PATTERN$/) { # FIXME: allow real filename. ! &am_conf_line_error ($configure_ac, $package_version_line, "version \`$package_version' doesn't follow Gnits standards"); } *************** *** 4219,4229 **** $configure_vars{'LEX'} = $filename . ':' . $.; $seen_decl_yytext = 1; } ! if (/AC_DECL_YYTEXT/ && $filename =~ /configure\.in$/) { &am_conf_line_warning ($filename, $., "\`AC_DECL_YYTEXT' is covered by \`AM_PROG_LEX'"); } ! if (/AC_PROG_LEX/ && $filename =~ /configure\.in$/) { &am_conf_line_warning ($filename, $., "automake requires \`AM_PROG_LEX', not \`AC_PROG_LEX'"); } --- 4225,4235 ---- $configure_vars{'LEX'} = $filename . ':' . $.; $seen_decl_yytext = 1; } ! if (/AC_DECL_YYTEXT/ && $filename =~ /configure\.(ac|in)$/) { &am_conf_line_warning ($filename, $., "\`AC_DECL_YYTEXT' is covered by \`AM_PROG_LEX'"); } ! if (/AC_PROG_LEX/ && $filename =~ /configure\.(ac|in)$/) { &am_conf_line_warning ($filename, $., "automake requires \`AM_PROG_LEX', not \`AC_PROG_LEX'"); } *************** *** 4310,4329 **** close (CONFIGURE); } ! # Scan configure.in and aclocal.m4 for interesting things. We must # scan aclocal.m4 because there might be AC_SUBSTs and such there. sub scan_configure { # Reinitialize libsources here. This isn't really necessary, ! # since we currently assume there is only one configure.in. But # that won't always be the case. %libsources = (); local ($in_ac_output, $in_ac_replace) = (0, 0); local (%make_list, @make_input_list); local ($libobj_iter); ! &scan_one_configure_file ('configure.in'); &scan_one_configure_file ('aclocal.m4') if -f 'aclocal.m4'; --- 4316,4345 ---- close (CONFIGURE); } ! # Scan configure.ac and aclocal.m4 for interesting things. We must # scan aclocal.m4 because there might be AC_SUBSTs and such there. sub scan_configure { # Reinitialize libsources here. This isn't really necessary, ! # since we currently assume there is only one configure.ac. But # that won't always be the case. %libsources = (); + warn "automake: both `configure.ac' and `configure.in' present:" + . " ignoring `configure.in'\n" + if -f 'configure.ac' && -f 'configure.in'; + $configure_ac = 'configure.in' + if -f 'configure.in'; + $configure_ac = 'configure.ac' + if -f 'configure.ac'; + die "automake: `configure.ac' or `configure.in' is required\n" + if !$configure_ac; + local ($in_ac_output, $in_ac_replace) = (0, 0); local (%make_list, @make_input_list); local ($libobj_iter); ! &scan_one_configure_file ($configure_ac); &scan_one_configure_file ('aclocal.m4') if -f 'aclocal.m4'; *************** *** 4334,4342 **** %output_files = %make_list; } ! &am_conf_error ("\`PACKAGE' not defined in configure.in") if ! $seen_package; ! &am_conf_error ("\`VERSION' not defined in configure.in") if ! $seen_version; # Look for some files we need. Always check for these. This --- 4350,4358 ---- %output_files = %make_list; } ! &am_conf_error ("\`PACKAGE' not defined in \`$configure_ac'") if ! $seen_package; ! &am_conf_error ("\`VERSION' not defined in \`$configure_ac'") if ! $seen_version; # Look for some files we need. Always check for these. This *************** *** 4582,4588 **** if (! defined $configure_vars{'CC'}) { # FIXME: line number. ! &am_error ("C source seen but \`CC' not defined in \`configure.in'"); } } --- 4598,4604 ---- if (! defined $configure_vars{'CC'}) { # FIXME: line number. ! &am_error ("C source seen but \`CC' not defined in \`$configure_ac'"); } } *************** *** 4633,4639 **** if (! defined $configure_vars{'CXX'}) { ! &am_error ("C++ source seen but \`CXX' not defined in \`configure.in'"); } } } --- 4649,4655 ---- if (! defined $configure_vars{'CXX'}) { ! &am_error ("C++ source seen but \`CXX' not defined in \`$configure_ac'"); } } } *************** *** 4701,4707 **** if (! defined $configure_vars{'YACC'}) { ! &am_error ("yacc source seen but \`YACC' not defined in \`configure.in'"); } if (&variable_defined ('YACCFLAGS')) { --- 4717,4723 ---- if (! defined $configure_vars{'YACC'}) { ! &am_error ("yacc source seen but \`YACC' not defined in \`$configure_ac'"); } if (&variable_defined ('YACCFLAGS')) { *************** *** 4748,4758 **** if (! defined $configure_vars{'LEX'}) { ! &am_error ("lex source seen but \`LEX' not defined in \`configure.in'"); } if (! $seen_decl_yytext) { ! &am_error ("lex source seen but \`AC_DECL_YYTEXT' not in \`configure.in'"); } if ($lex_count > 1) --- 4764,4774 ---- if (! defined $configure_vars{'LEX'}) { ! &am_error ("lex source seen but \`LEX' not defined in \`$configure_ac'"); } if (! $seen_decl_yytext) { ! &am_error ("lex source seen but \`AC_DECL_YYTEXT' not in \`$configure_ac'"); } if ($lex_count > 1) *************** *** 4819,4825 **** if (! defined $configure_vars{'F77'}) { ! &am_error ("Fortran 77 source seen but \`F77' not defined in \`configure.in'"); } } } --- 4835,4841 ---- if (! defined $configure_vars{'F77'}) { ! &am_error ("Fortran 77 source seen but \`F77' not defined in \`$configure_ac'"); } } } *************** *** 4872,4878 **** if (! defined $configure_vars{'F77'}) { ! &am_error ("Fortran 77 source seen but \`F77' not defined in \`configure.in'"); } } --- 4888,4894 ---- if (! defined $configure_vars{'F77'}) { ! &am_error ("Fortran 77 source seen but \`F77' not defined in \`$configure_ac'"); } } *************** *** 4911,4917 **** if (! defined $configure_vars{'F77'}) { ! &am_error ("Ratfor source seen but \`F77' not defined in \`configure.in'"); } } --- 4927,4933 ---- if (! defined $configure_vars{'F77'}) { ! &am_error ("Ratfor source seen but \`F77' not defined in \`$configure_ac'"); } } *************** *** 4942,4948 **** if (! defined $configure_vars{'OBJC'}) { ! &am_error ("Objective C source seen but \`OBJC' not defined in \`configure.in'"); } } --- 4958,4964 ---- if (! defined $configure_vars{'OBJC'}) { ! &am_error ("Objective C source seen but \`OBJC' not defined in \`$configure_ac'"); } } *************** *** 6217,6226 **** @common_files = ( "README", "THANKS", "TODO", "NEWS", "COPYING", "COPYING.LIB", ! "INSTALL", "ABOUT-NLS", "ChangeLog", "configure", "configure.in", ! "config.guess", "config.sub", "AUTHORS", "BACKLOG", "ABOUT-GNU", ! "libversion.in", "mdate-sh", "mkinstalldirs", "install-sh", ! 'texinfo.tex', "ansi2knr.c", "ansi2knr.1", 'elisp-comp', 'ylwrap', 'acinclude.m4', @libtoolize_files, @libtoolize_sometimes, 'missing' ); --- 6233,6243 ---- @common_files = ( "README", "THANKS", "TODO", "NEWS", "COPYING", "COPYING.LIB", ! "INSTALL", "ABOUT-NLS", "ChangeLog", "configure.ac", ! "configure.in", "configure", "config.guess", "config.sub", ! "AUTHORS", "BACKLOG", "ABOUT-GNU", "libversion.in", ! "mdate-sh", "mkinstalldirs", "install-sh", 'texinfo.tex', ! "ansi2knr.c", "ansi2knr.1", 'elisp-comp', 'ylwrap', 'acinclude.m4', @libtoolize_files, @libtoolize_sometimes, 'missing' ); *************** *** 6673,6679 **** } } # Check here to make sure variables defined in ! # configure.in do not imply that EXTRA_PRIMARY # must be defined. elsif (! defined $configure_vars{$one_name}) { --- 6690,6696 ---- } } # Check here to make sure variables defined in ! # configure.ac do not imply that EXTRA_PRIMARY # must be defined. elsif (! defined $configure_vars{$one_name}) { *************** *** 6942,6948 **** if ($is_configure) { # FIXME: allow actual file to be specified. ! &am_conf_line_error ('configure.in', $line, "$message$trailer"); } else --- 6959,6965 ---- if ($is_configure) { # FIXME: allow actual file to be specified. ! &am_conf_line_error ($configure_ac, $line, "$message$trailer"); } else *************** *** 6956,6962 **** } # Like require_file_with_line, but error messages refer to ! # configure.in, not the current Makefile.am. sub require_file_with_conf_line { @require_file_paths = '.'; --- 6973,6979 ---- } # Like require_file_with_line, but error messages refer to ! # configure.ac, not the current Makefile.am. sub require_file_with_conf_line { @require_file_paths = '.'; *************** *** 7145,7151 **** } elsif (defined $configure_vars{$symbol}) { ! # SYMBOL is a variable defined in configure.in, so add the # appropriate line number. $file = $configure_vars{$symbol}; } --- 7162,7168 ---- } elsif (defined $configure_vars{$symbol}) { ! # SYMBOL is a variable defined in configure.ac, so add the # appropriate line number. $file = $configure_vars{$symbol}; } *************** *** 7162,7176 **** } } ! # Like am_error, but while scanning configure.in. sub am_conf_error { # FIXME: can run in subdirs. ! warn "automake: configure.in: ", join (' ', @_), "\n"; $exit_status = 1; } ! # Error message with line number referring to configure.in. sub am_conf_line_error { local ($file, $line, @args) = @_; --- 7179,7193 ---- } } ! # Like am_error, but while scanning configure.ac. sub am_conf_error { # FIXME: can run in subdirs. ! warn "automake: $configure_ac: ", join (' ', @_), "\n"; $exit_status = 1; } ! # Error message with line number referring to configure.ac. sub am_conf_line_error { local ($file, $line, @args) = @_; *************** *** 7186,7192 **** } } ! # Warning message with line number referring to configure.in. # Does not affect exit_status sub am_conf_line_warning { --- 7203,7209 ---- } } ! # Warning message with line number referring to configure.ac. # Does not affect exit_status sub am_conf_line_warning { Index: automake/config.guess diff -c automake/config.guess:1.12.8.1 automake/config.guess:1.12.8.2 *** automake/config.guess:1.12.8.1 Tue May 8 17:27:14 2001 --- automake/config.guess Thu Jun 7 12:48:51 2001 *************** *** 3,9 **** # Copyright (C) 1992, 1993, 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001 # Free Software Foundation, Inc. ! timestamp='2001-04-20' # 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 --- 3,9 ---- # Copyright (C) 1992, 1993, 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001 # Free Software Foundation, Inc. ! timestamp='2001-06-05' # 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 *************** *** 52,58 **** GNU config.guess ($timestamp) Originally written by Per Bothner. ! Copyright (C) 1992, 93, 94, 95, 96, 97, 98, 99, 2000 Free Software Foundation, Inc. This is free software; see the source for copying conditions. There is NO --- 52,58 ---- GNU config.guess ($timestamp) Originally written by Per Bothner. ! Copyright (C) 1992, 1993, 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001 Free Software Foundation, Inc. This is free software; see the source for copying conditions. There is NO *************** *** 883,920 **** # 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. ! ld_supported_emulations=`cd /; ld --help 2>&1 \ ! | sed -ne '/supported emulations:/!d s/[ ][ ]*/ /g ! s/.*supported emulations: *// s/ .*// p'` ! case "$ld_supported_emulations" in ! i*86linux) ! echo "${UNAME_MACHINE}-pc-linux-gnuaout" ! exit 0 ! ;; ! elf_i*86) TENTATIVE="${UNAME_MACHINE}-pc-linux-gnu" ;; ! i*86coff) echo "${UNAME_MACHINE}-pc-linux-gnucoff" ! exit 0 ! ;; ! esac ! # Either a pre-BFD a.out linker (linux-gnuoldld) ! # or one that does not give us useful --help. ! # GCC wants to distinguish between linux-gnuoldld and linux-gnuaout. ! # If ld does not provide *any* "supported emulations:" ! # that means it is gnuoldld. ! test -z "$ld_supported_emulations" && echo "${UNAME_MACHINE}-pc-linux-gnuoldld" && exit 0 ! case "${UNAME_MACHINE}" in ! i*86) ! VENDOR=pc; ! ;; ! *) ! VENDOR=unknown; ! ;; esac # Determine whether the default compiler is a.out or elf cat >$dummy.c <&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 cat >$dummy.c <= 2 ! printf ("%s-${VENDOR}-linux-gnu\n", argv[1]); # else ! printf ("%s-${VENDOR}-linux-gnulibc1\n", argv[1]); # endif # else ! printf ("%s-${VENDOR}-linux-gnulibc1\n", argv[1]); # endif #else ! printf ("%s-${VENDOR}-linux-gnuaout\n", argv[1]); #endif return 0; } --- 917,931 ---- #ifdef __ELF__ # ifdef __GLIBC__ # if __GLIBC__ >= 2 ! printf ("%s-pc-linux-gnu\n", argv[1]); # else ! printf ("%s-pc-linux-gnulibc1\n", argv[1]); # endif # else ! printf ("%s-pc-linux-gnulibc1\n", argv[1]); # endif #else ! printf ("%s-pc-linux-gnuaout\n", argv[1]); #endif return 0; } Index: automake/config.sub diff -c automake/config.sub:1.149.8.2 automake/config.sub:1.149.8.3 *** automake/config.sub:1.149.8.2 Thu May 24 13:20:07 2001 --- automake/config.sub Thu Jun 7 12:48:51 2001 *************** *** 3,9 **** # Copyright (C) 1992, 1993, 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001 # Free Software Foundation, Inc. ! timestamp='2001-05-24' # This file is (in principle) common to ALL GNU software. # The presence of a machine in this file suggests that SOME GNU software --- 3,9 ---- # Copyright (C) 1992, 1993, 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001 # Free Software Foundation, Inc. ! timestamp='2001-05-30' # This file is (in principle) common to ALL GNU software. # The presence of a machine in this file suggests that SOME GNU software *************** *** 117,123 **** # 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* | storm-chaos* | os2-emx*) os=-$maybe_os basic_machine=`echo $1 | sed 's/^\(.*\)-\([^-]*-[^-]*\)$/\1/'` ;; --- 117,123 ---- # 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* | storm-chaos* | os2-emx* | windows32-*) os=-$maybe_os basic_machine=`echo $1 | sed 's/^\(.*\)-\([^-]*-[^-]*\)$/\1/'` ;; *************** *** 880,885 **** --- 880,889 ---- w89k-*) basic_machine=hppa1.1-winbond os=-proelf + ;; + windows32) + basic_machine=i386-pc + os=-windows32-msvcrt ;; xmp) basic_machine=xmp-cray Index: automake/configure diff -c automake/configure:1.62.4.4 automake/configure:1.62.4.6 *** automake/configure:1.62.4.4 Thu May 24 13:35:41 2001 --- automake/configure Thu Jun 7 13:03:51 2001 *************** *** 692,698 **** PACKAGE=automake ! VERSION=1.4-p2 if test "`cd $srcdir && pwd`" != "`pwd`" && test -f $srcdir/config.status; then { echo "configure: error: source directory already configured; run "make distclean" there first" 1>&2; exit 1; } --- 692,698 ---- PACKAGE=automake ! VERSION=1.4-p3 if test "`cd $srcdir && pwd`" != "`pwd`" && test -f $srcdir/config.status; then { echo "configure: error: source directory already configured; run "make distclean" there first" 1>&2; exit 1; } Index: automake/configure.in diff -c automake/configure.in:1.67.4.4 automake/configure.in:1.67.4.6 *** automake/configure.in:1.67.4.4 Thu May 24 13:35:42 2001 --- automake/configure.in Thu Jun 7 13:03:51 2001 *************** *** 1,7 **** dnl Process this file with autoconf to produce a configure script. AC_INIT(automake.in) ! AM_INIT_AUTOMAKE(automake, 1.4-p2) # Find an appropriate tar for use in "dist" targets. A "best guess" # is good enough -- if we can't find GNU tar, we don't really care. --- 1,7 ---- dnl Process this file with autoconf to produce a configure script. AC_INIT(automake.in) ! AM_INIT_AUTOMAKE(automake, 1.4-p3) # Find an appropriate tar for use in "dist" targets. A "best guess" # is good enough -- if we can't find GNU tar, we don't really care. Index: automake/stamp-vti diff -c automake/stamp-vti:1.68.4.4 automake/stamp-vti:1.68.4.6 *** automake/stamp-vti:1.68.4.4 Thu May 24 13:35:42 2001 --- automake/stamp-vti Thu Jun 7 13:03:51 2001 *************** *** 1,3 **** @set UPDATED 6 January 1999 ! @set EDITION 1.4-p2 ! @set VERSION 1.4-p2 --- 1,3 ---- @set UPDATED 6 January 1999 ! @set EDITION 1.4-p3 ! @set VERSION 1.4-p3 Index: automake/texinfo.tex diff -c automake/texinfo.tex:1.14 automake/texinfo.tex:1.14.8.1 *** automake/texinfo.tex:1.14 Tue Jan 12 07:01:43 1999 --- automake/texinfo.tex Thu Jun 7 12:53:52 2001 *************** *** 3,12 **** % Load plain if necessary, i.e., if running under initex. \expandafter\ifx\csname fmtname\endcsname\relax\input plain\fi % ! \def\texinfoversion{1999-01-05}% % ! % Copyright (C) 1985, 86, 88, 90, 91, 92, 93, 94, 95, 96, 97, 98 ! % 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 --- 3,12 ---- % Load plain if necessary, i.e., if running under initex. \expandafter\ifx\csname fmtname\endcsname\relax\input plain\fi % ! \def\texinfoversion{2001-05-24.08} % ! % Copyright (C) 1985, 86, 88, 90, 91, 92, 93, 94, 95, 96, 97, 98, 99, ! % 2000, 01 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 *************** *** 29,58 **** % % Please try the latest version of texinfo.tex before submitting bug % reports; you can get the latest version from: ! % ftp://ftp.gnu.org/pub/gnu/texinfo.tex ! % /home/gd/gnu/doc/texinfo.tex on the GNU machines. % (and all GNU mirrors, see http://www.gnu.org/order/ftp.html) ! % ftp://tug.org/tex/texinfo.tex ! % ftp://ctan.org/macros/texinfo/texinfo.tex ! % (and all CTAN mirrors, finger ctan@ctan.org for a list). ! % The texinfo.tex in the texinfo distribution itself 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 a precise test case in each bug report, ! % including a complete document with which we can reproduce the problem. ! % % To process a Texinfo manual with TeX, it's most reliable to use the ! % texi2dvi shell script that comes with the distribution. For simple ! % manuals, however, you can get away with: % tex foo.texi % texindex foo.?? % tex foo.texi % tex foo.texi ! % dvips foo.dvi -o # or whatever, to process the dvi file. % The extra runs of TeX 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. \message{Loading texinfo [version \texinfoversion]:} --- 29,62 ---- % % Please try the latest version of texinfo.tex before submitting bug % reports; you can get the latest version from: ! % ftp://ftp.gnu.org/gnu/texinfo.tex % (and all GNU mirrors, see http://www.gnu.org/order/ftp.html) ! % ftp://texinfo.org/tex/texinfo.tex ! % ftp://us.ctan.org/macros/texinfo/texinfo.tex ! % (and all CTAN mirrors, finger ctan@us.ctan.org for a list). ! % /home/gd/gnu/doc/texinfo.tex on the GNU machines. ! % The texinfo.tex in any given Texinfo distribution could well be out % of date, so if that's what you're using, please check. ! % Texinfo has a small home page at http://texinfo.org/. ! % ! % 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, to process the dvi file; this makes foo.ps. % The extra runs of TeX 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. You can get + % the existing language-specific files from ftp://ftp.gnu.org/gnu/texinfo/. \message{Loading texinfo [version \texinfoversion]:} *************** *** 63,69 **** \catcode`+=\active \catcode`\_=\active} % Save some parts of plain tex whose names we will redefine. - \let\ptexb=\b \let\ptexbullet=\bullet \let\ptexc=\c --- 67,72 ---- *************** *** 83,89 **** % For @tex, we can use \tabalign. \let\+ = \relax - \message{Basics,} \chardef\other=12 --- 86,91 ---- *************** *** 92,110 **** \newlinechar = `^^J % 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\putwordInfo\undefined \gdef\putwordInfo{Info}\fi ! \ifx\putwordMethodon\undefined \gdef\putwordMethodon{Method on}\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\putwordShortContents\undefined \gdef\putwordShortContents{Short Contents}\fi ! \ifx\putwordTableofContents\undefined\gdef\putwordTableofContents{Table of Contents}\fi % Ignore a token. % --- 94,139 ---- \newlinechar = `^^J % 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\putwordDeftypevar\undefined\gdef\putwordDeftypevar{Variable}\fi ! \ifx\putwordDeffunc\undefined \gdef\putwordDeffunc{Function}\fi ! \ifx\putwordDeftypefun\undefined\gdef\putwordDeftypefun{Function}\fi % Ignore a token. % *************** *** 141,149 **** }% \fi % For @cropmarks command. % Do @cropmarks to get crop marks. ! % \newif\ifcropmarks \let\cropmarks = \cropmarkstrue % --- 170,188 ---- }% \fi + % 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 % *************** *** 185,190 **** --- 224,232 ---- \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 \pdfmkdest{\the\pageno} \fi + % \ifcropmarks \vbox to \outervsize\bgroup \hsize = \outerhsize \vskip-\topandbottommargin *************** *** 568,603 **** %}} \def\needx#1{% ! % Go into vertical mode, so we don't make a big box in the middle of a % paragraph. \par - % - % Don't add any leading before our big empty box, but allow a page - % break, since the best break might be right here. - \allowbreak - \nointerlineskip - \vtop to #1\mil{\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 } % @br forces paragraph break --- 610,651 ---- %}} \def\needx#1{% ! % 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 *************** *** 618,624 **** } % @enddots{} is an end-of-sentence ellipsis. ! % \def\enddots{% \leavevmode \hbox to 2em{% --- 666,672 ---- } % @enddots{} is an end-of-sentence ellipsis. ! % \def\enddots{% \leavevmode \hbox to 2em{% *************** *** 650,665 **** \def\nofillexdentyyy #1{{\advance \leftskip by -\exdentamount \leftline{\hskip\leftskip{\rm#1}}}} ! % @inmargin{TEXT} puts TEXT in the margin next to the current paragraph. ! ! \def\inmargin#1{% ! \strut\vadjust{\nobreak\kern-\strutdepth ! \vtop to \strutdepth{\baselineskip\strutdepth\vss ! \llap{\rightskip=\inmarginspacing \vbox{\noindent #1}}\null}}} \newskip\inmarginspacing \inmarginspacing=1cm \def\strutdepth{\dp\strutbox} ! ! %\hbox{{\rm#1}}\hfil\break}} % @include file insert text of that file as input. % Allow normal characters that we make active in the argument (a file name). --- 698,751 ---- \def\nofillexdentyyy #1{{\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. % Allow normal characters that we make active in the argument (a file name). *************** *** 704,1126 **** {\catcode`\^^M=\other \gdef\commentxxx#1^^M{\endgroup}} \let\c=\comment - - % @paragraphindent is defined for the Info formatting commands only. - \let\paragraphindent=\comment ! % Prevent errors for section commands. ! % Used in @ignore and in failing conditionals. ! \def\ignoresections{% ! \let\chapter=\relax ! \let\unnumbered=\relax ! \let\top=\relax ! \let\unnumberedsec=\relax ! \let\unnumberedsection=\relax ! \let\unnumberedsubsec=\relax ! \let\unnumberedsubsection=\relax ! \let\unnumberedsubsubsec=\relax ! \let\unnumberedsubsubsection=\relax ! \let\section=\relax ! \let\subsec=\relax ! \let\subsubsec=\relax ! \let\subsection=\relax ! \let\subsubsection=\relax ! \let\appendix=\relax ! \let\appendixsec=\relax ! \let\appendixsection=\relax ! \let\appendixsubsec=\relax ! \let\appendixsubsection=\relax ! \let\appendixsubsubsec=\relax ! \let\appendixsubsubsection=\relax ! \let\contents=\relax ! \let\smallbook=\relax ! \let\titlepage=\relax } ! % Used in nested conditionals, where we have to parse the Texinfo source ! % and so want to turn off most commands, in case they are used ! % incorrectly. ! % ! \def\ignoremorecommands{% ! \let\defcodeindex = \relax ! \let\defcv = \relax ! \let\deffn = \relax ! \let\deffnx = \relax ! \let\defindex = \relax ! \let\defivar = \relax ! \let\defmac = \relax ! \let\defmethod = \relax ! \let\defop = \relax ! \let\defopt = \relax ! \let\defspec = \relax ! \let\deftp = \relax ! \let\deftypefn = \relax ! \let\deftypefun = \relax ! \let\deftypevar = \relax ! \let\deftypevr = \relax ! \let\defun = \relax ! \let\defvar = \relax ! \let\defvr = \relax ! \let\ref = \relax ! \let\xref = \relax ! \let\printindex = \relax ! \let\pxref = \relax ! \let\settitle = \relax ! \let\setchapternewpage = \relax ! \let\setchapterstyle = \relax ! \let\everyheading = \relax ! \let\evenheading = \relax ! \let\oddheading = \relax ! \let\everyfooting = \relax ! \let\evenfooting = \relax ! \let\oddfooting = \relax ! \let\headings = \relax ! \let\include = \relax ! \let\lowersections = \relax ! \let\down = \relax ! \let\raisesections = \relax ! \let\up = \relax ! \let\set = \relax ! \let\clear = \relax ! \let\item = \relax } ! % Ignore @ignore ... @end ignore. % ! \def\ignore{\doignore{ignore}} ! % Ignore @ifinfo, @ifhtml, @ifnottex, @html, @menu, and @direntry text. % ! \def\ifinfo{\doignore{ifinfo}} ! \def\ifhtml{\doignore{ifhtml}} ! \def\ifnottex{\doignore{ifnottex}} ! \def\html{\doignore{html}} ! \def\menu{\doignore{menu}} ! \def\direntry{\doignore{direntry}} ! % @dircategory CATEGORY -- specify a category of the dir file ! % which this file should belong to. Ignore this in TeX. ! \let\dircategory = \comment ! % Ignore text until a line `@end #1'. % ! \def\doignore#1{\begingroup ! % Don't complain about control sequences we have declared \outer. ! \ignoresections ! % ! % Define a command to swallow text until we reach `@end #1'. ! % This @ is a catcode 12 token (that is the normal catcode of @ in ! % this texinfo.tex file). We change the catcode of @ below to match. ! \long\def\doignoretext##1@end #1{\enddoignore}% ! % ! % Make sure that spaces turn into tokens that match what \doignoretext wants. ! \catcode32 = 10 ! % ! % Ignore braces, too, so mismatched braces don't cause trouble. ! \catcode`\{ = 9 ! \catcode`\} = 9 ! % ! % We must not have @c interpreted as a control sequence. ! \catcode`\@ = 12 ! % ! % Make the letter c a comment character so that the rest of the line ! % will be ignored. This way, the document can have (for example) ! % @c @end ifinfo ! % and the @end ifinfo will be properly ignored. ! % (We've just changed @ to catcode 12.) ! \catcode`\c = 14 ! % ! % And now expand that command. ! \doignoretext } ! % What we do to finish off ignored text. % ! \def\enddoignore{\endgroup\ignorespaces}% ! \newif\ifwarnedobs\warnedobsfalse ! \def\obstexwarn{% ! \ifwarnedobs\relax\else ! % We need to warn folks that they may have trouble with TeX 3.0. ! % This uses \immediate\write16 rather than \message to get newlines. ! \immediate\write16{} ! \immediate\write16{***WARNING*** for users of Unix TeX 3.0!} ! \immediate\write16{This manual trips a bug in TeX version 3.0 (tex hangs).} ! \immediate\write16{If you are running another version of TeX, relax.} ! \immediate\write16{If you are running Unix TeX 3.0, kill this TeX process.} ! \immediate\write16{ Then upgrade your TeX installation if you can.} ! \immediate\write16{ (See ftp://ftp.gnu.org/pub/gnu/TeX.README.)} ! \immediate\write16{If you are stuck with version 3.0, run the} ! \immediate\write16{ script ``tex3patch'' from the Texinfo distribution} ! \immediate\write16{ to use a workaround.} ! \immediate\write16{} ! \global\warnedobstrue \fi ! } - % **In TeX 3.0, setting text in \nullfont hangs tex. For a - % workaround (which requires the file ``dummy.tfm'' to be installed), - % uncomment the following line: - %%%%%\font\nullfont=dummy\let\obstexwarn=\relax - % Ignore text, except that we keep track of conditional commands for - % purposes of nesting, up to an `@end #1' command. - % - \def\nestedignore#1{% - \obstexwarn - % We must actually expand the ignored text to look for the @end - % command, so that nested ignore constructs work. Thus, we put the - % text into a \vbox and then do nothing with the result. To minimize - % the change of memory overflow, we follow the approach outlined on - % page 401 of the TeXbook: make the current font be a dummy font. - % - \setbox0 = \vbox\bgroup - % Don't complain about control sequences we have declared \outer. - \ignoresections - % - % Define `@end #1' to end the box, which will in turn undefine the - % @end command again. - \expandafter\def\csname E#1\endcsname{\egroup\ignorespaces}% - % - % We are going to be parsing Texinfo commands. Most cause no - % trouble when they are used incorrectly, but some commands do - % complicated argument parsing or otherwise get confused, so we - % undefine them. - % - % We can't do anything about stray @-signs, unfortunately; - % they'll produce `undefined control sequence' errors. - \ignoremorecommands - % - % Set the current font to be \nullfont, a TeX primitive, and define - % all the font commands to also use \nullfont. We don't use - % dummy.tfm, as suggested in the TeXbook, because not all sites - % might have that installed. Therefore, math mode will still - % produce output, but that should be an extremely small amount of - % stuff compared to the main input. - % - \nullfont - \let\tenrm = \nullfont \let\tenit = \nullfont \let\tensl = \nullfont - \let\tenbf = \nullfont \let\tentt = \nullfont \let\smallcaps = \nullfont - \let\tensf = \nullfont - % Similarly for index fonts (mostly for their use in - % smallexample) - \let\indrm = \nullfont \let\indit = \nullfont \let\indsl = \nullfont - \let\indbf = \nullfont \let\indtt = \nullfont \let\indsc = \nullfont - \let\indsf = \nullfont - % - % Don't complain when characters are missing from the fonts. - \tracinglostchars = 0 - % - % Don't bother to do space factor calculations. - \frenchspacing - % - % Don't report underfull hboxes. - \hbadness = 10000 - % - % Do minimal line-breaking. - \pretolerance = 10000 - % - % Do not execute instructions in @tex - \def\tex{\doignore{tex}}% - % Do not execute macro definitions. - % `c' is a comment character, so the word `macro' will get cut off. - \def\macro{\doignore{ma}}% - } - - % @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. Make sure the catcode of space is correct to avoid - % losing inside @example, for instance. - % - \def\set{\begingroup\catcode` =10 - \catcode`\-=12 \catcode`\_=12 % Allow - and _ in VAR. - \parsearg\setxxx} - \def\setxxx#1{\setyyy#1 \endsetyyy} - \def\setyyy#1 #2\endsetyyy{% - \def\temp{#2}% - \ifx\temp\empty \global\expandafter\let\csname SET#1\endcsname = \empty - \else \setzzz{#1}#2\endsetzzz % Remove the trailing space \setxxx inserted. - \fi - \endgroup - } - % Can't use \xdef to pre-expand #2 and save some time, since \temp or - % \next or other control sequences that we've defined might get us into - % an infinite loop. Consider `@set foo @cite{bar}'. - \def\setzzz#1#2 \endsetzzz{\expandafter\gdef\csname SET#1\endcsname{#2}} - - % @clear VAR clears (i.e., unsets) the variable VAR. - % - \def\clear{\parsearg\clearxxx} - \def\clearxxx#1{\global\expandafter\let\csname SET#1\endcsname=\relax} - - % @value{foo} gets the text saved in variable foo. - % - { - \catcode`\_ = \active - % - % We might end up with active _ or - characters in the argument if - % we're called from @code, as @code{@value{foo-bar_}}. So \let any - % such active characters to their normal equivalents. - \gdef\value{\begingroup - \catcode`\-=12 \catcode`\_=12 - \indexbreaks \let_\normalunderscore - \valuexxx} - } - \def\valuexxx#1{\expandablevalue{#1}\endgroup} - - % We have this subroutine so that we can handle at least some @value's - % properly in indexes (we \let\value to this in \indexdummies). Ones - % whose names contain - or _ still won't work, but we can't do anything - % about that. The command has to be fully expandable, 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'']}% - \else - \csname SET#1\endcsname - \fi - } - - % @ifset VAR ... @end ifset reads the `...' iff VAR has been defined - % with @set. - % - \def\ifset{\parsearg\ifsetxxx} - \def\ifsetxxx #1{% - \expandafter\ifx\csname SET#1\endcsname\relax - \expandafter\ifsetfail - \else - \expandafter\ifsetsucceed - \fi - } - \def\ifsetsucceed{\conditionalsucceed{ifset}} - \def\ifsetfail{\nestedignore{ifset}} - \defineunmatchedend{ifset} - - % @ifclear VAR ... @end ifclear reads the `...' iff VAR has never been - % defined with @set, or has been undefined with @clear. - % - \def\ifclear{\parsearg\ifclearxxx} - \def\ifclearxxx #1{% - \expandafter\ifx\csname SET#1\endcsname\relax - \expandafter\ifclearsucceed - \else - \expandafter\ifclearfail - \fi - } - \def\ifclearsucceed{\conditionalsucceed{ifclear}} - \def\ifclearfail{\nestedignore{ifclear}} - \defineunmatchedend{ifclear} - - % @iftex, @ifnothtml, @ifnotinfo always succeed; we read the text - % following, through the first @end iftex (etc.). Make `@end iftex' - % (etc.) valid only after an @iftex. - % - \def\iftex{\conditionalsucceed{iftex}} - \def\ifnothtml{\conditionalsucceed{ifnothtml}} - \def\ifnotinfo{\conditionalsucceed{ifnotinfo}} - \defineunmatchedend{iftex} - \defineunmatchedend{ifnothtml} - \defineunmatchedend{ifnotinfo} - - % We can't just want to start a group at @iftex (for example) and end it - % at @end iftex, since then @set commands inside the conditional have no - % effect (they'd get reverted at the end of the group). So we must - % define \Eiftex to redefine itself to be its previous value. (We can't - % just define it to fail again with an ``unmatched end'' error, since - % the @ifset might be nested.) - % - \def\conditionalsucceed#1{% - \edef\temp{% - % Remember the current value of \E#1. - \let\nece{prevE#1} = \nece{E#1}% - % - % At the `@end #1', redefine \E#1 to be its previous value. - \def\nece{E#1}{\let\nece{E#1} = \nece{prevE#1}}% - }% - \temp - } - - % We need to expand lots of \csname's, but we don't want to expand the - % control sequences after we've constructed them. - % - \def\nece#1{\expandafter\noexpand\csname#1\endcsname} - - % @asis just yields its argument. Used with @table, for example. - % - \def\asis#1{#1} - - % @math means output in math mode. - % We don't use $'s directly in the definition of \math because control - % sequences like \math are expanded when the toc file is written. Then, - % we read the toc file back, the $'s will be normal characters (as they - % should be, according to the definition of Texinfo). So we must use a - % control sequence to switch into and out of math mode. - % - % This isn't quite enough for @math to work properly in indices, but it - % seems unlikely it will ever be needed there. - % - \let\implicitmath = $ - \def\math#1{\implicitmath #1\implicitmath} - - % @bullet and @minus need the same treatment as @math, just above. - \def\bullet{\implicitmath\ptexbullet\implicitmath} - \def\minus{\implicitmath-\implicitmath} - - % @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{% - \iflinks - \readauxfile - \fi % \openindices needs to do some work in any case. - \openindices - \fixbackslash % Turn off hack to swallow `\input texinfo'. - \global\let\setfilename=\comment % Ignore extra @setfilename cmds. - % - % If texinfo.cnf is present on the system, read it. - % Useful for site-wide @afourpaper, etc. - % Just to be on the safe side, close the input stream before the \input. - \openin 1 texinfo.cnf - \ifeof1 \let\temp=\relax \else \def\temp{\input texinfo.cnf }\fi - \closein1 - \temp - % - \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{fonts,} % Font-change commands. --- 790,1080 ---- {\catcode`\^^M=\other \gdef\commentxxx#1^^M{\endgroup}} \let\c=\comment ! % @paragraphindent NCHARS ! % We'll use ems for NCHARS, close enough. ! % We cannot implement @paragraphindent asis, though. ! % ! \def\asisword{asis} % no translation, these are keywords ! \def\noneword{none} ! % ! \def\paragraphindent{\parsearg\doparagraphindent} ! \def\doparagraphindent#1{% ! \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. ! \def\exampleindent{\parsearg\doexampleindent} ! \def\doexampleindent#1{% ! \def\temp{#1}% ! \ifx\temp\asisword ! \else ! \ifx\temp\noneword ! \lispnarrowing = 0pt ! \else ! \lispnarrowing = #1em ! \fi ! \fi } ! % @asis just yields its argument. Used with @table, for example. % ! \def\asis#1{#1} ! % @math means output in math mode. ! % We don't use $'s directly in the definition of \math because control ! % sequences like \math are expanded when the toc file is written. Then, ! % we read the toc file back, the $'s will be normal characters (as they ! % should be, according to the definition of Texinfo). So we must use a ! % control sequence to switch into and out of math mode. % ! % This isn't quite enough for @math to work properly in indices, but it ! % seems unlikely it will ever be needed there. ! % ! \let\implicitmath = $ ! \def\math#1{\implicitmath #1\implicitmath} ! % @bullet and @minus need the same treatment as @math, just above. ! \def\bullet{\implicitmath\ptexbullet\implicitmath} ! \def\minus{\implicitmath-\implicitmath} ! % @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{% ! \iflinks ! \readauxfile ! \fi % \openindices needs to do some work in any case. ! \openindices ! \fixbackslash % Turn off hack to swallow `\input texinfo'. ! \global\let\setfilename=\comment % Ignore extra @setfilename cmds. ! % ! % If texinfo.cnf is present on the system, read it. ! % Useful for site-wide @afourpaper, etc. ! % Just to be on the safe side, close the input stream before the \input. ! \openin 1 texinfo.cnf ! \ifeof1 \let\temp=\relax \else \def\temp{\input texinfo.cnf }\fi ! \closein1 ! \temp ! % ! \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 ! ! \ifx\pdfoutput\undefined ! \pdffalse ! \let\pdfmkdest = \gobble ! \let\pdfurl = \gobble ! \let\endlink = \relax ! \let\linkcolor = \relax ! \let\pdfmakeoutlines = \relax ! \else ! \pdftrue ! \pdfoutput = 1 ! \input pdfcolor ! \def\dopdfimage#1#2#3{% ! \def\imagewidth{#2}% ! \def\imageheight{#3}% ! \ifnum\pdftexversion < 14 ! \pdfimage ! \else ! \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{\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 by1 ! \expandafter\xdef\csname#1\endcsname{\the\tempnum}} ! \def\pdfmakeoutlines{{% ! \openin 1 \jobname.toc ! \ifeof 1\else\bgroup ! \closein 1 ! \indexnofonts ! \def\tt{} ! \let\_ = \normalunderscore ! % Thanh's hack / proper braces in bookmarks ! \edef\mylbrace{\iftrue \string{\else}\fi}\let\{=\mylbrace ! \edef\myrbrace{\iffalse{\else\string}\fi}\let\}=\myrbrace ! % ! \def\chapentry ##1##2##3{} ! \def\unnumbchapentry ##1##2{} ! \def\secentry ##1##2##3##4{\advancenumber{chap##2}} ! \def\unnumbsecentry ##1##2{} ! \def\subsecentry ##1##2##3##4##5{\advancenumber{sec##2.##3}} ! \def\unnumbsubsecentry ##1##2{} ! \def\subsubsecentry ##1##2##3##4##5##6{\advancenumber{subsec##2.##3.##4}} ! \def\unnumbsubsubsecentry ##1##2{} ! \input \jobname.toc ! \def\chapentry ##1##2##3{% ! \pdfoutline goto name{\pdfmkpgn{##3}}count-\expnumber{chap##2}{##1}} ! \def\unnumbchapentry ##1##2{% ! \pdfoutline goto name{\pdfmkpgn{##2}}{##1}} ! \def\secentry ##1##2##3##4{% ! \pdfoutline goto name{\pdfmkpgn{##4}}count-\expnumber{sec##2.##3}{##1}} ! \def\unnumbsecentry ##1##2{% ! \pdfoutline goto name{\pdfmkpgn{##2}}{##1}} ! \def\subsecentry ##1##2##3##4##5{% ! \pdfoutline goto name{\pdfmkpgn{##5}}count-\expnumber{subsec##2.##3.##4}{##1}} ! \def\unnumbsubsecentry ##1##2{% ! \pdfoutline goto name{\pdfmkpgn{##2}}{##1}} ! \def\subsubsecentry ##1##2##3##4##5##6{% ! \pdfoutline goto name{\pdfmkpgn{##6}}{##1}} ! \def\unnumbsubsubsecentry ##1##2{% ! \pdfoutline goto name{\pdfmkpgn{##2}}{##1}} ! \input \jobname.toc ! \egroup\fi ! }} ! \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\addtokens#1#2{\edef\addtoks{\noexpand#1={\the#1#2}}\addtoks} ! \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\@{@}% ! \let\value=\expandablevalue ! \leavevmode\Red ! \startlink attr{/Border [0 0 0]}% ! user{/Subtype /Link /A << /S /URI /URI (#1) >>}% ! % #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| ! \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{\mkpgn{#1}} ! \linkcolor #1\endlink} ! \def\mkpgn#1{#1@} ! \def\done{\edef\st{\global\noexpand\toksA={\the\toksB}}\st} ! \fi % \ifx\pdfoutput \message{fonts,} % Font-change commands. *************** *** 1190,1212 **** \setfont\deftt\ttshape{10}{\magstep1} \def\df{\let\tentt=\deftt \let\tenbf = \defbf \bf} ! % Fonts for indices and small examples (9pt). ! % We actually use the slanted font rather than the italic, ! % because texinfo normally uses the slanted fonts for that. ! % Do not make many font distinctions in general in the index, since they ! % aren't very useful. ! \setfont\ninett\ttshape{9}{1000} ! \setfont\ninettsl\ttslshape{10}{900} ! \setfont\indrm\rmshape{9}{1000} ! \setfont\indit\itshape{9}{1000} ! \setfont\indsl\slshape{9}{1000} ! \let\indtt=\ninett ! \let\indttsl=\ninettsl ! \let\indsf=\indrm ! \let\indbf=\indrm ! \setfont\indsc\scshape{10}{900} ! \font\indi=cmmi9 ! \font\indsy=cmsy9 % Fonts for title page: \setfont\titlerm\rmbshape{12}{\magstep3} --- 1144,1160 ---- \setfont\deftt\ttshape{10}{\magstep1} \def\df{\let\tentt=\deftt \let\tenbf = \defbf \bf} ! % Fonts for indices, footnotes, small examples (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 title page: \setfont\titlerm\rmbshape{12}{\magstep3} *************** *** 1320,1330 **** \let\tensf=\ssecsf \let\teni=\sseci \let\tensy=\ssecsy \let\tenttsl=\ssecttsl \resetmathfonts \setleading{15pt}} \let\subsubsecfonts = \subsecfonts % Maybe make sssec fonts scaled magstephalf? ! \def\indexfonts{% ! \let\tenrm=\indrm \let\tenit=\indit \let\tensl=\indsl ! \let\tenbf=\indbf \let\tentt=\indtt \let\smallcaps=\indsc ! \let\tensf=\indsf \let\teni=\indi \let\tensy=\indsy \let\tenttsl=\indttsl ! \resetmathfonts \setleading{12pt}} % Set up the default fonts, so we can use them for creating boxes. % --- 1268,1279 ---- \let\tensf=\ssecsf \let\teni=\sseci \let\tensy=\ssecsy \let\tenttsl=\ssecttsl \resetmathfonts \setleading{15pt}} \let\subsubsecfonts = \subsecfonts % Maybe make sssec fonts scaled magstephalf? ! \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 ! \resetmathfonts \setleading{11pt}} % Set up the default fonts, so we can use them for creating boxes. % *************** *** 1373,1381 **** } \let\ttfont=\t \def\samp#1{`\tclose{#1}'\null} ! \setfont\smallrm\rmshape{8}{1000} ! \font\smallsy=cmsy9 ! \def\key#1{{\smallrm\textfont2=\smallsy \leavevmode\hbox{% \raise0.4pt\hbox{\angleleft}\kern-.08em\vtop{% \vbox{\hrule\kern-0.4pt \hbox{\raise0.4pt\hbox{\vphantom{\angleleft}}#1}}% --- 1322,1330 ---- } \let\ttfont=\t \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}}% *************** *** 1479,1502 **** \let\env=\code \let\command=\code ! % @uref (abbreviation for `urlref') takes an optional second argument ! % specifying the text to display. First (mandatory) arg is the url. ! % Perhaps eventually put in a hypertex \special here. ! % ! \def\uref#1{\urefxxx #1,,\finish} ! \def\urefxxx#1,#2,#3\finish{% ! \setbox0 = \hbox{\ignorespaces #2}% \ifdim\wd0 > 0pt ! \unhbox0\ (\code{#1})% \else ! \code{#1}% \fi ! } ! % rms does not like the angle brackets --karl, 17may97. ! % So now @email is just like @uref. %\def\email#1{\angleleft{\tt #1}\angleright} ! \let\email=\uref % Check if we are currently using a typewriter font. Since all the % Computer Modern typewriter fonts have zero interword stretch (and --- 1428,1477 ---- \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} ! % 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 *************** *** 1540,1546 **** % Do an implicit @contents or @shortcontents after @end titlepage if the % user says @setcontentsaftertitlepage or @setshortcontentsaftertitlepage. ! % \newif\ifsetcontentsaftertitlepage \let\setcontentsaftertitlepage = \setcontentsaftertitlepagetrue \newif\ifsetshortcontentsaftertitlepage --- 1515,1521 ---- % Do an implicit @contents or @shortcontents after @end titlepage if the % user says @setcontentsaftertitlepage or @setshortcontentsaftertitlepage. ! % \newif\ifsetcontentsaftertitlepage \let\setcontentsaftertitlepage = \setcontentsaftertitlepagetrue \newif\ifsetshortcontentsaftertitlepage *************** *** 1615,1620 **** --- 1590,1597 ---- \global\let\shortcontents = \relax \fi % + \ifpdf \pdfmakepagedesttrue \fi + % \HEADINGSon } *************** *** 1748,1770 **** } % Subroutines used in generating headings ! % Produces Day Month Year style of output. ! \def\today{\number\day\space ! \ifcase\month\or ! January\or February\or March\or April\or May\or June\or ! July\or August\or September\or October\or November\or December\fi ! \space\number\year} ! ! % Use this if you want the Month Day, Year style of output. ! %\def\today{\ifcase\month\or ! %January\or February\or March\or April\or May\or June\or ! %July\or August\or September\or October\or November\or December\fi ! %\space\number\day, \number\year} ! ! % @settitle line... specifies the title of the document, for headings ! % It generates no output of its own ! \def\thistitle{No Title} \def\settitle{\parsearg\settitlezzz} \def\settitlezzz #1{\gdef\thistitle{#1}} --- 1725,1747 ---- } % 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\settitlezzz} \def\settitlezzz #1{\gdef\thistitle{#1}} *************** *** 1841,1847 **** \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 --- 1818,1824 ---- \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 *************** *** 2138,2144 **** \multitablelinespace=0pt % Macros used to set up halign preamble: ! % \let\endsetuptable\relax \def\xendsetuptable{\endsetuptable} \let\columnfractions\relax --- 2115,2121 ---- \multitablelinespace=0pt % Macros used to set up halign preamble: ! % \let\endsetuptable\relax \def\xendsetuptable{\endsetuptable} \let\columnfractions\relax *************** *** 2184,2193 **** \go } ! % multitable syntax ! \def\tab{&\hskip1sp\relax} % 2/2/96 ! % tiny skip here makes sure this column space is ! % maintained, even if it is never used. % @multitable ... @end multitable definitions: % --- 2161,2171 ---- \go } ! % This used to have \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{&} % @multitable ... @end multitable definitions: % *************** *** 2229,2243 **** % 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 --- 2207,2221 ---- % 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 *************** *** 2268,2282 **** % If so, do nothing. If not, give it an appropriate dimension based on % current baselineskip. \ifdim\multitablelinespace=0pt %% strut to put in table in case some entry doesn't have descenders, %% to keep lines equally spaced \let\multistrut = \strut - %% 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. \else \gdef\multistrut{\vrule height\multitablelinespace depth\dp0 width0pt\relax} \fi \ifdim\multitableparskip>\multitablelinespace \global\multitableparskip=\multitablelinespace \global\advance\multitableparskip-7pt %% to keep parskip somewhat smaller --- 2246,2263 ---- % If so, do nothing. If not, give it an appropriate dimension based on % current baselineskip. \ifdim\multitablelinespace=0pt + \setbox0=\vbox{X}\global\multitablelinespace=\the\baselineskip + \global\advance\multitablelinespace by-\ht0 %% strut to put in table in case some entry doesn't have descenders, %% to keep lines equally spaced \let\multistrut = \strut \else + %% FIXME: what is \box0 supposed to be? \gdef\multistrut{\vrule height\multitablelinespace depth\dp0 width0pt\relax} \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 *************** *** 2289,2294 **** --- 2270,2625 ---- \fi} + \message{conditionals,} + % Prevent errors for section commands. + % Used in @ignore and in failing conditionals. + \def\ignoresections{% + \let\chapter=\relax + \let\unnumbered=\relax + \let\top=\relax + \let\unnumberedsec=\relax + \let\unnumberedsection=\relax + \let\unnumberedsubsec=\relax + \let\unnumberedsubsection=\relax + \let\unnumberedsubsubsec=\relax + \let\unnumberedsubsubsection=\relax + \let\section=\relax + \let\subsec=\relax + \let\subsubsec=\relax + \let\subsection=\relax + \let\subsubsection=\relax + \let\appendix=\relax + \let\appendixsec=\relax + \let\appendixsection=\relax + \let\appendixsubsec=\relax + \let\appendixsubsection=\relax + \let\appendixsubsubsec=\relax + \let\appendixsubsubsection=\relax + \let\contents=\relax + \let\smallbook=\relax + \let\titlepage=\relax + } + + % Used in nested conditionals, where we have to parse the Texinfo source + % and so want to turn off most commands, in case they are used + % incorrectly. + % + \def\ignoremorecommands{% + \let\defcodeindex = \relax + \let\defcv = \relax + \let\deffn = \relax + \let\deffnx = \relax + \let\defindex = \relax + \let\defivar = \relax + \let\defmac = \relax + \let\defmethod = \relax + \let\defop = \relax + \let\defopt = \relax + \let\defspec = \relax + \let\deftp = \relax + \let\deftypefn = \relax + \let\deftypefun = \relax + \let\deftypeivar = \relax + \let\deftypeop = \relax + \let\deftypevar = \relax + \let\deftypevr = \relax + \let\defun = \relax + \let\defvar = \relax + \let\defvr = \relax + \let\ref = \relax + \let\xref = \relax + \let\printindex = \relax + \let\pxref = \relax + \let\settitle = \relax + \let\setchapternewpage = \relax + \let\setchapterstyle = \relax + \let\everyheading = \relax + \let\evenheading = \relax + \let\oddheading = \relax + \let\everyfooting = \relax + \let\evenfooting = \relax + \let\oddfooting = \relax + \let\headings = \relax + \let\include = \relax + \let\lowersections = \relax + \let\down = \relax + \let\raisesections = \relax + \let\up = \relax + \let\set = \relax + \let\clear = \relax + \let\item = \relax + } + + % Ignore @ignore ... @end ignore. + % + \def\ignore{\doignore{ignore}} + + % Ignore @ifinfo, @ifhtml, @ifnottex, @html, @menu, and @direntry text. + % + \def\ifinfo{\doignore{ifinfo}} + \def\ifhtml{\doignore{ifhtml}} + \def\ifnottex{\doignore{ifnottex}} + \def\html{\doignore{html}} + \def\menu{\doignore{menu}} + \def\direntry{\doignore{direntry}} + + % @dircategory CATEGORY -- specify a category of the dir file + % which this file should belong to. Ignore this in TeX. + \let\dircategory = \comment + + % Ignore text until a line `@end #1'. + % + \def\doignore#1{\begingroup + % Don't complain about control sequences we have declared \outer. + \ignoresections + % + % Define a command to swallow text until we reach `@end #1'. + % This @ is a catcode 12 token (that is the normal catcode of @ in + % this texinfo.tex file). We change the catcode of @ below to match. + \long\def\doignoretext##1@end #1{\enddoignore}% + % + % Make sure that spaces turn into tokens that match what \doignoretext wants. + \catcode32 = 10 + % + % Ignore braces, too, so mismatched braces don't cause trouble. + \catcode`\{ = 9 + \catcode`\} = 9 + % + % We must not have @c interpreted as a control sequence. + \catcode`\@ = 12 + % + % Make the letter c a comment character so that the rest of the line + % will be ignored. This way, the document can have (for example) + % @c @end ifinfo + % and the @end ifinfo will be properly ignored. + % (We've just changed @ to catcode 12.) + \catcode`\c = 14 + % + % And now expand that command. + \doignoretext + } + + % What we do to finish off ignored text. + % + \def\enddoignore{\endgroup\ignorespaces}% + + \newif\ifwarnedobs\warnedobsfalse + \def\obstexwarn{% + \ifwarnedobs\relax\else + % We need to warn folks that they may have trouble with TeX 3.0. + % This uses \immediate\write16 rather than \message to get newlines. + \immediate\write16{} + \immediate\write16{WARNING: for users of Unix TeX 3.0!} + \immediate\write16{This manual trips a bug in TeX version 3.0 (tex hangs).} + \immediate\write16{If you are running another version of TeX, relax.} + \immediate\write16{If you are running Unix TeX 3.0, kill this TeX process.} + \immediate\write16{ Then upgrade your TeX installation if you can.} + \immediate\write16{ (See ftp://ftp.gnu.org/pub/gnu/TeX.README.)} + \immediate\write16{If you are stuck with version 3.0, run the} + \immediate\write16{ script ``tex3patch'' from the Texinfo distribution} + \immediate\write16{ to use a workaround.} + \immediate\write16{} + \global\warnedobstrue + \fi + } + + % **In TeX 3.0, setting text in \nullfont hangs tex. For a + % workaround (which requires the file ``dummy.tfm'' to be installed), + % uncomment the following line: + %%%%%\font\nullfont=dummy\let\obstexwarn=\relax + + % Ignore text, except that we keep track of conditional commands for + % purposes of nesting, up to an `@end #1' command. + % + \def\nestedignore#1{% + \obstexwarn + % We must actually expand the ignored text to look for the @end + % command, so that nested ignore constructs work. Thus, we put the + % text into a \vbox and then do nothing with the result. To minimize + % the change of memory overflow, we follow the approach outlined on + % page 401 of the TeXbook: make the current font be a dummy font. + % + \setbox0 = \vbox\bgroup + % Don't complain about control sequences we have declared \outer. + \ignoresections + % + % Define `@end #1' to end the box, which will in turn undefine the + % @end command again. + \expandafter\def\csname E#1\endcsname{\egroup\ignorespaces}% + % + % We are going to be parsing Texinfo commands. Most cause no + % trouble when they are used incorrectly, but some commands do + % complicated argument parsing or otherwise get confused, so we + % undefine them. + % + % We can't do anything about stray @-signs, unfortunately; + % they'll produce `undefined control sequence' errors. + \ignoremorecommands + % + % Set the current font to be \nullfont, a TeX primitive, and define + % all the font commands to also use \nullfont. We don't use + % dummy.tfm, as suggested in the TeXbook, because not all sites + % might have that installed. Therefore, math mode will still + % produce output, but that should be an extremely small amount of + % stuff compared to the main input. + % + \nullfont + \let\tenrm=\nullfont \let\tenit=\nullfont \let\tensl=\nullfont + \let\tenbf=\nullfont \let\tentt=\nullfont \let\smallcaps=\nullfont + \let\tensf=\nullfont + % Similarly for index fonts (mostly for their use in smallexample). + \let\smallrm=\nullfont \let\smallit=\nullfont \let\smallsl=\nullfont + \let\smallbf=\nullfont \let\smalltt=\nullfont \let\smallsc=\nullfont + \let\smallsf=\nullfont + % + % Don't complain when characters are missing from the fonts. + \tracinglostchars = 0 + % + % Don't bother to do space factor calculations. + \frenchspacing + % + % Don't report underfull hboxes. + \hbadness = 10000 + % + % Do minimal line-breaking. + \pretolerance = 10000 + % + % Do not execute instructions in @tex + \def\tex{\doignore{tex}}% + % Do not execute macro definitions. + % `c' is a comment character, so the word `macro' will get cut off. + \def\macro{\doignore{ma}}% + } + + % @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. Make sure the catcode of space is correct to avoid + % losing inside @example, for instance. + % + \def\set{\begingroup\catcode` =10 + \catcode`\-=12 \catcode`\_=12 % Allow - and _ in VAR. + \parsearg\setxxx} + \def\setxxx#1{\setyyy#1 \endsetyyy} + \def\setyyy#1 #2\endsetyyy{% + \def\temp{#2}% + \ifx\temp\empty \global\expandafter\let\csname SET#1\endcsname = \empty + \else \setzzz{#1}#2\endsetzzz % Remove the trailing space \setxxx inserted. + \fi + \endgroup + } + % Can't use \xdef to pre-expand #2 and save some time, since \temp or + % \next or other control sequences that we've defined might get us into + % an infinite loop. Consider `@set foo @cite{bar}'. + \def\setzzz#1#2 \endsetzzz{\expandafter\gdef\csname SET#1\endcsname{#2}} + + % @clear VAR clears (i.e., unsets) the variable VAR. + % + \def\clear{\parsearg\clearxxx} + \def\clearxxx#1{\global\expandafter\let\csname SET#1\endcsname=\relax} + + % @value{foo} gets the text saved in variable foo. + { + \catcode`\_ = \active + % + % We might end up with active _ or - characters in the argument if + % we're called from @code, as @code{@value{foo-bar_}}. So \let any + % such active characters to their normal equivalents. + \gdef\value{\begingroup + \catcode`\-=12 \catcode`\_=12 + \indexbreaks \let_\normalunderscore + \valuexxx} + } + \def\valuexxx#1{\expandablevalue{#1}\endgroup} + + % We have this subroutine so that we can handle at least some @value's + % properly in indexes (we \let\value to this in \indexdummies). Ones + % whose names contain - or _ still won't work, but we can't do anything + % about that. The command has to be fully expandable, 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'']}% + \else + \csname SET#1\endcsname + \fi + } + + % @ifset VAR ... @end ifset reads the `...' iff VAR has been defined + % with @set. + % + \def\ifset{\parsearg\ifsetxxx} + \def\ifsetxxx #1{% + \expandafter\ifx\csname SET#1\endcsname\relax + \expandafter\ifsetfail + \else + \expandafter\ifsetsucceed + \fi + } + \def\ifsetsucceed{\conditionalsucceed{ifset}} + \def\ifsetfail{\nestedignore{ifset}} + \defineunmatchedend{ifset} + + % @ifclear VAR ... @end ifclear reads the `...' iff VAR has never been + % defined with @set, or has been undefined with @clear. + % + \def\ifclear{\parsearg\ifclearxxx} + \def\ifclearxxx #1{% + \expandafter\ifx\csname SET#1\endcsname\relax + \expandafter\ifclearsucceed + \else + \expandafter\ifclearfail + \fi + } + \def\ifclearsucceed{\conditionalsucceed{ifclear}} + \def\ifclearfail{\nestedignore{ifclear}} + \defineunmatchedend{ifclear} + + % @iftex, @ifnothtml, @ifnotinfo always succeed; we read the text + % following, through the first @end iftex (etc.). Make `@end iftex' + % (etc.) valid only after an @iftex. + % + \def\iftex{\conditionalsucceed{iftex}} + \def\ifnothtml{\conditionalsucceed{ifnothtml}} + \def\ifnotinfo{\conditionalsucceed{ifnotinfo}} + \defineunmatchedend{iftex} + \defineunmatchedend{ifnothtml} + \defineunmatchedend{ifnotinfo} + + % We can't just want to start a group at @iftex (for example) and end it + % at @end iftex, since then @set commands inside the conditional have no + % effect (they'd get reverted at the end of the group). So we must + % define \Eiftex to redefine itself to be its previous value. (We can't + % just define it to fail again with an ``unmatched end'' error, since + % the @ifset might be nested.) + % + \def\conditionalsucceed#1{% + \edef\temp{% + % Remember the current value of \E#1. + \let\nece{prevE#1} = \nece{E#1}% + % + % At the `@end #1', redefine \E#1 to be its previous value. + \def\nece{E#1}{\let\nece{E#1} = \nece{prevE#1}}% + }% + \temp + } + + % We need to expand lots of \csname's, but we don't want to expand the + % control sequences after we've constructed them. + % + \def\nece#1{\expandafter\noexpand\csname#1\endcsname} + + % @defininfoenclose. + \let\definfoenclose=\comment + + \message{indexing,} % Index generation facilities *************** *** 2315,2356 **** } % @defindex foo == \newindex{foo} ! \def\defindex{\parsearg\newindex} % Define @defcodeindex, like @defindex except put all entries in @code. ! \def\newcodeindex#1{% \iflinks \expandafter\newwrite \csname#1indfile\endcsname \openout \csname#1indfile\endcsname \jobname.#1 \fi \expandafter\xdef\csname#1index\endcsname{% ! \noexpand\docodeindex{#1}} } - \def\defcodeindex{\parsearg\newcodeindex} % @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. ! % The \closeout helps reduce unnecessary open files; the limit on the ! % Acorn RISC OS is a mere 16 files. ! \def\synindex#1 #2 {% ! \expandafter\let\expandafter\synindexfoo\expandafter=\csname#2indfile\endcsname ! \expandafter\closeout\csname#1indfile\endcsname ! \expandafter\let\csname#1indfile\endcsname=\synindexfoo ! \expandafter\xdef\csname#1index\endcsname{% define \xxxindex ! \noexpand\doindex{#2}}% ! } ! % @syncodeindex foo bar similar, but put all entries made for index foo % inside @code. ! \def\syncodeindex#1 #2 {% ! \expandafter\let\expandafter\synindexfoo\expandafter=\csname#2indfile\endcsname ! \expandafter\closeout\csname#1indfile\endcsname ! \expandafter\let\csname#1indfile\endcsname=\synindexfoo ! \expandafter\xdef\csname#1index\endcsname{% define \xxxindex ! \noexpand\docodeindex{#2}}% } % Define \doindex, the driver for all \fooindex macros. --- 2646,2693 ---- } % @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. *************** *** 2403,2409 **** \def\@{@}% will be @@ when we switch to @ as escape char. % 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 \def\_{{\realbackslash _}}% --- 2740,2746 ---- \def\@{@}% will be @@ when we switch to @ as escape char. % 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 \def\_{{\realbackslash _}}% *************** *** 2455,2460 **** --- 2792,2799 ---- \let\value = \expandablevalue % \unsepspaces + % Turn off macro expansion + \turnoffmacros } % If an index command is used in an @example environment, any spaces *************** *** 2514,2519 **** --- 2853,2859 ---- \let\url=\indexdummyfont \let\uref=\indexdummyfont \let\env=\indexdummyfont + \let\acronym=\indexdummyfont \let\command=\indexdummyfont \let\option=\indexdummyfont \let\file=\indexdummyfont *************** *** 2540,2553 **** \def\emptymacro{\empty} % Most index entries go through here, but \dosubind is the general case. ! % \def\doind#1#2{\dosubind{#1}{#2}\empty} % 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 defuns, which call us directly. ! % \def\dosubind#1#2#3{% % Put the index entry in the margin if desired. \ifx\SETmarginindex\relax\else --- 2880,2893 ---- \def\emptymacro{\empty} % Most index entries go through here, but \dosubind is the general case. ! % \def\doind#1#2{\dosubind{#1}{#2}\empty} % 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 defuns, which call us directly. ! % \def\dosubind#1#2#3{% % Put the index entry in the margin if desired. \ifx\SETmarginindex\relax\else *************** *** 2572,2595 **** \def\subentry{ #3}% \fi % ! % First process the index-string with all font commands turned off ! % to get the string to sort by. {\indexnofonts \xdef\indexsorttmp{#2\subentry}}% % ! % Now produce the complete index entry, with both the sort key and the ! % original text, including any font commands. \toks0 = {#2}% \edef\temp{% \write\csname#1indfile\endcsname{% \realbackslash entry{\indexsorttmp}{\folio}{\the\toks0}}% }% % - % If third (subentry) arg is present, add it to the index string. - \ifx\thirdarg\emptymacro \else - \toks0 = {#3}% - \edef\temp{\temp{\the\toks0}}% - \fi - % % 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 --- 2912,2940 ---- \def\subentry{ #3}% \fi % ! % First process the index entry with all font commands turned ! % off to get the string to sort by. {\indexnofonts \xdef\indexsorttmp{#2\subentry}}% % ! % Now the real index entry with the fonts. \toks0 = {#2}% + % + % If the third (subentry) arg is present, add it to the index + % line to write. + \ifx\thirdarg\emptymacro \else + \toks0 = \expandafter{\the\toks0{#3}}% + \fi + % + % 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\csname#1indfile\endcsname{% \realbackslash entry{\indexsorttmp}{\folio}{\the\toks0}}% }% % % 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 *************** *** 2601,2612 **** % 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. ! % \iflinks \ifvmode \skip0 = \lastskip --- 2946,2957 ---- % 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. ! % \iflinks \ifvmode \skip0 = \lastskip *************** *** 2615,2621 **** % \temp % do the write % ! % \ifvmode \ifdim\skip0 = 0pt \else \nobreak\vskip\skip0 \fi \fi \fi }% --- 2960,2966 ---- % \temp % do the write % ! % \ifvmode \ifdim\skip0 = 0pt \else \nobreak\vskip\skip0 \fi \fi \fi }% *************** *** 2663,2669 **** \def\doprintindex#1{\begingroup \dobreak \chapheadingskip{10000}% % ! \indexfonts \rm \tolerance = 9500 \indexbreaks % --- 3008,3014 ---- \def\doprintindex#1{\begingroup \dobreak \chapheadingskip{10000}% % ! \smallfonts \rm \tolerance = 9500 \indexbreaks % *************** *** 2679,2685 **** % 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. ! (Index is nonexistent) \else % % If the index file exists but is empty, then \openin leaves \ifeof --- 3024,3030 ---- % 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 *************** *** 2687,2693 **** % it can discover if there is anything in it. \read 1 to \temp \ifeof 1 ! (Index is empty) \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 --- 3032,3038 ---- % 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 *************** *** 2712,2718 **** % % Remove any glue we may have, we'll be inserting our own. \removelastskip ! % % We like breaks before the index initials, so insert a bonus. \penalty -300 % --- 3057,3063 ---- % % Remove any glue we may have, we'll be inserting our own. \removelastskip ! % % We like breaks before the index initials, so insert a bonus. \penalty -300 % *************** *** 2720,2726 **** % 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}% --- 3065,3071 ---- % 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}% *************** *** 2790,2796 **** % The `\ ' here is removed by the implicit \unskip that TeX does as % part of (the primitive) \par. Without it, a spurious underfull % \hbox ensues. ! \ #2% The page number ends the paragraph. \fi% \par \endgroup} --- 3135,3145 ---- % 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#2.\ \the\toksA % The page number ends the paragraph. ! \else ! \ #2% The page number ends the paragraph. ! \fi \fi% \par \endgroup} *************** *** 2802,2812 **** \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 #2\par }} % Define two-column mode, which we use to typeset indexes. --- 3151,3168 ---- \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. *************** *** 2819,2841 **** \def\begindoublecolumns{\begingroup % ended by \enddoublecolumns % Grab any single-column material above us. ! \output = {\global\setbox\partialpage = \vbox{% ! % % 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 must prevent the second \partialpage from ! % simply overwriting the first, causing us to lose the page. ! % This will preserve it until a real output routine can ship it ! % out. Generally, \partialpage will be empty when this runs and ! % this will be a no-op. ! \unvbox\partialpage % ! % Unvbox the main output page. ! \unvbox255 ! \kern-\topskip \kern\baselineskip ! }}% \eject % run that output routine to set \partialpage % % Use the double-column output routine for subsequent pages. --- 3175,3199 ---- \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. *************** *** 2864,2876 **** % % Double the \vsize as well. (We don't need a separate register here, % since nobody clobbers \vsize.) - \advance\vsize by -\ht\partialpage \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 --- 3222,3233 ---- % % 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 *************** *** 2878,2883 **** --- 3235,3241 ---- % 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@ *************** *** 2885,2900 **** \unvbox255 \penalty\outputpenalty } \def\pagesofar{% - % Re-output the contents of the output page -- any previous material, - % followed by the two boxes we just split, in box0 and box2. - \advance\vsize by \ht\partialpage \unvbox\partialpage % \hsize = \doublecolumnhsize \wd0=\hsize \wd2=\hsize \hbox to\pagewidth{\box0\hfil\box2}% } \def\enddoublecolumns{% \output = {% % Split the last of the double-column material. Leave it on the --- 3243,3260 ---- \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 *************** *** 2919,2926 **** % \endgroup where \vsize got restored). \pagegoal = \vsize } \def\balancecolumns{% - % Called at the end of the double column material. \setbox0 = \vbox{\unvbox255}% like \box255 but more efficient, see p.120. \dimen@ = \ht0 \advance\dimen@ by \topskip --- 3279,3287 ---- % \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 *************** *** 2948,2954 **** \message{sectioning,} ! % Define chapters, sections, etc. \newcount\chapno \newcount\secno \secno=0 --- 3309,3315 ---- \message{sectioning,} ! % Chapters, sections, etc. \newcount\chapno \newcount\secno \secno=0 *************** *** 2957,2963 **** % This counter is funny since it counts through charcodes of letters A, B, ... \newcount\appendixno \appendixno = `\@ ! \def\appendixletter{\char\the\appendixno} % Each @chapter defines this as the name of the chapter. % page headings and footings can use it. @section does likewise. --- 3318,3360 ---- % 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 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. *************** *** 3430,3444 **** \message{toc,} \newwrite\tocfile % Write an entry to the toc file, opening it if necessary. % Called from @chapter, etc. We supply {\folio} at the end of the % argument, which will end up as the last argument to the \...entry macro. ! % % We open the .toc file here instead of at @setfilename or any other % given time so that @contents can be put in the document anywhere. ! % \newif\iftocfileopened \def\writetocentry#1{% \iftocfileopened\else --- 3827,3842 ---- \message{toc,} + % Table of contents. \newwrite\tocfile % Write an entry to the toc file, opening it if necessary. % Called from @chapter, etc. We supply {\folio} at the end of the % argument, which will end up as the last argument to the \...entry macro. ! % % We open the .toc file here instead of at @setfilename or any other % given time so that @contents can be put in the document anywhere. ! % \newif\iftocfileopened \def\writetocentry#1{% \iftocfileopened\else *************** *** 3454,3460 **** % Finish up the main text and 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 --- 3852,3858 ---- % Finish up the main text and 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 *************** *** 3482,3494 **** % Normal (long) toc. \def\contents{% ! \startcontents{\putwordTableofContents}% \openin 1 \jobname.toc \ifeof 1 \else \closein 1 \input \jobname.toc \fi \vfill \eject \endgroup \lastnegativepageno = \pageno \pageno = \savepageno --- 3880,3894 ---- % Normal (long) toc. \def\contents{% ! \startcontents{\putwordTOC}% \openin 1 \jobname.toc \ifeof 1 \else \closein 1 \input \jobname.toc \fi \vfill \eject + \contentsalignmacro % in case @setchapternewpage odd is in effect + \pdfmakeoutlines \endgroup \lastnegativepageno = \pageno \pageno = \savepageno *************** *** 3496,3502 **** % And just the chapters. \def\summarycontents{% ! \startcontents{\putwordShortContents}% % \let\chapentry = \shortchapentry \let\unnumbchapentry = \shortunnumberedentry --- 3896,3902 ---- % And just the chapters. \def\summarycontents{% ! \startcontents{\putwordShortTOC}% % \let\chapentry = \shortchapentry \let\unnumbchapentry = \shortunnumberedentry *************** *** 3518,3529 **** --- 3918,3934 ---- \input \jobname.toc \fi \vfill \eject + \contentsalignmacro % in case @setchapternewpage odd is in effect \endgroup \lastnegativepageno = \pageno \pageno = \savepageno } \let\shortcontents = \summarycontents + \ifpdf + \pdfcatalog{/PageMode /UseOutlines}% + \fi + % 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. *************** *** 3534,3540 **** % See comments in \dochapentry re vbox and related settings \def\shortchapentry#1#2#3{% ! \tocentry{\shortchaplabel{#2}\labelspace #1}{\doshortpageno{#3}}% } % Typeset the label for a chapter or appendix for the short contents. --- 3939,3945 ---- % See comments in \dochapentry re vbox and related settings \def\shortchapentry#1#2#3{% ! \tocentry{\shortchaplabel{#2}\labelspace #1}{\doshortpageno\bgroup#3\egroup}% } % Typeset the label for a chapter or appendix for the short contents. *************** *** 3542,3551 **** % We could simplify the code here by writing out an \appendixentry % command in the toc file for appendices, instead of using \chapentry % for both, but it doesn't seem worth it. ! \setbox0 = \hbox{\shortcontrm \putwordAppendix } ! \newdimen\shortappendixwidth \shortappendixwidth = \wd0 ! \def\shortchaplabel#1{% % We typeset #1 in a box of constant width, regardless of the text of % #1, so the chapter titles will come out aligned. \setbox0 = \hbox{#1}% --- 3947,3960 ---- % We could simplify the code here by writing out an \appendixentry % command in the toc file for appendices, instead of using \chapentry % for both, but it doesn't seem worth it. ! % ! \newdimen\shortappendixwidth ! % \def\shortchaplabel#1{% + % Compute width of word "Appendix", may change with language. + \setbox0 = \hbox{\shortcontrm \putwordAppendix}% + \shortappendixwidth = \wd0 + % % We typeset #1 in a box of constant width, regardless of the text of % #1, so the chapter titles will come out aligned. \setbox0 = \hbox{#1}% *************** *** 3560,3566 **** } \def\unnumbchapentry#1#2{\dochapentry{#1}{#2}} ! \def\shortunnumberedentry#1#2{\tocentry{#1}{\doshortpageno{#2}}} % Sections. \def\secentry#1#2#3#4{\dosecentry{#2.#3\labelspace#1}{#4}} --- 3969,3975 ---- } \def\unnumbchapentry#1#2{\dochapentry{#1}{#2}} ! \def\shortunnumberedentry#1#2{\tocentry{#1}{\doshortpageno\bgroup#2\egroup}} % Sections. \def\secentry#1#2#3#4{\dosecentry{#2.#3\labelspace#1}{#4}} *************** *** 3587,3610 **** \penalty-300 \vskip1\baselineskip plus.33\baselineskip minus.25\baselineskip \begingroup \chapentryfonts ! \tocentry{#1}{\dopageno{#2}}% \endgroup \nobreak\vskip .25\baselineskip plus.1\baselineskip } \def\dosecentry#1#2{\begingroup \secentryfonts \leftskip=\tocindent ! \tocentry{#1}{\dopageno{#2}}% \endgroup} \def\dosubsecentry#1#2{\begingroup \subsecentryfonts \leftskip=2\tocindent ! \tocentry{#1}{\dopageno{#2}}% \endgroup} \def\dosubsubsecentry#1#2{\begingroup \subsubsecentryfonts \leftskip=3\tocindent ! \tocentry{#1}{\dopageno{#2}}% \endgroup} % Final typesetting of a toc entry; we use the same \entry macro as for --- 3996,4019 ---- \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} % Final typesetting of a toc entry; we use the same \entry macro as for *************** *** 3632,3637 **** --- 4041,4047 ---- \message{environments,} + % @foo ... @end foo. % 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. *************** *** 3747,3755 **** % is reset to zero; thus the \afterenvbreak inserts no space -- but the % start of the next paragraph will insert \parskip % ! \def\aboveenvbreak{{\advance\envskipamount by \parskip ! \endgraf \ifdim\lastskip<\envskipamount ! \removelastskip \penalty-50 \vskip\envskipamount \fi}} \let\afterenvbreak = \aboveenvbreak --- 4157,4173 ---- % is reset to zero; thus the \afterenvbreak inserts no space -- but the % start of the next paragraph will insert \parskip % ! \def\aboveenvbreak{{% ! \ifnum\lastpenalty < 10000 ! \advance\envskipamount by \parskip ! \endgraf ! \ifdim\lastskip<\envskipamount ! \removelastskip ! \penalty-50 ! \vskip\envskipamount ! \fi ! \fi ! }} \let\afterenvbreak = \aboveenvbreak *************** *** 3842,3848 **** % Define the \E... control sequence only if we are inside the particular % environment, so the error checking in \end will work. ! % % To end an @example-like environment, we first end the paragraph (via % \afterenvbreak's vertical glue), and then the group. That way we keep % the zero \parskip that the environments set -- \parskip glue will be --- 4260,4266 ---- % Define the \E... control sequence only if we are inside the particular % environment, so the error checking in \end will work. ! % % To end an @example-like environment, we first end the paragraph (via % \afterenvbreak's vertical glue), and then the group. That way we keep % the zero \parskip that the environments set -- \parskip glue will be *************** *** 3867,3873 **** % redefines). We must call \example (or whatever) last in the % definition, since it reads the return following the @example (or % whatever) command. ! % % This actually allows (for example) @end display inside an % @smalldisplay. Too bad, but makeinfo will catch the error anyway. % --- 4285,4291 ---- % redefines). We must call \example (or whatever) last in the % definition, since it reads the return following the @example (or % whatever) command. ! % % This actually allows (for example) @end display inside an % @smalldisplay. Too bad, but makeinfo will catch the error anyway. % *************** *** 3881,3887 **** \def\smalllispx{\begingroup \def\Esmalllisp{\nonfillfinish\endgroup}% \def\Esmallexample{\nonfillfinish\endgroup}% ! \indexfonts \lisp } --- 4299,4305 ---- \def\smalllispx{\begingroup \def\Esmalllisp{\nonfillfinish\endgroup}% \def\Esmallexample{\nonfillfinish\endgroup}% ! \smallfonts \lisp } *************** *** 3897,3903 **** % \def\smalldisplayx{\begingroup \def\Esmalldisplay{\nonfillfinish\endgroup}% ! \indexfonts \rm \display } --- 4315,4321 ---- % \def\smalldisplayx{\begingroup \def\Esmalldisplay{\nonfillfinish\endgroup}% ! \smallfonts \rm \display } *************** *** 3914,3920 **** % \def\smallformatx{\begingroup \def\Esmallformat{\nonfillfinish\endgroup}% ! \indexfonts \rm \format } --- 4332,4338 ---- % \def\smallformatx{\begingroup \def\Esmallformat{\nonfillfinish\endgroup}% ! \smallfonts \rm \format } *************** *** 3923,3929 **** \def\flushleft{\begingroup \def\Eflushleft{\nonfillfinish\endgroup}\format} % @flushright. ! % \def\flushright{\begingroup \let\nonarrowing = t \nonfillstart --- 4341,4347 ---- \def\flushleft{\begingroup \def\Eflushleft{\nonfillfinish\endgroup}\format} % @flushright. ! % \def\flushright{\begingroup \let\nonarrowing = t \nonfillstart *************** *** 3932,3937 **** --- 4350,4356 ---- \gobble } + % @quotation does normal linebreaking (hence we can't use \nonfillstart) % and narrows the margins. % *************** *** 3954,3962 **** } \message{defuns,} ! % Define formatter for defuns ! % First, allow user to change definition object font (\df) internally \def\setdeffont #1 {\csname DEF#1\endcsname} \newskip\defbodyindent \defbodyindent=.4in --- 4373,4534 ---- } + % LaTeX-like @verbatim...@end verbatim and @verb{...} + % If we want to allow any 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 '@' too + \def\dospecials{% + \do\ \do\\\do\@\do\{\do\}\do\$\do\&% + \do\#\do\^\do\^^K\do\_\do\^^A\do\%\do\~} + % + % [Knuth] p. 380 + \def\uncatcodespecials{% + \def\do##1{\catcode`##1=12}\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{% + % 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'{'#1'}'{#1} + % + % [Knuth] p. 382; only eat outer {} + \begingroup + \catcode`[=1\catcode`]=2\catcode`\{=12\catcode`\}=12 + \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] + %% Include LaTeX hack for completeness -- never know + %% \begingroup + %% \catcode`|=0 \catcode`[=1 + %% \catcode`]=2\catcode`\{=12\catcode`\}=12\catcode`\ =\active + %% \catcode`\\=12|gdef|doverbatim#1@end verbatim[ + %% #1|endgroup|def|Everbatim[]|end[verbatim]] + %% |endgroup + \begingroup + \catcode`\ =\active + \gdef\doverbatim#1@end verbatim{#1\end{verbatim}} + \endgroup + % + \def\verbatim{% + \def\Everbatim{\nonfillfinish\endgroup}% + \begingroup + \nonfillstart + \advance\leftskip by -\defbodyindent + \begingroup\setupverbatim\doverbatim + } + + % @verbatiminclude FILE - insert text of file in verbatim environment. + % + % Allow normal characters that we make active in the argument (a file name). + \def\verbatiminclude{% + \begingroup + \catcode`\\=12 + \catcode`~=12 + \catcode`^=12 + \catcode`_=12 + \catcode`|=12 + \catcode`<=12 + \catcode`>=12 + \catcode`+=12 + \parsearg\doverbatiminclude + } + \def\setupverbatiminclude{% + \begingroup + \nonfillstart + \advance\leftskip by -\defbodyindent + \begingroup\setupverbatim + } + % + \def\doverbatiminclude#1{% + % Restore active chars for included file. + \endgroup + \begingroup + \def\thisfile{#1}% + \expandafter\expandafter\setupverbatiminclude\input\thisfile + \endgroup\nonfillfinish\endgroup + } + + \message{defuns,} ! % @defun etc. ! ! % Allow user to change definition object font (\df) internally \def\setdeffont #1 {\csname DEF#1\endcsname} \newskip\defbodyindent \defbodyindent=.4in *************** *** 4010,4019 **** %% contained text. This is especially needed for [ and ] \def\opnr{{\sf\char`\(}\global\advance\parencount by 1 } \def\clnr{{\sf\char`\)}\global\advance\parencount by -1 } ! \def\ampnr{\&} \def\lbrb{{\bf\char`\[}} \def\rbrb{{\bf\char`\]}} % First, defname, which formats the header line itself. % #1 should be the function name. % #2 should be the type of definition, such as "Function". --- 4582,4597 ---- %% contained text. This is especially needed for [ and ] \def\opnr{{\sf\char`\(}\global\advance\parencount by 1 } \def\clnr{{\sf\char`\)}\global\advance\parencount by -1 } ! \let\ampnr = \& \def\lbrb{{\bf\char`\[}} \def\rbrb{{\bf\char`\]}} + % Active &'s sneak into the index arguments, so make sure it's defined. + { + \catcode`& = 13 + \global\let& = \ampnr + } + % First, defname, which formats the header line itself. % #1 should be the function name. % #2 should be the type of definition, such as "Function". *************** *** 4065,4071 **** % #2 is the \...x control sequence for consecutive fns (which we define). % #3 is the control sequence to call to resume processing. % #4, delimited by the space, is the class name. ! % \def\defmethparsebody#1#2#3#4 {\begingroup\inENV % \medbreak % % Define the end token that this defining construct specifies --- 4643,4649 ---- % #2 is the \...x control sequence for consecutive fns (which we define). % #3 is the control sequence to call to resume processing. % #4, delimited by the space, is the class name. ! % \def\defmethparsebody#1#2#3#4 {\begingroup\inENV % \medbreak % % Define the end token that this defining construct specifies *************** *** 4077,4099 **** \exdentamount=\defbodyindent \begingroup\obeylines\activeparens\spacesplit{#3{#4}}} ! % @deftypemethod has an extra argument that nothing else does. Sigh. % #1 is the \E... control sequence to end the definition (which we define). % #2 is the \...x control sequence for consecutive fns (which we define). % #3 is the control sequence to call to resume processing. ! % #4, delimited by the space, is the class name. % #5 is the method's return type. % ! \def\deftypemethparsebody#1#2#3#4 #5 {\begingroup\inENV % ! \medbreak % ! % Define the end token that this defining construct specifies ! % so that it will exit this group. ! \def#1{\endgraf\endgroup\medbreak}% ! \def#2##1 ##2 {\begingroup\obeylines\activeparens\spacesplit{#3{##1}{##2}}}% ! \parindent=0in ! \advance\leftskip by \defbodyindent ! \exdentamount=\defbodyindent ! \begingroup\obeylines\activeparens\spacesplit{#3{#4}{#5}}} \def\defopparsebody #1#2#3#4#5 {\begingroup\inENV % \medbreak % --- 4655,4693 ---- \exdentamount=\defbodyindent \begingroup\obeylines\activeparens\spacesplit{#3{#4}}} ! % Used for @deftypemethod and @deftypeivar. % #1 is the \E... control sequence to end the definition (which we define). % #2 is the \...x control sequence for consecutive fns (which we define). % #3 is the control sequence to call to resume processing. ! % #4, delimited by a space, is the class name. % #5 is the method's return type. + % + \def\deftypemethparsebody#1#2#3#4 #5 {\begingroup\inENV + \medbreak + \def#1{\endgraf\endgroup\medbreak}% + \def#2##1 ##2 {\begingroup\obeylines\activeparens\spacesplit{#3{##1}{##2}}}% + \parindent=0in + \advance\leftskip by \defbodyindent + \exdentamount=\defbodyindent + \begingroup\obeylines\activeparens\spacesplit{#3{#4}{#5}}} + + % Used for @deftypeop. The change from \deftypemethparsebody is an + % extra argument at the beginning which is the `category', instead of it + % being the hardwired string `Method' or `Instance Variable'. We have + % to account for this both in the \...x definition and in parsing the + % input at hand. Thus also need a control sequence (passed as #5) for + % the \E... definition to assign the category name to. % ! \def\deftypeopparsebody#1#2#3#4#5 #6 {\begingroup\inENV ! \medbreak ! \def#1{\endgraf\endgroup\medbreak}% ! \def#2##1 ##2 ##3 {% ! \def#4{##1}% ! \begingroup\obeylines\activeparens\spacesplit{#3{##2}{##3}}}% ! \parindent=0in ! \advance\leftskip by \defbodyindent ! \exdentamount=\defbodyindent ! \begingroup\obeylines\activeparens\spacesplit{#3{#5}{#6}}} \def\defopparsebody #1#2#3#4#5 {\begingroup\inENV % \medbreak % *************** *** 4204,4215 **** % First, define the processing that is wanted for arguments of \defun % Use this to expand the args and terminate the paragraph they make up ! \def\defunargs #1{\functionparens \sl % Expand, preventing hyphenation at `-' chars. % Note that groups don't affect changes in \hyphenchar. ! \hyphenchar\tensl=0 #1% ! \hyphenchar\tensl=45 \ifnum\parencount=0 \else \errmessage{Unbalanced parentheses in @def}\fi% \interlinepenalty=10000 \advance\rightskip by 0pt plus 1fil --- 4798,4810 ---- % First, define the processing that is wanted for arguments of \defun % Use this to expand the args and terminate the paragraph they make up ! \def\defunargs#1{\functionparens \sl % Expand, preventing hyphenation at `-' chars. % Note that groups don't affect changes in \hyphenchar. ! % Set the font temporarily and use \font in case \setfont made \tensl a macro. ! {\tensl\hyphenchar\font=0}% #1% ! {\tensl\hyphenchar\font=45}% \ifnum\parencount=0 \else \errmessage{Unbalanced parentheses in @def}\fi% \interlinepenalty=10000 \advance\rightskip by 0pt plus 1fil *************** *** 4243,4249 **** \def\defun{\defparsebody\Edefun\defunx\defunheader} \def\defunheader #1#2{\doind {fn}{\code{#1}}% Make entry in function index ! \begingroup\defname {#1}{Function}% \defunargs {#2}\endgroup % \catcode 61=\other % Turn off change made in \defparsebody } --- 4838,4844 ---- \def\defun{\defparsebody\Edefun\defunx\defunheader} \def\defunheader #1#2{\doind {fn}{\code{#1}}% Make entry in function index ! \begingroup\defname {#1}{\putwordDeffunc}% \defunargs {#2}\endgroup % \catcode 61=\other % Turn off change made in \defparsebody } *************** *** 4257,4263 **** % #1 is the data type, #2 the name, #3 the args. \def\deftypefunheaderx #1#2 #3\relax{% \doind {fn}{\code{#2}}% Make entry in function index ! \begingroup\defname {\defheaderxcond#1\relax$$$#2}{Function}% \deftypefunargs {#3}\endgroup % \catcode 61=\other % Turn off change made in \defparsebody } --- 4852,4858 ---- % #1 is the data type, #2 the name, #3 the args. \def\deftypefunheaderx #1#2 #3\relax{% \doind {fn}{\code{#2}}% Make entry in function index ! \begingroup\defname {\defheaderxcond#1\relax$$$#2}{\putwordDeftypefun}% \deftypefunargs {#3}\endgroup % \catcode 61=\other % Turn off change made in \defparsebody } *************** *** 4288,4294 **** \def\defmac{\defparsebody\Edefmac\defmacx\defmacheader} \def\defmacheader #1#2{\doind {fn}{\code{#1}}% Make entry in function index ! \begingroup\defname {#1}{Macro}% \defunargs {#2}\endgroup % \catcode 61=\other % Turn off change made in \defparsebody } --- 4883,4889 ---- \def\defmac{\defparsebody\Edefmac\defmacx\defmacheader} \def\defmacheader #1#2{\doind {fn}{\code{#1}}% Make entry in function index ! \begingroup\defname {#1}{\putwordDefmac}% \defunargs {#2}\endgroup % \catcode 61=\other % Turn off change made in \defparsebody } *************** *** 4298,4333 **** \def\defspec{\defparsebody\Edefspec\defspecx\defspecheader} \def\defspecheader #1#2{\doind {fn}{\code{#1}}% Make entry in function index ! \begingroup\defname {#1}{Special Form}% \defunargs {#2}\endgroup % \catcode 61=\other % Turn off change made in \defparsebody } - % This definition is run if you use @defunx - % anywhere other than immediately after a @defun or @defunx. - - \def\deffnx #1 {\errmessage{@deffnx in invalid context}} - \def\defunx #1 {\errmessage{@defunx in invalid context}} - \def\defmacx #1 {\errmessage{@defmacx in invalid context}} - \def\defspecx #1 {\errmessage{@defspecx in invalid context}} - \def\deftypefnx #1 {\errmessage{@deftypefnx in invalid context}} - \def\deftypemethodx #1 {\errmessage{@deftypemethodx in invalid context}} - \def\deftypefunx #1 {\errmessage{@deftypefunx in invalid context}} - - % @defmethod, and so on - % @defop CATEGORY CLASS OPERATION ARG... ! \def\defop #1 {\def\defoptype{#1}% \defopparsebody\Edefop\defopx\defopheader\defoptype} ! ! \def\defopheader #1#2#3{% \dosubind {fn}{\code{#2}}{\putwordon\ #1}% Make entry in function index ! \begingroup\defname {#2}{\defoptype{} on #1}% \defunargs {#3}\endgroup % } ! % @deftypemethod CLASS RETURN-TYPE METHOD ARG... % \def\deftypemethod{% \deftypemethparsebody\Edeftypemethod\deftypemethodx\deftypemethodheader} --- 4893,4931 ---- \def\defspec{\defparsebody\Edefspec\defspecx\defspecheader} \def\defspecheader #1#2{\doind {fn}{\code{#1}}% Make entry in function index ! \begingroup\defname {#1}{\putwordDefspec}% \defunargs {#2}\endgroup % \catcode 61=\other % Turn off change made in \defparsebody } % @defop CATEGORY CLASS OPERATION ARG... ! % \def\defop #1 {\def\defoptype{#1}% \defopparsebody\Edefop\defopx\defopheader\defoptype} ! % ! \def\defopheader#1#2#3{% \dosubind {fn}{\code{#2}}{\putwordon\ #1}% Make entry in function index ! \begingroup\defname {#2}{\defoptype\ \putwordon\ #1}% \defunargs {#3}\endgroup % } + + % @deftypeop CATEGORY CLASS TYPE OPERATION ARG... + % + \def\deftypeop #1 {\def\deftypeopcategory{#1}% + \deftypeopparsebody\Edeftypeop\deftypeopx\deftypeopheader + \deftypeopcategory} + % + % #1 is the class name, #2 the data type, #3 the operation name, #4 the args. + \def\deftypeopheader#1#2#3#4{% + \dosubind{fn}{\code{#3}}{\putwordon\ \code{#1}}% entry in function index + \begingroup + \defname{\defheaderxcond#2\relax$$$#3} + {\deftypeopcategory\ \putwordon\ \code{#1}}% + \deftypefunargs{#4}% + \endgroup + } ! % @deftypemethod CLASS TYPE METHOD ARG... % \def\deftypemethod{% \deftypemethparsebody\Edeftypemethod\deftypemethodx\deftypemethodheader} *************** *** 4341,4346 **** --- 4939,4959 ---- \endgroup } + % @deftypeivar CLASS TYPE VARNAME + % + \def\deftypeivar{% + \deftypemethparsebody\Edeftypeivar\deftypeivarx\deftypeivarheader} + % + % #1 is the class name, #2 the data type, #3 the variable name. + \def\deftypeivarheader#1#2#3{% + \dosubind{vr}{\code{#3}}{\putwordof\ \code{#1}}% entry in variable index + \begingroup + \defname{\defheaderxcond#2\relax$$$#3} + {\putwordInstanceVariableof\ \code{#1}}% + \defvarargs{#3}% + \endgroup + } + % @defmethod == @defop Method % \def\defmethod{\defmethparsebody\Edefmethod\defmethodx\defmethodheader} *************** *** 4360,4390 **** \defopvarparsebody\Edefcv\defcvx\defcvarheader\defcvtype} \def\defcvarheader #1#2#3{% ! \dosubind {vr}{\code{#2}}{of #1}% Make entry in var index ! \begingroup\defname {#2}{\defcvtype{} of #1}% \defvarargs {#3}\endgroup % } - - % @defivar == @defcv {Instance Variable} \def\defivar{\defvrparsebody\Edefivar\defivarx\defivarheader} ! ! \def\defivarheader #1#2#3{% ! \dosubind {vr}{\code{#2}}{of #1}% Make entry in var index ! \begingroup\defname {#2}{Instance Variable of #1}% ! \defvarargs {#3}\endgroup % } ! % These definitions are run if you use @defmethodx, etc., ! % anywhere other than immediately after a @defmethod, etc. ! ! \def\defopx #1 {\errmessage{@defopx in invalid context}} ! \def\defmethodx #1 {\errmessage{@defmethodx in invalid context}} ! \def\defcvx #1 {\errmessage{@defcvx in invalid context}} ! \def\defivarx #1 {\errmessage{@defivarx in invalid context}} ! ! % Now @defvar ! % First, define the processing that is wanted for arguments of @defvar. % This is actually simple: just print them in roman. % This must expand the args and terminate the paragraph they make up --- 4973,4996 ---- \defopvarparsebody\Edefcv\defcvx\defcvarheader\defcvtype} \def\defcvarheader #1#2#3{% ! \dosubind {vr}{\code{#2}}{\putwordof\ #1}% Make entry in var index ! \begingroup\defname {#2}{\defcvtype\ \putwordof\ #1}% \defvarargs {#3}\endgroup % } + % @defivar CLASS VARNAME == @defcv {Instance Variable} CLASS VARNAME + % \def\defivar{\defvrparsebody\Edefivar\defivarx\defivarheader} ! % ! \def\defivarheader#1#2#3{% ! \dosubind {vr}{\code{#2}}{\putwordof\ #1}% entry in var index ! \begingroup ! \defname{#2}{\putwordInstanceVariableof\ #1}% ! \defvarargs{#3}% ! \endgroup } ! % @defvar % First, define the processing that is wanted for arguments of @defvar. % This is actually simple: just print them in roman. % This must expand the args and terminate the paragraph they make up *************** *** 4404,4410 **** \def\defvar{\defvarparsebody\Edefvar\defvarx\defvarheader} \def\defvarheader #1#2{\doind {vr}{\code{#1}}% Make entry in var index ! \begingroup\defname {#1}{Variable}% \defvarargs {#2}\endgroup % } --- 5010,5016 ---- \def\defvar{\defvarparsebody\Edefvar\defvarx\defvarheader} \def\defvarheader #1#2{\doind {vr}{\code{#1}}% Make entry in var index ! \begingroup\defname {#1}{\putwordDefvar}% \defvarargs {#2}\endgroup % } *************** *** 4413,4419 **** \def\defopt{\defvarparsebody\Edefopt\defoptx\defoptheader} \def\defoptheader #1#2{\doind {vr}{\code{#1}}% Make entry in var index ! \begingroup\defname {#1}{User Option}% \defvarargs {#2}\endgroup % } --- 5019,5025 ---- \def\defopt{\defvarparsebody\Edefopt\defoptx\defoptheader} \def\defoptheader #1#2{\doind {vr}{\code{#1}}% Make entry in var index ! \begingroup\defname {#1}{\putwordDefopt}% \defvarargs {#2}\endgroup % } *************** *** 4425,4431 **** % is actually part of the data type, which should not be put into the index. \def\deftypevarheader #1#2{% \dovarind#2 \relax% Make entry in variables index ! \begingroup\defname {\defheaderxcond#1\relax$$$#2}{Variable}% \interlinepenalty=10000 \endgraf\nobreak\vskip -\parskip\nobreak \endgroup} --- 5031,5037 ---- % is actually part of the data type, which should not be put into the index. \def\deftypevarheader #1#2{% \dovarind#2 \relax% Make entry in variables index ! \begingroup\defname {\defheaderxcond#1\relax$$$#2}{\putwordDeftypevar}% \interlinepenalty=10000 \endgraf\nobreak\vskip -\parskip\nobreak \endgroup} *************** *** 4441,4455 **** \endgraf\nobreak\vskip -\parskip\nobreak \endgroup} - % This definition is run if you use @defvarx - % anywhere other than immediately after a @defvar or @defvarx. - - \def\defvrx #1 {\errmessage{@defvrx in invalid context}} - \def\defvarx #1 {\errmessage{@defvarx in invalid context}} - \def\defoptx #1 {\errmessage{@defoptx in invalid context}} - \def\deftypevarx #1 {\errmessage{@deftypevarx in invalid context}} - \def\deftypevrx #1 {\errmessage{@deftypevrx in invalid context}} - % Now define @deftp % Args are printed in bold, a slight difference from @defvar. --- 5047,5052 ---- *************** *** 4462,4484 **** \def\deftpheader #1#2#3{\doind {tp}{\code{#2}}% \begingroup\defname {#2}{#1}\deftpargs{#3}\endgroup} ! % This definition is run if you use @deftpx, etc ! % anywhere other than immediately after a @deftp, etc. ! ! \def\deftpx #1 {\errmessage{@deftpx in invalid context}} \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\scanmacro#1{% \begingroup \newlinechar`\^^M \immediate\openout\macscribble=\jobname.tmp ! \immediate\write\macscribble{#1}% \immediate\closeout\macscribble \let\xeatspaces\eatspaces \input \jobname.tmp --- 5059,5103 ---- \def\deftpheader #1#2#3{\doind {tp}{\code{#2}}% \begingroup\defname {#2}{#1}\deftpargs{#3}\endgroup} ! % These definitions are used if you use @defunx (etc.) ! % anywhere other than immediately after a @defun or @defunx. ! % ! \def\defcvx#1 {\errmessage{@defcvx in invalid context}} ! \def\deffnx#1 {\errmessage{@deffnx in invalid context}} ! \def\defivarx#1 {\errmessage{@defivarx in invalid context}} ! \def\defmacx#1 {\errmessage{@defmacx in invalid context}} ! \def\defmethodx#1 {\errmessage{@defmethodx in invalid context}} ! \def\defoptx #1 {\errmessage{@defoptx in invalid context}} ! \def\defopx#1 {\errmessage{@defopx in invalid context}} ! \def\defspecx#1 {\errmessage{@defspecx in invalid context}} ! \def\deftpx#1 {\errmessage{@deftpx in invalid context}} ! \def\deftypefnx#1 {\errmessage{@deftypefnx in invalid context}} ! \def\deftypefunx#1 {\errmessage{@deftypefunx in invalid context}} ! \def\deftypeivarx#1 {\errmessage{@deftypeivarx in invalid context}} ! \def\deftypemethodx#1 {\errmessage{@deftypemethodx in invalid context}} ! \def\deftypeopx#1 {\errmessage{@deftypeopx in invalid context}} ! \def\deftypevarx#1 {\errmessage{@deftypevarx in invalid context}} ! \def\deftypevrx#1 {\errmessage{@deftypevrx in invalid context}} ! \def\defunx#1 {\errmessage{@defunx in invalid context}} ! \def\defvarx#1 {\errmessage{@defvarx in invalid context}} ! \def\defvrx#1 {\errmessage{@defvrx in invalid context}} \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\scanmacro#1{% \begingroup \newlinechar`\^^M + % Undo catcode changes of \startcontents and \doprintindex + \catcode`\@=0 \catcode`\\=12 \escapechar=`\@ + % Append \endinput to make sure that TeX does not see the ending newline. + \toks0={#1\endinput}% \immediate\openout\macscribble=\jobname.tmp ! \immediate\write\macscribble{\the\toks0}% \immediate\closeout\macscribble \let\xeatspaces\eatspaces \input \jobname.tmp *************** *** 4487,4498 **** \else \def\scanmacro#1{% \begingroup \newlinechar`\^^M ! \let\xeatspaces\eatspaces\scantokens{#1}\endgroup} \fi \newcount\paramno % Count of parameters \newtoks\macname % Macro name \newif\ifrecursive % Is it recursive? % Utility routines. % Thisdoes \let #1 = #2, except with \csnames. --- 5106,5121 ---- \else \def\scanmacro#1{% \begingroup \newlinechar`\^^M ! % Undo catcode changes of \startcontents and \doprintindex ! \catcode`\@=0 \catcode`\\=12 \escapechar=`\@ ! \let\xeatspaces\eatspaces\scantokens{#1\endinput}\endgroup} \fi \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. % Thisdoes \let #1 = #2, except with \csnames. *************** *** 4524,4531 **** % 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\macrobodyctxt{% --- 5147,5154 ---- % 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\macrobodyctxt{% *************** *** 4554,4560 **** \catcode`\\=12} % \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. --- 5177,5183 ---- \catcode`\\=12} % \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. *************** *** 4573,4597 **** \ifx\argl\empty % no arguments \paramno=0% \else ! \expandafter\parsemargdef \argl;% \fi ! \expandafter\ifx \csname macsave.\the\macname\endcsname \relax ! \cslet{macsave.\the\macname}{\the\macname}% ! \else \message{Warning: redefining \the\macname}% \fi \begingroup \macrobodyctxt \ifrecursive \expandafter\parsermacbody ! \else \expandafter\parsemacbody \fi} \def\unmacro{\parsearg\unmacroxxx} \def\unmacroxxx#1{% ! \expandafter\ifx \csname macsave.\the\macname\endcsname \relax ! \errmessage{Macro \the\macname\ not defined.}% \else ! \cslet{#1}{macsave.#1}% ! \expandafter\let \csname macsave.\the\macname\endcsname \undefined \fi } --- 5196,5243 ---- \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{The name \the\macname\space is reserved}\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} \def\unmacro{\parsearg\unmacroxxx} \def\unmacroxxx#1{% ! \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 ! \edef\tempa{\expandafter\noexpand\csname#1\endcsname}% ! \def\do##1{% ! \def\tempb{##1}% ! \ifx\tempa\tempb ! % remove this ! \else ! \toks0 = \expandafter{\newmacrolist\do}% ! \edef\newmacrolist{\the\toks0\expandafter\noexpand\tempa}% ! \fi}% ! \def\newmacrolist{}% ! % Execute macro list to define \newmacrolist ! \macrolist ! \global\let\macrolist\newmacrolist ! \endgroup \else ! \errmessage{Macro #1 not defined}% \fi } *************** *** 4650,4668 **** \or % 1 \expandafter\xdef\csname\the\macname\endcsname{% \bgroup\noexpand\macroargctxt ! \noexpand\braceorline\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{% ! \csname\the\macname xxx\endcsname ##1,}% \expandafter\expandafter \expandafter\xdef \expandafter\expandafter ! \csname\the\macname xxx\endcsname \paramlist{\egroup\noexpand\scanmacro{\temp}}% \fi \else --- 5296,5315 ---- \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 *************** *** 4674,4680 **** \or % 1 \expandafter\xdef\csname\the\macname\endcsname{% \bgroup\noexpand\macroargctxt ! \noexpand\braceorline\csname\the\macname xxx\endcsname}% \expandafter\xdef\csname\the\macname xxx\endcsname##1{% \egroup \noexpand\norecurse{\the\macname}% --- 5321,5328 ---- \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}% *************** *** 4682,4690 **** \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{% ! \csname\the\macname xxx\endcsname ##1,}% \expandafter\expandafter \expandafter\xdef \expandafter\expandafter --- 5330,5338 ---- \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 *************** *** 4705,4715 **** \def\braceorline#1{\let\next=#1\futurelet\nchar\braceorlinexxx} \def\braceorlinexxx{% \ifx\nchar\bgroup\else ! \expandafter\parsearg \fi \next} \message{cross references,} \newwrite\auxfile \newif\ifhavexrefs % True if xref values are known. --- 5353,5381 ---- \def\braceorline#1{\let\next=#1\futurelet\nchar\braceorlinexxx} \def\braceorlinexxx{% \ifx\nchar\bgroup\else ! \expandafter\parsearg \fi \next} + % We mant 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} + + % @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{\begingroup\obeyspaces\parsearg\aliasxxx} + \def\aliasxxx #1{\aliasyyy#1\relax} + \def\aliasyyy #1=#2\relax{\ignoreactivespaces + \edef\next{\global\let\expandafter\noexpand\csname#1\endcsname=% + \expandafter\noexpand\csname#2\endcsname}% + \expandafter\endgroup\next} + + \message{cross references,} + % @xref etc. + \newwrite\auxfile \newif\ifhavexrefs % True if xref values are known. *************** *** 4751,4771 **** % @anchor{NAME} -- define xref target at arbitrary point. ! % ! \def\anchor#1{\setref{#1}{Ynothing}} ! % \setref{NAME}{SNT} defines a cross-reference point NAME, namely % NAME-title, NAME-pg, and NAME-SNT. Called from \foonoderef. We have % to set \indexdummies so commands such as @code in a section title % aren't expanded. It would be nicer not to expand the titles in the % first place, but there's so many layers that that is hard to do. ! % \def\setref#1#2{{% \indexdummies \dosetq{#1-title}{Ytitle}% \dosetq{#1-pg}{Ypagenumber}% ! \dosetq{#1-snt}{#2} }} % @xref, @pxref, and @ref generate cross-references. For \xrefX, #1 is --- 5417,5440 ---- % @anchor{NAME} -- define xref target at arbitrary point. ! % ! \newcount\savesfregister ! \gdef\savesf{\relax \ifhmode \savesfregister=\spacefactor \fi} ! \gdef\restoresf{\relax \ifhmode \spacefactor=\savesfregister \fi} ! \gdef\anchor#1{\savesf \setref{#1}{Ynothing}\restoresf \ignorespaces} % \setref{NAME}{SNT} defines a cross-reference point NAME, namely % NAME-title, NAME-pg, and NAME-SNT. Called from \foonoderef. We have % to set \indexdummies so commands such as @code in a section title % aren't expanded. It would be nicer not to expand the titles in the % first place, but there's so many layers that that is hard to do. ! % \def\setref#1#2{{% \indexdummies + \pdfmkdest{#1}% \dosetq{#1-title}{Ytitle}% \dosetq{#1-pg}{Ypagenumber}% ! \dosetq{#1-snt}{#2}% }} % @xref, @pxref, and @ref generate cross-references. For \xrefX, #1 is *************** *** 4777,4782 **** --- 5446,5452 ---- \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\printednodename{\ignorespaces #3}% \setbox1=\hbox{\printedmanual}% *************** *** 4810,4817 **** % 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{} ``\printednodename'' in \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 --- 5480,5500 ---- % 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. + \ifpdf + \leavevmode + \getfilename{#4}% + \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{#1@}% + \fi + \linkcolor + \fi + % \ifdim \wd1 > 0pt ! \putwordsection{} ``\printednodename'' \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 *************** *** 4824,4834 **** \setbox2 = \hbox{\ignorespaces \refx{#1-snt}{}}% \ifdim \wd2 > 0pt \refx{#1-snt}\space\fi }% ! % [mynode], [\printednodename],\space % page 3 \turnoffactive \putwordpage\tie\refx{#1-pg}{}% \fi \endgroup} % \dosetq is the interface for calls from other macros --- 5507,5518 ---- \setbox2 = \hbox{\ignorespaces \refx{#1-snt}{}}% \ifdim \wd2 > 0pt \refx{#1-snt}\space\fi }% ! % [mynode], [\printednodename],\space % page 3 \turnoffactive \putwordpage\tie\refx{#1-pg}{}% \fi + \endlink \endgroup} % \dosetq is the interface for calls from other macros *************** *** 4836,4842 **** % Use \normalturnoffactive so that punctuation chars such as underscore % and backslash work in node names. (\turnoffactive doesn't do \.) \def\dosetq#1#2{% ! {\let\folio=0 \normalturnoffactive \edef\next{\write\auxfile{\internalsetq{#1}{#2}}}% \iflinks --- 5520,5526 ---- % Use \normalturnoffactive so that punctuation chars such as underscore % and backslash work in node names. (\turnoffactive doesn't do \.) \def\dosetq#1#2{% ! {\let\folio=0% \normalturnoffactive \edef\next{\write\auxfile{\internalsetq{#1}{#2}}}% \iflinks *************** *** 4913,4919 **** } % This is the macro invoked by entries in the aux file. ! % \def\xrdef#1{\begingroup % Reenable \ as an escape while reading the second argument. \catcode`\\ = 0 --- 5597,5603 ---- } % This is the macro invoked by entries in the aux file. ! % \def\xrdef#1{\begingroup % Reenable \ as an escape while reading the second argument. \catcode`\\ = 0 *************** *** 5065,5070 **** --- 5749,5756 ---- \xspaceskip\z@skip \parindent\defaultparindent % + \smallfonts \rm + % % Hang the footnote text off the number. \hang \textindent{\thisfootno}% *************** *** 5079,5085 **** \else\let\next\f@t\fi \next} \def\f@@t{\bgroup\aftergroup\@foot\let\next} \def\f@t#1{#1\@foot} ! \def\@foot{\strut\egroup} }%end \catcode `\@=11 --- 5765,5771 ---- \else\let\next\f@t\fi \next} \def\f@@t{\bgroup\aftergroup\@foot\let\next} \def\f@t#1{#1\@foot} ! \def\@foot{\strut\par\egroup} }%end \catcode `\@=11 *************** *** 5138,5144 **** % @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. --- 5824,5830 ---- % @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. *************** *** 5151,5162 **** \input epsf.tex \fi % \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://ftp.tug.org/tex/epsf.tex.} % - % Only complain once about lack of epsf.tex. \def\image#1{% \ifx\epsfbox\undefined \ifwarnednoepsf \else --- 5837,5848 ---- \input epsf.tex \fi % + % 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 *************** *** 5174,5197 **** % #2 is (optional) width, #3 is (optional) height. % #4 is just the usual extra ignored arg for parsing this stuff. \def\imagexxx#1,#2,#3,#4\finish{% ! % \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 ! % If the image is by itself, center it. ! \ifvmode ! \nobreak\medskip ! \nobreak ! \centerline{\epsfbox{#1.eps}}% ! \bigbreak \else ! \epsfbox{#1.eps}% \fi } ! \message{paper sizes,} ! % And other related parameters. \newdimen\defaultparindent \defaultparindent = 15pt \chapheadingskip = 15pt plus 4pt minus 2pt --- 5860,5928 ---- % #2 is (optional) width, #3 is (optional) height. % #4 is just the usual extra ignored arg for parsing this stuff. \def\imagexxx#1,#2,#3,#4\finish{% ! \ifpdf ! \centerline{\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 ! \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 ! \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 ! \centerline{\epsfbox{#1.eps}}% ! \bigbreak ! \else ! % In the middle of a paragraph, no extra space. ! \epsfbox{#1.eps}% ! \fi ! \endgroup ! \fi ! } ! ! ! \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. ! % ! \def\documentlanguage{\parsearg\dodocumentlanguage} ! \def\dodocumentlanguage#1{% ! \tex % read txi-??.tex file in plain TeX. ! % Read the file if it exists. ! \openin 1 txi-#1.tex ! \ifeof1 ! \errhelp = \nolanghelp ! \errmessage{Cannot read language file txi-#1.tex}% ! \let\temp = \relax \else ! \def\temp{\input txi-#1.tex }% \fi + \temp + \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 *************** *** 5211,5226 **** % 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. This makes it come to about 9pt for the 8.5x11 format. 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 = \hsize ! \divide\emergencystretch by 45 \fi } --- 5942,5955 ---- % 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 } *************** *** 5251,5256 **** --- 5980,5994 ---- \setemergencystretch } + % Use `small' versions. + % + \def\smallenvironments{% + \let\smalldisplay = \smalldisplayx + \let\smallexample = \smalllispx + \let\smallformat = \smallformatx + \let\smalllisp = \smalllispx + } + % @letterpaper (the default). \def\letterpaper{{\globaldefs = 1 \parskip = 3pt plus 2pt minus 1pt *************** *** 5273,5283 **** \contentsrightmargin = 0pt \deftypemargin = 0pt \defbodyindent = .5cm ! % ! \let\smalldisplay = \smalldisplayx ! \let\smallexample = \smalllispx ! \let\smallformat = \smallformatx ! \let\smalllisp = \smalllispx }} % Use @afourpaper to print on European A4 paper. --- 6011,6017 ---- \contentsrightmargin = 0pt \deftypemargin = 0pt \defbodyindent = .5cm ! \smallenvironments }} % Use @afourpaper to print on European A4 paper. *************** *** 5291,5296 **** --- 6025,6050 ---- \hfuzz = 1pt }} + % 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 + \setleading{12.5pt}% + \parskip = 2pt plus 1pt minus 0.1pt + % + \internalpagesizes{166mm}{120mm}{\voffset}{-8mm}{\bindingoffset}{8pt}% + % + \lispnarrowing = 0.2in + \tolerance = 800 + \hfuzz = 1.2pt + \contentsrightmargin = 0mm + \deftypemargin = 0pt + \defbodyindent = 2mm + \tableindent = 12mm + % + \smallenvironments + }} + % A specific text layout, 24x15cm overall, intended for A4 paper. Top margin % 29mm, hence bottom margin 28mm, nominal side margin 3cm. \def\afourlatex{{\globaldefs = 1 *************** *** 5305,5311 **** % Use @afourwide to print on European A4 paper in wide format. \def\afourwide{% \afourpaper ! \internalpagesizes{9.5in}{6.5in}{\hoffset}{\normaloffset}{\bindingoffset}{7mm}% % \globaldefs = 0 } --- 6059,6065 ---- % Use @afourwide to print on European A4 paper in wide format. \def\afourwide{% \afourpaper ! \internalpagesizes{6.5in}{9.5in}{\hoffset}{\normaloffset}{\bindingoffset}{7mm}% % \globaldefs = 0 } *************** *** 5313,5319 **** % @pagesizes TEXTHEIGHT[,TEXTWIDTH] % Perhaps we should allow setting the margins, \topskip, \parskip, % and/or leading, also. Or perhaps we should compute them somehow. ! % \def\pagesizes{\parsearg\pagesizesxxx} \def\pagesizesxxx#1{\pagesizesyyy #1,,\finish} \def\pagesizesyyy#1,#2,#3\finish{{% --- 6067,6073 ---- % @pagesizes TEXTHEIGHT[,TEXTWIDTH] % Perhaps we should allow setting the margins, \topskip, \parskip, % and/or leading, also. Or perhaps we should compute them somehow. ! % \def\pagesizes{\parsearg\pagesizesxxx} \def\pagesizesxxx#1{\pagesizesyyy #1,,\finish} \def\pagesizesyyy#1,#2,#3\finish{{% *************** *** 5327,5335 **** }} % Set default to letter. ! % \letterpaper \message{and turning on texinfo input format.} % Define macros to output various characters with catcode for normal text. --- 6081,6090 ---- }} % Set default to letter. ! % \letterpaper + \message{and turning on texinfo input format.} % Define macros to output various characters with catcode for normal text. *************** *** 5341,5346 **** --- 6096,6102 ---- \catcode`\<=\other \catcode`\>=\other \catcode`\+=\other + \catcode`\$=\other \def\normaldoublequote{"} \def\normaltilde{~} \def\normalcaret{^} *************** *** 5349,5354 **** --- 6105,6111 ---- \def\normalless{<} \def\normalgreater{>} \def\normalplus{+} + \def\normaldollar{$} % This macro is used to make a character print one way in ttfont % where it can probably just be output, and another way in other fonts, *************** *** 5359,5365 **** % 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\the\font=0pt #1\else #2\fi} % Turn off all special characters except @ % (and those which the user can use as if they were ordinary). --- 6116,6128 ---- % 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). *************** *** 5390,5395 **** --- 6153,6160 ---- \def>{{\tt \gtr}} \catcode`\+=\active \def+{{\tt \char 43}} + \catcode`\$=\active + \def${\ifusingit{{\sl\$}}\normaldollar} %\catcode 27=\active %\def^^[{$\diamondsuit$} *************** *** 5420,5428 **** % \normalbackslash outputs one backslash in fixed width font. \def\normalbackslash{{\tt\rawbackslashxx}} - % Say @foo, not \foo, in error messages. - \escapechar=`\@ - % \catcode 17=0 % Define control-q \catcode`\\=\active --- 6185,6190 ---- *************** *** 5436,5442 **** @let|=@normalverticalbar @let<=@normalless @let>=@normalgreater ! @let+=@normalplus} @def@normalturnoffactive{@let"=@normaldoublequote @let\=@normalbackslash --- 6198,6205 ---- @let|=@normalverticalbar @let<=@normalless @let>=@normalgreater ! @let+=@normalplus ! @let$=@normaldollar} @def@normalturnoffactive{@let"=@normaldoublequote @let\=@normalbackslash *************** *** 5446,5452 **** @let|=@normalverticalbar @let<=@normalless @let>=@normalgreater ! @let+=@normalplus} % Make _ and + \other characters, temporarily. % This is canceled by @fixbackslash. --- 6209,6216 ---- @let|=@normalverticalbar @let<=@normalless @let>=@normalgreater ! @let+=@normalplus ! @let$=@normaldollar} % Make _ and + \other characters, temporarily. % This is canceled by @fixbackslash. *************** *** 5465,5484 **** % 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} ! % These look ok in all fonts, so just make them not special. The @rm below ! % makes sure that the current font starts out as the newly loaded cmr10 ! @catcode`@$=@other @catcode`@%=@other @catcode`@&=@other @catcode`@#=@other @textfonts @rm @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" @c time-stamp-end: "}" @c End: --- 6229,6257 ---- % 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 Set initial fonts. @textfonts @rm + @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: Index: automake/version.texi diff -c automake/version.texi:1.141.4.4 automake/version.texi:1.141.4.6 *** automake/version.texi:1.141.4.4 Thu May 24 13:35:42 2001 --- automake/version.texi Thu Jun 7 13:03:51 2001 *************** *** 1,3 **** @set UPDATED 6 January 1999 ! @set EDITION 1.4-p2 ! @set VERSION 1.4-p2 --- 1,3 ---- @set UPDATED 6 January 1999 ! @set EDITION 1.4-p3 ! @set VERSION 1.4-p3 Index: automake/m4/Makefile.in diff -c automake/m4/Makefile.in:1.85.4.1 automake/m4/Makefile.in:1.85.4.2 *** automake/m4/Makefile.in:1.85.4.1 Tue May 8 17:40:52 2001 --- automake/m4/Makefile.in Thu Jun 7 12:31:13 2001 *************** *** 1,4 **** ! # Makefile.in generated automatically by automake 1.4-p1 from Makefile.am # Copyright (C) 1994, 1995-8, 1999 Free Software Foundation, Inc. # This Makefile.in is free software; the Free Software Foundation --- 1,4 ---- ! # Makefile.in generated automatically by automake 1.4-p2 from Makefile.am # Copyright (C) 1994, 1995-8, 1999 Free Software Foundation, Inc. # This Makefile.in is free software; the Free Software Foundation Index: automake/tests/Makefile.in diff -c automake/tests/Makefile.in:1.225.4.1 automake/tests/Makefile.in:1.225.4.2 *** automake/tests/Makefile.in:1.225.4.1 Tue May 8 17:40:52 2001 --- automake/tests/Makefile.in Thu Jun 7 12:31:13 2001 *************** *** 1,4 **** ! # Makefile.in generated automatically by automake 1.4-p1 from Makefile.am # Copyright (C) 1994, 1995-8, 1999 Free Software Foundation, Inc. # This Makefile.in is free software; the Free Software Foundation --- 1,4 ---- ! # Makefile.in generated automatically by automake 1.4-p2 from Makefile.am # Copyright (C) 1994, 1995-8, 1999 Free Software Foundation, Inc. # This Makefile.in is free software; the Free Software Foundation