Work on file usr/src/cmd/apl/af.c
Synthesized-from: CSRG/cd1/4.1.snap
--- /dev/null
+#include "apl.h"
+
+ex_deal()
+{
+ register struct item *p;
+ register m, n;
+ double f;
+ data d1, d2;
+
+ m = topfix();
+ n = topfix();
+ if(m < 0 || m > n)
+ error("deal D");
+ p = newdat(DA, 1, m);
+ datum = thread.iorg;
+ for(; n!=0; n--) {
+ f = m;
+ f /= n;
+ if(rand()/(32768.*32768.*2.) < f) {
+ putdat(p, datum);
+ m--;
+ }
+ datum += one;
+ }
+ m = p->size;
+ while(m > 0) {
+ f = rand()/(32768.*32768.*2.);
+ n = m * f;
+ m--;
+ if(n != m) {
+ p->index = n;
+ d1 = getdat(p);
+ p->index = m;
+ d2 = getdat(p);
+ p->index = n;
+ putdat(p, d2);
+ p->index = m;
+ putdat(p, d1);
+ }
+ }
+ push(p);
+}