summaryrefslogtreecommitdiff
path: root/examples
diff options
context:
space:
mode:
authorJeff Bailey <jbailey@raspberryginger.com>2000-02-17 03:03:19 +0000
committerJeff Bailey <jbailey@raspberryginger.com>2000-02-17 03:03:19 +0000
commitbd11691d6520f7539e7ed2efdf75f266719e27e9 (patch)
tree13d3a4e534f6df846a128af52438769b9f51f09e /examples
downloadm4-bd11691d6520f7539e7ed2efdf75f266719e27e9.tar.gz
Initial revision
Diffstat (limited to 'examples')
-rw-r--r--examples/Makefile.am5
-rw-r--r--examples/Makefile.in60
-rw-r--r--examples/WWW/Makefile18
-rw-r--r--examples/WWW/_footer.htm15
-rw-r--r--examples/WWW/_header.htm234
-rw-r--r--examples/WWW/bugs.htm284
-rw-r--r--examples/WWW/changelog.htm2248
-rw-r--r--examples/WWW/download.htm302
-rw-r--r--examples/WWW/features.htm380
-rw-r--r--examples/WWW/feedback.htm297
-rw-r--r--examples/WWW/index.htm319
-rw-r--r--examples/WWW/lists.htm320
-rw-r--r--examples/WWW/m4lib/bugs.m452
-rw-r--r--examples/WWW/m4lib/changelog.m418
-rw-r--r--examples/WWW/m4lib/download.m421
-rw-r--r--examples/WWW/m4lib/features.m462
-rw-r--r--examples/WWW/m4lib/feedback.m420
-rw-r--r--examples/WWW/m4lib/html.m4119
-rw-r--r--examples/WWW/m4lib/index.m436
-rw-r--r--examples/WWW/m4lib/layout.m450
-rw-r--r--examples/WWW/m4lib/lists.m432
-rw-r--r--examples/WWW/m4lib/menu.m435
-rw-r--r--examples/WWW/m4lib/modules.m418
-rw-r--r--examples/WWW/m4lib/news.m418
-rw-r--r--examples/WWW/m4lib/readme.m418
-rw-r--r--examples/WWW/m4lib/setup.m47
-rw-r--r--examples/WWW/m4lib/test.m49
-rw-r--r--examples/WWW/m4lib/thanks.m418
-rw-r--r--examples/WWW/m4lib/thissite.m439
-rw-r--r--examples/WWW/m4lib/tmpl.m411
-rw-r--r--examples/WWW/m4lib/todo.m418
-rw-r--r--examples/WWW/m4lib/uses.m436
-rw-r--r--examples/WWW/m4lib/visions.m428
-rw-r--r--examples/WWW/m4lib/whatis.m443
-rw-r--r--examples/WWW/modules.htm347
-rw-r--r--examples/WWW/news.htm551
-rw-r--r--examples/WWW/readme.htm329
-rw-r--r--examples/WWW/thanks.htm377
-rw-r--r--examples/WWW/thissite.htm327
-rw-r--r--examples/WWW/todo.htm388
-rw-r--r--examples/WWW/uses.htm322
-rw-r--r--examples/WWW/visions.htm309
-rw-r--r--examples/WWW/whatis.htm327
-rw-r--r--examples/capitalize.m48
-rwxr-xr-xexamples/capitalize.test21
-rw-r--r--examples/comments.m47
-rwxr-xr-xexamples/comments.test24
-rw-r--r--examples/ddivert.m44
-rwxr-xr-xexamples/ddivert.test18
-rw-r--r--examples/debug.m44
-rwxr-xr-xexamples/debug.test33
-rw-r--r--examples/defs54
-rw-r--r--examples/esyscmd.m45
-rwxr-xr-xexamples/esyscmd.test18
-rw-r--r--examples/exp.m41
-rwxr-xr-xexamples/exp.test23
-rw-r--r--examples/file.m45
-rw-r--r--examples/foreach.m419
-rwxr-xr-xexamples/foreach.test28
-rw-r--r--examples/forloop.m48
-rwxr-xr-xexamples/forloop.test26
-rw-r--r--examples/fstab.m47
-rwxr-xr-xexamples/fstab.test21
-rw-r--r--examples/hanoi.m415
-rwxr-xr-xexamples/hanoi.test23
-rw-r--r--examples/incl-test.m42
-rw-r--r--examples/include.m47
-rwxr-xr-xexamples/include.test28
-rw-r--r--examples/indir.m410
-rwxr-xr-xexamples/indir.test24
-rw-r--r--examples/iso8859.m4bin0 -> 1146 bytes
-rwxr-xr-xexamples/iso8859.test33
-rw-r--r--examples/misc.m49
-rwxr-xr-xexamples/misc.test17
-rw-r--r--examples/mktests.sh65
-rw-r--r--examples/multiquotes.m417
-rwxr-xr-xexamples/multiquotes.test47
-rw-r--r--examples/patsubst.m48
-rwxr-xr-xexamples/patsubst.test26
-rw-r--r--examples/pushpop.m425
-rwxr-xr-xexamples/pushpop.test28
-rw-r--r--examples/regexp.m412
-rwxr-xr-xexamples/regexp.test39
-rw-r--r--examples/reverse.m44
-rwxr-xr-xexamples/reverse.test20
-rw-r--r--examples/stackovf.sh83
-rw-r--r--examples/sync-lines.m411
-rw-r--r--examples/sysv-args.m414
-rwxr-xr-xexamples/sysv-args.test53
-rw-r--r--examples/trace.m430
-rwxr-xr-xexamples/trace.test96
-rw-r--r--examples/translit.m48
-rwxr-xr-xexamples/translit.test22
-rw-r--r--examples/undivert.incl1
-rw-r--r--examples/undivert.m45
-rwxr-xr-xexamples/undivert.test21
-rw-r--r--examples/wrap.m410
-rwxr-xr-xexamples/wrap.test22
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 &lt;rene@seindal.dk&gt;
+
+ * 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 &lt;rene@seindal.dk&gt;
+
+ * 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 &lt;bfox@datawave.net&gt;. 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 &lt;rene@seindal.dk&gt;
+
+ * 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 &lt;rene@seindal.dk&gt;
+
+ * 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 &lt;rene@seindal.dk&gt;
+
+ * 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 &lt;rene@seindal.dk&gt;
+
+ * 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 &lt;rene@seindal.dk&gt;
+
+ * Prerelease 1.4i.
+
+ * configure.in (ALL_LINGUAS): Added Polish pl.po
+
+1998-10-03 René Seindal &lt;rene@seindal.dk&gt;
+
+ * 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
+ &lt;dlfcn.h&gt; and -ldl.
+
+ * acconfig.h: Added WITH_MODULES
+
+1998-10-02 René Seindal &lt;rene@seindal.dk&gt;
+
+ * 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 &lt;Erick.Branderhorst@asml.nl&gt;
+
+ * examples/{comments,ddivert,debug,iso8859,reverse,sysv-args,\
+ wrap}.test: Added a few testcases.
+
+1998-08-21 Erick Branderhorst &lt;Erick.Branderhorst@asml.nl&gt;
+
+ * 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 &lt;Erick.Branderhorst@asml.nl&gt;
+
+ * 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 &lt;Erick.Branderhorst@asml.nl&gt;
+
+ * 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 &lt;rene@seindal.dk&gt;
+
+ * 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 &lt;rene@seindal.dk&gt;
+
+ * 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 &lt;rene@seindal.dk&gt;
+
+ * 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 &lt;mike@clove.com&gt;
+
+1998-08-06 René Seindal &lt;rene@seindal.dk&gt;
+
+ * gettext.m4: corrected AM_WITH_NLS to handle use of installed
+ -lintl.
+
+1998-08-03 René Seindal &lt;rene@seindal.dk&gt;
+
+ * Prerelease 1.4e
+
+ * src/m4.h: Added ifdef ENABLE_NLS around include of &lt;libintl.h&gt;
+ 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 &lt;Erick.Branderhorst@asml.nl&gt;
+
+ * Prerelease 1.4d.
+
+ * src/m4.c: #include &lt;signal.h&gt; not &lt;sys/signal.h&gt;.
+
+ * 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 &lt;pinard@iro.umontreal.ca&gt;
+
+ * 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 &lt;pinard@iro.umontreal.ca&gt;
+
+ * configure.in: Check for &lt;libintl.h&gt; and &lt;locale.h&gt;.
+ * 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 &lt;libintl.h&gt; and declare _ as gettext.
+ * src/m4.c: Possibly include &lt;locale.h&gt; 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 &lt;pinard@iro.umontreal.ca&gt;
+
+ * 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 &lt;pinard@iro.umontreal.ca&gt;
+
+ * Release 1.4.
+
+ * doc/Makefile.in (realclean): Also remove stamp-vti.
+ Reported by Eric Backus.
+
+1994-11-02 François Pinard &lt;pinard@iro.umontreal.ca&gt;
+
+ * 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 &lt;pinard@iro.umontreal.ca&gt;
+
+ * 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 &lt;pinard@iro.umontreal.ca&gt;
+
+ * 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 &lt;pinard@iro.umontreal.ca&gt;
+
+ * 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 &lt;pinard@iro.umontreal.ca&gt;
+
+ * 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 &lt;pinard@iro.umontreal.ca&gt;
+
+ * 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 &lt;pinard@iro.umontreal.ca&gt;
+
+ * 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 &lt;pinard@iro.umontreal.ca&gt;
+
+ * src/m4.h: Get rid of CONFIG_BROKETS.
+
+1994-10-02 François Pinard &lt;pinard@iro.umontreal.ca&gt;
+
+ * 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 &lt;pinard@iro.umontreal.ca&gt;
+
+ * 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 &lt;pinard@iro.umontreal.ca&gt;
+
+ * 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 &lt;pinard@iro.umontreal.ca&gt;
+
+ * src/Makefile.in (TAGS): Include a ../lib/TAGS reference.
+ Reported by Karl Berry.
+
+1994-09-14 François Pinard &lt;pinard@iro.umontreal.ca&gt;
+
+ * 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 &lt;pinard@iro.umontreal.ca&gt;
+
+ * 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 &lt;pinard@iro.umontreal.ca&gt;
+
+ * configure.in: Use fp_ to match aclocal.m4. Revert _OS_ macros
+ to old names, for following Autoconf.
+
+1994-09-08 François Pinard &lt;pinard@iro.umontreal.ca&gt;
+
+ * 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 &lt;pinard@iro.umontreal.ca&gt;
+
+ * 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 &lt;pinard@iro.umontreal.ca&gt;
+
+ * lib/Makefile.in (install): Depend on all.
+
+1994-08-31 François Pinard &lt;pinard@iro.umontreal.ca&gt;
+
+ * 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 &lt;pinard@iro.umontreal.ca&gt;
+
+ * 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 &lt;pinard@iro.umontreal.ca&gt;
+
+ * m4.h: Include &lt;unistd.h&gt; 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 &lt;pinard@iro.umontreal.ca&gt;
+
+ * Makefile.in, lib/Makefile.in, checks/Makefile.in: Arrange so
+ dist works from another build directory.
+
+1994-08-27 François Pinard &lt;pinard@iro.umontreal.ca&gt;
+
+ * 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 &lt;pinard@iro.umontreal.ca&gt;
+
+ * 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 &lt;pinard@iro.umontreal.ca&gt;
+
+ * m4.c (long_options): Use "error-output", the dash was missing.
+ Reported by Akiko Matsushita.
+
+1994-08-12 François Pinard &lt;pinard@iro.umontreal.ca&gt;
+
+ * m4.h: Include &lt;sys/types.h&gt;.
+ * 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 &lt;pinard@iro.umontreal.ca&gt;
+
+ * 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 &lt;pinard@iro.umontreal.ca&gt;
+
+ * m4.c (usage): Replace printf par fputs.
+
+1994-07-18 François Pinard &lt;pinard@iro.umontreal.ca&gt;
+
+ * Release 1.2
+
+1994-07-17 François Pinard &lt;pinard@iro.umontreal.ca&gt;
+
+ * 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 &lt;pinard@iro.umontreal.ca&gt;
+
+ * ansi2knr.c: New version sent by its author, Peter Deutsch.
+
+1994-07-15 François Pinard &lt;pinard@iro.umontreal.ca&gt;
+
+ * 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 &lt;pinard@iro.umontreal.ca&gt;
+
+ * 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 &lt;pinard@iro.umontreal.ca&gt;
+
+ * 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 &lt;pinard@iro.umontreal.ca&gt;
+
+ * 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 &lt;jima@netcom.com&gt;
+
+ * 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 &lt;pinard@iro.umontreal.ca&gt;
+
+ * 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 &lt;pinard@iro.umontreal.ca&gt;
+
+ * 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 &lt;pinard@iro.umontreal.ca&gt;
+
+ * 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 &lt;pinard@iro.umontreal.ca&gt;
+
+ * 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 &lt;pinard@iro.umontreal.ca&gt;
+
+ * 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 &lt;pinard@iro.umontreal.ca&gt;
+
+ * 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 &lt;pinard@iro.umontreal.ca&gt;
+
+ * 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 &lt;pinard@iro.umontreal.ca&gt;
+
+ * configure.in: Avoid USE_STACKOVF if &lt;siginfo.h&gt; 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 &lt;pinard@iro.umontreal.ca&gt;
+
+ * m4.h (_): Change argument from `x' to `Args'.
+
+1994-04-22 François Pinard &lt;pinard@iro.umontreal.ca&gt;
+
+ * m4.h: Rename Args() to _().
+ * m4.h: Remove extern specifier from all function declarations.
+
+1994-04-22 Jim Avera &lt;jima@netcom.com&gt;
+
+ * 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 &lt;pinard@iro.umontreal.ca&gt;
+
+ * checks/Makefile.in: Rename .all-stamp to stamp-checks.
+
+ * Makefile.in (Makefile, etc.): Adapt for Autoconf 1.8.
+
+1994-01-30 &lt;pinard@iro.umontreal.ca&gt;
+
+ * 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 &lt;memory.h&gt; together with &lt;string.h&gt;.
+ Reported by Jim Meyering.
+
+1994-01-25 François Pinard &lt;pinard@iro.umontreal.ca&gt;
+
+ * 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 &lt;pinard@iro.umontreal.ca&gt;
+
+ * 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 &lt;pinard@iro.umontreal.ca&gt;
+
+ * Makefile.in: Do not define LDFLAGS, use CFLAGS on link calls.
+ Reported by Richard Stallman.
+
+1993-12-25 François Pinard &lt;pinard@iro.umontreal.ca&gt;
+
+ * 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 &lt;pinard@iro.umontreal.ca&gt;
+
+ * 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 &lt;pinard@iro.umontreal.ca&gt;
+
+ * 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 &lt;pinard@iro.umontreal.ca&gt;
+
+ * 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 &lt;pinard@iro.umontreal.ca&gt;
+
+ * 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 &lt;pinard@iro.umontreal.ca&gt;
+
+ * m4.c: Include &lt;getopt.h&gt; 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 &lt;config.h&gt; 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 &lt;pinard@iro.umontreal.ca&gt;
+
+ * 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 &lt;varargs.h&gt;.
+ * debug.c: Include &lt;stdarg.h&gt; or &lt;varargs.h&gt;.
+ (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 &lt;pinard@iro.umontreal.ca&gt;
+
+ * 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 &lt;pinard@iro.umontreal.ca&gt;
+
+ * 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 &lt;pinard@iro.umontreal.ca&gt;
+
+ * 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 &lt;pinard@iro.umontreal.ca&gt;
+
+ * 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 &lt;pinard@iro.umontreal.ca&gt;
+
+ * 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 &lt;pinard@iro.umontreal.ca&gt;
+
+ * lib/Makefile.in (dist): Correct permissions on files.
+
+ * output.c: Declare tmpfile, some systems don't.
+
+1993-11-03 François Pinard &lt;pinard@iro.umontreal.ca&gt;
+
+ * 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 &lt;pinard@iro.umontreal.ca&gt;
+
+ * 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 &lt;string.h&gt; 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 &lt;pinard@iro.umontreal.ca&gt;
+
+ * 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: ~, ^, &lt;&lt;, &gt;&gt;.
+ 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 &lt;pinard@iro.umontreal.ca&gt;
+
+ * Makefile.in (m4.info): Use -I$(srcdir) on $(MAKEINFO).
+ Reported by Noah Friedman.
+
+1993-10-25 François Pinard &lt;pinard@iro.umontreal.ca&gt;
+
+ * Makefile.in: Remove MDEFINES and cleanup.
+
+1993-06-09 François Pinard &lt;pinard@iro.umontreal.ca&gt;
+
+ * Makefile.in (dist): Replace "echo `pwd`" by a mere "pwd".
+ Create a gzip file.
+
+1993-02-06 François Pinard &lt;pinard@iro.umontreal.ca&gt;
+
+ * 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 &lt;pinard@iro.umontreal.ca&gt;
+
+ * 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 &lt;pinard@iro.umontreal.ca&gt;
+
+ * 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 &lt;pinard@iro.umontreal.ca&gt;
+
+ * Makefile.in, lib/Makefile.in: Reinstate $(CPPFLAGS), use it.
+ Richard wants it there.
+
+1992-12-27 François Pinard &lt;pinard@iro.umontreal.ca&gt;
+
+ * 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 &lt;pinard@iro.umontreal.ca&gt;
+
+ * 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 &lt;pinard@iro.umontreal.ca&gt;
+
+ * 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 &lt;pinard@iro.umontreal.ca&gt;
+
+ * 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 &lt;pinard@iro.umontreal.ca&gt;
+
+ * 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 &lt;meyering@idefix&gt;
+
+ * 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 &lt;pinard@iro.umontreal.ca&gt;
+
+ * *.[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 &lt;pinard@iro.umontreal.ca&gt;
+
+ * 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 &lt;meyering@idefix&gt;
+
+ * 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 &lt;pinard@iro.umontreal.ca&gt;
+
+ * *.[ch]: Rename nil to NULL, using the declaration from &lt;stdio.h&gt;,
+ 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 &lt;pinard@iro.umontreal.ca&gt;
+
+ * m4.h: Remove the tag `boolean' on the enum introducing typedef
+ `boolean'. This tag conflicts with &lt;sys/types.h&gt; on SVR4.
+ Reported by Tom McConnell.
+
+1992-11-13 François Pinard &lt;pinard@iro.umontreal.ca&gt;
+
+ * 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 &lt;pinard@iro.umontreal.ca&gt;
+
+ * 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 &lt;errno.h&gt; and
+ ensure that it does not define errno.
+ Reported by Richard Stallman.
+
+1992-11-11 François Pinard &lt;pinard@iro.umontreal.ca&gt;
+
+ * 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 &lt;pinard@iro.umontreal.ca&gt;
+
+ * 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 &lt;sys/types.h&gt; 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 &lt;pinard@iro.umontreal.ca&gt;
+
+ * 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 &lt;pinard@iro.umontreal.ca&gt;
+
+ * 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 &lt;pinard@iro.umontreal.ca&gt;
+
+ * 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 &lt;pinard@iro.umontreal.ca&gt;
+
+ * 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 &lt;pinard@iro.umontreal.ca&gt;
+
+ * 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 &lt;seindal@diku.dk&gt;
+
+ * 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 &lt;seindal@diku.dk&gt;
+
+ * 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 &lt;seindal@diku.dk&gt;
+
+ * 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 &lt;seindal@diku.dk&gt;
+
+ * 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.&nbsp; 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.&nbsp; 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.&nbsp; 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.&nbsp; 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([<], [&lt;]);
+\define([>], [&gt;]);
+
+\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 &lt;ctype.h&gt;, &lt;stdio.h&gt;,
+../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"
+ &lt;bfox@datawave.net&gt;, 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, `&lt;&lt;' and `&gt;&gt;' 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 &lt;bug-m4@gnu.org&gt; 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 &lt;pinard@iro.umontreal.ca&gt; 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 &lt;krste@icsi.berkeley.edu&gt;, 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 &lt;vern@horse.ee.lbl.gov&gt; 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 &lt;djm@eng.umd.edu&gt;, 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 &lt;ohl@chico.harvard.edu&gt;, 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 &lt;hrp@ironwood.cray.com&gt;, 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
new file mode 100644
index 00000000..4ac1d196
--- /dev/null
+++ b/examples/iso8859.m4
Binary files differ
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