summaryrefslogtreecommitdiff
path: root/packages/gdbm/src/gdbm.pp
diff options
context:
space:
mode:
Diffstat (limited to 'packages/gdbm/src/gdbm.pp')
-rw-r--r--packages/gdbm/src/gdbm.pp199
1 files changed, 199 insertions, 0 deletions
diff --git a/packages/gdbm/src/gdbm.pp b/packages/gdbm/src/gdbm.pp
new file mode 100644
index 0000000000..12f46ddf04
--- /dev/null
+++ b/packages/gdbm/src/gdbm.pp
@@ -0,0 +1,199 @@
+{
+ 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.