diff options
Diffstat (limited to 'tex/context/base/mkii/supp-ran.mkii')
-rw-r--r-- | tex/context/base/mkii/supp-ran.mkii | 122 |
1 files changed, 122 insertions, 0 deletions
diff --git a/tex/context/base/mkii/supp-ran.mkii b/tex/context/base/mkii/supp-ran.mkii new file mode 100644 index 000000000..0a39026bf --- /dev/null +++ b/tex/context/base/mkii/supp-ran.mkii @@ -0,0 +1,122 @@ +%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 ADE \& \CONTEXT\ Development Team}] +%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}{ConTeXt Support 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 + +\input thrd-ran.mkii + +\ifx\uniformdeviate\undefined + + \let\verynormalnextrandom\nextrandom + + \def\normalnextrandom + {\bgroup + \let\time \normaltime + \let\day \normalday + \let\month\normalmonth + \let\year \normalyear + \verynormalnextrandom + \egroup} + +\else + + \writestatus{loading}{using TeX's built in randomizer (overloading macro)} + + % For the meaning of the magic number, see \type {thrd-ran.tex}. + % + % Taco suggested to use the following alternative because \type + % {\uniformdeviate} can return a zero (as expected) while + % Donalds Arseneau's alternative has a minimum of~1. + + \def\nextrandom + {\normalsetrandomseed\randomi\relax + \global\randomi\numexpr\normaluniformdeviate2147483646+1\relax} + + \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% + {\global\randomi#1\relax} % global added + +\unexpanded \def\getrandomseed#1% + {\edef#1{\number\randomi}} + +\def\getnewrandomseed#1% + {\setrandomseed\minusone % signals thrd-ran to auto reseed + \nextrandom % this signal is needed for the + #1\randomi} % pseudo randomizer (see: third-ran) + +\endinput |