From 5348dfde88c041f23cadb8bac2d83714518af598 Mon Sep 17 00:00:00 2001 From: Tom Tromey Date: Sun, 6 Oct 1996 03:55:33 +0000 Subject: [PATCH] Many bug fixes --- ChangeLog | 64 ++ Makefile.am | 10 +- Makefile.in | 31 +- NEWS | 2 +- TODO | 16 +- aclocal.in | 195 +++-- automake.in | 132 +-- automake.texi | 36 +- compile-vars.am => comp-vars.am | 0 lib/am/Makefile.am | 10 +- lib/am/comp-vars.am | 22 + libraries.am => lib/am/libs.am | 0 programs.am => lib/am/progs.am | 0 texi-version.am => lib/am/texi-vers.am | 0 lib/texinfo.tex | 779 ++++++++++-------- lib/ylwrap | 54 +- libraries-clean.am => libs-clean.am | 0 libs.am | 44 + m4/Makefile.am | 11 +- m4/Makefile.in | 16 +- m4/{AM_SANITY_CHECK_CC.m4 => ccsanity.m4} | 0 m4/{AM_PROG_CC_STDC.m4 => ccstdc.m4} | 0 m4/{AM_WITH_DMALLOC.m4 => dmalloc.m4} | 0 m4/error.m4 | 13 + m4/{AM_FUNC_FNMATCH.m4 => fnmatch.m4} | 0 m4/{AM_INIT_AUTOMAKE.m4 => init.m4} | 0 m4/{AM_PROG_INSTALL.m4 => install.m4} | 0 m4/{AM_PATH_LISPDIR.m4 => lispdir.m4} | 0 m4/{AM_MAINTAINER_MODE.m4 => maintainer.m4} | 0 m4/mktime.m4 | 39 + m4/obstack.m4 | 15 + m4/{AM_C_PROTOTYPES.m4 => protos.m4} | 0 m4/{AM_TYPE_PTRDIFF_T.m4 => ptrdiff.m4} | 0 m4/{AM_WITH_REGEX.m4 => regex.m4} | 0 m4/{AM_FUNC_STRTOD.m4 => strtod.m4} | 0 m4/{AM_SYS_POSIX_TERMIOS.m4 => termios.m4} | 0 ...TIOCGWINSZ_NEEDS_SYS_IOCTL.m4 => winsz.m4} | 0 programs-clean.am => progs-clean.am | 0 progs.am | 32 + tests/ChangeLog | 8 + tests/Makefile.am | 4 +- tests/Makefile.in | 10 +- tests/checkall.test | 5 + tests/defun.test | 2 +- tests/discover.test | 26 + tests/error.test | 3 +- tests/{mkinstall2.test => mkinst2.test} | 0 tests/symlink.test | 18 + texinfos-vars.am => texi-vars.am | 0 texi-vers.am | 42 + texinfo.tex | 779 ++++++++++-------- version.texi | 2 +- ylwrap | 54 +- 53 files changed, 1592 insertions(+), 882 deletions(-) rename compile-vars.am => comp-vars.am (100%) create mode 100644 lib/am/comp-vars.am rename libraries.am => lib/am/libs.am (100%) rename programs.am => lib/am/progs.am (100%) rename texi-version.am => lib/am/texi-vers.am (100%) rename libraries-clean.am => libs-clean.am (100%) create mode 100644 libs.am rename m4/{AM_SANITY_CHECK_CC.m4 => ccsanity.m4} (100%) rename m4/{AM_PROG_CC_STDC.m4 => ccstdc.m4} (100%) rename m4/{AM_WITH_DMALLOC.m4 => dmalloc.m4} (100%) create mode 100644 m4/error.m4 rename m4/{AM_FUNC_FNMATCH.m4 => fnmatch.m4} (100%) rename m4/{AM_INIT_AUTOMAKE.m4 => init.m4} (100%) rename m4/{AM_PROG_INSTALL.m4 => install.m4} (100%) rename m4/{AM_PATH_LISPDIR.m4 => lispdir.m4} (100%) rename m4/{AM_MAINTAINER_MODE.m4 => maintainer.m4} (100%) create mode 100644 m4/mktime.m4 create mode 100644 m4/obstack.m4 rename m4/{AM_C_PROTOTYPES.m4 => protos.m4} (100%) rename m4/{AM_TYPE_PTRDIFF_T.m4 => ptrdiff.m4} (100%) rename m4/{AM_WITH_REGEX.m4 => regex.m4} (100%) rename m4/{AM_FUNC_STRTOD.m4 => strtod.m4} (100%) rename m4/{AM_SYS_POSIX_TERMIOS.m4 => termios.m4} (100%) rename m4/{AM_HEADER_TIOCGWINSZ_NEEDS_SYS_IOCTL.m4 => winsz.m4} (100%) rename programs-clean.am => progs-clean.am (100%) create mode 100644 progs.am create mode 100755 tests/discover.test rename tests/{mkinstall2.test => mkinst2.test} (100%) create mode 100755 tests/symlink.test rename texinfos-vars.am => texi-vars.am (100%) create mode 100644 texi-vers.am diff --git a/ChangeLog b/ChangeLog index a802ddfa..3b708dba 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,3 +1,67 @@ +Sat Oct 5 11:29:48 1996 Tom Tromey + + * automake.in (generate_makefile): Put BUILT_SOURCES onto @all if + appropriate. + (handle_source_transform): Error if discovered source file is + mentioned. + (do_one_merge_target): Move all-vs-check test here. + + * m4/obstack.m4: New file. + * m4/error.m4: New file. + + * automake.in (scan_configure): Support AM_FUNC_MKTIME, + AM_FUNC_ERROR_AT_LINE, AM_FUNC_OBSTACK. + + * texinfo.tex: New version from texinfo 3.9. + + * automake.in (handle_yacc_lex_cxx): Updated for new ylwrap. + Also, handle y.tab.h file when "yacc -d" is used. + (do_one_merge_target): Use pretty_print_rule. + + * ylwrap: Changed usage. + + * m4/mktime.m4: New file. + + * m4: Renamed all .m4 files to fit into 14-char limits. + + * m4/Makefile.am (EXTRA_DIST): New macro. + + * aclocal.in ($ac_defun_rx, %map, %file_contents): New globals. + (scan_m4_files): Use $ac_defun_rx. + (add_file): Ditto. + Run scan_m4_files. + (scan_configure): Scan acinclude.m4 before anything else. + (scan_file): New sub. + (check_acinclude): New sub. + (add_file): Rewrote. + + * progs-clean.am, progs.am: Renamed from programs-clean.am, + programs.am. + * libs-clean.am, libs.am: Renamed from libraries-clean.am, + libraries.am. + * texi-vars: Renamed from texinfos-vars.am. + * comp-vars.am: Renamed from compile-vars.am. + * texi-vers.am: Renamed from texi-version.am. + + * automake.in (require_file_internal): Give error if symlink can't + be made. + (require_config_file): Error message references configure.in. + (handle_yacc_lex_cxx): Fix order of arguments to ylwrap; from + Joerg-Martin Schwarz. + (handle_texinfo): Use texi-vers, not texi-version. + (get_object_extension): Use comp-vars, not compile-vars. + (handle_texinfo): Use texi-vars, not texinfos-vars. + (handle_libraries): Use `libs' prefix, not `libraries'. + (handle_programs): Use `progs' prefix, not `programs'. + +Fri Oct 4 01:14:08 1996 Tom Tromey + + * aclocal.in (scan_m4_files): New sub. + + * m4/AM_FUNC_STRTOD.m4 (am_cv_func_strtod_needs_libm): Set + am_cv_func_strtod_needs_libm, so we can avoid linking with -lm + everywhere. + Thu Oct 3 20:11:16 1996 Tom Tromey * texinfos.am (uninstall-info): Run install-info --remove. diff --git a/Makefile.am b/Makefile.am index 2ad35ce0..a689a265 100644 --- a/Makefile.am +++ b/Makefile.am @@ -9,13 +9,13 @@ SUBDIRS = tests m4 bin_SCRIPTS = automake aclocal info_TEXINFOS = automake.texi -pkgdata_DATA = clean-kr.am clean.am compile-kr.am compile-vars.am \ +pkgdata_DATA = clean-kr.am clean.am compile-kr.am comp-vars.am \ compile.am data.am dejagnu.am depend.am depend2.am dist-vars.am footer.am \ -header.am header-vars.am kr-extra.am libraries.am library.am \ -mans-vars.am program.am programs.am remake-hdr.am remake-subd.am \ +header.am header-vars.am kr-extra.am libs.am library.am \ +mans-vars.am program.am progs.am remake-hdr.am remake-subd.am \ remake.am scripts.am subdirs.am tags.am tags-subd.am tags-clean.am \ -texi-version.am texinfos-vars.am texinfos.am libraries-clean.am \ -programs-clean.am data-clean.am COPYING INSTALL texinfo.tex ansi2knr.c \ +texi-vers.am texi-vars.am texinfos.am libs-clean.am \ +progs-clean.am data-clean.am COPYING INSTALL texinfo.tex ansi2knr.c \ ansi2knr.1 aclocal.m4 lisp.am lisp-clean.am ## These must all be executable when installed. diff --git a/Makefile.in b/Makefile.in index 3e6bd043..55afae32 100644 --- a/Makefile.in +++ b/Makefile.in @@ -47,13 +47,13 @@ SUBDIRS = tests m4 bin_SCRIPTS = automake aclocal info_TEXINFOS = automake.texi -pkgdata_DATA = clean-kr.am clean.am compile-kr.am compile-vars.am \ +pkgdata_DATA = clean-kr.am clean.am compile-kr.am comp-vars.am \ compile.am data.am dejagnu.am depend.am depend2.am dist-vars.am footer.am \ -header.am header-vars.am kr-extra.am libraries.am library.am \ -mans-vars.am program.am programs.am remake-hdr.am remake-subd.am \ +header.am header-vars.am kr-extra.am libs.am library.am \ +mans-vars.am program.am progs.am remake-hdr.am remake-subd.am \ remake.am scripts.am subdirs.am tags.am tags-subd.am tags-clean.am \ -texi-version.am texinfos-vars.am texinfos.am libraries-clean.am \ -programs-clean.am data-clean.am COPYING INSTALL texinfo.tex ansi2knr.c \ +texi-vers.am texi-vars.am texinfos.am libs-clean.am \ +progs-clean.am data-clean.am COPYING INSTALL texinfo.tex ansi2knr.c \ ansi2knr.1 aclocal.m4 lisp.am lisp-clean.am pkgdata_SCRIPTS = config.guess config.sub install-sh interlock mdate-sh \ @@ -199,10 +199,20 @@ install-info: $(INFO_DEPS) else : ; fi; \ done; \ done + $(POST_INSTALL) + if $(SHELL) -c 'install-info --version' >/dev/null 2>&1; then \ + for file in $(INFO_DEPS); do \ + install-info --info-dir=$(infodir) $$file; \ + done; \ + else : ; fi uninstall-info: - cd $(srcdir) && for file in *.info*; do \ - rm -f $(infodir)/$$file; \ + if $(SHELL) -c 'install-info --version' >/dev/null 2>&1; then \ + ii=yes; \ + else ii=; fi; \ + for file in $(INFO_DEPS); do \ + (cd $(infodir) && rm -f $$file $$file-[0-9] $$file-[0-9][0-9]); \ + test -z $ii || install-info --info-dir=$(infodir) --remove $$file; \ done mostlyclean-info: @@ -334,13 +344,10 @@ distdir: $(DEP_DISTFILES) || exit 1; \ done info: $(INFO_DEPS) info-recursive - dvi: $(DVIS) dvi-recursive - -check: check-recursive - +check: all + $(MAKE) check-recursive installcheck: installcheck-recursive installcheck-local - all-am: $(INFO_DEPS) $(SCRIPTS) $(DATA) Makefile install-exec-am: install-binSCRIPTS diff --git a/NEWS b/NEWS index 13995f55..91c8c233 100644 --- a/NEWS +++ b/NEWS @@ -1,4 +1,4 @@ -New in 1.1e: +New in 1.1f: * Bug fixes * Better DejaGNU support * Added no-installinfo option diff --git a/TODO b/TODO index 29697365..19cf6342 100644 --- a/TODO +++ b/TODO @@ -1,15 +1,12 @@ Priorities for release: -- Jim's macro updates -- yacc -vs- .h -- documentation - -* test install-info - add install-info --remove +!! documentation (eg new macros) Further: - texinfo/info changes - Per's suggestion - man page fixes +- consider adding "echo"s to installs again. + users can use make SHELL='sh -x' to get the full dirt Avoid loops when installing; instead unroll them in automake @@ -84,6 +81,11 @@ fixing configure target name (no $srcdir) Such files should be removed explicitly after the copy step! Doing this requires rewriting macros before generating Makefile.in. +from joerg-martin schwarz: + -- If Makefile.am contains $(CC), $(COMPILE), $(YLWRAP), .... + in an explicitly written rule, you should emit the corresponding + Makefile variables automatically. + add support for Makefile.tmpl that is auto-included in every Makefile.am. That makes it easier to do some non-std thing in every subdirectory. @@ -331,6 +333,8 @@ Karl> generally uses lowercase. Not that it matters :-). Stuff for aclocal: +Should ignore ## comments. + probably should put each group of m4 files into a subdir owned by the containing application. diff --git a/aclocal.in b/aclocal.in index 034c7640..adf622d8 100644 --- a/aclocal.in +++ b/aclocal.in @@ -51,6 +51,12 @@ $output_file = 'aclocal.m4'; # Which files have been seen. %file_seen = (); +# Map macro names to file names. +%map = (); + +# Map file names to file contents. +%file_contents = (); + # How much to say. $verbosity = 0; @@ -79,14 +85,22 @@ $verbosity = 0; $obsolete_rx = '(' . join ('|', @obsolete_macros) . ')'; +# Matches a macro definition. +$ac_defun_rx = "AC_DEFUN\\(\\[?([^],)\n]+)\\]?"; + +# Matches an AC_REQUIRE line. +$ac_require_rx = "AC_REQUIRE\\(\\[?([^])]*)\\]?\\)"; + &parse_arguments (@ARGV); +&scan_m4_files ($acdir); &scan_configure; if (! $exit_status) { &write_aclocal; } +&check_acinclude; exit $exit_status; @@ -145,7 +159,7 @@ sub parse_arguments } else { - &usage (1); + die "aclocal: unrecognized option -- \`$arglist[0]'\n"; } shift (@arglist); @@ -156,34 +170,19 @@ sub parse_arguments sub scan_configure { - # First, construct list of regexps to match the things we actually - # have. - opendir (DIR, $acdir) - || die "aclocal: couldn't open directory \`$acdir': $!\n"; - local ($search, $elt); - foreach (sort grep (! /^\./, readdir (DIR))) - { - # Only examine .m4 files. - next unless s/\.m4$//; - - # Skip some files when running out of srcdir. Eg "aclocal.m4" - # must be skipped. - next unless /^[A-Za-z]+_[A-Z_]+$/; - - print STDERR "Finding $_\n" if $verbosity; - ($elt = $_) =~ s/(\W)/\\$1/g; - $search .= "&add_file (\"$elt\") if /$elt/;\n"; - } - closedir (DIR); - - # Construct a new function that does the searching. We use a - # function (instead of just evalling $search in the loop) so that - # "die" is correctly and easily propagated if run. - eval 'sub search { ' . $search . '};'; - open (CONFIGURE, "configure.in") || die "aclocal: couldn't open \`configure.in': $!\n"; + # Add acinclude.m4 first. That way it can override installed + # macros. + if (-f 'acinclude.m4') + { + # Do it this way so that any AC_REQUIRE in acinclude.m4 will + # take effect. + &scan_file ('acinclude.m4'); + &add_file ('acinclude.m4'); + } + while () { # Remove comments from current line. @@ -204,72 +203,140 @@ sub scan_configure } close (CONFIGURE); +} - # Include this file if it exists - if (-f 'acinclude.m4') +################################################################ + +# Check macros in acinclude.m4. If one is not used, warn. +sub check_acinclude +{ + local ($key); + + foreach $key (keys %map) { - &add_file ('acinclude.m4'); + next unless $map{$key} eq 'acinclude.m4'; + if (! $macro_seen{$key}) + { + warn "aclocal: macro \`$key' defined in acinclude.m4 but never used\n"; + } } } ################################################################ +# Scan all the installed m4 files and construct a map. +sub scan_m4_files +{ + local ($m4dir) = @_; + + opendir (DIR, $m4dir) + || die "aclocal: couldn't open directory \`$m4dir': $!\n"; + local ($file, $fullfile, $expr); + foreach $file (sort grep (! /^\./, readdir (DIR))) + { + # Only examine .m4 files. + next unless $file =~ /\.m4$/; + + # Skip some files when running out of srcdir. + next if $file eq 'aclocal.m4'; + + $fullfile = $m4dir . '/' . $file; + $file_contents{$fullfile} = &scan_file ($fullfile); + } + closedir (DIR); + + # Construct a new function that does the searching. We use a + # function (instead of just evalling $search in the loop) so that + # "die" is correctly and easily propagated if run. + local ($search, $expr, $key); + foreach $key (keys %map) + { + # acinclude.m4 doesn't matter for the search, since it is + # unconditionally included. + next if $map{$key} eq 'acinclude.m4'; + + # EXPR is a regexp matching the name of the macro. + ($expr = $key) =~ s/(\W)/\\$1/g; + $search .= "&add_macro ('" . $key . "') if /" . $expr . "/;\n"; + } + eval 'sub search { ' . $search . '};'; + die "internal error: $@\n search is $search " if $@; +} + +################################################################ + +# Add a macro to the output. +sub add_macro +{ + local ($macro) = @_; + + # Ignore AC_ macros. + return if $macro =~ /^AC_/; + + if (! defined $map{$macro}) + { + warn "aclocal: macro \`$macro' required but not defined\n"; + $exit_status = 1; + return; + } + + $macro_seen{$macro} = 1; + &add_file ($map{$macro}); +} + # Add a file to output. sub add_file { local ($file) = @_; - local ($fullfile) = $file; + # Only add a file once. return if ($file_seen{$file}); $file_seen{$file} = 1; - if (! -f $file) + $output .= $file_contents{$file} . "\n"; + local (@rlist); + while ($file_contents{$file} =~ /$ac_require_rx/g) { - $fullfile = $acdir . '/' . $file . '.m4'; - if (! -f $fullfile) - { - # Maybe the file is an Autoconf built-in. Check the only - # way we know how. Suggestions on how to make this better - # are welcome. FIXME should give file and line number of - # enclosing file. - return if $file =~ /^AC_[A-Z_]+$/; - die "aclocal: file \`$file' not found\n"; - } + print "pushing $1\n"; + push (@rlist, $1); } - open (FILE, $fullfile) - || die "aclocal: couldn't open \`$fullfile': $!\n"; + local ($macro); + foreach $macro (@rlist) + { + &add_macro ($macro); + } +} - local (@rlist); +# Scan a single M4 file. Return contents. +sub scan_file +{ + local ($file) = @_; + + open (FILE, $file) + || die "aclocal: couldn't open \`$file': $!\n"; + local ($contents) = ''; while () { - $output .= $_; + # Ignore `##' lines. + next if /^##/; + + $contents .= $_; - # See if we're defining a macro that was already seen. This - # is mostly a special case for `acinclude.m4'. - if (/AC_DEFUN\(\[?([^])\n]+)\]?/) - { - if ($1 ne $file && $file_seen{$1}) + if (/$ac_defun_rx/) + { + if (defined $map{$1}) { - warn "aclocal: $fullfile: $.: duplicated macro \`$1'\n"; + warn "aclocal: $file: $.: duplicated macro \`$1'\n"; $exit_status = 1; } - $macro_seen{$1} = 1; - } - - # See if some other macro is required. - if (/AC_REQUIRE\(\[?([^])]*)\]?\)/) - { - push (@rlist, $1) unless defined $macro_seen{$1}; + print STDERR "Found macro $1 in $file\n" if $verbosity; + $map{$1} = $file; } } - $output .= "\n"; close (FILE); - foreach $file (@rlist) - { - &add_file ($file); - } + return $contents; } ################################################################ @@ -277,7 +344,7 @@ sub add_file # Write output. sub write_aclocal { - return if ! $output; + return if ! length ($output); print STDERR "Writing aclocal.m4\n" if $verbosity; diff --git a/automake.in b/automake.in index f415151a..000e7628 100755 --- a/automake.in +++ b/automake.in @@ -445,6 +445,12 @@ sub generate_makefile # This must be run after all the sources are scanned. &handle_yacc_lex_cxx; + # This is here for lack of a better place to put it. + if (&variable_defined ('BUILT_SOURCES')) + { + push (@all, '$(BUILT_SOURCES)'); + } + # Re-init SOURCES and OBJECTS. FIXME: other code shouldn't depend # on this (but currently does). $contents{'SOURCES'} = join (' ', @sources); @@ -581,7 +587,7 @@ sub get_object_extension } $xform = 's/\@CONFIG_INCLUDE_SPEC\@/' . $xform . '/go'; $output_vars .= &file_contents_with_transform ($xform, - 'compile-vars'); + 'comp-vars'); $output_rules .= &file_contents ('compile'); &push_phony_cleaners ('compile'); @@ -662,7 +668,7 @@ sub handle_yacc_lex_cxx $output_rules .= ".y.c:\n\t"; if ($yacc_count > 1) { - $output_rules .= '$(INTERLOCK) =yacclockdir $(YLWRAP) y.tab.c $@ $(YACC) $(YFLAGS) $<'; + $output_rules .= '$(INTERLOCK) =yacclockdir $(YLWRAP) "$(YACC)" y.tab.c $*.c y.tab.h $*.h -- $(YFLAGS) $<'; } else { @@ -685,7 +691,7 @@ sub handle_yacc_lex_cxx $output_rules .= ".l.c:\n\t"; if ($lex_count > 1) { - $output_rules .= '$(INTERLOCK) =lexlockdir $(YLWRAP) $(LEX_OUTPUT_ROOT).c $@ $(LEX) $(LFLAGS) $<'; + $output_rules .= '$(INTERLOCK) =lexlockdir $(YLWRAP) "$(LEX)" $(LEX_OUTPUT_ROOT).c $@ -- $(LFLAGS) $<'; } else { @@ -810,6 +816,17 @@ sub handle_source_transform local (@result) = (); foreach (@files) { + # If an automatically-discovered source file is + # mentioned, that is an error. + if (defined $libsources{$_}) + { + # FIXME: saving $_ is stupid. + local ($save) = $_; + &am_line_error ($prefix . $one_file . '_SOURCES', + "automatically discovered file \`$_' should not be explicitly mentioned"); + $_ = $save; + } + # Skip header files, including C++-ish ones. The list # of C++ header extensions comes from Emacs 19.32 # etags. @@ -959,7 +976,7 @@ sub handle_lib_objects sub handle_programs { local (@proglist) = &am_install_var ('-clean', - 'programs', 'PROGRAMS', + 'progs', 'PROGRAMS', 'bin', 'sbin', 'libexec', 'pkglib', 'noinst', 'check'); return if ! @proglist; @@ -1033,7 +1050,7 @@ sub handle_programs sub handle_libraries { local (@liblist) = &am_install_var ('-no-all', '-clean', - 'libraries', 'LIBRARIES', + 'libs', 'LIBRARIES', 'lib', 'pkglib', 'noinst', 'check'); return if ! @liblist; @@ -1275,7 +1292,7 @@ sub handle_texinfo . 's/\@VTI\@/' . $vti . '/g; ' . 's/\@VTEXI\@/' . $vtexi . '/g;' . 's,\@MDDIR\@,' . $conf_pat . ',g;', - 'texi-version'); + 'texi-vers'); &push_phony_cleaners ($vti); } @@ -1318,7 +1335,7 @@ sub handle_texinfo } # Some boilerplate. - $output_vars .= &file_contents ('texinfos-vars'); + $output_vars .= &file_contents ('texi-vars'); $output_rules .= &file_contents ('texinfos'); push (@phony, 'install-info', 'uninstall-info'); @@ -2217,14 +2234,6 @@ sub handle_merge_targets &do_one_merge_target ('info', @info); &do_one_merge_target ('dvi', @dvi); - - if (! &variable_defined ('SUBDIRS') || $relative_dir ne '.') - { - # 'check' must depend on 'all', but not at top level. - # Ditto install. - unshift (@check, 'all'); - unshift (@install, 'all'); - } &do_one_merge_target ('check', @check); &do_one_merge_target ('installcheck', @installcheck); @@ -2410,12 +2419,27 @@ sub do_one_merge_target push (@phony, $name . '-local'); } - $output_rules .= $name . ":"; - if (@values) + local ($done) = 0; + if ($name eq 'check') { - $output_rules .= ' ' . join (' ', @values); + if (! &variable_defined ('SUBDIRS')) + { + # 'check' must depend on 'all', but not when doing + # recursive build. + unshift (@values, 'all'); + } + else + { + # When subdirs are used, do the `all' build and then do + # all the recursive stuff. + $output_rules .= "check: all\n"; + &pretty_print_rule ("\t\$(MAKE)", "\t ", @values); + $done = 1; + } } - $output_rules .= "\n\n"; + + &pretty_print_rule ($name . ":", "\t\t", @values) + unless $done; push (@phony, $name); } @@ -2692,6 +2716,20 @@ sub scan_configure $libsources{'regex.c'} = 1; $libsources{'regex.h'} = 1; } + elsif (/AM_FUNC_MKTIME/) + { + $libsources{'mktime.c'} = 1; + } + elsif (/AM_FUNC_ERROR_AT_LINE/) + { + $libsources{'error.c'} = 1; + $libsources{'error.h'} = 1; + } + elsif (/AM_FUNC_OBSTACK/) + { + $libsources{'obstack.c'} = 1; + $libsources{'obstack.h'} = 1; + } elsif (/LIBOBJS="(.*)\s+\$LIBOBJS"/ || /LIBOBJS="\$LIBOBJS\s+(.*)"/) { @@ -3810,51 +3848,49 @@ sub require_file_internal { if ($strictness >= $mystrict) { + local ($trailer) = ''; + local ($suppress) = 0; + # Only install missing files according to our desired # strictness level. if ($add_missing && -f ($am_dir . '/' . $file)) { + $trailer = "; installing"; + $suppress = 1; # Install the missing file. Symlink if we can, copy # if we must. if ($symlink_exists) { - symlink ($am_dir . '/' . $file, $errfile); + if (! symlink ($am_dir . '/' . $file, $errfile)) + { + $suppress = 0; + $trailer .= "; error while making link: $!\n"; + } } else { - system ('cp', $am_dir . '/' . $file, $errfile); + if (! system ('cp', $am_dir . '/' . $file, $errfile)) + { + $suppress = 0; + $trailer .= "\n error while making link: $!\n"; + } } + } - # FIXME: this is a hack. Should have am_warn. - local ($save) = $exit_status; - if ($is_configure) - { - &am_conf_line_error - ($line, - "required file \"$errfile\" not found; installing"); - } - else - { - &am_line_error - ($line, - "required file \"$errfile\" not found; installing"); - } - $exit_status = $save; + local ($save) = $exit_status; + if ($is_configure) + { + &am_conf_line_error + ($line, + "required file \"$errfile\" not found$trailer"); } else { - # Only an error if strictness constraint violated. - if ($is_configure) - { - &am_conf_line_error - ($line, "required file \"$errfile\" not found"); - } - else - { - &am_line_error - ($line, "required file \"$errfile\" not found"); - } + &am_line_error + ($line, + "required file \"$errfile\" not found$trailer"); } + $exit_status = $save if $suppress; } } } @@ -3885,7 +3921,7 @@ sub require_file sub require_config_file { @require_file_paths = @config_aux_path; - &require_file_internal (0, '', @_); + &require_file_internal (1, '', @_); local ($dir) = $require_file_paths[0]; @config_aux_path = @require_file_paths; if ($dir eq '.') diff --git a/automake.texi b/automake.texi index 394646c5..c22bcda0 100644 --- a/automake.texi +++ b/automake.texi @@ -15,13 +15,15 @@ @set Francois Fran\noexpand\ptexc cois @end tex -@ifinfo -@format -START-INFO-DIR-ENTRY +@dircategory GNU admin +@direntry * automake: (automake). Making Makefile.in's -END-INFO-DIR-ENTRY -@end format -@end ifinfo +@end direntry + +@dircategory Individual utilities +@direntry +* aclocal: (automake)Invoking aclocal Generating aclocal.m4 +@end direntry @ifinfo This file documents GNU automake @value{VERSION} @@ -157,7 +159,7 @@ fully GNU standards-compliant, and do not require @code{perl} in order to be built. Mail suggestions and bug reports for Automake to -bug-gnu-utils@@prep.ai.mit.edu. +@email{bug-gnu-utils@@prep.ai.mit.edu}. @node Invoking Automake @@ -680,8 +682,9 @@ This is required when using automatic de-ANSI-fication, see @ref{ANSI}. @item ud_GNU_GETTEXT This macro is required for packages which use GNU gettext -(@pxref{gettext}). It is distributed with gettext. Automake uses this -macro to ensure that the package meets some of gettext's requirements. +(@pxref{gettext}). It is distributed with gettext. If Automake sees +this macro it ensures that the package meets some of gettext's +requirements. @cvindex ud_GNU_GETTEXT @item AM_MAINTAINER_MODE @@ -739,6 +742,10 @@ If the @code{strtod} function is not available, or does not work correctly (like the one on SunOS 5.4), add @samp{strtod.o} to output variable @code{LIBOBJS}. +@item AM_FUNC_ERROR_AT_LINE +@item AM_FUNC_MKTIME +@item AM_FUNC_OBSTACK + @item AM_C_PROTOTYPES @item AM_HEADER_TIOCGWINSZ_NEEDS_SYS_IOCTL @item AM_INIT_AUTOMAKE @@ -784,7 +791,6 @@ distribution: @example SUBDIRS = lib src doc man -EXTRA_DIST = @@README_ALPHA@@ @end example @code{SUBDIRS} can contain configure substitutions (eg @samp{@@DIRS@@}); @@ -1066,6 +1072,9 @@ Note that the directory holding the @code{ansi2knr} support files must be built before all other directories using these files. Automake does not currently check that this is the case. +Note also that @code{ansi2knr} assumes the source code will be formatted +in a particular way. See the @code{ansi2knr} man page for details. + @node Dependencies @section Automatic dependency tracking @@ -1596,6 +1605,13 @@ notify GNU Make of the new suffixes. This can be done by putting a list of new suffixes in the @code{SUFFIXES} variable. @vindex SUFFIXES +For instance, currently automake does not provide any Java support. If +you wrote a macro to generate @samp{.class} files from @samp{.java} +source files, you would also need to add these suffixes to the list: + +@example +SUFFIXES = .java .class +@end example @node Built @section Built sources diff --git a/compile-vars.am b/comp-vars.am similarity index 100% rename from compile-vars.am rename to comp-vars.am diff --git a/lib/am/Makefile.am b/lib/am/Makefile.am index 2ad35ce0..a689a265 100644 --- a/lib/am/Makefile.am +++ b/lib/am/Makefile.am @@ -9,13 +9,13 @@ SUBDIRS = tests m4 bin_SCRIPTS = automake aclocal info_TEXINFOS = automake.texi -pkgdata_DATA = clean-kr.am clean.am compile-kr.am compile-vars.am \ +pkgdata_DATA = clean-kr.am clean.am compile-kr.am comp-vars.am \ compile.am data.am dejagnu.am depend.am depend2.am dist-vars.am footer.am \ -header.am header-vars.am kr-extra.am libraries.am library.am \ -mans-vars.am program.am programs.am remake-hdr.am remake-subd.am \ +header.am header-vars.am kr-extra.am libs.am library.am \ +mans-vars.am program.am progs.am remake-hdr.am remake-subd.am \ remake.am scripts.am subdirs.am tags.am tags-subd.am tags-clean.am \ -texi-version.am texinfos-vars.am texinfos.am libraries-clean.am \ -programs-clean.am data-clean.am COPYING INSTALL texinfo.tex ansi2knr.c \ +texi-vers.am texi-vars.am texinfos.am libs-clean.am \ +progs-clean.am data-clean.am COPYING INSTALL texinfo.tex ansi2knr.c \ ansi2knr.1 aclocal.m4 lisp.am lisp-clean.am ## These must all be executable when installed. diff --git a/lib/am/comp-vars.am b/lib/am/comp-vars.am new file mode 100644 index 00000000..801b2351 --- /dev/null +++ b/lib/am/comp-vars.am @@ -0,0 +1,22 @@ +## automake - create Makefile.in from Makefile.am +## Copyright (C) 1994, 1995, 1996 Free Software Foundation, Inc. + +## This program is free software; you can redistribute it and/or modify +## it under the terms of the GNU General Public License as published by +## the Free Software Foundation; either version 2, or (at your option) +## any later version. + +## This program is distributed in the hope that it will be useful, +## but WITHOUT ANY WARRANTY; without even the implied warranty of +## MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +## GNU General Public License for more details. + +## You should have received a copy of the GNU General Public License +## along with this program; if not, write to the Free Software +## Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA +## 02111-1307, USA. + +DEFS = @DEFS@ -I. -I$(srcdir) @CONFIG_INCLUDE_SPEC@ +CPPFLAGS = @CPPFLAGS@ +LDFLAGS = @LDFLAGS@ +LIBS = @LIBS@ diff --git a/libraries.am b/lib/am/libs.am similarity index 100% rename from libraries.am rename to lib/am/libs.am diff --git a/programs.am b/lib/am/progs.am similarity index 100% rename from programs.am rename to lib/am/progs.am diff --git a/texi-version.am b/lib/am/texi-vers.am similarity index 100% rename from texi-version.am rename to lib/am/texi-vers.am diff --git a/lib/texinfo.tex b/lib/texinfo.tex index 46b0f452..e8375a31 100644 --- a/lib/texinfo.tex +++ b/lib/texinfo.tex @@ -35,7 +35,7 @@ % This automatically updates the version number based on RCS. \def\deftexinfoversion$#1: #2 ${\def\texinfoversion{#2}} -\deftexinfoversion$Revision: 2.172 $ +\deftexinfoversion$Revision: 2.185 $ \message{Loading texinfo package [Version \texinfoversion]:} % If in a .fmt file, print the version number @@ -46,20 +46,20 @@ % Save some parts of plain tex whose names we will redefine. -\let\ptextilde=\~ -\let\ptexlbrace=\{ -\let\ptexrbrace=\} -\let\ptexdots=\dots -\let\ptexdot=\. -\let\ptexstar=\* -\let\ptexend=\end -\let\ptexbullet=\bullet \let\ptexb=\b +\let\ptexbullet=\bullet \let\ptexc=\c +\let\ptexcomma=\, +\let\ptexdot=\. +\let\ptexdots=\dots +\let\ptexend=\end +\let\ptexequiv = \equiv \let\ptexi=\i +\let\ptexlbrace=\{ +\let\ptexrbrace=\} +\let\ptexstar=\* \let\ptext=\t -\let\ptexl=\l -\let\ptexL=\L +\let\ptextilde=\~ % Be sure we're in horizontal mode when doing a tie, since we make space % equivalent to this in @example-like environments. Otherwise, a space @@ -74,6 +74,7 @@ } \let\~ = \tie % And make it available as @~. + \message{Basics,} \chardef\other=12 @@ -103,10 +104,9 @@ \hyphenation{eshell} % Margin to add to right of even pages, to left of odd pages. -\newdimen \bindingoffset \bindingoffset=0pt -\newdimen \normaloffset \normaloffset=\hoffset +\newdimen \bindingoffset +\newdimen \normaloffset \newdimen\pagewidth \newdimen\pageheight -\pagewidth=\hsize \pageheight=\vsize % Sometimes it is convenient to have everything in the transcript file % and nothing on the terminal. We don't just call \tracingall here, @@ -127,7 +127,7 @@ \newdimen\cornerlong \newdimen\cornerthick \newdimen \topandbottommargin \newdimen \outerhsize \newdimen \outervsize -\cornerlong=1pc\cornerthick=.3pt % These set size of cropmarks +\cornerlong=1pc\cornerthick=.3pt % These set size of cropmarks \outerhsize=7in %\outervsize=9.5in % Alternative @smallbook page size is 9.25in @@ -137,15 +137,24 @@ %---------------------End change----------------------- % \onepageout takes a vbox as an argument. Note that \pagecontents -% does insertions itself, but you have to call it yourself. +% does insertions, but you have to call it yourself. \chardef\PAGE=255 \output={\onepageout{\pagecontents\PAGE}} -\def\onepageout#1{\hoffset=\normaloffset -\ifodd\pageno \advance\hoffset by \bindingoffset -\else \advance\hoffset by -\bindingoffset\fi -{\escapechar=`\\\relax % makes sure backslash is used in output files. -\shipout\vbox{{\let\hsize=\pagewidth \makeheadline} \pagebody{#1}% -{\let\hsize=\pagewidth \makefootline}}}% -\advancepageno \ifnum\outputpenalty>-20000 \else\dosupereject\fi} +\def\onepageout#1{% + \hoffset=\normaloffset + \ifodd\pageno \advance\hoffset by \bindingoffset + \else \advance\hoffset by -\bindingoffset\fi + {% + \escapechar = `\\ % use backslash in output files. + \indexdummies + \shipout\vbox{% + {\let\hsize=\pagewidth \makeheadline}% + \pagebody{#1}% + {\let\hsize=\pagewidth \makefootline}% + }% + }% + \advancepageno + \ifnum\outputpenalty>-20000 \else\dosupereject\fi +} %%%% For @cropmarks command %%%% @@ -157,8 +166,8 @@ % \def\croppageout#1{\hoffset=0pt % make sure this doesn't mess things up {\escapechar=`\\\relax % makes sure backslash is used in output files. - \shipout - \vbox to \outervsize{\hsize=\outerhsize + \shipout + \vbox to \outervsize{\hsize=\outerhsize \vbox{\line{\ewtop\hfill\ewtop}} \nointerlineskip \line{\vbox{\moveleft\cornerthick\nstop} @@ -166,19 +175,19 @@ \vbox{\moveright\cornerthick\nstop}} \vskip \topandbottommargin \centerline{\ifodd\pageno\hskip\bindingoffset\fi - \vbox{ - {\let\hsize=\pagewidth \makeheadline} - \pagebody{#1} - {\let\hsize=\pagewidth \makefootline}} - \ifodd\pageno\else\hskip\bindingoffset\fi} - \vskip \topandbottommargin plus1fill minus1fill + \vbox{ + {\let\hsize=\pagewidth \makeheadline} + \pagebody{#1} + {\let\hsize=\pagewidth \makefootline}} + \ifodd\pageno\else\hskip\bindingoffset\fi} + \vskip \topandbottommargin plus1fill minus1fill \boxmaxdepth\cornerthick \line{\vbox{\moveleft\cornerthick\nsbot} \hfill \vbox{\moveright\cornerthick\nsbot}} \nointerlineskip \vbox{\line{\ewbot\hfill\ewbot}} - }} + }} \advancepageno \ifnum\outputpenalty>-20000 \else\dosupereject\fi} % @@ -366,11 +375,43 @@ %\def\'{{'}} % Used to generate quoted braces. - \def\mylbrace {{\tt \char '173}} \def\myrbrace {{\tt \char '175}} \let\{=\mylbrace \let\}=\myrbrace +\begingroup + % Definitions to produce actual \{ & \} command in an index. + \catcode`\{ = 12 \catcode`\} = 12 + \catcode`\[ = 1 \catcode`\] = 2 + \catcode`\@ = 0 \catcode`\\ = 12 + @gdef@lbracecmd[\{]% + @gdef@rbracecmd[\}]% +@endgroup + +% Accents: @, @dotaccent @ringaccent @ubaraccent @udotaccent +% Others are defined by plain TeX: @` @' @" @^ @~ @= @v @H. +\let\, = \c +\let\dotaccent = \. +\def\ringaccent#1{{\accent23 #1}} +\let\tieaccent = \t +\let\ubaraccent = \b +\let\udotaccent = \d + +% Other special characters: @questiondown @exclamdown +% Plain TeX defines: @AA @AE @O @OE @L (and lowercase versions) @ss. +\def\questiondown{?`} +\def\exclamdown{!`} + +% Dotless i and dotless j, used for accents. +\def\imacro{i} +\def\jmacro{j} +\def\dotless#1{% + \def\temp{#1}% + \ifx\temp\imacro \ptexi + \else\ifx\temp\jmacro \j + \else \errmessage{@dotless can be used only with i or j}% + \fi\fi +} % @: forces normal size whitespace following. \def\:{\spacefactor=1000 } @@ -579,7 +620,7 @@ where each line of input produces a line of output.} % @sp n outputs n lines of vertical space \def\sp{\parsearg\spxxx} -\def\spxxx #1{\par \vskip #1\baselineskip} +\def\spxxx #1{\vskip #1\baselineskip} % @comment ...line which is ignored... % @c is the same as @comment @@ -592,6 +633,9 @@ where each line of input produces a line of output.} \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{% @@ -681,10 +725,15 @@ where each line of input produces a line of output.} \def\menu{\doignore{menu}} \def\direntry{\doignore{direntry}} +% Also ignore @macro ... @end macro. The user must run texi2dvi, +% which runs makeinfo to do macro expansion. Ignore @unmacro, too. +\def\macro{\doignore{macro}} +\let\unmacro = \comment + + % @dircategory CATEGORY -- specify a category of the dir file % which this file should belong to. Ignore this in TeX. - -\def\dircategory{\comment} +\let\dircategory = \comment % Ignore text until a line `@end #1'. % @@ -717,6 +766,7 @@ where each line of input produces a line of output.} \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.ai.mit.edu/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.} @@ -822,9 +872,9 @@ where each line of input produces a line of output.} % @value{foo} gets the text saved in variable foo. % \def\value#1{\expandafter - \ifx\csname SET#1\endcsname\relax - {\{No value for ``#1''\}} - \else \csname SET#1\endcsname \fi} + \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. @@ -924,6 +974,7 @@ where each line of input produces a line of output.} \expandafter\expandafter\expandafter\appendixsetref{\lastnode}\fi \global\let\lastnode=\relax} +% @refill is a no-op. \let\refill=\relax % @setfilename is done at the beginning of every texinfo file. @@ -938,16 +989,13 @@ where each line of input produces a line of output.} \comment % Ignore the actual filename. } +% @bye. \outer\def\bye{\pagealignmacro\tracingstats=1\ptexend} -\def\inforef #1{\inforefzzz #1,,,,**} -\def\inforefzzz #1,#2,#3,#4**{\putwordSee{} \putwordInfo{} \putwordfile{} \file{\ignorespaces #3{}}, - node \samp{\ignorespaces#1{}}} - -\def\macro#1{\begingroup\ignoresections\catcode`\#=6\def\macrotemp{#1}\parsearg\macroxxx} -\def\macroxxx#1#2 \end macro{% -\expandafter\gdef\macrotemp#1{#2}% -\endgroup} +% \def\macro#1{\begingroup\ignoresections\catcode`\#=6\def\macrotemp{#1}\parsearg\macroxxx} +% \def\macroxxx#1#2 \end macro{% +% \expandafter\gdef\macrotemp#1{#2}% +% \endgroup} %\def\linemacro#1{\begingroup\ignoresections\catcode`\#=6\def\macrotemp{#1}\parsearg\linemacroxxx} %\def\linemacroxxx#1#2 \end linemacro{% @@ -959,6 +1007,7 @@ where each line of input produces a line of output.} %\def\butfirst#1{} + \message{fonts,} % Font-change commands. @@ -988,7 +1037,7 @@ where each line of input produces a line of output.} \fi % Support font families that don't use the same naming scheme as CM. \def\rmshape{r} -\def\rmbshape{bx} %where the normal face is bold +\def\rmbshape{bx} %where the normal face is bold \def\bfshape{b} \def\bxshape{bx} \def\ttshape{tt} @@ -1028,7 +1077,7 @@ where each line of input produces a line of output.} \setfont\deftt\ttshape{10}{\magstep1} \def\df{\let\tentt=\deftt \let\tenbf = \defbf \bf} -% Fonts for indices and small examples. +% 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 @@ -1045,7 +1094,7 @@ where each line of input produces a line of output.} \font\indi=cmmi9 \font\indsy=cmsy9 -% Fonts for headings +% Chapter (and unnumbered) fonts (17.28pt). \setfont\chaprm\rmbshape{12}{\magstep2} \setfont\chapit\itbshape{10}{\magstep3} \setfont\chapsl\slbshape{10}{\magstep3} @@ -1057,6 +1106,7 @@ where each line of input produces a line of output.} \font\chapi=cmmi12 scaled \magstep2 \font\chapsy=cmsy10 scaled \magstep3 +% Section fonts (14.4pt). \setfont\secrm\rmbshape{12}{\magstep1} \setfont\secit\itbshape{10}{\magstep2} \setfont\secsl\slbshape{10}{\magstep2} @@ -1074,14 +1124,15 @@ where each line of input produces a line of output.} % \setfont\ssectt\ttshape{10}{\magstep1} % \setfont\ssecsf\sfshape{10}{\magstep1} -%\setfont\ssecrm\bfshape{10}{1315} % Note the use of cmb rather than cmbx. -%\setfont\ssecit\itshape{10}{1315} % Also, the size is a little larger than -%\setfont\ssecsl\slshape{10}{1315} % being scaled magstep1. +%\setfont\ssecrm\bfshape{10}{1315} % Note the use of cmb rather than cmbx. +%\setfont\ssecit\itshape{10}{1315} % Also, the size is a little larger than +%\setfont\ssecsl\slshape{10}{1315} % being scaled magstep1. %\setfont\ssectt\ttshape{10}{1315} %\setfont\ssecsf\sfshape{10}{1315} %\let\ssecbf=\ssecrm +% Subsection fonts (13.15pt). \setfont\ssecrm\rmbshape{12}{\magstephalf} \setfont\ssecit\itbshape{10}{1315} \setfont\ssecsl\slbshape{10}{1315} @@ -1127,22 +1178,23 @@ where each line of input produces a line of output.} \let\tenrm=\chaprm \let\tenit=\chapit \let\tensl=\chapsl \let\tenbf=\chapbf \let\tentt=\chaptt \let\smallcaps=\chapsc \let\tensf=\chapsf \let\teni=\chapi \let\tensy=\chapsy \let\tenttsl=\chapttsl - \resetmathfonts} + \resetmathfonts \setleading{19pt}} \def\secfonts{% \let\tenrm=\secrm \let\tenit=\secit \let\tensl=\secsl \let\tenbf=\secbf \let\tentt=\sectt \let\smallcaps=\secsc \let\tensf=\secsf \let\teni=\seci \let\tensy=\secsy \let\tenttsl=\secttsl - \resetmathfonts} + \resetmathfonts \setleading{16pt}} \def\subsecfonts{% \let\tenrm=\ssecrm \let\tenit=\ssecit \let\tensl=\ssecsl \let\tenbf=\ssecbf \let\tentt=\ssectt \let\smallcaps=\ssecsc \let\tensf=\ssecsf \let\teni=\sseci \let\tensy=\ssecsy \let\tenttsl=\ssecttsl - \resetmathfonts} + \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} + \resetmathfonts \setleading{12pt}} % Set up the default fonts, so we can use them for creating boxes. % @@ -1186,11 +1238,21 @@ where each line of input produces a line of output.} } \let\ttfont=\t \def\samp #1{`\tclose{#1}'\null} -\def\key #1{{\ttsl \nohyphenation \uppercase{#1}}\null} +\setfont\smallrm\rmshape{8}{1000} +\font\smallsy=cmsy9 +\def\key#1{{\smallrm\textfont2=\smallsy \leavevmode\hbox{% + \raise0.4pt\hbox{$\langle$}\kern-.08em\vtop{% + \vbox{\hrule\kern-0.4pt + \hbox{\raise0.4pt\hbox{\vphantom{$\langle$}}#1}}% + \kern-0.4pt\hrule}% + \kern-.06em\raise0.4pt\hbox{$\rangle$}}}} +% The old definition, with no lozenge: +%\def\key #1{{\ttsl \nohyphenation \uppercase{#1}}\null} \def\ctrl #1{{\tt \rawbackslash \hat}#1} \let\file=\samp \let\url=\samp % perhaps include a hypertex \special eventually +\def\email#1{$\langle${\tt #1}$\rangle$} % @code is a modification of @t, % which makes spaces the same size as normal in the surrounding text. @@ -1222,7 +1284,7 @@ where each line of input produces a line of output.} % Unfortunately, TeX uses one parameter (\hyphenchar) to control % both hyphenation at - and hyphenation within words. % We must therefore turn them both off (\tclose does that) -% and arrange explicitly to hyphenate an a dash. +% and arrange explicitly to hyphenate at a dash. % -- rms. { \catcode`\-=\active @@ -1267,12 +1329,19 @@ where each line of input produces a line of output.} \def\kbd#1{\def\look{#1}\expandafter\kbdfoo\look??\par} -\def\l#1{{\li #1}\null} % +% @l was never documented to mean ``switch to the Lisp font'', +% and it is not used as such in any manual I can find. We need it for +% Polish suppressed-l. --karl, 22sep96. +%\def\l#1{{\li #1}\null} -\def\r#1{{\rm #1}} % roman font +\def\r#1{{\rm #1}} % roman font % Use of \lowercase was suggested. -\def\sc#1{{\smallcaps#1}} % smallcaps font -\def\ii#1{{\it #1}} % italic font +\def\sc#1{{\smallcaps#1}} % smallcaps font +\def\ii#1{{\it #1}} % italic font + +% @pounds{} is a sterling sign. +\def\pounds{{\it\$}} + \message{page headings,} @@ -1287,7 +1356,7 @@ where each line of input produces a line of output.} \def\shorttitlepage{\parsearg\shorttitlepagezzz} \def\shorttitlepagezzz #1{\begingroup\hbox{}\vskip 1.5in \chaprm \centerline{#1}% - \endgroup\page\hbox{}\page} + \endgroup\page\hbox{}\page} \def\titlepage{\begingroup \parindent=0pt \textfonts \let\subtitlerm=\tenrm @@ -1304,9 +1373,9 @@ where each line of input produces a line of output.} % Now you can print the title using @title. \def\title{\parsearg\titlezzz}% \def\titlezzz##1{\leftline{\titlefont{##1}} - % print a rule at the page bottom also. - \finishedtitlepagefalse - \vskip4pt \hrule height 4pt width \hsize \vskip4pt}% + % print a rule at the page bottom also. + \finishedtitlepagefalse + \vskip4pt \hrule height 4pt width \hsize \vskip4pt}% % No rule at page bottom unless we print one at the top with @title. \finishedtitlepagetrue % @@ -1324,7 +1393,7 @@ where each line of input produces a line of output.} \let\oldpage = \page \def\page{% \iffinishedtitlepage\else - \finishtitlepage + \finishtitlepage \fi \oldpage \let\page = \oldpage @@ -1412,14 +1481,15 @@ where each line of input produces a line of output.} % }% unbind the catcode of @. -% @headings double turns headings on for double-sided printing. -% @headings single turns headings on for single-sided printing. -% @headings off turns them off. -% @headings on same as @headings double, retained for compatibility. -% @headings after turns on double-sided headings after this page. -% @headings doubleafter turns on double-sided headings after this page. +% @headings double turns headings on for double-sided printing. +% @headings single turns headings on for single-sided printing. +% @headings off turns them off. +% @headings on same as @headings double, retained for compatibility. +% @headings after turns on double-sided headings after this page. +% @headings doubleafter turns on double-sided headings after this page. % @headings singleafter turns on single-sided headings after this page. -% By default, they are off. +% By default, they are off at the start of a document, +% and turned `on' after @end titlepage. \def\headings #1 {\csname HEADINGS#1\endcsname} @@ -1433,22 +1503,24 @@ where each line of input produces a line of output.} % title on inside top of left hand pages, and page numbers on outside top % edge of all pages. \def\HEADINGSdouble{ -%\pagealignmacro \global\pageno=1 \global\evenfootline={\hfil} \global\oddfootline={\hfil} \global\evenheadline={\line{\folio\hfil\thistitle}} \global\oddheadline={\line{\thischapter\hfil\folio}} +\global\let\contentsalignmacro = \chapoddpage } +\let\contentsalignmacro = \chappager + % For single-sided printing, chapter title goes across top left of page, % page number on top right. \def\HEADINGSsingle{ -%\pagealignmacro \global\pageno=1 \global\evenfootline={\hfil} \global\oddfootline={\hfil} \global\evenheadline={\line{\thischapter\hfil\folio}} \global\oddheadline={\line{\thischapter\hfil\folio}} +\global\let\contentsalignmacro = \chappager } \def\HEADINGSon{\HEADINGSdouble} @@ -1459,6 +1531,7 @@ where each line of input produces a line of output.} \global\oddfootline={\hfil} \global\evenheadline={\line{\folio\hfil\thistitle}} \global\oddheadline={\line{\thischapter\hfil\folio}} +\global\let\contentsalignmacro = \chapoddpage } \def\HEADINGSsingleafter{\let\HEADINGShook=\HEADINGSsinglex} @@ -1467,6 +1540,7 @@ where each line of input produces a line of output.} \global\oddfootline={\hfil} \global\evenheadline={\line{\thischapter\hfil\folio}} \global\oddheadline={\line{\thischapter\hfil\folio}} +\global\let\contentsalignmacro = \chappager } % Subroutines used in generating headings @@ -1490,6 +1564,7 @@ July\or August\or September\or October\or November\or December\fi \def\settitle{\parsearg\settitlezzz} \def\settitlezzz #1{\gdef\thistitle{#1}} + \message{tables,} % @tabs -- simple alignment @@ -1812,6 +1887,7 @@ July\or August\or September\or October\or November\or December\fi % current hsize to be used for each column. You may use as many % columns as desired. + % Or use a template: % @multitable {Column 1 template} {Column 2 template} {Column 3 template} % @item ... @@ -1832,7 +1908,7 @@ July\or August\or September\or October\or November\or December\fi % with nothing between them for as many times as empty columns are needed, % ie, @tab@tab@tab will produce two empty columns. -% @item, @tab, @multicolumn or @endmulticolumn do not need to be on their +% @item, @tab, @multitable or @end multitable do not need to be on their % own lines, but it will not hurt if they are. % Sample multitable: @@ -1898,7 +1974,8 @@ July\or August\or September\or October\or November\or December\fi % We don't need this so we don't use it. \else \global\advance\colcount by1 - \setbox0=\hbox{#1}% + \setbox0=\hbox{#1 }% Add a normal word space as a separator; + % typically that is always in the input, anyway. \expandafter\xdef\csname col\the\colcount\endcsname{\the\wd0}% \fi% \fi% @@ -1959,7 +2036,7 @@ July\or August\or September\or October\or November\or December\fi % In either case we will make \leftskip=\multitablecolspace: \leftskip=\multitablecolspace \fi -\noindent##}\cr% +\noindent##\multistrut}\cr% % \everycr will reset column counter, \colcount, at the end of % each line. Every column entry will cause \colcount to advance by one. % The table preamble @@ -1972,11 +2049,10 @@ July\or August\or September\or October\or November\or December\fi \def\setmultitablespacing{% test to see if user has set \multitablelinespace. % If so, do nothing. If not, give it an appropriate dimension based on % current baselineskip. -\setbox0=\vbox{Xy} \ifdim\multitablelinespace=0pt %% strut to put in table in case some entry doesn't have descenders, %% to keep lines equally spaced -\gdef\multistrut{\vrule height\ht0 depth\dp0 width0pt\relax} +\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. @@ -1993,6 +2069,8 @@ width0pt\relax} \fi \global\advance\multitableparskip-7pt %% to keep parskip somewhat smaller %% than skip between lines in the table. \fi} + + \message{indexing,} % Index generation facilities @@ -2005,14 +2083,14 @@ width0pt\relax} \fi % It automatically defines \fooindex such that % \fooindex ...rest of line... puts an entry in the index foo. % It also defines \fooindfile to be the number of the output channel for -% the file that accumulates this index. The file's extension is foo. +% the file that accumulates this index. The file's extension is foo. % The name of an index should be no more than 2 characters long % for the sake of vms. \def\newindex #1{ \expandafter\newwrite \csname#1indfile\endcsname% Define number for output file -\openout \csname#1indfile\endcsname \jobname.#1 % Open the file -\expandafter\xdef\csname#1index\endcsname{% % Define \xxxindex +\openout \csname#1indfile\endcsname \jobname.#1 % Open the file +\expandafter\xdef\csname#1index\endcsname{% % Define \xxxindex \noexpand\doindex {#1}} } @@ -2024,8 +2102,8 @@ width0pt\relax} \fi \def\newcodeindex #1{ \expandafter\newwrite \csname#1indfile\endcsname% Define number for output file -\openout \csname#1indfile\endcsname \jobname.#1 % Open the file -\expandafter\xdef\csname#1index\endcsname{% % Define \xxxindex +\openout \csname#1indfile\endcsname \jobname.#1 % Open the file +\expandafter\xdef\csname#1index\endcsname{% % Define \xxxindex \noexpand\docodeindex {#1}} } @@ -2036,7 +2114,7 @@ width0pt\relax} \fi \def\synindex #1 #2 {% \expandafter\let\expandafter\synindexfoo\expandafter=\csname#2indfile\endcsname \expandafter\let\csname#1indfile\endcsname=\synindexfoo -\expandafter\xdef\csname#1index\endcsname{% % Define \xxxindex +\expandafter\xdef\csname#1index\endcsname{% % Define \xxxindex \noexpand\doindex {#2}}% } @@ -2045,7 +2123,7 @@ width0pt\relax} \fi \def\syncodeindex #1 #2 {% \expandafter\let\expandafter\synindexfoo\expandafter=\csname#2indfile\endcsname \expandafter\let\csname#1indfile\endcsname=\synindexfoo -\expandafter\xdef\csname#1index\endcsname{% % Define \xxxindex +\expandafter\xdef\csname#1index\endcsname{% % Define \xxxindex \noexpand\docodeindex {#2}}% } @@ -2093,24 +2171,31 @@ width0pt\relax} \fi \def\L{\realbackslash L}% \def\ss{\realbackslash ss}% % Take care of texinfo commands likely to appear in an index entry. +% (Must be a way to avoid doing expansion at all, and thus not have to +% laboriously list every single command here.) +\def\@{@}% will be @@ when we switch to @ as escape char. +%\let\{ = \lbracecmd +%\let\} = \rbracecmd \def\_{{\realbackslash _}}% \def\w{\realbackslash w }% \def\bf{\realbackslash bf }% -\def\rm{\realbackslash rm }% +%\def\rm{\realbackslash rm }% \def\sl{\realbackslash sl }% \def\sf{\realbackslash sf}% \def\tt{\realbackslash tt}% \def\gtr{\realbackslash gtr}% \def\less{\realbackslash less}% \def\hat{\realbackslash hat}% -\def\char{\realbackslash char}% +%\def\char{\realbackslash char}% \def\TeX{\realbackslash TeX}% \def\dots{\realbackslash dots }% \def\copyright{\realbackslash copyright }% \def\tclose##1{\realbackslash tclose {##1}}% \def\code##1{\realbackslash code {##1}}% +\def\dotless##1{\realbackslash dotless {##1}}% \def\samp##1{\realbackslash samp {##1}}% -\def\t##1{\realbackslash r {##1}}% +\def\,##1{\realbackslash ,{##1}}% +\def\t##1{\realbackslash t {##1}}% \def\r##1{\realbackslash r {##1}}% \def\i##1{\realbackslash i {##1}}% \def\b##1{\realbackslash b {##1}}% @@ -2138,6 +2223,7 @@ width0pt\relax} \fi \def\indexnofonts{% % Just ignore accents. +\let\,=\indexdummyfont \let\"=\indexdummyfont \let\`=\indexdummyfont \let\'=\indexdummyfont @@ -2150,6 +2236,7 @@ width0pt\relax} \fi \let\u=\indexdummyfont \let\v=\indexdummyfont \let\H=\indexdummyfont +\let\dotless=\indexdummyfont % Take care of the plain tex special European modified letters. \def\oe{oe}% \def\ae{ae}% @@ -2183,6 +2270,7 @@ width0pt\relax} \fi \let\var=\indexdummyfont \let\TeX=\indexdummytex \let\dots=\indexdummydots +\def\@{@}% } % To define \realbackslash, we must make \ not be an escape. @@ -2198,29 +2286,37 @@ width0pt\relax} \fi % workhorse for all \fooindexes % #1 is name of index, #2 is stuff to put there \def\doind #1#2{% -% Put the index entry in the margin if desired. -\ifx\SETmarginindex\relax\else% -\insert\margin{\hbox{\vrule height8pt depth3pt width0pt #2}}% -\fi% -{\count10=\lastpenalty % -{\indexdummies % Must do this here, since \bf, etc expand at this stage -\escapechar=`\\% -{\let\folio=0% Expand all macros now EXCEPT \folio -\def\rawbackslashxx{\indexbackslash}% \indexbackslash isn't defined now -% so it will be output as is; and it will print as backslash in the indx. -% -% Now process the index-string once, with all font commands turned off, -% to get the string to sort the index by. -{\indexnofonts -\xdef\temp1{#2}% -}% -% Now produce the complete index entry. We process the index-string again, -% this time with font commands expanded, to get what to print in the index. -\edef\temp{% -\write \csname#1indfile\endcsname{% -\realbackslash entry {\temp1}{\folio}{#2}}}% -\temp }% -}\penalty\count10}} + % Put the index entry in the margin if desired. + \ifx\SETmarginindex\relax\else + \insert\margin{\hbox{\vrule height8pt depth3pt width0pt #2}}% + \fi + {% + \count255=\lastpenalty + {% + \indexdummies % Must do this here, since \bf, etc expand at this stage + \escapechar=`\\ + {% + \let\folio=0 % We will expand all macros now EXCEPT \folio. + \def\rawbackslashxx{\indexbackslash}% \indexbackslash isn't defined now + % so it will be output as is; and it will print as backslash. + % + % First process the index-string with all font commands turned off + % to get the string to sort by. + {\indexnofonts \xdef\indexsorttmp{#2}}% + % + % 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}}% + }% + \temp + }% + }% + \penalty\count255 + }% +} \def\dosubind #1#2#3{% {\count10=\lastpenalty % @@ -2281,26 +2377,19 @@ width0pt\relax} \fi \def\printindex{\parsearg\doprintindex} -\def\doprintindex#1{% - \tex - \dobreak \chapheadingskip {10000} - \catcode`\%=\other\catcode`\&=\other\catcode`\#=\other - \catcode`\$=\other - \catcode`\~=\other - \indexbreaks +\def\doprintindex#1{\begingroup + \dobreak \chapheadingskip{10000}% % - % The following don't help, since the chars were translated - % when the raw index was written, and their fonts were discarded - % due to \indexnofonts. - %\catcode`\"=\active - %\catcode`\^=\active - %\catcode`\_=\active - %\catcode`\|=\active - %\catcode`\<=\active - %\catcode`\>=\active - % % - \def\indexbackslash{\rawbackslashxx} - \indexfonts\rm \tolerance=9500 \advance\baselineskip -1pt + \indexfonts \rm + \tolerance = 9500 + \indexbreaks + \def\indexbackslash{\rawbackslashxx}% + % Index files are almost Texinfo source, but we use \ as the escape + % character. It would be better to use @, but that's too big a change + % to make right now. + \catcode`\\ = 0 + \catcode`\@ = 11 + \escapechar = `\\ \begindoublecolumns % % See if the index file exists and is nonempty. @@ -2311,7 +2400,7 @@ width0pt\relax} \fi % index. The easiest way to prevent this problem is to make sure % there is some text. (Index is nonexistent) - \else + \else % % If the index file exists but is empty, then \openin leaves \ifeof % false. We have to make TeX try to read something from the file, so @@ -2325,8 +2414,7 @@ width0pt\relax} \fi \fi \closein 1 \enddoublecolumns - \Etex -} +\endgroup} % These macros are used by the sorted index file itself. % Change them to control the appearance of the index. @@ -2417,15 +2505,15 @@ width0pt\relax} \fi \noindent\hskip\secondaryindent\hbox{#1}\indexdotfill #2\par }} -%% Define two-column mode, which is used in indexes. -%% Adapted from the TeXbook, page 416. -\catcode `\@=11 +% Define two-column mode, which we use to typeset indexes. +% Adapted from the TeXbook, page 416, which is to say, +% the manmac.tex format used to print the TeXbook itself. +\catcode`\@=11 \newbox\partialpage - \newdimen\doublecolumnhsize -\def\begindoublecolumns{\begingroup +\def\begindoublecolumns{\begingroup % ended by \enddoublecolumns % Grab any single-column material above us. \output = {\global\setbox\partialpage =\vbox{\unvbox255\kern -\topskip \kern \baselineskip}}% @@ -2458,51 +2546,51 @@ width0pt\relax} \fi % Double the \vsize as well. (We don't need a separate register here, % since nobody clobbers \vsize.) \vsize = 2\vsize - \doublecolumnpagegoal } - -\def\enddoublecolumns{\eject \endgroup \pagegoal=\vsize \unvbox\partialpage} - -\def\doublecolumnsplit{\splittopskip=\topskip \splitmaxdepth=\maxdepth - \global\dimen@=\pageheight \global\advance\dimen@ by-\ht\partialpage - \global\setbox1=\vsplit255 to\dimen@ \global\setbox0=\vbox{\unvbox1} - \global\setbox3=\vsplit255 to\dimen@ \global\setbox2=\vbox{\unvbox3} - \ifdim\ht0>\dimen@ \setbox255=\vbox{\unvbox0\unvbox2} \global\setbox255=\copy5 \fi - \ifdim\ht2>\dimen@ \setbox255=\vbox{\unvbox0\unvbox2} \global\setbox255=\copy5 \fi +\def\doublecolumnout{% + \splittopskip=\topskip \splitmaxdepth=\maxdepth + % Get the available space for the double columns -- the normal + % (undoubled) page height minus any material left over from the + % previous page. + \dimen@=\pageheight \advance\dimen@ by-\ht\partialpage + % box0 will be the left-hand column, box1 the right. + \setbox0=\vsplit255 to\dimen@ \setbox2=\vsplit255 to\dimen@ + \onepageout\pagesofar + \unvbox255 \penalty\outputpenalty } -\def\doublecolumnpagegoal{% - \dimen@=\vsize \advance\dimen@ by-2\ht\partialpage \global\pagegoal=\dimen@ +\def\pagesofar{% + % The contents of the output page -- any previous material, + % followed by the two boxes we just split. + \unvbox\partialpage + \hsize = \doublecolumnhsize + \wd0=\hsize \wd2=\hsize \hbox to\pagewidth{\box0\hfil\box2}% } -\def\pagesofar{\unvbox\partialpage % - \hsize=\doublecolumnhsize % have to restore this since output routine - \wd0=\hsize \wd2=\hsize \hbox to\pagewidth{\box0\hfil\box2}} -\def\doublecolumnout{% - \setbox5=\copy255 - {\vbadness=10000 \doublecolumnsplit} - \ifvbox255 - \setbox0=\vtop to\dimen@{\unvbox0} - \setbox2=\vtop to\dimen@{\unvbox2} - \onepageout\pagesofar \unvbox255 \penalty\outputpenalty - \else - \setbox0=\vbox{\unvbox5} - \ifvbox0 - \dimen@=\ht0 \advance\dimen@ by\topskip \advance\dimen@ by-\baselineskip - \divide\dimen@ by2 \splittopskip=\topskip \splitmaxdepth=\maxdepth - {\vbadness=10000 - \loop \global\setbox5=\copy0 - \setbox1=\vsplit5 to\dimen@ - \setbox3=\vsplit5 to\dimen@ - \ifvbox5 \global\advance\dimen@ by1pt \repeat - \setbox0=\vbox to\dimen@{\unvbox1} - \setbox2=\vbox to\dimen@{\unvbox3} - \global\setbox\partialpage=\vbox{\pagesofar} - \doublecolumnpagegoal - } - \fi - \fi +\def\enddoublecolumns{% + \output={\balancecolumns}\eject % split what we have + \endgroup + % Back to normal single-column typesetting, but take account of the + % fact that we just accumulated some stuff on the output page. + \pagegoal=\vsize +} +\def\balancecolumns{% + % Called on the last page of the double column material. + \setbox0=\vbox{\unvbox255}% + \dimen@ = \ht0 + \advance\dimen@ by \topskip + \advance\dimen@ by-\baselineskip + \divide\dimen@ by 2 + \splittopskip = \topskip + % Loop until we get a decent breakpoint. + {\vbadness=10000 \loop \global\setbox3=\copy0 + \global\setbox1=\vsplit3 to\dimen@ + \ifdim\ht3>\dimen@ \global\advance\dimen@ by1pt \repeat}% + \setbox0=\vbox to\dimen@{\unvbox1}% + \setbox2=\vbox to\dimen@{\unvbox3}% + \pagesofar } - \catcode `\@=\other + + \message{sectioning,} % Define chapters, sections, etc. @@ -2780,7 +2868,7 @@ width0pt\relax} \fi \outer\def\unnumberedsubsec{\parsearg\unnumberedsubsecyyy} \def\unnumberedsubsecyyy #1{\unnmhead2{#1}} %normally calls unnumberedsubseczzz \def\unnumberedsubseczzz #1{\seccheck{unnumberedsubsec}% -\plainsecheading {#1}\gdef\thissection{#1}% +\plainsubsecheading {#1}\gdef\thissection{#1}% {\chapternofonts% \edef\temp{{\realbackslash unnumbsubsecentry{#1}{\noexpand\folio}}}% \escapechar=`\\% @@ -2825,7 +2913,7 @@ width0pt\relax} \fi \outer\def\unnumberedsubsubsec{\parsearg\unnumberedsubsubsecyyy} \def\unnumberedsubsubsecyyy #1{\unnmhead3{#1}} %normally unnumberedsubsubseczzz \def\unnumberedsubsubseczzz #1{\seccheck{unnumberedsubsubsec}% -\plainsecheading {#1}\gdef\thissection{#1}% +\plainsubsubsecheading {#1}\gdef\thissection{#1}% {\chapternofonts% \edef\temp{{\realbackslash unnumbsubsubsecentry{#1}{\noexpand\folio}}}% \escapechar=`\\% @@ -2863,10 +2951,10 @@ width0pt\relax} \fi % NOTE on use of \vbox for chapter headings, section headings, and % such: -% 1) We use \vbox rather than the earlier \line to permit -% overlong headings to fold. -% 2) \hyphenpenalty is set to 10000 because hyphenation in a -% heading is obnoxious; this forbids it. +% 1) We use \vbox rather than the earlier \line to permit +% overlong headings to fold. +% 2) \hyphenpenalty is set to 10000 because hyphenation in a +% heading is obnoxious; this forbids it. % 3) Likewise, headings look best if no \parindent is used, and % if justification is not attempted. Hence \raggedright. @@ -2884,11 +2972,10 @@ width0pt\relax} \fi \parindent=0pt\raggedright \rm #1\hfill}}\bigskip \par\penalty 200} -\def\heading{\parsearg\secheadingi} - -\def\subheading{\parsearg\subsecheadingi} - -\def\subsubheading{\parsearg\subsubsecheadingi} +% @heading, @subheading, @subsubheading. +\def\heading{\parsearg\plainsecheading} +\def\subheading{\parsearg\plainsubsecheading} +\def\subsubheading{\parsearg\plainsubsubsecheading} % These macros generate a chapter, section, etc. heading only % (including whitespace, linebreaking, etc. around it), @@ -2902,7 +2989,7 @@ width0pt\relax} \fi %%% Define plain chapter starts, and page on/off switching for it % Parameter controlling skip before chapter headings (if needed) -\newskip \chapheadingskip \chapheadingskip = 30pt plus 8pt minus 4pt +\newskip\chapheadingskip \def\chapbreak{\dobreak \chapheadingskip {-4000}} \def\chappager{\par\vfill\supereject} @@ -2911,15 +2998,18 @@ width0pt\relax} \fi \def\setchapternewpage #1 {\csname CHAPPAG#1\endcsname} \def\CHAPPAGoff{ +\global\let\contentsalignmacro = \chappager \global\let\pchapsepmacro=\chapbreak \global\let\pagealignmacro=\chappager} \def\CHAPPAGon{ +\global\let\contentsalignmacro = \chappager \global\let\pchapsepmacro=\chappager \global\let\pagealignmacro=\chappager \global\def\HEADINGSon{\HEADINGSsingle}} \def\CHAPPAGodd{ +\global\let\contentsalignmacro = \chapoddpage \global\let\pchapsepmacro=\chapoddpage \global\let\pagealignmacro=\chapoddpage \global\def\HEADINGSon{\HEADINGSdouble}} @@ -2931,30 +3021,35 @@ width0pt\relax} \fi \global\let\unnumbchapmacro=\unnchfplain \global\let\centerchapmacro=\centerchfplain} -\def\chfplain #1#2{% +% Plain chapter opening. +% #1 is the text, #2 the chapter number or empty if unnumbered. +\def\chfplain#1#2{% \pchapsepmacro {% - \chapfonts \vbox{\hyphenpenalty=10000\tolerance=5000 - \parindent=0pt\raggedright - \rm #2\enspace #1}% + \chapfonts \rm + \def\chapnum{#2}% + \setbox0 = \hbox{#2\ifx\chapnum\empty\else\enspace\fi}% + \vbox{\hyphenpenalty=10000 \tolerance=5000 \parindent=0pt \raggedright + \hangindent = \wd0 \centerparametersmaybe + \unhbox0 #1\par}% }% - \bigskip - \penalty5000 + \nobreak\bigskip % no page break after a chapter title + \nobreak } -\def\unnchfplain #1{% -\pchapsepmacro % -{\chapfonts \vbox{\hyphenpenalty=10000\tolerance=5000 - \parindent=0pt\raggedright - \rm #1\hfill}}\bigskip \par\penalty 10000 % -} +% Plain opening for unnumbered. +\def\unnchfplain#1{\chfplain{#1}{}} -\def\centerchfplain #1{% -\pchapsepmacro % -{\chapfonts \vbox{\hyphenpenalty=10000\tolerance=5000 - \parindent=0pt - {\rm #1}\hfill}}\bigskip \par\penalty 10000 % -} +% @centerchap -- centered and unnumbered. +\let\centerparametersmaybe = \relax +\def\centerchfplain#1{{% + \def\centerparametersmaybe{% + \advance\rightskip by 3\rightskip + \leftskip = \rightskip + \parfillskip = 0pt + }% + \chfplain{#1}{}% +}} \CHAPFplain % The default @@ -2980,69 +3075,70 @@ width0pt\relax} \fi \global\let\unnumbchapmacro=\unnchfopen \global\let\centerchapmacro=\centerchfopen} -% Parameter controlling skip before section headings. -\newskip \subsecheadingskip \subsecheadingskip = 17pt plus 8pt minus 4pt +% Section titles. +\newskip\secheadingskip +\def\secheadingbreak{\dobreak \secheadingskip {-1000}} +\def\secheading#1#2#3{\sectionheading{sec}{#2.#3}{#1}} +\def\plainsecheading#1{\sectionheading{sec}{}{#1}} + +% Subsection titles. +\newskip \subsecheadingskip \def\subsecheadingbreak{\dobreak \subsecheadingskip {-500}} +\def\subsecheading#1#2#3#4{\sectionheading{subsec}{#2.#3.#4}{#1}} +\def\plainsubsecheading#1{\sectionheading{subsec}{}{#1}} -\newskip \secheadingskip \secheadingskip = 21pt plus 8pt minus 4pt -\def\secheadingbreak{\dobreak \secheadingskip {-1000}} +% Subsubsection titles. +\let\subsubsecheadingskip = \subsecheadingskip +\let\subsubsecheadingbreak = \subsecheadingbreak +\def\subsubsecheading#1#2#3#4#5{\sectionheading{subsubsec}{#2.#3.#4.#5}{#1}} +\def\plainsubsubsecheading#1{\sectionheading{subsubsec}{}{#1}} -% @paragraphindent is defined for the Info formatting commands only. -\let\paragraphindent=\comment -% Section fonts are the base font at magstep2, which produces -% a size a bit more than 14 points in the default situation. - -\def\secheading #1#2#3{\secheadingi {#2.#3\enspace #1}} -\def\plainsecheading #1{\secheadingi {#1}} -\def\secheadingi #1{{\advance \secheadingskip by \parskip % -\secheadingbreak}% -{\secfonts \vbox{\hyphenpenalty=10000\tolerance=5000 - \parindent=0pt\raggedright - \rm #1\hfill}}% -\ifdim \parskip<10pt \kern 10pt\kern -\parskip\fi \penalty 10000 } - - -% Subsection fonts are the base font at magstep1, -% which produces a size of 12 points. - -\def\subsecheading #1#2#3#4{\subsecheadingi {#2.#3.#4\enspace #1}} -\def\subsecheadingi #1{{\advance \subsecheadingskip by \parskip % -\subsecheadingbreak}% -{\subsecfonts \vbox{\hyphenpenalty=10000\tolerance=5000 - \parindent=0pt\raggedright - \rm #1\hfill}}% -\ifdim \parskip<10pt \kern 10pt\kern -\parskip\fi \penalty 10000 } - -\def\subsubsecfonts{\subsecfonts} % Maybe this should change: - % Perhaps make sssec fonts scaled - % magstep half -\def\subsubsecheading #1#2#3#4#5{\subsubsecheadingi {#2.#3.#4.#5\enspace #1}} -\def\subsubsecheadingi #1{{\advance \subsecheadingskip by \parskip % -\subsecheadingbreak}% -{\subsubsecfonts \vbox{\hyphenpenalty=10000\tolerance=5000 - \parindent=0pt\raggedright - \rm #1\hfill}}% -\ifdim \parskip<10pt \kern 10pt\kern -\parskip\fi \penalty 10000} +% Print any size section title. +% +% #1 is the section type (sec/subsec/subsubsec), #2 is the section +% number (maybe empty), #3 the text. +\def\sectionheading#1#2#3{% + {% + \expandafter\advance\csname #1headingskip\endcsname by \parskip + \csname #1headingbreak\endcsname + }% + {% + % Switch to the right set of fonts. + \csname #1fonts\endcsname \rm + % + % Only insert the separating space if we have a section number. + \def\secnum{#2}% + \setbox0 = \hbox{#2\ifx\secnum\empty\else\enspace\fi}% + % + \vbox{\hyphenpenalty=10000 \tolerance=5000 \parindent=0pt \raggedright + \hangindent = \wd0 % zero if no section number + \unhbox0 #3}% + }% + \ifdim\parskip<10pt \nobreak\kern10pt\nobreak\kern-\parskip\fi \nobreak +} \message{toc printing,} - % Finish up the main text and prepare to read what we've written % to \contentsfile. \newskip\contentsrightmargin \contentsrightmargin=1in \def\startcontents#1{% - \pagealignmacro + % If @setchapternewpage on, and @headings double, the contents should + % start on an odd page, unlike chapters. Thus, we maintain + % \contentsalignmacro in parallel with \pagealignmacro. + % From: Torbjorn Granlund + \contentsalignmacro \immediate\closeout \contentsfile \ifnum \pageno>0 - \pageno = -1 % Request roman numbered pages. + \pageno = -1 % Request roman numbered pages. \fi % Don't need to put `Contents' or `Short Contents' in the headline. % It is abundantly clear what they are. \unnumbchapmacro{#1}\def\thischapter{}% - \begingroup % Set up to handle contents files properly. + \begingroup % Set up to handle contents files properly. \catcode`\\=0 \catcode`\{=1 \catcode`\}=2 \catcode`\@=11 \catcode`\^=7 % to see ^^e4 as \"a etc. juha@piuha.ydi.vtt.fi \raggedbottom % Worry more about breakpoints than the bottom. @@ -3068,6 +3164,7 @@ width0pt\relax} \fi \secfonts \let\rm=\shortcontrm \let\bf=\shortcontbf \let\sl=\shortcontsl \rm + \hyphenpenalty = 10000 \advance\baselineskip by 1pt % Open it up a little. \def\secentry ##1##2##3##4{} \def\unnumbsecentry ##1##2{} @@ -3111,7 +3208,7 @@ width0pt\relax} \fi % This space should be plenty, since a single number is .5em, and the % widest letter (M) is 1em, at least in the Computer Modern fonts. % (This space doesn't include the extra space that gets added after - % the label; that gets put in in \shortchapentry above.) + % the label; that gets put in by \shortchapentry above.) \advance\dimen0 by 1.1em \hbox to \dimen0{#1\hfil}% } @@ -3132,22 +3229,21 @@ width0pt\relax} \fi \dosubsubsecentry{#2.#3.#4.#5\labelspace#1}{#6}} \def\unnumbsubsubsecentry#1#2{\dosubsubsecentry{#1}{#2}} - % This parameter controls the indentation of the various levels. \newdimen\tocindent \tocindent = 3pc % Now for the actual typesetting. In all these, #1 is the text and #2 is the % page number. % -% If the toc has to be broken over pages, we would want to be at chapters +% If the toc has to be broken over pages, we want it to be at chapters % if at all possible; hence the \penalty. \def\dochapentry#1#2{% - \penalty-300 \vskip\baselineskip + \penalty-300 \vskip1\baselineskip plus.33\baselineskip minus.25\baselineskip \begingroup \chapentryfonts \tocentry{#1}{\dopageno{#2}}% \endgroup - \nobreak\vskip .25\baselineskip + \nobreak\vskip .25\baselineskip plus.1\baselineskip } \def\dosecentry#1#2{\begingroup @@ -3172,7 +3268,7 @@ width0pt\relax} \fi % % \turnoffactive is for the sake of @" used for umlauts. \def\tocentry#1#2{\begingroup - \hyphenpenalty = 10000 + \vskip 0pt plus1pt % allow a little stretch for the sake of nice page breaks \entry{\turnoffactive #1}{\turnoffactive #2}% \endgroup} @@ -3197,8 +3293,6 @@ width0pt\relax} \fi \newbox\pushcharbox \newbox\bullbox \newbox\equivbox \newbox\errorbox -\let\ptexequiv = \equiv - %{\tentt %\global\setbox\dblarrowbox = \hbox to 1em{\hfil$\Rightarrow$\hfil} %\global\setbox\longdblarrowbox = \hbox to 1em{\hfil$\mapsto$\hfil} @@ -3209,12 +3303,11 @@ width0pt\relax} \fi % depth .1ex\hfil} %} +% @point{}, @result{}, @expansion{}, @print{}, @equiv{}. \def\point{$\star$} - \def\result{\leavevmode\raise.15ex\hbox to 1em{\hfil$\Rightarrow$\hfil}} \def\expansion{\leavevmode\raise.1ex\hbox to 1em{\hfil$\mapsto$\hfil}} \def\print{\leavevmode\lower.1ex\hbox to 1em{\hfil$\dashv$\hfil}} - \def\equiv{\leavevmode\lower.1ex\hbox to 1em{\hfil$\ptexequiv$\hfil}} % Adapted from the TeXbook's \boxit. @@ -3246,7 +3339,7 @@ width0pt\relax} \fi \catcode `\$=3 \catcode `\&=4 \catcode `\#=6 \catcode `\^=7 \catcode `\_=8 \catcode `\~=13 \let~=\tie \catcode `\%=14 -\catcode 43=12 +\catcode 43=12 % plus \catcode`\"=12 \catcode`\==12 \catcode`\|=12 @@ -3254,6 +3347,7 @@ width0pt\relax} \fi \catcode`\>=12 \escapechar=`\\ % +\let\,=\ptexcomma \let\~=\ptextilde \let\{=\ptexlbrace \let\}=\ptexrbrace @@ -3264,8 +3358,7 @@ width0pt\relax} \fi \def\enddots{\relax\ifmmode\endldots\else$\mathsurround=0pt \endldots\,$\fi} \def\@{@}% \let\bullet=\ptexbullet -\let\b=\ptexb \let\c=\ptexc \let\i=\ptexi \let\t=\ptext \let\l=\ptexl -\let\L=\ptexL +\let\b=\ptexb \let\c=\ptexc \let\i=\ptexi \let\t=\ptext % \let\Etex=\endgroup} @@ -3324,50 +3417,50 @@ width0pt\relax} \fi \def\cbl{{\circle\char'012\hskip -6pt}} \def\cbr{{\hskip 6pt\circle\char'011}} \def\carttop{\hbox to \cartouter{\hskip\lskip - \ctl\leaders\hrule height\circthick\hfil\ctr - \hskip\rskip}} + \ctl\leaders\hrule height\circthick\hfil\ctr + \hskip\rskip}} \def\cartbot{\hbox to \cartouter{\hskip\lskip - \cbl\leaders\hrule height\circthick\hfil\cbr - \hskip\rskip}} + \cbl\leaders\hrule height\circthick\hfil\cbr + \hskip\rskip}} % \newskip\lskip\newskip\rskip \long\def\cartouche{% \begingroup - \lskip=\leftskip \rskip=\rightskip - \leftskip=0pt\rightskip=0pt %we want these *outside*. - \cartinner=\hsize \advance\cartinner by-\lskip - \advance\cartinner by-\rskip - \cartouter=\hsize - \advance\cartouter by 18pt % allow for 3pt kerns on either -% side, and for 6pt waste from -% each corner char - \normbskip=\baselineskip \normpskip=\parskip \normlskip=\lineskip - % Flag to tell @lisp, etc., not to narrow margin. - \let\nonarrowing=\comment - \vbox\bgroup - \baselineskip=0pt\parskip=0pt\lineskip=0pt - \carttop - \hbox\bgroup - \hskip\lskip - \vrule\kern3pt - \vbox\bgroup - \hsize=\cartinner - \kern3pt - \begingroup - \baselineskip=\normbskip - \lineskip=\normlskip - \parskip=\normpskip - \vskip -\parskip + \lskip=\leftskip \rskip=\rightskip + \leftskip=0pt\rightskip=0pt %we want these *outside*. + \cartinner=\hsize \advance\cartinner by-\lskip + \advance\cartinner by-\rskip + \cartouter=\hsize + \advance\cartouter by 18pt % allow for 3pt kerns on either +% side, and for 6pt waste from +% each corner char + \normbskip=\baselineskip \normpskip=\parskip \normlskip=\lineskip + % Flag to tell @lisp, etc., not to narrow margin. + \let\nonarrowing=\comment + \vbox\bgroup + \baselineskip=0pt\parskip=0pt\lineskip=0pt + \carttop + \hbox\bgroup + \hskip\lskip + \vrule\kern3pt + \vbox\bgroup + \hsize=\cartinner + \kern3pt + \begingroup + \baselineskip=\normbskip + \lineskip=\normlskip + \parskip=\normpskip + \vskip -\parskip \def\Ecartouche{% - \endgroup - \kern3pt - \egroup - \kern3pt\vrule - \hskip\rskip - \egroup - \cartbot - \egroup + \endgroup + \kern3pt + \egroup + \kern3pt\vrule + \hskip\rskip + \egroup + \cartbot + \egroup \endgroup }} @@ -3430,8 +3523,7 @@ width0pt\relax} \fi \let\Esmalllisp = \nonfillfinish \let\Esmallexample = \nonfillfinish % - % Smaller interline space and fonts for small examples. - \setleading{10pt}% + % Smaller fonts for small examples. \indexfonts \tt \rawbackslash % make \ output the \ character from the current font (tt) \gobble @@ -3959,6 +4051,7 @@ width0pt\relax} \fi \def\deftpx #1 {\errmessage{@deftpx in invalid context}} + \message{cross reference,} % Define cross-reference macros \newwrite \auxfile @@ -3966,6 +4059,11 @@ width0pt\relax} \fi \newif\ifhavexrefs % True if xref values are known. \newif\ifwarnedxrefs % True if we warned once that they aren't known. +% @inforef is simple. +\def\inforef #1{\inforefzzz #1,,,,**} +\def\inforefzzz #1,#2,#3,#4**{\putwordSee{} \putwordInfo{} \putwordfile{} \file{\ignorespaces #3{}}, + node \samp{\ignorespaces#1{}}} + % \setref{foo} defines a cross-reference point named foo. \def\setref#1{% @@ -4201,7 +4299,8 @@ width0pt\relax} \fi % The trailing space in the following definition for supereject is % vital for proper filling; pages come out unaligned when you do a % pagealignmacro call if that space before the closing brace is -% removed. +% removed. (Generally, numeric constants should always be followed by a +% space to prevent strange expansion errors.) \def\supereject{\par\penalty -20000\footnoteno =0 } % @footnotestyle is meaningful for info output only.. @@ -4326,13 +4425,18 @@ width0pt\relax} \fi % Set some numeric style parameters, for 8.5 x 11 format. -%\hsize = 6.5in +\hsize = 6in +\hoffset = .25in \newdimen\defaultparindent \defaultparindent = 15pt \parindent = \defaultparindent -\parskip 18pt plus 1pt -\setleading{15pt} +\parskip 3pt plus 2pt minus 1pt +\setleading{13.2pt} \advance\topskip by 1.2cm +\chapheadingskip = 15pt plus 4pt minus 2pt +\secheadingskip = 12pt plus 3pt minus 2pt +\subsecheadingskip = 9pt plus 2pt minus 2pt + % Prevent underfull vbox error messages. \vbadness=10000 @@ -4355,30 +4459,28 @@ width0pt\relax} \fi % Use @smallbook to reset parameters for 7x9.5 format (or else 7x9.25) \def\smallbook{ - -% These values for secheadingskip and subsecheadingskip are -% experiments. RJC 7 Aug 1992 -\global\secheadingskip = 17pt plus 6pt minus 3pt -\global\subsecheadingskip = 14pt plus 6pt minus 3pt - -\global\lispnarrowing = 0.3in -\setleading{12pt} -\advance\topskip by -1cm -\global\parskip 3pt plus 1pt -\global\hsize = 5in -\global\vsize=7.5in -\global\tolerance=700 -\global\hfuzz=1pt -\global\contentsrightmargin=0pt -\global\deftypemargin=0pt -\global\defbodyindent=.5cm - -\global\pagewidth=\hsize -\global\pageheight=\vsize - -\global\let\smalllisp=\smalllispx -\global\let\smallexample=\smalllispx -\global\def\Esmallexample{\Esmalllisp} + \global\chapheadingskip = 15pt plus 4pt minus 2pt + \global\secheadingskip = 12pt plus 3pt minus 2pt + \global\subsecheadingskip = 9pt plus 2pt minus 2pt + % + \global\lispnarrowing = 0.3in + \setleading{12pt} + \advance\topskip by -1cm + \global\parskip 2pt plus 1pt + \global\hsize = 5in + \global\vsize=7.5in + \global\tolerance=700 + \global\hfuzz=1pt + \global\contentsrightmargin=0pt + \global\deftypemargin=0pt + \global\defbodyindent=.5cm + % + \global\pagewidth=\hsize + \global\pageheight=\vsize + % + \global\let\smalllisp=\smalllispx + \global\let\smallexample=\smalllispx + \global\def\Esmallexample{\Esmalllisp} } % Use @afourpaper to print on European A4 paper. @@ -4401,6 +4503,11 @@ width0pt\relax} \fi \global\pageheight=\vsize } +\bindingoffset=0pt +\normaloffset=\hoffset +\pagewidth=\hsize +\pageheight=\vsize + % Allow control of the text dimensions. Parameters in order: textheight; % textwidth; voffset; hoffset; binding offset; topskip. % All require a dimension; diff --git a/lib/ylwrap b/lib/ylwrap index 83ce13fc..9a484df8 100755 --- a/lib/ylwrap +++ b/lib/ylwrap @@ -16,25 +16,47 @@ # along with this program; if not, write to the Free Software # Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. +# Usage: +# ylwrap PROG [OUTPUT DESIRED]... -- [ARGS]... +# * PROG is program to run. +# * OUTPUT is file PROG generates +# * DESIRED is file we actually want +# * ARGS are passed to PROG +# Any number of OUTPUT,DESIRED pairs may be used. + # The program to run. prog="$1" - -# The output file the program generates, eg `y.tab.c'. -progoutput="$2" - -# The output file we actually want. -realoutput="$3" - -# Strip arguments we've used; remaining arguments go to PROG. -shift -shift shift +pairlist= +while test "$#" -ne 0; do + if test "$1" = "--"; then + break + fi + pairlist="$pairlist $1" + shift +done + $prog ${1+"$@"} || exit $? -if test -f "$progoutput"; then - mv "$progoutput" "$realoutput" || exit $? -else - exit 1 -fi -exit 0 +set X $pairlist +shift +status=0 +first=yes +while "$#" -ne 0; do + if test -f "$1"; then + mv "$1" "$2" || status=$? + else + # A missing file is only an error for the first file. This is a + # blatant hack to let us support using "yacc -d". If -d is not + # specified, we don't want an error when the header file is + # "missing". + if test $first = yes; then + status=1 + fi + fi + shift + shift + first=no +done +exit $status diff --git a/libraries-clean.am b/libs-clean.am similarity index 100% rename from libraries-clean.am rename to libs-clean.am diff --git a/libs.am b/libs.am new file mode 100644 index 00000000..324128d6 --- /dev/null +++ b/libs.am @@ -0,0 +1,44 @@ +## automake - create Makefile.in from Makefile.am +## Copyright (C) 1994, 1995, 1996 Free Software Foundation, Inc. + +## This program is free software; you can redistribute it and/or modify +## it under the terms of the GNU General Public License as published by +## the Free Software Foundation; either version 2, or (at your option) +## any later version. + +## This program is distributed in the hope that it will be useful, +## but WITHOUT ANY WARRANTY; without even the implied warranty of +## MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +## GNU General Public License for more details. + +## You should have received a copy of the GNU General Public License +## along with this program; if not, write to the Free Software +## Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA +## 02111-1307, USA. +install-@DIR@LIBRARIES: $(@DIR@_LIBFILES) + $(NORMAL_INSTALL) + $(mkinstalldirs) $(@DIR@dir) +## Funny invocation because Makefile variable can be empty, leading to +## a syntax error in sh. + list="$(@DIR@_LIBFILES)"; for p in $$list; do \ + if test -f $$p; then \ + $(INSTALL_DATA) $$p $(@DIR@dir)/$$p; \ + else :; fi; \ + done +## We do two loops here so that $(POST_INSTALL) can be empty. If we +## merge the two loops, we get a syntax error from sh. Anyway, having +## $(POST_INSTALL) in the middle of the loop essentially renders it +## useless; sh never actually executes this command. Read the GNU +## Standards for a little enlightenment on this. + $(POST_INSTALL) + list="$(@DIR@_LIBFILES)"; for p in $$list; do \ + if test -f $$p; then \ +## Must ranlib after installing because mod time changes. + $(RANLIB) $(@DIR@dir)/$$p; \ + else :; fi; \ + done + +uninstall-@DIR@LIBRARIES: + list="$(@DIR@_LIBFILES)"; for p in $$list; do \ + rm -f $(@DIR@dir)/$$p; \ + done diff --git a/m4/Makefile.am b/m4/Makefile.am index 924f6488..9602db7a 100644 --- a/m4/Makefile.am +++ b/m4/Makefile.am @@ -4,8 +4,9 @@ AUTOMAKE_OPTIONS = gnits MAINT_CHARSET = latin1 m4datadir = $(datadir)/aclocal -m4data_DATA = AM_C_PROTOTYPES.m4 AM_FUNC_FNMATCH.m4 AM_FUNC_STRTOD.m4 \ -AM_HEADER_TIOCGWINSZ_NEEDS_SYS_IOCTL.m4 AM_INIT_AUTOMAKE.m4 \ -AM_MAINTAINER_MODE.m4 AM_PATH_LISPDIR.m4 AM_PROG_CC_STDC.m4 \ -AM_PROG_INSTALL.m4 AM_SANITY_CHECK_CC.m4 AM_SYS_POSIX_TERMIOS.m4 \ -AM_TYPE_PTRDIFF_T.m4 AM_WITH_DMALLOC.m4 AM_WITH_REGEX.m4 +m4data_DATA = ccsanity.m4 ccstdc.m4 dmalloc.m4 fnmatch.m4 init.m4 install.m4 \ +lispdir.m4 maintainer.m4 protos.m4 ptrdiff.m4 regex.m4 strtod.m4 termios.m4 \ +winsz.m4 mktime.m4 error.m4 obstack.m4 + + +EXTRA_DIST = $(m4data_DATA) diff --git a/m4/Makefile.in b/m4/Makefile.in index 9b9fdbbc..bd5ee21e 100644 --- a/m4/Makefile.in +++ b/m4/Makefile.in @@ -42,11 +42,11 @@ AUTOMAKE_OPTIONS = gnits MAINT_CHARSET = latin1 m4datadir = $(datadir)/aclocal -m4data_DATA = AM_C_PROTOTYPES.m4 AM_FUNC_FNMATCH.m4 AM_FUNC_STRTOD.m4 \ -AM_HEADER_TIOCGWINSZ_NEEDS_SYS_IOCTL.m4 AM_INIT_AUTOMAKE.m4 \ -AM_MAINTAINER_MODE.m4 AM_PATH_LISPDIR.m4 AM_PROG_CC_STDC.m4 \ -AM_PROG_INSTALL.m4 AM_SANITY_CHECK_CC.m4 AM_SYS_POSIX_TERMIOS.m4 \ -AM_TYPE_PTRDIFF_T.m4 AM_WITH_DMALLOC.m4 AM_WITH_REGEX.m4 +m4data_DATA = ccsanity.m4 ccstdc.m4 dmalloc.m4 fnmatch.m4 init.m4 install.m4 \ +lispdir.m4 maintainer.m4 protos.m4 ptrdiff.m4 regex.m4 strtod.m4 termios.m4 \ +winsz.m4 mktime.m4 error.m4 obstack.m4 + +EXTRA_DIST = $(m4data_DATA) mkinstalldirs = $(top_srcdir)/mkinstalldirs CONFIG_CLEAN_FILES = DATA = $(m4data_DATA) @@ -101,13 +101,9 @@ distdir: $(DEP_DISTFILES) || cp -p $(srcdir)/$$file $(distdir)/$$file; \ done info: - dvi: - -check: all - +check: installcheck: - install-exec: $(NORMAL_INSTALL) diff --git a/m4/AM_SANITY_CHECK_CC.m4 b/m4/ccsanity.m4 similarity index 100% rename from m4/AM_SANITY_CHECK_CC.m4 rename to m4/ccsanity.m4 diff --git a/m4/AM_PROG_CC_STDC.m4 b/m4/ccstdc.m4 similarity index 100% rename from m4/AM_PROG_CC_STDC.m4 rename to m4/ccstdc.m4 diff --git a/m4/AM_WITH_DMALLOC.m4 b/m4/dmalloc.m4 similarity index 100% rename from m4/AM_WITH_DMALLOC.m4 rename to m4/dmalloc.m4 diff --git a/m4/error.m4 b/m4/error.m4 new file mode 100644 index 00000000..eac272a5 --- /dev/null +++ b/m4/error.m4 @@ -0,0 +1,13 @@ +dnl From Jim Meyering. Use this if you use the GNU error.[ch]. +dnl FIXME: Migrate into libit + +AC_DEFUN(AM_FUNC_ERROR_AT_LINE, +[AC_CACHE_CHECK([for error_at_line], am_cv_lib_error_at_line, + [AC_TRY_LINK([],[error_at_line(0, 0, "", 0, "");], + am_cv_lib_error_at_line=yes, + am_cv_lib_error_at_line=no)]) + if test $am_cv_lib_error_at_line = no; then + LIBOBJS="$LIBOBJS error.o" + fi + AC_SUBST(LIBOBJS)dnl +]) diff --git a/m4/AM_FUNC_FNMATCH.m4 b/m4/fnmatch.m4 similarity index 100% rename from m4/AM_FUNC_FNMATCH.m4 rename to m4/fnmatch.m4 diff --git a/m4/AM_INIT_AUTOMAKE.m4 b/m4/init.m4 similarity index 100% rename from m4/AM_INIT_AUTOMAKE.m4 rename to m4/init.m4 diff --git a/m4/AM_PROG_INSTALL.m4 b/m4/install.m4 similarity index 100% rename from m4/AM_PROG_INSTALL.m4 rename to m4/install.m4 diff --git a/m4/AM_PATH_LISPDIR.m4 b/m4/lispdir.m4 similarity index 100% rename from m4/AM_PATH_LISPDIR.m4 rename to m4/lispdir.m4 diff --git a/m4/AM_MAINTAINER_MODE.m4 b/m4/maintainer.m4 similarity index 100% rename from m4/AM_MAINTAINER_MODE.m4 rename to m4/maintainer.m4 diff --git a/m4/mktime.m4 b/m4/mktime.m4 new file mode 100644 index 00000000..9a5e63ff --- /dev/null +++ b/m4/mktime.m4 @@ -0,0 +1,39 @@ +dnl From Jim Meyering. +dnl FIXME: this should migrate into libit. + +dnl This little macro is solely so AM_FUNC_MKTIME can require +dnl that AC_CHECK_HEADERS(sys/time.h) has been run. +AC_DEFUN(AC_HEADER_SYS_TIME_H, + [AC_CHECK_HEADERS(sys/time.h)]) + +AC_DEFUN(AM_FUNC_MKTIME, +[AC_REQUIRE([AC_HEADER_TIME])dnl + AC_REQUIRE([AC_HEADER_SYS_TIME_H])dnl + AC_CACHE_CHECK([for working mktime], am_cv_func_working_mktime, + [AC_TRY_RUN([/* Test program from Tony Leneis (tony@plaza.ds.adp.com). */ +#if TIME_WITH_SYS_TIME +# include +# include +#else +# if HAVE_SYS_TIME_H +# include +# else +# include +# endif +#endif +int +main () +{ + time_t today = time (0); + struct tm *local = localtime (&today); + exit (mktime (local) != today); +} + ], + am_cv_func_working_mktime=yes, am_cv_func_working_mktime=no, + dnl When crosscompiling, assume mktime is missing or broken. + am_cv_func_working_mktime=no) + ]) + if test $am_cv_func_working_mktime = no; then + LIBOBJS="$LIBOBJS mktime.o" + fi +]) diff --git a/m4/obstack.m4 b/m4/obstack.m4 new file mode 100644 index 00000000..b702aee4 --- /dev/null +++ b/m4/obstack.m4 @@ -0,0 +1,15 @@ +dnl From Jim Meyering. +dnl FIXME: migrate into libit. + +AC_DEFUN(AM_FUNC_OBSTACK, +[AC_CACHE_CHECK([for obstacks], am_cv_func_obstack, + [AC_TRY_LINK([#include "obstack.h"], + [struct obstack *mem;obstack_free(mem,(char *) 0)], + am_cv_func_obstack=yes, + am_cv_func_obstack=no)]) + if test $am_cv_func_obstack = yes; then + AC_DEFINE(HAVE_OBSTACK) + else + LIBOBJS="$LIBOBJS obstack.o" + fi +]) diff --git a/m4/AM_C_PROTOTYPES.m4 b/m4/protos.m4 similarity index 100% rename from m4/AM_C_PROTOTYPES.m4 rename to m4/protos.m4 diff --git a/m4/AM_TYPE_PTRDIFF_T.m4 b/m4/ptrdiff.m4 similarity index 100% rename from m4/AM_TYPE_PTRDIFF_T.m4 rename to m4/ptrdiff.m4 diff --git a/m4/AM_WITH_REGEX.m4 b/m4/regex.m4 similarity index 100% rename from m4/AM_WITH_REGEX.m4 rename to m4/regex.m4 diff --git a/m4/AM_FUNC_STRTOD.m4 b/m4/strtod.m4 similarity index 100% rename from m4/AM_FUNC_STRTOD.m4 rename to m4/strtod.m4 diff --git a/m4/AM_SYS_POSIX_TERMIOS.m4 b/m4/termios.m4 similarity index 100% rename from m4/AM_SYS_POSIX_TERMIOS.m4 rename to m4/termios.m4 diff --git a/m4/AM_HEADER_TIOCGWINSZ_NEEDS_SYS_IOCTL.m4 b/m4/winsz.m4 similarity index 100% rename from m4/AM_HEADER_TIOCGWINSZ_NEEDS_SYS_IOCTL.m4 rename to m4/winsz.m4 diff --git a/programs-clean.am b/progs-clean.am similarity index 100% rename from programs-clean.am rename to progs-clean.am diff --git a/progs.am b/progs.am new file mode 100644 index 00000000..406b2f89 --- /dev/null +++ b/progs.am @@ -0,0 +1,32 @@ +## automake - create Makefile.in from Makefile.am +## Copyright (C) 1994, 1995, 1996 Free Software Foundation, Inc. + +## This program is free software; you can redistribute it and/or modify +## it under the terms of the GNU General Public License as published by +## the Free Software Foundation; either version 2, or (at your option) +## any later version. + +## This program is distributed in the hope that it will be useful, +## but WITHOUT ANY WARRANTY; without even the implied warranty of +## MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +## GNU General Public License for more details. + +## You should have received a copy of the GNU General Public License +## along with this program; if not, write to the Free Software +## Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA +## 02111-1307, USA. +install-@DIR@PROGRAMS: $(@DIR@_PROGRAMS) + $(NORMAL_INSTALL) + $(mkinstalldirs) $(@DIR@dir) +## Funny invocation because Makefile variable can be empty, leading to +## a syntax error in sh. + list="$(@DIR@_PROGRAMS)"; for p in $$list; do \ + if test -f $$p; then \ + $(INSTALL_PROGRAM) $$p $(@DIR@dir)/`echo $$p|sed '$(transform)'`; \ + else :; fi; \ + done + +uninstall-@DIR@PROGRAMS: + list="$(@DIR@_PROGRAMS)"; for p in $$list; do \ + rm -f $(@DIR@dir)/`echo $$p|sed '$(transform)'`; \ + done diff --git a/tests/ChangeLog b/tests/ChangeLog index d172e7ad..2aafaff1 100644 --- a/tests/ChangeLog +++ b/tests/ChangeLog @@ -1,3 +1,11 @@ +Sat Oct 5 11:31:38 1996 Tom Tromey + + * discover.test: New file. + + * mkinst2.test: Renamed from mkinstall2.test. + + * symlink.test: New file. + Thu Oct 3 19:55:23 1996 Tom Tromey * vpath.test: New file. diff --git a/tests/Makefile.am b/tests/Makefile.am index 37433d57..92801b27 100644 --- a/tests/Makefile.am +++ b/tests/Makefile.am @@ -9,13 +9,13 @@ canon.test installsh.test empty.test rulepat.test insh.test canon2.test \ target.test extra.test noinst.test instman.test mkinstall.test auxdir.test \ canon3.test mdate2.test subdir.test backsl.test package.test number.test \ insh2.test outdir.test fpinstall.test fpinst2.test texinfo.test dejagnu.test \ -yacc.test mkinstall2.test texinfo2.test ansi.test depacl.test depacl2.test \ +yacc.test mkinst2.test texinfo2.test ansi.test depacl.test depacl2.test \ error.test colon.test vtexi2.test tags.test comment.test libfiles.test \ man.test info.test obsolete.test lex.test scripts.test subdir2.test \ exsource.test canon4.test dup.test defun.test cxxlink.test cxxnoc.test \ order.test libobj2.test interp.test alllib.test block.test libobj3.test \ gnits.test interp2.test colneq.test implicit.test spell.test spell2.test \ confsub.test primary.test primary2.test depend2.test spell3.test \ -comment2.test vpath.test +comment2.test vpath.test symlink.test discover.test EXTRA_DIST = defs $(TESTS) diff --git a/tests/Makefile.in b/tests/Makefile.in index a1a58da3..7c67f562 100644 --- a/tests/Makefile.in +++ b/tests/Makefile.in @@ -47,14 +47,14 @@ canon.test installsh.test empty.test rulepat.test insh.test canon2.test \ target.test extra.test noinst.test instman.test mkinstall.test auxdir.test \ canon3.test mdate2.test subdir.test backsl.test package.test number.test \ insh2.test outdir.test fpinstall.test fpinst2.test texinfo.test dejagnu.test \ -yacc.test mkinstall2.test texinfo2.test ansi.test depacl.test depacl2.test \ +yacc.test mkinst2.test texinfo2.test ansi.test depacl.test depacl2.test \ error.test colon.test vtexi2.test tags.test comment.test libfiles.test \ man.test info.test obsolete.test lex.test scripts.test subdir2.test \ exsource.test canon4.test dup.test defun.test cxxlink.test cxxnoc.test \ order.test libobj2.test interp.test alllib.test block.test libobj3.test \ gnits.test interp2.test colneq.test implicit.test spell.test spell2.test \ confsub.test primary.test primary2.test depend2.test spell3.test \ -comment2.test vpath.test +comment2.test vpath.test symlink.test discover.test EXTRA_DIST = defs $(TESTS) mkinstalldirs = $(top_srcdir)/mkinstalldirs @@ -114,13 +114,9 @@ check-TESTS: $(TESTS) echo "$$failed of $$all tests failed"; \ fi info: - dvi: - -check: all check-TESTS - +check: check-TESTS installcheck: - install-exec: $(NORMAL_INSTALL) diff --git a/tests/checkall.test b/tests/checkall.test index e276f2d9..bd70958a 100755 --- a/tests/checkall.test +++ b/tests/checkall.test @@ -25,6 +25,11 @@ $AUTOMAKE || exit 1 : > source +# This hack fakes out the Makefile dependencies. +: > configure +: > config.status +: > Makefile + # Bogus. make -f Makefile.in check diff --git a/tests/defun.test b/tests/defun.test index dae8540a..c11e06ed 100755 --- a/tests/defun.test +++ b/tests/defun.test @@ -6,7 +6,7 @@ cat > acinclude.m4 << 'END' AC_DEFUN([AM_FUNC_TWO],) -AC_DEFUN([AM_FUNC_STRTOD], +AC_DEFUN([AM_FUNC_ONE], AC_REQUIRE([AM_FUNC_TWO])) END diff --git a/tests/discover.test b/tests/discover.test new file mode 100755 index 00000000..a91aa950 --- /dev/null +++ b/tests/discover.test @@ -0,0 +1,26 @@ +#! /bin/sh + +# Test to make sure LIBOBJS file cannot be mentioned explicitly. + +. $srcdir/defs || exit 1 + +cat > configure.in << 'END' +PACKAGE=nonesuch +VERSION=nonesuch +AC_ARG_PROGRAM +AC_PROG_INSTALL +AC_PROG_RANLIB +LIBOBJS="$LIBOBJS fsusage.o" +AC_OUTPUT(Makefile) +END + +cat > Makefile.am << 'END' +noinst_LIBRARIES = tu +tu_SOURCES = fsusage.c +tu_LIBADD = @LIBOBJS@ +END + +: > fsusage.c + +$AUTOMAKE && exit 1 +exit 0 diff --git a/tests/error.test b/tests/error.test index f46a8a85..a5a91178 100755 --- a/tests/error.test +++ b/tests/error.test @@ -11,7 +11,8 @@ END # Set up a strange environment, where AM_C_PROTOTYPES exists but its # dependency does not. cat > AM_C_PROTOTYPES.m4 << 'END' -AC_REQUIRE([AM_PROG_CC_STDC]) +AC_DEFUN(AM_C_PROTOTYPES, +AC_REQUIRE([AM_PROG_CC_STDC])) END # Our --acdir overrides the one in $ACLOCAL. diff --git a/tests/mkinstall2.test b/tests/mkinst2.test similarity index 100% rename from tests/mkinstall2.test rename to tests/mkinst2.test diff --git a/tests/symlink.test b/tests/symlink.test new file mode 100755 index 00000000..f2f29496 --- /dev/null +++ b/tests/symlink.test @@ -0,0 +1,18 @@ +#! /bin/sh + +# Make sure we get an error if symlink creation fails. +# Reported by Joerg-Martin Schwarz + +. $srcdir/defs || exit 1 + +rm install-sh +rm mkinstalldirs + +: > Makefile.am + +cat >> configure.in << 'END' +AC_CONFIG_AUX_DIR(aux) +END + +$AUTOMAKE --add-missing && exit 1 +exit 0 diff --git a/texinfos-vars.am b/texi-vars.am similarity index 100% rename from texinfos-vars.am rename to texi-vars.am diff --git a/texi-vers.am b/texi-vers.am new file mode 100644 index 00000000..3c6f3c89 --- /dev/null +++ b/texi-vers.am @@ -0,0 +1,42 @@ +## automake - create Makefile.in from Makefile.am +## Copyright (C) 1994, 1995, 1996 Free Software Foundation, Inc. + +## This program is free software; you can redistribute it and/or modify +## it under the terms of the GNU General Public License as published by +## the Free Software Foundation; either version 2, or (at your option) +## any later version. + +## This program is distributed in the hope that it will be useful, +## but WITHOUT ANY WARRANTY; without even the implied warranty of +## MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +## GNU General Public License for more details. + +## You should have received a copy of the GNU General Public License +## along with this program; if not, write to the Free Software +## Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA +## 02111-1307, USA. +@VTEXI@: @MAINT@stamp-@VTI@ + +## Depend on configure.in so that version number updates cause a +## rebuild. +stamp-@VTI@: @TEXI@ $(top_srcdir)/configure.in + echo "@set UPDATED `cd $(srcdir) \ + && $(SHELL) @MDDIR@/mdate-sh @TEXI@`" > @VTI@.tmp + echo "@set EDITION $(VERSION)" >> @VTI@.tmp + echo "@set VERSION $(VERSION)" >> @VTI@.tmp +## Use cp and rm here because some older "mv"s can't move across +## filesystems. Furthermore, GNU "mv" in the AmigaDOS environment +## can't handle this. + cmp -s @VTI@.tmp $(srcdir)/@VTEXI@ || cp @VTI@.tmp $(srcdir)/@VTEXI@ + rm @VTI@.tmp + echo timestamp > $(srcdir)/stamp-@VTI@ + +mostlyclean-@VTI@: + rm -f @VTI@.tmp + +clean-@VTI@: + +distclean-@VTI@: + +maintainer-clean-@VTI@: + @MAINT@rm -f stamp-@VTI@ @VTEXI@ diff --git a/texinfo.tex b/texinfo.tex index 46b0f452..e8375a31 100644 --- a/texinfo.tex +++ b/texinfo.tex @@ -35,7 +35,7 @@ % This automatically updates the version number based on RCS. \def\deftexinfoversion$#1: #2 ${\def\texinfoversion{#2}} -\deftexinfoversion$Revision: 2.172 $ +\deftexinfoversion$Revision: 2.185 $ \message{Loading texinfo package [Version \texinfoversion]:} % If in a .fmt file, print the version number @@ -46,20 +46,20 @@ % Save some parts of plain tex whose names we will redefine. -\let\ptextilde=\~ -\let\ptexlbrace=\{ -\let\ptexrbrace=\} -\let\ptexdots=\dots -\let\ptexdot=\. -\let\ptexstar=\* -\let\ptexend=\end -\let\ptexbullet=\bullet \let\ptexb=\b +\let\ptexbullet=\bullet \let\ptexc=\c +\let\ptexcomma=\, +\let\ptexdot=\. +\let\ptexdots=\dots +\let\ptexend=\end +\let\ptexequiv = \equiv \let\ptexi=\i +\let\ptexlbrace=\{ +\let\ptexrbrace=\} +\let\ptexstar=\* \let\ptext=\t -\let\ptexl=\l -\let\ptexL=\L +\let\ptextilde=\~ % Be sure we're in horizontal mode when doing a tie, since we make space % equivalent to this in @example-like environments. Otherwise, a space @@ -74,6 +74,7 @@ } \let\~ = \tie % And make it available as @~. + \message{Basics,} \chardef\other=12 @@ -103,10 +104,9 @@ \hyphenation{eshell} % Margin to add to right of even pages, to left of odd pages. -\newdimen \bindingoffset \bindingoffset=0pt -\newdimen \normaloffset \normaloffset=\hoffset +\newdimen \bindingoffset +\newdimen \normaloffset \newdimen\pagewidth \newdimen\pageheight -\pagewidth=\hsize \pageheight=\vsize % Sometimes it is convenient to have everything in the transcript file % and nothing on the terminal. We don't just call \tracingall here, @@ -127,7 +127,7 @@ \newdimen\cornerlong \newdimen\cornerthick \newdimen \topandbottommargin \newdimen \outerhsize \newdimen \outervsize -\cornerlong=1pc\cornerthick=.3pt % These set size of cropmarks +\cornerlong=1pc\cornerthick=.3pt % These set size of cropmarks \outerhsize=7in %\outervsize=9.5in % Alternative @smallbook page size is 9.25in @@ -137,15 +137,24 @@ %---------------------End change----------------------- % \onepageout takes a vbox as an argument. Note that \pagecontents -% does insertions itself, but you have to call it yourself. +% does insertions, but you have to call it yourself. \chardef\PAGE=255 \output={\onepageout{\pagecontents\PAGE}} -\def\onepageout#1{\hoffset=\normaloffset -\ifodd\pageno \advance\hoffset by \bindingoffset -\else \advance\hoffset by -\bindingoffset\fi -{\escapechar=`\\\relax % makes sure backslash is used in output files. -\shipout\vbox{{\let\hsize=\pagewidth \makeheadline} \pagebody{#1}% -{\let\hsize=\pagewidth \makefootline}}}% -\advancepageno \ifnum\outputpenalty>-20000 \else\dosupereject\fi} +\def\onepageout#1{% + \hoffset=\normaloffset + \ifodd\pageno \advance\hoffset by \bindingoffset + \else \advance\hoffset by -\bindingoffset\fi + {% + \escapechar = `\\ % use backslash in output files. + \indexdummies + \shipout\vbox{% + {\let\hsize=\pagewidth \makeheadline}% + \pagebody{#1}% + {\let\hsize=\pagewidth \makefootline}% + }% + }% + \advancepageno + \ifnum\outputpenalty>-20000 \else\dosupereject\fi +} %%%% For @cropmarks command %%%% @@ -157,8 +166,8 @@ % \def\croppageout#1{\hoffset=0pt % make sure this doesn't mess things up {\escapechar=`\\\relax % makes sure backslash is used in output files. - \shipout - \vbox to \outervsize{\hsize=\outerhsize + \shipout + \vbox to \outervsize{\hsize=\outerhsize \vbox{\line{\ewtop\hfill\ewtop}} \nointerlineskip \line{\vbox{\moveleft\cornerthick\nstop} @@ -166,19 +175,19 @@ \vbox{\moveright\cornerthick\nstop}} \vskip \topandbottommargin \centerline{\ifodd\pageno\hskip\bindingoffset\fi - \vbox{ - {\let\hsize=\pagewidth \makeheadline} - \pagebody{#1} - {\let\hsize=\pagewidth \makefootline}} - \ifodd\pageno\else\hskip\bindingoffset\fi} - \vskip \topandbottommargin plus1fill minus1fill + \vbox{ + {\let\hsize=\pagewidth \makeheadline} + \pagebody{#1} + {\let\hsize=\pagewidth \makefootline}} + \ifodd\pageno\else\hskip\bindingoffset\fi} + \vskip \topandbottommargin plus1fill minus1fill \boxmaxdepth\cornerthick \line{\vbox{\moveleft\cornerthick\nsbot} \hfill \vbox{\moveright\cornerthick\nsbot}} \nointerlineskip \vbox{\line{\ewbot\hfill\ewbot}} - }} + }} \advancepageno \ifnum\outputpenalty>-20000 \else\dosupereject\fi} % @@ -366,11 +375,43 @@ %\def\'{{'}} % Used to generate quoted braces. - \def\mylbrace {{\tt \char '173}} \def\myrbrace {{\tt \char '175}} \let\{=\mylbrace \let\}=\myrbrace +\begingroup + % Definitions to produce actual \{ & \} command in an index. + \catcode`\{ = 12 \catcode`\} = 12 + \catcode`\[ = 1 \catcode`\] = 2 + \catcode`\@ = 0 \catcode`\\ = 12 + @gdef@lbracecmd[\{]% + @gdef@rbracecmd[\}]% +@endgroup + +% Accents: @, @dotaccent @ringaccent @ubaraccent @udotaccent +% Others are defined by plain TeX: @` @' @" @^ @~ @= @v @H. +\let\, = \c +\let\dotaccent = \. +\def\ringaccent#1{{\accent23 #1}} +\let\tieaccent = \t +\let\ubaraccent = \b +\let\udotaccent = \d + +% Other special characters: @questiondown @exclamdown +% Plain TeX defines: @AA @AE @O @OE @L (and lowercase versions) @ss. +\def\questiondown{?`} +\def\exclamdown{!`} + +% Dotless i and dotless j, used for accents. +\def\imacro{i} +\def\jmacro{j} +\def\dotless#1{% + \def\temp{#1}% + \ifx\temp\imacro \ptexi + \else\ifx\temp\jmacro \j + \else \errmessage{@dotless can be used only with i or j}% + \fi\fi +} % @: forces normal size whitespace following. \def\:{\spacefactor=1000 } @@ -579,7 +620,7 @@ where each line of input produces a line of output.} % @sp n outputs n lines of vertical space \def\sp{\parsearg\spxxx} -\def\spxxx #1{\par \vskip #1\baselineskip} +\def\spxxx #1{\vskip #1\baselineskip} % @comment ...line which is ignored... % @c is the same as @comment @@ -592,6 +633,9 @@ where each line of input produces a line of output.} \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{% @@ -681,10 +725,15 @@ where each line of input produces a line of output.} \def\menu{\doignore{menu}} \def\direntry{\doignore{direntry}} +% Also ignore @macro ... @end macro. The user must run texi2dvi, +% which runs makeinfo to do macro expansion. Ignore @unmacro, too. +\def\macro{\doignore{macro}} +\let\unmacro = \comment + + % @dircategory CATEGORY -- specify a category of the dir file % which this file should belong to. Ignore this in TeX. - -\def\dircategory{\comment} +\let\dircategory = \comment % Ignore text until a line `@end #1'. % @@ -717,6 +766,7 @@ where each line of input produces a line of output.} \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.ai.mit.edu/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.} @@ -822,9 +872,9 @@ where each line of input produces a line of output.} % @value{foo} gets the text saved in variable foo. % \def\value#1{\expandafter - \ifx\csname SET#1\endcsname\relax - {\{No value for ``#1''\}} - \else \csname SET#1\endcsname \fi} + \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. @@ -924,6 +974,7 @@ where each line of input produces a line of output.} \expandafter\expandafter\expandafter\appendixsetref{\lastnode}\fi \global\let\lastnode=\relax} +% @refill is a no-op. \let\refill=\relax % @setfilename is done at the beginning of every texinfo file. @@ -938,16 +989,13 @@ where each line of input produces a line of output.} \comment % Ignore the actual filename. } +% @bye. \outer\def\bye{\pagealignmacro\tracingstats=1\ptexend} -\def\inforef #1{\inforefzzz #1,,,,**} -\def\inforefzzz #1,#2,#3,#4**{\putwordSee{} \putwordInfo{} \putwordfile{} \file{\ignorespaces #3{}}, - node \samp{\ignorespaces#1{}}} - -\def\macro#1{\begingroup\ignoresections\catcode`\#=6\def\macrotemp{#1}\parsearg\macroxxx} -\def\macroxxx#1#2 \end macro{% -\expandafter\gdef\macrotemp#1{#2}% -\endgroup} +% \def\macro#1{\begingroup\ignoresections\catcode`\#=6\def\macrotemp{#1}\parsearg\macroxxx} +% \def\macroxxx#1#2 \end macro{% +% \expandafter\gdef\macrotemp#1{#2}% +% \endgroup} %\def\linemacro#1{\begingroup\ignoresections\catcode`\#=6\def\macrotemp{#1}\parsearg\linemacroxxx} %\def\linemacroxxx#1#2 \end linemacro{% @@ -959,6 +1007,7 @@ where each line of input produces a line of output.} %\def\butfirst#1{} + \message{fonts,} % Font-change commands. @@ -988,7 +1037,7 @@ where each line of input produces a line of output.} \fi % Support font families that don't use the same naming scheme as CM. \def\rmshape{r} -\def\rmbshape{bx} %where the normal face is bold +\def\rmbshape{bx} %where the normal face is bold \def\bfshape{b} \def\bxshape{bx} \def\ttshape{tt} @@ -1028,7 +1077,7 @@ where each line of input produces a line of output.} \setfont\deftt\ttshape{10}{\magstep1} \def\df{\let\tentt=\deftt \let\tenbf = \defbf \bf} -% Fonts for indices and small examples. +% 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 @@ -1045,7 +1094,7 @@ where each line of input produces a line of output.} \font\indi=cmmi9 \font\indsy=cmsy9 -% Fonts for headings +% Chapter (and unnumbered) fonts (17.28pt). \setfont\chaprm\rmbshape{12}{\magstep2} \setfont\chapit\itbshape{10}{\magstep3} \setfont\chapsl\slbshape{10}{\magstep3} @@ -1057,6 +1106,7 @@ where each line of input produces a line of output.} \font\chapi=cmmi12 scaled \magstep2 \font\chapsy=cmsy10 scaled \magstep3 +% Section fonts (14.4pt). \setfont\secrm\rmbshape{12}{\magstep1} \setfont\secit\itbshape{10}{\magstep2} \setfont\secsl\slbshape{10}{\magstep2} @@ -1074,14 +1124,15 @@ where each line of input produces a line of output.} % \setfont\ssectt\ttshape{10}{\magstep1} % \setfont\ssecsf\sfshape{10}{\magstep1} -%\setfont\ssecrm\bfshape{10}{1315} % Note the use of cmb rather than cmbx. -%\setfont\ssecit\itshape{10}{1315} % Also, the size is a little larger than -%\setfont\ssecsl\slshape{10}{1315} % being scaled magstep1. +%\setfont\ssecrm\bfshape{10}{1315} % Note the use of cmb rather than cmbx. +%\setfont\ssecit\itshape{10}{1315} % Also, the size is a little larger than +%\setfont\ssecsl\slshape{10}{1315} % being scaled magstep1. %\setfont\ssectt\ttshape{10}{1315} %\setfont\ssecsf\sfshape{10}{1315} %\let\ssecbf=\ssecrm +% Subsection fonts (13.15pt). \setfont\ssecrm\rmbshape{12}{\magstephalf} \setfont\ssecit\itbshape{10}{1315} \setfont\ssecsl\slbshape{10}{1315} @@ -1127,22 +1178,23 @@ where each line of input produces a line of output.} \let\tenrm=\chaprm \let\tenit=\chapit \let\tensl=\chapsl \let\tenbf=\chapbf \let\tentt=\chaptt \let\smallcaps=\chapsc \let\tensf=\chapsf \let\teni=\chapi \let\tensy=\chapsy \let\tenttsl=\chapttsl - \resetmathfonts} + \resetmathfonts \setleading{19pt}} \def\secfonts{% \let\tenrm=\secrm \let\tenit=\secit \let\tensl=\secsl \let\tenbf=\secbf \let\tentt=\sectt \let\smallcaps=\secsc \let\tensf=\secsf \let\teni=\seci \let\tensy=\secsy \let\tenttsl=\secttsl - \resetmathfonts} + \resetmathfonts \setleading{16pt}} \def\subsecfonts{% \let\tenrm=\ssecrm \let\tenit=\ssecit \let\tensl=\ssecsl \let\tenbf=\ssecbf \let\tentt=\ssectt \let\smallcaps=\ssecsc \let\tensf=\ssecsf \let\teni=\sseci \let\tensy=\ssecsy \let\tenttsl=\ssecttsl - \resetmathfonts} + \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} + \resetmathfonts \setleading{12pt}} % Set up the default fonts, so we can use them for creating boxes. % @@ -1186,11 +1238,21 @@ where each line of input produces a line of output.} } \let\ttfont=\t \def\samp #1{`\tclose{#1}'\null} -\def\key #1{{\ttsl \nohyphenation \uppercase{#1}}\null} +\setfont\smallrm\rmshape{8}{1000} +\font\smallsy=cmsy9 +\def\key#1{{\smallrm\textfont2=\smallsy \leavevmode\hbox{% + \raise0.4pt\hbox{$\langle$}\kern-.08em\vtop{% + \vbox{\hrule\kern-0.4pt + \hbox{\raise0.4pt\hbox{\vphantom{$\langle$}}#1}}% + \kern-0.4pt\hrule}% + \kern-.06em\raise0.4pt\hbox{$\rangle$}}}} +% The old definition, with no lozenge: +%\def\key #1{{\ttsl \nohyphenation \uppercase{#1}}\null} \def\ctrl #1{{\tt \rawbackslash \hat}#1} \let\file=\samp \let\url=\samp % perhaps include a hypertex \special eventually +\def\email#1{$\langle${\tt #1}$\rangle$} % @code is a modification of @t, % which makes spaces the same size as normal in the surrounding text. @@ -1222,7 +1284,7 @@ where each line of input produces a line of output.} % Unfortunately, TeX uses one parameter (\hyphenchar) to control % both hyphenation at - and hyphenation within words. % We must therefore turn them both off (\tclose does that) -% and arrange explicitly to hyphenate an a dash. +% and arrange explicitly to hyphenate at a dash. % -- rms. { \catcode`\-=\active @@ -1267,12 +1329,19 @@ where each line of input produces a line of output.} \def\kbd#1{\def\look{#1}\expandafter\kbdfoo\look??\par} -\def\l#1{{\li #1}\null} % +% @l was never documented to mean ``switch to the Lisp font'', +% and it is not used as such in any manual I can find. We need it for +% Polish suppressed-l. --karl, 22sep96. +%\def\l#1{{\li #1}\null} -\def\r#1{{\rm #1}} % roman font +\def\r#1{{\rm #1}} % roman font % Use of \lowercase was suggested. -\def\sc#1{{\smallcaps#1}} % smallcaps font -\def\ii#1{{\it #1}} % italic font +\def\sc#1{{\smallcaps#1}} % smallcaps font +\def\ii#1{{\it #1}} % italic font + +% @pounds{} is a sterling sign. +\def\pounds{{\it\$}} + \message{page headings,} @@ -1287,7 +1356,7 @@ where each line of input produces a line of output.} \def\shorttitlepage{\parsearg\shorttitlepagezzz} \def\shorttitlepagezzz #1{\begingroup\hbox{}\vskip 1.5in \chaprm \centerline{#1}% - \endgroup\page\hbox{}\page} + \endgroup\page\hbox{}\page} \def\titlepage{\begingroup \parindent=0pt \textfonts \let\subtitlerm=\tenrm @@ -1304,9 +1373,9 @@ where each line of input produces a line of output.} % Now you can print the title using @title. \def\title{\parsearg\titlezzz}% \def\titlezzz##1{\leftline{\titlefont{##1}} - % print a rule at the page bottom also. - \finishedtitlepagefalse - \vskip4pt \hrule height 4pt width \hsize \vskip4pt}% + % print a rule at the page bottom also. + \finishedtitlepagefalse + \vskip4pt \hrule height 4pt width \hsize \vskip4pt}% % No rule at page bottom unless we print one at the top with @title. \finishedtitlepagetrue % @@ -1324,7 +1393,7 @@ where each line of input produces a line of output.} \let\oldpage = \page \def\page{% \iffinishedtitlepage\else - \finishtitlepage + \finishtitlepage \fi \oldpage \let\page = \oldpage @@ -1412,14 +1481,15 @@ where each line of input produces a line of output.} % }% unbind the catcode of @. -% @headings double turns headings on for double-sided printing. -% @headings single turns headings on for single-sided printing. -% @headings off turns them off. -% @headings on same as @headings double, retained for compatibility. -% @headings after turns on double-sided headings after this page. -% @headings doubleafter turns on double-sided headings after this page. +% @headings double turns headings on for double-sided printing. +% @headings single turns headings on for single-sided printing. +% @headings off turns them off. +% @headings on same as @headings double, retained for compatibility. +% @headings after turns on double-sided headings after this page. +% @headings doubleafter turns on double-sided headings after this page. % @headings singleafter turns on single-sided headings after this page. -% By default, they are off. +% By default, they are off at the start of a document, +% and turned `on' after @end titlepage. \def\headings #1 {\csname HEADINGS#1\endcsname} @@ -1433,22 +1503,24 @@ where each line of input produces a line of output.} % title on inside top of left hand pages, and page numbers on outside top % edge of all pages. \def\HEADINGSdouble{ -%\pagealignmacro \global\pageno=1 \global\evenfootline={\hfil} \global\oddfootline={\hfil} \global\evenheadline={\line{\folio\hfil\thistitle}} \global\oddheadline={\line{\thischapter\hfil\folio}} +\global\let\contentsalignmacro = \chapoddpage } +\let\contentsalignmacro = \chappager + % For single-sided printing, chapter title goes across top left of page, % page number on top right. \def\HEADINGSsingle{ -%\pagealignmacro \global\pageno=1 \global\evenfootline={\hfil} \global\oddfootline={\hfil} \global\evenheadline={\line{\thischapter\hfil\folio}} \global\oddheadline={\line{\thischapter\hfil\folio}} +\global\let\contentsalignmacro = \chappager } \def\HEADINGSon{\HEADINGSdouble} @@ -1459,6 +1531,7 @@ where each line of input produces a line of output.} \global\oddfootline={\hfil} \global\evenheadline={\line{\folio\hfil\thistitle}} \global\oddheadline={\line{\thischapter\hfil\folio}} +\global\let\contentsalignmacro = \chapoddpage } \def\HEADINGSsingleafter{\let\HEADINGShook=\HEADINGSsinglex} @@ -1467,6 +1540,7 @@ where each line of input produces a line of output.} \global\oddfootline={\hfil} \global\evenheadline={\line{\thischapter\hfil\folio}} \global\oddheadline={\line{\thischapter\hfil\folio}} +\global\let\contentsalignmacro = \chappager } % Subroutines used in generating headings @@ -1490,6 +1564,7 @@ July\or August\or September\or October\or November\or December\fi \def\settitle{\parsearg\settitlezzz} \def\settitlezzz #1{\gdef\thistitle{#1}} + \message{tables,} % @tabs -- simple alignment @@ -1812,6 +1887,7 @@ July\or August\or September\or October\or November\or December\fi % current hsize to be used for each column. You may use as many % columns as desired. + % Or use a template: % @multitable {Column 1 template} {Column 2 template} {Column 3 template} % @item ... @@ -1832,7 +1908,7 @@ July\or August\or September\or October\or November\or December\fi % with nothing between them for as many times as empty columns are needed, % ie, @tab@tab@tab will produce two empty columns. -% @item, @tab, @multicolumn or @endmulticolumn do not need to be on their +% @item, @tab, @multitable or @end multitable do not need to be on their % own lines, but it will not hurt if they are. % Sample multitable: @@ -1898,7 +1974,8 @@ July\or August\or September\or October\or November\or December\fi % We don't need this so we don't use it. \else \global\advance\colcount by1 - \setbox0=\hbox{#1}% + \setbox0=\hbox{#1 }% Add a normal word space as a separator; + % typically that is always in the input, anyway. \expandafter\xdef\csname col\the\colcount\endcsname{\the\wd0}% \fi% \fi% @@ -1959,7 +2036,7 @@ July\or August\or September\or October\or November\or December\fi % In either case we will make \leftskip=\multitablecolspace: \leftskip=\multitablecolspace \fi -\noindent##}\cr% +\noindent##\multistrut}\cr% % \everycr will reset column counter, \colcount, at the end of % each line. Every column entry will cause \colcount to advance by one. % The table preamble @@ -1972,11 +2049,10 @@ July\or August\or September\or October\or November\or December\fi \def\setmultitablespacing{% test to see if user has set \multitablelinespace. % If so, do nothing. If not, give it an appropriate dimension based on % current baselineskip. -\setbox0=\vbox{Xy} \ifdim\multitablelinespace=0pt %% strut to put in table in case some entry doesn't have descenders, %% to keep lines equally spaced -\gdef\multistrut{\vrule height\ht0 depth\dp0 width0pt\relax} +\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. @@ -1993,6 +2069,8 @@ width0pt\relax} \fi \global\advance\multitableparskip-7pt %% to keep parskip somewhat smaller %% than skip between lines in the table. \fi} + + \message{indexing,} % Index generation facilities @@ -2005,14 +2083,14 @@ width0pt\relax} \fi % It automatically defines \fooindex such that % \fooindex ...rest of line... puts an entry in the index foo. % It also defines \fooindfile to be the number of the output channel for -% the file that accumulates this index. The file's extension is foo. +% the file that accumulates this index. The file's extension is foo. % The name of an index should be no more than 2 characters long % for the sake of vms. \def\newindex #1{ \expandafter\newwrite \csname#1indfile\endcsname% Define number for output file -\openout \csname#1indfile\endcsname \jobname.#1 % Open the file -\expandafter\xdef\csname#1index\endcsname{% % Define \xxxindex +\openout \csname#1indfile\endcsname \jobname.#1 % Open the file +\expandafter\xdef\csname#1index\endcsname{% % Define \xxxindex \noexpand\doindex {#1}} } @@ -2024,8 +2102,8 @@ width0pt\relax} \fi \def\newcodeindex #1{ \expandafter\newwrite \csname#1indfile\endcsname% Define number for output file -\openout \csname#1indfile\endcsname \jobname.#1 % Open the file -\expandafter\xdef\csname#1index\endcsname{% % Define \xxxindex +\openout \csname#1indfile\endcsname \jobname.#1 % Open the file +\expandafter\xdef\csname#1index\endcsname{% % Define \xxxindex \noexpand\docodeindex {#1}} } @@ -2036,7 +2114,7 @@ width0pt\relax} \fi \def\synindex #1 #2 {% \expandafter\let\expandafter\synindexfoo\expandafter=\csname#2indfile\endcsname \expandafter\let\csname#1indfile\endcsname=\synindexfoo -\expandafter\xdef\csname#1index\endcsname{% % Define \xxxindex +\expandafter\xdef\csname#1index\endcsname{% % Define \xxxindex \noexpand\doindex {#2}}% } @@ -2045,7 +2123,7 @@ width0pt\relax} \fi \def\syncodeindex #1 #2 {% \expandafter\let\expandafter\synindexfoo\expandafter=\csname#2indfile\endcsname \expandafter\let\csname#1indfile\endcsname=\synindexfoo -\expandafter\xdef\csname#1index\endcsname{% % Define \xxxindex +\expandafter\xdef\csname#1index\endcsname{% % Define \xxxindex \noexpand\docodeindex {#2}}% } @@ -2093,24 +2171,31 @@ width0pt\relax} \fi \def\L{\realbackslash L}% \def\ss{\realbackslash ss}% % Take care of texinfo commands likely to appear in an index entry. +% (Must be a way to avoid doing expansion at all, and thus not have to +% laboriously list every single command here.) +\def\@{@}% will be @@ when we switch to @ as escape char. +%\let\{ = \lbracecmd +%\let\} = \rbracecmd \def\_{{\realbackslash _}}% \def\w{\realbackslash w }% \def\bf{\realbackslash bf }% -\def\rm{\realbackslash rm }% +%\def\rm{\realbackslash rm }% \def\sl{\realbackslash sl }% \def\sf{\realbackslash sf}% \def\tt{\realbackslash tt}% \def\gtr{\realbackslash gtr}% \def\less{\realbackslash less}% \def\hat{\realbackslash hat}% -\def\char{\realbackslash char}% +%\def\char{\realbackslash char}% \def\TeX{\realbackslash TeX}% \def\dots{\realbackslash dots }% \def\copyright{\realbackslash copyright }% \def\tclose##1{\realbackslash tclose {##1}}% \def\code##1{\realbackslash code {##1}}% +\def\dotless##1{\realbackslash dotless {##1}}% \def\samp##1{\realbackslash samp {##1}}% -\def\t##1{\realbackslash r {##1}}% +\def\,##1{\realbackslash ,{##1}}% +\def\t##1{\realbackslash t {##1}}% \def\r##1{\realbackslash r {##1}}% \def\i##1{\realbackslash i {##1}}% \def\b##1{\realbackslash b {##1}}% @@ -2138,6 +2223,7 @@ width0pt\relax} \fi \def\indexnofonts{% % Just ignore accents. +\let\,=\indexdummyfont \let\"=\indexdummyfont \let\`=\indexdummyfont \let\'=\indexdummyfont @@ -2150,6 +2236,7 @@ width0pt\relax} \fi \let\u=\indexdummyfont \let\v=\indexdummyfont \let\H=\indexdummyfont +\let\dotless=\indexdummyfont % Take care of the plain tex special European modified letters. \def\oe{oe}% \def\ae{ae}% @@ -2183,6 +2270,7 @@ width0pt\relax} \fi \let\var=\indexdummyfont \let\TeX=\indexdummytex \let\dots=\indexdummydots +\def\@{@}% } % To define \realbackslash, we must make \ not be an escape. @@ -2198,29 +2286,37 @@ width0pt\relax} \fi % workhorse for all \fooindexes % #1 is name of index, #2 is stuff to put there \def\doind #1#2{% -% Put the index entry in the margin if desired. -\ifx\SETmarginindex\relax\else% -\insert\margin{\hbox{\vrule height8pt depth3pt width0pt #2}}% -\fi% -{\count10=\lastpenalty % -{\indexdummies % Must do this here, since \bf, etc expand at this stage -\escapechar=`\\% -{\let\folio=0% Expand all macros now EXCEPT \folio -\def\rawbackslashxx{\indexbackslash}% \indexbackslash isn't defined now -% so it will be output as is; and it will print as backslash in the indx. -% -% Now process the index-string once, with all font commands turned off, -% to get the string to sort the index by. -{\indexnofonts -\xdef\temp1{#2}% -}% -% Now produce the complete index entry. We process the index-string again, -% this time with font commands expanded, to get what to print in the index. -\edef\temp{% -\write \csname#1indfile\endcsname{% -\realbackslash entry {\temp1}{\folio}{#2}}}% -\temp }% -}\penalty\count10}} + % Put the index entry in the margin if desired. + \ifx\SETmarginindex\relax\else + \insert\margin{\hbox{\vrule height8pt depth3pt width0pt #2}}% + \fi + {% + \count255=\lastpenalty + {% + \indexdummies % Must do this here, since \bf, etc expand at this stage + \escapechar=`\\ + {% + \let\folio=0 % We will expand all macros now EXCEPT \folio. + \def\rawbackslashxx{\indexbackslash}% \indexbackslash isn't defined now + % so it will be output as is; and it will print as backslash. + % + % First process the index-string with all font commands turned off + % to get the string to sort by. + {\indexnofonts \xdef\indexsorttmp{#2}}% + % + % 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}}% + }% + \temp + }% + }% + \penalty\count255 + }% +} \def\dosubind #1#2#3{% {\count10=\lastpenalty % @@ -2281,26 +2377,19 @@ width0pt\relax} \fi \def\printindex{\parsearg\doprintindex} -\def\doprintindex#1{% - \tex - \dobreak \chapheadingskip {10000} - \catcode`\%=\other\catcode`\&=\other\catcode`\#=\other - \catcode`\$=\other - \catcode`\~=\other - \indexbreaks +\def\doprintindex#1{\begingroup + \dobreak \chapheadingskip{10000}% % - % The following don't help, since the chars were translated - % when the raw index was written, and their fonts were discarded - % due to \indexnofonts. - %\catcode`\"=\active - %\catcode`\^=\active - %\catcode`\_=\active - %\catcode`\|=\active - %\catcode`\<=\active - %\catcode`\>=\active - % % - \def\indexbackslash{\rawbackslashxx} - \indexfonts\rm \tolerance=9500 \advance\baselineskip -1pt + \indexfonts \rm + \tolerance = 9500 + \indexbreaks + \def\indexbackslash{\rawbackslashxx}% + % Index files are almost Texinfo source, but we use \ as the escape + % character. It would be better to use @, but that's too big a change + % to make right now. + \catcode`\\ = 0 + \catcode`\@ = 11 + \escapechar = `\\ \begindoublecolumns % % See if the index file exists and is nonempty. @@ -2311,7 +2400,7 @@ width0pt\relax} \fi % index. The easiest way to prevent this problem is to make sure % there is some text. (Index is nonexistent) - \else + \else % % If the index file exists but is empty, then \openin leaves \ifeof % false. We have to make TeX try to read something from the file, so @@ -2325,8 +2414,7 @@ width0pt\relax} \fi \fi \closein 1 \enddoublecolumns - \Etex -} +\endgroup} % These macros are used by the sorted index file itself. % Change them to control the appearance of the index. @@ -2417,15 +2505,15 @@ width0pt\relax} \fi \noindent\hskip\secondaryindent\hbox{#1}\indexdotfill #2\par }} -%% Define two-column mode, which is used in indexes. -%% Adapted from the TeXbook, page 416. -\catcode `\@=11 +% Define two-column mode, which we use to typeset indexes. +% Adapted from the TeXbook, page 416, which is to say, +% the manmac.tex format used to print the TeXbook itself. +\catcode`\@=11 \newbox\partialpage - \newdimen\doublecolumnhsize -\def\begindoublecolumns{\begingroup +\def\begindoublecolumns{\begingroup % ended by \enddoublecolumns % Grab any single-column material above us. \output = {\global\setbox\partialpage =\vbox{\unvbox255\kern -\topskip \kern \baselineskip}}% @@ -2458,51 +2546,51 @@ width0pt\relax} \fi % Double the \vsize as well. (We don't need a separate register here, % since nobody clobbers \vsize.) \vsize = 2\vsize - \doublecolumnpagegoal } - -\def\enddoublecolumns{\eject \endgroup \pagegoal=\vsize \unvbox\partialpage} - -\def\doublecolumnsplit{\splittopskip=\topskip \splitmaxdepth=\maxdepth - \global\dimen@=\pageheight \global\advance\dimen@ by-\ht\partialpage - \global\setbox1=\vsplit255 to\dimen@ \global\setbox0=\vbox{\unvbox1} - \global\setbox3=\vsplit255 to\dimen@ \global\setbox2=\vbox{\unvbox3} - \ifdim\ht0>\dimen@ \setbox255=\vbox{\unvbox0\unvbox2} \global\setbox255=\copy5 \fi - \ifdim\ht2>\dimen@ \setbox255=\vbox{\unvbox0\unvbox2} \global\setbox255=\copy5 \fi +\def\doublecolumnout{% + \splittopskip=\topskip \splitmaxdepth=\maxdepth + % Get the available space for the double columns -- the normal + % (undoubled) page height minus any material left over from the + % previous page. + \dimen@=\pageheight \advance\dimen@ by-\ht\partialpage + % box0 will be the left-hand column, box1 the right. + \setbox0=\vsplit255 to\dimen@ \setbox2=\vsplit255 to\dimen@ + \onepageout\pagesofar + \unvbox255 \penalty\outputpenalty } -\def\doublecolumnpagegoal{% - \dimen@=\vsize \advance\dimen@ by-2\ht\partialpage \global\pagegoal=\dimen@ +\def\pagesofar{% + % The contents of the output page -- any previous material, + % followed by the two boxes we just split. + \unvbox\partialpage + \hsize = \doublecolumnhsize + \wd0=\hsize \wd2=\hsize \hbox to\pagewidth{\box0\hfil\box2}% } -\def\pagesofar{\unvbox\partialpage % - \hsize=\doublecolumnhsize % have to restore this since output routine - \wd0=\hsize \wd2=\hsize \hbox to\pagewidth{\box0\hfil\box2}} -\def\doublecolumnout{% - \setbox5=\copy255 - {\vbadness=10000 \doublecolumnsplit} - \ifvbox255 - \setbox0=\vtop to\dimen@{\unvbox0} - \setbox2=\vtop to\dimen@{\unvbox2} - \onepageout\pagesofar \unvbox255 \penalty\outputpenalty - \else - \setbox0=\vbox{\unvbox5} - \ifvbox0 - \dimen@=\ht0 \advance\dimen@ by\topskip \advance\dimen@ by-\baselineskip - \divide\dimen@ by2 \splittopskip=\topskip \splitmaxdepth=\maxdepth - {\vbadness=10000 - \loop \global\setbox5=\copy0 - \setbox1=\vsplit5 to\dimen@ - \setbox3=\vsplit5 to\dimen@ - \ifvbox5 \global\advance\dimen@ by1pt \repeat - \setbox0=\vbox to\dimen@{\unvbox1} - \setbox2=\vbox to\dimen@{\unvbox3} - \global\setbox\partialpage=\vbox{\pagesofar} - \doublecolumnpagegoal - } - \fi - \fi +\def\enddoublecolumns{% + \output={\balancecolumns}\eject % split what we have + \endgroup + % Back to normal single-column typesetting, but take account of the + % fact that we just accumulated some stuff on the output page. + \pagegoal=\vsize +} +\def\balancecolumns{% + % Called on the last page of the double column material. + \setbox0=\vbox{\unvbox255}% + \dimen@ = \ht0 + \advance\dimen@ by \topskip + \advance\dimen@ by-\baselineskip + \divide\dimen@ by 2 + \splittopskip = \topskip + % Loop until we get a decent breakpoint. + {\vbadness=10000 \loop \global\setbox3=\copy0 + \global\setbox1=\vsplit3 to\dimen@ + \ifdim\ht3>\dimen@ \global\advance\dimen@ by1pt \repeat}% + \setbox0=\vbox to\dimen@{\unvbox1}% + \setbox2=\vbox to\dimen@{\unvbox3}% + \pagesofar } - \catcode `\@=\other + + \message{sectioning,} % Define chapters, sections, etc. @@ -2780,7 +2868,7 @@ width0pt\relax} \fi \outer\def\unnumberedsubsec{\parsearg\unnumberedsubsecyyy} \def\unnumberedsubsecyyy #1{\unnmhead2{#1}} %normally calls unnumberedsubseczzz \def\unnumberedsubseczzz #1{\seccheck{unnumberedsubsec}% -\plainsecheading {#1}\gdef\thissection{#1}% +\plainsubsecheading {#1}\gdef\thissection{#1}% {\chapternofonts% \edef\temp{{\realbackslash unnumbsubsecentry{#1}{\noexpand\folio}}}% \escapechar=`\\% @@ -2825,7 +2913,7 @@ width0pt\relax} \fi \outer\def\unnumberedsubsubsec{\parsearg\unnumberedsubsubsecyyy} \def\unnumberedsubsubsecyyy #1{\unnmhead3{#1}} %normally unnumberedsubsubseczzz \def\unnumberedsubsubseczzz #1{\seccheck{unnumberedsubsubsec}% -\plainsecheading {#1}\gdef\thissection{#1}% +\plainsubsubsecheading {#1}\gdef\thissection{#1}% {\chapternofonts% \edef\temp{{\realbackslash unnumbsubsubsecentry{#1}{\noexpand\folio}}}% \escapechar=`\\% @@ -2863,10 +2951,10 @@ width0pt\relax} \fi % NOTE on use of \vbox for chapter headings, section headings, and % such: -% 1) We use \vbox rather than the earlier \line to permit -% overlong headings to fold. -% 2) \hyphenpenalty is set to 10000 because hyphenation in a -% heading is obnoxious; this forbids it. +% 1) We use \vbox rather than the earlier \line to permit +% overlong headings to fold. +% 2) \hyphenpenalty is set to 10000 because hyphenation in a +% heading is obnoxious; this forbids it. % 3) Likewise, headings look best if no \parindent is used, and % if justification is not attempted. Hence \raggedright. @@ -2884,11 +2972,10 @@ width0pt\relax} \fi \parindent=0pt\raggedright \rm #1\hfill}}\bigskip \par\penalty 200} -\def\heading{\parsearg\secheadingi} - -\def\subheading{\parsearg\subsecheadingi} - -\def\subsubheading{\parsearg\subsubsecheadingi} +% @heading, @subheading, @subsubheading. +\def\heading{\parsearg\plainsecheading} +\def\subheading{\parsearg\plainsubsecheading} +\def\subsubheading{\parsearg\plainsubsubsecheading} % These macros generate a chapter, section, etc. heading only % (including whitespace, linebreaking, etc. around it), @@ -2902,7 +2989,7 @@ width0pt\relax} \fi %%% Define plain chapter starts, and page on/off switching for it % Parameter controlling skip before chapter headings (if needed) -\newskip \chapheadingskip \chapheadingskip = 30pt plus 8pt minus 4pt +\newskip\chapheadingskip \def\chapbreak{\dobreak \chapheadingskip {-4000}} \def\chappager{\par\vfill\supereject} @@ -2911,15 +2998,18 @@ width0pt\relax} \fi \def\setchapternewpage #1 {\csname CHAPPAG#1\endcsname} \def\CHAPPAGoff{ +\global\let\contentsalignmacro = \chappager \global\let\pchapsepmacro=\chapbreak \global\let\pagealignmacro=\chappager} \def\CHAPPAGon{ +\global\let\contentsalignmacro = \chappager \global\let\pchapsepmacro=\chappager \global\let\pagealignmacro=\chappager \global\def\HEADINGSon{\HEADINGSsingle}} \def\CHAPPAGodd{ +\global\let\contentsalignmacro = \chapoddpage \global\let\pchapsepmacro=\chapoddpage \global\let\pagealignmacro=\chapoddpage \global\def\HEADINGSon{\HEADINGSdouble}} @@ -2931,30 +3021,35 @@ width0pt\relax} \fi \global\let\unnumbchapmacro=\unnchfplain \global\let\centerchapmacro=\centerchfplain} -\def\chfplain #1#2{% +% Plain chapter opening. +% #1 is the text, #2 the chapter number or empty if unnumbered. +\def\chfplain#1#2{% \pchapsepmacro {% - \chapfonts \vbox{\hyphenpenalty=10000\tolerance=5000 - \parindent=0pt\raggedright - \rm #2\enspace #1}% + \chapfonts \rm + \def\chapnum{#2}% + \setbox0 = \hbox{#2\ifx\chapnum\empty\else\enspace\fi}% + \vbox{\hyphenpenalty=10000 \tolerance=5000 \parindent=0pt \raggedright + \hangindent = \wd0 \centerparametersmaybe + \unhbox0 #1\par}% }% - \bigskip - \penalty5000 + \nobreak\bigskip % no page break after a chapter title + \nobreak } -\def\unnchfplain #1{% -\pchapsepmacro % -{\chapfonts \vbox{\hyphenpenalty=10000\tolerance=5000 - \parindent=0pt\raggedright - \rm #1\hfill}}\bigskip \par\penalty 10000 % -} +% Plain opening for unnumbered. +\def\unnchfplain#1{\chfplain{#1}{}} -\def\centerchfplain #1{% -\pchapsepmacro % -{\chapfonts \vbox{\hyphenpenalty=10000\tolerance=5000 - \parindent=0pt - {\rm #1}\hfill}}\bigskip \par\penalty 10000 % -} +% @centerchap -- centered and unnumbered. +\let\centerparametersmaybe = \relax +\def\centerchfplain#1{{% + \def\centerparametersmaybe{% + \advance\rightskip by 3\rightskip + \leftskip = \rightskip + \parfillskip = 0pt + }% + \chfplain{#1}{}% +}} \CHAPFplain % The default @@ -2980,69 +3075,70 @@ width0pt\relax} \fi \global\let\unnumbchapmacro=\unnchfopen \global\let\centerchapmacro=\centerchfopen} -% Parameter controlling skip before section headings. -\newskip \subsecheadingskip \subsecheadingskip = 17pt plus 8pt minus 4pt +% Section titles. +\newskip\secheadingskip +\def\secheadingbreak{\dobreak \secheadingskip {-1000}} +\def\secheading#1#2#3{\sectionheading{sec}{#2.#3}{#1}} +\def\plainsecheading#1{\sectionheading{sec}{}{#1}} + +% Subsection titles. +\newskip \subsecheadingskip \def\subsecheadingbreak{\dobreak \subsecheadingskip {-500}} +\def\subsecheading#1#2#3#4{\sectionheading{subsec}{#2.#3.#4}{#1}} +\def\plainsubsecheading#1{\sectionheading{subsec}{}{#1}} -\newskip \secheadingskip \secheadingskip = 21pt plus 8pt minus 4pt -\def\secheadingbreak{\dobreak \secheadingskip {-1000}} +% Subsubsection titles. +\let\subsubsecheadingskip = \subsecheadingskip +\let\subsubsecheadingbreak = \subsecheadingbreak +\def\subsubsecheading#1#2#3#4#5{\sectionheading{subsubsec}{#2.#3.#4.#5}{#1}} +\def\plainsubsubsecheading#1{\sectionheading{subsubsec}{}{#1}} -% @paragraphindent is defined for the Info formatting commands only. -\let\paragraphindent=\comment -% Section fonts are the base font at magstep2, which produces -% a size a bit more than 14 points in the default situation. - -\def\secheading #1#2#3{\secheadingi {#2.#3\enspace #1}} -\def\plainsecheading #1{\secheadingi {#1}} -\def\secheadingi #1{{\advance \secheadingskip by \parskip % -\secheadingbreak}% -{\secfonts \vbox{\hyphenpenalty=10000\tolerance=5000 - \parindent=0pt\raggedright - \rm #1\hfill}}% -\ifdim \parskip<10pt \kern 10pt\kern -\parskip\fi \penalty 10000 } - - -% Subsection fonts are the base font at magstep1, -% which produces a size of 12 points. - -\def\subsecheading #1#2#3#4{\subsecheadingi {#2.#3.#4\enspace #1}} -\def\subsecheadingi #1{{\advance \subsecheadingskip by \parskip % -\subsecheadingbreak}% -{\subsecfonts \vbox{\hyphenpenalty=10000\tolerance=5000 - \parindent=0pt\raggedright - \rm #1\hfill}}% -\ifdim \parskip<10pt \kern 10pt\kern -\parskip\fi \penalty 10000 } - -\def\subsubsecfonts{\subsecfonts} % Maybe this should change: - % Perhaps make sssec fonts scaled - % magstep half -\def\subsubsecheading #1#2#3#4#5{\subsubsecheadingi {#2.#3.#4.#5\enspace #1}} -\def\subsubsecheadingi #1{{\advance \subsecheadingskip by \parskip % -\subsecheadingbreak}% -{\subsubsecfonts \vbox{\hyphenpenalty=10000\tolerance=5000 - \parindent=0pt\raggedright - \rm #1\hfill}}% -\ifdim \parskip<10pt \kern 10pt\kern -\parskip\fi \penalty 10000} +% Print any size section title. +% +% #1 is the section type (sec/subsec/subsubsec), #2 is the section +% number (maybe empty), #3 the text. +\def\sectionheading#1#2#3{% + {% + \expandafter\advance\csname #1headingskip\endcsname by \parskip + \csname #1headingbreak\endcsname + }% + {% + % Switch to the right set of fonts. + \csname #1fonts\endcsname \rm + % + % Only insert the separating space if we have a section number. + \def\secnum{#2}% + \setbox0 = \hbox{#2\ifx\secnum\empty\else\enspace\fi}% + % + \vbox{\hyphenpenalty=10000 \tolerance=5000 \parindent=0pt \raggedright + \hangindent = \wd0 % zero if no section number + \unhbox0 #3}% + }% + \ifdim\parskip<10pt \nobreak\kern10pt\nobreak\kern-\parskip\fi \nobreak +} \message{toc printing,} - % Finish up the main text and prepare to read what we've written % to \contentsfile. \newskip\contentsrightmargin \contentsrightmargin=1in \def\startcontents#1{% - \pagealignmacro + % If @setchapternewpage on, and @headings double, the contents should + % start on an odd page, unlike chapters. Thus, we maintain + % \contentsalignmacro in parallel with \pagealignmacro. + % From: Torbjorn Granlund + \contentsalignmacro \immediate\closeout \contentsfile \ifnum \pageno>0 - \pageno = -1 % Request roman numbered pages. + \pageno = -1 % Request roman numbered pages. \fi % Don't need to put `Contents' or `Short Contents' in the headline. % It is abundantly clear what they are. \unnumbchapmacro{#1}\def\thischapter{}% - \begingroup % Set up to handle contents files properly. + \begingroup % Set up to handle contents files properly. \catcode`\\=0 \catcode`\{=1 \catcode`\}=2 \catcode`\@=11 \catcode`\^=7 % to see ^^e4 as \"a etc. juha@piuha.ydi.vtt.fi \raggedbottom % Worry more about breakpoints than the bottom. @@ -3068,6 +3164,7 @@ width0pt\relax} \fi \secfonts \let\rm=\shortcontrm \let\bf=\shortcontbf \let\sl=\shortcontsl \rm + \hyphenpenalty = 10000 \advance\baselineskip by 1pt % Open it up a little. \def\secentry ##1##2##3##4{} \def\unnumbsecentry ##1##2{} @@ -3111,7 +3208,7 @@ width0pt\relax} \fi % This space should be plenty, since a single number is .5em, and the % widest letter (M) is 1em, at least in the Computer Modern fonts. % (This space doesn't include the extra space that gets added after - % the label; that gets put in in \shortchapentry above.) + % the label; that gets put in by \shortchapentry above.) \advance\dimen0 by 1.1em \hbox to \dimen0{#1\hfil}% } @@ -3132,22 +3229,21 @@ width0pt\relax} \fi \dosubsubsecentry{#2.#3.#4.#5\labelspace#1}{#6}} \def\unnumbsubsubsecentry#1#2{\dosubsubsecentry{#1}{#2}} - % This parameter controls the indentation of the various levels. \newdimen\tocindent \tocindent = 3pc % Now for the actual typesetting. In all these, #1 is the text and #2 is the % page number. % -% If the toc has to be broken over pages, we would want to be at chapters +% If the toc has to be broken over pages, we want it to be at chapters % if at all possible; hence the \penalty. \def\dochapentry#1#2{% - \penalty-300 \vskip\baselineskip + \penalty-300 \vskip1\baselineskip plus.33\baselineskip minus.25\baselineskip \begingroup \chapentryfonts \tocentry{#1}{\dopageno{#2}}% \endgroup - \nobreak\vskip .25\baselineskip + \nobreak\vskip .25\baselineskip plus.1\baselineskip } \def\dosecentry#1#2{\begingroup @@ -3172,7 +3268,7 @@ width0pt\relax} \fi % % \turnoffactive is for the sake of @" used for umlauts. \def\tocentry#1#2{\begingroup - \hyphenpenalty = 10000 + \vskip 0pt plus1pt % allow a little stretch for the sake of nice page breaks \entry{\turnoffactive #1}{\turnoffactive #2}% \endgroup} @@ -3197,8 +3293,6 @@ width0pt\relax} \fi \newbox\pushcharbox \newbox\bullbox \newbox\equivbox \newbox\errorbox -\let\ptexequiv = \equiv - %{\tentt %\global\setbox\dblarrowbox = \hbox to 1em{\hfil$\Rightarrow$\hfil} %\global\setbox\longdblarrowbox = \hbox to 1em{\hfil$\mapsto$\hfil} @@ -3209,12 +3303,11 @@ width0pt\relax} \fi % depth .1ex\hfil} %} +% @point{}, @result{}, @expansion{}, @print{}, @equiv{}. \def\point{$\star$} - \def\result{\leavevmode\raise.15ex\hbox to 1em{\hfil$\Rightarrow$\hfil}} \def\expansion{\leavevmode\raise.1ex\hbox to 1em{\hfil$\mapsto$\hfil}} \def\print{\leavevmode\lower.1ex\hbox to 1em{\hfil$\dashv$\hfil}} - \def\equiv{\leavevmode\lower.1ex\hbox to 1em{\hfil$\ptexequiv$\hfil}} % Adapted from the TeXbook's \boxit. @@ -3246,7 +3339,7 @@ width0pt\relax} \fi \catcode `\$=3 \catcode `\&=4 \catcode `\#=6 \catcode `\^=7 \catcode `\_=8 \catcode `\~=13 \let~=\tie \catcode `\%=14 -\catcode 43=12 +\catcode 43=12 % plus \catcode`\"=12 \catcode`\==12 \catcode`\|=12 @@ -3254,6 +3347,7 @@ width0pt\relax} \fi \catcode`\>=12 \escapechar=`\\ % +\let\,=\ptexcomma \let\~=\ptextilde \let\{=\ptexlbrace \let\}=\ptexrbrace @@ -3264,8 +3358,7 @@ width0pt\relax} \fi \def\enddots{\relax\ifmmode\endldots\else$\mathsurround=0pt \endldots\,$\fi} \def\@{@}% \let\bullet=\ptexbullet -\let\b=\ptexb \let\c=\ptexc \let\i=\ptexi \let\t=\ptext \let\l=\ptexl -\let\L=\ptexL +\let\b=\ptexb \let\c=\ptexc \let\i=\ptexi \let\t=\ptext % \let\Etex=\endgroup} @@ -3324,50 +3417,50 @@ width0pt\relax} \fi \def\cbl{{\circle\char'012\hskip -6pt}} \def\cbr{{\hskip 6pt\circle\char'011}} \def\carttop{\hbox to \cartouter{\hskip\lskip - \ctl\leaders\hrule height\circthick\hfil\ctr - \hskip\rskip}} + \ctl\leaders\hrule height\circthick\hfil\ctr + \hskip\rskip}} \def\cartbot{\hbox to \cartouter{\hskip\lskip - \cbl\leaders\hrule height\circthick\hfil\cbr - \hskip\rskip}} + \cbl\leaders\hrule height\circthick\hfil\cbr + \hskip\rskip}} % \newskip\lskip\newskip\rskip \long\def\cartouche{% \begingroup - \lskip=\leftskip \rskip=\rightskip - \leftskip=0pt\rightskip=0pt %we want these *outside*. - \cartinner=\hsize \advance\cartinner by-\lskip - \advance\cartinner by-\rskip - \cartouter=\hsize - \advance\cartouter by 18pt % allow for 3pt kerns on either -% side, and for 6pt waste from -% each corner char - \normbskip=\baselineskip \normpskip=\parskip \normlskip=\lineskip - % Flag to tell @lisp, etc., not to narrow margin. - \let\nonarrowing=\comment - \vbox\bgroup - \baselineskip=0pt\parskip=0pt\lineskip=0pt - \carttop - \hbox\bgroup - \hskip\lskip - \vrule\kern3pt - \vbox\bgroup - \hsize=\cartinner - \kern3pt - \begingroup - \baselineskip=\normbskip - \lineskip=\normlskip - \parskip=\normpskip - \vskip -\parskip + \lskip=\leftskip \rskip=\rightskip + \leftskip=0pt\rightskip=0pt %we want these *outside*. + \cartinner=\hsize \advance\cartinner by-\lskip + \advance\cartinner by-\rskip + \cartouter=\hsize + \advance\cartouter by 18pt % allow for 3pt kerns on either +% side, and for 6pt waste from +% each corner char + \normbskip=\baselineskip \normpskip=\parskip \normlskip=\lineskip + % Flag to tell @lisp, etc., not to narrow margin. + \let\nonarrowing=\comment + \vbox\bgroup + \baselineskip=0pt\parskip=0pt\lineskip=0pt + \carttop + \hbox\bgroup + \hskip\lskip + \vrule\kern3pt + \vbox\bgroup + \hsize=\cartinner + \kern3pt + \begingroup + \baselineskip=\normbskip + \lineskip=\normlskip + \parskip=\normpskip + \vskip -\parskip \def\Ecartouche{% - \endgroup - \kern3pt - \egroup - \kern3pt\vrule - \hskip\rskip - \egroup - \cartbot - \egroup + \endgroup + \kern3pt + \egroup + \kern3pt\vrule + \hskip\rskip + \egroup + \cartbot + \egroup \endgroup }} @@ -3430,8 +3523,7 @@ width0pt\relax} \fi \let\Esmalllisp = \nonfillfinish \let\Esmallexample = \nonfillfinish % - % Smaller interline space and fonts for small examples. - \setleading{10pt}% + % Smaller fonts for small examples. \indexfonts \tt \rawbackslash % make \ output the \ character from the current font (tt) \gobble @@ -3959,6 +4051,7 @@ width0pt\relax} \fi \def\deftpx #1 {\errmessage{@deftpx in invalid context}} + \message{cross reference,} % Define cross-reference macros \newwrite \auxfile @@ -3966,6 +4059,11 @@ width0pt\relax} \fi \newif\ifhavexrefs % True if xref values are known. \newif\ifwarnedxrefs % True if we warned once that they aren't known. +% @inforef is simple. +\def\inforef #1{\inforefzzz #1,,,,**} +\def\inforefzzz #1,#2,#3,#4**{\putwordSee{} \putwordInfo{} \putwordfile{} \file{\ignorespaces #3{}}, + node \samp{\ignorespaces#1{}}} + % \setref{foo} defines a cross-reference point named foo. \def\setref#1{% @@ -4201,7 +4299,8 @@ width0pt\relax} \fi % The trailing space in the following definition for supereject is % vital for proper filling; pages come out unaligned when you do a % pagealignmacro call if that space before the closing brace is -% removed. +% removed. (Generally, numeric constants should always be followed by a +% space to prevent strange expansion errors.) \def\supereject{\par\penalty -20000\footnoteno =0 } % @footnotestyle is meaningful for info output only.. @@ -4326,13 +4425,18 @@ width0pt\relax} \fi % Set some numeric style parameters, for 8.5 x 11 format. -%\hsize = 6.5in +\hsize = 6in +\hoffset = .25in \newdimen\defaultparindent \defaultparindent = 15pt \parindent = \defaultparindent -\parskip 18pt plus 1pt -\setleading{15pt} +\parskip 3pt plus 2pt minus 1pt +\setleading{13.2pt} \advance\topskip by 1.2cm +\chapheadingskip = 15pt plus 4pt minus 2pt +\secheadingskip = 12pt plus 3pt minus 2pt +\subsecheadingskip = 9pt plus 2pt minus 2pt + % Prevent underfull vbox error messages. \vbadness=10000 @@ -4355,30 +4459,28 @@ width0pt\relax} \fi % Use @smallbook to reset parameters for 7x9.5 format (or else 7x9.25) \def\smallbook{ - -% These values for secheadingskip and subsecheadingskip are -% experiments. RJC 7 Aug 1992 -\global\secheadingskip = 17pt plus 6pt minus 3pt -\global\subsecheadingskip = 14pt plus 6pt minus 3pt - -\global\lispnarrowing = 0.3in -\setleading{12pt} -\advance\topskip by -1cm -\global\parskip 3pt plus 1pt -\global\hsize = 5in -\global\vsize=7.5in -\global\tolerance=700 -\global\hfuzz=1pt -\global\contentsrightmargin=0pt -\global\deftypemargin=0pt -\global\defbodyindent=.5cm - -\global\pagewidth=\hsize -\global\pageheight=\vsize - -\global\let\smalllisp=\smalllispx -\global\let\smallexample=\smalllispx -\global\def\Esmallexample{\Esmalllisp} + \global\chapheadingskip = 15pt plus 4pt minus 2pt + \global\secheadingskip = 12pt plus 3pt minus 2pt + \global\subsecheadingskip = 9pt plus 2pt minus 2pt + % + \global\lispnarrowing = 0.3in + \setleading{12pt} + \advance\topskip by -1cm + \global\parskip 2pt plus 1pt + \global\hsize = 5in + \global\vsize=7.5in + \global\tolerance=700 + \global\hfuzz=1pt + \global\contentsrightmargin=0pt + \global\deftypemargin=0pt + \global\defbodyindent=.5cm + % + \global\pagewidth=\hsize + \global\pageheight=\vsize + % + \global\let\smalllisp=\smalllispx + \global\let\smallexample=\smalllispx + \global\def\Esmallexample{\Esmalllisp} } % Use @afourpaper to print on European A4 paper. @@ -4401,6 +4503,11 @@ width0pt\relax} \fi \global\pageheight=\vsize } +\bindingoffset=0pt +\normaloffset=\hoffset +\pagewidth=\hsize +\pageheight=\vsize + % Allow control of the text dimensions. Parameters in order: textheight; % textwidth; voffset; hoffset; binding offset; topskip. % All require a dimension; diff --git a/version.texi b/version.texi index f1d01518..648b1a2c 100644 --- a/version.texi +++ b/version.texi @@ -1,3 +1,3 @@ -@set UPDATED 21 September 1996 +@set UPDATED 5 October 1996 @set EDITION 1.1f @set VERSION 1.1f diff --git a/ylwrap b/ylwrap index 83ce13fc..9a484df8 100755 --- a/ylwrap +++ b/ylwrap @@ -16,25 +16,47 @@ # along with this program; if not, write to the Free Software # Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. +# Usage: +# ylwrap PROG [OUTPUT DESIRED]... -- [ARGS]... +# * PROG is program to run. +# * OUTPUT is file PROG generates +# * DESIRED is file we actually want +# * ARGS are passed to PROG +# Any number of OUTPUT,DESIRED pairs may be used. + # The program to run. prog="$1" - -# The output file the program generates, eg `y.tab.c'. -progoutput="$2" - -# The output file we actually want. -realoutput="$3" - -# Strip arguments we've used; remaining arguments go to PROG. -shift -shift shift +pairlist= +while test "$#" -ne 0; do + if test "$1" = "--"; then + break + fi + pairlist="$pairlist $1" + shift +done + $prog ${1+"$@"} || exit $? -if test -f "$progoutput"; then - mv "$progoutput" "$realoutput" || exit $? -else - exit 1 -fi -exit 0 +set X $pairlist +shift +status=0 +first=yes +while "$#" -ne 0; do + if test -f "$1"; then + mv "$1" "$2" || status=$? + else + # A missing file is only an error for the first file. This is a + # blatant hack to let us support using "yacc -d". If -d is not + # specified, we don't want an error when the header file is + # "missing". + if test $first = yes; then + status=1 + fi + fi + shift + shift + first=no +done +exit $status -- 2.43.5