@% = &D0D PRINT "MS generator:" dummy% = FNrandMS(0) FOR i% = 1 TO 10 PRINT FNrandMS(-1) NEXT PRINT '"BSD generator:" dummy% = FNrandBSD(0) FOR i% = 1 TO 10 PRINT FNrandBSD(-1) NEXT END DEF FNrandMS(seed%) PRIVATE state% IF seed% >= 0 THEN state% = seed% ELSE state% = FNmuladd(state%, 214013, 2531011) ENDIF = state% >> 16 DEF FNrandBSD(seed%) PRIVATE state% IF seed% >= 0 THEN state% = seed% ELSE state% = FNmuladd(state%, 1103515245, 12345) ENDIF = state% DEF FNmuladd(A%,B%,C%) : PRIVATE M% : LOCAL P% : IF M% = 0 DIM P% 8 IF P% THEN [OPT 0 : .M% mul ebx : add eax,ecx : btr eax,31 : ret :] = USR M%