summaryrefslogtreecommitdiff
path: root/Master/texmf-dist/tex/generic/midnight/loop.tex
diff options
context:
space:
mode:
Diffstat (limited to 'Master/texmf-dist/tex/generic/midnight/loop.tex')
-rw-r--r--Master/texmf-dist/tex/generic/midnight/loop.tex105
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
+