supp-ran.mkxl /size: 3661 b    last modification: 2021-10-28 13:51
1%D \module
2%D   [       file=supp-ran,
3%D        version=2008-10-31,
4%D          title=\CONTEXT\ Support Macros,
5%D       subtitle=Random Number Generation,
6%D         author=Hans Hagen,
7%D           date=\currentdate,
8%D      copyright={PRAGMA ADE \& \CONTEXT\ Development Team}]
9%C
10%C This module is part of the \CONTEXT\ macro||package and is
11%C therefore copyrighted by \PRAGMA. See mreadme.pdf for
12%C details.
13
14\writestatus{loading}{ConTeXt Support Macros / Random Number Generation}
15
16%D This module is downward compatible in the sense that we've kept the user
17%D interface (which uses intermediate variables).
18%D
19%D \starttyping
20%D                   \type{new}: \dorecurse{10}{\randomnumber{1}{100} }\par
21%D \setrandomseed{24}\type{set}: \dorecurse{10}{\randomnumber{1}{100} }\par
22%D \setrandomseed{24}\type{set}: \dorecurse{10}{\randomnumber{1}{100} }\par
23%D \setrandomseed{24}\type{set}: \dorecurse{10}{\randomnumber{1}{100} }\par
24%D \pushrandomseed   \type{new}: \dorecurse{10}{\randomnumber{1}{100} }\par
25%D \poprandomseed    \type{old}: \dorecurse{10}{\randomnumber{1}{100} }\par
26%D                   \type{new}: \dorecurse{10}{\randomnumber{1}{100} }\par
27%D \stoptyping
28
29\registerctxluafile{supp-ran}{autosuffix}
30
31\unprotect
32
33\permanent\protected\def\getrandomcount #1#2#3{#1=\clf_getrandomnumber\numexpr#2\relax\numexpr#3\relax\relax}
34\permanent\protected\def\getrandomdimen #1#2#3{#1=\clf_getrandomdimen\dimexpr#2\relax\dimexpr#3\relax\scaledpoint\relax}
35\permanent\protected\def\getrandomnumber#1#2#3{\edef#1{\clf_getrandomnumber\numexpr#2\relax\numexpr#3\relax}}
36\permanent\protected\def\getrandomfloat #1#2#3{\edef#1{\clf_getrandomfloat\dimexpr#2\relax\dimexpr#3\relax}}
37\permanent\protected\def\setrandomseed      #1{\clf_setrandomseed\numexpr#1\relax}
38\permanent\protected\def\getrandomseed      #1{\edef#1{\clf_getrandomseed}}
39\permanent\protected\def\newrandomseed        {\clf_getrandomseed}
40%permanent\protected\def\pushrandomseed       {\clf_pushrandomseed}
41%permanent\protected\def\poprandomseed        {\clf_poprandomseed}
42%permanent\protected\def\reuserandomseed      {\clf_reuserandomseed} % within push/pop
43
44\aliased\let\freezerandomseed \pushrandomseed
45\aliased\let\defrostrandomseed\poprandomseed
46
47\setnewconstant \mpscaledmax 4095 % for old times sake
48
49\permanent\def\randomnumber  #1#2{\clf_getrandomnumber\numexpr#1\relax\numexpr#2\relax}
50\permanent\def\mprandomnumber    {\clf_getrandomnumber\zerocount\mpscaledmax}
51
52%D \startbuffer
53%D \enabletrackers[system.randomizer.details]
54%D
55%D \newrepeatablerandom\MyRandom {Welcome 2 America}
56%D \newrepeatablerandom\MyRandomN{\randomnumber{0}{1000}}
57%D \newrepeatablerandom\MyRandomM{\randomnumber{0}{1000}}
58%D
59%D \cldcontext{utilities.randomizer.getrepeatableseed()}\par
60%D \cldcontext{utilities.randomizer.getrepeatableseed("default")}\par
61%D \cldcontext{utilities.randomizer.getrepeatableseed("MyRandom")}\par
62%D \cldcontext{utilities.randomizer.getrepeatableseed("MyRandomN")}\par
63%D \cldcontext{utilities.randomizer.getrepeatableseed("MyRandomM")}\par
64%D
65%D \dorecurse{10}{\MyRandom\par}
66%D
67%D \startMPcode
68%D     randomseed := repeatablerandom("MyRandom") ;
69%D     draw image (
70%D         for i=1 upto 10000 :
71%D             draw origin randomized 100 ;
72%D         endfor ;
73%D     ) withpen pencircle scaled 1 ;
74%D \stopMPcode
75%D
76%D \startluacode
77%D     context(utilities.randomizer.getrepeatableseed("MyRandom"))
78%D     context.par()
79%D     local rep = utilities.randomizer.getrepeatable("MyRandom")
80%D     for i=1,5 do
81%D         context(rep())
82%D         context.par()
83%D     end
84%D \stopluacode
85%D \stopbuffer
86%D
87%D \typebuffer \blank \getbuffer \blank
88
89\protect \endinput
90