summaryrefslogtreecommitdiff
path: root/Master/texmf-dist/tex/context/base/supp-ran.tex
diff options
context:
space:
mode:
Diffstat (limited to 'Master/texmf-dist/tex/context/base/supp-ran.tex')
-rw-r--r--Master/texmf-dist/tex/context/base/supp-ran.tex173
1 files changed, 173 insertions, 0 deletions
diff --git a/Master/texmf-dist/tex/context/base/supp-ran.tex b/Master/texmf-dist/tex/context/base/supp-ran.tex
new file mode 100644
index 00000000000..1266c0e0f34
--- /dev/null
+++ b/Master/texmf-dist/tex/context/base/supp-ran.tex
@@ -0,0 +1,173 @@
+%D \module
+%D [ file=supp-ran,
+%D version=1998.01.21,
+%D title=\CONTEXT\ Support Macros,
+%D subtitle=Random Number Generation,
+%D author=Hans Hagen,
+%D date=\currentdate,
+%D copyright={PRAGMA / Hans Hagen \& Ton Otten}]
+%C
+%C This module is part of the \CONTEXT\ macro||package and is
+%C therefore copyrighted by \PRAGMA. See mreadme.pdf for
+%C details.
+
+\writestatus{loading}{Third Party Macros / Random Number Generation}
+
+%D \macros
+%D {getrandomcount, getrandomdimen,
+%D getrandomfloat, getrandomnumber,
+%D setrandomseed, getrandomseed}
+%D
+%D This module load Donald Arseneau's generic file
+%D \type{random.tex}. A small shell is needed because we
+%D redefine some \TEX\ primitives. We also use different names
+%D for the two generators and add an extra one.
+%D
+%D \starttyping
+%D \getrandomcount \countregister {minimum} {maximum}
+%D \getrandomdimen \dimenregister {minimum} {maximum}
+%D \getrandomnumber \macroname {minimum} {maximum}
+%D \getrandomfloat \macroname {minimum} {maximum}
+%D \stoptyping
+%D
+%D Of course the file \type{random.tex} needs to be present.
+%D To prevent name clashes, the \CONTEXT\ distribution
+%D contains a copy in \type {thrd-ran.tex}.
+%D
+%D The randomseed can be set by:
+%D
+%D \starttyping
+%d \setrandomseed{number>0}
+%D \stoptyping
+%D
+%D and get by:
+%D
+%D \starttyping
+%D \getrandomseed\randomseed
+%D \stoptyping
+
+\ifx\nextrandom\undefined
+
+ \readfile{random.tex}
+ {\writestatus{loading}{Donald Arseneau's 'random.tex' (found)}}
+ {\writestatus{loading}{Donald Arseneau's 'random.tex' (not found)}}
+
+ % avoid scratch dimens 0 and 2 (already recoded in third-ran)
+ %
+ % \def\setrandim#1#2#3% dimen register, minimum length, maximum length
+ % {\scratchdimen#2\edef\!!stringa{\number\scratchdimen}%
+ % \scratchdimen#3\edef\!!stringb{\number\scratchdimen}%
+ % \setrannum\ranval\!!stringa\!!stringb
+ % #1\ranval\s!sp\relax}
+
+\fi
+
+\ifx\nextrandom\undefined
+
+ \writestatus{loading}{using fake randomizer}
+
+ \newcount\randomi
+
+ \def\setrandim#1#2#3{\scratchdimen #2\relax#1\scratchdimen }
+ \def\setrannum#1#2#3{\scratchcounter#2\relax#1\scratchcounter}
+
+ \let\nextrandom\relax
+
+% \def\getrandomdimen #1#2#3{\scratchdimen #2\relax#1\scratchdimen }
+% \def\getrandomcount #1#2#3{\scratchcounter#2\relax#1\scratchcounter}
+% \def\getrandomnumber#1#2#3{\edef#1{0}}
+% \def\getrandomfloat #1#2#3{\edef#1{0}}
+% \unexpanded\def\setrandomseed #1{}
+% \unexpanded\def\getrandomseed #1{\edef#1{0}}
+
+% \chardef\randomseedfrozen\zerocount
+
+% \def\freezerandomseed {\global\chardef\randomseedfrozen\plusone }
+% \def\defrostrandomseed{\global\chardef\randomseedfrozen\zerocount}
+
+\fi
+
+\ifx\nextrandom\undefined \endinput \fi
+
+\ifx\normaluniformdeviate\undefined
+
+ \let\verynormalnextrandom\nextrandom
+
+ \def\normalnextrandom
+ {\bgroup
+ \let\time \normaltime
+ \let\day \normalday
+ \let\month\normalmonth
+ \let\year \normalyear
+ \verynormalnextrandom
+ \egroup}
+
+\else
+
+ % Yet untested.
+
+ \writestatus{loading}{using tex's built in randomizer (overloading macro)}
+
+ % For the meaning of the magic number, see \type {thrd-ran.tex}.
+
+ % \def\normalnextrandom
+ % {\setrandomseed\randomi
+ % \global\randomi\normaluniformdeviate2147483647\relax}
+
+ % Taco suggested to use the following alternative because \type
+ % {\normaluniformdeviate} can return a zero (as expected) while
+ % Donalds's alternative has a minimum of~1.
+
+ \beginTEX
+ \def\nextrandom
+ {\normalsetrandomseed\randomi
+ \global\randomi\normaluniformdeviate2147483646%
+ \global\advance\randomi\plusone}
+ \endTEX
+
+ \beginETEX \numexpr
+ \def\nextrandom
+ {\normalsetrandomseed\randomi
+ \global\randomi\numexpr\normaluniformdeviate2147483646+1\relax}
+ \endETEX
+
+ \let\normalnextrandom\nextrandom
+
+\fi
+
+\def\nextrandom
+ {\bgroup
+ \normalnextrandom
+ \gdef\nextrandom{\ifcase\randomseedfrozen\normalnextrandom\fi}%
+ \egroup}
+
+\chardef\randomseedfrozen\zerocount
+
+\def\freezerandomseed
+ {\ifcase\randomseedfrozen
+ \nextrandom \global\chardef\randomseedfrozen\plusone
+ \fi}
+
+\def\defrostrandomseed
+ {\ifcase\randomseedfrozen\else
+ \global\chardef\randomseedfrozen\zerocount \nextrandom
+ \fi}
+
+\let\getrandomcount\setrannum
+\let\getrandomdimen\setrandim
+
+\def\getrandomnumber#1#2#3%
+ {\getrandomcount\scratchcounter{#2}{#3}%
+ \edef#1{\the\scratchcounter}}
+
+\def\getrandomfloat#1#2#3%
+ {\getrandomdimen\scratchdimen{#2\points}{#3\points}%
+ \edef#1{\withoutpt\the\scratchdimen}}
+
+\unexpanded \def\setrandomseed#1%
+ {\randomi#1\relax}
+
+\unexpanded \def\getrandomseed#1%
+ {\edef#1{\number\randomi}}
+
+\endinput