// Test main #90 = Time_Tick // seed for random number generator #99 = 20 // number of items in the array IT("Before:") IN for (#100 = 0; #100 < #99; #100++) { #@100 = #100 Num_Ins(#@100, LEFT+NOCR) IT(" ") } IN Call("SHUFFLE_NUMBERS") IT("After:") IN for (#100 = 0; #100 < #99; #100++) { Num_Ins(#@100, LEFT+NOCR) IT(" ") } IN Return //-------------------------------------------------------------- // Shuffle numeric registers #0 to #nn // #99 = number of registers to shuffle (nn-1) // :SHUFFLE_NUMBERS: for (#91 = #99-1; #91 > 0; #91--) { Call("RANDOM") #101 = Return_Value #102 = #@101; #@101 = #@91; #@91 = #102 } Return //-------------------------------------------------------------- // Generate random numbers in range 0 <= Return_Value < #91 // #90 = Seed (0 to 0x7fffffff) // #91 = Scaling (0 to 0x10000) // :RANDOM: #92 = 0x7fffffff / 48271 #93 = 0x7fffffff % 48271 #90 = (48271 * (#90 % #92) - #93 * (#90 / #92)) & 0x7fffffff Return ((#90 & 0xffff) * #91 / 0x10000)