AUTOMIX.MOD 2.5 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788
  1. MODULE AutoMix; (* Random changes *)
  2. (* IMPORT PMD;*)
  3. FROM SYSTEM IMPORT BYTE;
  4. IMPORT InitCompilerMods;
  5. IMPORT Locks;
  6. FROM DBIndxes IMPORT DBIndex, InitIndex, CloseIndex, FindPositionCh,
  7. AddToUpdateList;
  8. FROM DBFields IMPORT Replace;
  9. FROM ModBase3 IMPORT DBFile,InitDBF,OpenDBF,ReadDBRec,WriteDBRec,
  10. NumberRecords,LockRec,UnLockRec,DefaultFixUp;
  11. FROM ErrorManager IMPORT WARN;
  12. FROM Timing IMPORT BeginTimer, ShowUsage;
  13. FROM Rand IMPORT RandomInit, RandomCard,Randomize;
  14. (* FROM Lib IMPORT RANDOM;*)
  15. IMPORT StringIO;
  16. IMPORT StrConv,FAPI;
  17. VAR
  18. counter:CARDINAL;
  19. string:ARRAY[0..79] OF CHAR;
  20. PROCEDURE KeyPressed():BOOLEAN;
  21. VAR r:CARDINAL;
  22. k:FAPI.KBDKEYINFO;
  23. BEGIN
  24. k.chChar:=0C;
  25. k.chScan:=0;
  26. k.bNlsShift:=0;
  27. r :=FAPI.KBDPEEK(ADR(k),0);
  28. RETURN (k.chScan#BYTE(0)) OR (k.chChar#BYTE(0));
  29. END KeyPressed;
  30. PROCEDURE RandStr(VAR S : ARRAY OF CHAR);
  31. (* Generate a string of random letters with a random length *)
  32. VAR
  33. I : CARDINAL;
  34. Len : CARDINAL;
  35. BEGIN
  36. Len := 1 + (*RandomCard*)RandomCard(HIGH(S)+1) ; (* random 1 to 30 Len *)
  37. FOR I := 0 TO Len - 1 DO
  38. S[I] := CHR((*RandomCard*)RandomCard(26)+65); (* random letters *)
  39. END (* for *);
  40. FOR I := Len TO HIGH(S) DO (* ModBase requires space padded keys *)
  41. S[I] := ' '; (* instead of a 0C terminated string *)
  42. END (* if *);
  43. END RandStr;
  44. CONST
  45. KeyLen = 30;
  46. Buffers = 400;
  47. TYPE
  48. KeyStr = ARRAY [0..KeyLen-1] OF CHAR;
  49. VAR
  50. DBF : DBFile;
  51. NDX : DBIndex;
  52. Name : KeyStr;
  53. Found : BOOLEAN;
  54. rec:LONGINT;
  55. res:CARDINAL;
  56. BEGIN
  57. Randomize;
  58. res:=FAPI.KBDFLUSHBUFFER(0);
  59. counter:=0;
  60. InitDBF('Modbase.DBF',DBF,0,FALSE,FALSE,TRUE,DefaultFixUp);
  61. IF OpenDBF(DBF) THEN END;
  62. InitIndex("ModBase.NDX", NDX,DBF, Buffers,FALSE,TRUE,FALSE);
  63. AddToUpdateList(DBF,NDX);
  64. REPEAT
  65. (* rec:=VAL(LONGINT,RandomCard(VAL(CARDINAL,NumberRecords(DBF)))+1);*)
  66. rec:=VAL(LONGINT,RandomCard(10)+1);(*increace odds of contention*)
  67. RandStr(Name);
  68. ReadDBRec(DBF,rec);
  69. Locks.Pause(200);(* give chance to others to change *)
  70. Replace(DBF,1,Name);
  71. WriteDBRec(DBF);
  72. StrConv.CardinalToStr(counter,8,string);
  73. StringIO.WriteStr(StringIO.outp,string);
  74. INC(counter);
  75. UNTIL (counter=65000) OR KeyPressed(); (* until not in index *)
  76. CloseIndex(NDX);
  77. DEC(counter);
  78. res:=FAPI.KBDFLUSHBUFFER(0);
  79. END AutoMix.
  80.