diff options
author | Jeff Bailey <jbailey@raspberryginger.com> | 2000-02-17 03:03:19 +0000 |
---|---|---|
committer | Jeff Bailey <jbailey@raspberryginger.com> | 2000-02-17 03:03:19 +0000 |
commit | bd11691d6520f7539e7ed2efdf75f266719e27e9 (patch) | |
tree | 13d3a4e534f6df846a128af52438769b9f51f09e /examples | |
download | m4-bd11691d6520f7539e7ed2efdf75f266719e27e9.tar.gz |
Initial revision
Diffstat (limited to 'examples')
98 files changed, 9636 insertions, 0 deletions
diff --git a/examples/Makefile.am b/examples/Makefile.am new file mode 100644 index 00000000..8b96545b --- /dev/null +++ b/examples/Makefile.am @@ -0,0 +1,5 @@ +EXTRA_DIST = capitalize.m4 comments.m4 ddivert.m4 \ +debug.m4 esyscmd.m4 exp.m4 file.m4 foreach.m4 forloop.m4 fstab.m4 \ +hanoi.m4 incl-test.m4 include.m4 indir.m4 misc.m4 multiquotes.m4 \ +patsubst.m4 pushpop.m4 regexp.m4 reverse.m4 stackovf.sh sync-lines.m4 \ +sysv-args.m4 trace.m4 translit.m4 undivert.incl undivert.m4 wrap.m4 diff --git a/examples/Makefile.in b/examples/Makefile.in new file mode 100644 index 00000000..47e6fe16 --- /dev/null +++ b/examples/Makefile.in @@ -0,0 +1,60 @@ +# Makefile for GNU m4 examples. +# Copyright (C) 1994 Free Software Foundation, Inc. + +# This program is free software; you can redistribute 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., 675 Mass Ave, Cambridge, MA 02139, USA. + +PRODUCT = @PRODUCT@ +VERSION = @VERSION@ + +SHELL = /bin/sh +srcdir = @srcdir@ +VPATH = @srcdir@ + +.SUFFIXES: + +DISTFILES = Makefile.in capitalize.m4 comments.m4 ddivert.m4 \ +debug.m4 esyscmd.m4 exp.m4 file.m4 foreach.m4 forloop.m4 fstab.m4 \ +hanoi.m4 incl-test.m4 include.m4 indir.m4 misc.m4 multiquotes.m4 \ +patsubst.m4 pushpop.m4 regexp.m4 reverse.m4 stackovf.sh sync-lines.m4 \ +sysv-args.m4 trace.m4 translit.m4 undivert.incl undivert.m4 wrap.m4 + +all: + +install: + +uninstall: + +mostlyclean: + +clean: mostlyclean + +distclean: clean + rm -f Makefile + +realclean: distclean + +dist: $(DISTFILES) + @echo "Copying distribution files" + @for file in $(DISTFILES); do \ + ln $(srcdir)/$$file ../$(PRODUCT)-$(VERSION)/examples 2> /dev/null \ + || cp -p $(srcdir)/$$file ../$(PRODUCT)-$(VERSION)/examples; \ + done + +Makefile: Makefile.in ../config.status + cd .. && CONFIG_FILES=examples/$@ CONFIG_HEADERS= ./config.status + +# Tell versions [3.59,3.63) of GNU make not to export all variables. +# Otherwise a system limit (for SysV at least) may be exceeded. +.NOEXPORT: diff --git a/examples/WWW/Makefile b/examples/WWW/Makefile new file mode 100644 index 00000000..f143493e --- /dev/null +++ b/examples/WWW/Makefile @@ -0,0 +1,18 @@ +M4 = m4 +M4OPTS = -Im4lib + +VPATH = .:m4lib + +all: *.htm + +%.htm: %.m4 + @$(M4) $(M4OPTS) $< >new.htm && \ + if cmp -s new.htm $@; then \ + rm new.htm; \ + echo "$@ has not changed"; \ + else \ + echo "$@ updated"; \ + mv new.htm $@; \ + fi + +*.htm: m4lib/*.m4 diff --git a/examples/WWW/_footer.htm b/examples/WWW/_footer.htm new file mode 100644 index 00000000..8fbbce61 --- /dev/null +++ b/examples/WWW/_footer.htm @@ -0,0 +1,15 @@ + + + +</TD> + +</TR> + +</TABLE> + +</BODY> + + +</HTML> + + diff --git a/examples/WWW/_header.htm b/examples/WWW/_header.htm new file mode 100644 index 00000000..643223d6 --- /dev/null +++ b/examples/WWW/_header.htm @@ -0,0 +1,234 @@ +<!DOCTYPE html public "-//w3c//dtd html 4.0 transitional//en"> +<HTML> +<HEAD> +<TITLE>GNU m4 - Development site</TITLE> +<META NAME="AUTHOR" CONTENT="René Seindal"> +<META NAME="GENERATOR" CONTENT="GNU m4 1.4o"> +</HEAD> + <BODY text="#000000" bgcolor="#FFCC99" link="#0000EF" alink="#FF0000" vlink="#51188E"> +<TABLE cellpadding=5 width="100%"> +<TR align=left valign=bottom> +<TD align=center valign=middle colspan="3" width="100%" bgcolor="#FF9900"> + +<H1>GNU m4</H1> + +<H2>Discussion Forum</H2> + +</TD> + +</TR> + <TR > +<TD align=left valign=top width="15%" bgcolor="#FF9900"> + + + + + + + + + + + +<TABLE > +<TR> +<TD bgcolor="#CC6600"> +<P> +<B>General info</B> +</P> + +</TD> + +</TR> + <TR> +<TD> +<P> + +<FONT size=-1><B><A HREF="/rene/gnu/whatis.htm">What is m4</A><BR> +<A HREF="/rene/gnu/features.htm">Features</A><BR> +<A HREF="/rene/gnu/uses.htm">Uses of m4</A></B></FONT> + +</P> + +</TD> + +</TR> + <TR> +<TD height=5> + +</TD> + +</TR> + <TR> +<TD bgcolor="#CC6600"> +<P> +<B>Documentation</B> +</P> + +</TD> + +</TR> + <TR> +<TD> +<P> + +<FONT size=-1><B><A HREF="/rene/gnu/man/m4_toc.html">Manual</A></B></FONT> + +</P> + +</TD> + +</TR> + <TR> +<TD height=5> + +</TD> + +</TR> + <TR> +<TD bgcolor="#CC6600"> +<P> +<B>Source files</B> +</P> + +</TD> + +</TR> + <TR> +<TD> +<P> + +<FONT size=-1><B><A HREF="/rene/gnu/readme.htm">README</A><BR> +<A HREF="/rene/gnu/todo.htm">TODO</A><BR> +<A HREF="/rene/gnu/news.htm">NEWS</A><BR> +<A HREF="/rene/gnu/changelog.htm">ChangeLog</A><BR> +<A HREF="/rene/gnu/thanks.htm">Contributors</A><BR> +<A HREF="/rene/gnu/m4/">Browse it</A></B></FONT> + +</P> + +</TD> + +</TR> + <TR> +<TD height=5> + +</TD> + +</TR> + <TR> +<TD bgcolor="#CC6600"> +<P> +<B>The Future</B> +</P> + +</TD> + +</TR> + <TR> +<TD> +<P> + +<FONT size=-1><B><A HREF="/rene/gnu/modules.htm">Modules</A><BR> +<A HREF="/rene/gnu/visions.htm">Visions</A></B></FONT> + +</P> + +</TD> + +</TR> + <TR> +<TD height=5> + +</TD> + +</TR> + <TR> +<TD bgcolor="#CC6600"> +<P> +<B>Feedback</B> +</P> + +</TD> + +</TR> + <TR> +<TD> +<P> + +<FONT size=-1><B><A HREF="/rene/gnu/lists.htm">Mailing-lists</A><BR> +<A HREF="/rene/gnu/feedback.htm">Feedback</A><BR> + +</P> + +</TD> + +</TR> + <TR> +<TD height=5> + +</TD> + +</TR> + <TR> +<TD bgcolor="#CC6600"> +<P> +<B>Development</B> +</P> + +</TD> + +</TR> + <TR> +<TD> +<P> + +<FONT size=-1><B><A HREF="/rene/gnu/download.htm">Download</A><BR> +<A HREF="/rene/gnu/bugs.htm">Known bugs</A></B></FONT> + +</P> + +</TD> + +</TR> + <TR> +<TD height=5> + +</TD> + +</TR> + <TR> +<TD bgcolor="#CC6600"> +<P> +<B>Examples</B> +</P> + +</TD> + +</TR> + <TR> +<TD> +<P> + +<FONT size=-1><B><A HREF="/rene/gnu/thissite.htm">This site</A></B></FONT> + +</P> + +</TD> + +</TR> + +</TABLE> + + + + + + + + +</TD> + <TD align=left valign=top width="90%"> + + + diff --git a/examples/WWW/bugs.htm b/examples/WWW/bugs.htm new file mode 100644 index 00000000..207fcc31 --- /dev/null +++ b/examples/WWW/bugs.htm @@ -0,0 +1,284 @@ +<DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 TRANSITIONAL//EN"> +<HTML> +<HEAD> +<TITLE>GNU m4 - Known bugs in GNU m4 \__m4_version__</TITLE> +<META NAME="AUTHOR" CONTENT="René Seindal"> +<META NAME="GENERATOR" CONTENT="GNU m4 1.4n"> +</HEAD> + <BODY text="#000000" bgcolor="#FFCC99" link="#0000EF" alink="#FF0000" vlink="#51188E"> +<TABLE cellpadding=5 width="100%"> +<TR align=left valign=bottom> +<TD align=center valign=center colspan="3" width="100%" bgcolor="#FF9900"> + +<H1>GNU m4</H1> + +<H2>Known bugs in GNU m4 1.4n</H2> + +</TD> + +</TR> + <TR > +<TD align=left valign=top width="15%" bgcolor="#FF9900"> + + + + + + + + + + + +<TABLE align=left valign=top columns=1> +<TR> +<TD bgcolor="#CC6600"> +<P> +<B>Generel info</B> +</P> + +</TD> + +</TR> + <TR> +<TD> + +<FONT size=-1><P> +<B><A HREF="whatis.htm">What is m4</A><BR> +<A HREF="features.htm">Features</A><BR> +<A HREF="uses.htm">Uses of m4</A></B> +</P> +</FONT> + +</TD> + +</TR> + <TR> +<TD height=5> + +</TD> + +</TR> + <TR> +<TD bgcolor="#CC6600"> +<P> +<B>Documentation</B> +</P> + +</TD> + +</TR> + <TR> +<TD> + +<FONT size=-1><P> +<B><A HREF="man/m4_toc.html">Manual</A></B> +</P> +</FONT> + +</TD> + +</TR> + <TR> +<TD height=5> + +</TD> + +</TR> + <TR> +<TD bgcolor="#CC6600"> +<P> +<B>Source files</B> +</P> + +</TD> + +</TR> + <TR> +<TD> + +<FONT size=-1><P> +<B><A HREF="readme.htm">README</A><BR> +<A HREF="todo.htm">TODO</A><BR> +<A HREF="news.htm">NEWS</A><BR> +<A HREF="changelog.htm">ChangeLog</A><BR> +<A HREF="thanks.htm">Contributors</A><BR> +<A HREF="m4/">Browse it</A></B> +</P> +</FONT> + +</TD> + +</TR> + <TR> +<TD height=5> + +</TD> + +</TR> + <TR> +<TD bgcolor="#CC6600"> +<P> +<B>The Future</B> +</P> + +</TD> + +</TR> + <TR> +<TD> + +<FONT size=-1><P> +<B><A HREF="modules.htm">Modules</A><BR> +<A HREF="visions.htm">Visions</A></B> +</P> +</FONT> + +</TD> + +</TR> + <TR> +<TD height=5> + +</TD> + +</TR> + <TR> +<TD bgcolor="#CC6600"> +<P> +<B>Development</B> +</P> + +</TD> + +</TR> + <TR> +<TD> + +<FONT size=-1><P> +<B><A HREF="lists.htm">Mailing-lists</A><BR> +<A HREF="feedback.htm">Feedback</A><BR> +<A HREF="download.htm">Download</A><BR> +<A HREF="bugs.htm">Known bugs</A></B> +</P> +</FONT> + +</TD> + +</TR> + <TR> +<TD height=5> + +</TD> + +</TR> + <TR> +<TD bgcolor="#CC6600"> +<P> +<B>Examples</B> +</P> + +</TD> + +</TR> + <TR> +<TD> + +<FONT size=-1><P> +<B><A HREF="thissite.htm">This site</A></B> +</P> +</FONT> + +</TD> + +</TR> + +</TABLE> + + + + + + + + +</TD> + <TD align=left valign=top width="90%"> + + +<H2>Known bugs in GNU m4</H2> + + + + + + +<UL> + + +<LI> <A HREF="#undivert">undivert(0) might read from standard output.</A> + + + + +<LI> <A HREF="#sigaltstack">failure if sigaltstack or sigstack returns ENOSYS.</A> + + + + + +</UL> + + +<P> +See also the <A HREF="todo.htm">TODO</A> file. +</P> + + + +<HR align=center width=50%><A NAME="undivert"> +<H2>undivert(0) might read from standard output</H2> +</A><P> +If calling <TT>undivert(0)</TT> when diverting to a non-zero diversion +will cause m4 to read from standard output in an attempt to bring back +diversion 0, which is not possible. +</P> + + +<P> +Fixed in version 1.4n +</P> + + + +<HR align=center width=50%><A NAME="sigaltstack"> +<H2>failure if sigaltstack or sigstack returns ENOSYS</H2> +</A><P> +If stack overflow detection is configured but the system doesn't +support sigaltstack(2) or sigstack(2), m4 fails when the system call +returns ENOSYS. It should silently revert to default behaviour. +</P> + + +<P> +A <A +HREF="mailto:m4-feedback@seindal.dk?subject=GNU m4: failure if sigaltstack or sigstack returns ENOSYS" +>volunteer</A> is badly needed for this, as I have no way of testing +this myself. +</P> + + + + +</TD> + +</TR> + +</TABLE> + +</BODY> + + +</HTML> + + diff --git a/examples/WWW/changelog.htm b/examples/WWW/changelog.htm new file mode 100644 index 00000000..56713edc --- /dev/null +++ b/examples/WWW/changelog.htm @@ -0,0 +1,2248 @@ +<DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 TRANSITIONAL//EN"> +<HTML> +<HEAD> +<TITLE>GNU m4 - ChangeLog</TITLE> +<META NAME="AUTHOR" CONTENT="René Seindal"> +<META NAME="GENERATOR" CONTENT="GNU m4 1.4l"> +</HEAD> + <BODY text="#000000" bgcolor="#FFCC99" link="#0000EF" alink="#FF0000" vlink="#51188E"> +<TABLE cellpadding=5 width="100%"> +<TR align=left valign=bottom> +<TD align=center valign=center colspan="3" width="100%" bgcolor="#FF9900"> + +<H1>GNU m4</H1> + +<H2>ChangeLog</H2> + +</TD> + +</TR> + <TR > +<TD align=left valign=top width="15%" bgcolor="#FF9900"> + + + +<TABLE align=left valign=top columns=1> +<TR> +<TD bgcolor="#CC6600"> +<P> +<B>Generel info</B> +</P> + +</TD> + +</TR> + <TR> +<TD> + +<FONT size=-1><P> +<B><A HREF="whatis.htm">What is m4</A></B> +</P> +</FONT> + +</TD> + +</TR> + <TR> +<TD> + +<FONT size=-1><P> +<B><A HREF="features.htm">Features</A></B> +</P> +</FONT> + +</TD> + +</TR> + <TR> +<TD> + +<FONT size=-1><P> +<B><A HREF="uses.htm">Uses of m4</A></B> +</P> +</FONT> + +</TD> + +</TR> + <TR> +<TD bgcolor="#CC6600"> +<P> +<B>Documentation</B> +</P> + +</TD> + +</TR> + <TR> +<TD> + +<FONT size=-1><P> +<B><A HREF="man/m4_toc.html">Manual</A></B> +</P> +</FONT> + +</TD> + +</TR> + <TR> +<TD bgcolor="#CC6600"> +<P> +<B>Source files</B> +</P> + +</TD> + +</TR> + <TR> +<TD> + +<FONT size=-1><P> +<B><A HREF="readme.htm">README</A></B> +</P> +</FONT> + +</TD> + +</TR> + <TR> +<TD> + +<FONT size=-1><P> +<B><A HREF="todo.htm">TODO</A></B> +</P> +</FONT> + +</TD> + +</TR> + <TR> +<TD> + +<FONT size=-1><P> +<B><A HREF="news.htm">NEWS</A></B> +</P> +</FONT> + +</TD> + +</TR> + <TR> +<TD> + +<FONT size=-1><P> +<B><A HREF="changelog.htm">ChangeLog</A></B> +</P> +</FONT> + +</TD> + +</TR> + <TR> +<TD> + +<FONT size=-1><P> +<B><A HREF="thanks.htm">Contributors</A></B> +</P> +</FONT> + +</TD> + +</TR> + <TR> +<TD> + +<FONT size=-1><P> +<B><A HREF="m4/">Browse it</A></B> +</P> +</FONT> + +</TD> + +</TR> + <TR> +<TD bgcolor="#CC6600"> +<P> +<B>The Future</B> +</P> + +</TD> + +</TR> + <TR> +<TD> + +<FONT size=-1><P> +<B><A HREF="modules.htm">Modules</A></B> +</P> +</FONT> + +</TD> + +</TR> + <TR> +<TD> + +<FONT size=-1><P> +<B><A HREF="visions.htm">Visions</A></B> +</P> +</FONT> + +</TD> + +</TR> + <TR> +<TD bgcolor="#CC6600"> +<P> +<B>Development</B> +</P> + +</TD> + +</TR> + <TR> +<TD> + +<FONT size=-1><P> +<B><A HREF="lists.htm">Mailing-lists</A></B> +</P> +</FONT> + +</TD> + +</TR> + <TR> +<TD> + +<FONT size=-1><P> +<B><A HREF="feedback.htm">Feedback</A></B> +</P> +</FONT> + +</TD> + +</TR> + <TR> +<TD> + +<FONT size=-1><P> +<B><A HREF="download.htm">Download</A></B> +</P> +</FONT> + +</TD> + +</TR> + <TR> +<TD bgcolor="#CC6600"> +<P> +<B>Examples</B> +</P> + +</TD> + +</TR> + <TR> +<TD> + +<FONT size=-1><P> +<B><A HREF="thissite.htm">This site</A></B> +</P> +</FONT> + +</TD> + +</TR> + +</TABLE> + + + + + +</TD> + <TD align=left valign=top width="90%"> + + +<PRE>1998-11-18 Rene' Seindal <rene@seindal.dk> + + * src/input.c (set_word_regexp): Fixed a bug, where word_regexp + could be changed when compiling a illegal regexp, causing later + use of the regexp to dump core. + + * src/module.c (module_load): Changed error message to conform to + standards. + + * src/m4.c (usage): Added message about reporting bugs. + + * doc/m4.texinfo (Changeword): Corrected a wrong example. + (Changeword): Added note about the type of regexps used. + + * ltconfig, ltmain.sh: New files from Libtool 1.2. + + * configure.in: Added calls to AM_ENABLE_SHARED, AM_DISABLE_STATIC + and AM_PROG_LIBTOOL. + + * acm4/modules.m4 (AM_WITH_MODULES): Redone completely to work + with libtool. + + * modules/Makefile.am: Changed completely to compile modules using + libtool. The modules are compiled as shared libraries, and are + renamed when installed. + + * src/m4.h, src/module.c, acm4/modules.m4, acconfig.h: Renamed + USE_SHL_LOAD to HAVE_SHL_LOAD + + * src/builtin.c (shipout_string): Now tests for a NULL string. + + * src/module.c: New level of indirection around non-portable + functions to load shared objects. Intended to encapsulate the non + portable parts better and to reduce the number of #ifdefs in the + code. + + * Makefile.am (DIST_SUBDIRS): Instead of EXTRA_DIST for added + directory modules/ to the distribution. + +1998-11-15 Rene' Seindal <rene@seindal.dk> + + * Prerelease 1.4l. + + * modules/stdlib.c: New module `stdlib' defining some standard + functions: getcwd, getlogin, getpid, getppid, getuid, getpwnam, + getpwuid, hostname, rand, srand, getenv, setenv, unsetenv, uname. + + * src/builtin.c (shipout_string): New convenience function for + builtins and modules. + + * src/module.c (module_load): Tentative support for + shl_load/shl_findsym, but I cannot test it. Copied from MetaHTML. + + * Makefile.am (SUBDIRS): Directory modules added if configured. + + * modules/Makefile.am: Now correctly compiles and installs + modules in pkglibexecdir. + + * src/m4.h: WITH_MODULES defined iff HAVE_DLOPEN or USE_SHL_LOAD. + These two are now initialised by autoconf macros. + + * src/path.c (module_env_init): MODULE_PATH is always on the + search path. + + * src/Makefile.am: Now generated pathconf.h which defined the + default MODULE_PATH. + + * configure.in (pkglibexecdir): Added defintion of pkglibexecdir, + where modules are installed. + + * acm4/modules.m4: Enhanced with code from MetaHTML, contributed + by Brian J. Fox <bfox@datawave.net>. This change allow modules to + build and install automatically, and it is prepared for other + interfacec than dlopen(). + + * src/builtin.c (predefined_tab): Added __m4_version__ for the + current version of GNU m4. It is a GNU extension. + +1998-11-14 Rene' Seindal <rene@seindal.dk> + + * tests/Makefile.am (GENERATED_TESTS): Added new + generated-tests/changesy.8.test + + * doc/m4.texinfo (Changesyntax): Documentation for escape + syntax class. + + * src/macro.c (expand_token): Check for escaped macro call before + symbol table lookup. + + * src/builtin.c (m4_changesyntax): Added `@' flag to define escape + characters + + * src/input.c: New static variable use_macro_escape, which is TRUE + iff some character has code SYNTAX_ESCAPE + (input_init): Added initialisation of use_macro_escape. + (check_use_macro_escape): New function to synchronise + use_macro_escape with the syntax table. + (set_quotes): Added call to check_use_macro_escape() + (set_comment): Do. + (set_syntax): Do. + (next_token): Added new case for IS_ESCAPE. + + * src/m4.h (SYNTAX_ESCAPE): Defined as simple syntax category. + +1998-10-13 René Seindal <rene@seindal.dk> + + * Prerelease 1.4k. + + * tests/Makefile.am (GENERATED_TESTS): Renamed gentest to + generated-tests. + + * tests/Makefile.am (OTHER_TESTS, OTHER_FILES): Added manually + maintained tests in tests/other-tests. These currently tests for + 8-bit transparency, multiple precision arithmetic and sync-line + output. Test for stackoverflow detection does not work. + + * examples/Makefile.am (TESTS): Added tests for all example files. + + * examples/mktests.sh: New file. Help program for creating test + files. + + * tests/mkconfig.sh: New file to generate tests/config.m4 and + tests/config.sh. This is for tests of configure selectable + features. Picks up all set WITH_ and ENABLE_ veriables from + config.h + + * src/path.c (path_search): Added argument 'char **expanded_name' + to return the expanded name. + + * src/m4.h: Added 2nd argument to declaration of path_search(). + + * src/m4.c (main): Added 2nd argument to path_search(). + + * src/freeze.c (reload_frozen_state): Do. + + * src/builtin.c (m4_undivert): Do. + (include): Do. + +1998-10-11 René Seindal <rene@seindal.dk> + + * acm4/Makefile.am (ACINCLUDES_M4): Added gmp.m4 and modules.m4 + + * acm4/modules.m4: New file. Defines AM_WITH_MODULES. + + * acm4/gmp.m4: New file. Defines AM_WITH_GMP. + + * configure.in: Introduced AM_WITH_MODULES and AM_WITH_GMP. + + * AUTHORS, ChangeLog: Changed all dates to ISO 8601. + + * intl/: Updated to GNU gettext 0.10.35. + + * doc/m4.texinfo (Format): Documented that format is blind. + + * src/builtin.c (builtin_tab): Builtin format marked as blind. + +1998-10-07 René Seindal <rene@seindal.dk> + + * Prerelease 1.4j. + + * tests/Makefile.am (GENERATED_TESTS): Changed .m4 extension to + .test, as the files are no longer just m4 input. + + * tests/get-them (FILE): Changed .m4 extension to .test. + + * src/m4.h (token_type): New token type TOKEN_SPACE introduced. + Otherwise quoted strings with leading whitespace first in a macro + argument would be eliminated. + + * src/macro.c (expand_token): Handles new token type TOKEN_SPACE. + (expand_argument): Do. + + * src/input.c (next_token): SPACE and NUM/OTHER characters are only + grouped together iff both quote and comment strings are single + character. Otherwise they might include a comment/quote leader. + (next_token): Returns new token type TOKEN_SPACE. + + * src/builtin.c (push_builtin_table): New function to push a + builtin_table on the stack without installing its contents. + (find_builtin_by_name): Added call to push_builtin_table() if + reading frozen files. Otherwise the builtins named in the frozen + files could not be found. + (install_builtin_table): Changed to use push_builtin_table() + +1998-10-04 René Seindal <rene@seindal.dk> + + * Prerelease 1.4i. + + * configure.in (ALL_LINGUAS): Added Polish pl.po + +1998-10-03 René Seindal <rene@seindal.dk> + + * Many files: Incorporated changes to implement dynamic modules. + Detailed comments in src/modules.c and modules/README + + * src/module.c: New file, implements the OS dependant parts of + dynamic module loading. + + * src/Makefile.am (m4_SOURCES): Added module.c + + * src/builtin.h: New file, declares some functions from builtin.c + that are of use for other modules (shipout_int, numeric_arg, + skip_space, bad_argc), and the macros ARG() and DECLARE(). + + * src/builtin.c (install_builtin_table): New function. Each + module brings in a builtin_table, which is pushed on a stack. + (struct builtin_table): New struct for list of builtin_tables. + (m4_loadmodule): New function to implement builtin "loadmodule". + (shipout_int): No longer static, to be used by modules. + (numeric_arg): do. + (skip_space): do. + (bad_argc): do. + (builtin_init): changed to call install_builtin_table() + (find_builtin_by_name): Now searches all builtin_tables + (find_builtin_by_addr): do. + + * src/path.c: Reorganised to allow for two search paths, one for + include files and one for modules. + + * src/m4.h: Added declarations for new functions in module.c and + in path.c. + + * src/m4.c (main): Added call to module_init(). + + * modules: New directory with a few demo modules. + + * Makefile.am (EXTRA_DIST): Added modules/* since modules/ is not + in SUBDIRS. + + * configure.in: Added modules/Makefile to AC_OUTPUT. + + * configure.in: Added code to implement --with-modules. Tests for + <dlfcn.h> and -ldl. + + * acconfig.h: Added WITH_MODULES + +1998-10-02 René Seindal <rene@seindal.dk> + + * examples/Makefile.am (pkgdata_DATA): Removed special target for + check and variables TESTS. These tests are now run from the + tests/ directory. + + * tests/Makefile.am (OTHER_TESTS): Added tests from the example/ + directory. The files stay there but the tests are run from the + tests/ directory. + + * tests/Makefile.am (EXTRA_DIST): Added run-test. + + * tests/run-test: New file. Run a test manually + + * tests/Makefile.am, tests/get_them: Moved automatically generated + tests (from the manual) to sub directory tests/gentest/. The + tests/ directory had gotten a bit messy. + +1998-09-06 Erick Branderhorst <Erick.Branderhorst@asml.nl> + + * examples/{comments,ddivert,debug,iso8859,reverse,sysv-args,\ + wrap}.test: Added a few testcases. + +1998-08-21 Erick Branderhorst <Erick.Branderhorst@asml.nl> + + * Prerelease 1.4h. + + * lib/Makefile.am (noinst_HEADERS): regex.h added + + * configure.in (jm_WITH_REGEX, jm_PREREQ_ERROR): + acm4/{error,regex}.m4 (from fileutils-3.16u.tar.gz). + + * acm4/Makefile.am: created providing rules to create + $(top_srcdir)/acinclude.m4 to be used by aclocal. + + * tests/defs (LANGUAGE, LC_ALL, LANG): force them to be + `C'. Reported by Ulrich Drepper. + + * Makefile.am (SUBDIRS): Removed checks directory + * configure.in (AC_OUTPUT): Removed checks/Makefile + + * doc/m4.texinfo (Patsubst,example): @comment added to preserve + the space when m4.texinfo is edited and whitespace.el is active. + (Defn,example): idem. + +1998-08-20 Erick Branderhorst <Erick.Branderhorst@asml.nl> + + * doc/m4.texinfo (Esyscmd): grep ../Makefile instead of + ../COPYING. ../Makefile is a file which is certainly present when + test is executed in testSubDir. One can't be sure that the COPYING + file is in .. or ../.. in all situations, the ../Makefile is + always there. + + * doc/m4.texinfo (Include): adjusted expected test output + according to new tests, i.e. the input will always come from the + file `in' created by the test. + + * tests/Makefile.am: Added three lines at the top to get + esyscmd.1.test working. + + * tests/get-them: modified to generate clearer tests who will need + less maintenance when new test examples are created in + `doc/m4.texinfo'. All tests are small (nearly stand-alone, they + need the generic file `defs') shell scripts creating `in', `ok', + `out' and when apropriate `okerr' and `err' in the directory + `testSubDir' when executed. The compare of `ok' and `out' + (and of `okerr' and `err') will be the exit status of the test. + `out' must match `ok' (and `okerr' must match `err') for the test + to be succesful. + + * tests/[a-b]\{1,8\}.[0-9]+.test: This namespace is reserved for + the tests generated by tests/get-them getting it input normally + from doc/m4.texinfo. The namespace tests/[a-b]+[0-9]+.test (no `.' + (dot) before the numeric part) is reserved for all other (hand + written) tests. The `+' means one or more times. + +1998-08-12 Erick Branderhorst <Erick.Branderhorst@asml.nl> + + * doc/Makefile.am (EXTRA_DIST): helptoman.pl and $(MANS) to + supported short man page to refer to info documentation + * helptoman.pl: added + * configure.in: AC_PATH_PROG(PERL,perl) + * Makefile.am (SUBDIRS): doc after src + + * libitized with libit 0.5 from + ftp://ftp.iro.umontreal.ca/pub/contrib/pinard/maintenance/libit. + + * configure.in (AC_REPLACE_FUNCS): added xmalloc xstrdup + * lib/Makefile.am (libm4_a_SOURCES): removed automakely supported + replacement functions, (libm4_a_LIBADD): @LIBOBJS@ + * configure.in (AM_WITH_REGEX), acconfig.h (WITH_REGEX): added + lib/rx.{c,h}: added + * configure.in (AC_CHECK_FUNC): getopt_long + + * src/m4.c (usage): Report bugs to m4-bugs@gnu.org. + + * TODO: added entry about dependencies + +1998-08-10 René Seindal <rene@seindal.dk> + + * Prerelease 1.4f + + * doc/m4.texinfo (Changesyntax): Added documentation for the macro + "changesyntax". + + * src/builtin.c (m4_changesyntax): Added builtin macro + "changesyntax" to modify the syntax table. + + * src/input.c, src/m4.h, src/macro.c: Implemented an input syntax + table. All categories are assigned a syntax code and tokens are + read according to this table. + +1998-08-09 René Seindal <rene@seindal.dk> + + * src/numb.{c,h}: New files, implements multiple precision eval + using GNU gmp. Originally submitted by John Gerard Makecki + (johnm@vlibs.com), later modified. Tested with GNU gmp 2.0.2. + + * doc/m4.texinfo (Eval): Added documentation for multiple + precision arithmetic library support. + + * src/m4.{c,h}, src/eval.c, src/builtin.c, configure.in: Changes + to accommodate multiple precision eval. + +1998-08-07 René Seindal <rene@seindal.dk> + + * src/input.c (MATCH, match_input), src/m4.h: changed definition + of comment and quote strings to `unsigned int' to allow eight bit + chars (reported by andrewb@zip.com.au (Andrew Bettison)). + + * src/builtin.c, doc/m4.texinfo: Builtin `syncoutput' added by + patch from Mike Howard <mike@clove.com> + +1998-08-06 René Seindal <rene@seindal.dk> + + * gettext.m4: corrected AM_WITH_NLS to handle use of installed + -lintl. + +1998-08-03 René Seindal <rene@seindal.dk> + + * Prerelease 1.4e + + * src/m4.h: Added ifdef ENABLE_NLS around include of <libintl.h> + and _ macro. M4 now builds with --disable-nls. + + * src/m4.c (main): reintroduced textdomain(PACKAGE) to get gettext + to look for right message catalogs. Call indef'ed by ENABLE_NLS. + + * configure.in (ALL_LINGUAS): Added complete list of translations: + de fr it ja nl ru sv. + +1998-05-22 Erick Branderhorst <Erick.Branderhorst@asml.nl> + + * Prerelease 1.4d. + + * src/m4.c: #include <signal.h> not <sys/signal.h>. + + * src/Makefile.am: CFLAGS = -Wall @CFLAGS@. + + * checks/Makefile.am: explicit list tests in CHECKS. + + * configure.in, {,src,doc,lib,examples,checks}/Makefile.am, + src/{ansi2knr.{1,c}} doc/{m4.texinfo,mdate-sh}, missing, + mkinstalldirs, install-sh: Added automake (1.3) support. + + * lib/{alloca.c,error.{c,h},get{date.h,opt.{c,h},opt1.c}, + obstack.{c,h},regex.{c,h},strtol.c,xmalloc.c,xstrdup.c}: + Used libitize (0.4) to update. + + * configure.in, ABOUT-NLS, intl/*, po/*: Added gettextize + (0.10.25) support. Removed LOCALE, fr.msg, m4.cod and adjusted + README accordingly. + + * src/stackovf.c: #ifdef USE_STACKOVF ... #endif to (de-)activate + stack overflow functionality. + +1994-12-03 François Pinard <pinard@iro.umontreal.ca> + + * Prerelease 1.4.1. + + * Makefile.in (realclean-local): Delete stamp-h.in. + + * configure.in, {,src,lib}/Makefile.in, src/m4.h, src/m4.c: + Localize, adapting from how it is done in sharutils. + + * fr.tt: New file, for French. + + * configure.in, {,*/}Makefile.in, acconfig.h, src/m4.c, + src/freeze.c: Rename PRODUCT to PACKAGE. + +1994-11-26 François Pinard <pinard@iro.umontreal.ca> + + * configure.in: Check for <libintl.h> and <locale.h>. + * src/m4.h, src/builtin.c, src/debug.c, src/eval.c, src/macro.c, + src/stackovf.c: Rename _ to __P. + * src/m4.h: Declare _ as a macro returning its argument, or else, + include <libintl.h> and declare _ as gettext. + * src/m4.c: Possibly include <locale.h> and call setlocale. + * src/m4.c, src/builtin.c, src/debug.c, src/eval.c, src/freeze.c, + src/input.c, src/macro.c, src/output.c, src/path.c, + src/stackovf.c, src/symtab.c: Use _ macro over all localizable + strings. + +1994-11-07 François Pinard <pinard@iro.umontreal.ca> + + * doc/Makefile.in (stamp-vti): Use new -r option to date. + + * configure.in: Put --with-gmp in place, in prevision for John + Gerard's work. + * acconfig.h: Document WITH_GMP. + +1994-11-05 François Pinard <pinard@iro.umontreal.ca> + + * Release 1.4. + + * doc/Makefile.in (realclean): Also remove stamp-vti. + Reported by Eric Backus. + +1994-11-02 François Pinard <pinard@iro.umontreal.ca> + + * src/freeze.c (produce_frozen_state): If the frozen file cannot + be opened, return immediately after producing the error message. + Reported by Andreas Schwab. + + * configure.in: Check for const only after having found possible + ANSIfying compiler flags, this is of no use to check it before. + Reported by Alexander Lehmann. + +1994-11-01 François Pinard <pinard@iro.umontreal.ca> + + * src/macro.c (collect_arguments): Cast obstack arguments to + (voidstar), so avoiding compiler warnings. + Reported by Joseph E. Sacco. + + * src/freeze.c (produce_frozen_state): Cast printed lengths to + (int) so they correspond to %d format items. + Reported by Joseph E. Sacco. + + * src/m4.c (main): Cast the argument to xfree to (voidstar). + * src/symtab.c (free_symbol): Idem. + Reported by Karl Vogel. + +1994-10-31 François Pinard <pinard@iro.umontreal.ca> + + * Makefile.in (DISTFILES): Distribute BACKLOG. + + * configure.in: Define PRODUCT and VERSION. + * acconfig.h: Document PRODUCT and VERSION. + * src/m4.c, src/freeze.c: Use PRODUCT and VERSION instead of the + constant string m4 and variable or parameter named version. + +1994-10-30 François Pinard <pinard@iro.umontreal.ca> + + * src/m4.h, src/debug.c: Replace all #ifdef __STDC__ by #if + __STDC__. Alliant FX/2800 Concentrix 2.2 (i860-BSD4.3) compiler + defines __STDC__ to 0, for indicating it is *not* ANSI! + Reported by Kaveh R. Ghazi. + + * configure.in: Added obsolescent tests for AIX and Minix. + + * doc/Makefile.in (mostlyclean): Remove texclean in dependencies, + which texclean does not exist anymore. + Reported by Eric Backus, Jim Meyering, John David Anglin and + Joseph E. Sacco. + +1994-10-29 François Pinard <pinard@iro.umontreal.ca> + + * aclocal.m4 (fp_C_PROTOTYPES): Force -D_HPUX_SOURCE with -Aa. + Reported by John David Anglin. + + * src/ansi2knr.c: New version, sent by Peter Deutsch. + * aclocal.m4 (fp_C_PROTOTYPES): Substitute empty or ansi2knr for + ANSI2KNR, depending on the fact the compiler is ANSI or not. + * src/Makefile.in: Use -Ovarargs=convert on ansi2knr calls. + Remove the sed filter after ansi2knr for debug.c. Use $O instead + of $U, put underline in extensions rather than in basenames. Use + implicit rules, now that regularity makes this possible. + Have $(OBJECTS) depend on $(ANSI2KNR), so to trigger compilation + of ansi2knr whenever it is needed. + * configure.in: Adjusted for correct STACKOVF substitution. + * src/debug.c (trace_format): When not __STDC__, use (...) as a + parameter list, so ansi2knr will convert it to (va_alist) va_dcl. + Reported by David MacKenzie. + + * Makefile.in: Remove binprefix. Use transform_name instead. + Reported by David MacKenzie. + + * doc/Makefile.in: Create version.texi, use it, clean it. + Reported by Jim Meyering. + +1994-10-28 François Pinard <pinard@iro.umontreal.ca> + + * Makefile.in (all, install, uninstall): Depend on Makefile. + + * Makefile.in: For actions invoking $(MAKE) from within compound + sh statements, exit non-zero if the sub-make fails. Otherwise, + the top-level make may exit successfully when it should fail. + Reported by Jim Kingdon. + + * {,/*}Makefile.in: Use && after all cd, in case they fail. + + * {,*/}Makefile.in: Declare PRODUCT and VERSION macros. + (dist): Use PRODUCT and VERSION instead of tricks on .fname. + * configure.in: Substitute PRODUCT and VERSION. + + * {,*/}Makefile.in (dist): Always try a hard link before a copy. + +1994-10-27 François Pinard <pinard@iro.umontreal.ca> + + * Makefile.in (mostlyclean-local): Do not remove *~. + * */Makefile.in (mostlyclean): Idem. + Reported by Robert E. Brown and Richard Stallman. + +1994-10-09 François Pinard <pinard@iro.umontreal.ca> + + * src/m4.h: Get rid of CONFIG_BROKETS. + +1994-10-02 François Pinard <pinard@iro.umontreal.ca> + + * configure.in: Use AC_ARG_PROGRAM. + * aclocal.m4 (fp_C_PROTOTYPES): Substitute @kr@ by kr or empty. + Reported by David MacKenzie. + +1994-10-01 François Pinard <pinard@iro.umontreal.ca> + + * configure.in: Do not add -O to CFLAGS for GNU C, now that + configure does it automatically. + Reported by Jim Meyering. + +1994-09-23 François Pinard <pinard@iro.umontreal.ca> + + * src/stackovf.c: Declare the handler_t typedef earlier in the + code, use it for stackovf_handler. + (setup_stackovf_trap): Use RETSIGTYPE instead of void while + casting sigsegv_handler. + Reported by Robert Bernstein. + + * src/m4.c (main): Initialize program_name to argv[0] without + basename'ing it. + Reported by Karl Berry. + +1994-09-18 François Pinard <pinard@iro.umontreal.ca> + + * src/Makefile.in (TAGS): Include a ../lib/TAGS reference. + Reported by Karl Berry. + +1994-09-14 François Pinard <pinard@iro.umontreal.ca> + + * lib/Makefile.in (mostlyclean): Added. + (TAGS): Make in $(srcdir). + + * configure.in: Use `choke me' in test, like everywhere! + + * {doc,examples,lib,src}/Makefile.in (check): Deleted, as + unreacheable and useless. + + * doc/Makefile.in (texclean): Deleted, merged in mostlyclean. + + * lib/Makefile.in (DISTFILES): Distribute TAGS. + (distclean): Do not remove TAGS. + (realclean): Remove it. + * Makefile.in: Make TAGS in lib also, not just in src. + Reported by Karl Berry. + + * Makefile.in (distclean, realclean): Instead of recursively + calling $(MAKE) for the -local part, allow parallel execution of + -recursive and -local, only delay the removal of config.status, + which is repeated in both goals. + +1994-09-13 François Pinard <pinard@iro.umontreal.ca> + + * Release 1.3. + + * Makefile.in: Group all *clean-recursive goals in one, using sed + to remove `-recursive' while calling make recursively. Also, use + a subshell for each recursive $(MAKE). + Reported by Jim Meyering. + + * src/m4.h (memcpy): Define with bcopy for BSD systems. + Reported by Kaveh R. Ghazi. + + * src/Makefile.in (ansi2knr): Use $(LIBS) while linking, for SunOS + 4.1.3 requires -ldl to link even ansik2nr, and we need a way to + specify it. + + * configure.in: Use date instead of touch for stamp-h. + * Makefile.in (stamp-h.in): Idem. + + * Makefile.in (distclean, realclean): Force serial execution of + both goals, in case parallel makes are being used. + Reported by Jim Meyering. + + * src/Makefile.in (DISTFILES): Distribute TAGS. + (distclean): Do not remove TAGS. + (realclean): Remove it. + Reported by Karl Berry. + +1994-09-10 François Pinard <pinard@iro.umontreal.ca> + + * configure.in: Use fp_ to match aclocal.m4. Revert _OS_ macros + to old names, for following Autoconf. + +1994-09-08 François Pinard <pinard@iro.umontreal.ca> + + * Makefile.in (MDEFINES): Remove INSTALL substitutions, for + ./install.sh will not be correctly referred to in sub-Makefiles. + Reported by John David Anglin. + + * doc/Makefile.in (texclean): Remove *.cps and *.fns too. + Reported by Eric Backus. + + * Makefile.in, checks/Makefile.in, doc/Makefile.in, + examples/Makefile.in, lib/Makefile.in, src/Makefile.in: Limit + config.status into remaking this directory's Makefile only. + * Makefile.in (stamp-h): Do not check nor touch stamp-h. + * configure.in (AC_OUTPUT): Touch stamp-h if CONFIG_HEADERS. + Reported by Jim Meyering. + +1994-09-06 François Pinard <pinard@iro.umontreal.ca> + + * configure.in: Correct stack overflow detection logic, taking + care of systems having only incomplete implementations (like for + Pyramid 9820 OSx 5.0d). + Reported by Kaveh R. Ghazi. + + * src/Makefile.in (TAGS): Remote -t from etags call. + +1994-09-02 François Pinard <pinard@iro.umontreal.ca> + + * lib/Makefile.in (install): Depend on all. + +1994-08-31 François Pinard <pinard@iro.umontreal.ca> + + * examples/Makefile.in (mostlyclean): Do not depend on texclean. + Reported by Jim Meyering and John David Anglin. + + * Makefile.in (distclean-local): Delete config.log. + Reported by Jim Meyering. + + Solidify frozen files with respect to -P: + * src/m4.c: Have -P set prefix_all_buitins variable instead of + calling a function by that name. Declare the variable. + * src/m4.h: Adjust declaration for prefix_all_buitins. + * src/builtin.c (builtin_init): Merge in functionality from + previous prefix_all_buitins function, while making entries in the + symbol table, but not modifying the builtin description itself. + + * src/freeze.c (reload_frozen_state): Add a useless `break;', + because *many* compilers do not accept an empty `default:'. + Reported by Akiko Matsushita, Eric Backus, John David Anglin, + Joseph E. Sacco, Kaveh R. Ghazi, Tom McConnell and Ulrich Drepper. + + * configure.in: Use AC_TYPE_SIGNAL. + * src/stackovf.c (setup_stackovf_trap): Use RETSIGTYPE. + Reported by Robert Bernstein. + + * checks/Makefile.in (check): Modify PATH so check-them will find + m4 in the src directory. + * Makefile.in (check): Don't. + Reported by Akiko Matsushita and Jim Meyering. + + * src/output.c (make_room_for, output_character_helper): New + functions, for implementing a global MAXIMUM_TOTAL_SIZE instead of + a per buffer MAXIMUM_BUFFER_SIZE. + + * src/output.c (output_text): New function, for optimizing the + output of strings of characters. Use it. + +1994-08-30 François Pinard <pinard@iro.umontreal.ca> + + * doc, src: New directories reorganizing the distribution. + * doc/Makefile.in, src/Makefile.in, examples/Makefile.in: New + files. + * Makefile.in: Adjusted. + * configure.in: Configure new Makefiles. + + * m4.h: Declare STRING typedef. Use it for comment and quote + strings, adjusting all references. (This is the rudiments of a + beginning for the eventual withdrawal of NUL terminated strings.) + * output.c (shipout_text): Accept a length parameter, and use it. + All callers adjusted. + +1994-08-29 François Pinard <pinard@iro.umontreal.ca> + + * m4.h: Include <unistd.h> if it exists. + * stackovf.c: Don't. + + Clean up for current_diversion variable: + * output.c: Move current_diversion from builtin.c. + * m4.h: Declare current_diversion so builtin.c can access it. + * output.c (output_init, make_diversion): Initialize or update + current_diversion. + * builtin.c (builtin_init, m4_divert): Leave current_diversion + alone. + + Remove limit on number of diversions: + * output.c: Replace ndiversion by diversions, declare it. + (output_init): Allocate only diversion 0. + (make_diversion): Allocate new diversions as needed. + * m4.h, m4.c: Remove NDIVERSIONS and ndiversion related stuff. + * m4.c: Still accept -N, but do nothing with it. + Reported by David MacKenzie. + + Freeze diversions: + * output.c (freeze_diversions): New function. + * m4.h: Declare freeze_diversions. + * freeze.c: Document frozen file format, revise it, call + freeze_diversions to add diversions to frozen format, and code to + reload them properly. + * m4.c: Do not undivert automatically at end when status being + frozen. Do not call builtin_init when reloading frozen state. + + Speed up diversion processing: + * output.c: Add INITIAL_BUFFER_SIZE, MAXIMUM_BUFFER_SIZE, + COPY_BUFFER_SIZE, in-memory diversion buffers, struct diversion + structure and variables, cached variables out of output_diversion, + reallocate_diversion_for and OUTPUT_CHARACTER. + (shipout_text, make_diversion, insert_diversion): Adapted to new + structures. + (insert_file): Use better buffering. + Reported by David MacKenzie. + +1994-08-28 François Pinard <pinard@iro.umontreal.ca> + + * Makefile.in, lib/Makefile.in, checks/Makefile.in: Arrange so + dist works from another build directory. + +1994-08-27 François Pinard <pinard@iro.umontreal.ca> + + * symtab.c (hack_all_symbols): Use hash_table_size instead of + constant HASHMAX, for -H option to work better. + + * builtin.c (DECLARE): Simplify by using _ (). + + * freeze.c: New file. + * Makefile.in: Compile it, distribute it. + * m4.c: Recognize, document and process --freeze-state (-F) and + --reload-state (-R) options. Pass a true flag to builtin_init + only if no reloading some state. + * builtin.c (define_builtin): Remove static specifier. + (find_builtin_by_name): Remove static specifier. + (builtin_init): Accept and obey a flag argument. + * m4.h: Add declarations for freeze.c, changes for builtin.c. + +1994-08-24 François Pinard <pinard@iro.umontreal.ca> + + * builtin.c (dumpdef_cmp): Rewrite so the cast protect the const + specifier. + + * configure.in: Implement --with-dmalloc. + * acconfig.h: Document WITH_DMALLOC. + * m4.h: Add code for when WITH_DMALLOC. + +1994-08-15 François Pinard <pinard@iro.umontreal.ca> + + * m4.c (long_options): Use "error-output", the dash was missing. + Reported by Akiko Matsushita. + +1994-08-12 François Pinard <pinard@iro.umontreal.ca> + + * m4.h: Include <sys/types.h>. + * builtin.c, debug.c, m4.c, output.c, stackovf.c: Don't. + * m4.h: Declare len_lquote and len_rquote as size_t, not int. + int. + * input.c: Declare len_lquote, len_rquote, len_bcomm and len_ecomm + as size_t, not int. + * builtin.c (dump_args): Declare len as size_t, not int. + + * debug.c: Prototype the forward declaration of debug_set_file. + + * builtin.c (m4_undivert): Replace div by file, for avoiding the + shadowing of this variable. + * output.c (insert_diversion): Idem. + + * input.c: Delete def_rquote, def_lquote, def_bcomm and def_ecomm. + (input_init): Duplicate default quote and comment strings. + (set_quotes): Free previous quote strings in all cases. Duplicate + even default quote strings. + (set_comment): Free previous comment strings in all cases. + Duplicate even default comment strings. + + * configure.in: Updated for Autoconf 2.0. + * Makefile.in (distclean-local): Also delete config.cache. + + * m4.c (usage): Reorganize the --help output by topic. Include a + description for debugging flags. + +1994-07-29 François Pinard <pinard@iro.umontreal.ca> + + * configure.in: If sigaction is available and SA_ONSTACK defined, + use sigaction. Otherwise, if sigvec is available and SV_ONSTACK + defined, use sigvec. Else don't compile stackovf.c. + * stackovf.c (setup_stackovf_trap): Idem. + Reported by Jim Avera, Karl Berry, Kaveh R. Ghazi, Matthias Rabe + and Simon Leinen. + +1994-07-21 François Pinard <pinard@iro.umontreal.ca> + + * m4.c (usage): Replace printf par fputs. + +1994-07-18 François Pinard <pinard@iro.umontreal.ca> + + * Release 1.2 + +1994-07-17 François Pinard <pinard@iro.umontreal.ca> + + * configure.in: Check for sigaction and sigvec. Add a new delayed + check for RLIMIT_STACK, combine in the checking for getrlimit. + All those things are not universally available. + * stackovf.c: Split setting up the trap handler and catching + signals, for better taking care of various configure outcomes. + * examples/stackovf.sh: Correct a typo. + Reported by Eric Backus, Jim Avera and Jim Meyering. + +1994-07-16 François Pinard <pinard@iro.umontreal.ca> + + * ansi2knr.c: New version sent by its author, Peter Deutsch. + +1994-07-15 François Pinard <pinard@iro.umontreal.ca> + + * Makefile.in: Modify so parallel make will not try making + lib/libm4.a twice simultaneously. + Reported by Jim Meyering. + +1994-07-14 François Pinard <pinard@iro.umontreal.ca> + + * stackovf.c (setup_stackovf_trap): Replace "Don't" by "Do not" in + error message, for when no code possibility exists. Even if this + line is completely #ifdef'ed out, it brings a syntax error. + Reported by Andreas Schwab, Jim Meyering and Joseph E. Sacco. + + * Makefile.in (install): Have install depend on all too, for lib + to be remade as needed. + + * examples/stackovf.sh: Try ksh, bsh and bash for shells + providing ulimit, instead of using only ksh. + Reported by Jim Avera and Joseph E. Sacco. + +1994-07-12 François Pinard <pinard@iro.umontreal.ca> + + * Makefile.in (check): Have it depend on all instead of m4. In + this way, a change in lib will be detected and processed. + + * builtin.c (numeric_arg): Use strtol and verify the conversion, + instead of using sscanf which stops as soon as there is a + non-digit in the input. Previously, incr(1xyzzy), eval(1,2xyzzy) + and divert(1xyzzy) were all accepted without any warning or error + messages. + * m4.h: Declare strtol as long if not including stdlib.h. + * configure.in: Check for limits.h, and replace strtol if missing. + * lib/Makefile.in: Substitute LIBOBJS. Distribute strtol.c. + * lib/strtol.c: New file, from elsewhere. + Reported by Andreas Schwab. + +1994-07-07 François Pinard <pinard@iro.umontreal.ca> + + * macro.c (expand_macro): Cast value to (boolean) prior to + assigning it to traced. + Reported by Tom McConnell. + + * Makefile.in (m4): Always make all in lib first. + Reported by Jim Meyering. + +1994-07-06 Jim Avera <jima@netcom.com> + + * stackovf.c: Isolated OS-dependent sections; Improved portability, + adding support for SunOS/BSD (sigvec, sigstack, and 4-parameter signal + handlers), and a default error message if the fault address is not + available (when neither siginfo.h nor BSD sigcontext are supported). + * configure.in: Changes for stackovf.h: Check for sigcontext, + sigaction, sigstack, and define rlim_t as int if necessary. + * acconfig.h: Added HAVE_SIGCONTEXT and rlim_t. + * examples/stackovf.sh: Run m4 -L99999999 to allow stack overflow. + * ansi2knr.c: Fix for func-ptr args; convert "..." to varargs syntax. + +1994-07-05 François Pinard <pinard@iro.umontreal.ca> + + * configure.in: Use AC_SET_MAKE. + * Makefile.in: Use @SET_MAKE@. + Reported by Jim Meyering. + + * checks/check-them: Do not trap on SIGQUIT or SIGALRM. + Reported by Ian Taylor. + +1994-07-02 François Pinard <pinard@iro.umontreal.ca> + + * configure.in: Remove dependency of USE_STACKOVF on STDC_HEADERS, + because siginfo.h is unrelated to standard headers, and siginfo.h + is already checked for. + Reported by Joseph E. Sacco. + + * acconfig.h, aclocal.m4, m4.h: Replace HAVE_PROTOTYPES by + PROTOTYPES. + * aclocal.m4, configure.in: Replace AC_HAVE_PROTOTYPES by + AC_PROTOTYPES. + +1994-06-29 François Pinard <pinard@iro.umontreal.ca> + + * builtin.c (substitute): Use \& to represent this part of the + string which was matched by the whole regexp, instead of + representing the whole string. Any usage of \0 issues a warning + and acts like \&, it will disappear in some subsequent release. + +1994-06-27 François Pinard <pinard@iro.umontreal.ca> + + * m4.c: Complete prototype for forwarded declaration of usage. + + * input.c (init_macro_token): Correct own reference in error + message. Previous name get_macro_func was referred to instead. + (next_char): Correct own reference in error message. Previous + name advance_input was referred to instead. + + * m4.h: Declare eval_t and unsigned_eval_t typedefs to 32 bits. + * eval.c (logical_or_term, logical_and_term, or_term, xor_term, + and_term, not_term, logical_not_term, cmp_term, shift_term, + add_term, mult_term, exp_term, unary_term, simple_term): Add + prototype to forwarded declarations. Declare parameter v1 as + eval_t * instead of int *. Same for local variable v2 in dyadic + functions. Same for result in exp_term. + * builtin.c (m4_eval): Declare value as eval_t instead of int. + (ntoa): Declare value as eval_t instead of int. Declare uvalue as + unsigned_eval_t instead of unsigned int. Change casts accordingly. + (shipout_int): Cast first argument of ntoa to eval_t. + Reported by Thorsten Ohl. + + * macro.c: Complete the prototypes of forwarded expand_macro and + expand_token. + Reported by Thorsten Ohl. + + * m4.h: Define voidstar as void * or char * depending on __STDC__. + The Ultrix 3.1 compiler cannot do much with void pointers. + + * builtin.c (dumpdef_cmp): Replace void * by voidstar. + * m4.c (xfree): Replace void * by voidstar. + Reported by Tom McConnell. + + * ansi2knr.1: New, from elsewhere. + * Makefile.in (DISTFILES): Distribute ansi2knr.1 + + * Makefile.in (stamp-h.in): Avoid running ./config.status if + stamp-h does not exist yet. This avoids running it a second time + just after the initial ./configure. + Reported by David MacKenzie and Tom McConnell. + + * m4.h: Replace the enum debug_info declaration with a series of + #define's. The Ultrix 3.1 compiler would otherwise need casting + (int) to most references, when used in expressions. + Reported by Tom McConnell. + +1994-06-25 François Pinard <pinard@iro.umontreal.ca> + + * aclocal.m4: Replace FP_PROTOTYPES by AC_HAVE_PROTOTYPES, + following an idea from Brook G. Milligan. AC_HAVE_PROTOTYPES + calls the compiler. Previously, FP_PROTOTYPES was only calling + the preprocessor; by not being subject to CFLAGS, this was + discouraging those flags asking for ANSI compilation. + * acconfig.h: Document HAVE_PROTOTYPES. + * configure.in: Use AC_HAVE_PROTOTYPES instead of FP_PROTOTYPES. + * m4.h: Define _() according to HAVE_PROTOTYPES, not __STDC__. + Reported by Eric Backus. + + * configure.in: Substitute CFLAGS and LDFLAGS, taking their value + from the environment. Default CFLAGS to -g if not set. + * Makefile.in: Have CFLAGS and LDFLAGS substituted from configure. + * lib/Makefile.in: Have CFLAGS substituted from configure. + Reported by Eric Backus and Tom McConnell. + + * configure.in: m4_undefine changeword before using AC_ENABLE. + + * m4.h: Declare prototypes for error (for ANSI compilers only), + prefix_all_builtins and reference_error. + Reported by Tom McConnell. + + * input.c (set_word_regexp): Do not try to initialize the array + test from a string, this does not work with non-ANSI compilers. + Reported by Eric Backus. + + * Makefile.in (dist): Clean examples/ before saving it. + (distclean-local): Also remove stamp-h. + Reported by Eric Backus. + + * Makefile.in (_stackovf.c): Goal for compiling stacokovf.c with + non ANSI compilers. + Reported by Tom McConnell. + + * checks/Makefile.in (clean): Depends on mostlyclean. + (mostlyclean): New goal. + +1994-06-24 François Pinard <pinard@iro.umontreal.ca> + + * Makefile.in (DISTFILES): Distribute install.sh. + * install.sh: New file, copied from elsewhere. + Reported by Assar Westerlund and Kaveh R. Ghazi. + +1994-06-23 François Pinard <pinard@iro.umontreal.ca> + + * configure.in: Define ENABLE_CHANGEWORD if --enable-changeword. + * acconfig.h: Explain ENABLE_CHANGEWORD. + + [These modifs all depend upon ENABLE_CHANGEWORD and are adapted + from code provided by Pete Chown] + * m4.h: Add original_text field to u_t variant of union u. + Declare TOKEN_DATA_FUNC macro. + * builtin.c: Declare changeword. + (m4_changeword): New function. + * input.c: Include "regex.h", define variables with word regexps. + (input_init): Initialize the word regexp. + (set_word_regexp): New. + (next_token): Declare local variables, use the previous code if + default_word_regexp is true. Else, match using a new code. Save + the original text. + * macro.c (expand_token): Ship out original text if not a macro + name. + Reported by Krste Asanovic and Pete Chown. + + [These modifs all depend upon ENABLE_CHANGEWORD] + * m4.h: Declare external user_word_regexp. + * m4.c: Declare user_word_regexp, and initialize it from + --word-regexp or -W, or NULL if not specified. + * input.c: Use user_word_regexp if specified, instead of + DEFAULT_WORD_REGEXP. + + * Makefile.in (m4): Revert Jan 3 1994 change. I'm unable to + agree with it. + + * Makefile.in, lib/Makefile.in: Limit suffixes to .c and .o. + * checks/Makefile.in: Empty the suffix list. + Reported by Geoff Russell, Joel Sherrill and Roland McGrath. + + * m4.c: Declare nesting_limit and initialize it to 250. + Implement -LNUMBER or --nesting-limit=NUMBER to change its + value. + * m4.h: Declare nesting_limit as external. + * macro.c (expand_macro): Stop execution whenever nesting limit + is exceeded. + Reported by Bengt Mertensson. + + * eval.c (evaluate): Diagnose excess characters in eval input. + Things like `eval(08)' used to return 0 with no diagnostic. + + * m4.h: Capitalize first letter of all macro arguments in + definitions. + + * m4.c: Declare warning_status, initialize it to 0. Add new + option -E, or --fatal-warnings, which sets warning_status to + EXIT_FAILURE instead. + * m4.h: Declare external warning_status. Define EXIT_SUCCESS and + EXIT_FAILURE if not otherwise done by header files. + * m4.c: Delete declarations for EXIT_SUCCESS and EXIT_FAILURE. + * m4.c, input.c, output.c, symtab.c, builtin.c, macro.c, debug.c, + eval.c: Replace 0 by warning_status and 1 by EXIT_FAILURE in first + argument of all M4ERROR calls. + Reported by Noah Friedman. + + * examples/incl-test.m4: Renamed from incl_test.m4. + * examples/include.m4: Include incl-test.m4 instead of + incl_test.m4. + * examples/multiquotes.m4: Renamed from multi-quotes.m. + +1994-06-22 François Pinard <pinard@iro.umontreal.ca> + + * configure.in: Avoid USE_STACKOVF if <siginfo.h> not found. Note + that Jim developped stackovf.c on a 486 running SVR4.0 (ESIX), and + also tested it on a Sun Sparc workstation running SunOS 4.x. + + * format.c (format): When not HAVE_EFGCVT, m4 was failing the + 49.format check, abusing a `union values' argument with sprintf + without selecting the proper field. Now, save the formatting type + first, delaying the fetch of the corresponding argument. + Reported by Joseph E. Sacco and Tom Quinn. + + * format.c (format): Remove const from char *fmt declaration when + not HAVE_EFGCVT, because a NUL may be forced into it. + + * m4.h: Declare atof() when not STDC_HEADERS. + Reported by Joseph E. Sacco. + + * Regenerate configure using Autoconf 1.11, this corrects a + problem about an incorrect cpp seting on NeXT 3.1. + Reported by Alexander Lehmann. + +1994-06-05 François Pinard <pinard@iro.umontreal.ca> + + * m4.h (_): Change argument from `x' to `Args'. + +1994-04-22 François Pinard <pinard@iro.umontreal.ca> + + * m4.h: Rename Args() to _(). + * m4.h: Remove extern specifier from all function declarations. + +1994-04-22 Jim Avera <jima@netcom.com> + + * stackovf.c: New file implementing stack-overflow detection. + * configure.in: Check for getrlimit, sigaction. If all of + standard headers, getrlimit and sigaction, define USE_STACKOVF and + substitute ${U}stackovf.o for STACKOVF. + * acconfig.h: Declare USE_STACKOVF. + * Makefile.in: Distribute stackovf.c, link with $(STACKOVF). + * m4.h: Declare setup_stackovf_trap(). + * m4.c: Call setup_stackovf_trap(). + * tests/stackovf_test.sh: New file. + +1994-04-13 François Pinard <pinard@iro.umontreal.ca> + + * checks/Makefile.in: Rename .all-stamp to stamp-checks. + + * Makefile.in (Makefile, etc.): Adapt for Autoconf 1.8. + +1994-01-30 <pinard@iro.umontreal.ca> + + * m4.h: Remove definition of volatile, not used anymore. + Reported by Jim Meyering and Joseph E. Sacco. + + * m4.h: Consistently use `do { ... } while (0)' in macros, instead + of `if ... else /* nothing */' for if macros. + Reported by Jim Meyering. + + * builtin.c (m4_regexp): Reorganize the code for avoiding a + warning from gcc about `repl' possibly used before defined. + Reported by Jim Meyering. + + * m4.h: Avoid a pre-ANSI <memory.h> together with <string.h>. + Reported by Jim Meyering. + +1994-01-25 François Pinard <pinard@iro.umontreal.ca> + + * m4.h: Move the conditional definition of volatile after the + inclusion of system files, because they may define it first. + +1994-01-04 François Pinard <pinard@iro.umontreal.ca> + + * checks/Makefile.in (CHECKS): Add a useless `*' before `[', to + get around a problem with Alpha make seeing a syntax error, there. + Reported by Vern Paxson. + +1994-01-03 François Pinard <pinard@iro.umontreal.ca> + + * Makefile.in: Do not define LDFLAGS, use CFLAGS on link calls. + Reported by Richard Stallman. + +1993-12-25 François Pinard <pinard@iro.umontreal.ca> + + * configure.in: Correct test for strerror, AC_FUNC_CHECK was used + instead of AC_HAVE_FUNCS. + Reported by Noah Friedman. + +1993-12-01 François Pinard <pinard@iro.umontreal.ca> + + * m4.c: Initialize show_help and show_version to zero. + + * m4.c: Ensure EXIT_SUCCESS and EXIT_FAILURE are defined. + Use them in exit() and usage() calls. + +1993-11-27 François Pinard <pinard@iro.umontreal.ca> + + * m4.h: Delete extern sys_nerr, sys_errlist declarations, and + syserr() macro. Delete errref, add reference_error and M4ERROR. + * m4.c: Replace errref, which was returning an input reference + string, with reference_error, which prints it on standard error. + * builtin.c, output.c: Use errno as second parameter to error, + instead of using syserr() with %s. + * *.c: Use M4ERROR instead of error: no more errref() with %s. + Doing so, the program name appears after the input reference + instead of before, which eases M-x next-error processing. + +1993-11-24 François Pinard <pinard@iro.umontreal.ca> + + * checks/get-them: Escape braces with backslashes in patterns, + because HPUX-9.01 awk needs this. + Reported by Jim Meyering. + +1993-11-22 François Pinard <pinard@iro.umontreal.ca> + + * builtin.c: Declare "FILE *popen ();". + + * m4.h: Remove MESSAGE{,1,2}, WARNING1, FATAL{,1}, INTERNAL_ERROR + macros, replace error_message_prefix() declaration by errref()'s. + Declare xrealloc, for use in errref(). + * m4.c: Delete error_message_prefix() function, add errref(). + * *.c: Use error() systematically in place of all error macros, + now that error() flushes stdout first. Make needed adjustments. + + * m4.h: Remove const in sys_errlist[] declaration, it creates + conflicts on SGI and Alpha. + Reported by Kaveh R. Ghazi. + +1993-11-20 François Pinard <pinard@iro.umontreal.ca> + + * m4.c: Include <getopt.h> instead of "getopt.h". + + * configure.in: Output to config.h. Use HAVE_FUNCS preferably. + * acconfig.h: New, for documenting HAVE_EFGCVT. + * Makefile.in: Distribute acconfig.h, .stamp-h.in and config.h.in, + use them wherever appropriate. Also use -I. for compilations. + * lib/Makefile.in: Use -I.. for compilations. + * *.c: Include <config.h> or "config.h". + + * m4.h: Test for HAVE_MEMORY_H instead of NEED_MEMORY_H. + * configure.in: Use AC_HAVE_HEADERS(memory.h), delete AC_MEMORY_H. + +1993-11-17 François Pinard <pinard@iro.umontreal.ca> + + * builtin.c (m4_eval): Cast strlen to (int) before comparing. + + * input.c (input_init): Initialize quote and comment strings + explicitely instead of calling set_quotes and set_comment: by + doing so, we ensure we do not free uninitialized variables. + + * checks/check-them: Reverse arguments to both diff, so the + expected is on the left and the obtained on the right. + + * m4.h: Add MESSAGE{,1,2}, WARNING1, FATAL{,1} and INTERNAL_ERROR + macros. Delete declarations for m4error, warning, fatal and + internal_error, add declaration for error_message_prefix. + * m4.c: Delete m4error, warning, fatal and internal_error + routines, add error_message_prefix routine. + * *.c: Replace m4error routine calls with MESSAGE* macro calls, + warning with WARNING*, fatal with FATAL* and internal_error with + INTERNAL_ERROR*. + * Makefile.in (_m4.c): Do not adjust ansi2knr output for va_alist, + this is not needed anymore. + + * m4.h: Declare extern FILE *debug. Add DEBUG_PRINT{1,3} and + DEBUG_MESSAGE{,1,2} macros. Delete declarations for debug_print + and debug_message, add declaration for debug_message_prefix. + * debug.c: Remove static specifier for FILE *debug declaration. + Delete debug_print and debug_message routines, add + debug_message_prefix routine. + * builtin.c, debug.c: Replace debug_print routine calls with + DEBUG_PRINT* macro calls. + * input.c, path.c: Replace debug_message routine calls with + DEBUG_MESSAGE* macro calls. + + * m4.h: Remove inclusion of <varargs.h>. + * debug.c: Include <stdarg.h> or <varargs.h>. + (trace_format): Use stdarg instead of varargs if __STDC__. + + * configure.in: Remove checks for vfprintf and _doprnt. These + implementations use varargs tricks which are not portable enough. + * lib/vfprintf.c: Deleted. + * lib/_doprnt.c: Deleted. + * lib/Makefile.in: Adjusted accordingly. Remove LIBOBJS. + Reported by Joel Sherrill. + + * path.c (add_include_directory): Use xstrdup. + + * builtin.c (find_builtin_by_name): Declare static. + + * *.[ch]: Add const to a few "char *" declarations. + + * configure.in: Remove commented tests for fileno() and fstat(). + * debug.c: Remove comments about HAVE_FILENO and HAVE_FSTAT. + + * debug.c (debug_flush_files): New. + * m4.h: Declares it. + * builtin.c (m4_syscmd, m4_esyscmd): Use it. + Reported by Nicolas Pioch. + +1993-11-12 François Pinard <pinard@iro.umontreal.ca> + + * Makefile.in (m4.dvi): Use m4.texinfo instead of m4.texi. + Reported by Joel Sherrill. + + * builtin.c (prefix_all_builtins): Instead of the table size, use + the null entry at end for stopping the loop. It was overwritten. + Reported by Andreas Schwab and Jim Meyering. + + * builtin.c (prefix_all_builtins): Cast xmalloc to (char *). + Reported by Kaveh R. Ghazi. + + * macro.c (call_macro): Add * in (*SYMBOL_FUNC (sym)) (...). + Reported by Karl Vogel. + +1993-11-09 François Pinard <pinard@iro.umontreal.ca> + + * m4.h: Do not define volatile if already defined. + Reported by René Seindal. + + * lib/Makefile.in: Add a forgotten ALLOCA=@ALLOCA@. Grrr! + + Reported by Bernhard Daeubler, Eric Backus, Hal Peterson, Hoang + Uong, Ian Taylor, Kaveh R. Ghazi, Tom McConnell and Walter Wong. + +1993-11-08 François Pinard <pinard@iro.umontreal.ca> + + * m4.h: Define strchr and strrchr in terms of index and rindex, + instead of the other way around. + * builtin.c, m4.c, path.c: Use strchr instead of index. + + * input.c (next_char): Remove a "break;" after a "return ...;". + Reported by Tom McConnell. + +1993-11-08 François Pinard <pinard@iro.umontreal.ca> + + * Release 1.1 + + * configure.in: Do not copy check files in the build hierarchy. + * checks/check-them: Identify the m4 version being checked. For + finding m4, look in $PATH instead of in the parent directory. + * Makefile.in (check): Prepend `pwd` to $PATH before checking. + * checks/Makefile.in (.all-stamp): Always create check files in + the source hierarchy, not anymore in the build hierarchy. + (check): cd to the source hierarchy before performing checks. + Do not copy nor clean COPYING anymore, take it from `..'. + Reported by Tom McConnell. + + * Makefile.in (Makefile): Use $(SHELL). + (config.status): Use $(SHELL). Use "config.status --recheck" + instead of "configure --no-create", which is obsolete. + Reported by Tom McConnell. + +1993-11-05 François Pinard <pinard@iro.umontreal.ca> + + * m4.c (usage): Use "%s" instead of "m4" in format string. + Reported by Jim Meyering. + + * Makefile.in: Distribute mkinstalldirs. + Reported by Pierre Gaumond. + Reported by Jim Meyering. + Reported by Tom McConnell. + Reported by Andreas Gustafsson. + + * checks/check-them: Renamed from checks/check_them. + * checks/get-them: Renamed from checks/get_them. + * checks/.all-stamp: Renamed from checks/.all_stamp. + * checks/Makefile.in: Changed accordingly. + Reported by Jim Meyering. + +1993-11-04 François Pinard <pinard@iro.umontreal.ca> + + * lib/Makefile.in (dist): Correct permissions on files. + + * output.c: Declare tmpfile, some systems don't. + +1993-11-03 François Pinard <pinard@iro.umontreal.ca> + + * checks/Makefile.in (dist): Correct permissions on files. + + * Makefile.in (dist): Ensure recursive linking for subdirectory + `examples', also set read/write permissions on all its files. + + * mkinstalldirs: New, from elsewhere. + * Makefile.in: Use it. + + * debug.c: Synchronize debug messages and regular output when + the debug file and stdout are redirected to the same file. + * configure.in: Add (commented) checks for fileno and fstat. + Reported by Jim Avera. + + * builtin.c (m4_ifelse): Diagnose excess arguments if 5, 8, 11, + etc., arguments, then ignore the superfluous one. m4 used to + diagnose missing arguments and return the empty string. + Reported by Nick S. Kanakakorn. + +1993-11-02 François Pinard <pinard@iro.umontreal.ca> + + * m4.c (main): At end of all input, ensure all undiverted text + goes to the main output stream. + Reported by Andreas Gustafsson. + + * m4.c (main): exit (0), instead of return 0. + + * m4.c: Implement -P and --prefix-builtins. + * builtin.c: Delete const specifier on builtin_tab. + (prefix_all_builtins): New. + Reported by Noah Friedman. + Reported by Scott Bartram. + + * c-boxes.el: New, from elsewhere. + * Makefile.in: Distribute it. + + * m4.h: Do not define bcopy if <string.h> defines it. + Reported by Stephen Perkins. + + * builtin.c (define_macro): Allow a missing second argument, in + which case it is implied empty. Affects define and pushdef. + Reported by Eric Allman. + +1993-11-01 François Pinard <pinard@iro.umontreal.ca> + + * m4.h: Add blind_if_no_args in struct builtin, blind_no_args in + struct symbol adn SYMBOL_BLIND_NO_ARGS macro. + * builtin.c: Initialize all the blindness fields in builtin_tab. + (define_builtin): Copy the blindness of a builtin into its symbol. + * macro.c (expand_token): Avoid processing a blind builtin if the + next character is not an opening parenthesis. + Reported by David MacKenzie. + Reported by Noah Friedman. + + * configure.in: Ensure an exit status of 0 on completion. + Reported by Vivek P. Singhal. + + * eval.c (eval_lex): Admit both lower and upper case letters for + bases greater than 10. Only lower case letters were accepted. + + * eval.c (eval_lex): Recognize 0bDIGITS and 0rRADIX:DIGITS syntax. + Reported by Krste Asanovic. + + * eval.c: Rename NOT to LNOT. Add XOR, NOT, LSHIFT and RSHIFT. + * eval.c (logical_not_term): New name for not_term. + * eval.c (xor_term): New, between or_term and and_term. + * eval.c (not_term): New, between and_term and logical_not_term. + * eval.c (shift_term): New, between cmp_term and add_term. + Reported by Krste Asanovic: ~, ^, <<, >>. + Reported by Ben A. Mesander: ** vs ^. + + * m4.c: Delete xmalloc.c, xrealloc.c, xstrdup.c. + * m4.h: Delete xrealloc.c. + * lib/xmalloc.c: New, from elsewhere. + * lib/xstrdup.c: New, from elsewhere. + * lib/Makefile.in: Distribute and compile them. + + * m4.c: Change progname to program_name. + * builtin.c, eval.c, m4.c, m4.h: Rename error to m4error. + * lib/error.c: New, from elsewhere. + * lib/Makefile.in: Distribute and compile error.c. + * configure.in: Check AC_VPRINTF and for strerror. + * m4.c: Delete cmd_error. Use error instead. + * m4.c: Change label capitalisation to "ERROR", "Warning", etc. + + * m4.h: Delete #define const, let Autoconf takes care of this. + + * m4.c: Remove all code conditionalized by IMPLEMENT_M4OPTS. + Merge parse_args into main. Declare argv to be `char *const *', + then remove superfluous casts. + + * m4.c: Rename --no-gnu-extensions to --traditional. + Reported by Ben A. Mesander. + + * m4.c (usage): Add a status parameter. Supply one in various + calls. Add --help processing. Remove -V for --version. + + * lib/Makefile.in: Put $(CFLAGS) last in .c.o rule. + + * lib/Makefile.in: Have an AR=ar declaration. + Reported by Eric Backus. + Reported by Bjorn R. Bjornsson. + Reported by Tom Tromey. + Reported by Kristine Lund. + Reported by Marion Hakanson. + +1993-10-30 François Pinard <pinard@iro.umontreal.ca> + + * Makefile.in (m4.info): Use -I$(srcdir) on $(MAKEINFO). + Reported by Noah Friedman. + +1993-10-25 François Pinard <pinard@iro.umontreal.ca> + + * Makefile.in: Remove MDEFINES and cleanup. + +1993-06-09 François Pinard <pinard@iro.umontreal.ca> + + * Makefile.in (dist): Replace "echo `pwd`" by a mere "pwd". + Create a gzip file. + +1993-02-06 François Pinard <pinard@iro.umontreal.ca> + + * Makefile.in, lib/Makefile.in, check/Makefile.in: In dist goals, + ensure 777 mode for directories, so older tar's will restore file + modes properly. + +1993-01-17 François Pinard <pinard@iro.umontreal.ca> + + * Makefile.in, lib/Makefile.in: Put $(CFLAGS) after $(CPPFLAGS), + so the installer can override automatically configured choices. + Reported by Karl Berry. + +1993-01-15 François Pinard <pinard@iro.umontreal.ca> + + * lib/vfprintf.c: Stolen from Oleo distribution and adapted. The + previous version was not working properly on m68k-hp-bsd4.3. + Reported by Roland McGrath. + + * lib/_doprnt.c: Stolen from Oleo distribution. + * configure.in: Check for _doprnt.c if vfprintf.c selected. + * lib/Makefile.in: Distribute _doprnt.c. + Do not distribute regex.[ch].old anymore. + +1993-01-01 François Pinard <pinard@iro.umontreal.ca> + + * Makefile.in, lib/Makefile.in: Reinstate $(CPPFLAGS), use it. + Richard wants it there. + +1992-12-27 François Pinard <pinard@iro.umontreal.ca> + + * Makefile.in: Add DEFS to MDEFINES. + * lib/Makefile.in (.c.o): Remove $(CPPFLAGS). + (libm4.a): Remove the library before creating it. + (distclean): Remove tags and TAGS too. + +1992-12-23 François Pinard <pinard@iro.umontreal.ca> + + * Makefile.in (dvi, m4.dvi): New goals. + + * builtin.c, eval.c, format.c, input.c, m4.[ch], m4.texinfo, + macro.c, output.c, path.c, symtab.c: Change Copyright from + 1989-1992 to the explicit enumeration 1989, 1990, 1991, 1992. + + * examples/divert.m4: Deleted, this bug has been corrected. + + * Makefile.in (texclean, mostlyclean): New goals. + + * Makefile.in (clean): Remove clutter from ansi2knr. + Reported by Pierre Gaumond. + +1992-12-20 François Pinard <pinard@iro.umontreal.ca> + + * Makefile.in: Remove $(CPPFLAGS) from the .c.o rule. The user + might well use CFLAGS is s/he needs it. + + * Makefile.in: Allow installation of info files from a separate + build directory. + Reported by Jason Merrill. + Reported by David MacKenzie. + Reported by Skip Montanaro. + Reported by Erez Zadok. + Reported by Assar Westerlund. + +1992-12-19 François Pinard <pinard@iro.umontreal.ca> + + * Release 1.0.3 + This is still a beta release for the future GNU m4 version 1.1. + + * lib/alloca.c: New, from elsewhere. + * lib/Makefile.in: Distribute it. Define and use $(ALLOCA). + + * m4.h: Do not define index/rindex if already defined. If + FALSE/TRUE are already defined, do not redefine them, but merely + define boolean typedef to int. + + * Makefile.in: Use $(DEFS) while compiling ansi2knr. + * ansi2knr.c: Rewrite #ifdef HAVE_STRING_H || STDC_HEADERS, + because some C compilers do not like connectives with #ifdef. + * m4.h: Define `volatile' only if __GNUC__, instead of once for + __GNUC__ and once for __STDC__. + * lib/regex.h: Leave const alone, AC_CONST will take care of it. + + * checks/Makefile.in: Use .all_stamp instead of $(CHECKS) for + Makefile dependencies. Without it, make keeps destroying and + remaking $(CHECKS) in a loop (why?). Distribute .all_stamp. + + * m4.h, m4.c, builtin.c, output.c: Change all divertion/DIVERTION + to diversion/DIVERSION, this was a spelling error. + + * m4.c: Declare version[], remove #include "version.h". + * version.h: Deleted. + * Makefile.in: Remove references to version.h. + + * output.c (shipout_text): Centralize all `#line NUM ["FILE"]' + production, by using a simpler and more robust algorithm. This + solves the problem of synclines sometimes written in the middle of + an output line. Delete sync_line() and output_lines variable. + * m4.h: Remove sync_line prototype and output_lines declaration. + * input.c (next_char), output.c (shipout_text): Remove references + to output_lines. + * input.c (push_file, pop_file): Merely put the value -1 in + output_current_line instead of calling sync_line, for delaying a + single `#line NUM FILE' before next output line. Do not test + for sync_output, because this is unnecessary clutter. + * output.c (make_divertion, insert_divertion): Idem. + * input.c: Rename must_advance_line to start_of_input_line, for + consistency. + + * debug.c (trace_header): Select a new debug line format, which + better complies with GNU standards for formatting error messages. + With option `-dfl', M-x next-error might be used on the output. + * m4.c (vmesg): Adjust format of error output to GNU standards. + * m4.texinfo: Adjust examples for `make check' to work. + + * m4.h, builtin.c, debug.c, input.c, macro.c, path.c: Use upper + case for enum debug_info constants, which were all lower case. + + * builtin.c (m4_regexp, m4_patsubst): Use re_search instead of + re_search_2. + * lib/regex.[ch]: Use new version from textutils 1.3.6, with some + collected patches. I tried a few times using newer regex.[ch], it + mysteriously stopped aborting with this one. Insecure feeling... + * lib/Makefile.in: Distribute regex.[ch].old, just in case! + +1992-12-18 François Pinard <pinard@iro.umontreal.ca> + + * m4.c: Change `--no-warnings' to `--silent'. + Reported by David MacKenzie. + + * m4.c: Put all M4OPTS code upon IMPLEMENT_M4OPTS control, and + leave it off for now. See comment in m4.c for justification. + Reported by David MacKenzie. + + * configure.in: Replace AC_USG by AC_HAVE_HEADERS(string.h). + * m4.h, ansi2knr.c, lib/regex.h: Replace USG by HAVE_STRING_H. + + * Makefile.in: Add a new `info' goal. Use macro MAKEINFO. + + * Makefile.in: Ensure recursive cleaning is done before local + cleaning for all clean goals. + + * builtin.c (ntoa): Ensure the value is always interpreted as a + signed quantity, whatever the radix is. + +1992-11-18 Jim Meyering <meyering@idefix> + + * builtin.c, format.c, input.c: Split long lines. + * m4.c: Use typedef macro_definition instead of struct + macro_definition. + * symtab.c: Use typedef symbol instead of struct symbol. + +1992-11-17 François Pinard <pinard@iro.umontreal.ca> + + * *.[ch]: Remove all trailing whitespace, in code and comments. + + * configure.in: Find some awk. + * Makefile.in: Add $(AWK) to MDEFINES. + * checks/Makefile.in: Transmit $(AWK) to get_them. + * checks/get_them: Use $AWK instead of gawk. Add a close in the + awk script when switching files, because without this, mawk runs + out of file descriptors. + +1992-11-16 François Pinard <pinard@iro.umontreal.ca> + + * Makefile.in (realclean): Delete m4.info*. + Reported by Jim Meyering. + + * Makefile.in: Adjust and link with checks/Makefile. + * checks/Makefile.in: New. + * configure.in: Output checks/Makefile. + + * checks/get_them: Have the dnl header of each test more + recognizable by next-error, also use a better message. + +1992-11-16 Jim Meyering <meyering@idefix> + + * m4.h [__GNUC__]: Use __volatile__ instead of `volatile.' + And use that only if __GNUC__ since we're using it's GCC-specific + semantics that tell the compiler the associated function doesn't + return. + + * builtin.c (substitute): Don't use character as an array index. + (dumpdef_cmp): Make formal arguments `const void *' to avoid + warnings with gcc -W -Wall on systems with qsort prototype. + (m4_errprint): Cast obstack_finish to `char *' to avoid warnings + from gcc -W -Wall. + + * eval.c (most functions): Add parentheses to assignments used + as truth values go avoid warnings from gcc -Wall. + + * input.c, m4.c, output.c, path.c, symtab.c: Declare static + any functions that don't need external scope. + + * builtin.c, debug.c, format.c, m4.c, m4.h, macro.c, symtab.c + (many functions and arrays): Declare `const'. + +1992-11-15 François Pinard <pinard@iro.umontreal.ca> + + * *.[ch]: Rename nil to NULL, using the declaration from <stdio.h>, + removing the declaration from m4.h. Also rename false to FALSE + and true to TRUE. + + * lib/Makefile.in (Makefile): New goal. + + * Makefile.in, lib/Makefile.in: Add a .c.o rule, so CFLAGS is not + so heavily loaded. It gets more easily overridable, calling make. + Reported by Jim Meyering. + + * Makefile.in (dist): Get .fname from the current directory name, + instead of from version.h. I need updating many files manually, + when the version changes, version.h is just one of them. + +1992-11-14 François Pinard <pinard@iro.umontreal.ca> + + * m4.h: Remove the tag `boolean' on the enum introducing typedef + `boolean'. This tag conflicts with <sys/types.h> on SVR4. + Reported by Tom McConnell. + +1992-11-13 François Pinard <pinard@iro.umontreal.ca> + + * m4.texinfo: Correct the examples for 33.divert, 38.divnum, + 39.cleardiv, which were describing missing or spurious newlines. + Modify examples 52.eval, 53.esyscmd and 54.sysval so the results + do not depend on machine word size, `/bin/false' implementation, + or `wc' output format. `make check' is more dependable, now. + + * checks/check_them: Summarize the failed tests by listing their + name, at end. If none, issue `All checks successful'. Output + `Checking' instead of `Input file:'. + + * checks/get_them, checks/check_them: Reindented. + + * Makefile.in (dist): chmod a+r before making the tar file. + +1992-11-12 François Pinard <pinard@iro.umontreal.ca> + + * builtin.c (m4_dnl): Diagnose any parameter to `dnl'. + + * input.c (next_token): Reinitialize token_buttom just after using + it as a watermark with obstack_free. Or else, a future token, big + enough for triggering reallocation of the obstack chunk, could + void the initialized value of token_buttom, later causing panic in + obstack_free. Rename token_buttom to token_bottom everywhere. + + * m4.h: Before declaring errno, first include <errno.h> and + ensure that it does not define errno. + Reported by Richard Stallman. + +1992-11-11 François Pinard <pinard@iro.umontreal.ca> + + * builtin.c: Define and use DECLARE macro for builtins. + + * builtin.c (m4_ifelse): Avoid any diagnostic when exactly one + argument, this is a common idiom for introducing long comments. + + * builtin.c (m4_ifelse): If 3n + 2 arguments, diagnose missing + arguments. The last argument was silently ignored. + + * m4.c (cmd_error): Add a missing semicolon before va_end(). + +1992-11-10 François Pinard <pinard@iro.umontreal.ca> + + * Makefile.in: Now handle protoized sources. Define and use U. + Compile and use ansi2knr with old compilers. Update DISTFILES. + Add `aclocal.m4' to `configure' dependencies. + * ansi2knr.c: New, from Ghostscript distribution. + * configure.in: Define U through FP_PROTOTYPES for old compilers. + Add AC_ISC_POSIX, AC_CONST, AC_SIZE_T. + * aclocal.m4: New, provide FP_PROTOTYPES. + * m4.h: Conditionnaly protoized through Args, save for varags. + * builtin.c: Protoized. Then: + Include <sys/types.h> if size_t is not defined, before "regex.h". + (m4_ifelse): Fetch built-in name properly for diagnostic. + (m4_dumpdef): Remove wrong (char *) cast calling dump_symbol. + (m4_regexp): Add const to `msg' declaration. + (m4_patsubst): Add const to `msg' declaration. + * debug.c: Protoized, save for varargs. + * eval.c: Protoized. + * format.c: Protoized. + * input.c: Protoized. + * m4.c: Protoized, save for varargs. Then: + (xfree): Accept void * instead of char *. + (xmalloc): Return void * instead of char *. + (xrealloc): Accept and return void * instead of char *. + * macro.c: Protoized. + * output.c: Protoized. + * path.c: Protoized. Then cast some (char *) over xmalloc's. + * symtab.c: Protoized. + +1992-11-06 François Pinard <pinard@iro.umontreal.ca> + + * m4.texinfo: Remove directory from diagnostics in 30.include, + 51.eval, 56.errprint and 57.m4exit tests. + + * m4.h: Remove declarations for int or void system functions, they + cause more conflicting trouble than they make good. + + * configure.in: Avoid configuration header file. Add some tests. + * m4.h: Remove #include "config.h". + * Makefile.in, lib/Makefile.in: Implement Autoconf interface. + Then, rewritten for better compliance with GNU standards. + +1992-11-05 François Pinard <pinard@iro.umontreal.ca> + + * format.c (format): Avoid syntax error if not HAVE_EFGCVT, + because of a misplaced #endif. + + * Many *.[hc] files: Correct intra-line spacing here and there, + according to GNU indent 1.6 advice. + + * configure.in: New, using Autoconf 1.2. + * m4.h: Reverse NO_MEMORY_H to NEED_MEMORY_H. + * Delete old configure.in, configure, etc/configure.in, + etc/configure, lib/configure.in, lib/configure and config/*. + Reported by Jason Merrill. + + * symtab.c (hash): Change (char) NULL to '\0'. + Reported by Jason Merrill. + + * Delete .vers, etc/newdist.sh, etc/newvers.sh and + etc/nextvers.sh. Release numbers will be edited `by hand'. + * version.h: De-automatize, force value in. + + * m4.c: Changes in order to use a newer getopt.h. + Reported by David MacKenzie. + + * checks/: New name for examples/. + * checks/get_them: New location for etc/get_examples. + * checks/check_them: New location for etc/check_examples. + * Makefile.in, checks/get_them, checks/check_them: Adjust. + * lib/vfprintf.c: New location for etc/vfprintf.c. + * Delete empty etc/. + * examples/: New name for test/. + +1992-03-10 François Pinard <pinard@iro.umontreal.ca> + + * Makefile.in (check): Add m4 as dependency. + + * m4.c: Accept --no-warnings instead of --no_warnings, and + --no-gnu-extensions instead of --no_gnu_extensions. Make the + usage message more informative. + Reported by David MacKenzie. + +1992-03-09 François Pinard <pinard@iro.umontreal.ca> + + * etc/check_examples: New name for check_examples.sh. + * etc/get_examples: New name for get_examples.sh. + * Makefile.in, etc/Makefile.in: Use new names. + + * Makefile.in: Transmit $(CC) while making in lib. + + * Many *.[hc] files: GNU indent'ed, with further fine tuning of + code disposition by hand. + +1992-03-08 François Pinard <pinard@iro.umontreal.ca> + + * m4.h: Delete definitions for abort() and exit(). + Reported by Richard Stallman. + + * config/hmake-unicos, config/s-unicos.h: New files. + Reported by Hal Peterson. + + * eval.c (exp_term): Have N^0 return 1. + Reported by Michael Fetterman. + + * eval.c, input.c, m4.h: Remove last comma in enums. + Reported by Mike Lijewski. + + * Transfer of maintenance duties from René to François. + +1991-10-24 René Seindal <seindal@diku.dk> + + * Release 1.0. Many thanks to those, who provided me with bug + reports and feedback. + + * Uses GNU configure, taken from the gdb distribution. + + * Uses GNU getopt(), with long option names. + + * The -Q/+quiet option is added, which suppresses warnings about + missing or superflous arguments to built-in macros. + + * Added default options via the M4OPTS environment variable. + + * The built-in format can now be configured to use sprintf as + the formatting engine, for systems without [efg]cvt(3). + + * GNU library code is moved to the ./lib subdirectory; other + utility files are now in ./etc. + + * Several minor bugs have been fixed. + +1991-07-26 René Seindal <seindal@diku.dk> + + * Fixed various bugs. Release 0.99, manual 0.09. Many thanks to + Francois Pinard and Roland H. Pesch for providing me with reports. + + * The builtins incr and decr are now implemented without use of + eval. + + * The builtin indir is added, to allow for indirect macro calls + (allows use of "illegal" macro names). + + * The debugging and tracing facilities has been enhanced + considerably. See the manual for details. + + * The -tMACRO option is added, marks MACRO for tracing as soon + as it is defined. + + * Builtins are traced after renaming iff they were before. + + * Named files can now be undiverted. + + * The -Nnum option can be used to increase the number of + divertions available. + + * Calling changecom without arguments now disables all comment + handling. + + * The function m4_patsubst() is now consistently declared + static. + + * A bug in dnl is fixed. + + * A bug in the multi-character quoting code is fixed. + + * Several typos in the manual has been corrected. More probably + persist. + + * The m4.info file is now installed along with the program. + +1990-11-15 René Seindal <seindal@diku.dk> + + * Updated and enhanced version. Release 0.75, manual 0.07. + + * Implemented search path for include files (-I option and + M4PATH envronment variable). + + * Implemented builtin "format" for printf-like formatting. + + * Implemented builtin "regexp" for searching for regular + expressions. + + * Implemented builtin "patsubst" for substitution with regular + expressions. + + * Implemented builtin "esyscmd", which expands to a shell + commands output. + + * Implemented "__file__" and "__line__" for use in error + messages. + + * Implemented character ranges in "translit". + + * Implemented control over debugging output. + + * Implemented multi-character quotes. + + * Implemented multi-character comment delimiters. + + * Changed predefined macro "gnu" to "__gnu__". + + * Changed predefined macro "unix" to "__unix__", when the -G + option is not used. With -G, "unix" is still defined. + + * Changed "shift", "$@" and "$*" to not insert spaces afters + commas. + + * Added program name to error messages. + + * Fixed two missing null bytes bugs. + +1990-01-22 René Seindal <seindal@diku.dk> + + * Initial beta release. Release 0.50, manual 0.05. + +</PRE> + + +</TD> + +</TR> + +</TABLE> + +</BODY> + + +</HTML> + + diff --git a/examples/WWW/download.htm b/examples/WWW/download.htm new file mode 100644 index 00000000..9b714f32 --- /dev/null +++ b/examples/WWW/download.htm @@ -0,0 +1,302 @@ +<DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 TRANSITIONAL//EN"> +<HTML> +<HEAD> +<TITLE>GNU m4 - Download</TITLE> +<META NAME="AUTHOR" CONTENT="René Seindal"> +<META NAME="GENERATOR" CONTENT="GNU m4 1.4l"> +</HEAD> + <BODY text="#000000" bgcolor="#FFCC99" link="#0000EF" alink="#FF0000" vlink="#51188E"> +<TABLE cellpadding=5 width="100%"> +<TR align=left valign=bottom> +<TD align=center valign=center colspan="3" width="100%" bgcolor="#FF9900"> + +<H1>GNU m4</H1> + +<H2>Download</H2> + +</TD> + +</TR> + <TR > +<TD align=left valign=top width="15%" bgcolor="#FF9900"> + + + +<TABLE align=left valign=top columns=1> +<TR> +<TD bgcolor="#CC6600"> +<P> +<B>Generel info</B> +</P> + +</TD> + +</TR> + <TR> +<TD> + +<FONT size=-1><P> +<B><A HREF="whatis.htm">What is m4</A></B> +</P> +</FONT> + +</TD> + +</TR> + <TR> +<TD> + +<FONT size=-1><P> +<B><A HREF="features.htm">Features</A></B> +</P> +</FONT> + +</TD> + +</TR> + <TR> +<TD> + +<FONT size=-1><P> +<B><A HREF="uses.htm">Uses of m4</A></B> +</P> +</FONT> + +</TD> + +</TR> + <TR> +<TD bgcolor="#CC6600"> +<P> +<B>Documentation</B> +</P> + +</TD> + +</TR> + <TR> +<TD> + +<FONT size=-1><P> +<B><A HREF="man/m4_toc.html">Manual</A></B> +</P> +</FONT> + +</TD> + +</TR> + <TR> +<TD bgcolor="#CC6600"> +<P> +<B>Source files</B> +</P> + +</TD> + +</TR> + <TR> +<TD> + +<FONT size=-1><P> +<B><A HREF="readme.htm">README</A></B> +</P> +</FONT> + +</TD> + +</TR> + <TR> +<TD> + +<FONT size=-1><P> +<B><A HREF="todo.htm">TODO</A></B> +</P> +</FONT> + +</TD> + +</TR> + <TR> +<TD> + +<FONT size=-1><P> +<B><A HREF="news.htm">NEWS</A></B> +</P> +</FONT> + +</TD> + +</TR> + <TR> +<TD> + +<FONT size=-1><P> +<B><A HREF="changelog.htm">ChangeLog</A></B> +</P> +</FONT> + +</TD> + +</TR> + <TR> +<TD> + +<FONT size=-1><P> +<B><A HREF="thanks.htm">Contributors</A></B> +</P> +</FONT> + +</TD> + +</TR> + <TR> +<TD> + +<FONT size=-1><P> +<B><A HREF="m4/">Browse it</A></B> +</P> +</FONT> + +</TD> + +</TR> + <TR> +<TD bgcolor="#CC6600"> +<P> +<B>The Future</B> +</P> + +</TD> + +</TR> + <TR> +<TD> + +<FONT size=-1><P> +<B><A HREF="modules.htm">Modules</A></B> +</P> +</FONT> + +</TD> + +</TR> + <TR> +<TD> + +<FONT size=-1><P> +<B><A HREF="visions.htm">Visions</A></B> +</P> +</FONT> + +</TD> + +</TR> + <TR> +<TD bgcolor="#CC6600"> +<P> +<B>Development</B> +</P> + +</TD> + +</TR> + <TR> +<TD> + +<FONT size=-1><P> +<B><A HREF="lists.htm">Mailing-lists</A></B> +</P> +</FONT> + +</TD> + +</TR> + <TR> +<TD> + +<FONT size=-1><P> +<B><A HREF="feedback.htm">Feedback</A></B> +</P> +</FONT> + +</TD> + +</TR> + <TR> +<TD> + +<FONT size=-1><P> +<B><A HREF="download.htm">Download</A></B> +</P> +</FONT> + +</TD> + +</TR> + <TR> +<TD bgcolor="#CC6600"> +<P> +<B>Examples</B> +</P> + +</TD> + +</TR> + <TR> +<TD> + +<FONT size=-1><P> +<B><A HREF="thissite.htm">This site</A></B> +</P> +</FONT> + +</TD> + +</TR> + +</TABLE> + + + + + +</TD> + <TD align=left valign=top width="90%"> + + +<P> +In the download area there are usually several version +present. Please take only the latest. +</P> + + +<P> +The files are name <TT>m4-1.4<I>X</I>.tar.gz</TT> where X is a letter. +</P> + + +<P> +<A HREF="ftp://ftp.seindal.dk/pub/rene/gnu/">Download latest +development version</A>. +</P> + + +<P> +<A HREF="ftp://ftp.seindal.dk/pub/rene/gnu/m4-1.4.tar.gz">Download +latest stable version</A>. +</P> + + + +</TD> + +</TR> + +</TABLE> + +</BODY> + + +</HTML> + + diff --git a/examples/WWW/features.htm b/examples/WWW/features.htm new file mode 100644 index 00000000..ce8f1895 --- /dev/null +++ b/examples/WWW/features.htm @@ -0,0 +1,380 @@ +<DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 TRANSITIONAL//EN"> +<HTML> +<HEAD> +<TITLE>GNU m4 - New feaures since version 1.4</TITLE> +<META NAME="AUTHOR" CONTENT="René Seindal"> +<META NAME="GENERATOR" CONTENT="GNU m4 1.4l"> +</HEAD> + <BODY text="#000000" bgcolor="#FFCC99" link="#0000EF" alink="#FF0000" vlink="#51188E"> +<TABLE cellpadding=5 width="100%"> +<TR align=left valign=bottom> +<TD align=center valign=center colspan="3" width="100%" bgcolor="#FF9900"> + +<H1>GNU m4</H1> + +<H2>New feaures since version 1.4</H2> + +</TD> + +</TR> + <TR > +<TD align=left valign=top width="15%" bgcolor="#FF9900"> + + + +<TABLE align=left valign=top columns=1> +<TR> +<TD bgcolor="#CC6600"> +<P> +<B>Generel info</B> +</P> + +</TD> + +</TR> + <TR> +<TD> + +<FONT size=-1><P> +<B><A HREF="whatis.htm">What is m4</A></B> +</P> +</FONT> + +</TD> + +</TR> + <TR> +<TD> + +<FONT size=-1><P> +<B><A HREF="features.htm">Features</A></B> +</P> +</FONT> + +</TD> + +</TR> + <TR> +<TD> + +<FONT size=-1><P> +<B><A HREF="uses.htm">Uses of m4</A></B> +</P> +</FONT> + +</TD> + +</TR> + <TR> +<TD bgcolor="#CC6600"> +<P> +<B>Documentation</B> +</P> + +</TD> + +</TR> + <TR> +<TD> + +<FONT size=-1><P> +<B><A HREF="man/m4_toc.html">Manual</A></B> +</P> +</FONT> + +</TD> + +</TR> + <TR> +<TD bgcolor="#CC6600"> +<P> +<B>Source files</B> +</P> + +</TD> + +</TR> + <TR> +<TD> + +<FONT size=-1><P> +<B><A HREF="readme.htm">README</A></B> +</P> +</FONT> + +</TD> + +</TR> + <TR> +<TD> + +<FONT size=-1><P> +<B><A HREF="todo.htm">TODO</A></B> +</P> +</FONT> + +</TD> + +</TR> + <TR> +<TD> + +<FONT size=-1><P> +<B><A HREF="news.htm">NEWS</A></B> +</P> +</FONT> + +</TD> + +</TR> + <TR> +<TD> + +<FONT size=-1><P> +<B><A HREF="changelog.htm">ChangeLog</A></B> +</P> +</FONT> + +</TD> + +</TR> + <TR> +<TD> + +<FONT size=-1><P> +<B><A HREF="thanks.htm">Contributors</A></B> +</P> +</FONT> + +</TD> + +</TR> + <TR> +<TD> + +<FONT size=-1><P> +<B><A HREF="m4/">Browse it</A></B> +</P> +</FONT> + +</TD> + +</TR> + <TR> +<TD bgcolor="#CC6600"> +<P> +<B>The Future</B> +</P> + +</TD> + +</TR> + <TR> +<TD> + +<FONT size=-1><P> +<B><A HREF="modules.htm">Modules</A></B> +</P> +</FONT> + +</TD> + +</TR> + <TR> +<TD> + +<FONT size=-1><P> +<B><A HREF="visions.htm">Visions</A></B> +</P> +</FONT> + +</TD> + +</TR> + <TR> +<TD bgcolor="#CC6600"> +<P> +<B>Development</B> +</P> + +</TD> + +</TR> + <TR> +<TD> + +<FONT size=-1><P> +<B><A HREF="lists.htm">Mailing-lists</A></B> +</P> +</FONT> + +</TD> + +</TR> + <TR> +<TD> + +<FONT size=-1><P> +<B><A HREF="feedback.htm">Feedback</A></B> +</P> +</FONT> + +</TD> + +</TR> + <TR> +<TD> + +<FONT size=-1><P> +<B><A HREF="download.htm">Download</A></B> +</P> +</FONT> + +</TD> + +</TR> + <TR> +<TD bgcolor="#CC6600"> +<P> +<B>Examples</B> +</P> + +</TD> + +</TR> + <TR> +<TD> + +<FONT size=-1><P> +<B><A HREF="thissite.htm">This site</A></B> +</P> +</FONT> + +</TD> + +</TR> + +</TABLE> + + + + + +</TD> + <TD align=left valign=top width="90%"> + + +<P> +Please look at the <A HREF="news.htm">NEWS</A> and the <A HREF="changelog.htm">ChangeLog</A> for all the gory details. +</P> + + +<DL> +<DT><B>GNU m4 uses GNU Automake and GNU Autoconf for configuration.</B></DT> + +<DD> +<P> +This has been long overdue and now hit is done thanks to Erick +Branderhorst. +</P> + +</DD> + + +<DT><B>GNU m4 uses GNU gettext for internationalisation.</B></DT> + +<DD> +<P> +GNU m4 now speaks several languages. Translations for +german french italian japanese dutch polish romenian and swedish +have been made. +</P> + +</DD> + + +<DT><B>Support for multiple precision arithmetic in eval.</B></DT> + +<DD> +<P> +If appropriately configured GNU m4 can now do multiple precision +arithmetic in the build in macro 'eval'. If not configured GNU m4 +will use the largest integer available for its calculations. +</P> + +</DD> + + +<DT><B>An input syntax table to change how input is parsed.</B></DT> + +<DD> +<P> +A new build in macro 'changesyntax' allows finer control over how input +characters are parsed into input tokens. It is no possible to have +several one character quote strings or comment delimiters to change the +format of macro calls to use active characters like in TeX and probably +most useful to change what input characters are treated as letters when +looking for macro calls. +</P> + + +<P> +See the <A HREF="man/m4_7.html#SEC41">manual section</A> for more details. +</P> + +</DD> + + +<DT><B>Support for loadable modules.</B></DT> + +<DD> +<P> +GNU m4 now has rudimentary support for dynamic loading of +compiled modules at runtime. A module can define any number of new build +in macros which will be indistinguishable from the standard set of +build in macros. Modules can also override existing build in macros. +</P> + + +<P> +Module support for GNU m4 still needs some work. +</P> + + +<P> +See the <A HREF="modules.htm">separate README file for modules</A> +</P> + + +</DD> + + +<DT><B>Better control of sync-lines generation.</B></DT> + +<DD> +<P> +The new build in macro 'syncoutput' allows better control of the +generation of sync-lines. They can no be turned on or off at +will. +</P> + +</DD> + + + +</DL> + + + +</TD> + +</TR> + +</TABLE> + +</BODY> + + +</HTML> + + diff --git a/examples/WWW/feedback.htm b/examples/WWW/feedback.htm new file mode 100644 index 00000000..f6a991d1 --- /dev/null +++ b/examples/WWW/feedback.htm @@ -0,0 +1,297 @@ +<DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 TRANSITIONAL//EN"> +<HTML> +<HEAD> +<TITLE>GNU m4 - Feedback</TITLE> +<META NAME="AUTHOR" CONTENT="René Seindal"> +<META NAME="GENERATOR" CONTENT="GNU m4 1.4l"> +</HEAD> + <BODY text="#000000" bgcolor="#FFCC99" link="#0000EF" alink="#FF0000" vlink="#51188E"> +<TABLE cellpadding=5 width="100%"> +<TR align=left valign=bottom> +<TD align=center valign=center colspan="3" width="100%" bgcolor="#FF9900"> + +<H1>GNU m4</H1> + +<H2>Feedback</H2> + +</TD> + +</TR> + <TR > +<TD align=left valign=top width="15%" bgcolor="#FF9900"> + + + +<TABLE align=left valign=top columns=1> +<TR> +<TD bgcolor="#CC6600"> +<P> +<B>Generel info</B> +</P> + +</TD> + +</TR> + <TR> +<TD> + +<FONT size=-1><P> +<B><A HREF="whatis.htm">What is m4</A></B> +</P> +</FONT> + +</TD> + +</TR> + <TR> +<TD> + +<FONT size=-1><P> +<B><A HREF="features.htm">Features</A></B> +</P> +</FONT> + +</TD> + +</TR> + <TR> +<TD> + +<FONT size=-1><P> +<B><A HREF="uses.htm">Uses of m4</A></B> +</P> +</FONT> + +</TD> + +</TR> + <TR> +<TD bgcolor="#CC6600"> +<P> +<B>Documentation</B> +</P> + +</TD> + +</TR> + <TR> +<TD> + +<FONT size=-1><P> +<B><A HREF="man/m4_toc.html">Manual</A></B> +</P> +</FONT> + +</TD> + +</TR> + <TR> +<TD bgcolor="#CC6600"> +<P> +<B>Source files</B> +</P> + +</TD> + +</TR> + <TR> +<TD> + +<FONT size=-1><P> +<B><A HREF="readme.htm">README</A></B> +</P> +</FONT> + +</TD> + +</TR> + <TR> +<TD> + +<FONT size=-1><P> +<B><A HREF="todo.htm">TODO</A></B> +</P> +</FONT> + +</TD> + +</TR> + <TR> +<TD> + +<FONT size=-1><P> +<B><A HREF="news.htm">NEWS</A></B> +</P> +</FONT> + +</TD> + +</TR> + <TR> +<TD> + +<FONT size=-1><P> +<B><A HREF="changelog.htm">ChangeLog</A></B> +</P> +</FONT> + +</TD> + +</TR> + <TR> +<TD> + +<FONT size=-1><P> +<B><A HREF="thanks.htm">Contributors</A></B> +</P> +</FONT> + +</TD> + +</TR> + <TR> +<TD> + +<FONT size=-1><P> +<B><A HREF="m4/">Browse it</A></B> +</P> +</FONT> + +</TD> + +</TR> + <TR> +<TD bgcolor="#CC6600"> +<P> +<B>The Future</B> +</P> + +</TD> + +</TR> + <TR> +<TD> + +<FONT size=-1><P> +<B><A HREF="modules.htm">Modules</A></B> +</P> +</FONT> + +</TD> + +</TR> + <TR> +<TD> + +<FONT size=-1><P> +<B><A HREF="visions.htm">Visions</A></B> +</P> +</FONT> + +</TD> + +</TR> + <TR> +<TD bgcolor="#CC6600"> +<P> +<B>Development</B> +</P> + +</TD> + +</TR> + <TR> +<TD> + +<FONT size=-1><P> +<B><A HREF="lists.htm">Mailing-lists</A></B> +</P> +</FONT> + +</TD> + +</TR> + <TR> +<TD> + +<FONT size=-1><P> +<B><A HREF="feedback.htm">Feedback</A></B> +</P> +</FONT> + +</TD> + +</TR> + <TR> +<TD> + +<FONT size=-1><P> +<B><A HREF="download.htm">Download</A></B> +</P> +</FONT> + +</TD> + +</TR> + <TR> +<TD bgcolor="#CC6600"> +<P> +<B>Examples</B> +</P> + +</TD> + +</TR> + <TR> +<TD> + +<FONT size=-1><P> +<B><A HREF="thissite.htm">This site</A></B> +</P> +</FONT> + +</TD> + +</TR> + +</TABLE> + + + + + +</TD> + <TD align=left valign=top width="90%"> + + +<P> +Bug reports should be sent to <A HREF="mailto:bug-m4@gnu.org">bug-m4@gnu.org</A>. +</P> + + +<P> +Generel discussion about GNU m4 should take place on +<A HREF="mailto:m4-forum@seindal.dk">m4-forum</A>. +</P> + + +<P> +Informal comments about this site and GNU m4 can be sent to +<A HREF="mailto:m4-feedback@seindal.dk">m4-feedback</A>. +</P> + + + + +</TD> + +</TR> + +</TABLE> + +</BODY> + + +</HTML> + + diff --git a/examples/WWW/index.htm b/examples/WWW/index.htm new file mode 100644 index 00000000..8e739aef --- /dev/null +++ b/examples/WWW/index.htm @@ -0,0 +1,319 @@ +<DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 TRANSITIONAL//EN"> +<HTML> +<HEAD> +<TITLE>GNU m4 - Development site</TITLE> +<META NAME="AUTHOR" CONTENT="René Seindal"> +<META NAME="GENERATOR" CONTENT="GNU m4 1.4l"> +</HEAD> + <BODY text="#000000" bgcolor="#FFCC99" link="#0000EF" alink="#FF0000" vlink="#51188E"> +<TABLE cellpadding=5 width="100%"> +<TR align=left valign=bottom> +<TD align=center valign=center colspan="3" width="100%" bgcolor="#FF9900"> + +<H1>GNU m4</H1> + +<H2>Development site</H2> + +</TD> + +</TR> + <TR > +<TD align=left valign=top width="15%" bgcolor="#FF9900"> + + + +<TABLE align=left valign=top columns=1> +<TR> +<TD bgcolor="#CC6600"> +<P> +<B>Generel info</B> +</P> + +</TD> + +</TR> + <TR> +<TD> + +<FONT size=-1><P> +<B><A HREF="whatis.htm">What is m4</A></B> +</P> +</FONT> + +</TD> + +</TR> + <TR> +<TD> + +<FONT size=-1><P> +<B><A HREF="features.htm">Features</A></B> +</P> +</FONT> + +</TD> + +</TR> + <TR> +<TD> + +<FONT size=-1><P> +<B><A HREF="uses.htm">Uses of m4</A></B> +</P> +</FONT> + +</TD> + +</TR> + <TR> +<TD bgcolor="#CC6600"> +<P> +<B>Documentation</B> +</P> + +</TD> + +</TR> + <TR> +<TD> + +<FONT size=-1><P> +<B><A HREF="man/m4_toc.html">Manual</A></B> +</P> +</FONT> + +</TD> + +</TR> + <TR> +<TD bgcolor="#CC6600"> +<P> +<B>Source files</B> +</P> + +</TD> + +</TR> + <TR> +<TD> + +<FONT size=-1><P> +<B><A HREF="readme.htm">README</A></B> +</P> +</FONT> + +</TD> + +</TR> + <TR> +<TD> + +<FONT size=-1><P> +<B><A HREF="todo.htm">TODO</A></B> +</P> +</FONT> + +</TD> + +</TR> + <TR> +<TD> + +<FONT size=-1><P> +<B><A HREF="news.htm">NEWS</A></B> +</P> +</FONT> + +</TD> + +</TR> + <TR> +<TD> + +<FONT size=-1><P> +<B><A HREF="changelog.htm">ChangeLog</A></B> +</P> +</FONT> + +</TD> + +</TR> + <TR> +<TD> + +<FONT size=-1><P> +<B><A HREF="thanks.htm">Contributors</A></B> +</P> +</FONT> + +</TD> + +</TR> + <TR> +<TD> + +<FONT size=-1><P> +<B><A HREF="m4/">Browse it</A></B> +</P> +</FONT> + +</TD> + +</TR> + <TR> +<TD bgcolor="#CC6600"> +<P> +<B>The Future</B> +</P> + +</TD> + +</TR> + <TR> +<TD> + +<FONT size=-1><P> +<B><A HREF="modules.htm">Modules</A></B> +</P> +</FONT> + +</TD> + +</TR> + <TR> +<TD> + +<FONT size=-1><P> +<B><A HREF="visions.htm">Visions</A></B> +</P> +</FONT> + +</TD> + +</TR> + <TR> +<TD bgcolor="#CC6600"> +<P> +<B>Development</B> +</P> + +</TD> + +</TR> + <TR> +<TD> + +<FONT size=-1><P> +<B><A HREF="lists.htm">Mailing-lists</A></B> +</P> +</FONT> + +</TD> + +</TR> + <TR> +<TD> + +<FONT size=-1><P> +<B><A HREF="feedback.htm">Feedback</A></B> +</P> +</FONT> + +</TD> + +</TR> + <TR> +<TD> + +<FONT size=-1><P> +<B><A HREF="download.htm">Download</A></B> +</P> +</FONT> + +</TD> + +</TR> + <TR> +<TD bgcolor="#CC6600"> +<P> +<B>Examples</B> +</P> + +</TD> + +</TR> + <TR> +<TD> + +<FONT size=-1><P> +<B><A HREF="thissite.htm">This site</A></B> +</P> +</FONT> + +</TD> + +</TR> + +</TABLE> + + + + + +</TD> + <TD align=left valign=top width="90%"> + + +<H2>Current development version is 1.4l.</H2> + + +<P> +Development versions contain new features and experiments that might +or might not make it into the next official release. The current +development version contains among other things (browse the +<A HREF="features.htm">new features</A> for more detail): +</P> + + +<UL> + + <LI> Uses GNU Automake and GNU Autoconf for configuration. + + <LI> Uses GNU gettext for internationalisation. + + <LI> Support for multiple precision arithmetic in eval. + + <LI> An input syntax table to change how input is parsed. + + <LI> Support for loadable modules. + + <LI> Better control of sync-lines generation. + + <LI> Various bug-fixes. + +</UL> + + +<P> +A new release is expected ready for December 1998. +</P> + + +<P> +GNU <TT>m4</TT> 1.4 is from october 1994 and can be considered stable. +</P> + + + +</TD> + +</TR> + +</TABLE> + +</BODY> + + +</HTML> + + diff --git a/examples/WWW/lists.htm b/examples/WWW/lists.htm new file mode 100644 index 00000000..afa2b9be --- /dev/null +++ b/examples/WWW/lists.htm @@ -0,0 +1,320 @@ +<DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 TRANSITIONAL//EN"> +<HTML> +<HEAD> +<TITLE>GNU m4 - Mailing lists</TITLE> +<META NAME="AUTHOR" CONTENT="René Seindal"> +<META NAME="GENERATOR" CONTENT="GNU m4 1.4l"> +</HEAD> + <BODY text="#000000" bgcolor="#FFCC99" link="#0000EF" alink="#FF0000" vlink="#51188E"> +<TABLE cellpadding=5 width="100%"> +<TR align=left valign=bottom> +<TD align=center valign=center colspan="3" width="100%" bgcolor="#FF9900"> + +<H1>GNU m4</H1> + +<H2>Mailing lists</H2> + +</TD> + +</TR> + <TR > +<TD align=left valign=top width="15%" bgcolor="#FF9900"> + + + +<TABLE align=left valign=top columns=1> +<TR> +<TD bgcolor="#CC6600"> +<P> +<B>Generel info</B> +</P> + +</TD> + +</TR> + <TR> +<TD> + +<FONT size=-1><P> +<B><A HREF="whatis.htm">What is m4</A></B> +</P> +</FONT> + +</TD> + +</TR> + <TR> +<TD> + +<FONT size=-1><P> +<B><A HREF="features.htm">Features</A></B> +</P> +</FONT> + +</TD> + +</TR> + <TR> +<TD> + +<FONT size=-1><P> +<B><A HREF="uses.htm">Uses of m4</A></B> +</P> +</FONT> + +</TD> + +</TR> + <TR> +<TD bgcolor="#CC6600"> +<P> +<B>Documentation</B> +</P> + +</TD> + +</TR> + <TR> +<TD> + +<FONT size=-1><P> +<B><A HREF="man/m4_toc.html">Manual</A></B> +</P> +</FONT> + +</TD> + +</TR> + <TR> +<TD bgcolor="#CC6600"> +<P> +<B>Source files</B> +</P> + +</TD> + +</TR> + <TR> +<TD> + +<FONT size=-1><P> +<B><A HREF="readme.htm">README</A></B> +</P> +</FONT> + +</TD> + +</TR> + <TR> +<TD> + +<FONT size=-1><P> +<B><A HREF="todo.htm">TODO</A></B> +</P> +</FONT> + +</TD> + +</TR> + <TR> +<TD> + +<FONT size=-1><P> +<B><A HREF="news.htm">NEWS</A></B> +</P> +</FONT> + +</TD> + +</TR> + <TR> +<TD> + +<FONT size=-1><P> +<B><A HREF="changelog.htm">ChangeLog</A></B> +</P> +</FONT> + +</TD> + +</TR> + <TR> +<TD> + +<FONT size=-1><P> +<B><A HREF="thanks.htm">Contributors</A></B> +</P> +</FONT> + +</TD> + +</TR> + <TR> +<TD> + +<FONT size=-1><P> +<B><A HREF="m4/">Browse it</A></B> +</P> +</FONT> + +</TD> + +</TR> + <TR> +<TD bgcolor="#CC6600"> +<P> +<B>The Future</B> +</P> + +</TD> + +</TR> + <TR> +<TD> + +<FONT size=-1><P> +<B><A HREF="modules.htm">Modules</A></B> +</P> +</FONT> + +</TD> + +</TR> + <TR> +<TD> + +<FONT size=-1><P> +<B><A HREF="visions.htm">Visions</A></B> +</P> +</FONT> + +</TD> + +</TR> + <TR> +<TD bgcolor="#CC6600"> +<P> +<B>Development</B> +</P> + +</TD> + +</TR> + <TR> +<TD> + +<FONT size=-1><P> +<B><A HREF="lists.htm">Mailing-lists</A></B> +</P> +</FONT> + +</TD> + +</TR> + <TR> +<TD> + +<FONT size=-1><P> +<B><A HREF="feedback.htm">Feedback</A></B> +</P> +</FONT> + +</TD> + +</TR> + <TR> +<TD> + +<FONT size=-1><P> +<B><A HREF="download.htm">Download</A></B> +</P> +</FONT> + +</TD> + +</TR> + <TR> +<TD bgcolor="#CC6600"> +<P> +<B>Examples</B> +</P> + +</TD> + +</TR> + <TR> +<TD> + +<FONT size=-1><P> +<B><A HREF="thissite.htm">This site</A></B> +</P> +</FONT> + +</TD> + +</TR> + +</TABLE> + + + + + +</TD> + <TD align=left valign=top width="90%"> + + + +<H3>There are two mailing lists for GNU m4</H3> + + +<DL> +<DT><B><A HREF="mailto:m4-forum@seindal.dk">m4-forum@seindal.dk</A></B></DT> + +<DD> +<P> +This list is intended for discussions between people interested +and/or participating in the further development of m4. +</P> + +</DD> + + +<DT><B>m4-announce@seindal.dk</B></DT> + +<DD> +<P> +Announcements regarding GNU m4 will posted here. +</P> + +<P> +The volume will certainly be very low. +</P> + +</DD> + + + +</DL> + + +<P> +Currently these lists are maintained manually. Send a message to <A HREF="mailto:rene@seindal.dk">rene@seindal.dk</A> +saying whether you want to subscribe or unsubscribe to any of these +lists. +</P> + + + +</TD> + +</TR> + +</TABLE> + +</BODY> + + +</HTML> + + diff --git a/examples/WWW/m4lib/bugs.m4 b/examples/WWW/m4lib/bugs.m4 new file mode 100644 index 00000000..f3204317 --- /dev/null +++ b/examples/WWW/m4lib/bugs.m4 @@ -0,0 +1,52 @@ +include(`setup.m4') + +\set_author([René Seindal]) +\set_title([Known bugs in GNU m4 \__m4_version__]) + +\divert(1) +\h2([Known bugs in GNU m4]) + +\define([fixed], [\p([Fixed in version 1.4$1])]) + +\define([notme], [\p([A <A +HREF="mailto:m4-feedback@seindal.dk?subject=GNU m4: \defn([_item])" +>volunteer</A> is badly needed for this, as I have no way of testing +this myself.])]) + +\ul([ + +\item([undivert], [undivert(0) might read from standard output], + +[\p([If calling \tt(undivert(0)) when diverting to a non-zero diversion +will cause m4 to read from standard output in an attempt to bring back +diversion 0, which is not possible.]) + +\fixed(n) + +]) + +\item([sigaltstack], [failure if sigaltstack or sigstack returns ENOSYS], + +[\p([If stack overflow detection is configured but the system doesn't +support sigaltstack(2) or sigstack(2), m4 fails when the system call +returns ENOSYS. It should silently revert to default behaviour.]) + +\notme +]) + +]) + +\p([See also the \link(todo.htm, TODO) file.]) + +\print_items + +\divert(0)\dnl +\DO_LAYOUT([\undivert(1)]) +\divert(-1) + + +\item([], [], + +[\p([]) + +]) diff --git a/examples/WWW/m4lib/changelog.m4 b/examples/WWW/m4lib/changelog.m4 new file mode 100644 index 00000000..cdcab269 --- /dev/null +++ b/examples/WWW/m4lib/changelog.m4 @@ -0,0 +1,18 @@ +include(`setup.m4') + +\set_author([René Seindal]) +\set_title([ChangeLog]) + +\divert(1) + +<PRE>\dnl +\changesyntax([A<>])\dnl +\changequote(,)\dnl +\include(m4/ChangeLog) +\changequote([,])\dnl +\changesyntax([O<>])\dnl +</PRE> + +\divert(0)\dnl +\DO_LAYOUT([\undivert(1)]) +\divert(-1) diff --git a/examples/WWW/m4lib/download.m4 b/examples/WWW/m4lib/download.m4 new file mode 100644 index 00000000..a26eedfb --- /dev/null +++ b/examples/WWW/m4lib/download.m4 @@ -0,0 +1,21 @@ +include(`setup.m4') + +\set_author([René Seindal]) +\set_title([Download]) + +\divert(1) + +\p(In the download area there are usually several version +present. Please take only the latest.) + +\p(The files are name \tt(m4-1.4\i(X).tar.gz) where X is a letter.) + +\p(\link([ftp://ftp.seindal.dk/pub/rene/gnu/], [Download latest +development version]).) + +\p(\link([ftp://ftp.seindal.dk/pub/rene/gnu/m4-1.4.tar.gz],[Download +latest stable version]).) + +\divert(0)\dnl +\DO_LAYOUT([\undivert(1)]) +\divert(-1) diff --git a/examples/WWW/m4lib/features.m4 b/examples/WWW/m4lib/features.m4 new file mode 100644 index 00000000..67bb8b2a --- /dev/null +++ b/examples/WWW/m4lib/features.m4 @@ -0,0 +1,62 @@ +include(`setup.m4') + +\set_author([René Seindal]) +\set_title([New feaures since version 1.4]) + +\divert(1) + +\p(Please look at the \link(news.htm, NEWS) and the \link(changelog.htm, +ChangeLog) for all the gory details.) + +\dl( +\dt(\b(GNU m4 uses GNU Automake and GNU Autoconf for configuration.)) + +\dd(\p(This has been long overdue, and now hit is done thanks to Erick +Branderhorst.)) + +\dt(\b(GNU m4 uses GNU gettext for internationalisation.)) + +\dd(\p(GNU m4 now speaks several languages. Translations for +german, french, italian, japanese, dutch, polish, romenian and swedish +have been made.)) + +\dt(\b(Support for multiple precision arithmetic in eval.)) + +\dd(\p(If appropriately configured, GNU m4 can now do multiple precision +arithmetic in the build in macro 'eval'. If not configured, GNU m4 +will use the largest integer available for its calculations.)) + +\dt(\b(An input syntax table to change how input is parsed.)) + +\dd(\p(A new build in macro 'changesyntax' allows finer control over how input +characters are parsed into input tokens. It is no possible to have +several one character quote strings or comment delimiters, to change the +format of macro calls, to use active characters like in TeX, and probably +most useful, to change what input characters are treated as letters when +looking for macro calls.) + +\p(See the \link(man/m4_7.html#SEC41, manual section) for more details.)) + +\dt(\b(Support for loadable modules.)) + +\dd(\p(GNU m4 now has rudimentary support for dynamic loading of +compiled modules at runtime. A module can define any number of new build +in macros, which will be indistinguishable from the standard set of +build in macros. Modules can also override existing build in macros.) + +\p(Module support for GNU m4 still needs some work.) + +\p(See the \link(modules.htm, separate README file for modules)) +) + +\dt(\b(Better control of sync-lines generation.)) + +\dd(\p(The new build in macro 'syncoutput' allows better control of the +generation of sync-lines. They can no be turned on or off at +will.)) + +) + +\divert(0)\dnl +\DO_LAYOUT([\undivert(1)]) +\divert(-1) diff --git a/examples/WWW/m4lib/feedback.m4 b/examples/WWW/m4lib/feedback.m4 new file mode 100644 index 00000000..f61d63e5 --- /dev/null +++ b/examples/WWW/m4lib/feedback.m4 @@ -0,0 +1,20 @@ +include(`setup.m4') + +\set_author([René Seindal]) +\set_title([Feedback]) + +\divert(1) + +\p(Bug reports should be sent to \link(mailto:bug-m4@gnu.org, +bug-m4@gnu.org).) + +\p(Generel discussion about GNU m4 should take place on +\link(mailto:m4-forum@seindal.dk, m4-forum).) + +\p(Informal comments about this site and GNU m4 can be sent to +\link(mailto:m4-feedback@seindal.dk, m4-feedback).) + + +\divert(0)\dnl +\DO_LAYOUT([\undivert(1)]) +\divert(-1) diff --git a/examples/WWW/m4lib/html.m4 b/examples/WWW/m4lib/html.m4 new file mode 100644 index 00000000..50330af2 --- /dev/null +++ b/examples/WWW/m4lib/html.m4 @@ -0,0 +1,119 @@ +\define([n], [ +]) + +\define([concat], [\ifelse($#, 0, , + $#, 1, [$1], + [$1 \concat(\shift($@))])]) + +\define([toupper], [\translit([$*], [a-z], [A-Z])]) + +\define([container], +[\pushdef([_tag], \toupper([$1]))\dnl +\ifelse($#, 1, [<\_tag></[\_tag]>], + $#, 2, [<\_tag>$2</\_tag>], + $#, 3, [<\_tag $2>$3</\_tag>], + [<\_tag $2>\concat(\shift(\shift($@)))</\_tag>])\dnl +\popdef([_tag])\dnl +]) + +\define([large_container], +[\pushdef([_tag], \toupper([$1]))\dnl +\ifelse($#, 1, [<\_tag></\_tag>\n], + $#, 2, [<\_tag>\n[]$2\n</\_tag>\n], + $#, 3, [<\_tag $2>\n[]$3\n</\_tag>\n], + [<\_tag $2>\n\concat(\shift(\shift($@)))\n</\_tag>\n])\dnl +\popdef([_tag])\dnl +]) + +\define([large_simple_container], +[\pushdef([_tag], \toupper([$1]))\dnl +<\_tag>\n\concat(\shift($@))\n</\_tag>\n\dnl +\popdef([_tag])\dnl +]) + +\define([simple_container], +[\pushdef([_tag], \toupper([$1]))\dnl +<\_tag>\concat(\shift($@))</\_tag>\dnl +\popdef([_tag])\dnl +]) + +\define([simple_tag], +[\pushdef([_tag], \toupper([$1]))\dnl +\ifelse([$2], [], [<\_tag>], [<\_tag $2>])\dnl +\popdef([_tag])\dnl +]) + +\define([doctype], [\simple_tag([$0], $@)]) + +\define([html], [\large_simple_container([$0], $@)]) +\define([head], [\large_simple_container([$0], $@)]) +\define([title], [\simple_container([$0], $@)]) + +\define([meta], [\n<META NAME="[$1]" CONTENT="[$2]">]) +\define([http_equiv], [\n<META HTTP-EQUIV="[$1]" CONTENT="[$2]">]) + +\define([body], [\large_container([$0], $@)]) + +\define([center], [\large_simple_container([$0], $@)]) +\define([right], [\large_simple_container([$0], $@)]) +\define([left], [\large_simple_container([$0], $@)]) +\define([div], [\large_container([$0], $@)]) + +\define([b], [\simple_container([$0], $@)]) +\define([i], [\simple_container([$0], $@)]) +\define([tt], [\simple_container([$0], $@)]) + +\define([table], [\large_container([$0], $@)]) +\define([tr], [\large_container([$0], $@)]) +\define([td], [\large_container([$0], $@)]) +\define([th], [\large_container([$0], $@)]) + +\define([link], [<A HREF="$1">\shift($@)</A>]) +\define([target], [<A NAME="$1">\shift($@)</A>]) + +\define([font], [\n\container([$0], $@)\n]) + +\define([h1], [\n\container([$0], $@)\n]) +\define([h2], [\n\container([$0], $@)\n]) +\define([h3], [\n\container([$0], $@)\n]) +\define([h4], [\n\container([$0], $@)\n]) +\define([h5], [\n\container([$0], $@)\n]) +\define([h6], [\n\container([$0], $@)\n]) + +\define([p], [\large_simple_container([$0], $@)]) + + +\define([ul], [\large_container([$0], $@)]) +\define([ol], [\large_container([$0], $@)]) + +\define([li], [\simple_tag([$0], $@)]) + +\define([dl], [\large_simple_container([$0], $@)]) +\define([dt], [\simple_container([$0], $@)]) +\define([dd], [\large_simple_container([$0], $@)]) + +\define([br], [\simple_tag([$0], $@)]) +\define([hline], [\simple_tag([$0], $@)]) + +\define([pre], [\simple_container([$0], $@)]) + + + +\define([set_title], [\define([_TITLE], [$*])]) +\set_title(_TITLE) + +\define([set_author], [\define([_AUTHOR], [$*])]) +\set_author() + +\define([set_generator], [\define([_GENERATOR], [$*])]) +\set_generator([GNU m4 \__m4_version__]) + +\define([set_keywords], [\define([_KEYWORDS], [$*])]) +\set_keywords() + +\define([set_body], [\define([_BODY], [$*])]) +\set_body() + +\define([meta_if_set], + [\ifelse(\defn([_$1]), [], [], \meta([$1], \defn([_$1])))]\dnl +) diff --git a/examples/WWW/m4lib/index.m4 b/examples/WWW/m4lib/index.m4 new file mode 100644 index 00000000..043faa35 --- /dev/null +++ b/examples/WWW/m4lib/index.m4 @@ -0,0 +1,36 @@ +include(`setup.m4') + +\set_author([René Seindal]) +\set_title([Development site]) + +\divert(1) +\h2([Current development version is \__m4_version__.]) + +\p([Development versions contain new features and experiments that might +or might not make it into the next official release. The current +development version contains among other things (browse the +\link([features.htm], [new features]) for more detail):]) + +\ul([ + \li Uses GNU Automake and GNU Autoconf for configuration. + + \li Uses GNU gettext for internationalisation. + + \li Support for multiple precision arithmetic in eval. + + \li An input syntax table to change how input is parsed. + + \li Support for loadable modules. + + \li Better control of sync-lines generation. + + \li Various bug-fixes. +]) + +\p([A new release is expected ready for December 1998.]) + +\p([GNU \tt(m4) 1.4 is from october 1994 and can be considered stable.]) + +\divert(0)\dnl +\DO_LAYOUT([\undivert(1)]) +\divert(-1) diff --git a/examples/WWW/m4lib/layout.m4 b/examples/WWW/m4lib/layout.m4 new file mode 100644 index 00000000..6feb08ec --- /dev/null +++ b/examples/WWW/m4lib/layout.m4 @@ -0,0 +1,50 @@ +\divert(-1); +The semicolons are just to get GNU Emacs C mode to indent properly. + +\define([C_TEXT], [text="#000000"]); +\define([C_LINK], [link="#0000EF"]); +\define([C_ALINK], [vlink="#51188E"]); +\define([C_VLINK], [alink="#FF0000"]); +\define([C_BG1], [bgcolor="#FFCC99"]); +\define([C_BG2], [bgcolor="#FF9900"]); +\define([C_BG3], [bgcolor="#CC6600"]); + +\define([DO_HEADER], + [\head([\title([GNU m4 - \defn([_TITLE])])], + [\meta_if_set([AUTHOR])], + [\meta_if_set([GENERATOR])], + [\meta_if_set([KEYWORDS])], + )]); + +\define([DO_BODY], + [\body([\C_TEXT \C_BG1 \C_LINK \C_VLINK \C_ALINK], + [\table([cellpadding=5 width="100%"], + [\tr([align=left valign=bottom], + [\td([align=center valign=center colspan="3" width="100%" \C_BG2], + [\h1([GNU m4])], + [\h2(\defn([_TITLE]))], + )], + )], + [\tr([], + [\td([align=left valign=top width="15%" \C_BG2], + [\include([menu.m4])], + )], + [\td([align=left valign=top width="90%"], + [$*], + )], + )], + )], + )] + ); + +\define([DO_LAYOUT], + [\doctype([HTML PUBLIC "-//W3C//DTD HTML 4.0 TRANSITIONAL//EN"]) +\html([\DO_HEADER], [\DO_BODY([$*])])] + ); + +\define([<], [<]); +\define([>], [>]); + +\define([showlink], [\link($1, $1)]); +\define([mailto], [\link(mailto:$1, $1)]); + diff --git a/examples/WWW/m4lib/lists.m4 b/examples/WWW/m4lib/lists.m4 new file mode 100644 index 00000000..cc710eba --- /dev/null +++ b/examples/WWW/m4lib/lists.m4 @@ -0,0 +1,32 @@ +include(`setup.m4') + +\set_author([René Seindal]) +\set_title([Mailing lists]) + +\define([me], \link([mailto:rene@seindal.dk], [rene@seindal.dk])) + +\divert(1) + +\h3(There are two mailing lists for GNU m4) + +\dl( + +\dt(\b(\link(mailto:m4-forum@seindal.dk, m4-forum@seindal.dk))) + +\dd(\p(This list is intended for discussions between people interested +and/or participating in the further development of m4.)) + +\dt(\b(m4-announce@seindal.dk)) + +\dd(\p(Announcements regarding GNU m4 will posted here.) +\p(The volume will certainly be very low.)) + +) + +\p(Currently these lists are maintained manually. Send a message to \me +saying whether you want to subscribe or unsubscribe to any of these +lists.) + +\divert(0)\dnl +\DO_LAYOUT([\undivert(1)]) +\divert(-1) diff --git a/examples/WWW/m4lib/menu.m4 b/examples/WWW/m4lib/menu.m4 new file mode 100644 index 00000000..1a770b63 --- /dev/null +++ b/examples/WWW/m4lib/menu.m4 @@ -0,0 +1,35 @@ +\pushdef([header], [\tr([\td([\C_BG3], [\p([\b([$1])])])])]) +\pushdef([row], [\tr([\td([\font([size=-1], [\p([\b([\link([$1], [$2])])])])])])]) + +\table([align=left valign=top columns=1], + [\header([Generel info])], + [\row([whatis.htm], [What is m4])], + [\row([features.htm], [Features])], + [\row([uses.htm], [Uses of m4])], + + [\header([Documentation])], + [\row([man/m4_toc.html], [Manual])], + + [\header([Source files])], + [\row([readme.htm], [README])], + [\row([todo.htm], [TODO])], + [\row([news.htm], [NEWS])], + [\row([changelog.htm], [ChangeLog])], + [\row([thanks.htm], [Contributors])], + [\row([m4/], [Browse it])], + + [\header([The Future])], + [\row([modules.htm], [Modules])], + [\row([visions.htm], [Visions])], + + [\header([Development])], + [\row([lists.htm], [Mailing-lists])], + [\row([feedback.htm], [Feedback])], + [\row([download.htm], [Download])], + + [\header([Examples])], + [\row([thissite.htm], [This site])], + ) + +\popdef([header]) +\popdef([row]) diff --git a/examples/WWW/m4lib/modules.m4 b/examples/WWW/m4lib/modules.m4 new file mode 100644 index 00000000..b9c148f1 --- /dev/null +++ b/examples/WWW/m4lib/modules.m4 @@ -0,0 +1,18 @@ +include(`setup.m4') + +\set_author([René Seindal]) +\set_title([Modules]) + +\divert(1) + +<PRE>\dnl +\changesyntax([A<>])\dnl +\changequote(,)\dnl +\include(m4/modules/README) +\changequote([,])\dnl +\changesyntax([O<>])\dnl +</PRE> + +\divert(0)\dnl +\DO_LAYOUT([\undivert(1)]) +\divert(-1) diff --git a/examples/WWW/m4lib/news.m4 b/examples/WWW/m4lib/news.m4 new file mode 100644 index 00000000..e5da0d89 --- /dev/null +++ b/examples/WWW/m4lib/news.m4 @@ -0,0 +1,18 @@ +include(`setup.m4') + +\set_author([René Seindal]) +\set_title([NEWS - History of user-visible changes]) + +\divert(1) + +<PRE>\dnl +\changesyntax([A<>])\dnl +\changequote(,)\dnl +\include(m4/NEWS) +\changequote([,])\dnl +\changesyntax([O<>])\dnl +</PRE> + +\divert(0)\dnl +\DO_LAYOUT([\undivert(1)]) +\divert(-1) diff --git a/examples/WWW/m4lib/readme.m4 b/examples/WWW/m4lib/readme.m4 new file mode 100644 index 00000000..1612c7d1 --- /dev/null +++ b/examples/WWW/m4lib/readme.m4 @@ -0,0 +1,18 @@ +include(`setup.m4') + +\set_author([René Seindal]) +\set_title([README]) + +\divert(1) + +<PRE>\dnl +\changesyntax([A<>])\dnl +\changequote(,)\dnl +\include(m4/README) +\changequote([,])\dnl +\changesyntax([O<>])\dnl +</PRE> + +\divert(0)\dnl +\DO_LAYOUT([\undivert(1)]) +\divert(-1) diff --git a/examples/WWW/m4lib/setup.m4 b/examples/WWW/m4lib/setup.m4 new file mode 100644 index 00000000..310b65f8 --- /dev/null +++ b/examples/WWW/m4lib/setup.m4 @@ -0,0 +1,7 @@ +divert(-1) +changequote([,]) +changecom([<!--], [-->]) +changesyntax([@\]) + +\include([html.m4]) +\include([layout.m4]) diff --git a/examples/WWW/m4lib/test.m4 b/examples/WWW/m4lib/test.m4 new file mode 100644 index 00000000..9fdef40b --- /dev/null +++ b/examples/WWW/m4lib/test.m4 @@ -0,0 +1,9 @@ +include(`_setup.m4') +\include([_html.m4]) +\include([_layout.m4]) + +\set_title([Development site]) + +\divert + +\DO_BODY([BODY]) diff --git a/examples/WWW/m4lib/thanks.m4 b/examples/WWW/m4lib/thanks.m4 new file mode 100644 index 00000000..61928d07 --- /dev/null +++ b/examples/WWW/m4lib/thanks.m4 @@ -0,0 +1,18 @@ +include(`setup.m4') + +\set_author([René Seindal]) +\set_title([People who have contributed to m4]) + +\divert(1) + +<PRE>\dnl +\changesyntax([A<>])\dnl +\changequote(,)\dnl +\include(m4/THANKS) +\changequote([,])\dnl +\changesyntax([O<>])\dnl +</PRE> + +\divert(0)\dnl +\DO_LAYOUT([\undivert(1)]) +\divert(-1) diff --git a/examples/WWW/m4lib/thissite.m4 b/examples/WWW/m4lib/thissite.m4 new file mode 100644 index 00000000..0d4d772b --- /dev/null +++ b/examples/WWW/m4lib/thissite.m4 @@ -0,0 +1,39 @@ +include(`setup.m4') + +\set_author([René Seindal]) +\set_title([This site]) + +\divert(1) + +\p(This GNU m4 site is maintained by René Seindal, +(\mailto(rene@seindal)).) + +\p(All files are generated using GNU m4 \__m4_version__. You can view +the \link(m4lib/, source files). They are very simple. They use some +features from Gnu m4 1.4l) + +\p(The basic M4 definitions of quotes, comments, escapes are in +\showlink(m4lib/setup.m4). This is first included by all files to +configure the enviroment correctly for the other files. To avoid have +macros called by accident, an escape character is defined with +changesyntax. \i(This is a new feature in m4 1.4l).) + +\p(Some fairly general macros to generate various HTML construct are +found in \showlink(m4lib/html.m4). There are macros for simple tags, +containers with and with attributes, links and a few utility macros.) + +\p(The visual aspects of the pages are in \showlink(m4lib/layout.m4). +The macros herein generate the complete HTML structure for the pages. +There are macros for making the header and the body of the document.) + +\p(The page body is passed to the layout definitions as an argument. As +the text can be large, it is first diverted and the text passed to the +layout macros is simply a call to undivert. That way a very large text +can be passed around with very little cost. This page is made with +\link(m4lib/thissite.m4, these definitions).) + +\p(There is a single file for each HTML file.) + +\divert(0)\dnl +\DO_LAYOUT([\undivert(1)]) +\divert(-1) diff --git a/examples/WWW/m4lib/tmpl.m4 b/examples/WWW/m4lib/tmpl.m4 new file mode 100644 index 00000000..8262d293 --- /dev/null +++ b/examples/WWW/m4lib/tmpl.m4 @@ -0,0 +1,11 @@ +include(`setup.m4') + +\set_author([René Seindal]) +\set_title([]) + +\divert(1) +\h2([]) + +\divert(0)\dnl +\DO_LAYOUT([\undivert(1)]) +\divert(-1) diff --git a/examples/WWW/m4lib/todo.m4 b/examples/WWW/m4lib/todo.m4 new file mode 100644 index 00000000..7a22c151 --- /dev/null +++ b/examples/WWW/m4lib/todo.m4 @@ -0,0 +1,18 @@ +include(`setup.m4') + +\set_author([René Seindal]) +\set_title([TODO - Things still to be done]) + +\divert(1) + +<PRE>\dnl +\changesyntax([A<>])\dnl +\changequote(,)\dnl +\include(m4/TODO) +\changequote([,])\dnl +\changesyntax([O<>])\dnl +</PRE> + +\divert(0)\dnl +\DO_LAYOUT([\undivert(1)]) +\divert(-1) diff --git a/examples/WWW/m4lib/uses.m4 b/examples/WWW/m4lib/uses.m4 new file mode 100644 index 00000000..75f7b6ae --- /dev/null +++ b/examples/WWW/m4lib/uses.m4 @@ -0,0 +1,36 @@ +include(`setup.m4') + +\set_author([René Seindal]) +\set_title([Current uses of m4]) + +\divert(1) + +\p(The MTA sendmail uses \tt(m4) for generating configuration files.) + +\p(\link(http://www.gnu.org/software/autoconf/autoconf.html, GNU +Autoconf) uses \tt(m4) to generate "configure" scripts, that are used +for configuring \link(http://www.gnu.org/, GNU) software for a +particular platform.) + +\p(Htm4l is a set of macros for generating HTML. Html4 is written by +Terry Jones (terry@cliffs.ucsd.edu). See +\showlink(http://cliffs.ucsd.edu/terry/htm4l/htm4l/main.html) for +details. ) + +\p(Various programs uses m4 to preprocess configuration files, for +example the X11 window manager fvwm.) + +\p( There is an \link(http://www.ssc.com/lg/issue22/using_m4.html, +article in the Linux Gazette) about writing HTML with GNU m4 written by +\link(mailto:bhepple@bit.net.au, Bob Hepple) . More recent versions +are kept at \link(http://www.bit.net.au/~bhepple, Bob's home site). +The macros are used to maintain a large commercial site at +\showlink(http://www.finder.com.au).) + + +\p(\link(thissite.htm, These files are created with GNU m4 \__m4_version__).) + + +\divert(0)\dnl +\DO_LAYOUT([\undivert(1)]) +\divert(-1) diff --git a/examples/WWW/m4lib/visions.m4 b/examples/WWW/m4lib/visions.m4 new file mode 100644 index 00000000..c904976d --- /dev/null +++ b/examples/WWW/m4lib/visions.m4 @@ -0,0 +1,28 @@ +include(`setup.m4') + +\set_author([René Seindal]) +\set_title([The Road Ahead]) + +\divert(1) +\h2([Possible features for future versions]) + + +\ul( + +\li \p(Guile can be used as an extension language so complicated macros can be +written in Scheme while still maintaining the m4 interface.) + +\li\p(A kind of super-quotes can be added, quotes that aren't stripped +when read, as are normal quotes. These quotes should be stripped when +output. In that way text can be super-quote and consequently passed +untouched to the output. It is a bit like comments, but there the +quotes are removed before output.) + +) + +\p(See also the \link(todo.htm, TODO) file.) + + +\divert(0)\dnl +\DO_LAYOUT([\undivert(1)]) +\divert(-1) diff --git a/examples/WWW/m4lib/whatis.m4 b/examples/WWW/m4lib/whatis.m4 new file mode 100644 index 00000000..506269a2 --- /dev/null +++ b/examples/WWW/m4lib/whatis.m4 @@ -0,0 +1,43 @@ +include(`setup.m4') + +\set_author([René Seindal]) +\set_title([What is GNU m4]) + +\divert(1) + +\p([GNU \tt(m4) is an implementation of the traditional Unix macro +processor. It is mostly SVR4 compatible, although it has some extensions +(for example, handling more than 9 positional parameters to macros). GNU +\tt(m4) also has built-in functions for including files, running shell +commands, doing arithmetic, etc.]) + +\p([GNU \tt(m4) is a macro processor, in the sense that it copies its +input to the output, expanding macros as it goes. Macros are either +builtin or user-defined, and can take any number of arguments. Besides +just doing macro expansion, m4 has builtin functions for including named +files, running UNIX commands, doing integer arithmetic, manipulating +text in various ways, recursion, etc... m4 can be used either as a +front-end to a compiler, or as a macro processor in its own right.]) + +\p([The m4 macro processor is widely available on all UNIXes. Usually, +only a small percentage of users are aware of its existence. However, +those who do often become commited users. The growing popularity of GNU +Autoconf, which prerequires GNU m4 for generating the `configure' +scripts, is an incentive for many to install it, while these people will +not themselves program in m4. GNU m4 is mostly compatible with the +System V, Release 3 version, except for some minor differences.]) + +\p([Some people found m4 to be fairly addictive. They first use m4 for +simple problems, then take bigger and bigger challenges, learning how to +write complex m4 sets of macros along the way. Once really addicted, +users pursue writing of sophisticated m4 applications even to solve +simple problems, devoting more time debugging their m4 scripts than +doing real work. Beware that m4 may be dangerous for the health of +compulsive programmers.]) + +\p([Autoconf needs GNU m4 for generating `configure' scripts, but not for +running them.]) + +\divert(0)\dnl +\DO_LAYOUT([\undivert(1)]) +\divert(-1) diff --git a/examples/WWW/modules.htm b/examples/WWW/modules.htm new file mode 100644 index 00000000..ee668972 --- /dev/null +++ b/examples/WWW/modules.htm @@ -0,0 +1,347 @@ +<DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 TRANSITIONAL//EN"> +<HTML> +<HEAD> +<TITLE>GNU m4 - Modules</TITLE> +<META NAME="AUTHOR" CONTENT="René Seindal"> +<META NAME="GENERATOR" CONTENT="GNU m4 1.4l"> +</HEAD> + <BODY text="#000000" bgcolor="#FFCC99" link="#0000EF" alink="#FF0000" vlink="#51188E"> +<TABLE cellpadding=5 width="100%"> +<TR align=left valign=bottom> +<TD align=center valign=center colspan="3" width="100%" bgcolor="#FF9900"> + +<H1>GNU m4</H1> + +<H2>Modules</H2> + +</TD> + +</TR> + <TR > +<TD align=left valign=top width="15%" bgcolor="#FF9900"> + + + +<TABLE align=left valign=top columns=1> +<TR> +<TD bgcolor="#CC6600"> +<P> +<B>Generel info</B> +</P> + +</TD> + +</TR> + <TR> +<TD> + +<FONT size=-1><P> +<B><A HREF="whatis.htm">What is m4</A></B> +</P> +</FONT> + +</TD> + +</TR> + <TR> +<TD> + +<FONT size=-1><P> +<B><A HREF="features.htm">Features</A></B> +</P> +</FONT> + +</TD> + +</TR> + <TR> +<TD> + +<FONT size=-1><P> +<B><A HREF="uses.htm">Uses of m4</A></B> +</P> +</FONT> + +</TD> + +</TR> + <TR> +<TD bgcolor="#CC6600"> +<P> +<B>Documentation</B> +</P> + +</TD> + +</TR> + <TR> +<TD> + +<FONT size=-1><P> +<B><A HREF="man/m4_toc.html">Manual</A></B> +</P> +</FONT> + +</TD> + +</TR> + <TR> +<TD bgcolor="#CC6600"> +<P> +<B>Source files</B> +</P> + +</TD> + +</TR> + <TR> +<TD> + +<FONT size=-1><P> +<B><A HREF="readme.htm">README</A></B> +</P> +</FONT> + +</TD> + +</TR> + <TR> +<TD> + +<FONT size=-1><P> +<B><A HREF="todo.htm">TODO</A></B> +</P> +</FONT> + +</TD> + +</TR> + <TR> +<TD> + +<FONT size=-1><P> +<B><A HREF="news.htm">NEWS</A></B> +</P> +</FONT> + +</TD> + +</TR> + <TR> +<TD> + +<FONT size=-1><P> +<B><A HREF="changelog.htm">ChangeLog</A></B> +</P> +</FONT> + +</TD> + +</TR> + <TR> +<TD> + +<FONT size=-1><P> +<B><A HREF="thanks.htm">Contributors</A></B> +</P> +</FONT> + +</TD> + +</TR> + <TR> +<TD> + +<FONT size=-1><P> +<B><A HREF="m4/">Browse it</A></B> +</P> +</FONT> + +</TD> + +</TR> + <TR> +<TD bgcolor="#CC6600"> +<P> +<B>The Future</B> +</P> + +</TD> + +</TR> + <TR> +<TD> + +<FONT size=-1><P> +<B><A HREF="modules.htm">Modules</A></B> +</P> +</FONT> + +</TD> + +</TR> + <TR> +<TD> + +<FONT size=-1><P> +<B><A HREF="visions.htm">Visions</A></B> +</P> +</FONT> + +</TD> + +</TR> + <TR> +<TD bgcolor="#CC6600"> +<P> +<B>Development</B> +</P> + +</TD> + +</TR> + <TR> +<TD> + +<FONT size=-1><P> +<B><A HREF="lists.htm">Mailing-lists</A></B> +</P> +</FONT> + +</TD> + +</TR> + <TR> +<TD> + +<FONT size=-1><P> +<B><A HREF="feedback.htm">Feedback</A></B> +</P> +</FONT> + +</TD> + +</TR> + <TR> +<TD> + +<FONT size=-1><P> +<B><A HREF="download.htm">Download</A></B> +</P> +</FONT> + +</TD> + +</TR> + <TR> +<TD bgcolor="#CC6600"> +<P> +<B>Examples</B> +</P> + +</TD> + +</TR> + <TR> +<TD> + +<FONT size=-1><P> +<B><A HREF="thissite.htm">This site</A></B> +</P> +</FONT> + +</TD> + +</TR> + +</TABLE> + + + + + +</TD> + <TD align=left valign=top width="90%"> + + +<PRE>This directory contains demonstration modules for GNU m4. + +Nothing in this directory is built by default. + +Dynamic modules is a experimental feature of GNU m4. Currently it has +only been certified to work under Linux 2.0. + +Dynamic modules are only available if GNU m4 was configured with +--with-modules and if the dlopen(3) interface is available in the +operating system. + +Implementation details are in ../src/module.c + +A module is a compiled shared object, i.e., modules are written in C and +then compiled. The compiled file can then be loaded into a running m4 +process by calling the builtin "loadmodule". This will give GNU m4 +access to any system feature with a C interface. + +Modules are searched for in M4MODPATH, if set, and in a module directory +defined at configure time, default /usr/local/libexec/m4. + +A module extends GNU m4 by defining new builtins, It can define builtins +with the same names as existing builtins, which will then be +unavailable. A module cannot redefine internal functions of GNU m4, +such as the input parser or argument handling. + +The infrastructure for writing and compiling modules is still a bit +wanting. + +Each module should include the two header files ../src/m4.h and +../src/builtin.h. These will include <ctype.h>, <stdio.h>, +../lib/obstack.h and ../config.h. + +Each module *must* define the symbol "m4_macro_table" as a pointer to a +table of "struct builtin" (defined in m4.h). The table ends with an +entry with name == NULL. The builtins described in the table will be +defined by GNU m4 as were they normal builtins. + +If a module defines the symbol "m4_init_module", it is supposed to be a +function with a prototype of "void m4_init_module(struct obstack *obs)", +and it will be called as soon as the module is loaded. Any non-finished +object left on the obstack will be the expansion of the call of the +builtin "loadmodule". The obstack pointer might be NULL (in the future). + +If a module defines the symbol "m4_finish_module", it is supposed to be +a function with a prototype of "void m4_finish_module(void)", and it +will be called just before GNU m4 exits. This will allow a module to +clean up before exit. There is no way of communicating information to +the user, as GNU m4 exits immeidately afterwards. + +No other symbols will be used by GNU m4. Other external symbols within +the module are private and will not be accessible to GNU m4 or to other +modules. + +Modules are allowed to call external functions already defined within +the GNU m4 sources. Some of these have prototypes in builtin.h. + + +A complete, though silly, example is found in test.c. A more +interesting example is in time.c. + +To try the demos, compile with `make' and run them with the commands as: + + M4MODPATH=`pwd` ../src/m4 time.m4 + + +</PRE> + + +</TD> + +</TR> + +</TABLE> + +</BODY> + + +</HTML> + + diff --git a/examples/WWW/news.htm b/examples/WWW/news.htm new file mode 100644 index 00000000..ed4f374f --- /dev/null +++ b/examples/WWW/news.htm @@ -0,0 +1,551 @@ +<DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 TRANSITIONAL//EN"> +<HTML> +<HEAD> +<TITLE>GNU m4 - NEWS - History of user-visible changes</TITLE> +<META NAME="AUTHOR" CONTENT="René Seindal"> +<META NAME="GENERATOR" CONTENT="GNU m4 1.4l"> +</HEAD> + <BODY text="#000000" bgcolor="#FFCC99" link="#0000EF" alink="#FF0000" vlink="#51188E"> +<TABLE cellpadding=5 width="100%"> +<TR align=left valign=bottom> +<TD align=center valign=center colspan="3" width="100%" bgcolor="#FF9900"> + +<H1>GNU m4</H1> + +<H2>NEWS - History of user-visible changes</H2> + +</TD> + +</TR> + <TR > +<TD align=left valign=top width="15%" bgcolor="#FF9900"> + + + +<TABLE align=left valign=top columns=1> +<TR> +<TD bgcolor="#CC6600"> +<P> +<B>Generel info</B> +</P> + +</TD> + +</TR> + <TR> +<TD> + +<FONT size=-1><P> +<B><A HREF="whatis.htm">What is m4</A></B> +</P> +</FONT> + +</TD> + +</TR> + <TR> +<TD> + +<FONT size=-1><P> +<B><A HREF="features.htm">Features</A></B> +</P> +</FONT> + +</TD> + +</TR> + <TR> +<TD> + +<FONT size=-1><P> +<B><A HREF="uses.htm">Uses of m4</A></B> +</P> +</FONT> + +</TD> + +</TR> + <TR> +<TD bgcolor="#CC6600"> +<P> +<B>Documentation</B> +</P> + +</TD> + +</TR> + <TR> +<TD> + +<FONT size=-1><P> +<B><A HREF="man/m4_toc.html">Manual</A></B> +</P> +</FONT> + +</TD> + +</TR> + <TR> +<TD bgcolor="#CC6600"> +<P> +<B>Source files</B> +</P> + +</TD> + +</TR> + <TR> +<TD> + +<FONT size=-1><P> +<B><A HREF="readme.htm">README</A></B> +</P> +</FONT> + +</TD> + +</TR> + <TR> +<TD> + +<FONT size=-1><P> +<B><A HREF="todo.htm">TODO</A></B> +</P> +</FONT> + +</TD> + +</TR> + <TR> +<TD> + +<FONT size=-1><P> +<B><A HREF="news.htm">NEWS</A></B> +</P> +</FONT> + +</TD> + +</TR> + <TR> +<TD> + +<FONT size=-1><P> +<B><A HREF="changelog.htm">ChangeLog</A></B> +</P> +</FONT> + +</TD> + +</TR> + <TR> +<TD> + +<FONT size=-1><P> +<B><A HREF="thanks.htm">Contributors</A></B> +</P> +</FONT> + +</TD> + +</TR> + <TR> +<TD> + +<FONT size=-1><P> +<B><A HREF="m4/">Browse it</A></B> +</P> +</FONT> + +</TD> + +</TR> + <TR> +<TD bgcolor="#CC6600"> +<P> +<B>The Future</B> +</P> + +</TD> + +</TR> + <TR> +<TD> + +<FONT size=-1><P> +<B><A HREF="modules.htm">Modules</A></B> +</P> +</FONT> + +</TD> + +</TR> + <TR> +<TD> + +<FONT size=-1><P> +<B><A HREF="visions.htm">Visions</A></B> +</P> +</FONT> + +</TD> + +</TR> + <TR> +<TD bgcolor="#CC6600"> +<P> +<B>Development</B> +</P> + +</TD> + +</TR> + <TR> +<TD> + +<FONT size=-1><P> +<B><A HREF="lists.htm">Mailing-lists</A></B> +</P> +</FONT> + +</TD> + +</TR> + <TR> +<TD> + +<FONT size=-1><P> +<B><A HREF="feedback.htm">Feedback</A></B> +</P> +</FONT> + +</TD> + +</TR> + <TR> +<TD> + +<FONT size=-1><P> +<B><A HREF="download.htm">Download</A></B> +</P> +</FONT> + +</TD> + +</TR> + <TR> +<TD bgcolor="#CC6600"> +<P> +<B>Examples</B> +</P> + +</TD> + +</TR> + <TR> +<TD> + +<FONT size=-1><P> +<B><A HREF="thissite.htm">This site</A></B> +</P> +</FONT> + +</TD> + +</TR> + +</TABLE> + + + + + +</TD> + <TD align=left valign=top width="90%"> + + +<PRE>GNU m4 NEWS - History of user-visible changes. -*-indented-text-*- +Copyright (C) 1992, 1993, 1994, 1998 Free Software Foundation, Inc. + +Version beta 1.4m - November 1998, by Rene' Seindal + +* Using libtool for compiling modules and for linking main app. + +* Reorganised the dynamic module code to encapsulate system dependencies + better. The code for HPUX shl_load() still needs testing and debugging. + A dld interface is also missing. Any volunteers? + +* The files from the GNU m4 web-site is now in examples/WWW as a more + complete example of what GNU m4 can do. + +Version beta 1.4l - November 1998, by Rene' Seindal + +* GNU m4 now has an escape syntax category. If a character is marked as + an escape, words are only recognised as macros if preceded by an escape + character. It is a bit like -P, but dynamic: it can be turned on and + off. The GNU m4 web-site on http://www.seindal.dk/rene/gnu/ is + maintained with this feature - the m4 source is available on the site. + +* The module interface is improved, thanks to "Brian J. Fox" + <bfox@datawave.net>, who have contributed some code from Meta-HTML. The + modules now build automatically and installs properly, by default in + /usr/local/libexec/m4. There is a preliminary, untested support for + shl_load(). + +* There is now a __m4_version__ macro that expands to the current version + number. + +Version beta 1.4k - November 1998, by Erick Branderhorst and Rene' Seindal + +* GNU m4 now uses gettext to support internationalization. + +* GNU m4 now uses automake to control Makefile.in generation. This + should make it more consistent with the GNU standards. + +* GNU m4 will use the gmp library for multiple precision integral and + rational arithmetic in `eval' if configured with `--with-gmp'. If + configured without `--with-gmp' or if gmp is not available, and the type + `long long int' is, GNU m4 will use that for `eval' arithmetic. + +* GNU m4 now parses the input according to a syntax table, that can be + modified through the new builtin `changesyntax'. It is a generalisation + of the existing builtins `changecom' and `changequote'. The changes are + completely backwards compatible (except for the existence of + `changesyntax'). + +* Sync lines can be turned on and off with the `syncoutput' builtin. The + builtin `syncoutput' is a GNU extension. + +* New experimental feature: dynamically loadable modules. New builtin + `loadmodules' loads shared libraries, that can define new builtin + macros, ie, new macros can be written in C. Depends on the dlopen() + interface, and is currently only tested on Linux. Enabled at configure + time with `--with-modules'. Documentation is in src/module.c and + module/README. + +* Implement a GNU message catalog for French (Franc,ois Pinard). + +* Filenames found through path searches are now correctly reflected in + error and debug messages and through the `__file__' macro. + +Bugs fixed + +* All 8-bit characters can now be used for quotes. + + +Version 1.4 - October 1994, by Franc,ois Pinard + +(No user visible changes) + + +Version 1.3 - September 1994, by Franc,ois Pinard + +* Diversions are created as needed. Option `-N' is still accepted, but +otherwise ignored. Users should use only negative diversion numbers, +instead of high positive numbers, for diverting to nowhere. + +* Diversions should also work faster. No temporary files will be needed +at all if all diversions taken altogether do not use more than 512K. + +* Frozen state files may be produced with the `--freeze-state' (-F) +option and later brought back through the `--reload-state' (-R) option. + + +Version 1.2 - July 1994, by Franc,ois Pinard + +* In patsubst(STRING, REGEXP, REPLACEMENT), \& in REPLACEMENT has been +changed to represent this part of STRING matched by the whole REGEXP, +instead of the whole STRING as before. \0 does the same, but emits a +diagnostic saying it will disappear in some subsequent release. + +* eval(EXPR) emits a diagnostic if EXPR has suffixed crumb. The same for +other numeric conversions in incr(), decr(), divert(), etc. + +* `--fatal-warnings' (-E) stops execution at first warning. + +* `--nesting-limit=LEVEL' (-L LEVEL) sets a limit to macro nesting. +It is initially fixed at 250. + +* `--word-regexp=REGEXP' (-W REGEXP) modifies macro name syntax, like +does the new `changeword(REGEXP)' macro. This feature is experimental, +tell me your opinions about it. You do need --enable-changeword at +configure time to get these things. Do *not* depend on them yet. + +* Trace output format is scannable by GNU Emacs' next-error function. + +* Stack overflow is detected and diagnosed on some capable systems. + +* Various bugs have been corrected, m4 should be more portable. See the +ChangeLog for details. + + +Version 1.1 - November 1993, by Franc,ois Pinard + +Changes which might affect existing GNU m4 scripts: + +* Option `-V' has been removed, use `--version' instead. `--version' +writes on standard output instead of standard error, and inhibits any +script execution. + +* `--no-gnu-extensions' has been renamed `--traditional'. + +* In `eval', `^' used to indicate exponentiation, use `**' instead. + +* The automatic undiversion which takes place at end of all input is +forced into the main output stream. + +Changes which are unlikely to affect existing scripts: + +* `--help' prints an usage summary on standard output. Script execution +is then inhibited. + +* `--prefix-builtins' (-P) prefixes all builtin macros by `m4_'. + +* Most builtin macros for which arguments are mandatory, called without +any arguments, are no more recognized as builtin macros: they are +consequently copied verbatim to the output stream. + +* `define' and `pushdef' are usable with only one argument, they give +this argument an empty definition. + +* `eval' new operators for binary representation handling: `^' for +exclusive-or, `~' for the bitwise negation, `<<' and `>>' for shifts. + +* `eval' recognizes the notation 0bDIGITS for binary numbers and the +notation 0rRADIX:DIGITS for numbers in any radix from 1 to 36. + +Version 1.0.3 - December 1992, by Franc,ois Pinard + +Changes for the user: + +* `dnl' outputs a diagnostic if immediately followed by `('. Usually, +`dnl' is followed by newline or whitespace. + +* `ifelse' accepts without complaining the common idiom of having only +one argument. This is useful for introducing long comments. + +* `eval' always expresses values as signed, whatever the radix. + +* M4OPTS environment variable is no longer obeyed. + +* `--no-warnings' option is renamed `--silent'. + +* Debug lines use a new format more compatible with GNU standards. + +* Various bugs have been corrected. See the ChangeLog for details. + +Changes for the installer: + +* GNU m4 now uses an Autoconf-generated configure script, and should be +more easily portable in many ways. (Cray is not supported yet). + +* `make check' has been made more portable, expect no errors. + +Changes for the programmer: + +* Sources have been fully reindented to comply with GNU standards, and +cleaned up in many ways. + +* Sources have been protoized. Non-ANSI compilers are automatically +detected, then sources are unprotoized on the fly before compilation. + +* GNU m4 uses newer versions of obstack, regex, getopt, etc. + +Version 1.0 - October 1991, by Rene' Seindal + +* Uses GNU configure, taken from the gdb distribution. + +* Uses GNU getopt(), with long option names. + +* The -Q/+quiet option is added, which suppresses warnings about missing +or superflous arguments to built-in macros. + +* Added default options via the M4OPTS environment variable. + +* Several minor bugs have been fixed. + +Version 0.99 - July 1991, by Rene' Seindal + +* The builtins `incr' and `decr' are now implemented without use of +`eval'. + +* The builtin `indir' is added, to allow for indirect macro calls +(allows use of "illegal" macro names). + +* The debugging and tracing facilities has been enhanced considerably. +See the manual for details. + +* The -tMACRO option is added, marks MACRO for tracing as soon as it +is defined. + +* Builtins are traced after renaming iff they were before. + +* Named files can now be undiverted. + +* The -Nnum option can be used to increase the number of divertions +available. + +* Calling changecom without arguments now disables all comment handling. + +* A bug in `dnl' is fixed. + +* A bug in the multi-character quoting code is fixed. + +* Several typos in the manual has been corrected. More probably persist. + +Version 0.75 - November 1990, by Rene' Seindal + +* Implemented search path for include files (-I option and M4PATH +environment variable). + +* Implemented builtin `format' for printf-like formatting. + +* Implemented builtin `regexp' for searching for regular expressions. + +* Implemented builtin `patsubst' for substitution with regular +expressions. + +* Implemented builtin `esyscmd', which expands to a shell commands output. + +* Implemented `__file__' and `__line__' for use in error messages. + +* Implemented character ranges in `translit'. + +* Implemented control over debugging output. + +* Implemented multi-character quotes. + +* Implemented multi-character comment delimiters. + +* Changed predefined macro `gnu' to `__gnu__'. + +* Changed predefined macro `unix' to `__unix__', when the -G option is +not used. With -G, `unix' is still defined. + +* Added program name to error messages. + +* Fixed two missing null bytes bugs. + +Version 0.50 - January 1990, by Rene' Seindal + +* Initial beta release. + +Local Variables: +fill-column: 75 +End: + +</PRE> + + +</TD> + +</TR> + +</TABLE> + +</BODY> + + +</HTML> + + diff --git a/examples/WWW/readme.htm b/examples/WWW/readme.htm new file mode 100644 index 00000000..09d483e7 --- /dev/null +++ b/examples/WWW/readme.htm @@ -0,0 +1,329 @@ +<DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 TRANSITIONAL//EN"> +<HTML> +<HEAD> +<TITLE>GNU m4 - README</TITLE> +<META NAME="AUTHOR" CONTENT="René Seindal"> +<META NAME="GENERATOR" CONTENT="GNU m4 1.4l"> +</HEAD> + <BODY text="#000000" bgcolor="#FFCC99" link="#0000EF" alink="#FF0000" vlink="#51188E"> +<TABLE cellpadding=5 width="100%"> +<TR align=left valign=bottom> +<TD align=center valign=center colspan="3" width="100%" bgcolor="#FF9900"> + +<H1>GNU m4</H1> + +<H2>README</H2> + +</TD> + +</TR> + <TR > +<TD align=left valign=top width="15%" bgcolor="#FF9900"> + + + +<TABLE align=left valign=top columns=1> +<TR> +<TD bgcolor="#CC6600"> +<P> +<B>Generel info</B> +</P> + +</TD> + +</TR> + <TR> +<TD> + +<FONT size=-1><P> +<B><A HREF="whatis.htm">What is m4</A></B> +</P> +</FONT> + +</TD> + +</TR> + <TR> +<TD> + +<FONT size=-1><P> +<B><A HREF="features.htm">Features</A></B> +</P> +</FONT> + +</TD> + +</TR> + <TR> +<TD> + +<FONT size=-1><P> +<B><A HREF="uses.htm">Uses of m4</A></B> +</P> +</FONT> + +</TD> + +</TR> + <TR> +<TD bgcolor="#CC6600"> +<P> +<B>Documentation</B> +</P> + +</TD> + +</TR> + <TR> +<TD> + +<FONT size=-1><P> +<B><A HREF="man/m4_toc.html">Manual</A></B> +</P> +</FONT> + +</TD> + +</TR> + <TR> +<TD bgcolor="#CC6600"> +<P> +<B>Source files</B> +</P> + +</TD> + +</TR> + <TR> +<TD> + +<FONT size=-1><P> +<B><A HREF="readme.htm">README</A></B> +</P> +</FONT> + +</TD> + +</TR> + <TR> +<TD> + +<FONT size=-1><P> +<B><A HREF="todo.htm">TODO</A></B> +</P> +</FONT> + +</TD> + +</TR> + <TR> +<TD> + +<FONT size=-1><P> +<B><A HREF="news.htm">NEWS</A></B> +</P> +</FONT> + +</TD> + +</TR> + <TR> +<TD> + +<FONT size=-1><P> +<B><A HREF="changelog.htm">ChangeLog</A></B> +</P> +</FONT> + +</TD> + +</TR> + <TR> +<TD> + +<FONT size=-1><P> +<B><A HREF="thanks.htm">Contributors</A></B> +</P> +</FONT> + +</TD> + +</TR> + <TR> +<TD> + +<FONT size=-1><P> +<B><A HREF="m4/">Browse it</A></B> +</P> +</FONT> + +</TD> + +</TR> + <TR> +<TD bgcolor="#CC6600"> +<P> +<B>The Future</B> +</P> + +</TD> + +</TR> + <TR> +<TD> + +<FONT size=-1><P> +<B><A HREF="modules.htm">Modules</A></B> +</P> +</FONT> + +</TD> + +</TR> + <TR> +<TD> + +<FONT size=-1><P> +<B><A HREF="visions.htm">Visions</A></B> +</P> +</FONT> + +</TD> + +</TR> + <TR> +<TD bgcolor="#CC6600"> +<P> +<B>Development</B> +</P> + +</TD> + +</TR> + <TR> +<TD> + +<FONT size=-1><P> +<B><A HREF="lists.htm">Mailing-lists</A></B> +</P> +</FONT> + +</TD> + +</TR> + <TR> +<TD> + +<FONT size=-1><P> +<B><A HREF="feedback.htm">Feedback</A></B> +</P> +</FONT> + +</TD> + +</TR> + <TR> +<TD> + +<FONT size=-1><P> +<B><A HREF="download.htm">Download</A></B> +</P> +</FONT> + +</TD> + +</TR> + <TR> +<TD bgcolor="#CC6600"> +<P> +<B>Examples</B> +</P> + +</TD> + +</TR> + <TR> +<TD> + +<FONT size=-1><P> +<B><A HREF="thissite.htm">This site</A></B> +</P> +</FONT> + +</TD> + +</TR> + +</TABLE> + + + + + +</TD> + <TD align=left valign=top width="90%"> + + +<PRE>GNU `m4' is an implementation of the traditional Unix macro +processor. It is mostly SVR4 compatible, although it has some +extensions (for example, handling more than 9 positional parameters +to macros). `m4' also has built-in functions for including files, +running shell commands, doing arithmetic, etc. Autoconf needs GNU +`m4' for generating `configure' scripts, but not for running them. + +GNU `m4' has been originally written by René Seindal, from Denmark. + +If GNU `m4' is meant to serve GNU `autoconf', beware that `m4' +should be fully installed *prior to* configuring `autoconf' itself. + +In the subdirectories `tests' and `examples' you will find various m4 +files, ranging from trivial test files to rather advanced macros. If +you intend to use m4 seriously, you might find useful material down +there. + +See file `COPYING' for copying conditions. +See file `INSTALL' for compilation and installation instructions. +See file `ABOUT-NLS' for how to customize this program to your language. +See file `NEWS' for a list of major changes in the current release. +See file `THANKS' for a list of contributors. + +By using `./configure --with-gmp, you get multiple precision integral +and rational arithmetic in eval. The implementation depends on the GNU +gmp v2 library. + +By using `./configure --with-modules, you get the possibility of using +dynamic modules. The implementation depends on dlopen(3) interface. +See file `modules/README' for a more detailed description. + +By using `./configure --enable-changeword', you get an experimental +feature which allows for changing the syntax of what is a "word" in +`m4'. THIS WILL PROBABLY GO AWAY, so don't count on it. Some of the +same things can be achieved with `changesyntax' at a much better speed. + +By using `./configure --with-dmalloc', GNU m4 is linked with Gray +Watson's dmalloc package. It is a debugging option for finding memory +management problems. Gray Watson's dmalloc package is available at +ftp://ftp.letters.com/src/dmalloc/dmalloc.tar.gz. + +Send bug reports, comments or ideas to `bug-m4@gnu.org'. A bug report +is an adequate description of the problem: your input, what you +expected, what you got, and why this is wrong. Diffs are welcome, but +they only describe a solution, from which the problem might be uneasy to +infer. Don't forget all relevant information about your operating +system, compiler, libraries, ... + +</PRE> + + +</TD> + +</TR> + +</TABLE> + +</BODY> + + +</HTML> + + diff --git a/examples/WWW/thanks.htm b/examples/WWW/thanks.htm new file mode 100644 index 00000000..78470a16 --- /dev/null +++ b/examples/WWW/thanks.htm @@ -0,0 +1,377 @@ +<DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 TRANSITIONAL//EN"> +<HTML> +<HEAD> +<TITLE>GNU m4 - People who have contributed to m4</TITLE> +<META NAME="AUTHOR" CONTENT="René Seindal"> +<META NAME="GENERATOR" CONTENT="GNU m4 1.4l"> +</HEAD> + <BODY text="#000000" bgcolor="#FFCC99" link="#0000EF" alink="#FF0000" vlink="#51188E"> +<TABLE cellpadding=5 width="100%"> +<TR align=left valign=bottom> +<TD align=center valign=center colspan="3" width="100%" bgcolor="#FF9900"> + +<H1>GNU m4</H1> + +<H2>People who have contributed to m4</H2> + +</TD> + +</TR> + <TR > +<TD align=left valign=top width="15%" bgcolor="#FF9900"> + + + +<TABLE align=left valign=top columns=1> +<TR> +<TD bgcolor="#CC6600"> +<P> +<B>Generel info</B> +</P> + +</TD> + +</TR> + <TR> +<TD> + +<FONT size=-1><P> +<B><A HREF="whatis.htm">What is m4</A></B> +</P> +</FONT> + +</TD> + +</TR> + <TR> +<TD> + +<FONT size=-1><P> +<B><A HREF="features.htm">Features</A></B> +</P> +</FONT> + +</TD> + +</TR> + <TR> +<TD> + +<FONT size=-1><P> +<B><A HREF="uses.htm">Uses of m4</A></B> +</P> +</FONT> + +</TD> + +</TR> + <TR> +<TD bgcolor="#CC6600"> +<P> +<B>Documentation</B> +</P> + +</TD> + +</TR> + <TR> +<TD> + +<FONT size=-1><P> +<B><A HREF="man/m4_toc.html">Manual</A></B> +</P> +</FONT> + +</TD> + +</TR> + <TR> +<TD bgcolor="#CC6600"> +<P> +<B>Source files</B> +</P> + +</TD> + +</TR> + <TR> +<TD> + +<FONT size=-1><P> +<B><A HREF="readme.htm">README</A></B> +</P> +</FONT> + +</TD> + +</TR> + <TR> +<TD> + +<FONT size=-1><P> +<B><A HREF="todo.htm">TODO</A></B> +</P> +</FONT> + +</TD> + +</TR> + <TR> +<TD> + +<FONT size=-1><P> +<B><A HREF="news.htm">NEWS</A></B> +</P> +</FONT> + +</TD> + +</TR> + <TR> +<TD> + +<FONT size=-1><P> +<B><A HREF="changelog.htm">ChangeLog</A></B> +</P> +</FONT> + +</TD> + +</TR> + <TR> +<TD> + +<FONT size=-1><P> +<B><A HREF="thanks.htm">Contributors</A></B> +</P> +</FONT> + +</TD> + +</TR> + <TR> +<TD> + +<FONT size=-1><P> +<B><A HREF="m4/">Browse it</A></B> +</P> +</FONT> + +</TD> + +</TR> + <TR> +<TD bgcolor="#CC6600"> +<P> +<B>The Future</B> +</P> + +</TD> + +</TR> + <TR> +<TD> + +<FONT size=-1><P> +<B><A HREF="modules.htm">Modules</A></B> +</P> +</FONT> + +</TD> + +</TR> + <TR> +<TD> + +<FONT size=-1><P> +<B><A HREF="visions.htm">Visions</A></B> +</P> +</FONT> + +</TD> + +</TR> + <TR> +<TD bgcolor="#CC6600"> +<P> +<B>Development</B> +</P> + +</TD> + +</TR> + <TR> +<TD> + +<FONT size=-1><P> +<B><A HREF="lists.htm">Mailing-lists</A></B> +</P> +</FONT> + +</TD> + +</TR> + <TR> +<TD> + +<FONT size=-1><P> +<B><A HREF="feedback.htm">Feedback</A></B> +</P> +</FONT> + +</TD> + +</TR> + <TR> +<TD> + +<FONT size=-1><P> +<B><A HREF="download.htm">Download</A></B> +</P> +</FONT> + +</TD> + +</TR> + <TR> +<TD bgcolor="#CC6600"> +<P> +<B>Examples</B> +</P> + +</TD> + +</TR> + <TR> +<TD> + +<FONT size=-1><P> +<B><A HREF="thissite.htm">This site</A></B> +</P> +</FONT> + +</TD> + +</TR> + +</TABLE> + + + + + +</TD> + <TD align=left valign=top width="90%"> + + +<PRE>GNU m4 THANKS file + +GNU m4 has originally been written by Rene' Seindal. Many people +further contributed to GNU m4 by reporting problems, suggesting +various improvements or submitting actual code. Here is a list of +these people. Help me keep it complete and exempt of errors. + + + +Akiko Matsushita matusita@sra.co.jp +Alan Magnuson awm@osc.edu +Alexander Lehmann alex@hal.rhein-main.de +Amos Shapira amoss@cs.huji.ac.il +Andreas Gustafsson gson@niksula.hut.fi +Andreas Schwab schwab@ls5.informatik.uni-dortmund.de +Andrew Athan athan@morgan.com +Andrew Bettison andrewb@zip.com.au +Assar Westerlund assar@nada.kth.se +Ben A. Mesander ben@piglet.cr.usgs.gov +Ben Elliston bje@cygnus.com +Bengt Mertensson bengt@mathematik.uni-bremen.de +Bernhard Daeubler daeb@physik.uni-ulm.de +Bill Bumgarner bbum@thoughtport.com +Bjorn R. Bjornsson brb@falcon.is +Brendan Kehoe brendan@cygnus.com +Brian J. Fox bfox@datawave.net +Brian D. Carlstrom bdc@clark.lcs.mit.edu +David J. MacKenzie djm@uunet.uu.net +Erez Zadok ezk@cs.columbia.edu +Eric Allman eric@cs.berkeley.edu +Eric Backus ericb@lsid.hp.com +Eric Fischer enf1@ellis.uchicago.edu +Erick Branderhorst Erick.Branderhorst@asml.nl +François Pinard pinard@iro.umontreal.ca +Gary Affonso Gary_Affonso@iqinc.com +Geoff Russell grussell@guest.adelaide.edu.au +Greg McGary gkm@cstone.net +Hal Peterson hrp@pecan.cray.com +Hoang Uong hoang@ornews.intel.com +Hongjiu Lu hjl@nynexst.com +Ian Taylor ian@cygnus.com +Jan Djarv Jan.Djarv@sa.erisoft.se +Jason Merrill jason@jarthur.claremont.edu +Jim Avera jima@netcom.com +Jim Kingdom kingdon@cygnus.com +Jim Meyering meyering@na-net.ornl.gov +Joel Sherrill jsherril@uahcs2.cs.uah.edu +John David Anglin dave@hiauly1.hia.nrc.ca +John Gerard Malecki johnm@artisan.com +Joseph E. Sacco jsacco@ssl.com +Joshua R. Poulson jrp@plaza.ds.adp.com +Karl Berry karl@cs.umb.edu +Karl Vogel vogelke@c-17igp.wpafb.af.mil +Kaveh R. Ghazi ghazi@noc.rutgers.edu +Keith Bostic bostic@abyssinian.sleepycat.com +Kristine Lund lund@lpnaxp.in2p3.fr +Krste Asanovic krste@icsi.berkeley.edu +Marcus Daniels marcus@ee.pdx.edu +Marion Hakanson hakanson@cse.ogi.edu +Mark Seiden mis@seiden.com +Massimo Dal Zotto dz@cs.unitn.it +Matthias Rabe rabe@mathematik.uni-bielefeld.de +Michael Fetterman mafetter@ichips.intel.com +Michael L. Welcome welcome@bigbird.llnl.gov +Mike Andrews kramer@fragile.termfrost.org +Mike Howard mike@clove.com +Mike Lijewski lijewski@theory.tc.cornell.edu +Nick S. Kanakakorn skanan@otl.scu.edu +Nicolas Pioch pioch@inf.enst.fr +Noah Friedman friedman@gnu.org +Pete Chown pete.chown@dale.dircon.co.uk +Pierre Gaumond gaumondp@ere.umontreal.ca +Pierre Mathieu mathieu@geod.emr.ca +Rafael Corvalan rafael@club-internet.fr +René Seindal rene@seindal.dk +Richard Ling richard@research.canon.oz.au +Richard Stallman rms@gnu.org +Robert Bernstein rocky@panix.com +Roland H. Pesch roland@wrs.com +Roland McGrath roland@gnu.org +Scott Bartram deneb!scottb +Simon Leinen simon@lia.di.epfl.ch +Skip Montanaro skip@automatrix.com +Stephen Perkins perkins@cps.msu.edu +Steve Williamson willy@uinpla.npl.uiuc.edu +Terry Jones terry@cliffs.ucsd.edu +Thorsten Ohl ohl@physics.harvard.edu +Tom McConnell tmcconne@sedona.intel.com +Tom Quinn trq@dionysos.thphys.ox.ac.uk +Tom Tromey tromey@cns.caltech.edu +Ulrich Drepper drepper@gnu.org +Vern Paxson vern@ee.lbl.gov +Vic Abell abe@cc.purdue.edu +Vivek P. Singhal singhal@cs.utexas.edu +Walter Wong wcw+@cmu.edu + +</PRE> + + +</TD> + +</TR> + +</TABLE> + +</BODY> + + +</HTML> + + diff --git a/examples/WWW/thissite.htm b/examples/WWW/thissite.htm new file mode 100644 index 00000000..03e2a01a --- /dev/null +++ b/examples/WWW/thissite.htm @@ -0,0 +1,327 @@ +<DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 TRANSITIONAL//EN"> +<HTML> +<HEAD> +<TITLE>GNU m4 - This site</TITLE> +<META NAME="AUTHOR" CONTENT="René Seindal"> +<META NAME="GENERATOR" CONTENT="GNU m4 1.4l"> +</HEAD> + <BODY text="#000000" bgcolor="#FFCC99" link="#0000EF" alink="#FF0000" vlink="#51188E"> +<TABLE cellpadding=5 width="100%"> +<TR align=left valign=bottom> +<TD align=center valign=center colspan="3" width="100%" bgcolor="#FF9900"> + +<H1>GNU m4</H1> + +<H2>This site</H2> + +</TD> + +</TR> + <TR > +<TD align=left valign=top width="15%" bgcolor="#FF9900"> + + + +<TABLE align=left valign=top columns=1> +<TR> +<TD bgcolor="#CC6600"> +<P> +<B>Generel info</B> +</P> + +</TD> + +</TR> + <TR> +<TD> + +<FONT size=-1><P> +<B><A HREF="whatis.htm">What is m4</A></B> +</P> +</FONT> + +</TD> + +</TR> + <TR> +<TD> + +<FONT size=-1><P> +<B><A HREF="features.htm">Features</A></B> +</P> +</FONT> + +</TD> + +</TR> + <TR> +<TD> + +<FONT size=-1><P> +<B><A HREF="uses.htm">Uses of m4</A></B> +</P> +</FONT> + +</TD> + +</TR> + <TR> +<TD bgcolor="#CC6600"> +<P> +<B>Documentation</B> +</P> + +</TD> + +</TR> + <TR> +<TD> + +<FONT size=-1><P> +<B><A HREF="man/m4_toc.html">Manual</A></B> +</P> +</FONT> + +</TD> + +</TR> + <TR> +<TD bgcolor="#CC6600"> +<P> +<B>Source files</B> +</P> + +</TD> + +</TR> + <TR> +<TD> + +<FONT size=-1><P> +<B><A HREF="readme.htm">README</A></B> +</P> +</FONT> + +</TD> + +</TR> + <TR> +<TD> + +<FONT size=-1><P> +<B><A HREF="todo.htm">TODO</A></B> +</P> +</FONT> + +</TD> + +</TR> + <TR> +<TD> + +<FONT size=-1><P> +<B><A HREF="news.htm">NEWS</A></B> +</P> +</FONT> + +</TD> + +</TR> + <TR> +<TD> + +<FONT size=-1><P> +<B><A HREF="changelog.htm">ChangeLog</A></B> +</P> +</FONT> + +</TD> + +</TR> + <TR> +<TD> + +<FONT size=-1><P> +<B><A HREF="thanks.htm">Contributors</A></B> +</P> +</FONT> + +</TD> + +</TR> + <TR> +<TD> + +<FONT size=-1><P> +<B><A HREF="m4/">Browse it</A></B> +</P> +</FONT> + +</TD> + +</TR> + <TR> +<TD bgcolor="#CC6600"> +<P> +<B>The Future</B> +</P> + +</TD> + +</TR> + <TR> +<TD> + +<FONT size=-1><P> +<B><A HREF="modules.htm">Modules</A></B> +</P> +</FONT> + +</TD> + +</TR> + <TR> +<TD> + +<FONT size=-1><P> +<B><A HREF="visions.htm">Visions</A></B> +</P> +</FONT> + +</TD> + +</TR> + <TR> +<TD bgcolor="#CC6600"> +<P> +<B>Development</B> +</P> + +</TD> + +</TR> + <TR> +<TD> + +<FONT size=-1><P> +<B><A HREF="lists.htm">Mailing-lists</A></B> +</P> +</FONT> + +</TD> + +</TR> + <TR> +<TD> + +<FONT size=-1><P> +<B><A HREF="feedback.htm">Feedback</A></B> +</P> +</FONT> + +</TD> + +</TR> + <TR> +<TD> + +<FONT size=-1><P> +<B><A HREF="download.htm">Download</A></B> +</P> +</FONT> + +</TD> + +</TR> + <TR> +<TD bgcolor="#CC6600"> +<P> +<B>Examples</B> +</P> + +</TD> + +</TR> + <TR> +<TD> + +<FONT size=-1><P> +<B><A HREF="thissite.htm">This site</A></B> +</P> +</FONT> + +</TD> + +</TR> + +</TABLE> + + + + + +</TD> + <TD align=left valign=top width="90%"> + + +<P> +This GNU m4 site is maintained by René Seindal (<A HREF="mailto:rene@seindal">rene@seindal</A>). +</P> + + +<P> +All files are generated using GNU m4 1.4l. You can view +the <A HREF="m4lib/">source files</A>. They are very simple. They use some +features from Gnu m4 1.4l +</P> + + +<P> +The basic M4 definitions of quotes comments escapes are in +<A HREF="m4lib/setup.m4">m4lib/setup.m4</A>. This is first included by all files to +configure the enviroment correctly for the other files. To avoid have +macros called by accident an escape character is defined with +changesyntax. <I>This is a new feature in m4 1.4l</I>. +</P> + + +<P> +Some fairly general macros to generate various HTML construct are +found in <A HREF="m4lib/html.m4">m4lib/html.m4</A>. There are macros for simple tags containers with and with attributes links and a few utility macros. +</P> + + +<P> +The visual aspects of the pages are in <A HREF="m4lib/layout.m4">m4lib/layout.m4</A>. +The macros herein generate the complete HTML structure for the pages. +There are macros for making the header and the body of the document. +</P> + + +<P> +The page body is passed to the layout definitions as an argument. As +the text can be large it is first diverted and the text passed to the +layout macros is simply a call to undivert. That way a very large text +can be passed around with very little cost. This page is made with +<A HREF="m4lib/thissite.m4">these definitions</A>. +</P> + + +<P> +There is a single file for each HTML file. +</P> + + + +</TD> + +</TR> + +</TABLE> + +</BODY> + + +</HTML> + + diff --git a/examples/WWW/todo.htm b/examples/WWW/todo.htm new file mode 100644 index 00000000..9c5100f1 --- /dev/null +++ b/examples/WWW/todo.htm @@ -0,0 +1,388 @@ +<DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 TRANSITIONAL//EN"> +<HTML> +<HEAD> +<TITLE>GNU m4 - TODO - Things still to be done</TITLE> +<META NAME="AUTHOR" CONTENT="René Seindal"> +<META NAME="GENERATOR" CONTENT="GNU m4 1.4l"> +</HEAD> + <BODY text="#000000" bgcolor="#FFCC99" link="#0000EF" alink="#FF0000" vlink="#51188E"> +<TABLE cellpadding=5 width="100%"> +<TR align=left valign=bottom> +<TD align=center valign=center colspan="3" width="100%" bgcolor="#FF9900"> + +<H1>GNU m4</H1> + +<H2>TODO - Things still to be done</H2> + +</TD> + +</TR> + <TR > +<TD align=left valign=top width="15%" bgcolor="#FF9900"> + + + +<TABLE align=left valign=top columns=1> +<TR> +<TD bgcolor="#CC6600"> +<P> +<B>Generel info</B> +</P> + +</TD> + +</TR> + <TR> +<TD> + +<FONT size=-1><P> +<B><A HREF="whatis.htm">What is m4</A></B> +</P> +</FONT> + +</TD> + +</TR> + <TR> +<TD> + +<FONT size=-1><P> +<B><A HREF="features.htm">Features</A></B> +</P> +</FONT> + +</TD> + +</TR> + <TR> +<TD> + +<FONT size=-1><P> +<B><A HREF="uses.htm">Uses of m4</A></B> +</P> +</FONT> + +</TD> + +</TR> + <TR> +<TD bgcolor="#CC6600"> +<P> +<B>Documentation</B> +</P> + +</TD> + +</TR> + <TR> +<TD> + +<FONT size=-1><P> +<B><A HREF="man/m4_toc.html">Manual</A></B> +</P> +</FONT> + +</TD> + +</TR> + <TR> +<TD bgcolor="#CC6600"> +<P> +<B>Source files</B> +</P> + +</TD> + +</TR> + <TR> +<TD> + +<FONT size=-1><P> +<B><A HREF="readme.htm">README</A></B> +</P> +</FONT> + +</TD> + +</TR> + <TR> +<TD> + +<FONT size=-1><P> +<B><A HREF="todo.htm">TODO</A></B> +</P> +</FONT> + +</TD> + +</TR> + <TR> +<TD> + +<FONT size=-1><P> +<B><A HREF="news.htm">NEWS</A></B> +</P> +</FONT> + +</TD> + +</TR> + <TR> +<TD> + +<FONT size=-1><P> +<B><A HREF="changelog.htm">ChangeLog</A></B> +</P> +</FONT> + +</TD> + +</TR> + <TR> +<TD> + +<FONT size=-1><P> +<B><A HREF="thanks.htm">Contributors</A></B> +</P> +</FONT> + +</TD> + +</TR> + <TR> +<TD> + +<FONT size=-1><P> +<B><A HREF="m4/">Browse it</A></B> +</P> +</FONT> + +</TD> + +</TR> + <TR> +<TD bgcolor="#CC6600"> +<P> +<B>The Future</B> +</P> + +</TD> + +</TR> + <TR> +<TD> + +<FONT size=-1><P> +<B><A HREF="modules.htm">Modules</A></B> +</P> +</FONT> + +</TD> + +</TR> + <TR> +<TD> + +<FONT size=-1><P> +<B><A HREF="visions.htm">Visions</A></B> +</P> +</FONT> + +</TD> + +</TR> + <TR> +<TD bgcolor="#CC6600"> +<P> +<B>Development</B> +</P> + +</TD> + +</TR> + <TR> +<TD> + +<FONT size=-1><P> +<B><A HREF="lists.htm">Mailing-lists</A></B> +</P> +</FONT> + +</TD> + +</TR> + <TR> +<TD> + +<FONT size=-1><P> +<B><A HREF="feedback.htm">Feedback</A></B> +</P> +</FONT> + +</TD> + +</TR> + <TR> +<TD> + +<FONT size=-1><P> +<B><A HREF="download.htm">Download</A></B> +</P> +</FONT> + +</TD> + +</TR> + <TR> +<TD bgcolor="#CC6600"> +<P> +<B>Examples</B> +</P> + +</TD> + +</TR> + <TR> +<TD> + +<FONT size=-1><P> +<B><A HREF="thissite.htm">This site</A></B> +</P> +</FONT> + +</TD> + +</TR> + +</TABLE> + + + + + +</TD> + <TD align=left valign=top width="90%"> + + +<PRE>* TODO file for GNU m4 -*- indented-text -*- + +Tell the maintainers at <bug-m4@gnu.org> if you feel like volunteering +for any of these ideas or if you have others to add. + + +* Features or problems + + + GMP eval() should be enables if the library is present, maybe by + providing two different versions of eval(). That way users can + choose whether to use gmp on an individual basis. + + + There should be a way ot have m4 discard comments instead of + outputting them. + + + Implement discarding comment delimiters with the syntax table. + + + The module system is still rudimentary (see below) + + + Changes in the syntax_table are not saved to frozen files. + + + Information about loaded modules is not saved to frozen files. + + + m4wrap.1.test fail on Solaris 2.6 using egcs 1.1a compiler (Erick B). + + + The $ used in user defined macros cannot be changed through + changesyntax. It should be handled as a modifier. + + + Make show include dependencies like gcc so targets are updated + when their (included) input files are updated (Erick B). + + + The test case `other-tests/stackovf.test' does not work. + + + Sort out all the weird forms of interaction between changesyntax, + changecom and changequote. What happens if you install a quote with + changequote and removes it with changesyntax and vice versa. + + + Add support for wide character sets. + + +* Optimization and clean up + + + Have NULs go really undisturbed through GNU m4 + GNU m4 is lousy regarding NULs in streams (this would require + maintaining the string lengths, and avoiding strlen, strcpy, + etc.). + + +* Module specific issues + + + Support for other DL interfaces besides dlopen, such as dld and + hpux is still missing. + + + Modules should be loadable from the command line with something like + `-M module.so' o `--load-module=module.so'. M4 should abort if it + fails. + + + Some way of linking a module statically is needed, for systems + without support for dynamic loading. + + + +Below is the old 1.4 TODO list, several years old. Only a few points +have been kept. Some things are fixed, many others just seem +dated. Write me if I have been to harsh. (René Seindal) + +------------------------------------------------------------------------ +Tell <pinard@iro.umontreal.ca> if you feel like volunteering for any +of these ideas, listed more or less in decreasing order of priority. +Some TODO items are implicit from received email. See file BACKLOG. + +.* Features or problems +. + Update documentation from accumulated mail about it +. + Changeword without arguments should restore default behavior +. + Study synclines at the very beginning of each diverted sequence +. + Make eval work on bignums - the 32 bits limit is artificial + From Krste Asanovic <krste@icsi.berkeley.edu>, 1993-03-20 +. + Make show include dependencies like gcc so targets are updated + when their (included) input files are updated (Erick B). +. + Ask FSF to create m4-bugs@gnu.org for bug reports (Erick B). +. + m4wrap.1.test fail on Solaris 2.6 using egcs 1.1a compiler (Erick B). + +.* Optimization and clean up +. + Check for memory leaks and uninitialized reads + From Vern Paxson <vern@horse.ee.lbl.gov> on 1993-12-06 +. + Simplify format/ecvt code, together with HAVE_EFGCVT +. + Finalize the stdarg vs varargs thing +. + Profile GNU m4 and speed it up + From David J. MacKenzie <djm@eng.umd.edu>, 1993-01-20 + + GNU m4 should be sped up by a factor of three for competing + with other versions (I think that the lexer is not agressive + enough and too often return single characters; obstacks might + be a little abused, too). +. + Have NULs go really undisturbed through GNU m4 + See `dumpdef' and debugging section, which abuses %s + From Thorsten Ohl <ohl@chico.harvard.edu>, 1992-12-21 + + path.c (add_include_directory): Why the '\0' terminator? + + GNU m4 is lousy regarding NULs in streams (this would require + maintaining the string lengths, and avoiding strlen, strcpy, + etc.). +. + Clean up the obstack.[ch] code +. + Use rx.[ch] instead of regex.[ch] + From Hal Peterson <hrp@ironwood.cray.com>, 1994-04-22 + +</PRE> + + +</TD> + +</TR> + +</TABLE> + +</BODY> + + +</HTML> + + diff --git a/examples/WWW/uses.htm b/examples/WWW/uses.htm new file mode 100644 index 00000000..9988dacf --- /dev/null +++ b/examples/WWW/uses.htm @@ -0,0 +1,322 @@ +<DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 TRANSITIONAL//EN"> +<HTML> +<HEAD> +<TITLE>GNU m4 - Current uses of m4</TITLE> +<META NAME="AUTHOR" CONTENT="René Seindal"> +<META NAME="GENERATOR" CONTENT="GNU m4 1.4l"> +</HEAD> + <BODY text="#000000" bgcolor="#FFCC99" link="#0000EF" alink="#FF0000" vlink="#51188E"> +<TABLE cellpadding=5 width="100%"> +<TR align=left valign=bottom> +<TD align=center valign=center colspan="3" width="100%" bgcolor="#FF9900"> + +<H1>GNU m4</H1> + +<H2>Current uses of m4</H2> + +</TD> + +</TR> + <TR > +<TD align=left valign=top width="15%" bgcolor="#FF9900"> + + + +<TABLE align=left valign=top columns=1> +<TR> +<TD bgcolor="#CC6600"> +<P> +<B>Generel info</B> +</P> + +</TD> + +</TR> + <TR> +<TD> + +<FONT size=-1><P> +<B><A HREF="whatis.htm">What is m4</A></B> +</P> +</FONT> + +</TD> + +</TR> + <TR> +<TD> + +<FONT size=-1><P> +<B><A HREF="features.htm">Features</A></B> +</P> +</FONT> + +</TD> + +</TR> + <TR> +<TD> + +<FONT size=-1><P> +<B><A HREF="uses.htm">Uses of m4</A></B> +</P> +</FONT> + +</TD> + +</TR> + <TR> +<TD bgcolor="#CC6600"> +<P> +<B>Documentation</B> +</P> + +</TD> + +</TR> + <TR> +<TD> + +<FONT size=-1><P> +<B><A HREF="man/m4_toc.html">Manual</A></B> +</P> +</FONT> + +</TD> + +</TR> + <TR> +<TD bgcolor="#CC6600"> +<P> +<B>Source files</B> +</P> + +</TD> + +</TR> + <TR> +<TD> + +<FONT size=-1><P> +<B><A HREF="readme.htm">README</A></B> +</P> +</FONT> + +</TD> + +</TR> + <TR> +<TD> + +<FONT size=-1><P> +<B><A HREF="todo.htm">TODO</A></B> +</P> +</FONT> + +</TD> + +</TR> + <TR> +<TD> + +<FONT size=-1><P> +<B><A HREF="news.htm">NEWS</A></B> +</P> +</FONT> + +</TD> + +</TR> + <TR> +<TD> + +<FONT size=-1><P> +<B><A HREF="changelog.htm">ChangeLog</A></B> +</P> +</FONT> + +</TD> + +</TR> + <TR> +<TD> + +<FONT size=-1><P> +<B><A HREF="thanks.htm">Contributors</A></B> +</P> +</FONT> + +</TD> + +</TR> + <TR> +<TD> + +<FONT size=-1><P> +<B><A HREF="m4/">Browse it</A></B> +</P> +</FONT> + +</TD> + +</TR> + <TR> +<TD bgcolor="#CC6600"> +<P> +<B>The Future</B> +</P> + +</TD> + +</TR> + <TR> +<TD> + +<FONT size=-1><P> +<B><A HREF="modules.htm">Modules</A></B> +</P> +</FONT> + +</TD> + +</TR> + <TR> +<TD> + +<FONT size=-1><P> +<B><A HREF="visions.htm">Visions</A></B> +</P> +</FONT> + +</TD> + +</TR> + <TR> +<TD bgcolor="#CC6600"> +<P> +<B>Development</B> +</P> + +</TD> + +</TR> + <TR> +<TD> + +<FONT size=-1><P> +<B><A HREF="lists.htm">Mailing-lists</A></B> +</P> +</FONT> + +</TD> + +</TR> + <TR> +<TD> + +<FONT size=-1><P> +<B><A HREF="feedback.htm">Feedback</A></B> +</P> +</FONT> + +</TD> + +</TR> + <TR> +<TD> + +<FONT size=-1><P> +<B><A HREF="download.htm">Download</A></B> +</P> +</FONT> + +</TD> + +</TR> + <TR> +<TD bgcolor="#CC6600"> +<P> +<B>Examples</B> +</P> + +</TD> + +</TR> + <TR> +<TD> + +<FONT size=-1><P> +<B><A HREF="thissite.htm">This site</A></B> +</P> +</FONT> + +</TD> + +</TR> + +</TABLE> + + + + + +</TD> + <TD align=left valign=top width="90%"> + + +<P> +The MTA sendmail uses <TT>m4</TT> for generating configuration files. +</P> + + +<P> +<A HREF="http://www.gnu.org/software/autoconf/autoconf.html">GNU +Autoconf</A> uses <TT>m4</TT> to generate "configure" scripts that are used +for configuring <A HREF="http://www.gnu.org/">GNU</A> software for a +particular platform. +</P> + + +<P> +Htm4l is a set of macros for generating HTML. Html4 is written by +Terry Jones (terry@cliffs.ucsd.edu). See +<A HREF="http://cliffs.ucsd.edu/terry/htm4l/htm4l/main.html">http://cliffs.ucsd.edu/terry/htm4l/htm4l/main.html</A> for +details. +</P> + + +<P> +Various programs uses m4 to preprocess configuration files for +example the X11 window manager fvwm. +</P> + + +<P> +There is an <A HREF="http://www.ssc.com/lg/issue22/using_m4.html">article in the Linux Gazette</A> about writing HTML with GNU m4 written by +<A HREF="mailto:bhepple@bit.net.au">Bob Hepple</A> . More recent versions +are kept at <A HREF="http://www.bit.net.au/~bhepple">Bob's home site</A>. +The macros are used to maintain a large commercial site at +<A HREF="http://www.finder.com.au">http://www.finder.com.au</A>. +</P> + + + +<P> +<A HREF="thissite.htm">These files are created with GNU m4 1.4l</A>. +</P> + + + + +</TD> + +</TR> + +</TABLE> + +</BODY> + + +</HTML> + + diff --git a/examples/WWW/visions.htm b/examples/WWW/visions.htm new file mode 100644 index 00000000..eceec6f7 --- /dev/null +++ b/examples/WWW/visions.htm @@ -0,0 +1,309 @@ +<DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 TRANSITIONAL//EN"> +<HTML> +<HEAD> +<TITLE>GNU m4 - The Road Ahead</TITLE> +<META NAME="AUTHOR" CONTENT="René Seindal"> +<META NAME="GENERATOR" CONTENT="GNU m4 1.4l"> +</HEAD> + <BODY text="#000000" bgcolor="#FFCC99" link="#0000EF" alink="#FF0000" vlink="#51188E"> +<TABLE cellpadding=5 width="100%"> +<TR align=left valign=bottom> +<TD align=center valign=center colspan="3" width="100%" bgcolor="#FF9900"> + +<H1>GNU m4</H1> + +<H2>The Road Ahead</H2> + +</TD> + +</TR> + <TR > +<TD align=left valign=top width="15%" bgcolor="#FF9900"> + + + +<TABLE align=left valign=top columns=1> +<TR> +<TD bgcolor="#CC6600"> +<P> +<B>Generel info</B> +</P> + +</TD> + +</TR> + <TR> +<TD> + +<FONT size=-1><P> +<B><A HREF="whatis.htm">What is m4</A></B> +</P> +</FONT> + +</TD> + +</TR> + <TR> +<TD> + +<FONT size=-1><P> +<B><A HREF="features.htm">Features</A></B> +</P> +</FONT> + +</TD> + +</TR> + <TR> +<TD> + +<FONT size=-1><P> +<B><A HREF="uses.htm">Uses of m4</A></B> +</P> +</FONT> + +</TD> + +</TR> + <TR> +<TD bgcolor="#CC6600"> +<P> +<B>Documentation</B> +</P> + +</TD> + +</TR> + <TR> +<TD> + +<FONT size=-1><P> +<B><A HREF="man/m4_toc.html">Manual</A></B> +</P> +</FONT> + +</TD> + +</TR> + <TR> +<TD bgcolor="#CC6600"> +<P> +<B>Source files</B> +</P> + +</TD> + +</TR> + <TR> +<TD> + +<FONT size=-1><P> +<B><A HREF="readme.htm">README</A></B> +</P> +</FONT> + +</TD> + +</TR> + <TR> +<TD> + +<FONT size=-1><P> +<B><A HREF="todo.htm">TODO</A></B> +</P> +</FONT> + +</TD> + +</TR> + <TR> +<TD> + +<FONT size=-1><P> +<B><A HREF="news.htm">NEWS</A></B> +</P> +</FONT> + +</TD> + +</TR> + <TR> +<TD> + +<FONT size=-1><P> +<B><A HREF="changelog.htm">ChangeLog</A></B> +</P> +</FONT> + +</TD> + +</TR> + <TR> +<TD> + +<FONT size=-1><P> +<B><A HREF="thanks.htm">Contributors</A></B> +</P> +</FONT> + +</TD> + +</TR> + <TR> +<TD> + +<FONT size=-1><P> +<B><A HREF="m4/">Browse it</A></B> +</P> +</FONT> + +</TD> + +</TR> + <TR> +<TD bgcolor="#CC6600"> +<P> +<B>The Future</B> +</P> + +</TD> + +</TR> + <TR> +<TD> + +<FONT size=-1><P> +<B><A HREF="modules.htm">Modules</A></B> +</P> +</FONT> + +</TD> + +</TR> + <TR> +<TD> + +<FONT size=-1><P> +<B><A HREF="visions.htm">Visions</A></B> +</P> +</FONT> + +</TD> + +</TR> + <TR> +<TD bgcolor="#CC6600"> +<P> +<B>Development</B> +</P> + +</TD> + +</TR> + <TR> +<TD> + +<FONT size=-1><P> +<B><A HREF="lists.htm">Mailing-lists</A></B> +</P> +</FONT> + +</TD> + +</TR> + <TR> +<TD> + +<FONT size=-1><P> +<B><A HREF="feedback.htm">Feedback</A></B> +</P> +</FONT> + +</TD> + +</TR> + <TR> +<TD> + +<FONT size=-1><P> +<B><A HREF="download.htm">Download</A></B> +</P> +</FONT> + +</TD> + +</TR> + <TR> +<TD bgcolor="#CC6600"> +<P> +<B>Examples</B> +</P> + +</TD> + +</TR> + <TR> +<TD> + +<FONT size=-1><P> +<B><A HREF="thissite.htm">This site</A></B> +</P> +</FONT> + +</TD> + +</TR> + +</TABLE> + + + + + +</TD> + <TD align=left valign=top width="90%"> + + +<H2>Possible features for future versions</H2> + + + +<UL> +<LI> <P> +Guile can be used as an extension language so complicated macros can be +written in Scheme while still maintaining the m4 interface. +</P> + + +<LI><P> +A kind of super-quotes can be added quotes that aren't stripped +when read as are normal quotes. These quotes should be stripped when +output. In that way text can be super-quote and consequently passed +untouched to the output. It is a bit like comments but there the +quotes are removed before output. +</P> + + + +</UL> + + +<P> +See also the <A HREF="todo.htm">TODO</A> file. +</P> + + + + +</TD> + +</TR> + +</TABLE> + +</BODY> + + +</HTML> + + diff --git a/examples/WWW/whatis.htm b/examples/WWW/whatis.htm new file mode 100644 index 00000000..3f793cd0 --- /dev/null +++ b/examples/WWW/whatis.htm @@ -0,0 +1,327 @@ +<DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 TRANSITIONAL//EN"> +<HTML> +<HEAD> +<TITLE>GNU m4 - What is GNU m4</TITLE> +<META NAME="AUTHOR" CONTENT="René Seindal"> +<META NAME="GENERATOR" CONTENT="GNU m4 1.4l"> +</HEAD> + <BODY text="#000000" bgcolor="#FFCC99" link="#0000EF" alink="#FF0000" vlink="#51188E"> +<TABLE cellpadding=5 width="100%"> +<TR align=left valign=bottom> +<TD align=center valign=center colspan="3" width="100%" bgcolor="#FF9900"> + +<H1>GNU m4</H1> + +<H2>What is GNU m4</H2> + +</TD> + +</TR> + <TR > +<TD align=left valign=top width="15%" bgcolor="#FF9900"> + + + +<TABLE align=left valign=top columns=1> +<TR> +<TD bgcolor="#CC6600"> +<P> +<B>Generel info</B> +</P> + +</TD> + +</TR> + <TR> +<TD> + +<FONT size=-1><P> +<B><A HREF="whatis.htm">What is m4</A></B> +</P> +</FONT> + +</TD> + +</TR> + <TR> +<TD> + +<FONT size=-1><P> +<B><A HREF="features.htm">Features</A></B> +</P> +</FONT> + +</TD> + +</TR> + <TR> +<TD> + +<FONT size=-1><P> +<B><A HREF="uses.htm">Uses of m4</A></B> +</P> +</FONT> + +</TD> + +</TR> + <TR> +<TD bgcolor="#CC6600"> +<P> +<B>Documentation</B> +</P> + +</TD> + +</TR> + <TR> +<TD> + +<FONT size=-1><P> +<B><A HREF="man/m4_toc.html">Manual</A></B> +</P> +</FONT> + +</TD> + +</TR> + <TR> +<TD bgcolor="#CC6600"> +<P> +<B>Source files</B> +</P> + +</TD> + +</TR> + <TR> +<TD> + +<FONT size=-1><P> +<B><A HREF="readme.htm">README</A></B> +</P> +</FONT> + +</TD> + +</TR> + <TR> +<TD> + +<FONT size=-1><P> +<B><A HREF="todo.htm">TODO</A></B> +</P> +</FONT> + +</TD> + +</TR> + <TR> +<TD> + +<FONT size=-1><P> +<B><A HREF="news.htm">NEWS</A></B> +</P> +</FONT> + +</TD> + +</TR> + <TR> +<TD> + +<FONT size=-1><P> +<B><A HREF="changelog.htm">ChangeLog</A></B> +</P> +</FONT> + +</TD> + +</TR> + <TR> +<TD> + +<FONT size=-1><P> +<B><A HREF="thanks.htm">Contributors</A></B> +</P> +</FONT> + +</TD> + +</TR> + <TR> +<TD> + +<FONT size=-1><P> +<B><A HREF="m4/">Browse it</A></B> +</P> +</FONT> + +</TD> + +</TR> + <TR> +<TD bgcolor="#CC6600"> +<P> +<B>The Future</B> +</P> + +</TD> + +</TR> + <TR> +<TD> + +<FONT size=-1><P> +<B><A HREF="modules.htm">Modules</A></B> +</P> +</FONT> + +</TD> + +</TR> + <TR> +<TD> + +<FONT size=-1><P> +<B><A HREF="visions.htm">Visions</A></B> +</P> +</FONT> + +</TD> + +</TR> + <TR> +<TD bgcolor="#CC6600"> +<P> +<B>Development</B> +</P> + +</TD> + +</TR> + <TR> +<TD> + +<FONT size=-1><P> +<B><A HREF="lists.htm">Mailing-lists</A></B> +</P> +</FONT> + +</TD> + +</TR> + <TR> +<TD> + +<FONT size=-1><P> +<B><A HREF="feedback.htm">Feedback</A></B> +</P> +</FONT> + +</TD> + +</TR> + <TR> +<TD> + +<FONT size=-1><P> +<B><A HREF="download.htm">Download</A></B> +</P> +</FONT> + +</TD> + +</TR> + <TR> +<TD bgcolor="#CC6600"> +<P> +<B>Examples</B> +</P> + +</TD> + +</TR> + <TR> +<TD> + +<FONT size=-1><P> +<B><A HREF="thissite.htm">This site</A></B> +</P> +</FONT> + +</TD> + +</TR> + +</TABLE> + + + + + +</TD> + <TD align=left valign=top width="90%"> + + +<P> +GNU <TT>m4</TT> is an implementation of the traditional Unix macro +processor. It is mostly SVR4 compatible, although it has some extensions +(for example, handling more than 9 positional parameters to macros). GNU +<TT>m4</TT> also has built-in functions for including files, running shell +commands, doing arithmetic, etc. +</P> + + +<P> +GNU <TT>m4</TT> is a macro processor, in the sense that it copies its +input to the output, expanding macros as it goes. Macros are either +builtin or user-defined, and can take any number of arguments. Besides +just doing macro expansion, m4 has builtin functions for including named +files, running UNIX commands, doing integer arithmetic, manipulating +text in various ways, recursion, etc... m4 can be used either as a +front-end to a compiler, or as a macro processor in its own right. +</P> + + +<P> +The m4 macro processor is widely available on all UNIXes. Usually, +only a small percentage of users are aware of its existence. However, +those who do often become commited users. The growing popularity of GNU +Autoconf, which prerequires GNU m4 for generating the `configure' +scripts, is an incentive for many to install it, while these people will +not themselves program in m4. GNU m4 is mostly compatible with the +System V, Release 3 version, except for some minor differences. +</P> + + +<P> +Some people found m4 to be fairly addictive. They first use m4 for +simple problems, then take bigger and bigger challenges, learning how to +write complex m4 sets of macros along the way. Once really addicted, +users pursue writing of sophisticated m4 applications even to solve +simple problems, devoting more time debugging their m4 scripts than +doing real work. Beware that m4 may be dangerous for the health of +compulsive programmers. +</P> + + +<P> +Autoconf needs GNU m4 for generating `configure' scripts, but not for +running them. +</P> + + + +</TD> + +</TR> + +</TABLE> + +</BODY> + + +</HTML> + + diff --git a/examples/capitalize.m4 b/examples/capitalize.m4 new file mode 100644 index 00000000..5c28de22 --- /dev/null +++ b/examples/capitalize.m4 @@ -0,0 +1,8 @@ +dnl +dnl convert to upper- resp. lowercase +define(`upcase', `translit(`$*', `a-z', `A-Z')') +define(`downcase', `translit(`$*', `A-Z', `a-z')') +dnl +dnl capitalize a single word +define(`capitalize1', `regexp(`$1', `^\(\w\)\(\w*\)', `upcase(`\1')`'downcase(`\2')')') +define(`capitalize', `patsubst(`$1', `\w+', ``'capitalize1(`\0')')') diff --git a/examples/capitalize.test b/examples/capitalize.test new file mode 100755 index 00000000..5b80f5c0 --- /dev/null +++ b/examples/capitalize.test @@ -0,0 +1,21 @@ +#!/bin/sh + +# capitalize.test is part of the GNU m4 testsuite + +. ${srcdir}/defs + +cat ${srcdir}/capitalize.m4 >in + +cat <<\EOF >ok + + +CONVERT TO UPPER CASE +convert to lower case + + +This Sentence Should Be Capitalized +EOF + +M4PATH=$srcdir:$srcdir/../tests $M4 -d in >out 2>err +sed -e "s, ../../src/m4:, m4:," err >sederr && mv sederr err +$CMP -s out ok diff --git a/examples/comments.m4 b/examples/comments.m4 new file mode 100644 index 00000000..c1e3be0a --- /dev/null +++ b/examples/comments.m4 @@ -0,0 +1,7 @@ +# An ordinary comment +define(`foo', # A comment in a macro +`Macro `foo' expansion') +foo +define(`comment', `*** Macro `comment' expansion ***') +changecom(`@', `@') +foo diff --git a/examples/comments.test b/examples/comments.test new file mode 100755 index 00000000..63161dc2 --- /dev/null +++ b/examples/comments.test @@ -0,0 +1,24 @@ +#!/bin/sh + +# comments.test is part of the GNU m4 testsuite + +. ${srcdir}/defs + +cat <<\EOF >in +include(comments.m4)dnl +EOF + +cat <<\EOF >ok +# An ordinary comment + +# A comment in a macro +Macro foo expansion + + +# A *** Macro comment expansion *** in a macro +Macro foo expansion +EOF + +M4PATH=$srcdir $M4 -d in >out + +$CMP -s out ok diff --git a/examples/ddivert.m4 b/examples/ddivert.m4 new file mode 100644 index 00000000..e6e0017e --- /dev/null +++ b/examples/ddivert.m4 @@ -0,0 +1,4 @@ +divert(1)Text diverted a first time. +divert(0)undivert(1)dnl +divert(1)Text diverted a second time. +divert(0)undivert(1)dnl diff --git a/examples/ddivert.test b/examples/ddivert.test new file mode 100755 index 00000000..5db82e90 --- /dev/null +++ b/examples/ddivert.test @@ -0,0 +1,18 @@ +#!/bin/sh + +# ddivert.test is part of the GNU m4 testsuite + +. ${srcdir}/defs + +cat <<\EOF >in +include(ddivert.m4)dnl +EOF + +cat <<\EOF >ok +Text diverted a first time. +Text diverted a second time. +EOF + +M4PATH=$srcdir $M4 -d in >out + +$CMP -s out ok diff --git a/examples/debug.m4 b/examples/debug.m4 new file mode 100644 index 00000000..16f4c74e --- /dev/null +++ b/examples/debug.m4 @@ -0,0 +1,4 @@ +define(`countdown', `$1 ifelse(eval($1 > 0), 1, `countdown(decr($1))', `Liftoff')') +debugmode(`aeqc') +traceon(`countdown') +countdown(2) diff --git a/examples/debug.test b/examples/debug.test new file mode 100755 index 00000000..0260641e --- /dev/null +++ b/examples/debug.test @@ -0,0 +1,33 @@ +#!/bin/sh + +# debug.test is part of the GNU m4 testsuite + +. ${srcdir}/defs + +cat <<\EOF >in +include(debug.m4)dnl +EOF + +cat <<\EOF >ok + + + +2 1 0 Liftoff +EOF + +cat <<\EOF >okerr +m4trace: -1- countdown ... +m4trace: -1- countdown(`2') -> ??? +m4trace: -1- countdown(...) -> `2 ifelse(eval(2 > 0), 1, `countdown(decr(2))', `Liftoff')' +m4trace: -1- countdown ... +m4trace: -1- countdown(`1') -> ??? +m4trace: -1- countdown(...) -> `1 ifelse(eval(1 > 0), 1, `countdown(decr(1))', `Liftoff')' +m4trace: -1- countdown ... +m4trace: -1- countdown(`0') -> ??? +m4trace: -1- countdown(...) -> `0 ifelse(eval(0 > 0), 1, `countdown(decr(0))', `Liftoff')' +EOF + +M4PATH=$srcdir $M4 -d in >out 2>err +sed -e "s, ../../src/m4:, m4:," err >sederr && mv sederr err + +$CMP -s out ok && $CMP -s err okerr diff --git a/examples/defs b/examples/defs new file mode 100644 index 00000000..cf97e3b3 --- /dev/null +++ b/examples/defs @@ -0,0 +1,54 @@ +# -*- ksh -*- +# Defines for GNU m4 testing environment. +# Erick Branderhorst <Erick.Branderhorst@asml.nl> + +# Ensure $srcdir set correctly. +test -f ${srcdir}/defs || { + echo "defs: installation error" 1>&2 + exit 1 +} + +# If srcdir is relative, we need to modify it. +case "$srcdir" in + /*) + ;; + + *) + srcdir="../$srcdir" + ;; +esac + +rm -rf testSubDir > /dev/null 2>&1 +mkdir testSubDir +cd testSubDir + +# Build appropriate environment in test directory. Eg create +# configure.in, touch all necessary files, etc. + +# nothing yet + +# See how redirections should work. User can set VERBOSE to see all +# output. +test -z "$VERBOSE" && { + exec > /dev/null 2>&1 +} + +# User can set MAKE to choose which make to use. Must use GNU make. +test -z "$MAKE" && MAKE=make + +echo "=== Running test $0" + +# See how GNU m4 should be run. No options as default. +test -z "$M4" && M4=../../src/m4 + +# See how cmp should be run. +test -z "$CMP" && CMP=cmp + +# Setting nls related vars. Override them in the test when needed. +LANGUAGE=C +export LANGUAGE +LC_ALL=C +export LC_ALL +LANG=C +export LANG + diff --git a/examples/esyscmd.m4 b/examples/esyscmd.m4 new file mode 100644 index 00000000..b839148c --- /dev/null +++ b/examples/esyscmd.m4 @@ -0,0 +1,5 @@ +define(`hostname', esyscmd(`hostname'))dnl +`hostname = >>'hostname`<<' +define(`hostname', +pushdef(`_tmp', `$1')_tmp(translit(esyscmd(`hostname'), `.', `,'))`'popdef(`_tmp'))dnl +`hostname = >>'hostname`<<' diff --git a/examples/esyscmd.test b/examples/esyscmd.test new file mode 100755 index 00000000..47602094 --- /dev/null +++ b/examples/esyscmd.test @@ -0,0 +1,18 @@ +#!/bin/sh + +# esyscmd.test is part of the GNU m4 testsuite + +. ${srcdir}/defs + +cat ${srcdir}/esyscmd.m4 >in + +cat <<\EOF >ok +# Cannot use real hostname program because test would fail +hostname = >>www.gnu.org +<< +hostname = >>www<< +EOF + +M4PATH=$srcdir:$srcdir/../tests $M4 -d in >out 2>err +sed -e "s, ../../src/m4:, m4:," err >sederr && mv sederr err +$CMP -s out ok diff --git a/examples/exp.m4 b/examples/exp.m4 new file mode 100644 index 00000000..8aef93e9 --- /dev/null +++ b/examples/exp.m4 @@ -0,0 +1 @@ +define(`countdown', `$1 ifelse(eval($1 > 0), 1, `countdown(decr($1))', `Done')') diff --git a/examples/exp.test b/examples/exp.test new file mode 100755 index 00000000..443e98c7 --- /dev/null +++ b/examples/exp.test @@ -0,0 +1,23 @@ +#!/bin/sh + +# exp.test is part of the GNU m4 testsuite + +. ${srcdir}/defs + +cat ${srcdir}/exp.m4 >in + +cat <<\EOF >ok +7 +6 +5 +4 +3 +2 +1 +0 +Done +EOF + +M4PATH=$srcdir:$srcdir/../tests $M4 -d in >out 2>err +sed -e "s, ../../src/m4:, m4:," err >sederr && mv sederr err +$CMP -s out ok diff --git a/examples/file.m4 b/examples/file.m4 new file mode 100644 index 00000000..e7db5f13 --- /dev/null +++ b/examples/file.m4 @@ -0,0 +1,5 @@ +changequote([[,]])dnl +define([[quoteall]], [[patsubst([[[[$*]]]], [[,[ ]+]], [[,]])]])dnl +define([[group]], quoteall(include([[/etc/group]])))dnl +dnl +group()dnl diff --git a/examples/foreach.m4 b/examples/foreach.m4 new file mode 100644 index 00000000..d5b81866 --- /dev/null +++ b/examples/foreach.m4 @@ -0,0 +1,19 @@ +divert(-1) +# foreach(x, (item_1, item_2, ..., item_n), stmt) +define(`foreach', `pushdef(`$1', `')_foreach(`$1', `$2', `$3')popdef(`$1')') +define(`_arg1', `$1') +define(`_foreach', + `ifelse(`$2', `()', , + `define(`$1', _arg1$2)$3`'_foreach(`$1', (shift$2), `$3')')') +# traceon(`define', `foreach', `_foreach', `ifelse') +divert +foreach(`x', `(foo, bar, foobar)', `Word was: x +') +# Something more complex, from Pierre Gaumond <gaumondp@ere.umontreal.ca>. +define(`case', ` $1) + $2=" -$1";; +')dnl +define(`_cat', `$1$2')dnl +`case' "$1" in +foreach(`x', ((a, vara), (b, varb), (c, varc)), `_cat(`case', x)')dnl +esac diff --git a/examples/foreach.test b/examples/foreach.test new file mode 100755 index 00000000..969e1638 --- /dev/null +++ b/examples/foreach.test @@ -0,0 +1,28 @@ +#!/bin/sh + +# foreach.test is part of the GNU m4 testsuite + +. ${srcdir}/defs + +cat ${srcdir}/foreach.m4 >in + +cat <<\EOF >ok + +Word was: foo +Word was: bar +Word was: foobar + +# Something more complex, from Pierre Gaumond <gaumondp@ere.umontreal.ca>. +case "$1" in + a) + vara=" -a";; + b) + varb=" -b";; + c) + varc=" -c";; +esac +EOF + +M4PATH=$srcdir:$srcdir/../tests $M4 -d in >out 2>err +sed -e "s, ../../src/m4:, m4:," err >sederr && mv sederr err +$CMP -s out ok diff --git a/examples/forloop.m4 b/examples/forloop.m4 new file mode 100644 index 00000000..a8bb6bce --- /dev/null +++ b/examples/forloop.m4 @@ -0,0 +1,8 @@ +divert(-1) +# forloop(i, from, to, stmt) + +define(`forloop', `pushdef(`$1', `$2')_forloop(`$1', `$2', `$3', `$4')popdef(`$1')') +define(`_forloop', + `$4`'ifelse($1, `$3', , + `define(`$1', incr($1))_forloop(`$1', `$2', `$3', `$4')')') +divert diff --git a/examples/forloop.test b/examples/forloop.test new file mode 100755 index 00000000..f2a41e7d --- /dev/null +++ b/examples/forloop.test @@ -0,0 +1,26 @@ +#!/bin/sh + +# forloop.test is part of the GNU m4 testsuite + +. ${srcdir}/defs + +cat ${srcdir}/forloop.m4 >in + +cat <<\EOF >ok + +2**1 = 2 +2**2 = 4 +2**3 = 8 +2**4 = 16 +2**5 = 32 +2**6 = 64 +2**7 = 128 +2**8 = 256 +2**9 = 512 +2**10 = 1024 + +EOF + +M4PATH=$srcdir:$srcdir/../tests $M4 -d in >out 2>err +sed -e "s, ../../src/m4:, m4:," err >sederr && mv sederr err +$CMP -s out ok diff --git a/examples/fstab.m4 b/examples/fstab.m4 new file mode 100644 index 00000000..dbf538ae --- /dev/null +++ b/examples/fstab.m4 @@ -0,0 +1,7 @@ +define(`concat', `translit(``$*'', ` ')') +define(`fsent', `format(`%-25s %-16s nfs %-16s 0 0', `$1:$2', `$3', concat$4)') + +fsent(freja, /home/gevn, /home/gevn, (rw, soft, bg, grpid)) +fsent(freja, /home/freja, /home/freja, (rw, soft, grpid)) +fsent(rimfaxe, /home/rimfaxe, /home/rimfaxe, (rw, soft, bg)) + diff --git a/examples/fstab.test b/examples/fstab.test new file mode 100755 index 00000000..89fd2c6b --- /dev/null +++ b/examples/fstab.test @@ -0,0 +1,21 @@ +#!/bin/sh + +# fstab.test is part of the GNU m4 testsuite + +. ${srcdir}/defs + +cat ${srcdir}/fstab.m4 >in + +cat <<\EOF >ok + + + +freja:/home/gevn /home/gevn nfs rw,soft,bg,grpid 0 0 +freja:/home/freja /home/freja nfs rw,soft,grpid 0 0 +rimfaxe:/home/rimfaxe /home/rimfaxe nfs rw,soft,bg 0 0 + +EOF + +M4PATH=$srcdir:$srcdir/../tests $M4 -d in >out 2>err +sed -e "s, ../../src/m4:, m4:," err >sederr && mv sederr err +$CMP -s out ok diff --git a/examples/hanoi.m4 b/examples/hanoi.m4 new file mode 100644 index 00000000..c4a80fc6 --- /dev/null +++ b/examples/hanoi.m4 @@ -0,0 +1,15 @@ +divert(-1) + +# move(from, to) +define(`move', `Move one disk from `$1' to `$2'. +') + +# _hanoi (cnt, from, to, aux) +define(`_hanoi', `ifelse(eval(`$1'<=1), 1, `move($2, $3)', +`_hanoi(decr($1), $2, $4, $3)move($2, $3)_hanoi(decr($1), $4, $3, $2)')') + +# hanoi (cnt) +define(`hanoi', `_hanoi(`$1', source, destination, auxilliary)') + +# traceon(`move', `_hanoi', `decr') +divert`'dnl diff --git a/examples/hanoi.test b/examples/hanoi.test new file mode 100755 index 00000000..6080d5f6 --- /dev/null +++ b/examples/hanoi.test @@ -0,0 +1,23 @@ +#!/bin/sh + +# hanoi.test is part of the GNU m4 testsuite + +. ${srcdir}/defs + +cat ${srcdir}/hanoi.m4 >in + +cat <<\EOF >ok + +Move one disk from source to destination. +Move one disk from source to auxilliary. +Move one disk from destination to auxilliary. +Move one disk from source to destination. +Move one disk from auxilliary to source. +Move one disk from auxilliary to destination. +Move one disk from source to destination. + +EOF + +M4PATH=$srcdir:$srcdir/../tests $M4 -d in >out 2>err +sed -e "s, ../../src/m4:, m4:," err >sederr && mv sederr err +$CMP -s out ok diff --git a/examples/incl-test.m4 b/examples/incl-test.m4 new file mode 100644 index 00000000..8b7d223f --- /dev/null +++ b/examples/incl-test.m4 @@ -0,0 +1,2 @@ +`include test file.' +define() diff --git a/examples/include.m4 b/examples/include.m4 new file mode 100644 index 00000000..fb788047 --- /dev/null +++ b/examples/include.m4 @@ -0,0 +1,7 @@ +Beginning. +include(`NOFILE') +Intermidiate +include(`test/incl-test.m4') +After +include(`NOFILE') +very late diff --git a/examples/include.test b/examples/include.test new file mode 100755 index 00000000..5d0b1100 --- /dev/null +++ b/examples/include.test @@ -0,0 +1,28 @@ +#!/bin/sh + +# include.test is part of the GNU m4 testsuite + +. ${srcdir}/defs + +cat ${srcdir}/include.m4 >in + +cat <<\EOF >ok +Beginning. + +Intermidiate +include test file. + + +After + +very late +EOF + +cat <<\EOF >okerr +in:2: m4: Cannot open NOFILE: No such file or directory +in:6: m4: Cannot open NOFILE: No such file or directory +EOF + +M4PATH=$srcdir:$srcdir/../tests $M4 -d in >out 2>err +sed -e "s, ../../src/m4:, m4:," err >sederr && mv sederr err +$CMP -s out ok && $CMP -s err okerr diff --git a/examples/indir.m4 b/examples/indir.m4 new file mode 100644 index 00000000..bc301238 --- /dev/null +++ b/examples/indir.m4 @@ -0,0 +1,10 @@ +define(`%%$$##', `>>>$0<<< cnt $#') + +# indir(`%%$$##', nonsens, nonsens) +indir(`%%$$##', nonsens, nonsens) + +# indir(`indir', `%%$$##', nonsens) +indir(`indir', `%%$$##', nonsens) + +# indir(`indir', `indir', `indir', `indir', `%%$$##') +indir(`indir', `indir', `indir', `indir', `%%$$##') diff --git a/examples/indir.test b/examples/indir.test new file mode 100755 index 00000000..e243f97c --- /dev/null +++ b/examples/indir.test @@ -0,0 +1,24 @@ +#!/bin/sh + +# indir.test is part of the GNU m4 testsuite + +. ${srcdir}/defs + +cat ${srcdir}/indir.m4 >in + +cat <<\EOF >ok + + +# indir(`%%$$##', nonsens, nonsens) +>>>%%$$##<<< cnt 2 + +# indir(`indir', `%%$$##', nonsens) +>>>%%$$##<<< cnt 1 + +# indir(`indir', `indir', `indir', `indir', `%%$$##') +>>>%%$$##<<< cnt 0 +EOF + +M4PATH=$srcdir:$srcdir/../tests $M4 -d in >out 2>err +sed -e "s, ../../src/m4:, m4:," err >sederr && mv sederr err +$CMP -s out ok diff --git a/examples/iso8859.m4 b/examples/iso8859.m4 Binary files differnew file mode 100644 index 00000000..4ac1d196 --- /dev/null +++ b/examples/iso8859.m4 diff --git a/examples/iso8859.test b/examples/iso8859.test new file mode 100755 index 00000000..3cca92e1 --- /dev/null +++ b/examples/iso8859.test @@ -0,0 +1,33 @@ +#!/bin/sh + +# iso8859.test is part of the GNU m4 testsuite + +. ${srcdir}/defs + +cat <<\EOF >in +include(iso8859.m4)dnl +EOF + +cat <<\EOF >ok +# Texting quotes +DEFINE +CHANGEQUOTE(«,») +0 TEST # TEST +1 test # test +2 «test» # «test» +3 ««test»» # ««test»» +CHANGEQUOTE(«««,»»») +0 TEST # TEST +1 «TEST» # «TEST» +2 ««TEST»» # ««TEST»» +3 test # test +# Test use of all iso8859 characters except NUL ` ' +Length of string is: 253 +Comparing strings: MATCH +# NUL does not pass through +This will be seen. +EOF + +M4PATH=$srcdir $M4 -d in >out + +$CMP -s out ok diff --git a/examples/misc.m4 b/examples/misc.m4 new file mode 100644 index 00000000..eff8766d --- /dev/null +++ b/examples/misc.m4 @@ -0,0 +1,9 @@ +divert(-1) +define(`HOST', `vale') +define(`TMP', maketemp(`/tmp/hejXXXXXX')) +syscmd(`ypmatch' HOST `hosts | awk "{print \$1}"' > TMP) +define(`IP', include(TMP)) +syscmd(`rm -f' TMP) +divert + +IP diff --git a/examples/misc.test b/examples/misc.test new file mode 100755 index 00000000..59ea58ad --- /dev/null +++ b/examples/misc.test @@ -0,0 +1,17 @@ +#!/bin/sh + +# misc.test is part of the GNU m4 testsuite + +. ${srcdir}/defs + +cat ${srcdir}/misc.m4 >in + +cat <<\EOF >ok + +127.0.0.1 + +EOF + +M4PATH=$srcdir:$srcdir/../tests $M4 -d in >out 2>err +sed -e "s, ../../src/m4:, m4:," err >sederr && mv sederr err +$CMP -s out ok diff --git a/examples/mktests.sh b/examples/mktests.sh new file mode 100644 index 00000000..1546b568 --- /dev/null +++ b/examples/mktests.sh @@ -0,0 +1,65 @@ +#!/bin/sh + +: ${M4:=../../src/m4} + +test $# -eq 1 || exit 1 +FILE=`basename $1 .m4` + + +test -r $FILE.m4 || exit 1 + +if head -1 $FILE.m4 | fgrep -w 'dnl noauto' >/dev/null; then + echo "$FILE.test cannot be generated" 1>&2 + exit 1 +fi + +test -d testSubDir || mkdir testSubDir + +cat "$FILE.m4" > testSubDir/in +(cd testSubDir; $M4 -I.. -d "in" >out 2>err) + +( + +cat <<EOFEOF +#!/bin/sh + +# $FILE.test is part of the GNU m4 testsuite + +. \${srcdir}/defs + +cat \${srcdir}/$FILE.m4 >in +EOFEOF + +echo +echo 'cat <<\EOF >ok' +cat testSubDir/out +echo EOF + +if [ -s testSubDir/err ]; then + echo + echo 'cat <<\EOF >okerr' + sed -e "s, $M4:, m4:," testSubDir/err + echo EOF +fi + +echo +echo 'M4PATH=$srcdir:$srcdir/../tests $M4 -d in >out 2>err' +echo 'sed -e "s, ../../src/m4:, m4:," err >sederr && mv sederr err' + +if [ -s testSubDir/err ]; then + echo '$CMP -s out ok && $CMP -s err okerr' +else + echo '$CMP -s out ok' +fi +) >$FILE.test.new + +if cmp -s $FILE.test.new $FILE.test; then + echo "$FILE.test unchanged" 1>&2 + rm -f $FILE.test.new +else + echo "creating $FILE.test" 1>&2 + mv $FILE.test.new $FILE.test + chmod +x $FILE.test +fi + +rm -f testSubDir/out testSubDir/err diff --git a/examples/multiquotes.m4 b/examples/multiquotes.m4 new file mode 100644 index 00000000..b56cfbd8 --- /dev/null +++ b/examples/multiquotes.m4 @@ -0,0 +1,17 @@ +traceon +changequote([,])dnl +changequote([``], [''])dnl +````traceon'''' +define(``foo'', ````FOO'''')dnl +dumpdef(``foo'')dnl +changequote(``!'', ``!'')dnl +!foo! +foo +dumpdef(!foo!)dnl +define(!bar!, !BAR!) +bar +changequote(!>*>*>*>*>!, !<*<*<*<*<!)dnl five of each +>*>*>*>*>foo bar<*<*<*<*< +foo bar +>*>*>*>*>*>*><*<*<*<*<*<*< +dumpdef(>*>*>*>*>foo<*<*<*<*<, >*>*>*>*>bar<*<*<*<*<)dnl diff --git a/examples/multiquotes.test b/examples/multiquotes.test new file mode 100755 index 00000000..81bd10d1 --- /dev/null +++ b/examples/multiquotes.test @@ -0,0 +1,47 @@ +#!/bin/sh + +# multiquotes.test is part of the GNU m4 testsuite + +. ${srcdir}/defs + +cat ${srcdir}/multiquotes.m4 >in + +cat <<\EOF >ok + +``traceon'' +foo +``FOO'' + +BAR +foo bar +``FOO'' BAR +*>*>*<*< +EOF + +cat <<\EOF >okerr +m4trace: -1- changequote(`[', `]') +m4trace: -1- dnl +m4trace: -1- changequote([``], ['']) +m4trace: -1- dnl +m4trace: -1- define(``foo'', ````FOO'''') +m4trace: -1- dnl +foo: ````FOO'''' +m4trace: -1- dumpdef(``foo'') +m4trace: -1- dnl +m4trace: -1- changequote(``!'', ``!'') +m4trace: -1- dnl +foo: !``FOO''! +m4trace: -1- dumpdef(!foo!) +m4trace: -1- dnl +m4trace: -1- define(!bar!, !BAR!) +m4trace: -1- changequote(!>*>*>*>*>!, !<*<*<*<*<!) +m4trace: -1- dnl +bar: >*>*>*>*>BAR<*<*<*<*< +foo: >*>*>*>*>``FOO''<*<*<*<*< +m4trace: -1- dumpdef(>*>*>*>*>foo<*<*<*<*<, >*>*>*>*>bar<*<*<*<*<) +m4trace: -1- dnl +EOF + +M4PATH=$srcdir:$srcdir/../tests $M4 -d in >out 2>err +sed -e "s, ../../src/m4:, m4:," err >sederr && mv sederr err +$CMP -s out ok && $CMP -s err okerr diff --git a/examples/patsubst.m4 b/examples/patsubst.m4 new file mode 100644 index 00000000..3b390ae0 --- /dev/null +++ b/examples/patsubst.m4 @@ -0,0 +1,8 @@ +# traceon(`patsubst') +patsubst(`GNUs not Unix', `^', `OBS: ') +patsubst(`GNUs not Unix', `\<', `OBS: ') +patsubst(`GNUs not Unix', `\<\w', `\0=') +patsubst(`GNUs not Unix', `\w*', `(\0)') +patsubst(`GNUs not Unix', `\w+', `(\0)') +patsubst(`GNUs not Unix', `\w+') +patsubst(`GNUs not Unix', `[ ]+', ` ') diff --git a/examples/patsubst.test b/examples/patsubst.test new file mode 100755 index 00000000..c31c4c5d --- /dev/null +++ b/examples/patsubst.test @@ -0,0 +1,26 @@ +#!/bin/sh + +# patsubst.test is part of the GNU m4 testsuite + +. ${srcdir}/defs + +cat ${srcdir}/patsubst.m4 >in + +cat <<\EOF >ok +# traceon(`patsubst') +OBS: GNUs not Unix +OBS: GNUs OBS: not OBS: Unix +G=NUs n=ot U=nix +(GNUs)() (not)() (Unix) +(GNUs) (not) (Unix) + +GNUs not Unix +EOF + +cat <<\EOF >okerr +in:4: m4: WARNING: \0 will disappear, use \& instead in replacements +EOF + +M4PATH=$srcdir:$srcdir/../tests $M4 -d in >out 2>err +sed -e "s, ../../src/m4:, m4:," err >sederr && mv sederr err +$CMP -s out ok && $CMP -s err okerr diff --git a/examples/pushpop.m4 b/examples/pushpop.m4 new file mode 100644 index 00000000..d0f2ebb8 --- /dev/null +++ b/examples/pushpop.m4 @@ -0,0 +1,25 @@ +divert(-1) +pushdef(`hej', `def 1.') +dumpdef(`hej') +pushdef(`hej', `def 2.') +dumpdef(`hej') +pushdef(`hej', `def 3.') +dumpdef(`hej') +pushdef(`hej', `def 4.') +dumpdef(`hej') + +popdef(`hej') +dumpdef(`hej') +popdef(`hej') +dumpdef(`hej') +popdef(`hej') +dumpdef(`hej') +popdef(`hej') +dumpdef(`hej') +popdef(`hej') +dumpdef(`hej') +popdef(`hej') + +dumpdef(`mac2') +popdef(`mac2') +dumpdef(`mac2') diff --git a/examples/pushpop.test b/examples/pushpop.test new file mode 100755 index 00000000..038aca15 --- /dev/null +++ b/examples/pushpop.test @@ -0,0 +1,28 @@ +#!/bin/sh + +# pushpop.test is part of the GNU m4 testsuite + +. ${srcdir}/defs + +cat ${srcdir}/pushpop.m4 >in + +cat <<\EOF >ok +EOF + +cat <<\EOF >okerr +hej: `def 1.' +hej: `def 2.' +hej: `def 3.' +hej: `def 4.' +hej: `def 3.' +hej: `def 2.' +hej: `def 1.' +in:18: m4: Undefined name hej +in:20: m4: Undefined name hej +in:23: m4: Undefined name mac2 +in:25: m4: Undefined name mac2 +EOF + +M4PATH=$srcdir:$srcdir/../tests $M4 -d in >out 2>err +sed -e "s, ../../src/m4:, m4:," err >sederr && mv sederr err +$CMP -s out ok && $CMP -s err okerr diff --git a/examples/regexp.m4 b/examples/regexp.m4 new file mode 100644 index 00000000..a4ca573e --- /dev/null +++ b/examples/regexp.m4 @@ -0,0 +1,12 @@ +traceon(`regexp')dnl +regexp(`hej med dig', `.*', `>>\0<<') +regexp(`hej med dig', `\w*', `>>\0<<') +regexp(`hej med dig', `.+', `>>\0<<') +regexp(`hej med dig', `m\w+', `>>\0<<') +regexp(`hej med dig', `m\(.*\)', `>>\0<< >>\1<<') + +regexp(`hej med dig', `.*') +regexp(`hej med dig', `\w*') +regexp(`hej med dig', `.+') +regexp(`hej med dig', `m\w+') +regexp(`hej med dig', `m\(.*\)') diff --git a/examples/regexp.test b/examples/regexp.test new file mode 100755 index 00000000..4cf21990 --- /dev/null +++ b/examples/regexp.test @@ -0,0 +1,39 @@ +#!/bin/sh + +# regexp.test is part of the GNU m4 testsuite + +. ${srcdir}/defs + +cat ${srcdir}/regexp.m4 >in + +cat <<\EOF >ok +>>hej med dig<< +>>hej<< +>>hej med dig<< +>>med<< +>>med dig<< >>ed dig<< + +0 +0 +0 +4 +4 +EOF + +cat <<\EOF >okerr +in:2: m4: WARNING: \0 will disappear, use \& instead in replacements +m4trace: -1- regexp(`hej med dig', `.*', `>>\0<<') -> `>>hej med dig<<' +m4trace: -1- regexp(`hej med dig', `\w*', `>>\0<<') -> `>>hej<<' +m4trace: -1- regexp(`hej med dig', `.+', `>>\0<<') -> `>>hej med dig<<' +m4trace: -1- regexp(`hej med dig', `m\w+', `>>\0<<') -> `>>med<<' +m4trace: -1- regexp(`hej med dig', `m\(.*\)', `>>\0<< >>\1<<') -> `>>med dig<< >>ed dig<<' +m4trace: -1- regexp(`hej med dig', `.*') -> `0' +m4trace: -1- regexp(`hej med dig', `\w*') -> `0' +m4trace: -1- regexp(`hej med dig', `.+') -> `0' +m4trace: -1- regexp(`hej med dig', `m\w+') -> `4' +m4trace: -1- regexp(`hej med dig', `m\(.*\)') -> `4' +EOF + +M4PATH=$srcdir:$srcdir/../tests $M4 -d in >out 2>err +sed -e "s, ../../src/m4:, m4:," err >sederr && mv sederr err +$CMP -s out ok && $CMP -s err okerr diff --git a/examples/reverse.m4 b/examples/reverse.m4 new file mode 100644 index 00000000..1e620088 --- /dev/null +++ b/examples/reverse.m4 @@ -0,0 +1,4 @@ +define(`reverse', `ifelse(eval($# > 1), 1, `reverse(shift($@)), `$1'', ``$1'')') +``'' => reverse +``hej'' => reverse(hej) +``hej, med, dig'' => reverse(hej, med, dig) diff --git a/examples/reverse.test b/examples/reverse.test new file mode 100755 index 00000000..63b4cefa --- /dev/null +++ b/examples/reverse.test @@ -0,0 +1,20 @@ +#!/bin/sh + +# reverse.test is part of the GNU m4 testsuite + +. ${srcdir}/defs + +cat <<\EOF >in +include(reverse.m4)dnl +EOF + +cat <<\EOF >ok + +`' => +`hej' => hej +`hej, med, dig' => dig, med, hej +EOF + +M4PATH=$srcdir $M4 -d in >out + +$CMP -s out ok diff --git a/examples/stackovf.sh b/examples/stackovf.sh new file mode 100644 index 00000000..e389a210 --- /dev/null +++ b/examples/stackovf.sh @@ -0,0 +1,83 @@ +#!/bin/sh + +# Script to verify that stack overflow is diagnosed properly when +# there is infinite macro call nesting. +# (causes coredump in m4-1.0.3) + +# On some systems the ulimit command is available in ksh or bash but not sh +(exec 2>/dev/null; ulimit -HSs 300) || { + for altshell in bash bsh ksh ; do + if (exec >/dev/null 2>&1; $altshell -c 'ulimit -HSs 300') && + test -z "$1" + then + echo "Using $altshell because it supports ulimit" + exec $altshell $0 running-with-$altshell + exit 9 + fi + done +} + +PATH=.:..:$PATH; export PATH; +M4=m4 +type $M4 + +tmpfile=/tmp/t.$$ +trap 'rm -f $tmpfile; exit 1' 1 2 3 15 + +rm -f core +perl -e ' +# Generate nested define sequence +$max=1000000; +for ($i=0; $i<$max; $i++) { + print "define(X$i,\n"; +} +for ($i=$max-1; $i>=0; $i--) { + print "body with substance no. $i)dnl\n" +} +' | \ +( +# Limit the stack size if the shell we are running permits it +if (exec 2>/dev/null; ulimit -HSs 50) +then + (exec >/dev/null 2>&1; ulimit -v) && ulimitdashv=ok + ulimit -HSs 50 + #ulimit -HSd 8000 + #test -n "$ulimitdashv" && ulimit -HSv 8000 + echo "Stack limit is `ulimit -s`K"; + echo "Heap limit is `ulimit -d`K"; + test -n "$ulimitdashv" && + echo "VMem limit is `ulimit -v`K"; +else + echo "Can't reset stack limit - this may take a while..." +fi +$M4 -L999999999 > $tmpfile 2>&1 +) +result=$? + +exitcode=1 +if test $result -eq 0 ; then + echo "TEST DID NOT WORK - m4 did not abort. Output:" +else + # See if stack overflow was diagnosed + case "`cat $tmpfile`" in + *overflow*) + echo "Test succeeded."; + exitcode=0 + ;; + *ut*of*emory*) + echo "*** Test is INCONCLUSIVE (ran out of heap before stack overflow)"; + ;; + *) echo "*** Test FAILED. $M4 aborted unexpectedly. Output:"; + ;; + esac +fi + +if test -f core ; then + ls -l core + exitcode=1 +fi + +#(test $exitcode -ne 0) && + { echo "Output from $M4:"; cat $tmpfile; } + +exit $exitcode diff --git a/examples/sync-lines.m4 b/examples/sync-lines.m4 new file mode 100644 index 00000000..405ab618 --- /dev/null +++ b/examples/sync-lines.m4 @@ -0,0 +1,11 @@ +# Several input lines, expanding to one +define(`foo', ``foo' line one. +`foo' line two. +`foo' line three.') xyz +foo +# Several input lines, expanding to none +define(`foo', ``foo' line one. +`foo' line two. +`foo' line three.')dnl +# one input line, expanding to several output lines +foo foo diff --git a/examples/sysv-args.m4 b/examples/sysv-args.m4 new file mode 100644 index 00000000..7c82beb0 --- /dev/null +++ b/examples/sysv-args.m4 @@ -0,0 +1,14 @@ +divert(-1) +define(`nargs', `$#') +define(`concat', `ifelse(1, $#, `$1', `$1` 'concat(shift($@))')') +traceon(`concat', `nargs') +divert + +nargs +nargs() +nargs(1,2,3,4,5,6) + +concat() +concat(`hej', `med', `dig') +concat(`hej', `med', `dig', `en gang igen') +concat(an, awful, lot, of, argument, at, least, more, that, ten, silly, arguments) diff --git a/examples/sysv-args.test b/examples/sysv-args.test new file mode 100755 index 00000000..ceb68c9a --- /dev/null +++ b/examples/sysv-args.test @@ -0,0 +1,53 @@ +#!/bin/sh + +# sysv-args.test is part of the GNU m4 testsuite + +. ${srcdir}/defs + +cat <<\EOF >in +include(sysv-args.m4)dnl +EOF + +cat <<\EOF >ok + + +0 +1 +6 + + +hej med dig +hej med dig en gang igen +an awful lot of argument at least more that ten silly arguments +EOF + +cat <<\EOF >okerr +m4trace: -1- nargs +m4trace: -1- nargs +m4trace: -1- nargs +m4trace: -1- concat +m4trace: -1- concat +m4trace: -1- concat +m4trace: -1- concat +m4trace: -1- concat +m4trace: -1- concat +m4trace: -1- concat +m4trace: -1- concat +m4trace: -1- concat +m4trace: -1- concat +m4trace: -1- concat +m4trace: -1- concat +m4trace: -1- concat +m4trace: -1- concat +m4trace: -1- concat +m4trace: -1- concat +m4trace: -1- concat +m4trace: -1- concat +m4trace: -1- concat +m4trace: -1- concat +EOF + +M4PATH=$srcdir $M4 in >out 2>err +sed -e "s, ../../src/m4:, m4:," err >sederr && mv sederr err + +$CMP -s out ok && $CMP -s err okerr diff --git a/examples/trace.m4 b/examples/trace.m4 new file mode 100644 index 00000000..a79dbcdd --- /dev/null +++ b/examples/trace.m4 @@ -0,0 +1,30 @@ +divert(-1) + +# move(from, to) +define(`move', `Move one disk from `$1' to `$2'. +') + +# _hanoi (cnt, from, to, aux) +define(`_hanoi', `ifelse(eval(`$1'<=1), 1, `move($2, $3)', +`_hanoi(decr($1), $2, $4, $3)move($2, $3)_hanoi(decr($1), $4, $3, $2)')') + +# hanoi (cnt) +define(`hanoi', `_hanoi(`$1', source, destination, auxilliary)') +divert`'dnl + +# Debugmode t +debugmode(`t') +hanoi(2) + +# Debugmode taeq +debugmode(`taeq') +hanoi(2) + +# Debugmode OFF +debugmode +hanoi(2) + +# Debugmode ae +debugmode(`ae') +traceon(`move', `_hanoi') +hanoi(2) diff --git a/examples/trace.test b/examples/trace.test new file mode 100755 index 00000000..47008f60 --- /dev/null +++ b/examples/trace.test @@ -0,0 +1,96 @@ +#!/bin/sh + +# trace.test is part of the GNU m4 testsuite + +. ${srcdir}/defs + +cat ${srcdir}/trace.m4 >in + +cat <<\EOF >ok + +# Debugmode t + +Move one disk from source to auxilliary. +Move one disk from source to destination. +Move one disk from auxilliary to destination. + + +# Debugmode taeq + +Move one disk from source to auxilliary. +Move one disk from source to destination. +Move one disk from auxilliary to destination. + + +# Debugmode OFF + +Move one disk from source to auxilliary. +Move one disk from source to destination. +Move one disk from auxilliary to destination. + + +# Debugmode ae + + +Move one disk from source to auxilliary. +Move one disk from source to destination. +Move one disk from auxilliary to destination. + +EOF + +cat <<\EOF >okerr +m4trace: -1- hanoi +m4trace: -1- _hanoi +m4trace: -2- eval +m4trace: -1- ifelse +m4trace: -2- decr +m4trace: -1- _hanoi +m4trace: -2- eval +m4trace: -1- ifelse +m4trace: -1- move +m4trace: -1- move +m4trace: -2- decr +m4trace: -1- _hanoi +m4trace: -2- eval +m4trace: -1- ifelse +m4trace: -1- move + +m4trace: -1- hanoi(`2') -> `_hanoi(`2', source, destination, auxilliary)' +m4trace: -1- _hanoi(`2', `source', `destination', `auxilliary') -> `ifelse(eval(`2'<=1), 1, `move(source, destination)', +`_hanoi(decr(2), source, auxilliary, destination)move(source, destination)_hanoi(decr(2), auxilliary, destination, source)')' +m4trace: -2- eval(`2<=1') -> `0' +m4trace: -1- ifelse(`0', `1', `move(source, destination)', `_hanoi(decr(2), source, auxilliary, destination)move(source, destination)_hanoi(decr(2), auxilliary, destination, source)') -> `_hanoi(decr(2), source, auxilliary, destination)move(source, destination)_hanoi(decr(2), auxilliary, destination, source)' +m4trace: -2- decr(`2') -> `1' +m4trace: -1- _hanoi(`1', `source', `auxilliary', `destination') -> `ifelse(eval(`1'<=1), 1, `move(source, auxilliary)', +`_hanoi(decr(1), source, destination, auxilliary)move(source, auxilliary)_hanoi(decr(1), destination, auxilliary, source)')' +m4trace: -2- eval(`1<=1') -> `1' +m4trace: -1- ifelse(`1', `1', `move(source, auxilliary)', `_hanoi(decr(1), source, destination, auxilliary)move(source, auxilliary)_hanoi(decr(1), destination, auxilliary, source)') -> `move(source, auxilliary)' +m4trace: -1- move(`source', `auxilliary') -> `Move one disk from `source' to `auxilliary'. +' +m4trace: -1- move(`source', `destination') -> `Move one disk from `source' to `destination'. +' +m4trace: -2- decr(`2') -> `1' +m4trace: -1- _hanoi(`1', `auxilliary', `destination', `source') -> `ifelse(eval(`1'<=1), 1, `move(auxilliary, destination)', +`_hanoi(decr(1), auxilliary, source, destination)move(auxilliary, destination)_hanoi(decr(1), source, destination, auxilliary)')' +m4trace: -2- eval(`1<=1') -> `1' +m4trace: -1- ifelse(`1', `1', `move(auxilliary, destination)', `_hanoi(decr(1), auxilliary, source, destination)move(auxilliary, destination)_hanoi(decr(1), source, destination, auxilliary)') -> `move(auxilliary, destination)' +m4trace: -1- move(`auxilliary', `destination') -> `Move one disk from `auxilliary' to `destination'. +' +m4trace: -1- debugmode +m4trace: -1- _hanoi(2, source, destination, auxilliary) -> ifelse(eval(`2'<=1), 1, `move(source, destination)', +`_hanoi(decr(2), source, auxilliary, destination)move(source, destination)_hanoi(decr(2), auxilliary, destination, source)') +m4trace: -1- _hanoi(1, source, auxilliary, destination) -> ifelse(eval(`1'<=1), 1, `move(source, auxilliary)', +`_hanoi(decr(1), source, destination, auxilliary)move(source, auxilliary)_hanoi(decr(1), destination, auxilliary, source)') +m4trace: -1- move(source, auxilliary) -> Move one disk from `source' to `auxilliary'. + +m4trace: -1- move(source, destination) -> Move one disk from `source' to `destination'. + +m4trace: -1- _hanoi(1, auxilliary, destination, source) -> ifelse(eval(`1'<=1), 1, `move(auxilliary, destination)', +`_hanoi(decr(1), auxilliary, source, destination)move(auxilliary, destination)_hanoi(decr(1), source, destination, auxilliary)') +m4trace: -1- move(auxilliary, destination) -> Move one disk from `auxilliary' to `destination'. + +EOF + +M4PATH=$srcdir:$srcdir/../tests $M4 -d in >out 2>err +sed -e "s, ../../src/m4:, m4:," err >sederr && mv sederr err +$CMP -s out ok && $CMP -s err okerr diff --git a/examples/translit.m4 b/examples/translit.m4 new file mode 100644 index 00000000..078d1726 --- /dev/null +++ b/examples/translit.m4 @@ -0,0 +1,8 @@ +# traceon(`translit')dnl +translit(`GNUs not Unix', `a-z') +translit(`GNUs not Unix', `a-z', `A-Z') +translit(`GNUs not Unix', `A-Z', `a-z') +translit(`GNUs not Unix', `A-Z') +translit(`a-z', `a-') +translit(`A-Z', `A-Z-', `-A-Z') +translit(`GNUs not Unix', `Z-A', `a-z') diff --git a/examples/translit.test b/examples/translit.test new file mode 100755 index 00000000..92acfb62 --- /dev/null +++ b/examples/translit.test @@ -0,0 +1,22 @@ +#!/bin/sh + +# translit.test is part of the GNU m4 testsuite + +. ${srcdir}/defs + +cat ${srcdir}/translit.m4 >in + +cat <<\EOF >ok +# traceon(`translit')dnl +GNU U +GNUS NOT UNIX +gnus not unix +s not nix +z +-ZY +tmfs not fnix +EOF + +M4PATH=$srcdir:$srcdir/../tests $M4 -d in >out 2>err +sed -e "s, ../../src/m4:, m4:," err >sederr && mv sederr err +$CMP -s out ok diff --git a/examples/undivert.incl b/examples/undivert.incl new file mode 100644 index 00000000..408e0e20 --- /dev/null +++ b/examples/undivert.incl @@ -0,0 +1 @@ +This is to be undiverted soon. diff --git a/examples/undivert.m4 b/examples/undivert.m4 new file mode 100644 index 00000000..61dfb391 --- /dev/null +++ b/examples/undivert.m4 @@ -0,0 +1,5 @@ +define(`undiverted', `UNDIVERTED') +# undiverted file. +undivert(`undivert.incl') +# included file. +include(`undivert.incl') diff --git a/examples/undivert.test b/examples/undivert.test new file mode 100755 index 00000000..6814a732 --- /dev/null +++ b/examples/undivert.test @@ -0,0 +1,21 @@ +#!/bin/sh + +# undivert.test is part of the GNU m4 testsuite + +. ${srcdir}/defs + +cat ${srcdir}/undivert.m4 >in + +cat <<\EOF >ok + +# undiverted file. +This is to be undiverted soon. + +# included file. +This is to be UNDIVERTED soon. + +EOF + +M4PATH=$srcdir:$srcdir/../tests $M4 -d in >out 2>err +sed -e "s, ../../src/m4:, m4:," err >sederr && mv sederr err +$CMP -s out ok diff --git a/examples/wrap.m4 b/examples/wrap.m4 new file mode 100644 index 00000000..bbe7ae0b --- /dev/null +++ b/examples/wrap.m4 @@ -0,0 +1,10 @@ +divert(-1) +m4wrap(`Wrapper no. 1 +') + +m4wrap(`Wrapper no. 2 +m4wrap(`Wrapper no. 3 +m4wrap(`Wrapper no. 4 +')')') +divert +No. 33: The End. diff --git a/examples/wrap.test b/examples/wrap.test new file mode 100755 index 00000000..a6bba3c2 --- /dev/null +++ b/examples/wrap.test @@ -0,0 +1,22 @@ +#!/bin/sh + +# wrap.test is part of the GNU m4 testsuite + +. ${srcdir}/defs + +cat <<\EOF >in +include(wrap.m4)dnl +EOF + +cat <<\EOF >ok + +No. 33: The End. +Wrapper no. 2 +Wrapper no. 1 +Wrapper no. 3 +Wrapper no. 4 +EOF + +M4PATH=$srcdir $M4 -d in >out + +$CMP -s out ok |