MODULE Mix; (* Random changes *) (* IMPORT PMD;*) IMPORT InitCompilerMods; 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,OS2KBD; VAR counter:CARDINAL; string:ARRAY[0..79] OF CHAR; PROCEDURE KeyPressed():BOOLEAN; VAR r:CARDINAL; k:OS2KBD.CharDataType; BEGIN k.asciiCharCode:=0C; k.scanCode:=0; k.NLSShiftStatus:=0; r :=OS2KBD.KBDPEEK(k,0); RETURN (k.scanCode#BYTE(0)) OR (k.asciiCharCode#0C); 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:=OS2KBD.KBDFLUSHBUFFER(0); counter:=0; InitDBF('Modbase.DBF',DBF,0,FALSE,FALSE,FALSE,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); RandStr(Name); IF LockRec(DBF,rec)#0 THEN WARN('Unable to lock record in mix') END; ReadDBRec(DBF,rec); Replace(DBF,1,Name); WriteDBRec(DBF); IF UnLockRec(DBF,rec) #0 THEN WARN('Unable to unlock record in mix') END; 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:=OS2KBD.KBDFLUSHBUFFER(0); END Mix.