fpc/packages/gdbm
marco 74aff88586 --- Merging r49045 into '.':
C    Makefile
C    Makefile.fpc
--- Recording mergeinfo for merge of r49045 into '.':
 U   .
Summary of conflicts:
  Text conflicts: 2

# revisions: 49045
r49045 | jonas | 2021-03-24 15:33:09 +0100 (Wed, 24 Mar 2021) | 1 line
Changed paths:
   M /trunk/Makefile
   M /trunk/Makefile.fpc

  * support building with FPC 3.2.2

git-svn-id: branches/fixes_3_2@49384 -
2021-05-20 20:03:52 +00:00
..
examples Regenerate all Makefile's after ios introduction and macos->macosclassic changes inside utils/fpcm/fpcmake.ini 2020-09-23 09:47:20 +00:00
src
fpmake.pp --- Merging r49045 into '.': 2021-05-20 20:03:52 +00:00
Makefile --- Merging r49045 into '.': 2021-05-20 20:03:52 +00:00
Makefile.fpc --- Merging r49045 into '.': 2021-05-20 20:03:52 +00:00
Makefile.fpc.fpcmake --- Merging r49045 into '.': 2021-05-20 20:03:52 +00:00
README.txt

This is the Free Pascal interface to the GDBM library routines. 
Essentially, this is a translation of the gdbm.h header files, with some
additional routines.

The headers translated without any problems, the only thing that should
be taken into account is that the 
GDBM_SYNC constant (for open flags) has been renamed to GDMB_DOSYNC
because it conflicts with the gdbm_sync function. 

Be careful: the TDatum.dptr data pointer which is allocated by the
gdbm routines should be freed by the C free() call, NOT with the 
pascal FreeMem() call.

A solution for this is to use the 'cmem' unit, which replaces the standard
FPC memory manager with the C memory manager. In that case, freemem()
may be used to free the dptr field of the TDatum record.

On top of the plain C header translations, The GDBM routines have been 
overloaded with routines that accept plain strings as key or data 
parameters. This means the following routines have been added:

function gdbm_open(Const para1:string; para2:longint; para3:longint; para4:longint; para5:TGDBMErrorCallBack ):PGDBM_FILE;
function gdbm_store(para1:PGDBM_FILE; Const para2:string; Const para3:string; para4:longint):Boolean;
function gdbm_fetch(para1:PGDBM_FILE; Const para2:string):string;
function gdbm_delete(para1:PGDBM_FILE; Const para2:string):boolean;
procedure gdbm_firstkey(para1:PGDBM_FILE; var key :string);
function gdbm_nextkey(para1:PGDBM_FILE; Const para2:string):string;
function gdbm_exists(para1:PGDBM_FILE; Const para2:string):boolean;

They are just the C routines, but with the TDatum type (a record) 
replaced by a string. The routines take automatically care of memory
deallocation.

Functions that returned an integer to indicate success or failure have been
replaced by functions that return a boolean.

Careful: 
When using ansistrings, make sure the gdbm unit has been compiled
with the -Sh switch. The unit should work with both kinds of strings.

There are 2 test programs:
testgdbm tests the raw C header translation
testgdbm2 tests the String interface to the GDBM routines.

That's about it. 

Enjoy!

Michael. (Michael.VanCanneyt@Wisa.be)