%D \module %D [ file=supp-ran, %D version=2008-10-31, %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 This module is downward compatible in the sense that we've kept the user %D interface (which uses intermediate variables). %D %D \starttyping %D \type{new}: \dorecurse{10}{\randomnumber{1}{100} }\par %D \setrandomseed{24}\type{set}: \dorecurse{10}{\randomnumber{1}{100} }\par %D \setrandomseed{24}\type{set}: \dorecurse{10}{\randomnumber{1}{100} }\par %D \setrandomseed{24}\type{set}: \dorecurse{10}{\randomnumber{1}{100} }\par %D \pushrandomseed \type{new}: \dorecurse{10}{\randomnumber{1}{100} }\par %D \poprandomseed \type{old}: \dorecurse{10}{\randomnumber{1}{100} }\par %D \type{new}: \dorecurse{10}{\randomnumber{1}{100} }\par %D \stoptyping \registerctxluafile{supp-ran}{autosuffix} \unprotect \permanent\protected\def\getrandomcount #1#2#3{#1=\clf_getrandomnumber\numexpr#2\relax\numexpr#3\relax\relax} \permanent\protected\def\getrandomdimen #1#2#3{#1=\clf_getrandomdimen\dimexpr#2\relax\dimexpr#3\relax\scaledpoint\relax} \permanent\protected\def\getrandomnumber#1#2#3{\edef#1{\clf_getrandomnumber\numexpr#2\relax\numexpr#3\relax}} \permanent\protected\def\getrandomfloat #1#2#3{\edef#1{\clf_getrandomfloat\dimexpr#2\relax\dimexpr#3\relax}} \permanent\protected\def\setrandomseed #1{\clf_setrandomseed\numexpr#1\relax} \permanent\protected\def\getrandomseed #1{\edef#1{\clf_getrandomseed}} \permanent\protected\def\newrandomseed {\clf_getrandomseed} %permanent\protected\def\pushrandomseed {\clf_pushrandomseed} %permanent\protected\def\poprandomseed {\clf_poprandomseed} %permanent\protected\def\reuserandomseed {\clf_reuserandomseed} % within push/pop \aliased\let\freezerandomseed \pushrandomseed \aliased\let\defrostrandomseed\poprandomseed \setnewconstant \mpscaledmax 4095 % for old times sake \permanent\def\randomnumber #1#2{\clf_getrandomnumber\numexpr#1\relax\numexpr#2\relax} \permanent\def\mprandomnumber {\clf_getrandomnumber\zerocount\mpscaledmax} %D \startbuffer %D \enabletrackers[system.randomizer.details] %D %D \newrepeatablerandom\MyRandom {Welcome 2 America} %D \newrepeatablerandom\MyRandomN{\randomnumber{0}{1000}} %D \newrepeatablerandom\MyRandomM{\randomnumber{0}{1000}} %D %D \cldcontext{utilities.randomizer.getrepeatableseed()}\par %D \cldcontext{utilities.randomizer.getrepeatableseed("default")}\par %D \cldcontext{utilities.randomizer.getrepeatableseed("MyRandom")}\par %D \cldcontext{utilities.randomizer.getrepeatableseed("MyRandomN")}\par %D \cldcontext{utilities.randomizer.getrepeatableseed("MyRandomM")}\par %D %D \dorecurse{10}{\MyRandom\par} %D %D \startMPcode %D randomseed := repeatablerandom("MyRandom") ; %D draw image ( %D for i=1 upto 10000 : %D draw origin randomized 100 ; %D endfor ; %D ) withpen pencircle scaled 1 ; %D \stopMPcode %D %D \startluacode %D context(utilities.randomizer.getrepeatableseed("MyRandom")) %D context.par() %D local rep = utilities.randomizer.getrepeatable("MyRandom") %D for i=1,5 do %D context(rep()) %D context.par() %D end %D \stopluacode %D \stopbuffer %D %D \typebuffer \blank \getbuffer \blank \protect \endinput