summaryrefslogtreecommitdiff
path: root/fpcsrc/packages/fcl-db/src/dbase/history.txt
blob: e1d0ff3edb2c7052cb70118d437d180cae6b0e4c (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
344
345
346
347
348
349
350
351
352
353
354
355
356
357
358
359
360
361
362
363
364
365
366
367
368
369
370
371
372
373
374
375
376
377
378
379
380
381
382
383
384
385
386
387
388
389
390
391
392
393
394
395
396
397
398
399
400
401
402
403
404
405
406
407
408
409
410
411
412
413
414
415
416
417
418
419
420
421
422
423
424
425
426
427
428
429
430
431
432
433
434
435
436
437
438
439
440
441
442
443
444
445
446
447
448
449
450
451
452
453
454
455
456
457
458
459
460
461
462
463
464
465
466
467
468
469
470
471
472
473
474
475
476
477
478
479
480
481
482
483
484
485
486
487
488
489
490
491
492
493
494
495
496
497
498
499
500
501
502
503
504
505
506
507
508
509
510
511
512
513
514
515
516
517
518
519
520
521
522
523
524
525
526
527
528
529
530
531
532
533
534
535
536
537
538
539
540
541
542
543
544
545
546
547
548
549
550
551
552
553
554
555
556
557
558
559
560
561
562
563
564
565
566
567
568
569
570
571
572
573
574
575
576
577
578
579
580
581
582
583
584
585
586
587
588
589
590
591
592
593
594
595
596
597
598
599
600
601
602
603
604
605
606
607
608
609
610
611
612
613
614
615
616
617
618
619
620
621
622
623
624
625
626
627
628
629
630
631
632
633
634
635
636
637
638
639
640
641
642
643
644
645
646
647
648
649
650
651
652
653
654
655
656
657
658
659
660
661
662
663
664
665
666
667
668
669
670
671
672
673
674
675
676
677
678
679
680
681
682
683
684
685
686
687
688
689
690
691
692
693
694
695
696
697
698
699
700
701
702
703
704
705
706
707
708
709
710
711
712
713
714
715
716
717
718
719
720
721
722
723
724
725
726
727
728
729
730
731
732
733
734
735
736
737
738
739
740
741
742
743
744
745
746
747
748
749
750
751
752
753
754
755
756
757
758
759
760
761
762
763
764
765
766
767
768
769
770
771
772
773
774
775
776
777
778
779
780
781
782
783
784
785
786
787
788
789
790
791
792
793
794
795
796
797
798
799
800
801
802
803
804
805
806
807
808
809
810
811
812
813
814
815
816
817
818
819
820
821
822
823
824
825
826
827
828
829
830
831
832
833
834
835
836
837
838
839
840
841
842
843
844
845
846
847
848
849
850
851
852
853
854
855
856
857
858
859
860
861
862
863
864
865
866
867
868
869
870
871
872
873
874
875
876
877
878
879
880
881
882
883
884
885
886
887
888
889
890
891
892
893
894
895
896
897
898
899
900
901
902
903
904
905
906
907
908
909
910
911
912
913
914
915
916
917
918
919
920
921
922
923
924
925
926
927
928
929
930
931
932
933
934
935
936
937
938
939
940
941
942
943
944
945
946
947
948
949
950
951
952
953
954
955
956
957
958
959
960
961
962
963
964
965
966
967
968
969
970
971
972
973
974
975
976
977
978
979
980
981
982
983
984
985
986
987
988
989
990
991
992
993
994
995
996
997
998
999
1000
1001
1002
1003
1004
1005
1006
1007
1008
1009
1010
1011
1012
1013
1014
1015
1016
1017
1018
1019
1020
1021
1022
1023
1024
1025
1026
1027
1028
1029
1030
1031
1032
1033
1034
1035
1036
1037
1038
1039
1040
1041
1042
1043
1044
1045
1046
1047
1048
1049
1050
1051
1052
1053
1054
1055
1056
1057
1058
1059
1060
1061
1062
1063
1064
1065
1066
1067
1068
1069
1070
1071
1072
1073
1074
1075
1076
1077
1078
1079
1080
1081
1082
1083
1084
1085
1086
1087
1088
1089
1090
1091
1092
1093
1094
1095
1096
1097
1098
1099
1100
1101
1102
1103
1104
1105
1106
1107
1108
1109
1110
1111
1112
1113
1114
1115
1116
1117
1118
1119
1120
1121
1122
1123
1124
1125
1126
1127
1128
1129
1130
1131
1132
1133
1134
1135
1136
1137
1138
1139
1140
1141
1142
1143
1144
1145
1146
1147
1148
1149
1150
1151
1152
1153
1154
1155
1156
1157
1158
1159
1160
1161
1162
1163
1164
1165
1166
1167
1168
1169
1170
1171
1172
History of TDBF:

------------------------
Authors:

- Pascal Ganaye - upto V5.002
- Micha Nelissen - from there

thanks to various people helping on details

------------------------
BUGS & WARNINGS
  (not complete)

- Multi-user support
  - not tested well...
- use FIXED LENGTH index expressions: an expression which will always return
  a string which is the same length. When returning a float you don't have to
  worry about this of course (always fixed #bytes). String fields also return
  fixed length expression, complete field with spaces.
- BCB4/D4 and lower:
    - restructure probably does not work correctly, because the field defs
      don't know the index of the field they have to copy from (Dbf_Fields)
- BCB3/D3 compatibility:
    - you will NOT be able to use Int64 features:
      - large numeric fields with zero precision (they will be float fields)
      - datetime fields '@'
      - double fields 'O'
      - maybe more...look in source where Int64 is used
    - no codepage conversion available other than oem<->ansi
    - storedefs is not updated automatically when fielddefs are changed


FreePascal trunk (future V7.0.0):
- add support for memo and index stream so no disk files are needed when using streams
- clarification on field types; remove some workarounds (r24169) todo: reinstate depending on test set
- initial support for (Visual) FoxPro files (r24139)
- annotated constants/file structure (r24139)
- factored out get version/get codepage subprocedure for readability (r24139)
- split out existing support for Visual FoxPro and Foxpro (r24109) 
  so future Visual FoxPro only features can be implemented
- implemented FindFirst,FindNext,FindPrior,FindLast (r24107)
- compile fix for FPC 2.6.2 (r24069), possibly useful for Delphi

------------------------
V6.9.2

- compile fixes for delphi 4, 5 (pdouble)
- fix indexes to work properly with ansi upper/lower casing
- fix memory leak when inserting duplicate item in AVL tree 
- add german localization strings (thx heiko)

------------------------
V6.9.1

- fix last memo field getting truncated (patch by dhdorrough)
- add dbf_collate unit to the packages
- fix index result too long bug
- add support for big endian
- fix non-raw string field filter
- fix index inserts/updates to be reverted on key violations
- allow lookups to ignore active filter

------------------------
V6.9.0

- BDE compatible index collation: MDX/NDXes have to be rebuilt!
    (thx sstewart for generating collation tables)
- fix use long char fields check icw foxpro (thx rpoverdijk)
- fix TDbf.GetRecNo AV when no file open
- remove UseFloatFields, delphi 3 will use float fields, others not
- fix size/precision truncation when opening foxpro B-type fields (thx nring)
- foxbase memo is 10 character index, sizes 4 and 10 are valid (thx majky)
- add int64 to string conversion in expression parser function STR
- fix nativeformat for tdbf.getfielddata(A,B) users
- allow later defined expression variables to have same name as 
    already defined function
- third parameter in substr function is optional now
- expression parser distinguishes between function() and variable, =no brackets
- updated bcb 4 packages files from troy dalton
- fix write blob B-type field for non-foxpro (thx leexgone)
- fix win64 compatibility


------------------------
V6.4.8

- remove duplicate names, may cause ambiguity
- allow duplicate names in function list for expressions
- remember exprword reference for every field variable so we can remove it
- prevent possible buffer overrun when parsing expression (thx leexgone)
- fix some memory references in the parser
- add ability for locate/lookup to use alternate index than current one
- fix tdbf.copyfrom fieldname copy and fieldno index for size/precision
- make TDbf.CheckMasterRange public so master/detail can be synced manually
    when for example .DisableControls is active
- allow calc/lookup fields to work in filters
- fix loosing blobs when packing table (rep by cllerici)
- support variants for freepascal
- fix (filter) parser string partial matching for "A*" strings
- make distinct index creation more robust


------------------------
V6.4.7

- fixed: 64bit compatibility
- fixed: Field.FieldNo is relative to number of FieldDefs, may be larger
- added: function Max for Delphi 3, needed by dbf_avl unit
- added: BCB3 package files (thx to pzelotti)
- fixed: add special case for copying from source TDbf in CopyFrom to retain
    more precise field types
- fixed: TDbf.CopyFrom to keep Fields and FieldDefs seperate
- fixed: TDbfFieldDefs.Add to ignore size when it is zero
- added: TDbf.Lookup and as such, lookup fields, should work now
- added: defines for delphi 2006 and 2007
- fixed: some range checking errors when swapping data
- added: packages for delphi 2005 and 2006, c++ 2006 (from stan and others)
- fixed: modifying records with active range
- added: packages for kylix 3, fix casing (from jvargas)


------------------------
V6.4.6

- fixed: FPC 2.0.1 implements "backward-compatible" fielddata 
    for datetime fields in particular (from alexandrov)
- fixed: only allow >255 field length for creating foxpro files; prevents
    range check error (rep by miguel)
- fixed: memo read: check number of bytes read, clear rest for safety
- added: support for foxpro double, fieldtype 'B'
- fixed: foxpro memo pageno is binary 4 byte integer, not ascii
- added: default values are buffered, better/faster record insert
- added: support for long character fields compiletime definable
    (USE_LONG_CHAR_FIELDS)
- fixed: added boolean field support in expressions (note: breaks existing)
- fixed: compilation with USE_CACHE directive
- fixed: add my own SwapWord function, because Swap seems buggy in fpc
- fixed: VCL fieldtype ftDateTime was not translated to any native type
    for non dBase VII and non FoxPro (hint by paul van helden)


------------------------
V6.4.5

- fixed: index create string raises exception unknown type


------------------------
V6.4.4

- fixed: delphi 3 does not have math unit
- fixed: exception in opening causes double free (thx arioch)
- fixed: copy precision for float fields
- fixed: force create index file, if index does not exist yet
- fixed: memory leak in TPagedFile.FBufferPtr
- fixed: TDbf.GetFileNames crash, more robust (rep by arioch)
- added: character conversion hungarian (from attila)
- fixed: index creation for tablelevel 7, mdx type 3
- fixed: remember cursor position when changing showdeleted setting
- fixed: findrecord to sync cursor position; endless loop or forgot records
- chang: added initializations to 0 to suppress delphi warnings


------------------------
V6.4.3

- fixed: delphi 3 compilation; dynamic array of restructure info (rep by kjteng)
- fixed: datetime index creation using delphi 4 (rep by agam)
- fixed: storage of negative numbers in integer fields (rep by agam)
- fixed: index corruption when opening, with emptytable (rep by arioch)
- fixed: index corruption on regenerateindexes (rep by piotr)


------------------------
V6.4.2

- fixed: overflow in storing float field data (large negative number) (thx madruga)
- fixed: restructure/pack create MDX database desktop compatible;
    write db filename in mdx header (rep by rusmonk)
- fixed: freepascal objfpc mode compatibility fixes (still needs some @-ies)
- fixed: upon TDbf.Delete, use internal editing/posting such that BeforeEdit
    and other events are not fired; also fixes cursor position bug upon
    deletion (rep by bura)
- fixed: only use float fields (UseFloatFields) if int64 not supported
- fixed: deleted records undeleted when using RestructureTable with
    Pack=false (rep by scenes)
- fixed: made (hopefully) all references to units lowercase, for kylix


------------------------
V6.4.1

- fixed: restructure numeric fields correctly, try to preserve data
- fixed: read and write foxpro currency fieldtype (thx karelrys)
- fixed: when using TDbf.Insert to add a record, current record indicator does
    not move to newly added record (rep by rpoverdijk)
- fixed: req. of numeric field size >= 2, it can be 1 too! (rep by rpoverdijk)
- fixed: forgot cursor position when disabling filter (rep by bobmitch/luchop)
- fixed: initialize binary field types '0' (nullflags) and 'Y' (currency)
    properly (thx to karelrys)
- added: _nullflags field operation support (thx karelrys)
- fixed: when editing a record, then moving to another record, memo is not
    properly cleared if memo is null (rep by versus)
- fixed: writing to a memo that also has a connected dbcontrol does not work;
    quite some semantical changes, may have introduced new bugs (rep by mafro)


------------------------
V6.4.0

- fixed: dBase III and IV do not have date+time fields
- fixed: index search bug, not finding records (rep by peruginia)
- fixed: expression bracket pair checking; caused strange expression errors
- fixed: parse filter expression upon opening file (rep by mvc)
- added: do not resync/reparse filter if not property unchanged
- fixed: use international string functions in expressions
- fixed: index deletion and update corruption while range active (rep by ralf)


------------------------
V6.3.9

- fixed: recursive loop in index first/last
- fixed: index resync current record
- fixed: resync range at eof
- fixed: index findkey finds last, deleted key in index page
- fixed: opening dbf file with numeric integer field misreads numbers
- fixed: storage of foxpro binary integer field
- fixed: only support 65535 length character fields for foxpro
    (otherwise ms excel generated files can not be read)
- fixed: call CursorPosChanged whenever cursor position possibly changed
- fixed: keep cursor position when index and range active as much as possible


------------------------
V6.3.8

- fixed: outdated buffer in checking found key
- fixed: createtable with memorystream; tdbf.userstream (thx andrew)
- fixed: garbage record when adding a record to empty table
- fixed: fields settings size for integer fields
- fixed: underflow buffer in GetStrFromInt when Width=0
- fixed: IndexFile.PrepareKey numeric index: encode value zero to have no digits
- added: TDbf.PrepareKey for conversion of key to numeric index key format
- fixed: set physicalrecno to non-existing recno corrupts table (rep by luchop)
- fixed: tryexclusive/packtable/endexclusive fail because of memo (rep by sysklop)
- fixed: crash when calling {un,}locktable on closed dataset (rep by sysklop)
- fixed: use correct dbf version when creating table to decide field types
- fixed: kylix compilation
- added: multi-user and insert aware ranges (req by ralf)
- chngd: made all filenames lowercase to ease usage on *nix
- added: partial matching in expressions for filters
- added: -, *, / operators in expressions
- fixed: datetime issues with fieldtype '@' and delphi 4 and lower (nobody uses 
    those fieldtypes? they have been horribly broken, and maybe still are)
- fixed: getting recno in oncalcfields event (rep by lutz)
- fixed: AV when checking empty binary fields
- fixed: better foxpro header writing, fieldoffset, tabletype and headersize
**Version .1:
- fixed: recursive loop in setrange


------------------------
V6.3.7

- fixed: numeric index data exponent (rep by rpoverdijk)
- fixed: big-endian issues in dbf_idxfile
- added: spanish (thx mauricio) and brazilian portuguese translation (thx adilson)
- fixed: opening memory streams; more generic implementation
- fixed: querying ExactRecordCount on open table causes AV (rep by sikorsky)
- added: smarter Dbf_Parser initialization (thx emled)
- fixed: copy languageid and autoinc values upon restructure/pack
- added: TDbf.LanguageID to set language id of new table; set before CreateTable
- fixed: remember autoinc value after restructure
- fixed: do not try to create foxpro currency fields if creating dbase table
- speed: when reading v4 memo field, set size of stream in advance
- fixed: empty field really returns empty string in parser
- fixed: rewritten token parser, tree construction to be much simpler
- speed: reduce number of getrecordcount calls, cache recordcount if possible


------------------------
V6.3.6

- fixed: crash when optimizing expression with constants
- fixed: expression parser to use variable-length string variables for non-raw
    fields
- added: support for opening (memory) streams as file
- fixed: numeric mdx compatibility bug; bytes instead of decimals (rep by rpoverdijk)
- fixed: integer fields store numerics padded with zeroes; now it uses spaces
- added: use new, faster assembler SwapInt64 from arioch


------------------------
V6.3.5

- fixed: crash when finalizing Dbf_Parser unit


------------------------
V6.3.4

- fixed: improved exception handling in expression parser
- fixed: remove temporary indexdefs at close, fixes CreateTable index creation
- added: NULLFLAGS field recognition (foxpro field)
- fixed: date field retrieval parser (rep by luchop)
- fixed: BCB5 installation needs Pascal switch to link dsgnintf unit
- fixed: avoid dependency on libc unit for freepascal target
- fixed: index open after packtable forgot tempmode; so endexclusive did not
    work properly (rep by sysklop)
- chang: make TDbf.GetCurrentBuffer public
- chang: rename TVarType to TExpressionType
- chang: remove all SmallInt constructs from parser
- added: export expression functions from Dbf_Parser
- added: FFieldName to TFieldVar, to prevent need for TFieldDef to exist to get name for deletion from expression words list
- added: "<>", not equal, expression functions
- added: reference counting for TExprWord
- added: shortname functionality for each function, function can be referenced by name and shortname
- fixed: memory leak in parser upon encountering unknown variable
- fixed: when adding record write new autoinc value to header, to file


------------------------
V6.3.3

- fixed: compiles with freepascal, usable in lazarus
- fixed: index delete record bug (deleting not-last entry in full page)
- fixed: index delete record bug (deleting the only entry on a page)
- fixed: lazarus registration issues
- fixed: scan for $1A, not RecordSize (rep by avink)


------------------------
V6.3.2

- fixed: use default codepage if file codepage not installed
- fixed: range check error using swapint
- fixed: flush index header when index flushed, ie. when creating index
- fixed: update TDbf.IndexDefs when index added or deleted
- fixed: update internal index names and files list when mdx index deleted
- fixed: remove max 4000 character record length requirement
    TDbf.GetExactRecordCount (rep by dpproj)
- fixed: accept russian 'C' too as string field (rep by dpproj)
- fixed: datetime native fieldtype 'T' handling, size (rep by kjteng)
- added: support for currency field type, type 'Y' in foxpro tables
    - nativeformat handling is re-enabled due to much easier implementation
    - delphi 4 and higher only
- fixed: close,open files reset indexnames,files list (rep by paez)
- fixed: reselect index after repage, compact (rep by paez)
- added: support for foxpro datetime fields
- fixed: support for foxpro integer fields
- fixed: tdbf doesn't use default codepage when opening file with langid #0
- added: OnLanguageWarning can now specify to use default codepage (see above)
- fixed: MDX float index with decimals (rep by emled)
- fixed: removal of mdx flag in foxpro file; means cdx index


------------------------
V6.3.1

- added: freepascal support, needs 1.9 (or higher)
- fixed: strange bugs due to fparser not initialized correctly, for example
    with expression of different index (rep by sysklop)
- added: findrecord implemented -> find{first,next,prior,last} should now work
- fixed: index deletion bug corner case, no records left (rep by sysklop)
- fixed: repagefile creating empty index file (rep by paez)


------------------------
V6.3.0

- fixed: tdbf.physicalrecno not in sync with tdataset
- added: loPartialKey functionality on index search
- fixed: mdx file presence not written to dbf header; index does not work (rep by paez)
- fixed: searchkey on deleted row returns true (rep by sysklop)
- fixed: primary index creation throws "list index out of bounds(0)" (rep by sysklop)


------------------------
V6.2.9

- fixed: checkkeyviolation bug; should solve locking problem
- fixed: packed structures
- fixed: delphi 3 compatibility tdbf.translate, compile prob (rep by ferdok)
- fixed: numeric MDX compare, translate bugs (rep by rpoverdijk)
- fixed: GetIndexNames returns open (available) indexes
- added: TDbf.GetAllIndexFiles returns index files present in dbf directory
- added: TDbf.PhysicalRecordCount returns physical number of records present
- added: TDbf.IndexDefs ( = TDbf.Indexes) for VCL compatibility
- added: TDbfIndexDef.(Name and Expression) for VCL compatibility where
    Name = IndexFile and Expression = SortField
- fixed: memory leak expression tree
- fixed: index cache flush problem causing index corruption; triggered by,
    for example, regenerateindexes (rep by smokexjc)


------------------------
V6.2.8

- fixed: character fields support upto 65534 characters now
- fixed: detect, allow visual foxpro file
- chngd: getfielddata clears user field buffer is string field empty
- fixed: tdbf version number in delphi 7 package
- fixed: index update on record insert (thx kirill)
- fixed: selecting index when cursor is bof,eof; cursor moves (thx kirill)
- fixed: create first index in mdx file fails AV, file not deleted (rep by pyostrike)


------------------------
V6.2.7

- added: TDbf.GetKeySize, if index is active retrieves key size
- added: TDbf.ExtractKey, extracts key for current record and index
- fixed: TDbf.GetRecordCount AV when no dbf file open
- fixed: memory leak not releasing fmdxfile
- fixed: index using field datetime has time encode error (rep by paez)
- fixed: end-of-memo not found, packtable creates large files (rep by stayathome)
- fixed: distinct index, keys added while duplicate error (rep by sysklop)
- fixed: when packing a table, no files are left behind
- fixed: AV when packing while index active (rep by ltolean)


------------------------
V6.2.6

- fixed: fcanedit is false causing indexes not to update (rep dvdneg)
- fixed: autoinc when packing/restructuring table (rep aerceg)
- fixed: allow creation of tablelevel 25 tables (rep cherednichenko)
- fixed: delete last entry from index page caused overflowerror (rep by tekkan)


------------------------
V6.2.5

- fixed: foxpro memo data size is w/o record header size
- fixed: index search on extended ASCII values
- added: filter options; caseinsensitive works; partialmatch does not
    filter expressions never have partial matching
- fixed: filter field strings compare with extended ASCII values
- added: TDbf.GetFileNames, retrieves file names in use with current dbf
- fixed: open exclusive, close, open exclusive triggers 'can not open'
    happens ie. when calling PackTable (rep by tekkan)
- added: getfilenamesstring function to retrieve filenames in a string
- fixed: Blank memo returns data (thx aerceg)
- fixed: no inherited call on indexdef assign (thx kirill)
- fixed: international issue with locate (thx kirill)


------------------------
V6.2.4

- fixed: setting memo contents overwrites only first x bytes, not all (rep by avink)
- fixed: possible corruption in writememo, wrong offset (thx aerceg)
- fixed: indexname truncated causing inability to select index v7 (thx delphiguru)
- fixed: (includetrailingpathdelimiter) delphi 4 compatibility (thx bobmitch)
- fixed: (dbffile.openindex) open NDX file fails due to empty field (thx wschenk)
- fixed: codepage problems with dbase3 (thx arioch)
- fixed: result of boolean fields is string type (rep by delphiguru)
- fixed: blobstreams delphi 3 compatibility
- fixed: remove automatically detected indexdefs of previous file at design time
- fixed: index MDX numeric search (rep by arioch)
- fixed: index navigation when having a lot of records with the same key
    (rep by ledoux)
- fixed: try harder to find a matching locale / codepage combination; any
    codepage will do if no specific codepage is found


------------------------
V6.2.3

- added: new assembler implementation for swapint, swapint64 (thx arioch)
    - NOTE: 486+ if you need old, remove USE_ASSEMBLER_486_UP define
- fixed: datetime handling in index, eg. DTOS(DATE_FIELD)
- added: FilePathFull, this is path where the dbf is going to be opened (arioch)
    - is not stored, only relative path is stored
    - when set, overwrites relative path too, and relative path sets full path
- fixed: possible AV when executing (get|set)fielddata with nil buffer
- fixed: reading dbase 7 index tags, new structure, long index names supported
- fixed: bug storedefs = true after .open; indirect fielddefs.update
- fixed: index version bug causing AV; caused by new DB7 support (rep by arioch)
- fixed: SearchKey in Edit without Post -> record twice (thx ralf)
- fixed: TDataSet.(InsertRecord | AppendRecord) now really work instead of doing
   nothing. NOTE: they do the same thing, as you cannot insert a record in DBF,
   only append.
- fixed: index bug; insert in wrong page sometimes causing various assert fails
- added: a bunch of freeandnil instead of [x.Free; x := nil;]; should be safer
- added: more language / locale combinations; now combinations using windows
    codepages (1250,1251,1253,...) and (russian, greek, etc) should be possible
- fixed: delphi 3 compatibility
- fixed: cancel memo bug; when memo modified, release focus, cancel record then
    memo has already written contents to file
- chngd: absolute/relativepath properties use same handler (thx arioch)
- fixed: AV when SearchKey called with NULL variant
- fixed: when creating dbf, tablelevel = 25 indicates foxpro
    NOTE: dbfglobals.defaultcreatefoxpro removed
- added: SetIndexName throws exception when try to select non-existing index
- fixed: index needs to convert strings OEM->ANSI before comparing; I think
    the sorting works very nicely now, eg.: e, E, e-accent-grave, etc all same
    NOTE: you need to rebuild all indexes because of this change
- fixed: when creating dbf: also foxpro langids will be used and the
    other way around...increases number of combinations
- fixed: index bugs; first record insert in distinct index, EOF insert caused
    AV on closing app (report thx germain)
- fixed: memo bug; memo files with large pages (>512) had incorrect calculation
    of position, reading false data (rep by kjteng)


------------------------
V6.2.2

- added: IndexFieldNames property to set current index by fieldname
- added: foxpro memo files (.fpt) support
- fixed: indexing bug, when inserting same key at end
- fixed: more indexing bugs...
    - NOTE: non-leaf keys assume searchkey < nodekey
        - this is default B+ tree
        - previously tdbf assumed searchkey <= nodekey
        - you may have to recreate indexes
- chngd: FinishCreate does not need memo extension anymore
- chngd: PackTable uses different filename now abc_1.dbf etc
- chngd: Dbf_PgFile.pas: renamed LockFile to LockAllPages;
    -> Kylix users should be able to compile with LockFile from Dbf_Wtil.pas
- chngd: default locale now retrieved from GetUserDefaultLCID
- fixed: when closing/opening dbf file, reopens indexes too (thx oleg)
    -> fixed an AV when packtable is done and you try access an index
- fixed: (caused by above index bug) does not find last record in index
    -> caused dbgrid to display records twice or not at all
- fixed: packindex now properly selects single index, so that it can be edited
    -> previously no expression was parsed creating empty indexes (thx oleg)
- fixed: insert/modify/delete/find records while index range active (thx paul)
    -> findnearest function rewritten
- fixed: foxpro table level less than dBase7 table level, now reads fields
    correctly in dBaseIII alike format
- fixed: when reading memo, negative blockno return empty memo instead of crash
- fixed: using AnsiUppercase instead of Uppercase, better internalization
- fixed: ignore addindex calls with empty index names / fields
- fixed: Get/SetFieldData NativeFormat issue with DB7:datetime fields (thx tophet)
- fixed: tdbfindexdef; name and field now stored uppercase to prevent
    differences in case (thx arioch)
- chngd: tablename property editor starts in project directory not delphi/bin
    directory when no filepath given; if you want filepath to be current path
    at startup of app: use '.' or '.\' as filepath (current dir)
- chngd: dbf_globals.defaultopencode changed to getacp, seems to be more
    compatible, especially when your codepage is not supported by dbase
- fixed: fix for empty path in IncludeTrailingPathDelim


------------------------
V6.2.1

- added: BeforeAutoCreate event: set DoCreate to false to prevent autocreate
- added: polish + french message strings up to date, thx tophet+lecho
- added: fielddefs, storedefs published property alike ttable
    WARNING: ALPHA feature, not tested well
- added: error handling for dbf creation, fields now checked before creating dbf
- added: fieldtypestr in error invalid_field_type, better error string
- fixed: preparing numeric index search, Move function had parameters wrong
    way around....arrggh
- fixed: error message invalid field type had invalid format type
- fixed: index out of bounds checking better (SetEntryNo, RecurPrev)
- fixed: lost designtime MDX indexes when opening
- fixed: numeric indexes changes to database were not detected well causing
    index corruption (thx ralf)


------------------------
V6.2

- added: table level locking (TDbf.LockTable / TDbf.UnlockTable)
    NOTE: if you're still editing a record, then LockTable will fail. Post or
      cancel changes before trying to lock table.
- added: filter expressions (thx paul)
    - WARNING: feature is currently in ALPHA state !
    - TDbf.Filter := 'your dbase expression';
    - index functions available for filter too
- added: expressions operators implemented: '=,<,>,<=,>=,and,or,not'
    - you can use these for filter (but for index too)
- added: more types for operator '+'
- added: GetIndexNames, retrieves indexes from MDX or NDX's in dbf directory
- added: TDbf.RegenerateIndexes, recreates all indexes active for table
- added: index expression length checking in parser
    new error message: STRING_INDEX_EXPRESSION_TOO_LONG
- added: polish error messages in Dbf_Str_PL.pas
- fixed: pass index options from object inspector to createindex (thx germain)
- fixed: now when closing dbf file, at runtime MDX indexes are removed from
  indexes list, but not at design time, to keep indexes from disappearing from
  list. You should always add/remove NDX indexes yourself! (because the dbf
  file does not know about them).
- fixed: bug '0.0 is not valid timestamp' is fixed (thx felipe)
    - I now understand VCL TDataSet..NativeFormat better -> TDbf retrieves in
      native format, then VCL translates to destination format
    - it'll be a little slower, but more compatible
    - get/setfielddata override in TDbf removed



------------------------
V6.1.4

- fixed: it now compiles (shame on me)
- note:  experimental new index insert order to check first before
    inserting record into database


------------------------
V6.1.3

- chnge: same functionality, clearer implementation of autocreate in
    TDbf.InternalOpen
- fixed: automagic creation of MDX indexes in TDbf.Indexes property if not exist
- added: on creation of MDX indexes now automagically tries exclusive mode
    itself, if fails, then same as old behaviour (exception)
- fixed: order autoinc assignment to new record and updating index, previously
    empty index. Now first autoinc is assigned, then indexes updated.
- fixed: auto-detect non-present index in MDX file and create it
- fixed: crash on master/detail range when no index or no field selected
- fixed: try exclusive when creating, reopened creating causing filesize = 0
    now it reopens non-create, ie normally
- added: checking whether field type okay for specified table level;
    new error string: 'STRING_INVALID_FIELD_TYPE'
- fixed: searchkey (using variants) on numeric MDX index; code inserted to
    convert to bcd


------------------------
V6.1.2

- fixed: delphi 3 compatibility issues
- fixed: bug in check exclusive access (thx martin)
- fixed: correct dbf version when creating dbf from fielddefs (thx martin)
- fixed: correct dbf version when creating memo file along with dbf ( " )
- added: set method for physicalrecno
- fixed: when using masterlink on non-string field, proper field conversion
- fixed: master/detail bug, empty range at start of file


------------------------
V6.1.1

- fixed: bug when opening dbf file with index in indexes property that does
  not yet exist. Now it will create index.
- fixed: delphi 4 compatibility (thx dayman)
- fixed: readonly mode now also shared access, bug not showing new records
- fixed: bug when reading past EOF in memo results in crash or garbage
- fixed: bug when index somewhat corrupt ( = record duplicate in index),
  - bug caused repeats of the same record
  - now skips records which are the same; based on recno
- fixed: bug in IDE, when table open, clicking on IndexName caused table to
  close, (internal exception was generated)


------------------------
V6.1

- added: project file for BCB6 (tdbf_c6*)
- added: polish mazovia support (db4 id $69, codepage 620, locale LANG_POLISH,
    dbase7 id: 'DB620PO1')
- added: Locate uses index search if simple index
- fixed: bug 'divide by zero', in 1024b memo (thx ltolean)
- fixed: bug in decimal separator, read & not write field (thx michaelbelling)
- fixed: bug in indexing: extracting string field values from database
- NOTE: index function UPPERCASE/LOWERCASE introduced, but you should use
    UPPER/LOWER for dbase compatibility
- fixed: dbase 7 files, if no extra properties present, don't read them
- added: buffering & caching
  - disabled by default, see Dbf_Common.Inc 'USE_CACHE'
  - you will need to add 'dbf_avl.pas' and 'dbf_pgcfile.pas' to tdbf project
    to be able to use them (already done in tdbf_c5r.bpk)
  - buffering: read & write ahead for files
  - caching: of index pages in memory
  - can improve indexing speed over network connections A LOT, especially
    if you have some memory to spare, to save the new index in


------------------------
V6.0.3

- fixed: bug in pagefile, writerecord not increasing recordcount well (arghh)
- fixed: bug in SetRange (empty range) (thx jenswahl)
- fixed: bug when appending records, header record count not updated (thx ron)
- fixed: bug when translating empty memo, AV (thx vern baker)
- fixed: bug when indexing empty table, unusable index (thx nogueira)
- fixed: bugs in RegenerateIndexes, index header 'lost'
- chang: handling of making valid key in SearchKey -> could solve bug stefano?
    - now use StringOfChar, instead of manual fill with spaces
- added: zap, emptytable (you can guess what it does ;-))
- added: dutch error messages (Dbf_Str_NL.pas)


------------------------
V6.0.2

- fixed: bug in TryExclusive
- fixed: bug in SearchKey, wrong array index causing searches to fail
- fixed: bug in TPageFile, chopping file size on multipage record (MDX indexes)
- fixed: bug in RepageFile, crashes when deleting/reindexing MDX index
- chang: speed optimisation in TPagedFile.WriteRecord, calc new record count
- fixed: specifying indexname for MDX longer than 10 characters, now truncates


------------------------
V6.0.1

- added: french strings in Dbf_Str_FR.pas
- added: index functions uppercase and lowercase
- fixed: index bug using dbase III files
- fixed: re-indexing existing (NDX) file fails
- fixed: index bug (NDX) concerning expression index
- chnge: TPagedFile.GetRecordCount now only retrieves file size if not in
    multi-user share mode, to speed up things a little bit
- fixed: index bug splitting pages
- fixed: page file set record count, now using pageoffset next page
- fixed: reading of type III memos
- added: translation of memo text fields (transliterate = true). Handling of
    translation should now be consistent between memo fields and char fields.


------------------------
V6.0

- fixed: ftDateTime handling field size
- fixed: writing memo version byte
- added: VCL ftFixedChar will be converted to 'C' (character) field
- added: property DateTimeHandling (dtDateTime, dtBDETimeStamp)

  Up to now TDbf used to store values in '@' (ftDateTime) fields as Delphi
  type TDateTime. To be compatible with the BDE, however, datetimes need to be
  stored as BDE type TimeStamp (which is milliseconds elapsed since 01/01/0001
  plus one day). To provide backward compatibility you can use this property
  to determine whether TDbf will read and write datetime values as TDateTime
  or as BDE TimeStamp. Default now is dtBDETimeStamp but in order to read
  values in existing TDbf tables you need to choose dtDateTime. If you want to
  convert your data to be BDE compatible have a look at the new procedure
  CopyFrom.

- added: procedure CopyFrom(DataSet: TDataSet; FileName: string;
            DateTimeAsString: boolean; Level: Integer);

  Use this procedure to copy the contents of a given DataSet into a new TDbf
  table. DataSet is the TDataSet you want to copy from, FileName is the
  complete (including path and extension) filename of the new table.
  DateTimeAsString determines whether datetime fields should be converted to
  string fields in the target table. This is especially useful if you want to
  use TDbf to create mailing sources for a text processor for example. If this
  parameter is set True an event OnCopyDateTimeAsString is triggered where you
  can override the default datetime-to-string conversion which is based on
  your current local settings. Level determines the TableLevel of the target
  table.

  In order to convert existing datetime values into a BDE compatible format
  use this procedure as follows: drop two instances of TDbf on a form, set
  DateTimeHandling of TDbf1 to dtDateTime and connect it with the existing
  table. Make sure TDbf2 is set to dtBDETimeStamp and call CopyFrom with
  DataSet = TDbf1 and DateTimeAsString = False. You can then replace the old
  table with the new one and use TDbf in dtBDETimeStamp mode in your
  application.


------------------------
V5.9.9

- added: TryExclusive method to 'try go exclusive' eg.:
    ...
    Dbf1.TryExclusive;
    if Dbf1.Exclusive then
    begin
      Dbf1.AddIndex(....);
      Dbf1.EndExclusive;
    end else begin
      ShowMessage('somebody else is using file');
    end;
    ...
- fixed bug: adding records while string index active don't show up
- fixed bug: clear field when backspace hit
- fixed bug: not saving memo byte in version data correctly
- fixed bug: sometimes crash when opening empty database
- fixed bug: DB desktop writes index type 'F' instead of 'N'
- fixed bug: writing negative integer values to fields
- fixed bug: assertion failure when adding a lot of the same data in index
- changed: default open mode is now normal instead of autocreate


------------------------
V5.9.8

- added integer and smallint support to STR() in expression indexes
- fixed bug: creating dbf files, index field not found, due to uppercase names
- fixed bug: float conversion in STR() more alike dbase
- fixed bug: parser crashes while removing constants in optional parameters


------------------------
V5.9.7

- added Variant support to SearchKey & SetRange
- fixed bug: NDX index split
- fixed bug: DeleteIndex could not find index
- fixed bug: MDX with dBaseIII locale problem
- fixed bug: descending sort index
- demo app v1.3 will compile with this package
- much thanks to Paul v.H. for help on this release


------------------------
V5.9.6

- added Int64 support for index expressions
- updates to support for Kylix (dbf_wtil.pas)
- fixed bug: Parser.GetResultType for single field indexes
- fixed bug: IndexFile.ExtractKeyFromBuffer integer -> numeric conversion
- fixed bug: creating NDX index crashes
- fixed bug: creating NDX index wrong locale
- fixed bug: while filtering wrong memo contents retrieved


------------------------
V5.9.5

- added: beta support for Kylix (2)
- fixed: last field missing (reported by wimb and many others)
- fixed: Delphi 3 compatibility problem in Dbf_Fields.pas
- fixed: calculated fields bug (sometimes not show data)


------------------------
V5.9.4

- added: beta support for numeric indexes in MDX
- changes Delphi 3 compatible (as reported by crest)
- change Delphi 4 compatible: .Items[I].Free instead of .Delete(I)
- fixed store that an index is an expression index -> indexes read from
  file are 'always' tagged as expression index...will keep you updated
- change TDbf_D6*.dpk -> they work now...dbf.dcr problem resolved
- fixed bug: detect end of header, invalid dbf


------------------------
V5.9.3

- added IndexName property list...listing MDX / NDX indexes
- added distinct index support
  - use ixPrimary in IndexOptions to create
  - checks key violations
- removed RES file requirement from CB packages
- fixed NDX index bug: opening index fails (out of bounds) (report by thx)
- fixed MDX open dBase VII index bug...language id mismatch
- fixed MDX multiple index bug: key was calculated before selection
  instead of after, oops :-(


------------------------
V5.9.2

- added support for creating tables in different locales/codepages
  - default is ANSI / Western European (= ENGLISH_UK currently)
  - eg. to create table in US locale
      DbfGlobals.CodePage := 437;
      DbfGlobals.Locale := LANG_ENGLISH or (SUBLANG_ENGLISH_US shl 10);
- changed structure: Mdx & Ndx implemented as descendants of TIndexPage
- new (public) DisableResyncOnPost property, if enabled, will suppress resync
  after post -> will increase speed. Use it if you are editing all records.
- removed global variable FDbfExePath
- fixed memory leak: expression record
- fixed setfielddata.string bug (reported by atilla)


------------------------
V5.9.1

- added duplicate field name handling
- fixed index close bug
- added TDbfIndexDef.Assign
- added TDbf.TableLevel property, indicates table level like TTable
- added support for creating dBase7 databases
  - set TTable.TableLevel to 7 before calling CreateTable
- added fieldlist copy feature VCL->DBF
  - eg.:
    FieldDefs: TFieldDefs;
    DbfFieldDefs: TDbfFieldDefs;
    ...
    DbfFieldDefs.Assign(FieldDefs);
  - float/integer fields will get a default size / precision
  - CopyFrom will get index of field that is assigned
- added restructure procedure
  - probably still buggy -> TEST WELL before using
  - table needs to be closed before calling restructuretable
  - create TDbfFieldDefs list
  - TDbfFieldDef.CopyFrom
    - is index of current table field to copy
    - CopyFrom = -1 means add
  - eg.:
    NewFieldDefs: TDbfFieldDefs;
    NewFieldDef: TDbfFieldDef;
    Dbf1: TDbf;
    ...
    // create new field list
    NewFieldDefs := TDbfFieldDefs.Create(Self);
    // assign current list
    NewFieldDefs.Assign(Dbf1.DbfFieldDefs);
    // assume first field is string, 20 wide, make larger to 40
    NewFieldDefs.Items[0].Size := 40;
    // rename second field to 'RENAMED'
    NewFieldDefs.Items[1].FieldName := 'RENAMED';
    // add a float field
    NewFieldDef := NewFieldDefs.AddFieldDef;
    NewFieldDef.FieldName := 'NEW_FLOAT';
    NewFieldDef.FieldType := ftFloat;
    NewFieldDef.Size := 10;
    NewFieldDef.Precision := 3;
    // restructure table and pack
    Dbf1.Restructure(NewFieldDefs, true);
    // restructure table and not pack
    //Dbf1.Restructure(NewFieldDefs, false);
    // free mem
    NewFieldDefs.Free;


------------------------
V5.9

- Master / detail supported!
  - NOTE: TDbf can only have another TDbf as master!
  - MasterFields is an expression
- TableName / FilePath handling changed...bug fixed
  if FilePath is non-empty then a file assigned to TableName without path
  will not clear FilePath -> bug fixed reading from DFM
- expression with variables: 'function/operand has too many arguments' fixed
- memory leaks fixed
- index repaging fixed
- index cursor move next fixed (possible problem at EOF)


------------------------
V5.8.2

- SetTableName simplified, extract full path
- IsDeleted fixed
- PackTable fixed
- Grouping of files in TDbfDatabase removed
  -> each TDbf has it's own TDbfFile, no sharing -> some bugs fixed
- Renamed global DbfDefaultDatabase to DbfGlobals
- Renamed files to Dbf_* to distinguish a little from others, note:
  - FieldDef -> Dbf_Fields
  - Index* -> Dbf_Idx*
  - Parse* -> Dbf_Prs*; except Parser -> Dbf_Parser
- AutoInc field bugs fixed:
  - generate value at post
  - multi-user share aware
- IncludeTrailingBackslash added for D4 and earlier


------------------------
V5.8.1

- field types: size=1..4, prec=0 is always smallint


------------------------
V5.8

- MAJOR COOL: field default values are supported!
  - you can't create table with default values yet, (dBase 7 only)
  - if table is made with DB2K, dBase 7, default values are read from header
- exclusive access is required for PackTable to avoid corruption
- automatically add last backslash in FilePath, now really works
- sorry, 5.7.7 didn't compile
- renamed MSWINDOWS defs to WIN32, which is more standard
- DBF locking is now BDE compatible, not sure about index & memo
- Added TDbf.UseFloatFields, when dbffieldtype = 'N', then UseFloatFields
  will force ftFloat fields, otherwise when precision is zero an integer field
  will be used, NOTE: UseFloatFields is default true
- structure change: passing data via constructor to assigning through
  properties (cleaner)


------------------------
V5.7.7

- Italian message strings in Strings_ITA.pas (thanks delphiguru)
- D7 project files
- automatically add last backslash in FilePath
- deleted records are now checked with (= '*') instead of (<> ' ')
  -> slightly different runtime behaviour if another character is present


------------------------
V5.7.6

- _DBASELOCK field can now be in any position
- locking bug fixed
- ShowDeleted bug fixed
- Delete method bug fixed
- Inserting a record will return physical recno: -1


------------------------
V5.7.5

- _DBASELOCK field is hidden from normal view
- changes from Paul van Helden applied:
  - assigning Filtered property
  - default size/precision float field
- Int64 support enabled for Delphi 4
- AutoInc fields enabled for Delphi 4


------------------------
V5.7.4

- Delphi 4 date field bug, worked on, untested, I hope it works now
- Delphi 7: dbf_reg needs ExptIntf as unit
- constructing field list bug fixed...more dbase 7 compatible
  now reads until field termination character found
- various memory leaks fixed
- when last field is named _DBASELOCK it will update it when start edit:
  - first 2 bytes: change count is incremented
  - next  3 bytes: current time hour,minute,second
  - next  3 bytes: current date year,month,day
  - next  0..16 bytes: name of user who locked the record


------------------------
V5.7.3

- unique indexes supported
- descending indexes supported
- parser bugs fixed:
  - clearing expression
  - resulting length from simple field


------------------------
V5.7.2

- striving for delphi 4 and older compatibility.... (thanks don)
  - TDbf.GetFieldData/SetFieldData seems D5 only


------------------------
V5.7.1

- parser core bugs fixed:
  - multiple arguments
  - integer arguments
- float fields bug fixed: storing data
- index bugs fixed:
  - auto detecting float result from expression
  - updating index when record edited
- parser will now only accept a dot as decimal separator whatever your
  DecimalSeparator character is. A comma will always be the argument separator.


------------------------
V5.7.0

- Dbf.dcr added
- Packages added
  - all named tdbf_..., see package.txt
  - I hope they all work...I haven't been able to test them
- GetFieldData method: boolean field type widened to Word length
- Index Expression Support !!!
  - used FWS expression parser from torry.net
  - still adding functions but basic STR() and DTOS() and '+' are implemented
- Languages replaced by own LCID list so that it can compile under D4/C4 and older


------------------------
V5.6.5

- fixed indexing bugs
  - locale mismatch
  - opening ndx files corrupted them
- demo works again!
- some help on new events:
  - OnLanguageWarning: when a specified codepage in dbf file is not present
    on computer, then this event is fired, you can force a different codepage
    or just OEM or ANSI
  - OnLocaleError: when locale used in index is not present on computer this
    event is fired. When using wrong locale, you can mess up the index!!!
    Again, you can force to use the index, default is to close.
  - OnIndexMissing: when dbf file has flag that there is a MDX index attached
    to this dbf file, then when this MDX file is not present, this event is fired.
    You need to override it if you want to copy another MDX index to this database,
    default is to break link to MDX file.


------------------------
V5.6.4

- fixed 'CloseDbf' bug (thanks Paul, Eugeny) when opening / closing tables many times
- Delphi 3 supported again (removed Int64 reference & recoding) (test compile D3, anyone?)


------------------------
V5.6.3

- fixed CreateTable bug (thanks Eugeny)
  - there seemed heavy need for this fix :-)
- fixed Memo bug (thanks Christian)


------------------------
V5.6.2

- fixed stupid Undelete bug (thanks Gvido)
- fixed NDX index list bugs
- fixed indexing bugs
- included dbflang.inc in package


------------------------
V5.6.1

- language support...continued (locale support added). index sorting is now
  done using locale-dependent CompareString from Windows. However, it seems
  to be always case insensitive.
- FIndexes bug fixed, indexfile always created as NDX index, now it is created
  based only as NDX if .NDX added, otherwise in MDX file. (thanks thiaux for pointing it out)
- new FOnIndexMissing event, when an MDX index is missing, it will notify you asking to delete
  the link or close file
- new ExactRecordCount property, it will give #records you are viewing:
    RecordCount - #deleted records - #records not in filter
  warning: this will visit the whole dataset each time you request the property,
  so it will be very slow on larger tables


------------------------
V5.6

- language support (codepages)
  - NOTE: this is Win32 compatible only, whole project is now Win32 compatible only for sure
    can anyone translate the codepages to linux? to make it linux compatible again
- TTranslateEvent changed, you have to return an Integer with length of Dest, or -1 to let it be calculated automatically


------------------------
V5.5

- Parser now in separate class: potential to parse more complex expressions, including multi-field indexes and such
- Linux compatible support...test anyone...I don't have Kylix...
- Bugfixes in InternalDelete and PackTable, thanks jimcampbel


------------------------
V5.4

- Multi-user support
- Some indexing bugs resolved


------------------------
V5.3.1

- TIndexPage.FindNearest uses binary search instead of linear


------------------------
V5.3

- SearchKey method searches on index for a given key
    SearchKeyType: stEqual, stGreaterEqual, stGreater
- MDX index support: index names with no extension now create a MDX index
    belonging to dbf file
- SetRange method instead of BracketLow/BracketHigh, rewritten range support
- Index.SetPhysicalRecNo much faster, using Find instead of searching recno


------------------------
V5.002 and older

- see original TDbf website?