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