MODULE AutoMix; (* Random changes *) (* IMPORT PMD;*) FROM SYSTEM IMPORT BYTE; IMPORT InitCompilerMods; IMPORT Locks; FROM DBIndxes IMPORT DBIndex, InitIndex, CloseIndex, FindPositionCh, AddToUpdateList; FROM DBFields IMPORT Replace; FROM ModBase3 IMPORT DBFile,InitDBF,OpenDBF,ReadDBRec,WriteDBRec, NumberRecords,LockRec,UnLockRec,DefaultFixUp; FROM ErrorManager IMPORT WARN; FROM Timing IMPORT BeginTimer, ShowUsage; FROM Rand IMPORT RandomInit, RandomCard,Randomize; (* FROM Lib IMPORT RANDOM;*) IMPORT StringIO; IMPORT StrConv,FAPI; VAR counter:CARDINAL; string:ARRAY[0..79] OF CHAR; PROCEDURE KeyPressed():BOOLEAN; VAR r:CARDINAL; k:FAPI.KBDKEYINFO; BEGIN k.chChar:=0C; k.chScan:=0; k.bNlsShift:=0; r :=FAPI.KBDPEEK(ADR(k),0); RETURN (k.chScan#BYTE(0)) OR (k.chChar#BYTE(0)); END KeyPressed; PROCEDURE RandStr(VAR S : ARRAY OF CHAR); (* Generate a string of random letters with a random length *) VAR I : CARDINAL; Len : CARDINAL; BEGIN Len := 1 + (*RandomCard*)RandomCard(HIGH(S)+1) ; (* random 1 to 30 Len *) FOR I := 0 TO Len - 1 DO S[I] := CHR((*RandomCard*)RandomCard(26)+65); (* random letters *) END (* for *); FOR I := Len TO HIGH(S) DO (* ModBase requires space padded keys *) S[I] := ' '; (* instead of a 0C terminated string *) END (* if *); END RandStr; CONST KeyLen = 30; Buffers = 400; TYPE KeyStr = ARRAY [0..KeyLen-1] OF CHAR; VAR DBF : DBFile; NDX : DBIndex; Name : KeyStr; Found : BOOLEAN; rec:LONGINT; res:CARDINAL; BEGIN Randomize; res:=FAPI.KBDFLUSHBUFFER(0); counter:=0; InitDBF('Modbase.DBF',DBF,0,FALSE,FALSE,TRUE,DefaultFixUp); IF OpenDBF(DBF) THEN END; InitIndex("ModBase.NDX", NDX,DBF, Buffers,FALSE,TRUE,FALSE); AddToUpdateList(DBF,NDX); REPEAT (* rec:=VAL(LONGINT,RandomCard(VAL(CARDINAL,NumberRecords(DBF)))+1);*) rec:=VAL(LONGINT,RandomCard(10)+1);(*increace odds of contention*) RandStr(Name); ReadDBRec(DBF,rec); Locks.Pause(200);(* give chance to others to change *) Replace(DBF,1,Name); WriteDBRec(DBF); StrConv.CardinalToStr(counter,8,string); StringIO.WriteStr(StringIO.outp,string); INC(counter); UNTIL (counter=65000) OR KeyPressed(); (* until not in index *) CloseIndex(NDX); DEC(counter); res:=FAPI.KBDFLUSHBUFFER(0); END AutoMix.