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({($2) <= ($3)}), {1},
  {pushdef({$1})_$0({$1}, eval({$2}),
    eval({$3}), {$4})popdef({$1})})})
define({_forloop},
  {define({$1}, {$2})$4{}ifelse({$2}, {$3}, {},
    {$0({$1}, incr({$2}), {$3}, {$4})})})
divert{}dnl
