diff options
Diffstat (limited to 'Master/texmf-dist/tex/generic/midnight/loop.tex')
-rw-r--r-- | Master/texmf-dist/tex/generic/midnight/loop.tex | 105 |
1 files changed, 105 insertions, 0 deletions
diff --git a/Master/texmf-dist/tex/generic/midnight/loop.tex b/Master/texmf-dist/tex/generic/midnight/loop.tex new file mode 100644 index 00000000000..aa6670f14ea --- /dev/null +++ b/Master/texmf-dist/tex/generic/midnight/loop.tex @@ -0,0 +1,105 @@ +\ifx\LOOP\relax\endinput\else\let\LOOP=\relax\fi % \input only once +% +% loop.tex: A simple looping construct (meta-macros). +% version: 1.0 release: 26 June 1991 +% +% copyright (c) 1991 Marcel R. van der Goot +% You can use these macros to typeset documents. You may +% distribute this file freely, provided that you also distribute +% the accompanying documentation. +% You may make changes to this file, or extract portions +% of it for inclusion in other files, provided that +% (1) you change the name of the file; +% (2) you give proper credit and include copyright +% information where applicable; +% (3) explain how an unchanged version can be obtained; and +% (4) document the usage of your macros/changes (if usage +% of your macros is not worth documenting, they must not +% be worth using). +% You are not allowed to use the name ``Midnight Macros'' for +% any changed files. +% The above rules for making changes do not apply where it +% is explicitly noted in this file that something can be changed +% to conform to your local installation. +% +% USAGE: +% See the file loop.doc +% +% original: csvax.cs.caltech.edu [131.215.131.131] in pub/tex +% (use anonymous ftp). Also in various archives. +% +% Caltech, Pasadena --- Marcel van der Goot +% marcel@cs.caltech.edu +% Caltech 256--80 +% Pasadena, CA 91125 +% USA +% (818) 356--4603 +% + +% update history: +% version 1.0: This one. +% release 26 April 1991: This one. +% release 15 April 1991: Did not have \long in \Loop, \_break, and +% \_continue. +% release 8 Feb 1991: Used \next instead of \Lp_next. +% + +%%%%%% CODE: (you don't need to read this to use the macros) + +{ +\catcode`\_=11 % 11 = letter; to make macros private +\globaldefs=1 + +% Code to supply \fi's: + +\def\do_fi{\fi\finish_ifs} + +\def\finish_ifs + {\ifnum\count255>0 % + \let\Lp_next=\do_fi + \else\let\Lp_next=\relax + \fi + \advance\count255 by-1 % + \Lp_next + } + +% The loop (tail-recursion does not clog memory): + +\long\def\Loop#1\Pool% + {\def\Pool{#1\Pool}% + \Pool + } + +% \Break could have been defined as +% \def\Break#1#2\Pool{{\count255=#1 \finish_ifs}} +% but this fails if you do +% \ifnum\count0>5\Break +% without space after the 5: \Break wil be expanded to see if there +% are more digits (and expanding \Break means reading its 2nd argument). +% With the solution below, only \Break is expanded because it starts +% with \relax which is not a number. Using \afterassignment rather +% than passing the number as argument gives better error messages. + +\def\Break + {\relax\afterassignment\_break + \bgroup\count255= + } + +\long\def\_break#1\Pool% + {\finish_ifs + \egroup + } + +\def\Continue + {\relax\afterassignment\_continue + \bgroup\count255= + } + +\long\def\_continue#1\Pool% + {\finish_ifs + \egroup + \Pool + } + +} % restore \catcode`\_, \globaldefs + |