| 12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788 |
- 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.
|