summaryrefslogtreecommitdiff
path: root/examples
diff options
context:
space:
mode:
authorEric Blake <ebb9@byu.net>2006-10-19 16:19:20 +0000
committerEric Blake <ebb9@byu.net>2007-10-06 07:07:07 -0600
commitb9d7924e31f56d22f9348c7ea7ee29b9f5feff26 (patch)
tree196347d7cec4f08e15bdb2242af4dfec374f958b /examples
parent4f67b8f64e56cca016a57ea7e637417ac9e83a37 (diff)
downloadm4-b9d7924e31f56d22f9348c7ea7ee29b9f5feff26.tar.gz
* tests/generate.awk: For ease of doc-writing, simplify selection
of '-Ipath/to/examples' to '@comment examples'. * examples/forloop.m4: Simplify. * examples/forloop2.m4: New file. * examples/quote.m4: New file. * doc/m4.texinfo (Improved forloop): New node. (Manual): Clarify use of examples directory. (Shift, Forloop): Resync from branch. (Include, Location): Update to new usage of examples directory.
Diffstat (limited to 'examples')
-rw-r--r--examples/forloop.m414
-rw-r--r--examples/forloop2.m412
-rw-r--r--examples/quote.m49
3 files changed, 26 insertions, 9 deletions
diff --git a/examples/forloop.m4 b/examples/forloop.m4
index 74d69d23..fdca2608 100644
--- a/examples/forloop.m4
+++ b/examples/forloop.m4
@@ -1,10 +1,6 @@
-divert(-1)
-# forloop(i, from, to, stmt)
-
-define(`forloop', `pushdef(`$1', `$2')_forloop(`$1', `$2', `$3', `$4')popdef(`$1')')
+divert(`-1')
+# forloop(var, from, to, stmt) - simple version
+define(`forloop', `pushdef(`$1', `$2')_forloop($@)popdef(`$1')')
define(`_forloop',
- `$4`'ifelse($1, `$3', ,
- `define(`$1', incr($1))_forloop(`$1', `$2', `$3', `$4')')')
-divert
-forloop(`x', 1, 10, `2**x = eval(2**x)
-')
+ `$4`'ifelse($1, `$3', `', `define(`$1', incr($1))$0($@)')')
+divert`'dnl
diff --git a/examples/forloop2.m4 b/examples/forloop2.m4
new file mode 100644
index 00000000..f1bdf0ef
--- /dev/null
+++ b/examples/forloop2.m4
@@ -0,0 +1,12 @@
+divert(`-1')
+# forloop(var, from, to, stmt) - improved version:
+# works even if VAR is not a strict macro name
+# performs sanity check that FROM is larger than TO
+# allows complex numerical expressions in TO and FROM
+define(`forloop', `ifelse(eval(`($3) >= ($2)'), `1',
+ `pushdef(`$1', eval(`$2'))_forloop(`$1',
+ eval(`$3'), `$4')popdef(`$1')')')
+define(`_forloop',
+ `$3`'ifelse(indir(`$1'), `$2', `',
+ `define(`$1', incr(indir(`$1')))$0($@)')')
+divert`'dnl
diff --git a/examples/quote.m4 b/examples/quote.m4
new file mode 100644
index 00000000..fae52c3e
--- /dev/null
+++ b/examples/quote.m4
@@ -0,0 +1,9 @@
+divert(`-1')
+# quote(args) - convert args to single-quoted string
+define(`quote', `ifelse(`$#', `0', `', ``$*'')')
+# dquote(args) - convert args to quoted list of quoted strings
+define(`dquote', ``$@'')
+# dquote_elt(args) - convert args to list of double-quoted strings
+define(`dquote_elt', `ifelse(`$#', `0', `', `$#', `1', ```$1''',
+ ```$1'',$0(shift($@))')')
+divert`'dnl