MIX.MOD 2.5 KB

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