gdbm.pp 5.9 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210
  1. {
  2. $Id$
  3. Copyright (c) 1999-2000 by Michael Van Canneyt, member of
  4. the Free Pascal development team
  5. gdbm database routines header translations.
  6. See the file COPYING.FPC, included in this distribution,
  7. for details about the copyright.
  8. This program is distributed in the hope that it will be useful,
  9. but WITHOUT ANY WARRANTY; without even the implied warranty of
  10. MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
  11. **********************************************************************}
  12. {$h+}
  13. unit gdbm;
  14. interface
  15. const
  16. External_library='gdbm';
  17. { Pointers to basic pascal types, inserted by h2pas conversion program.}
  18. Type
  19. PLongint = ^Longint;
  20. PSmallInt = ^SmallInt;
  21. PByte = ^Byte;
  22. PWord = ^Word;
  23. PDWord = ^DWord;
  24. PDouble = ^Double;
  25. {$PACKRECORDS C}
  26. const
  27. { Parameters to gdbm_open for READERS, WRITERS, and WRITERS who
  28. can create the database. }
  29. GDBM_READER = 0;
  30. GDBM_WRITER = 1;
  31. GDBM_WRCREAT = 2;
  32. GDBM_NEWDB = 3;
  33. GDBM_FAST = $10;
  34. GDBM_DOSYNC = $20; // Was GDBM_SYNC, but conflicts with gdbm_sync !!
  35. GDBM_NOLOCK = $40;
  36. GDBM_INSERT = 0;
  37. GDBM_REPLACE = 1;
  38. GDBM_CACHESIZE = 1;
  39. GDBM_FASTMODE = 2;
  40. GDBM_SYNCMODE = 3;
  41. GDBM_CENTFREE = 4;
  42. GDBM_COALESCEBLKS = 5;
  43. { Error Codes }
  44. GDBM_NO_ERROR = 0;
  45. GDBM_MALLOC_ERROR = 1;
  46. GDBM_BLOCK_SIZE_ERROR = 2;
  47. GDBM_FILE_OPEN_ERROR = 3;
  48. GDBM_FILE_WRITE_ERROR = 4;
  49. GDBM_FILE_SEEK_ERROR = 5;
  50. GDBM_FILE_READ_ERROR = 6;
  51. GDBM_BAD_MAGIC_NUMBER = 7;
  52. GDBM_EMPTY_DATABASE = 8;
  53. GDBM_CANT_BE_READER = 9;
  54. GDBM_CANT_BE_WRITER = 10;
  55. GDBM_READER_CANT_DELETE = 11;
  56. GDBM_READER_CANT_STORE = 12;
  57. GDBM_READER_CANT_REORGANIZE = 13;
  58. GDBM_UNKNOWN_UPDATE = 14;
  59. GDBM_ITEM_NOT_FOUND = 15;
  60. GDBM_REORGANIZE_FAILED = 16;
  61. GDBM_CANNOT_REPLACE = 17;
  62. GDBM_ILLEGAL_DATA = 18;
  63. GDBM_OPT_ALREADY_SET = 19;
  64. GDBM_OPT_ILLEGAL = 29;
  65. type
  66. TDatum = record
  67. dptr : Pchar;
  68. dsize : longint;
  69. end;
  70. PDatum = ^TDatum;
  71. TGDBM_FILE = record
  72. dummy : array[0..9] of longint;
  73. end;
  74. PGDBM_FILE = ^TGDBM_FILE;
  75. TGDBMErrorCallBack = Procedure;
  76. var
  77. gdbm_version : Pchar;cvar; external; {name 'gdbm_version' not accepted ??}
  78. function gdbm_open(para1:Pchar; para2:longint; para3:longint; para4:longint; para5:TGDBMErrorCallBack ):PGDBM_FILE;cdecl;external External_library name 'gdbm_open';
  79. procedure gdbm_close(para1:PGDBM_FILE);cdecl;external External_library name 'gdbm_close';
  80. function gdbm_store(para1:PGDBM_FILE; para2:TDatum; para3:TDatum; para4:longint):longint;cdecl;external External_library name 'gdbm_store';
  81. function gdbm_fetch(para1:PGDBM_FILE; para2:TDatum):TDatum;cdecl;external External_library name 'gdbm_fetch';
  82. function gdbm_delete(para1:PGDBM_FILE; para2:TDatum):longint;cdecl;external External_library name 'gdbm_delete';
  83. function gdbm_firstkey(para1:PGDBM_FILE):TDatum;cdecl;external External_library name 'gdbm_firstkey';
  84. function gdbm_nextkey(para1:PGDBM_FILE; para2:TDatum):TDatum;cdecl;external External_library name 'gdbm_nextkey';
  85. function gdbm_reorganize(para1:PGDBM_FILE):longint;cdecl;external External_library name 'gdbm_reorganize';
  86. procedure gdbm_sync(para1:PGDBM_FILE);cdecl;external External_library name 'gdbm_sync';
  87. function gdbm_exists(para1:PGDBM_FILE; para2:TDatum):longint;cdecl;external External_library name 'gdbm_exists';
  88. function gdbm_setopt(para1:PGDBM_FILE; para2:longint; para3:Plongint; para4:longint):longint;cdecl;external External_library name 'gdbm_setopt';
  89. function gdbm_fdesc(para1:PGDBM_FILE):longint;cdecl;external External_library name 'gdbm_fdesc';
  90. { Easy Pascal access routines }
  91. function gdbm_open(Const para1:string; para2:longint; para3:longint; para4:longint; para5:TGDBMErrorCallBack ):PGDBM_FILE;
  92. function gdbm_store(para1:PGDBM_FILE; Const para2:string; Const para3:string; para4:longint):Boolean;
  93. function gdbm_fetch(para1:PGDBM_FILE; Const para2:string):string;
  94. function gdbm_delete(para1:PGDBM_FILE; Const para2:string):boolean;
  95. procedure gdbm_firstkey(para1:PGDBM_FILE; var key :string);
  96. function gdbm_nextkey(para1:PGDBM_FILE; Const para2:string):string;
  97. function gdbm_exists(para1:PGDBM_FILE; Const para2:string):boolean;
  98. type
  99. gdbm_error = longint;
  100. var
  101. gdbm_errno : gdbm_error;cvar;external{ 'gdbm_errno'};
  102. function gdbm_strerror(para1:gdbm_error):Pchar;cdecl;external External_library name 'gdbm_strerror';
  103. implementation
  104. function gdbm_open(Const para1:string; para2:longint; para3:longint; para4:longint; para5:TGDBMErrorCallBack ):PGDBM_FILE;
  105. begin
  106. gdbm_open:=gdbm_open(@para1[1],para2,para3,para4,para5);
  107. end;
  108. procedure cfree (P : pointer);cdecl; external 'c' name 'free';
  109. Function DatumToString(Key : TDatum) : String;
  110. begin
  111. SetLength(DatumToString,Key.dsize);
  112. If key.Dsize>0 then
  113. Move(key.dptr^,DatumToString[1],key.dsize);
  114. if key.dptr<>Nil then
  115. cfree(Key.dptr);
  116. end;
  117. Function StringToDatum(Value : String) : TDatum;
  118. begin
  119. StringToDatum.dptr:=@Value[1];
  120. StringToDatum.dsize:=Length(Value);
  121. end;
  122. function gdbm_store(para1:PGDBM_FILE; Const para2:string; Const para3:string; para4:longint):Boolean;
  123. Var
  124. Data,Key : TDatum;
  125. begin
  126. Data:=StringToDatum(Para3);
  127. Key:=StringToDatum(Para2);
  128. gdbm_store:=gdbm_store(para1,key,data,para4)=0;
  129. end;
  130. function gdbm_fetch(para1:PGDBM_FILE; Const para2:string):string;
  131. begin
  132. gdbm_fetch:=DatumToString(gdbm_fetch(para1,StringToDatum(Para2)));
  133. end;
  134. function gdbm_delete(para1:PGDBM_FILE; Const para2:string):boolean;
  135. begin
  136. gdbm_delete:=gdbm_delete(Para1,StringToDatum(para2))=0;
  137. end;
  138. Procedure gdbm_firstkey(para1:PGDBM_FILE; var key : String);
  139. begin
  140. Key:=DatumToString(gdbm_firstkey(para1));
  141. end;
  142. function gdbm_nextkey(para1:PGDBM_FILE; Const Para2 :string):string;
  143. begin
  144. gdbm_nextkey:=DatumToString(gdbm_nextkey(para1,StringToDatum(para2)));
  145. end;
  146. function gdbm_exists(para1:PGDBM_FILE; const para2:string):boolean;
  147. begin
  148. gdbm_exists:=gdbm_exists(para1,StringToDatum(para2))<>0;
  149. end;
  150. end.
  151. {
  152. $Log$
  153. Revision 1.2 2002-09-07 15:42:57 peter
  154. * old logs removed and tabs fixed
  155. Revision 1.1 2002/01/29 17:55:03 peter
  156. * splitted to base and extra
  157. }