123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210 |
- {
- $Id$
- Copyright (c) 1999-2000 by Michael Van Canneyt, member of
- the Free Pascal development team
- gdbm database routines header translations.
- See the file COPYING.FPC, included in this distribution,
- for details about the copyright.
- This program is distributed in the hope that it will be useful,
- but WITHOUT ANY WARRANTY; without even the implied warranty of
- MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
- **********************************************************************}
- {$h+}
- unit gdbm;
- interface
- const
- External_library='gdbm';
- { Pointers to basic pascal types, inserted by h2pas conversion program.}
- Type
- PLongint = ^Longint;
- PSmallInt = ^SmallInt;
- PByte = ^Byte;
- PWord = ^Word;
- PDWord = ^DWord;
- PDouble = ^Double;
- {$PACKRECORDS C}
- const
- { Parameters to gdbm_open for READERS, WRITERS, and WRITERS who
- can create the database. }
- GDBM_READER = 0;
- GDBM_WRITER = 1;
- GDBM_WRCREAT = 2;
- GDBM_NEWDB = 3;
- GDBM_FAST = $10;
- GDBM_DOSYNC = $20; // Was GDBM_SYNC, but conflicts with gdbm_sync !!
- GDBM_NOLOCK = $40;
- GDBM_INSERT = 0;
- GDBM_REPLACE = 1;
- GDBM_CACHESIZE = 1;
- GDBM_FASTMODE = 2;
- GDBM_SYNCMODE = 3;
- GDBM_CENTFREE = 4;
- GDBM_COALESCEBLKS = 5;
- { Error Codes }
- GDBM_NO_ERROR = 0;
- GDBM_MALLOC_ERROR = 1;
- GDBM_BLOCK_SIZE_ERROR = 2;
- GDBM_FILE_OPEN_ERROR = 3;
- GDBM_FILE_WRITE_ERROR = 4;
- GDBM_FILE_SEEK_ERROR = 5;
- GDBM_FILE_READ_ERROR = 6;
- GDBM_BAD_MAGIC_NUMBER = 7;
- GDBM_EMPTY_DATABASE = 8;
- GDBM_CANT_BE_READER = 9;
- GDBM_CANT_BE_WRITER = 10;
- GDBM_READER_CANT_DELETE = 11;
- GDBM_READER_CANT_STORE = 12;
- GDBM_READER_CANT_REORGANIZE = 13;
- GDBM_UNKNOWN_UPDATE = 14;
- GDBM_ITEM_NOT_FOUND = 15;
- GDBM_REORGANIZE_FAILED = 16;
- GDBM_CANNOT_REPLACE = 17;
- GDBM_ILLEGAL_DATA = 18;
- GDBM_OPT_ALREADY_SET = 19;
- GDBM_OPT_ILLEGAL = 29;
- type
- TDatum = record
- dptr : Pchar;
- dsize : longint;
- end;
- PDatum = ^TDatum;
- TGDBM_FILE = record
- dummy : array[0..9] of longint;
- end;
- PGDBM_FILE = ^TGDBM_FILE;
- TGDBMErrorCallBack = Procedure;
- var
- gdbm_version : Pchar;cvar; external; {name 'gdbm_version' not accepted ??}
- function gdbm_open(para1:Pchar; para2:longint; para3:longint; para4:longint; para5:TGDBMErrorCallBack ):PGDBM_FILE;cdecl;external External_library name 'gdbm_open';
- procedure gdbm_close(para1:PGDBM_FILE);cdecl;external External_library name 'gdbm_close';
- function gdbm_store(para1:PGDBM_FILE; para2:TDatum; para3:TDatum; para4:longint):longint;cdecl;external External_library name 'gdbm_store';
- function gdbm_fetch(para1:PGDBM_FILE; para2:TDatum):TDatum;cdecl;external External_library name 'gdbm_fetch';
- function gdbm_delete(para1:PGDBM_FILE; para2:TDatum):longint;cdecl;external External_library name 'gdbm_delete';
- function gdbm_firstkey(para1:PGDBM_FILE):TDatum;cdecl;external External_library name 'gdbm_firstkey';
- function gdbm_nextkey(para1:PGDBM_FILE; para2:TDatum):TDatum;cdecl;external External_library name 'gdbm_nextkey';
- function gdbm_reorganize(para1:PGDBM_FILE):longint;cdecl;external External_library name 'gdbm_reorganize';
- procedure gdbm_sync(para1:PGDBM_FILE);cdecl;external External_library name 'gdbm_sync';
- function gdbm_exists(para1:PGDBM_FILE; para2:TDatum):longint;cdecl;external External_library name 'gdbm_exists';
- function gdbm_setopt(para1:PGDBM_FILE; para2:longint; para3:Plongint; para4:longint):longint;cdecl;external External_library name 'gdbm_setopt';
- function gdbm_fdesc(para1:PGDBM_FILE):longint;cdecl;external External_library name 'gdbm_fdesc';
- { Easy Pascal access routines }
- 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;
- type
- gdbm_error = longint;
- var
- gdbm_errno : gdbm_error;cvar;external{ 'gdbm_errno'};
- function gdbm_strerror(para1:gdbm_error):Pchar;cdecl;external External_library name 'gdbm_strerror';
- implementation
- function gdbm_open(Const para1:string; para2:longint; para3:longint; para4:longint; para5:TGDBMErrorCallBack ):PGDBM_FILE;
- begin
- gdbm_open:=gdbm_open(@para1[1],para2,para3,para4,para5);
- end;
- procedure cfree (P : pointer);cdecl; external 'c' name 'free';
- Function DatumToString(Key : TDatum) : String;
- begin
- SetLength(DatumToString,Key.dsize);
- If key.Dsize>0 then
- Move(key.dptr^,DatumToString[1],key.dsize);
- if key.dptr<>Nil then
- cfree(Key.dptr);
- end;
- Function StringToDatum(Value : String) : TDatum;
- begin
- StringToDatum.dptr:=@Value[1];
- StringToDatum.dsize:=Length(Value);
- end;
- function gdbm_store(para1:PGDBM_FILE; Const para2:string; Const para3:string; para4:longint):Boolean;
- Var
- Data,Key : TDatum;
- begin
- Data:=StringToDatum(Para3);
- Key:=StringToDatum(Para2);
- gdbm_store:=gdbm_store(para1,key,data,para4)=0;
- end;
- function gdbm_fetch(para1:PGDBM_FILE; Const para2:string):string;
- begin
- gdbm_fetch:=DatumToString(gdbm_fetch(para1,StringToDatum(Para2)));
- end;
- function gdbm_delete(para1:PGDBM_FILE; Const para2:string):boolean;
- begin
- gdbm_delete:=gdbm_delete(Para1,StringToDatum(para2))=0;
- end;
- Procedure gdbm_firstkey(para1:PGDBM_FILE; var key : String);
- begin
- Key:=DatumToString(gdbm_firstkey(para1));
- end;
- function gdbm_nextkey(para1:PGDBM_FILE; Const Para2 :string):string;
- begin
- gdbm_nextkey:=DatumToString(gdbm_nextkey(para1,StringToDatum(para2)));
- end;
- function gdbm_exists(para1:PGDBM_FILE; const para2:string):boolean;
- begin
- gdbm_exists:=gdbm_exists(para1,StringToDatum(para2))<>0;
- end;
- end.
- {
- $Log$
- Revision 1.2 2002-09-07 15:42:57 peter
- * old logs removed and tabs fixed
- Revision 1.1 2002/01/29 17:55:03 peter
- * splitted to base and extra
- }
|