while
-----
`gtroff' provides a looping construct using the `while' request,
which is used much like the `if' (and related) requests.
- Request: .while expr anything
Evaluate the expression EXPR, and repeatedly execute ANYTHING (the
remainder of the line) until EXPR evaluates to 0.
.nr a 0 1
.while (\na < 9) \{\
\n+a,
.\}
\n+a
=> 1, 2, 3, 4, 5, 6, 7, 8, 9, 10
Some remarks.
* The body of a `while' request is treated like the body of a
`de' request: `gtroff' temporarily stores it in a macro which
is deleted after the loop has been exited. It can
considerably slow down a macro if the body of the `while'
request (within the macro) is large. Each time the macro is
executed, the `while' body is parsed and stored again as a
temporary macro.
.de xxx
. nr num 10
. while (\\n[num] > 0) \{\
. \" many lines of code
. nr num -1
. \}
..
The traditional and ofter better solution (UNIX `troff'
doesn't have the `while' request) is to use a recursive macro
instead which is parsed only once during its definition.
.de yyy
. if (\\n[num] > 0) \{\
. \" many lines of code
. nr num -1
. yyy
. \}
..
.
.de xxx
. nr num 10
. yyy
..
Note that the number of available recursion levels is set
to 1000 (this is a compile-time constant value of `gtroff').
* The closing brace of a `while' body must end a line.
.if 1 \{\
. nr a 0 1
. while (\n[a] < 10) \{\
. nop \n+[a]
.\}\}
=> unbalanced \{ \}
- Request: .break
Break out of a `while' loop. Be sure not to confuse this with the
`br' request (causing a line break).
- Request: .continue
Finishes the current iteration of a `while' loop, immediately
restarting the next iteration.
Note:Expressions.
automatically generated byinfo2wwwversion 1.2.2.9