Browse Source

* unmerged table based initialization of libraries.

git-svn-id: trunk@16941 -
marco 14 years ago
parent
commit
88e22be01a

+ 408 - 359
packages/ibase/src/ibase60.inc

@@ -1,11 +1,20 @@
+{
+}
+
 {$MODE objfpc}
 {$MODE objfpc}
 {$MACRO on}
 {$MACRO on}
-{$PACKRECORDS C}
 
 
 interface
 interface
 
 
-uses
-  Dynlibs, ctypes;
+{$IFDEF LinkDynamically}
+uses Dynlibs, sysutils,ctypes;
+
+Var
+  UseEmbeddedFirebird : Boolean = False;
+
+{$ELSE}
+uses Dynlibs,ctypes;
+{$ENDIF}
 
 
 {$IFDEF Unix}
 {$IFDEF Unix}
   {$DEFINE extdecl:=cdecl}
   {$DEFINE extdecl:=cdecl}
@@ -22,41 +31,58 @@ uses
     fbembedlib = 'fbembed.dll';
     fbembedlib = 'fbembed.dll';
 {$ENDIF}
 {$ENDIF}
 
 
-const
-   ISC_TRUE      = 1;
-   ISC_FALSE     = 0;
-   ISC__TRUE     = ISC_TRUE;
-   ISC__FALSE    = ISC_FALSE;
+type
+  {  Unsigned types }
+
+  UChar                = Byte;
+  UShort               = Word;
+  UInt                 = DWord;
+  ULong                = DWord;
 
 
-Type
-   ISC_SCHAR     = char;
-   ISC_UCHAR     = cuchar;
-   ISC_SHORT     = cshort;
-   ISC_USHORT    = cushort;
-   ISC_STATUS    = ptrint;   // bug 17360
-   ISC_INT64     = clonglong;
-   ISC_UINT64    = culonglong;
-{$IFDEF CPU64}
-   ISC_LONG      = cint;
-   ISC_ULONG     = cuint;
-{$ELSE}
-   ISC_LONG      = clong;
-   ISC_ULONG     = culong;
-{$ENDIF}
+  { Signed types }
+
+  Int                  = LongInt;
+  Long                 = LongInt;
+  Short                = SmallInt;
+  Float                = Single;
 
 
-   PISC_SCHAR    = pchar;
-   PISC_UCHAR    = ^ISC_UCHAR;
-   PISC_SHORT    = ^ISC_SHORT;
-   PISC_USHORT   = ^ISC_USHORT;
-   PISC_STATUS   = ^ISC_STATUS;
-   PPISC_STATUS  = ^PISC_STATUS;
-   PISC_INT64    = ^ISC_INT64;
-   PISC_UINT64   = ^ISC_UINT64;
-   PISC_LONG     = ^ISC_LONG;
+  { Pointers to basic types }
 
 
-const
-   DSQL_close    = 1;
-   DSQL_drop     = 2;
+  PInt                 = ^Int;
+  PShort               = ^Short;
+  PUShort              = ^UShort;
+  PLong                = ^Long;
+  PULong               = ^ULong;
+  PFloat               = ^Float;
+  PUChar               = ^UChar;
+  PVoid                = ^Pointer;
+
+{$PACKRECORDS C}
+
+  const
+     ISC_TRUE = 1;
+     ISC_FALSE = 0;
+  const
+     ISC__TRUE = ISC_TRUE;
+     ISC__FALSE = ISC_FALSE;
+
+Type
+   ISC_USHORT    = word;
+   ISC_STATUS    = clong;
+   ISC_INT64     = int64;
+   ISC_UINT64    = qword;
+   ISC_LONG      = Longint;
+
+   PISC_USHORT = ^ISC_USHORT;
+   PISC_STATUS = ^ISC_STATUS;
+   PPISC_STATUS = ^PISC_STATUS;
+   PISC_INT64 = ^ISC_INT64;
+   PISC_UINT64 = ^ISC_UINT64;
+   PISC_LONG = ^ISC_LONG;
+
+  const
+     DSQL_close = 1;
+     DSQL_drop = 2;
 
 
   {!!MVC
   {!!MVC
     Removed all ISC_FAR, ISC_EXPORT_VARARG and ISC_EXPORT
     Removed all ISC_FAR, ISC_EXPORT_VARARG and ISC_EXPORT
@@ -70,8 +96,8 @@ const
 
 
   type
   type
 
 
-     ISC_DATE = cint;
-     ISC_TIME = cuint;
+     ISC_DATE = longint;
+     ISC_TIME = dword;
      ISC_TIMESTAMP = record
      ISC_TIMESTAMP = record
           timestamp_date : ISC_DATE;
           timestamp_date : ISC_DATE;
           timestamp_time : ISC_TIME;
           timestamp_time : ISC_TIME;
@@ -93,57 +119,19 @@ const
   { Blob id structure                                                }
   { Blob id structure                                                }
   {                                                                  }
   {                                                                  }
 
 
-type
-  PGDS_QUAD = ^GDS_QUAD;
-  GDS_QUAD = record
-    gds_quad_high : ISC_LONG;
-    gds_quad_low : ISC_LONG;
-  end;
-  TGDS_QUAD = GDS_QUAD;
+Type
 
 
-  ISC_QUAD = GDS_QUAD;
-  TISC_QUAD = ISC_QUAD;
-  PISC_QUAD = ^ISC_QUAD;
-
-  {                               }
-  { InterBase Handle Definitions  }
-  {                               }
-
-  type
-     isc_att_handle = pointer;
-     isc_blob_handle = pointer;
-     isc_db_handle = pointer;
-     isc_form_handle = pointer;
-     isc_req_handle = pointer;
-     isc_stmt_handle = pointer;
-     isc_svc_handle = pointer;
-     isc_tr_handle = pointer;
-     isc_win_handle = pointer;
-     isc_callback = procedure ;extdecl;
-     isc_resv_handle = ISC_LONG;
-     tisc_att_handle = isc_att_handle;
-     tisc_blob_handle = isc_blob_handle;
-     tisc_db_handle = isc_db_handle;
-     tisc_form_handle = isc_form_handle;
-     tisc_req_handle = isc_req_handle;
-     tisc_stmt_handle = isc_stmt_handle;
-     tisc_svc_handle = isc_svc_handle;
-     tisc_tr_handle = isc_tr_handle;
-     tisc_win_handle = isc_win_handle;
-     tisc_callback = isc_callback;
-     tisc_resv_handle = isc_resv_handle;
-     pisc_att_handle  =^isc_att_handle ;
-     pisc_blob_handle  =^isc_blob_handle ;
-     pisc_db_handle  =^isc_db_handle ;
-     pisc_form_handle  =^isc_form_handle ;
-     pisc_req_handle  =^isc_req_handle ;
-     pisc_stmt_handle  =^isc_stmt_handle ;
-     pisc_svc_handle  =^isc_svc_handle ;
-     pisc_tr_handle  =^isc_tr_handle ;
-     pisc_win_handle  =^isc_win_handle ;
-     pisc_callback  = ^isc_callback;
-     pisc_resv_handle  =^isc_resv_handle ;
+   GDS_QUAD = record
+      gds_quad_high : ISC_LONG;
+      gds_quad_low : ISC_LONG;
+   end;
+   TGDS_QUAD = GDS_QUAD;
+   PGDS_QUAD = ^GDS_QUAD;
 
 
+Type
+     ISC_QUAD = GDS_QUAD;
+     TISC_QUAD = ISC_QUAD;
+     PISC_QUAD = ^ISC_QUAD;
 
 
 { !!field redefinitions !!
 { !!field redefinitions !!
      isc_quad_high = gds_quad_high;
      isc_quad_high = gds_quad_high;
@@ -153,31 +141,31 @@ type
 type
 type
 
 
      ISC_ARRAY_BOUND = record
      ISC_ARRAY_BOUND = record
-          array_bound_lower : cshort;
-          array_bound_upper : cshort;
+          array_bound_lower : smallint;
+          array_bound_upper : smallint;
        end;
        end;
      TISC_ARRAY_BOUND = ISC_ARRAY_BOUND;
      TISC_ARRAY_BOUND = ISC_ARRAY_BOUND;
      PISC_ARRAY_BOUND = ^ISC_ARRAY_BOUND;
      PISC_ARRAY_BOUND = ^ISC_ARRAY_BOUND;
 
 
      ISC_ARRAY_DESC = record
      ISC_ARRAY_DESC = record
-          array_desc_dtype : ISC_UCHAR;
-          array_desc_scale : ISC_SCHAR;
-          array_desc_length : cushort;
-          array_desc_field_name : array[0..31] of ISC_SCHAR;
-          array_desc_relation_name : array[0..31] of ISC_SCHAR;
-          array_desc_dimensions : cushort;
-          array_desc_flags : cushort;
+          array_desc_dtype : byte;
+          array_desc_scale : char;
+          array_desc_length : word;
+          array_desc_field_name : array[0..31] of char;
+          array_desc_relation_name : array[0..31] of char;
+          array_desc_dimensions : smallint;
+          array_desc_flags : smallint;
           array_desc_bounds : array[0..15] of ISC_ARRAY_BOUND;
           array_desc_bounds : array[0..15] of ISC_ARRAY_BOUND;
        end;
        end;
      TISC_ARRAY_DESC = ISC_ARRAY_DESC;
      TISC_ARRAY_DESC = ISC_ARRAY_DESC;
      PISC_ARRAY_DESC = ^ISC_ARRAY_DESC;
      PISC_ARRAY_DESC = ^ISC_ARRAY_DESC;
 
 
      ISC_BLOB_DESC = record
      ISC_BLOB_DESC = record
-          blob_desc_subtype : cushort;
-          blob_desc_charset : cushort;
-          blob_desc_segment_size : cushort;
-          blob_desc_field_name : array[0..31] of ISC_UCHAR;
-          blob_desc_relation_name : array[0..31] of ISC_UCHAR;
+          blob_desc_subtype : smallint;
+          blob_desc_charset : smallint;
+          blob_desc_segment_size : smallint;
+          blob_desc_field_name : array[0..31] of byte;
+          blob_desc_relation_name : array[0..31] of byte;
        end;
        end;
      TISC_BLOB_DESC = ISC_BLOB_DESC;
      TISC_BLOB_DESC = ISC_BLOB_DESC;
      PISC_BLOB_DESC = ^ISC_BLOB_DESC ;
      PISC_BLOB_DESC = ^ISC_BLOB_DESC ;
@@ -205,24 +193,24 @@ type
   { Total length of blob  }
   { Total length of blob  }
   { Address of status vector  }
   { Address of status vector  }
   { Application specific data  }
   { Application specific data  }
-  TCTLSourceFunction  = function : ISC_STATUS;
+  TCTLSourceFunction  = function : isc_long;
 
 
      PISC_BLOB_CTL = ^ISC_BLOB_CTL ;
      PISC_BLOB_CTL = ^ISC_BLOB_CTL ;
      ISC_BLOB_CTL = record
      ISC_BLOB_CTL = record
           ctl_source : TCTLSourceFunction;     //  was ISC_STATUS ( *ctl_source)();
           ctl_source : TCTLSourceFunction;     //  was ISC_STATUS ( *ctl_source)();
           ctl_source_handle : pisc_blob_ctl  ; // was struct isc_blob_ctl  * ctl_source_handle;
           ctl_source_handle : pisc_blob_ctl  ; // was struct isc_blob_ctl  * ctl_source_handle;
-          ctl_to_sub_type : cshort;
-          ctl_from_sub_type : cshort;
-          ctl_buffer_length : cushort;
-          ctl_segment_length : cushort;
-          ctl_bpb_length : cushort;
-          ctl_bpb : PISC_SCHAR;
-          ctl_buffer : PISC_UCHAR;
+          ctl_to_sub_type : smallint;
+          ctl_from_sub_type : smallint;
+          ctl_buffer_length : word;
+          ctl_segment_length : word;
+          ctl_bpb_length : word;
+          ctl_bpb : Pchar;
+          ctl_buffer : Pbyte;
           ctl_max_segment : ISC_LONG;
           ctl_max_segment : ISC_LONG;
           ctl_number_segments : ISC_LONG;
           ctl_number_segments : ISC_LONG;
           ctl_total_length : ISC_LONG;
           ctl_total_length : ISC_LONG;
           ctl_status : PISC_STATUS;
           ctl_status : PISC_STATUS;
-          ctl_data : array[0..7] of clong;
+          ctl_data : array[0..7] of longint;
        end;
        end;
      TISC_BLOB_CTL = ISC_BLOB_CTL;
      TISC_BLOB_CTL = ISC_BLOB_CTL;
 
 
@@ -237,12 +225,12 @@ type
   { (mode) ? OUTPUT : INPUT  }
   { (mode) ? OUTPUT : INPUT  }
 
 
      BSTREAM = record
      BSTREAM = record
-          bstr_blob : isc_blob_handle;
-          bstr_buffer : PISC_SCHAR;
-          bstr_ptr : PISC_SCHAR;
-          bstr_length : cshort;
-          bstr_cnt : cshort;
-          bstr_mode : cchar;
+          bstr_blob : pointer;
+          bstr_buffer : Pchar;
+          bstr_ptr : Pchar;
+          bstr_length : smallint;
+          bstr_cnt : smallint;
+          bstr_mode : char;
        end;
        end;
      TBSTREAM = BSTREAM;
      TBSTREAM = BSTREAM;
      PBstream = ^BSTREAM;
      PBstream = ^BSTREAM;
@@ -280,20 +268,20 @@ type
   { NULL  }
   { NULL  }
 
 
      XSQLVAR = record
      XSQLVAR = record
-          sqltype : ISC_SHORT;
-          sqlscale : ISC_SHORT;
-          sqlsubtype : ISC_SHORT;
-          sqllen : ISC_SHORT;
-          sqldata : PISC_SCHAR;
-          sqlind : PISC_SHORT;
-          sqlname_length : ISC_SHORT;
-          sqlname : array[0..31] of ISC_SCHAR;
-          relname_length : ISC_SHORT;
-          relname : array[0..31] of ISC_SCHAR;
-          ownname_length : ISC_SHORT;
-          ownname : array[0..31] of ISC_SCHAR;
-          aliasname_length : ISC_SHORT;
-          aliasname : array[0..31] of ISC_SCHAR;
+          sqltype : smallint;
+          sqlscale : smallint;
+          sqlsubtype : smallint;
+          sqllen : smallint;
+          sqldata : Pchar;
+          sqlind : Psmallint;
+          sqlname_length : smallint;
+          sqlname : array[0..31] of char;
+          relname_length : smallint;
+          relname : array[0..31] of char;
+          ownname_length : smallint;
+          ownname : array[0..31] of char;
+          aliasname_length : smallint;
+          aliasname : array[0..31] of char;
        end;
        end;
      TXSQLVAR = XSQLVAR;
      TXSQLVAR = XSQLVAR;
      PXSQLVAR =^XSQLVAR;
      PXSQLVAR =^XSQLVAR;
@@ -305,11 +293,11 @@ type
   { first field address  }
   { first field address  }
 
 
      XSQLDA = record
      XSQLDA = record
-          version : ISC_SHORT;
-          sqldaid : array[0..7] of ISC_SCHAR;
+          version : smallint;
+          sqldaid : array[0..7] of char;
           sqldabc : ISC_LONG;
           sqldabc : ISC_LONG;
-          sqln : ISC_SHORT;
-          sqld : ISC_SHORT;
+          sqln : smallint;
+          sqld : smallint;
           sqlvar : array[0..0] of XSQLVAR;
           sqlvar : array[0..0] of XSQLVAR;
        end;
        end;
      TXSQLDA = XSQLDA;
      TXSQLDA = XSQLDA;
@@ -334,6 +322,44 @@ type
      SQL_DIALECT_V6 = 3;
      SQL_DIALECT_V6 = 3;
   { latest IB DIALECT  }
   { latest IB DIALECT  }
      SQL_DIALECT_CURRENT = SQL_DIALECT_V6;
      SQL_DIALECT_CURRENT = SQL_DIALECT_V6;
+  {                               }
+  { InterBase Handle Definitions  }
+  {                               }
+
+  type
+     isc_att_handle = pointer;
+     isc_blob_handle = pointer;
+     isc_db_handle = pointer;
+     isc_form_handle = pointer;
+     isc_req_handle = pointer;
+     isc_stmt_handle = pointer;
+     isc_svc_handle = pointer;
+     isc_tr_handle = pointer;
+     isc_win_handle = pointer;
+     isc_callback = procedure ;extdecl;
+     isc_resv_handle = ISC_LONG;
+     tisc_att_handle = isc_att_handle;
+     tisc_blob_handle = isc_blob_handle;
+     tisc_db_handle = isc_db_handle;
+     tisc_form_handle = isc_form_handle;
+     tisc_req_handle = isc_req_handle;
+     tisc_stmt_handle = isc_stmt_handle;
+     tisc_svc_handle = isc_svc_handle;
+     tisc_tr_handle = isc_tr_handle;
+     tisc_win_handle = isc_win_handle;
+     tisc_callback = isc_callback;
+     tisc_resv_handle = isc_resv_handle;
+     pisc_att_handle  =^isc_att_handle ;
+     pisc_blob_handle  =^isc_blob_handle ;
+     pisc_db_handle  =^isc_db_handle ;
+     pisc_form_handle  =^isc_form_handle ;
+     pisc_req_handle  =^isc_req_handle ;
+     pisc_stmt_handle  =^isc_stmt_handle ;
+     pisc_svc_handle  =^isc_svc_handle ;
+     pisc_tr_handle  =^isc_tr_handle ;
+     pisc_win_handle  =^isc_win_handle ;
+     pisc_callback  = ^isc_callback;
+     pisc_resv_handle  =^isc_resv_handle ;
 
 
 
 
   {                                    }
   {                                    }
@@ -372,19 +398,19 @@ type
   type
   type
 
 
      USER_SEC_DATA = record
      USER_SEC_DATA = record
-          sec_flags : cshort;
-          uid : cint;
-          gid : cint;
-          protocol : cint;
+          sec_flags : smallint;
+          uid : longint;
+          gid : longint;
+          protocol : longint;
           server : Pchar;
           server : Pchar;
-          user_name : PISC_SCHAR;
-          password : PISC_SCHAR;
-          group_name : PISC_SCHAR;
-          first_name : PISC_SCHAR;
-          middle_name : PISC_SCHAR;
-          last_name : PISC_SCHAR;
-          dba_user_name : PISC_SCHAR;
-          dba_password : PISC_SCHAR;
+          user_name : Pchar;
+          password : Pchar;
+          group_name : Pchar;
+          first_name : Pchar;
+          middle_name : Pchar;
+          last_name : Pchar;
+          dba_user_name : Pchar;
+          dba_password : Pchar;
        end;
        end;
      TUSER_SEC_DATA = USER_SEC_DATA;
      TUSER_SEC_DATA = USER_SEC_DATA;
      PUSER_SEC_DATA = ^USER_SEC_DATA;
      PUSER_SEC_DATA = ^USER_SEC_DATA;
@@ -1599,7 +1625,7 @@ type
      isc_blob_dbase_ole = 23;
      isc_blob_dbase_ole = 23;
      isc_blob_typed_binary = 24;
      isc_blob_typed_binary = 24;
 
 
-{$IFNDEF LOAD_DYNAMICALLY}
+{$IFNDEF LinkDynamically}
 
 
   {                          }
   {                          }
   { OSRI database functions  }
   { OSRI database functions  }
@@ -1717,7 +1743,7 @@ type
 
 
   function isc_event_block(_para1:PPchar; _para2:PPchar; _para3:word; args:array of const):ISC_LONG; cdecl; external gdslib;
   function isc_event_block(_para1:PPchar; _para2:PPchar; _para3:word; args:array of const):ISC_LONG; cdecl; external gdslib;
 
 
-  procedure isc_event_counts(_para1: PISC_STATUS; _para2: cshort; _para3: pchar; _para4: pchar); extdecl;  external gdslib;
+  procedure isc_event_counts(_para1: PISC_STATUS; _para2: short; _para3: pchar; _para4: pchar); extdecl;  external gdslib;
 
 
   procedure isc_expand_dpb(_para1:PPchar; _para2:Psmallint; args:array of const); cdecl; external gdslib;
   procedure isc_expand_dpb(_para1:PPchar; _para2:Psmallint; args:array of const); cdecl; external gdslib;
 
 
@@ -2196,7 +2222,7 @@ type
   function Bopen2:PBSTREAM; extdecl; external gdslib;
   function Bopen2:PBSTREAM; extdecl; external gdslib;
 {$ENDIF}
 {$ENDIF}
 
 
-{$ELSE} // LOAD_DYNAMICALLY
+{$ELSE} // LinkDynamically
 
 
 var
 var
 
 
@@ -2250,7 +2276,7 @@ var
   isc_encode_sql_time : procedure (_para1:pointer; _para2:PISC_TIME); extdecl;
   isc_encode_sql_time : procedure (_para1:pointer; _para2:PISC_TIME); extdecl;
   isc_encode_timestamp : procedure (_para1:pointer; _para2:PISC_TIMESTAMP); extdecl;
   isc_encode_timestamp : procedure (_para1:pointer; _para2:PISC_TIMESTAMP); extdecl;
   isc_event_block : function (_para1:PPchar; _para2:PPchar; _para3:word; args:array of const):ISC_LONG; cdecl;
   isc_event_block : function (_para1:PPchar; _para2:PPchar; _para3:word; args:array of const):ISC_LONG; cdecl;
-  isc_event_counts: procedure (_para1: PISC_STATUS; _para2: cshort; _para3: pchar; _para4: pchar); extdecl;
+  isc_event_counts: procedure (_para1: PISC_STATUS; _para2: short; _para3: pchar; _para4: pchar); extdecl;
   isc_expand_dpb : procedure (_para1:PPchar; _para2:Psmallint; args:array of const); cdecl;
   isc_expand_dpb : procedure (_para1:PPchar; _para2:Psmallint; args:array of const); cdecl;
   isc_modify_dpb : function (_para1:PPchar; _para2:Psmallint; _para3:word; _para4:Pchar; _para5:smallint):longint; extdecl;
   isc_modify_dpb : function (_para1:PPchar; _para2:Psmallint; _para3:word; _para4:Pchar; _para5:smallint):longint; extdecl;
   isc_free : function (_para1:Pchar):ISC_LONG; extdecl;
   isc_free : function (_para1:Pchar):ISC_LONG; extdecl;
@@ -2404,240 +2430,263 @@ var
   isc_suspend_window : function (_para1:PISC_STATUS; _para2:Pisc_win_handle):ISC_STATUS; extdecl;
   isc_suspend_window : function (_para1:PISC_STATUS; _para2:Pisc_win_handle):ISC_STATUS; extdecl;
 {$ENDIF}
 {$ENDIF}
 
 
-function InitializeIBase(UseEmbeddedFirebird: Boolean = False): Integer;
-function InitializeIBase(const LibraryName: String): Integer;
-function TryInitializeIBase(const LibraryName: string): Integer;
-function ReleaseIBase: Integer;
-
-var
-  IBaseLibrary: TLibHandler;
-
-function InitialiseIBase60(Const LibraryName : String) : integer; deprecated;
-function InitialiseIBase60 : integer; deprecated;
-procedure ReleaseIBase60; deprecated;
+function InitialiseIBase60(Const LibraryName : String) : integer;
+function InitialiseIBase60 : integer;
+procedure ReleaseIBase60;
 
 
-Var
-  UseEmbeddedFirebird: Boolean = False deprecated;
+var IBaseLibraryHandle : TLibHandle;
 
 
 {$ENDIF}
 {$ENDIF}
 
 
 implementation
 implementation
 
 
-function XSQLDA_LENGTH(n: Integer): Integer;
-begin
-  Result := SizeOf(XSQLDA) + (n - 1) * SizeOf(XSQLVAR);
-end;
+{$IFDEF LinkDynamically}
 
 
-{$IFDEF LOAD_DYNAMICALLY}
-const
-  ibsymbols: array[0..140{$IFDEF UNIX}+20{$ENDIF}] of TLibSymbol = (
-    (pvar:@isc_attach_database; name:'isc_attach_database'; weak:false),
-    (pvar:@isc_array_gen_sdl; name:'isc_array_gen_sdl'; weak:false),
-    (pvar:@isc_array_get_slice; name:'isc_array_get_slice'; weak:false),
-    (pvar:@isc_array_lookup_bounds; name:'isc_array_lookup_bounds'; weak:false),
-    (pvar:@isc_array_lookup_desc; name:'isc_array_lookup_desc'; weak:false),
-    (pvar:@isc_array_set_desc; name:'isc_array_set_desc'; weak:false),
-    (pvar:@isc_array_put_slice; name:'isc_array_put_slice'; weak:false),
-    (pvar:@isc_blob_default_desc; name:'isc_blob_default_desc'; weak:false),
-    (pvar:@isc_blob_gen_bpb; name:'isc_blob_gen_bpb'; weak:false),
-    (pvar:@isc_blob_info; name:'isc_blob_info'; weak:false),
-    (pvar:@isc_blob_lookup_desc; name:'isc_blob_lookup_desc'; weak:false),
-    (pvar:@isc_blob_set_desc; name:'isc_blob_set_desc'; weak:false),
-    (pvar:@isc_cancel_blob; name:'isc_cancel_blob'; weak:false),
-    (pvar:@isc_cancel_events; name:'isc_cancel_events'; weak:false),
-    (pvar:@isc_close_blob; name:'isc_close_blob'; weak:false),
-    (pvar:@isc_commit_retaining; name:'isc_commit_retaining'; weak:false),
-    (pvar:@isc_commit_transaction; name:'isc_commit_transaction'; weak:false),
-    (pvar:@isc_create_blob; name:'isc_create_blob'; weak:false),
-    (pvar:@isc_create_blob2; name:'isc_create_blob2'; weak:false),
-    (pvar:@isc_create_database; name:'isc_create_database'; weak:false),
-    (pvar:@isc_database_info; name:'isc_database_info'; weak:false),
-    (pvar:@isc_decode_date; name:'isc_decode_date'; weak:false),
-    (pvar:@isc_decode_sql_date; name:'isc_decode_sql_date'; weak:false),
-    (pvar:@isc_decode_sql_time; name:'isc_decode_sql_time'; weak:false),
-    (pvar:@isc_decode_timestamp; name:'isc_decode_timestamp'; weak:false),
-    (pvar:@isc_detach_database; name:'isc_detach_database'; weak:false),
-    (pvar:@isc_drop_database; name:'isc_drop_database'; weak:false),
-    (pvar:@isc_dsql_allocate_statement; name:'isc_dsql_allocate_statement'; weak:false),
-    (pvar:@isc_dsql_alloc_statement2; name:'isc_dsql_alloc_statement2'; weak:false),
-    (pvar:@isc_dsql_describe; name:'isc_dsql_describe'; weak:false),
-    (pvar:@isc_dsql_describe_bind; name:'isc_dsql_describe_bind'; weak:false),
-    (pvar:@isc_dsql_exec_immed2; name:'isc_dsql_exec_immed2'; weak:false),
-    (pvar:@isc_dsql_execute; name:'isc_dsql_execute'; weak:false),
-    (pvar:@isc_dsql_execute2; name:'isc_dsql_execute2'; weak:false),
-    (pvar:@isc_dsql_execute_immediate; name:'isc_dsql_execute_immediate'; weak:false),
-    (pvar:@isc_dsql_fetch; name:'isc_dsql_fetch'; weak:false),
-    (pvar:@isc_dsql_finish; name:'isc_dsql_finish'; weak:false),
-    (pvar:@isc_dsql_free_statement; name:'isc_dsql_free_statement'; weak:false),
-    (pvar:@isc_dsql_insert; name:'isc_dsql_insert'; weak:false),
-    (pvar:@isc_dsql_prepare; name:'isc_dsql_prepare'; weak:false),
-    (pvar:@isc_dsql_set_cursor_name; name:'isc_dsql_set_cursor_name'; weak:false),
-    (pvar:@isc_dsql_sql_info; name:'isc_dsql_sql_info'; weak:false),
-    (pvar:@isc_encode_date; name:'isc_encode_date'; weak:false),
-    (pvar:@isc_encode_sql_date; name:'isc_encode_sql_date'; weak:false),
-    (pvar:@isc_encode_sql_time; name:'isc_encode_sql_time'; weak:false),
-    (pvar:@isc_encode_timestamp; name:'isc_encode_timestamp'; weak:false),
-    (pvar:@isc_event_block; name:'isc_event_block'; weak:false),
-    (pvar:@isc_event_counts; name:'isc_event_counts'; weak:false),
-    (pvar:@isc_expand_dpb; name:'isc_expand_dpb'; weak:false),
-    (pvar:@isc_modify_dpb; name:'isc_modify_dpb'; weak:false),
-    (pvar:@isc_free; name:'isc_free'; weak:false),
-    (pvar:@isc_get_segment; name:'isc_get_segment'; weak:false),
-    (pvar:@isc_get_slice; name:'isc_get_slice'; weak:false),
-    (pvar:@isc_interprete; name:'isc_interprete'; weak:false),
-    (pvar:@isc_open_blob; name:'isc_open_blob'; weak:false),
-    (pvar:@isc_open_blob2; name:'isc_open_blob2'; weak:false),
-    (pvar:@isc_prepare_transaction2; name:'isc_prepare_transaction2'; weak:false),
-    (pvar:@isc_print_sqlerror; name:'isc_print_sqlerror'; weak:false),
-    (pvar:@isc_print_status; name:'isc_print_status'; weak:false),
-    (pvar:@isc_put_segment; name:'isc_put_segment'; weak:false),
-    (pvar:@isc_put_slice; name:'isc_put_slice'; weak:false),
-    (pvar:@isc_que_events; name:'isc_que_events'; weak:false),
-    (pvar:@isc_rollback_retaining; name:'isc_rollback_retaining'; weak:false),
-    (pvar:@isc_rollback_transaction; name:'isc_rollback_transaction'; weak:false),
-    (pvar:@isc_start_multiple; name:'isc_start_multiple'; weak:false),
-    (pvar:@isc_start_transaction; name:'isc_start_transaction'; weak:false),
-    (pvar:@isc_sqlcode; name:'isc_sqlcode'; weak:false),
-    (pvar:@isc_sql_interprete; name:'isc_sql_interprete'; weak:false),
-    (pvar:@isc_transaction_info; name:'isc_transaction_info'; weak:false),
-    (pvar:@isc_transact_request; name:'isc_transact_request'; weak:false),
-    (pvar:@isc_vax_integer; name:'isc_vax_integer'; weak:false),
-    (pvar:@isc_portable_integer; name:'isc_portable_integer'; weak:false),
-    (pvar:@isc_add_user; name:'isc_add_user'; weak:false),
-    (pvar:@isc_delete_user; name:'isc_delete_user'; weak:false),
-    (pvar:@isc_modify_user; name:'isc_modify_user'; weak:false),
-    (pvar:@isc_compile_request; name:'isc_compile_request'; weak:false),
-    (pvar:@isc_compile_request2; name:'isc_compile_request2'; weak:false),
-    (pvar:@isc_ddl; name:'isc_ddl'; weak:false),
-    (pvar:@isc_prepare_transaction; name:'isc_prepare_transaction'; weak:false),
-    (pvar:@isc_receive; name:'isc_receive'; weak:false),
-    (pvar:@isc_reconnect_transaction; name:'isc_reconnect_transaction'; weak:false),
-    (pvar:@isc_release_request; name:'isc_release_request'; weak:false),
-    (pvar:@isc_request_info; name:'isc_request_info'; weak:false),
-    (pvar:@isc_seek_blob; name:'isc_seek_blob'; weak:false),
-    (pvar:@isc_send; name:'isc_send'; weak:false),
-    (pvar:@isc_start_and_send; name:'isc_start_and_send'; weak:false),
-    (pvar:@isc_start_request; name:'isc_start_request'; weak:false),
-    (pvar:@isc_unwind_request; name:'isc_unwind_request'; weak:false),
-    (pvar:@isc_wait_for_event; name:'isc_wait_for_event'; weak:false),
-    (pvar:@isc_close; name:'isc_close'; weak:false),
-    (pvar:@isc_declare; name:'isc_declare'; weak:false),
-    (pvar:@isc_describe; name:'isc_describe'; weak:false),
-    (pvar:@isc_describe_bind; name:'isc_describe_bind'; weak:false),
-    (pvar:@isc_execute; name:'isc_execute'; weak:false),
-    (pvar:@isc_execute_immediate; name:'isc_execute_immediate'; weak:false),
-    (pvar:@isc_fetch; name:'isc_fetch'; weak:false),
-    (pvar:@isc_open; name:'isc_open'; weak:false),
-    (pvar:@isc_prepare; name:'isc_prepare'; weak:false),
-    (pvar:@isc_dsql_execute_m; name:'isc_dsql_execute_m'; weak:false),
-    (pvar:@isc_dsql_execute2_m; name:'isc_dsql_execute2_m'; weak:false),
-    (pvar:@isc_dsql_execute_immediate_m; name:'isc_dsql_execute_immediate_m'; weak:false),
-    (pvar:@isc_dsql_exec_immed3_m; name:'isc_dsql_exec_immed3_m'; weak:false),
-    (pvar:@isc_dsql_fetch_m; name:'isc_dsql_fetch_m'; weak:false),
-    (pvar:@isc_dsql_insert_m; name:'isc_dsql_insert_m'; weak:false),
-    (pvar:@isc_dsql_prepare_m; name:'isc_dsql_prepare_m'; weak:false),
-    (pvar:@isc_dsql_release; name:'isc_dsql_release'; weak:false),
-    (pvar:@isc_embed_dsql_close; name:'isc_embed_dsql_close'; weak:false),
-    (pvar:@isc_embed_dsql_declare; name:'isc_embed_dsql_declare'; weak:false),
-    (pvar:@isc_embed_dsql_describe; name:'isc_embed_dsql_describe'; weak:false),
-    (pvar:@isc_embed_dsql_describe_bind; name:'isc_embed_dsql_describe_bind'; weak:false),
-    (pvar:@isc_embed_dsql_execute; name:'isc_embed_dsql_execute'; weak:false),
-    (pvar:@isc_embed_dsql_execute2; name:'isc_embed_dsql_execute2'; weak:false),
-    (pvar:@isc_embed_dsql_execute_immed; name:'isc_embed_dsql_execute_immed'; weak:false),
-    (pvar:@isc_embed_dsql_fetch; name:'isc_embed_dsql_fetch'; weak:false),
-    (pvar:@isc_embed_dsql_open; name:'isc_embed_dsql_open'; weak:false),
-    (pvar:@isc_embed_dsql_open2; name:'isc_embed_dsql_open2'; weak:false),
-    (pvar:@isc_embed_dsql_insert; name:'isc_embed_dsql_insert'; weak:false),
-    (pvar:@isc_embed_dsql_prepare; name:'isc_embed_dsql_prepare'; weak:false),
-    (pvar:@isc_embed_dsql_release; name:'isc_embed_dsql_release'; weak:false),
-    (pvar:@BLOB_open; name:'BLOB_open'; weak:false),
-    (pvar:@BLOB_put; name:'BLOB_put'; weak:false),
-    (pvar:@BLOB_close; name:'BLOB_close'; weak:false),
-    (pvar:@BLOB_get; name:'BLOB_get'; weak:false),
-    (pvar:@BLOB_display; name:'BLOB_display'; weak:false),
-    (pvar:@BLOB_dump; name:'BLOB_dump'; weak:false),
-    (pvar:@BLOB_edit; name:'BLOB_edit'; weak:false),
-    (pvar:@BLOB_load; name:'BLOB_load'; weak:false),
-    (pvar:@BLOB_text_dump; name:'BLOB_text_dump'; weak:false),
-    (pvar:@BLOB_text_load; name:'BLOB_text_load'; weak:false),
-    (pvar:@Bopen; name:'Bopen'; weak:false),
-{$IFDEF Unix} { weak functions, be careful! }
-    (pvar:@Bopen2; name:'Bopen2'; weak:true),
-{$ENDIF}
-    (pvar:@isc_ftof; name:'isc_ftof'; weak:false),
-    (pvar:@isc_print_blr; name:'isc_print_blr'; weak:false),
-    (pvar:@isc_set_debug; name:'isc_set_debug'; weak:false),
-    (pvar:@isc_qtoq; name:'isc_qtoq'; weak:false),
-    (pvar:@isc_vtof; name:'isc_vtof'; weak:false),
-    (pvar:@isc_vtov; name:'isc_vtov'; weak:false),
-    (pvar:@isc_version; name:'isc_version'; weak:false),
-    (pvar:@isc_service_attach; name:'isc_service_attach'; weak:false),
-    (pvar:@isc_service_detach; name:'isc_service_detach'; weak:false),
-    (pvar:@isc_service_query; name:'isc_service_query'; weak:false),
-    (pvar:@isc_service_start; name:'isc_service_start'; weak:false)
-{$IFDEF Unix} { weak functions, be careful! }
-    ,(pvar:@isc_reset_fpe; name:'isc_reset_fpe'; weak:true),
-    (pvar:@isc_compile_map; name:'isc_compile_map'; weak:true),
-    (pvar:@isc_compile_menu; name:'isc_compile_menu'; weak:true),
-    (pvar:@isc_compile_sub_map; name:'isc_compile_sub_map'; weak:true),
-    (pvar:@isc_create_window; name:'isc_create_window'; weak:true),
-    (pvar:@isc_delete_window; name:'isc_delete_window'; weak:true),
-    (pvar:@isc_drive_form; name:'isc_drive_form'; weak:true),
-    (pvar:@isc_drive_menu; name:'isc_drive_menu'; weak:true),
-    (pvar:@isc_form_delete; name:'isc_form_delete'; weak:true),
-    (pvar:@isc_form_fetch; name:'isc_form_fetch'; weak:true),
-    (pvar:@isc_form_insert; name:'isc_form_insert'; weak:true),
-    (pvar:@isc_get_entree; name:'isc_get_entree'; weak:true),
-    (pvar:@isc_initialize_menu; name:'isc_initialize_menu'; weak:true),
-    (pvar:@isc_menu; name:'isc_menu'; weak:true),
-    (pvar:@isc_load_form; name:'isc_load_form'; weak:true),
-    (pvar:@isc_pop_window; name:'isc_pop_window'; weak:true),
-    (pvar:@isc_put_entree; name:'isc_put_entree'; weak:true),
-    (pvar:@isc_reset_form; name:'isc_reset_form'; weak:true),
-    (pvar:@isc_suspend_window; name:'isc_suspend_window'; weak:true)
-{$ENDIF}
-  );
+ResourceString
+  SErrEmbeddedFailed = 'Can not load embedded Firebird client "%s". Check your installation.';
+  SErrDefaultsFailed = 'Can not load default Firebird clients ("%s" or "%s"). Check your installation.';
+  SErrLoadFailed     = 'Can not load Firebird client library "%s". Check your installation.';
+  SErrAlreadyLoaded  = 'Firebird interface already initialized from library %s.';
+  
+var 
+  RefCount : integer;
+  LoadedLibrary : String;
 
 
-function InitializeIBase(UseEmbeddedFirebird: Boolean): Integer;
-begin
-  if UseEmbeddedFirebird then
-    Result := InitializeLibrary(IBaseLibrary, fbembedlib)
-  else
-    Result := InitializeLibrary(IBaseLibrary);
-end;
+Function TryInitialiseIBase60(Const LibraryName : String) : integer;
 
 
-function InitializeIBase(const LibraryName: String): Integer;
 begin
 begin
-  Result := InitializeLibrary(IBaseLibrary, LibraryName);
+  Result := 0;
+  if (RefCount=0) then
+    begin
+    IBaseLibraryHandle:=LoadLibrary(LibraryName);
+    if (IBaseLibraryHandle=nilhandle) then
+      Exit;
+    inc(RefCount);
+    LoadedLibrary:=LibraryName;
+    pointer(isc_attach_database) := GetProcedureAddress(IBaseLibraryHandle,'isc_attach_database');
+    pointer(isc_array_gen_sdl) := GetProcedureAddress(IBaseLibraryHandle,'isc_array_gen_sdl');
+    pointer(isc_array_get_slice) := GetProcedureAddress(IBaseLibraryHandle,'isc_array_get_slice');
+    pointer(isc_array_lookup_bounds) := GetProcedureAddress(IBaseLibraryHandle,'isc_array_lookup_bounds');
+    pointer(isc_array_lookup_desc) := GetProcedureAddress(IBaseLibraryHandle,'isc_array_lookup_desc');
+    pointer(isc_array_set_desc) := GetProcedureAddress(IBaseLibraryHandle,'isc_array_set_desc');
+    pointer(isc_array_put_slice) := GetProcedureAddress(IBaseLibraryHandle,'isc_array_put_slice');
+    pointer(isc_blob_default_desc) := GetProcedureAddress(IBaseLibraryHandle,'isc_blob_default_desc');
+    pointer(isc_blob_gen_bpb) := GetProcedureAddress(IBaseLibraryHandle,'isc_blob_gen_bpb');
+    pointer(isc_blob_info) := GetProcedureAddress(IBaseLibraryHandle,'isc_blob_info');
+    pointer(isc_blob_lookup_desc) := GetProcedureAddress(IBaseLibraryHandle,'isc_blob_lookup_desc');
+    pointer(isc_blob_set_desc) := GetProcedureAddress(IBaseLibraryHandle,'isc_blob_set_desc');
+    pointer(isc_cancel_blob) := GetProcedureAddress(IBaseLibraryHandle,'isc_cancel_blob');
+    pointer(isc_cancel_events) := GetProcedureAddress(IBaseLibraryHandle,'isc_cancel_events');
+    pointer(isc_close_blob) := GetProcedureAddress(IBaseLibraryHandle,'isc_close_blob');
+    pointer(isc_commit_retaining) := GetProcedureAddress(IBaseLibraryHandle,'isc_commit_retaining');
+    pointer(isc_commit_transaction) := GetProcedureAddress(IBaseLibraryHandle,'isc_commit_transaction');
+    pointer(isc_create_blob) := GetProcedureAddress(IBaseLibraryHandle,'isc_create_blob');
+    pointer(isc_create_blob2) := GetProcedureAddress(IBaseLibraryHandle,'isc_create_blob2');
+    pointer(isc_create_database) := GetProcedureAddress(IBaseLibraryHandle,'isc_create_database');
+    pointer(isc_database_info) := GetProcedureAddress(IBaseLibraryHandle,'isc_database_info');
+    pointer(isc_decode_date) := GetProcedureAddress(IBaseLibraryHandle,'isc_decode_date');
+    pointer(isc_decode_sql_date) := GetProcedureAddress(IBaseLibraryHandle,'isc_decode_sql_date');
+    pointer(isc_decode_sql_time) := GetProcedureAddress(IBaseLibraryHandle,'isc_decode_sql_time');
+    pointer(isc_decode_timestamp) := GetProcedureAddress(IBaseLibraryHandle,'isc_decode_timestamp');
+    pointer(isc_detach_database) := GetProcedureAddress(IBaseLibraryHandle,'isc_detach_database');
+    pointer(isc_drop_database) := GetProcedureAddress(IBaseLibraryHandle,'isc_drop_database');
+    pointer(isc_dsql_allocate_statement) := GetProcedureAddress(IBaseLibraryHandle,'isc_dsql_allocate_statement');
+    pointer(isc_dsql_alloc_statement2) := GetProcedureAddress(IBaseLibraryHandle,'isc_dsql_alloc_statement2');
+    pointer(isc_dsql_describe) := GetProcedureAddress(IBaseLibraryHandle,'isc_dsql_describe');
+    pointer(isc_dsql_describe_bind) := GetProcedureAddress(IBaseLibraryHandle,'isc_dsql_describe_bind');
+    pointer(isc_dsql_exec_immed2) := GetProcedureAddress(IBaseLibraryHandle,'isc_dsql_exec_immed2');
+    pointer(isc_dsql_execute) := GetProcedureAddress(IBaseLibraryHandle,'isc_dsql_execute');
+    pointer(isc_dsql_execute2) := GetProcedureAddress(IBaseLibraryHandle,'isc_dsql_execute2');
+    pointer(isc_dsql_execute_immediate) := GetProcedureAddress(IBaseLibraryHandle,'isc_dsql_execute_immediate');
+    pointer(isc_dsql_fetch) := GetProcedureAddress(IBaseLibraryHandle,'isc_dsql_fetch');
+    pointer(isc_dsql_finish) := GetProcedureAddress(IBaseLibraryHandle,'isc_dsql_finish');
+    pointer(isc_dsql_free_statement) := GetProcedureAddress(IBaseLibraryHandle,'isc_dsql_free_statement');
+    pointer(isc_dsql_insert) := GetProcedureAddress(IBaseLibraryHandle,'isc_dsql_insert');
+    pointer(isc_dsql_prepare) := GetProcedureAddress(IBaseLibraryHandle,'isc_dsql_prepare');
+    pointer(isc_dsql_set_cursor_name) := GetProcedureAddress(IBaseLibraryHandle,'isc_dsql_set_cursor_name');
+    pointer(isc_dsql_sql_info) := GetProcedureAddress(IBaseLibraryHandle,'isc_dsql_sql_info');
+    pointer(isc_encode_date) := GetProcedureAddress(IBaseLibraryHandle,'isc_encode_date');
+    pointer(isc_encode_sql_date) := GetProcedureAddress(IBaseLibraryHandle,'isc_encode_sql_date');
+    pointer(isc_encode_sql_time) := GetProcedureAddress(IBaseLibraryHandle,'isc_encode_sql_time');
+    pointer(isc_encode_timestamp) := GetProcedureAddress(IBaseLibraryHandle,'isc_encode_timestamp');
+    pointer(isc_event_block) := GetProcedureAddress(IBaseLibraryHandle,'isc_event_block');
+    pointer(isc_event_counts) := GetProcedureAddress(IBaseLibraryHandle,'isc_event_counts');
+    pointer(isc_expand_dpb) := GetProcedureAddress(IBaseLibraryHandle,'isc_expand_dpb');
+    pointer(isc_modify_dpb) := GetProcedureAddress(IBaseLibraryHandle,'isc_modify_dpb');
+    pointer(isc_free) := GetProcedureAddress(IBaseLibraryHandle,'isc_free');
+    pointer(isc_get_segment) := GetProcedureAddress(IBaseLibraryHandle,'isc_get_segment');
+    pointer(isc_get_slice) := GetProcedureAddress(IBaseLibraryHandle,'isc_get_slice');
+    pointer(isc_interprete) := GetProcedureAddress(IBaseLibraryHandle,'isc_interprete');
+    pointer(isc_open_blob) := GetProcedureAddress(IBaseLibraryHandle,'isc_open_blob');
+    pointer(isc_open_blob2) := GetProcedureAddress(IBaseLibraryHandle,'isc_open_blob2');
+    pointer(isc_prepare_transaction2) := GetProcedureAddress(IBaseLibraryHandle,'isc_prepare_transaction2');
+    pointer(isc_print_sqlerror) := GetProcedureAddress(IBaseLibraryHandle,'isc_print_sqlerror');
+    pointer(isc_print_status) := GetProcedureAddress(IBaseLibraryHandle,'isc_print_status');
+    pointer(isc_put_segment) := GetProcedureAddress(IBaseLibraryHandle,'isc_put_segment');
+    pointer(isc_put_slice) := GetProcedureAddress(IBaseLibraryHandle,'isc_put_slice');
+    pointer(isc_que_events) := GetProcedureAddress(IBaseLibraryHandle,'isc_que_events');
+    pointer(isc_rollback_retaining) := GetProcedureAddress(IBaseLibraryHandle,'isc_rollback_retaining');
+    pointer(isc_rollback_transaction) := GetProcedureAddress(IBaseLibraryHandle,'isc_rollback_transaction');
+    pointer(isc_start_multiple) := GetProcedureAddress(IBaseLibraryHandle,'isc_start_multiple');
+    pointer(isc_start_transaction) := GetProcedureAddress(IBaseLibraryHandle,'isc_start_transaction');
+    pointer(isc_sqlcode) := GetProcedureAddress(IBaseLibraryHandle,'isc_sqlcode');
+    pointer(isc_sql_interprete) := GetProcedureAddress(IBaseLibraryHandle,'isc_sql_interprete');
+    pointer(isc_transaction_info) := GetProcedureAddress(IBaseLibraryHandle,'isc_transaction_info');
+    pointer(isc_transact_request) := GetProcedureAddress(IBaseLibraryHandle,'isc_transact_request');
+    pointer(isc_vax_integer) := GetProcedureAddress(IBaseLibraryHandle,'isc_vax_integer');
+    pointer(isc_portable_integer) := GetProcedureAddress(IBaseLibraryHandle,'isc_portable_integer');
+    pointer(isc_add_user) := GetProcedureAddress(IBaseLibraryHandle,'isc_add_user');
+    pointer(isc_delete_user) := GetProcedureAddress(IBaseLibraryHandle,'isc_delete_user');
+    pointer(isc_modify_user) := GetProcedureAddress(IBaseLibraryHandle,'isc_modify_user');
+    pointer(isc_compile_request) := GetProcedureAddress(IBaseLibraryHandle,'isc_compile_request');
+    pointer(isc_compile_request2) := GetProcedureAddress(IBaseLibraryHandle,'isc_compile_request2');
+    pointer(isc_ddl) := GetProcedureAddress(IBaseLibraryHandle,'isc_ddl');
+    pointer(isc_prepare_transaction) := GetProcedureAddress(IBaseLibraryHandle,'isc_prepare_transaction');
+    pointer(isc_receive) := GetProcedureAddress(IBaseLibraryHandle,'isc_receive');
+    pointer(isc_reconnect_transaction) := GetProcedureAddress(IBaseLibraryHandle,'isc_reconnect_transaction');
+    pointer(isc_release_request) := GetProcedureAddress(IBaseLibraryHandle,'isc_release_request');
+    pointer(isc_request_info) := GetProcedureAddress(IBaseLibraryHandle,'isc_request_info');
+    pointer(isc_seek_blob) := GetProcedureAddress(IBaseLibraryHandle,'isc_seek_blob');
+    pointer(isc_send) := GetProcedureAddress(IBaseLibraryHandle,'isc_send');
+    pointer(isc_start_and_send) := GetProcedureAddress(IBaseLibraryHandle,'isc_start_and_send');
+    pointer(isc_start_request) := GetProcedureAddress(IBaseLibraryHandle,'isc_start_request');
+    pointer(isc_unwind_request) := GetProcedureAddress(IBaseLibraryHandle,'isc_unwind_request');
+    pointer(isc_wait_for_event) := GetProcedureAddress(IBaseLibraryHandle,'isc_wait_for_event');
+    pointer(isc_close) := GetProcedureAddress(IBaseLibraryHandle,'isc_close');
+    pointer(isc_declare) := GetProcedureAddress(IBaseLibraryHandle,'isc_declare');
+    pointer(isc_describe) := GetProcedureAddress(IBaseLibraryHandle,'isc_describe');
+    pointer(isc_describe_bind) := GetProcedureAddress(IBaseLibraryHandle,'isc_describe_bind');
+    pointer(isc_execute) := GetProcedureAddress(IBaseLibraryHandle,'isc_execute');
+    pointer(isc_execute_immediate) := GetProcedureAddress(IBaseLibraryHandle,'isc_execute_immediate');
+    pointer(isc_fetch) := GetProcedureAddress(IBaseLibraryHandle,'isc_fetch');
+    pointer(isc_open) := GetProcedureAddress(IBaseLibraryHandle,'isc_open');
+    pointer(isc_prepare) := GetProcedureAddress(IBaseLibraryHandle,'isc_prepare');
+    pointer(isc_dsql_execute_m) := GetProcedureAddress(IBaseLibraryHandle,'isc_dsql_execute_m');
+    pointer(isc_dsql_execute2_m) := GetProcedureAddress(IBaseLibraryHandle,'isc_dsql_execute2_m');
+    pointer(isc_dsql_execute_immediate_m) := GetProcedureAddress(IBaseLibraryHandle,'isc_dsql_execute_immediate_m');
+    pointer(isc_dsql_exec_immed3_m) := GetProcedureAddress(IBaseLibraryHandle,'isc_dsql_exec_immed3_m');
+    pointer(isc_dsql_fetch_m) := GetProcedureAddress(IBaseLibraryHandle,'isc_dsql_fetch_m');
+    pointer(isc_dsql_insert_m) := GetProcedureAddress(IBaseLibraryHandle,'isc_dsql_insert_m');
+    pointer(isc_dsql_prepare_m) := GetProcedureAddress(IBaseLibraryHandle,'isc_dsql_prepare_m');
+    pointer(isc_dsql_release) := GetProcedureAddress(IBaseLibraryHandle,'isc_dsql_release');
+    pointer(isc_embed_dsql_close) := GetProcedureAddress(IBaseLibraryHandle,'isc_embed_dsql_close');
+    pointer(isc_embed_dsql_declare) := GetProcedureAddress(IBaseLibraryHandle,'isc_embed_dsql_declare');
+    pointer(isc_embed_dsql_describe) := GetProcedureAddress(IBaseLibraryHandle,'isc_embed_dsql_describe');
+    pointer(isc_embed_dsql_describe_bind) := GetProcedureAddress(IBaseLibraryHandle,'isc_embed_dsql_describe_bind');
+    pointer(isc_embed_dsql_execute) := GetProcedureAddress(IBaseLibraryHandle,'isc_embed_dsql_execute');
+    pointer(isc_embed_dsql_execute2) := GetProcedureAddress(IBaseLibraryHandle,'isc_embed_dsql_execute2');
+    pointer(isc_embed_dsql_execute_immed) := GetProcedureAddress(IBaseLibraryHandle,'isc_embed_dsql_execute_immed');
+    pointer(isc_embed_dsql_fetch) := GetProcedureAddress(IBaseLibraryHandle,'isc_embed_dsql_fetch');
+    pointer(isc_embed_dsql_open) := GetProcedureAddress(IBaseLibraryHandle,'isc_embed_dsql_open');
+    pointer(isc_embed_dsql_open2) := GetProcedureAddress(IBaseLibraryHandle,'isc_embed_dsql_open2');
+    pointer(isc_embed_dsql_insert) := GetProcedureAddress(IBaseLibraryHandle,'isc_embed_dsql_insert');
+    pointer(isc_embed_dsql_prepare) := GetProcedureAddress(IBaseLibraryHandle,'isc_embed_dsql_prepare');
+    pointer(isc_embed_dsql_release) := GetProcedureAddress(IBaseLibraryHandle,'isc_embed_dsql_release');
+    pointer(BLOB_open) := GetProcedureAddress(IBaseLibraryHandle,'BLOB_open');
+    pointer(BLOB_put) := GetProcedureAddress(IBaseLibraryHandle,'BLOB_put');
+    pointer(BLOB_close) := GetProcedureAddress(IBaseLibraryHandle,'BLOB_close');
+    pointer(BLOB_get) := GetProcedureAddress(IBaseLibraryHandle,'BLOB_get');
+    pointer(BLOB_display) := GetProcedureAddress(IBaseLibraryHandle,'BLOB_display');
+    pointer(BLOB_dump) := GetProcedureAddress(IBaseLibraryHandle,'BLOB_dump');
+    pointer(BLOB_edit) := GetProcedureAddress(IBaseLibraryHandle,'BLOB_edit');
+    pointer(BLOB_load) := GetProcedureAddress(IBaseLibraryHandle,'BLOB_load');
+    pointer(BLOB_text_dump) := GetProcedureAddress(IBaseLibraryHandle,'BLOB_text_dump');
+    pointer(BLOB_text_load) := GetProcedureAddress(IBaseLibraryHandle,'BLOB_text_load');
+    pointer(Bopen) := GetProcedureAddress(IBaseLibraryHandle,'Bopen');
+{$IFDEF Unix}
+    pointer(Bopen2) := GetProcedureAddress(IBaseLibraryHandle,'Bopen2');
+{$ENDIF}
+    pointer(isc_ftof) := GetProcedureAddress(IBaseLibraryHandle,'isc_ftof');
+    pointer(isc_print_blr) := GetProcedureAddress(IBaseLibraryHandle,'isc_print_blr');
+    pointer(isc_set_debug) := GetProcedureAddress(IBaseLibraryHandle,'isc_set_debug');
+    pointer(isc_qtoq) := GetProcedureAddress(IBaseLibraryHandle,'isc_qtoq');
+    pointer(isc_vtof) := GetProcedureAddress(IBaseLibraryHandle,'isc_vtof');
+    pointer(isc_vtov) := GetProcedureAddress(IBaseLibraryHandle,'isc_vtov');
+    pointer(isc_version) := GetProcedureAddress(IBaseLibraryHandle,'isc_version');
+{$IFDEF Unix}
+    pointer(isc_reset_fpe) := GetProcedureAddress(IBaseLibraryHandle,'isc_reset_fpe');
+{$ENDIF}
+    pointer(isc_service_attach) := GetProcedureAddress(IBaseLibraryHandle,'isc_service_attach');
+    pointer(isc_service_detach) := GetProcedureAddress(IBaseLibraryHandle,'isc_service_detach');
+    pointer(isc_service_query) := GetProcedureAddress(IBaseLibraryHandle,'isc_service_query');
+    pointer(isc_service_start) := GetProcedureAddress(IBaseLibraryHandle,'isc_service_start');
+{$IFDEF Unix}
+    pointer(isc_compile_map) := GetProcedureAddress(IBaseLibraryHandle,'isc_compile_map');
+    pointer(isc_compile_menu) := GetProcedureAddress(IBaseLibraryHandle,'isc_compile_menu');
+    pointer(isc_compile_sub_map) := GetProcedureAddress(IBaseLibraryHandle,'isc_compile_sub_map');
+    pointer(isc_create_window) := GetProcedureAddress(IBaseLibraryHandle,'isc_create_window');
+    pointer(isc_delete_window) := GetProcedureAddress(IBaseLibraryHandle,'isc_delete_window');
+    pointer(isc_drive_form) := GetProcedureAddress(IBaseLibraryHandle,'isc_drive_form');
+    pointer(isc_drive_menu) := GetProcedureAddress(IBaseLibraryHandle,'isc_drive_menu');
+    pointer(isc_form_delete) := GetProcedureAddress(IBaseLibraryHandle,'isc_form_delete');
+    pointer(isc_form_fetch) := GetProcedureAddress(IBaseLibraryHandle,'isc_form_fetch');
+    pointer(isc_form_insert) := GetProcedureAddress(IBaseLibraryHandle,'isc_form_insert');
+    pointer(isc_get_entree) := GetProcedureAddress(IBaseLibraryHandle,'isc_get_entree');
+    pointer(isc_initialize_menu) := GetProcedureAddress(IBaseLibraryHandle,'isc_initialize_menu');
+    pointer(isc_menu) := GetProcedureAddress(IBaseLibraryHandle,'isc_menu');
+    pointer(isc_load_form) := GetProcedureAddress(IBaseLibraryHandle,'isc_load_form');
+    pointer(isc_pop_window) := GetProcedureAddress(IBaseLibraryHandle,'isc_pop_window');
+    pointer(isc_put_entree) := GetProcedureAddress(IBaseLibraryHandle,'isc_put_entree');
+    pointer(isc_reset_form) := GetProcedureAddress(IBaseLibraryHandle,'isc_reset_form');
+    pointer(isc_suspend_window) := GetProcedureAddress(IBaseLibraryHandle,'isc_suspend_window');
+{$ENDIF}
+    end
+  else
+    inc(RefCount);
+  Result := RefCount;
 end;
 end;
 
 
-function TryInitializeIBase(const LibraryName: string): Integer;
-begin
-  Result := TryInitializeLibrary(IBaseLibrary, LibraryName);
-end;
+function InitialiseIBase60 : integer;
 
 
-function ReleaseIBase: Integer;
 begin
 begin
-  Result := ReleaseLibrary(IBaseLibrary);
+  Result := 0;
+  If UseEmbeddedFirebird then
+    begin
+    If (TryInitialiseIBase60(fbembedlib)=0) then
+      Raise EInOutError.CreateFmt(SErrEmbeddedFailed,[fbembedlib]);
+    end
+  else
+    begin
+    If (TryInitialiseIBase60(fbclib)=0) and
+       (TryInitialiseIBase60(gdslib)=0) then
+        Raise EInOutError.CreateFmt(SErrDefaultsFailed,[gdslib,fbclib]);
+    end;    
+  Result := RefCount;
 end;
 end;
 
 
 function InitialiseIBase60(Const LibraryName : String) : integer;
 function InitialiseIBase60(Const LibraryName : String) : integer;
-begin
-  Result := InitializeIBase(LibraryName);
-end;
 
 
-function InitialiseIBase60: integer;
 begin
 begin
-  Result := InitializeIBase(UseEmbeddedFirebird);
+  Result := TryInitialiseIBase60(LibraryName);
+  If Result = 0 then
+    Raise EInOutError.CreateFmt(SErrLoadFailed,[LibraryName])
+  else If (LibraryName<>LoadedLibrary) then
+    begin
+    Dec(RefCount);
+    Result := RefCount;
+    Raise EInOUtError.CreateFmt(SErrAlreadyLoaded,[LoadedLibrary]);
+    end;
 end;
 end;
 
 
-procedure ReleaseIBase60;
+
+Procedure ReleaseIBase60;
+
 begin
 begin
-  ReleaseIBase;
+  if RefCount>1 then
+    Dec(RefCount)
+  else if UnloadLibrary(IBaseLibraryHandle) then 
+    begin
+    Dec(RefCount);
+    IBaseLibraryHandle := NilHandle;
+    LoadedLibrary:='';
+    end;
 end;
 end;
 
 
-initialization
-  IBaseLibrary := LibraryHandler('Interbase', [gdslib,fbclib], @ibsymbols, length(ibsymbols));
 {$ENDIF}
 {$ENDIF}
 
 
+function XSQLDA_LENGTH(n: Integer): Integer;
+begin
+  Result := SizeOf(XSQLDA) + (n - 1) * SizeOf(XSQLVAR);
+end;
+
 
 

+ 1 - 1
packages/ibase/src/ibase60.pp

@@ -2,7 +2,7 @@
 }
 }
 unit ibase60;
 unit ibase60;
 
 
-{$UNDEF LOAD_DYNAMICALLY}
+{$UNDEF LinkDynamically}
 
 
 {$i ibase60.inc}
 {$i ibase60.inc}
 
 

+ 1 - 1
packages/ibase/src/ibase60dyn.pp

@@ -11,7 +11,7 @@
 
 
 unit ibase60dyn;
 unit ibase60dyn;
 
 
-{$DEFINE LOAD_DYNAMICALLY}
+{$DEFINE LinkDynamically}
 
 
 {$i ibase60.inc}
 {$i ibase60.inc}
 
 

+ 401 - 404
packages/mysql/src/mysql.inc

@@ -15,20 +15,19 @@
     mysqlclient
     mysqlclient
     mysql_com.h / mysql.h
     mysql_com.h / mysql.h
 
 
-
-  NOTE: MySQL 5.1 support is not finished. I just added some parts so that my code is working. I
-    guess there are many things missing. This mysql.inc file is also getting a littlebit messy...
-    -Ivo Steinmann ([email protected])
 }
 }
 {$MODE objfpc}
 {$MODE objfpc}
 {$MACRO on}
 {$MACRO on}
 
 
 interface
 interface
-
+{$ifdef Load_Dynamically}{$define LinkDynamically}{$endif}
 uses
 uses
-  dynlibs, ctypes;
+{$IFDEF LinkDynamically}
+      sysutils,
+{$ENDIF}
+     dynlibs,ctypes;
 
 
-{$IFDEF UNIX}
+{$IFDEF Unix}
   {$DEFINE extdecl:=cdecl}
   {$DEFINE extdecl:=cdecl}
   const
   const
     mysqllib = 'libmysqlclient.'+sharedsuffix;
     mysqllib = 'libmysqlclient.'+sharedsuffix;
@@ -42,11 +41,11 @@ uses
     mysqlvlib = mysqllib+'.12';
     mysqlvlib = mysqllib+'.12';
   {$ENDIF}
   {$ENDIF}
 {$ENDIF}
 {$ENDIF}
-{$IFDEF WINDOWS}
+{$IFDEF Windows}
   {$DEFINE extdecl:=stdcall}
   {$DEFINE extdecl:=stdcall}
   const
   const
     mysqllib = 'libmysql.dll';
     mysqllib = 'libmysql.dll';
-    mysqlvlib = mysqllib;
+    mysqlvlib = 'libmysql.dll';
 {$ENDIF}
 {$ENDIF}
 
 
 {$IFDEF mysql51}
 {$IFDEF mysql51}
@@ -60,17 +59,17 @@ uses
 {$PACKRECORDS C}
 {$PACKRECORDS C}
 
 
   { Copyright (C) 2000-2003 MySQL AB
   { Copyright (C) 2000-2003 MySQL AB
-
+  
      This program is free software; you can redistribute it and/or modify
      This program is free software; you can redistribute it and/or modify
      it under the terms of the GNU General Public License as published by
      it under the terms of the GNU General Public License as published by
      the Free Software Foundation; either version 2 of the License, or
      the Free Software Foundation; either version 2 of the License, or
      (at your option) any later version.
      (at your option) any later version.
-
+  
      This program is distributed in the hope that it will be useful,
      This program is distributed in the hope that it will be useful,
      but WITHOUT ANY WARRANTY; without even the implied warranty of
      but WITHOUT ANY WARRANTY; without even the implied warranty of
      MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
      MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
      GNU General Public License for more details.
      GNU General Public License for more details.
-
+  
      You should have received a copy of the GNU General Public License
      You should have received a copy of the GNU General Public License
      along with this program; if not, write to the Free Software
      along with this program; if not, write to the Free Software
      Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA  }
      Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA  }
@@ -78,8 +77,8 @@ uses
     type
     type
        my_bool = cchar;
        my_bool = cchar;
        Pmy_bool  = ^my_bool;
        Pmy_bool  = ^my_bool;
-       pppchar = ^ppchar;
-       ppbyte = ^pbyte;
+//       pppchar = ^ppchar;
+//       ppbyte = ^pbyte;
 
 
        PVIO = Pointer;
        PVIO = Pointer;
 
 
@@ -88,7 +87,7 @@ uses
 
 
        Pmy_socket = ^my_socket;
        Pmy_socket = ^my_socket;
        my_socket = cint;
        my_socket = cint;
-
+       
 {  ------------ Start of declaration in "mysql_com.h"   ---------------------  }
 {  ------------ Start of declaration in "mysql_com.h"   ---------------------  }
 
 
   {
   {
@@ -418,18 +417,18 @@ uses
 
 
     function net_new_transaction(net : st_net) : st_net;
     function net_new_transaction(net : st_net) : st_net;
 
 
-{$IFNDEF LOAD_DYNAMICALLY}
-    function my_net_init(net:PNET; vio:PVio):my_bool;cdecl;external mysqlvlib name 'my_net_init';
-    procedure my_net_local_init(net:PNET);cdecl;external mysqlvlib name 'my_net_local_init';
-    procedure net_end(net:PNET);cdecl;external mysqlvlib name 'net_end';
-    procedure net_clear(net:PNET);cdecl;external mysqlvlib name 'net_clear';
-    function net_realloc(net:PNET; length:culong):my_bool;cdecl;external mysqlvlib name 'net_realloc';
-    function net_flush(net:PNET):my_bool;cdecl;external mysqlvlib name 'net_flush';
-    function my_net_write(net:PNET; packet:Pchar; len:culong):my_bool;cdecl;external mysqlvlib name 'my_net_write';
+{$IFNDEF LinkDynamically}
+    function my_net_init(net:PNET; vio:PVio):my_bool;cdecl;external mysqllib name 'my_net_init';
+    procedure my_net_local_init(net:PNET);cdecl;external mysqllib name 'my_net_local_init';
+    procedure net_end(net:PNET);cdecl;external mysqllib name 'net_end';
+    procedure net_clear(net:PNET);cdecl;external mysqllib name 'net_clear';
+    function net_realloc(net:PNET; length:culong):my_bool;cdecl;external mysqllib name 'net_realloc';
+    function net_flush(net:PNET):my_bool;cdecl;external mysqllib name 'net_flush';
+    function my_net_write(net:PNET; packet:Pchar; len:culong):my_bool;cdecl;external mysqllib name 'my_net_write';
     function net_write_command(net:PNET; command:cuchar; header:Pchar; head_len:culong; packet:Pchar;
     function net_write_command(net:PNET; command:cuchar; header:Pchar; head_len:culong; packet:Pchar;
-               len:culong):my_bool;cdecl;external mysqlvlib name 'net_write_command';
-    function net_real_write(net:PNET; packet:Pchar; len:culong):cint;cdecl;external mysqlvlib name 'net_real_write';
-    function my_net_read(net:PNET):culong;cdecl;external mysqlvlib name 'my_net_read';
+               len:culong):my_bool;cdecl;external mysqllib name 'net_write_command';
+    function net_real_write(net:PNET; packet:Pchar; len:culong):cint;cdecl;external mysqllib name 'net_real_write';
+    function my_net_read(net:PNET):culong;cdecl;external mysqllib name 'my_net_read';
 {$ENDIF}
 {$ENDIF}
     { The following function is not meant for normal usage
     { The following function is not meant for normal usage
       Currently it's used internally by manager.c  }
       Currently it's used internally by manager.c  }
@@ -439,8 +438,8 @@ uses
        sockaddr = record
        sockaddr = record
            // undefined structure
            // undefined structure
          end;
          end;
-{$IFNDEF LOAD_DYNAMICALLY}
-    function my_connect(s:my_socket; name:Psockaddr; namelen:cuint; timeout:cuint):cint;cdecl;external mysqlvlib name 'my_connect';
+{$IFNDEF LinkDynamically}
+    function my_connect(s:my_socket; name:Psockaddr; namelen:cuint; timeout:cuint):cint;cdecl;external mysqllib name 'my_connect';
 {$ENDIF}
 {$ENDIF}
 
 
     type
     type
@@ -499,38 +498,38 @@ uses
 
 
     { These functions are used for authentication by client and server and
     { These functions are used for authentication by client and server and
       implemented in sql/password.c     }
       implemented in sql/password.c     }
-{$IFNDEF LOAD_DYNAMICALLY}
-    procedure randominit(_para1:Prand_struct; seed1:culong; seed2:culong);cdecl;external mysqlvlib name 'randominit';
-    function my_rnd(_para1:Prand_struct):cdouble;cdecl;external mysqlvlib name 'my_rnd';
-    procedure create_random_string(fto:Pchar; length:cuint; rand_st:Prand_struct);cdecl;external mysqlvlib name 'create_random_string';
-    procedure hash_password(fto:culong; password:Pchar; password_len:cuint);cdecl;external mysqlvlib name 'hash_password';
-    procedure make_scrambled_password_323(fto:Pchar; password:Pchar);cdecl;external mysqlvlib name 'make_scrambled_password_323';
-    procedure scramble_323(fto:Pchar; message:Pchar; password:Pchar);cdecl;external mysqlvlib name 'scramble_323';
-    function check_scramble_323(_para1:Pchar; message:Pchar; salt:culong):my_bool;cdecl;external mysqlvlib name 'check_scramble_323';
-    procedure get_salt_from_password_323(res:pculong; password:Pchar);cdecl;external mysqlvlib name 'get_salt_from_password_323';
-    procedure make_password_from_salt_323(fto:Pchar; salt:pculong);cdecl;external mysqlvlib name 'make_password_from_salt_323';
+{$IFNDEF LinkDynamically}
+    procedure randominit(_para1:Prand_struct; seed1:culong; seed2:culong);cdecl;external mysqllib name 'randominit';
+    function my_rnd(_para1:Prand_struct):cdouble;cdecl;external mysqllib name 'my_rnd';
+    procedure create_random_string(fto:Pchar; length:cuint; rand_st:Prand_struct);cdecl;external mysqllib name 'create_random_string';
+    procedure hash_password(fto:culong; password:Pchar; password_len:cuint);cdecl;external mysqllib name 'hash_password';
+    procedure make_scrambled_password_323(fto:Pchar; password:Pchar);cdecl;external mysqllib name 'make_scrambled_password_323';
+    procedure scramble_323(fto:Pchar; message:Pchar; password:Pchar);cdecl;external mysqllib name 'scramble_323';
+    function check_scramble_323(_para1:Pchar; message:Pchar; salt:culong):my_bool;cdecl;external mysqllib name 'check_scramble_323';
+    procedure get_salt_from_password_323(res:pculong; password:Pchar);cdecl;external mysqllib name 'get_salt_from_password_323';
+    procedure make_password_from_salt_323(fto:Pchar; salt:pculong);cdecl;external mysqllib name 'make_password_from_salt_323';
 {$IFDEF mysql50}
 {$IFDEF mysql50}
-    function octet2hex(fto:Pchar; str:Pchar; len:cuint):pchar;cdecl;external mysqlvlib name 'octet2hex';
+    function octet2hex(fto:Pchar; str:Pchar; len:cuint):pchar;cdecl;external mysqllib name 'octet2hex';
 {$ENDIF}
 {$ENDIF}
-    procedure make_scrambled_password(fto:Pchar; password:Pchar);cdecl;external mysqlvlib name 'make_scrambled_password';
-    procedure scramble(fto:Pchar; message:Pchar; password:Pchar);cdecl;external mysqlvlib name 'scramble';
-    function check_scramble(reply:Pchar; message:Pchar; hash_stage2:Pbyte):my_bool;cdecl;external mysqlvlib name 'check_scramble';
-    procedure get_salt_from_password(res:Pbyte; password:Pchar);cdecl;external mysqlvlib name 'get_salt_from_password';
-    procedure make_password_from_salt(fto:Pchar; hash_stage2:Pbyte);cdecl;external mysqlvlib name 'make_password_from_salt';
+    procedure make_scrambled_password(fto:Pchar; password:Pchar);cdecl;external mysqllib name 'make_scrambled_password';
+    procedure scramble(fto:Pchar; message:Pchar; password:Pchar);cdecl;external mysqllib name 'scramble';
+    function check_scramble(reply:Pchar; message:Pchar; hash_stage2:Pbyte):my_bool;cdecl;external mysqllib name 'check_scramble';
+    procedure get_salt_from_password(res:Pbyte; password:Pchar);cdecl;external mysqllib name 'get_salt_from_password';
+    procedure make_password_from_salt(fto:Pchar; hash_stage2:Pbyte);cdecl;external mysqllib name 'make_password_from_salt';
     { end of password.c  }
     { end of password.c  }
 
 
-    function get_tty_password(opt_message:Pchar):Pchar;cdecl;external mysqlvlib name 'get_tty_password';
-    function mysql_errno_to_sqlstate(mysql_errno:cuint):Pchar;cdecl;external mysqlvlib name 'mysql_errno_to_sqlstate';
+    function get_tty_password(opt_message:Pchar):Pchar;cdecl;external mysqllib name 'get_tty_password';
+    function mysql_errno_to_sqlstate(mysql_errno:cuint):Pchar;cdecl;external mysqllib name 'mysql_errno_to_sqlstate';
 
 
     { Some other useful functions  }
     { Some other useful functions  }
 {$IFDEF mysql50}
 {$IFDEF mysql50}
-    function modify_defaults_file(file_location:Pchar; option:Pchar; option_value:Pchar; section_name:Pchar; remove_option:cint):cint;cdecl;external mysqlvlib name 'load_defaults';
+    function modify_defaults_file(file_location:Pchar; option:Pchar; option_value:Pchar; section_name:Pchar; remove_option:cint):cint;cdecl;external mysqllib name 'load_defaults';
 {$ENDIF}
 {$ENDIF}
 
 
-    function load_defaults(conf_file:Pchar; groups:PPchar; argc:pcint; argv:PPPchar):cint;cdecl;external mysqlvlib name 'load_defaults';
-    function my_init:my_bool;cdecl;external mysqlvlib name 'my_init';
-    function my_thread_init:my_bool;cdecl;external mysqlvlib name 'my_thread_init';
-    procedure my_thread_end;cdecl;external mysqlvlib name 'my_thread_end';
+    function load_defaults(conf_file:Pchar; groups:PPchar; argc:pcint; argv:PPPchar):cint;cdecl;external mysqllib name 'load_defaults';
+    function my_init:my_bool;cdecl;external mysqllib name 'my_init';
+    function my_thread_init:my_bool;cdecl;external mysqllib name 'my_thread_init';
+    procedure my_thread_end;cdecl;external mysqllib name 'my_thread_end';
 {$ELSE}
 {$ELSE}
     var
     var
       my_init : function :my_bool;cdecl;
       my_init : function :my_bool;cdecl;
@@ -539,10 +538,10 @@ uses
 {$ENDIF}
 {$ENDIF}
 
 
 {$ifdef _global_h}
 {$ifdef _global_h}
-{$IFNDEF LOAD_DYNAMICALLY}
-    function net_field_length(packet:PPuchar):culong;extdecl;external mysqlvlib name 'net_field_length_ll';
-    function net_field_length_ll(packet:PPuchar):my_ulonglong;cdecl;external mysqlvlib name 'net_field_length_ll';
-    function net_store_length(pkg:Pchar; length:ulonglong):Pchar;cdecl;external mysqlvlib name 'net_store_length';
+{$IFNDEF LinkDynamically}
+    function net_field_length(packet:PPuchar):culong;extdecl;external mysqllib name 'net_field_length_ll';
+    function net_field_length_ll(packet:PPuchar):my_ulonglong;cdecl;external mysqllib name 'net_field_length_ll';
+    function net_store_length(pkg:Pchar; length:ulonglong):Pchar;cdecl;external mysqllib name 'net_store_length';
 {$ENDIF}
 {$ENDIF}
 {$endif}
 {$endif}
 
 
@@ -585,7 +584,7 @@ uses
 { $include "typelib.h"}
 { $include "typelib.h"}
 { $include "my_list.h" /* for LISTs used in 'MYSQL' and 'MYSQL_STMT' */}
 { $include "my_list.h" /* for LISTs used in 'MYSQL' and 'MYSQL_STMT' */}
 
 
-{$IFNDEF LOAD_DYNAMICALLY}
+{$IFNDEF LinkDynamically}
       var
       var
          mysql_port : cuint;cvar;external;
          mysql_port : cuint;cvar;external;
          mysql_unix_port : Pchar;cvar;external;
          mysql_unix_port : Pchar;cvar;external;
@@ -594,7 +593,7 @@ uses
       const
       const
          CLIENT_NET_READ_TIMEOUT = 365*24*3600;     // Timeout on read
          CLIENT_NET_READ_TIMEOUT = 365*24*3600;     // Timeout on read
          CLIENT_NET_WRITE_TIMEOUT = 365*24*3600;    // Timeout on write
          CLIENT_NET_WRITE_TIMEOUT = 365*24*3600;    // Timeout on write
-
+      
 {$ifdef NETWARE}
 {$ifdef NETWARE}
 (** unsupported pragma#pragma pack(push, 8)		/* 8 byte alignment */*)
 (** unsupported pragma#pragma pack(push, 8)		/* 8 byte alignment */*)
 {$endif}
 {$endif}
@@ -728,7 +727,7 @@ uses
 {$ENDIF}
 {$ENDIF}
 { $endif}
 { $endif}
          end;
          end;
-
+         
        MYSQL_DATA = st_mysql_data;
        MYSQL_DATA = st_mysql_data;
        PMYSQL_DATA = ^MYSQL_DATA;
        PMYSQL_DATA = ^MYSQL_DATA;
        mysql_option = (MYSQL_OPT_CONNECT_TIMEOUT,MYSQL_OPT_COMPRESS,
        mysql_option = (MYSQL_OPT_CONNECT_TIMEOUT,MYSQL_OPT_COMPRESS,
@@ -1045,7 +1044,7 @@ uses
 
 
     {
     {
       Note: this info is from the mysql-5.0 version:
       Note: this info is from the mysql-5.0 version:
-
+    
       This structure is used to define bind information, and
       This structure is used to define bind information, and
       internally by the client library.
       internally by the client library.
       Public members with their descriptions are listed below
       Public members with their descriptions are listed below
@@ -1232,12 +1231,12 @@ uses
 //#define max_allowed_packet (*mysql_get_parameters()->p_max_allowed_packet)
 //#define max_allowed_packet (*mysql_get_parameters()->p_max_allowed_packet)
 //#define net_buffer_length (*mysql_get_parameters()->p_net_buffer_length)
 //#define net_buffer_length (*mysql_get_parameters()->p_net_buffer_length)
 
 
-{$IFNDEF LOAD_DYNAMICALLY}
+{$IFNDEF LinkDynamically}
     { Set up and bring down the server; to ensure that applications will
     { Set up and bring down the server; to ensure that applications will
       work when linked against either the standard client library or the
       work when linked against either the standard client library or the
       embedded server library, these functions should be called.     }
       embedded server library, these functions should be called.     }
-    function mysql_server_init(argc:cint; argv:PPchar; groups:PPchar):cint;extdecl;external mysqlvlib name 'mysql_server_init';
-    procedure mysql_server_end;extdecl;external mysqlvlib name 'mysql_server_end';
+    function mysql_server_init(argc:cint; argv:PPchar; groups:PPchar):cint;extdecl;external mysqllib name 'mysql_server_init';
+    procedure mysql_server_end;extdecl;external mysqllib name 'mysql_server_end';
 
 
     { mysql_server_init/end need to be called when using libmysqld or
     { mysql_server_init/end need to be called when using libmysqld or
       libmysqlclient (exactly, mysql_server_init() is called by mysql_init() so
       libmysqlclient (exactly, mysql_server_init() is called by mysql_init() so
@@ -1247,49 +1246,49 @@ uses
       names which suit well whether you're using libmysqld or libmysqlclient. We
       names which suit well whether you're using libmysqld or libmysqlclient. We
       intend to promote these aliases over the mysql_server* ones.     }
       intend to promote these aliases over the mysql_server* ones.     }
 
 
-    function mysql_library_init(argc:cint; argv:PPchar; groups:PPchar):cint;extdecl;external mysqlvlib name 'mysql_server_init';
-    procedure mysql_library_end;extdecl;external mysqlvlib name 'mysql_server_end';
+    function mysql_library_init(argc:cint; argv:PPchar; groups:PPchar):cint;extdecl;external mysqllib name 'mysql_server_init';
+    procedure mysql_library_end;extdecl;external mysqllib name 'mysql_server_end';
 
 
-    function mysql_get_parameters:PMYSQL_PARAMETERS;extdecl;external mysqlvlib name 'mysql_get_parameters';
+    function mysql_get_parameters:PMYSQL_PARAMETERS;extdecl;external mysqllib name 'mysql_get_parameters';
 
 
     { Set up and bring down a thread; these function should be called
     { Set up and bring down a thread; these function should be called
       for each thread in an application which opens at least one MySQL
       for each thread in an application which opens at least one MySQL
       connection.  All uses of the connection(s) should be between these
       connection.  All uses of the connection(s) should be between these
       function calls.     }
       function calls.     }
-    function mysql_thread_init:my_bool;extdecl;external mysqlvlib name 'mysql_thread_init';
-    procedure mysql_thread_end;extdecl;external mysqlvlib name 'mysql_thread_end';
+    function mysql_thread_init:my_bool;extdecl;external mysqllib name 'mysql_thread_init';
+    procedure mysql_thread_end;extdecl;external mysqllib name 'mysql_thread_end';
     { Functions to get information from the MYSQL and MYSQL_RES structures
     { Functions to get information from the MYSQL and MYSQL_RES structures
       Should definitely be used if one uses shared libraries.     }
       Should definitely be used if one uses shared libraries.     }
-    function mysql_num_rows(res:PMYSQL_RES):my_ulonglong;extdecl;external mysqlvlib name 'mysql_num_rows';
-    function mysql_num_fields(res:PMYSQL_RES):cuint;extdecl;external mysqlvlib name 'mysql_num_fields';
-    function mysql_eof(res:PMYSQL_RES):my_bool;extdecl;external mysqlvlib name 'mysql_eof';
-    function mysql_fetch_field_direct(res:PMYSQL_RES; fieldnr:cuint):PMYSQL_FIELD;extdecl;external mysqlvlib name 'mysql_fetch_field_direct';
-    function mysql_fetch_fields(res:PMYSQL_RES):PMYSQL_FIELD;extdecl;external mysqlvlib name 'mysql_fetch_fields';
-    function mysql_row_tell(res:PMYSQL_RES):MYSQL_ROW_OFFSET;extdecl;external mysqlvlib name 'mysql_row_tell';
-    function mysql_field_tell(res:PMYSQL_RES):MYSQL_FIELD_OFFSET;extdecl;external mysqlvlib name 'mysql_field_tell';
-    function mysql_field_count(mysql:PMYSQL):cuint;extdecl;external mysqlvlib name 'mysql_field_count';
-    function mysql_affected_rows(mysql:PMYSQL):my_ulonglong;extdecl;external mysqlvlib name 'mysql_affected_rows';
-    function mysql_insert_id(mysql:PMYSQL):my_ulonglong;extdecl;external mysqlvlib name 'mysql_insert_id';
-    function mysql_errno(mysql:PMYSQL):cuint;extdecl;external mysqlvlib name 'mysql_errno';
-    function mysql_error(mysql:PMYSQL):Pchar;extdecl;external mysqlvlib name 'mysql_error';
-    function mysql_sqlstate(mysql:PMYSQL):Pchar;extdecl;external mysqlvlib name 'mysql_sqlstate';
-    function mysql_warning_count(mysql:PMYSQL):cuint;extdecl;external mysqlvlib name 'mysql_warning_count';
-    function mysql_info(mysql:PMYSQL):Pchar;extdecl;external mysqlvlib name 'mysql_info';
-    function mysql_thread_id(mysql:PMYSQL):culong;extdecl;external mysqlvlib name 'mysql_thread_id';
-    function mysql_character_set_name(mysql:PMYSQL):Pchar;extdecl;external mysqlvlib name 'mysql_character_set_name';
-    function mysql_set_character_set(mysql:PMYSQL; csname:Pchar):longint;extdecl;external mysqlvlib name 'mysql_set_character_set';
-    function mysql_init(mysql:PMYSQL):PMYSQL;extdecl;external mysqlvlib name 'mysql_init';
+    function mysql_num_rows(res:PMYSQL_RES):my_ulonglong;extdecl;external mysqllib name 'mysql_num_rows';
+    function mysql_num_fields(res:PMYSQL_RES):cuint;extdecl;external mysqllib name 'mysql_num_fields';
+    function mysql_eof(res:PMYSQL_RES):my_bool;extdecl;external mysqllib name 'mysql_eof';
+    function mysql_fetch_field_direct(res:PMYSQL_RES; fieldnr:cuint):PMYSQL_FIELD;extdecl;external mysqllib name 'mysql_fetch_field_direct';
+    function mysql_fetch_fields(res:PMYSQL_RES):PMYSQL_FIELD;extdecl;external mysqllib name 'mysql_fetch_fields';
+    function mysql_row_tell(res:PMYSQL_RES):MYSQL_ROW_OFFSET;extdecl;external mysqllib name 'mysql_row_tell';
+    function mysql_field_tell(res:PMYSQL_RES):MYSQL_FIELD_OFFSET;extdecl;external mysqllib name 'mysql_field_tell';
+    function mysql_field_count(mysql:PMYSQL):cuint;extdecl;external mysqllib name 'mysql_field_count';
+    function mysql_affected_rows(mysql:PMYSQL):my_ulonglong;extdecl;external mysqllib name 'mysql_affected_rows';
+    function mysql_insert_id(mysql:PMYSQL):my_ulonglong;extdecl;external mysqllib name 'mysql_insert_id';
+    function mysql_errno(mysql:PMYSQL):cuint;extdecl;external mysqllib name 'mysql_errno';
+    function mysql_error(mysql:PMYSQL):Pchar;extdecl;external mysqllib name 'mysql_error';
+    function mysql_sqlstate(mysql:PMYSQL):Pchar;extdecl;external mysqllib name 'mysql_sqlstate';
+    function mysql_warning_count(mysql:PMYSQL):cuint;extdecl;external mysqllib name 'mysql_warning_count';
+    function mysql_info(mysql:PMYSQL):Pchar;extdecl;external mysqllib name 'mysql_info';
+    function mysql_thread_id(mysql:PMYSQL):culong;extdecl;external mysqllib name 'mysql_thread_id';
+    function mysql_character_set_name(mysql:PMYSQL):Pchar;extdecl;external mysqllib name 'mysql_character_set_name';
+    function mysql_set_character_set(mysql:PMYSQL; csname:Pchar):longint;extdecl;external mysqllib name 'mysql_set_character_set';
+    function mysql_init(mysql:PMYSQL):PMYSQL;extdecl;external mysqllib name 'mysql_init';
     function mysql_ssl_set(mysql:PMYSQL; key:Pchar; cert:Pchar; ca:Pchar; capath:Pchar;
     function mysql_ssl_set(mysql:PMYSQL; key:Pchar; cert:Pchar; ca:Pchar; capath:Pchar;
-               cipher:Pchar):my_bool;extdecl;external mysqlvlib name 'mysql_ssl_set';
-    function mysql_change_user(mysql:PMYSQL; user:Pchar; passwd:Pchar; db:Pchar):my_bool;extdecl;external mysqlvlib name 'mysql_change_user';
+               cipher:Pchar):my_bool;extdecl;external mysqllib name 'mysql_ssl_set';
+    function mysql_change_user(mysql:PMYSQL; user:Pchar; passwd:Pchar; db:Pchar):my_bool;extdecl;external mysqllib name 'mysql_change_user';
     function mysql_real_connect(mysql:PMYSQL; host:Pchar; user:Pchar; passwd:Pchar; db:Pchar;
     function mysql_real_connect(mysql:PMYSQL; host:Pchar; user:Pchar; passwd:Pchar; db:Pchar;
-               port:cuint; unix_socket:Pchar; clientflag:culong):PMYSQL;extdecl;external mysqlvlib name 'mysql_real_connect';
-    function mysql_select_db(mysql:PMYSQL; db:Pchar):cint;extdecl;external mysqlvlib name 'mysql_select_db';
-    function mysql_query(mysql:PMYSQL; q:Pchar):cint;extdecl;external mysqlvlib name 'mysql_query';
-    function mysql_send_query(mysql:PMYSQL; q:Pchar; length:culong):cint;extdecl;external mysqlvlib name 'mysql_send_query';
-    function mysql_real_query(mysql:PMYSQL; q:Pchar; length:culong):cint;extdecl;external mysqlvlib name 'mysql_real_query';
-    function mysql_store_result(mysql:PMYSQL):PMYSQL_RES;extdecl;external mysqlvlib name 'mysql_store_result';
-    function mysql_use_result(mysql:PMYSQL):PMYSQL_RES;extdecl;external mysqlvlib name 'mysql_use_result';
+               port:cuint; unix_socket:Pchar; clientflag:culong):PMYSQL;extdecl;external mysqllib name 'mysql_real_connect';
+    function mysql_select_db(mysql:PMYSQL; db:Pchar):cint;extdecl;external mysqllib name 'mysql_select_db';
+    function mysql_query(mysql:PMYSQL; q:Pchar):cint;extdecl;external mysqllib name 'mysql_query';
+    function mysql_send_query(mysql:PMYSQL; q:Pchar; length:culong):cint;extdecl;external mysqllib name 'mysql_send_query';
+    function mysql_real_query(mysql:PMYSQL; q:Pchar; length:culong):cint;extdecl;external mysqllib name 'mysql_real_query';
+    function mysql_store_result(mysql:PMYSQL):PMYSQL_RES;extdecl;external mysqllib name 'mysql_store_result';
+    function mysql_use_result(mysql:PMYSQL):PMYSQL_RES;extdecl;external mysqllib name 'mysql_use_result';
 
 
 {$ELSE}
 {$ELSE}
 
 
@@ -1330,16 +1329,16 @@ uses
       mysql_use_result: function (mysql:PMYSQL):PMYSQL_RES;extdecl;
       mysql_use_result: function (mysql:PMYSQL):PMYSQL_RES;extdecl;
 {$ENDIF}
 {$ENDIF}
 
 
-{$IFNDEF LOAD_DYNAMICALLY}
+{$IFNDEF LinkDynamically}
     { perform query on master  }
     { perform query on master  }
-    function mysql_master_query(mysql:PMYSQL; q:Pchar; length:culong):my_bool;extdecl;external mysqlvlib name 'mysql_master_query';
-    function mysql_master_send_query(mysql:PMYSQL; q:Pchar; length:culong):my_bool;extdecl;external mysqlvlib name 'mysql_master_send_query';
+    function mysql_master_query(mysql:PMYSQL; q:Pchar; length:culong):my_bool;extdecl;external mysqllib name 'mysql_master_query';
+    function mysql_master_send_query(mysql:PMYSQL; q:Pchar; length:culong):my_bool;extdecl;external mysqllib name 'mysql_master_send_query';
 
 
     { perform query on slave  }
     { perform query on slave  }
-    function mysql_slave_query(mysql:PMYSQL; q:Pchar; length:culong):my_bool;extdecl;external mysqlvlib name 'mysql_slave_query';
-    function mysql_slave_send_query(mysql:PMYSQL; q:Pchar; length:culong):my_bool;extdecl;external mysqlvlib name 'mysql_slave_send_query';
+    function mysql_slave_query(mysql:PMYSQL; q:Pchar; length:culong):my_bool;extdecl;external mysqllib name 'mysql_slave_query';
+    function mysql_slave_send_query(mysql:PMYSQL; q:Pchar; length:culong):my_bool;extdecl;external mysqllib name 'mysql_slave_send_query';
 {$IFDEF mysql50}
 {$IFDEF mysql50}
-    procedure mysql_get_character_set_info(mysql : PMYSQL; charset : PMY_CHARSET_INFO);extdecl;external mysqlvlib name 'mysql_get_character_set_info';
+    procedure mysql_get_character_set_info(mysql : PMYSQL; charset : PMY_CHARSET_INFO);extdecl;external mysqllib name 'mysql_get_character_set_info';
 {$ENDIF}
 {$ENDIF}
 {$ENDIF}
 {$ENDIF}
 
 
@@ -1348,110 +1347,110 @@ uses
     const
     const
        LOCAL_INFILE_ERROR_LEN = 512;
        LOCAL_INFILE_ERROR_LEN = 512;
 
 
-{$IFNDEF LOAD_DYNAMICALLY}
+{$IFNDEF LinkDynamically}
 {    procedure mysql_set_local_infile_handler(mysql:PMYSQL; local_infile_init:function (_para1:Ppointer; _para2:Pchar; _para3:pointer):longint; local_infile_read:function (_para1:pointer; _para2:Pchar; _para3:dword):longint; local_infile_end:procedure (_pa
 {    procedure mysql_set_local_infile_handler(mysql:PMYSQL; local_infile_init:function (_para1:Ppointer; _para2:Pchar; _para3:pointer):longint; local_infile_read:function (_para1:pointer; _para2:Pchar; _para3:dword):longint; local_infile_end:procedure (_pa
-                _para6:pointer);cdecl;external mysqlvlib name 'mysql_set_local_infile_handler';}
-    procedure mysql_set_local_infile_default(mysql:PMYSQL);cdecl;external mysqlvlib name 'mysql_set_local_infile_default';
+                _para6:pointer);cdecl;external mysqllib name 'mysql_set_local_infile_handler';}
+    procedure mysql_set_local_infile_default(mysql:PMYSQL);cdecl;external mysqllib name 'mysql_set_local_infile_default';
 
 
     { enable/disable parsing of all queries to decide if they go on master or
     { enable/disable parsing of all queries to decide if they go on master or
       slave     }
       slave     }
-    procedure mysql_enable_rpl_parse(mysql:PMYSQL);extdecl;external mysqlvlib name 'mysql_enable_rpl_parse';
-    procedure mysql_disable_rpl_parse(mysql:PMYSQL);extdecl;external mysqlvlib name 'mysql_disable_rpl_parse';
+    procedure mysql_enable_rpl_parse(mysql:PMYSQL);extdecl;external mysqllib name 'mysql_enable_rpl_parse';
+    procedure mysql_disable_rpl_parse(mysql:PMYSQL);extdecl;external mysqllib name 'mysql_disable_rpl_parse';
 
 
     { get the value of the parse flag  }
     { get the value of the parse flag  }
-    function mysql_rpl_parse_enabled(mysql:PMYSQL):cint;extdecl;external mysqlvlib name 'mysql_rpl_parse_enabled';
+    function mysql_rpl_parse_enabled(mysql:PMYSQL):cint;extdecl;external mysqllib name 'mysql_rpl_parse_enabled';
 
 
     {  enable/disable reads from master  }
     {  enable/disable reads from master  }
-    procedure mysql_enable_reads_from_master(mysql:PMYSQL);extdecl;external mysqlvlib name 'mysql_enable_reads_from_master';
-    procedure mysql_disable_reads_from_master(mysql:PMYSQL);extdecl;external mysqlvlib name 'mysql_disable_reads_from_master';
+    procedure mysql_enable_reads_from_master(mysql:PMYSQL);extdecl;external mysqllib name 'mysql_enable_reads_from_master';
+    procedure mysql_disable_reads_from_master(mysql:PMYSQL);extdecl;external mysqllib name 'mysql_disable_reads_from_master';
 
 
     { get the value of the master read flag  }
     { get the value of the master read flag  }
-    function mysql_reads_from_master_enabled(mysql:PMYSQL):my_bool;extdecl;external mysqlvlib name 'mysql_reads_from_master_enabled';
+    function mysql_reads_from_master_enabled(mysql:PMYSQL):my_bool;extdecl;external mysqllib name 'mysql_reads_from_master_enabled';
 
 
-    function mysql_rpl_query_type(q : pchar;len : cint):mysql_rpl_type;extdecl;external mysqlvlib name 'mysql_rpl_query_type';
+    function mysql_rpl_query_type(q : pchar;len : cint):mysql_rpl_type;extdecl;external mysqllib name 'mysql_rpl_query_type';
 
 
     { discover the master and its slaves  }
     { discover the master and its slaves  }
-    function mysql_rpl_probe(mysql:PMYSQL):my_bool;extdecl;external mysqlvlib name 'mysql_rpl_probe';
+    function mysql_rpl_probe(mysql:PMYSQL):my_bool;extdecl;external mysqllib name 'mysql_rpl_probe';
 
 
     { set the master, close/free the old one, if it is not a pivot  }
     { set the master, close/free the old one, if it is not a pivot  }
-    function mysql_set_master(mysql:PMYSQL; host:Pchar; port:cuint; user:Pchar; passwd:Pchar):cint;extdecl;external mysqlvlib name 'mysql_set_master';
-    function mysql_add_slave(mysql:PMYSQL; host:Pchar; port:cuint; user:Pchar; passwd:Pchar):cint;extdecl;external mysqlvlib name 'mysql_add_slave';
-    function mysql_shutdown(mysql:PMYSQL; shutdown_level:mysql_enum_shutdown_level):cint;extdecl;external mysqlvlib name 'mysql_shutdown';
-    function mysql_dump_debug_info(mysql:PMYSQL):cint;extdecl;external mysqlvlib name 'mysql_dump_debug_info';
-    function mysql_refresh(mysql:PMYSQL; refresh_options:cuint):cint;extdecl;external mysqlvlib name 'mysql_refresh';
-    function mysql_kill(mysql:PMYSQL; pid:culong):cint;extdecl;external mysqlvlib name 'mysql_kill';
-    function mysql_set_server_option(mysql:PMYSQL; option:enum_mysql_set_option):cint;extdecl;external mysqlvlib name 'mysql_set_server_option';
-    function mysql_ping(mysql:PMYSQL):cint;extdecl;external mysqlvlib name 'mysql_ping';
-    function mysql_stat(mysql:PMYSQL):Pchar;extdecl;external mysqlvlib name 'mysql_stat';
-    function mysql_get_server_info(mysql:PMYSQL):Pchar;extdecl;external mysqlvlib name 'mysql_get_server_info';
-    function mysql_get_client_info:Pchar;extdecl;external mysqlvlib name 'mysql_get_client_info';
-    function mysql_get_client_version:culong;extdecl;external mysqlvlib name 'mysql_get_client_version';
-    function mysql_get_host_info(mysql:PMYSQL):Pchar;extdecl;external mysqlvlib name 'mysql_get_host_info';
-    function mysql_get_server_version(mysql:PMYSQL):culong;extdecl;external mysqlvlib name 'mysql_get_server_version';
-    function mysql_get_proto_info(mysql:PMYSQL):cuint;extdecl;external mysqlvlib name 'mysql_get_proto_info';
-    function mysql_list_dbs(mysql:PMYSQL; wild:Pchar):PMYSQL_RES;extdecl;external mysqlvlib name 'mysql_list_dbs';
-
-    function mysql_list_tables(mysql:PMYSQL; wild:Pchar):PMYSQL_RES;extdecl;external mysqlvlib name 'mysql_list_tables';
-    function mysql_list_processes(mysql:PMYSQL):PMYSQL_RES;extdecl;external mysqlvlib name 'mysql_list_processes';
-    function mysql_options(mysql:PMYSQL; option:mysql_option; arg:Pchar):cint;extdecl;external mysqlvlib name 'mysql_options';
-    procedure mysql_free_result(result:PMYSQL_RES);extdecl;external mysqlvlib name 'mysql_free_result';
-    procedure mysql_data_seek(result:PMYSQL_RES; offset:my_ulonglong);extdecl;external mysqlvlib name 'mysql_data_seek';
-    function mysql_row_seek(result:PMYSQL_RES; offset:MYSQL_ROW_OFFSET):MYSQL_ROW_OFFSET;extdecl;external mysqlvlib name 'mysql_row_seek';
-    function mysql_field_seek(result:PMYSQL_RES; offset:MYSQL_FIELD_OFFSET):MYSQL_FIELD_OFFSET;extdecl;external mysqlvlib name 'mysql_field_seek';
-    function mysql_fetch_row(result:PMYSQL_RES):MYSQL_ROW;extdecl;external mysqlvlib name 'mysql_fetch_row';
-    function mysql_fetch_lengths(result:PMYSQL_RES):pculong;extdecl;external mysqlvlib name 'mysql_fetch_lengths';
-    function mysql_fetch_field(result:PMYSQL_RES):PMYSQL_FIELD;extdecl;external mysqlvlib name 'mysql_fetch_field';
-    function mysql_list_fields(mysql:PMYSQL; table:Pchar; wild:Pchar):PMYSQL_RES;extdecl;external mysqlvlib name 'mysql_list_fields';
-    function mysql_escape_string(fto:Pchar; from:Pchar; from_length:culong):culong;extdecl;external mysqlvlib name 'mysql_escape_string';
-    function mysql_hex_string(fto:Pchar; from:Pchar; from_length:culong):culong;extdecl;external mysqlvlib name 'mysql_hex_string';
-    function mysql_real_escape_string(mysql:PMYSQL; fto:Pchar; from:Pchar; length:culong):culong;extdecl;external mysqlvlib name 'mysql_real_escape_string';
-    procedure mysql_debug(debug:Pchar);extdecl;external mysqlvlib name 'mysql_debug';
+    function mysql_set_master(mysql:PMYSQL; host:Pchar; port:cuint; user:Pchar; passwd:Pchar):cint;extdecl;external mysqllib name 'mysql_set_master';
+    function mysql_add_slave(mysql:PMYSQL; host:Pchar; port:cuint; user:Pchar; passwd:Pchar):cint;extdecl;external mysqllib name 'mysql_add_slave';
+    function mysql_shutdown(mysql:PMYSQL; shutdown_level:mysql_enum_shutdown_level):cint;extdecl;external mysqllib name 'mysql_shutdown';
+    function mysql_dump_debug_info(mysql:PMYSQL):cint;extdecl;external mysqllib name 'mysql_dump_debug_info';
+    function mysql_refresh(mysql:PMYSQL; refresh_options:cuint):cint;extdecl;external mysqllib name 'mysql_refresh';
+    function mysql_kill(mysql:PMYSQL; pid:culong):cint;extdecl;external mysqllib name 'mysql_kill';
+    function mysql_set_server_option(mysql:PMYSQL; option:enum_mysql_set_option):cint;extdecl;external mysqllib name 'mysql_set_server_option';
+    function mysql_ping(mysql:PMYSQL):cint;extdecl;external mysqllib name 'mysql_ping';
+    function mysql_stat(mysql:PMYSQL):Pchar;extdecl;external mysqllib name 'mysql_stat';
+    function mysql_get_server_info(mysql:PMYSQL):Pchar;extdecl;external mysqllib name 'mysql_get_server_info';
+    function mysql_get_client_info:Pchar;extdecl;external mysqllib name 'mysql_get_client_info';
+    function mysql_get_client_version:culong;extdecl;external mysqllib name 'mysql_get_client_version';
+    function mysql_get_host_info(mysql:PMYSQL):Pchar;extdecl;external mysqllib name 'mysql_get_host_info';
+    function mysql_get_server_version(mysql:PMYSQL):culong;extdecl;external mysqllib name 'mysql_get_server_version';
+    function mysql_get_proto_info(mysql:PMYSQL):cuint;extdecl;external mysqllib name 'mysql_get_proto_info';
+    function mysql_list_dbs(mysql:PMYSQL; wild:Pchar):PMYSQL_RES;extdecl;external mysqllib name 'mysql_list_dbs';
+
+    function mysql_list_tables(mysql:PMYSQL; wild:Pchar):PMYSQL_RES;extdecl;external mysqllib name 'mysql_list_tables';
+    function mysql_list_processes(mysql:PMYSQL):PMYSQL_RES;extdecl;external mysqllib name 'mysql_list_processes';
+    function mysql_options(mysql:PMYSQL; option:mysql_option; arg:Pchar):cint;extdecl;external mysqllib name 'mysql_options';
+    procedure mysql_free_result(result:PMYSQL_RES);extdecl;external mysqllib name 'mysql_free_result';
+    procedure mysql_data_seek(result:PMYSQL_RES; offset:my_ulonglong);extdecl;external mysqllib name 'mysql_data_seek';
+    function mysql_row_seek(result:PMYSQL_RES; offset:MYSQL_ROW_OFFSET):MYSQL_ROW_OFFSET;extdecl;external mysqllib name 'mysql_row_seek';
+    function mysql_field_seek(result:PMYSQL_RES; offset:MYSQL_FIELD_OFFSET):MYSQL_FIELD_OFFSET;extdecl;external mysqllib name 'mysql_field_seek';
+    function mysql_fetch_row(result:PMYSQL_RES):MYSQL_ROW;extdecl;external mysqllib name 'mysql_fetch_row';
+    function mysql_fetch_lengths(result:PMYSQL_RES):pculong;extdecl;external mysqllib name 'mysql_fetch_lengths';
+    function mysql_fetch_field(result:PMYSQL_RES):PMYSQL_FIELD;extdecl;external mysqllib name 'mysql_fetch_field';
+    function mysql_list_fields(mysql:PMYSQL; table:Pchar; wild:Pchar):PMYSQL_RES;extdecl;external mysqllib name 'mysql_list_fields';
+    function mysql_escape_string(fto:Pchar; from:Pchar; from_length:culong):culong;extdecl;external mysqllib name 'mysql_escape_string';
+    function mysql_hex_string(fto:Pchar; from:Pchar; from_length:culong):culong;extdecl;external mysqllib name 'mysql_hex_string';
+    function mysql_real_escape_string(mysql:PMYSQL; fto:Pchar; from:Pchar; length:culong):culong;extdecl;external mysqllib name 'mysql_real_escape_string';
+    procedure mysql_debug(debug:Pchar);extdecl;external mysqllib name 'mysql_debug';
 {    function mysql_odbc_escape_string(mysql:PMYSQL; fto:Pchar; to_length:dword; from:Pchar; from_length:dword;
 {    function mysql_odbc_escape_string(mysql:PMYSQL; fto:Pchar; to_length:dword; from:Pchar; from_length:dword;
-               param:pointer; extend_buffer:function (_para1:pointer; to:Pchar; length:Pdword):Pchar):Pchar;extdecl;external mysqlvlib name 'mysql_odbc_escape_string';}
-    procedure myodbc_remove_escape(mysql:PMYSQL; name:Pchar);extdecl;external mysqlvlib name 'myodbc_remove_escape';
-    function mysql_thread_safe:cuint;extdecl;external mysqlvlib name 'mysql_thread_safe';
-    function mysql_embedded:my_bool;extdecl;external mysqlvlib name 'mysql_embedded';
-    function mysql_manager_init(con:PMYSQL_MANAGER):PMYSQL_MANAGER;extdecl;external mysqlvlib name 'mysql_manager_init';
-    function mysql_manager_connect(con:PMYSQL_MANAGER; host:Pchar; user:Pchar; passwd:Pchar; port:cuint):PMYSQL_MANAGER;extdecl;external mysqlvlib name 'mysql_manager_connect';
-    procedure mysql_manager_close(con:PMYSQL_MANAGER);extdecl;external mysqlvlib name 'mysql_manager_close';
-    function mysql_manager_command(con:PMYSQL_MANAGER; cmd:Pchar; cmd_len:cint):cint;extdecl;external mysqlvlib name 'mysql_manager_command';
-    function mysql_manager_fetch_line(con:PMYSQL_MANAGER; res_buf:Pchar; res_buf_size:cint):cint;extdecl;external mysqlvlib name 'mysql_manager_fetch_line';
-    function mysql_read_query_result(mysql:PMYSQL):my_bool;extdecl;external mysqlvlib name 'mysql_read_query_result';
-
-    function mysql_stmt_init(mysql:PMYSQL):PMYSQL_STMT;extdecl;external mysqlvlib name 'mysql_stmt_init';
-    function mysql_stmt_prepare(stmt:PMYSQL_STMT; query:Pchar; length:culong):cint;extdecl;external mysqlvlib name 'mysql_stmt_prepare';
-    function mysql_stmt_execute(stmt:PMYSQL_STMT):cint;extdecl;external mysqlvlib name 'mysql_stmt_execute';
-    function mysql_stmt_fetch(stmt:PMYSQL_STMT):cint;extdecl;external mysqlvlib name 'mysql_stmt_fetch';
-    function mysql_stmt_fetch_column(stmt:PMYSQL_STMT; bind:PMYSQL_BIND; column:cuint; offset:culong):cint;extdecl;external mysqlvlib name 'mysql_stmt_fetch_column';
-    function mysql_stmt_store_result(stmt:PMYSQL_STMT):cint;extdecl;external mysqlvlib name 'mysql_stmt_store_result';
-    function mysql_stmt_param_count(stmt:PMYSQL_STMT):culong;extdecl;external mysqlvlib name 'mysql_stmt_param_count';
-    function mysql_stmt_attr_set(stmt:PMYSQL_STMT; attr_type:enum_stmt_attr_type; attr:pointer):my_bool;extdecl;external mysqlvlib name 'mysql_stmt_attr_set';
-    function mysql_stmt_attr_get(stmt:PMYSQL_STMT; attr_type:enum_stmt_attr_type; attr:pointer):my_bool;extdecl;external mysqlvlib name 'mysql_stmt_attr_get';
-    function mysql_stmt_bind_param(stmt:PMYSQL_STMT; bnd:PMYSQL_BIND):my_bool;extdecl;external mysqlvlib name 'mysql_stmt_bind_param';
-    function mysql_stmt_bind_result(stmt:PMYSQL_STMT; bnd:PMYSQL_BIND):my_bool;extdecl;external mysqlvlib name 'mysql_stmt_bind_result';
-    function mysql_stmt_close(stmt:PMYSQL_STMT):my_bool;extdecl;external mysqlvlib name 'mysql_stmt_close';
-    function mysql_stmt_reset(stmt:PMYSQL_STMT):my_bool;extdecl;external mysqlvlib name 'mysql_stmt_reset';
-    function mysql_stmt_free_result(stmt:PMYSQL_STMT):my_bool;extdecl;external mysqlvlib name 'mysql_stmt_free_result';
-    function mysql_stmt_send_long_data(stmt:PMYSQL_STMT; param_number:cuint; data:Pchar; length:culong):my_bool;extdecl;external mysqlvlib name 'mysql_stmt_send_long_data';
-    function mysql_stmt_result_metadata(stmt:PMYSQL_STMT):PMYSQL_RES;extdecl;external mysqlvlib name 'mysql_stmt_result_metadata';
-    function mysql_stmt_param_metadata(stmt:PMYSQL_STMT):PMYSQL_RES;extdecl;external mysqlvlib name 'mysql_stmt_param_metadata';
-    function mysql_stmt_errno(stmt:PMYSQL_STMT):cuint;extdecl;external mysqlvlib name 'mysql_stmt_errno';
-    function mysql_stmt_error(stmt:PMYSQL_STMT):Pchar;extdecl;external mysqlvlib name 'mysql_stmt_error';
-    function mysql_stmt_sqlstate(stmt:PMYSQL_STMT):Pchar;extdecl;external mysqlvlib name 'mysql_stmt_sqlstate';
-    function mysql_stmt_row_seek(stmt:PMYSQL_STMT; offset:MYSQL_ROW_OFFSET):MYSQL_ROW_OFFSET;extdecl;external mysqlvlib name 'mysql_stmt_row_seek';
-    function mysql_stmt_row_tell(stmt:PMYSQL_STMT):MYSQL_ROW_OFFSET;extdecl;external mysqlvlib name 'mysql_stmt_row_tell';
-    procedure mysql_stmt_data_seek(stmt:PMYSQL_STMT; offset:my_ulonglong);extdecl;external mysqlvlib name 'mysql_stmt_data_seek';
-    function mysql_stmt_num_rows(stmt:PMYSQL_STMT):my_ulonglong;extdecl;external mysqlvlib name 'mysql_stmt_num_rows';
-    function mysql_stmt_affected_rows(stmt:PMYSQL_STMT):my_ulonglong;extdecl;external mysqlvlib name 'mysql_stmt_affected_rows';
-    function mysql_stmt_insert_id(stmt:PMYSQL_STMT):my_ulonglong;extdecl;external mysqlvlib name 'mysql_stmt_insert_id';
-    function mysql_stmt_field_count(stmt:PMYSQL_STMT):cuint;extdecl;external mysqlvlib name 'mysql_stmt_field_count';
-
-    function mysql_commit(mysql:PMYSQL):my_bool;extdecl;external mysqlvlib name 'mysql_commit';
-    function mysql_rollback(mysql:PMYSQL):my_bool;extdecl;external mysqlvlib name 'mysql_rollback';
-    function mysql_autocommit(mysql:PMYSQL; auto_mode:my_bool):my_bool;extdecl;external mysqlvlib name 'mysql_autocommit';
-    function mysql_more_results(mysql:PMYSQL):my_bool;extdecl;external mysqlvlib name 'mysql_more_results';
-    function mysql_next_result(mysql:PMYSQL):cint;extdecl;external mysqlvlib name 'mysql_next_result';
-    procedure mysql_close(sock:PMYSQL);extdecl;external mysqlvlib name 'mysql_close';
+               param:pointer; extend_buffer:function (_para1:pointer; to:Pchar; length:Pdword):Pchar):Pchar;extdecl;external mysqllib name 'mysql_odbc_escape_string';}
+    procedure myodbc_remove_escape(mysql:PMYSQL; name:Pchar);extdecl;external mysqllib name 'myodbc_remove_escape';
+    function mysql_thread_safe:cuint;extdecl;external mysqllib name 'mysql_thread_safe';
+    function mysql_embedded:my_bool;extdecl;external mysqllib name 'mysql_embedded';
+    function mysql_manager_init(con:PMYSQL_MANAGER):PMYSQL_MANAGER;extdecl;external mysqllib name 'mysql_manager_init';
+    function mysql_manager_connect(con:PMYSQL_MANAGER; host:Pchar; user:Pchar; passwd:Pchar; port:cuint):PMYSQL_MANAGER;extdecl;external mysqllib name 'mysql_manager_connect';
+    procedure mysql_manager_close(con:PMYSQL_MANAGER);extdecl;external mysqllib name 'mysql_manager_close';
+    function mysql_manager_command(con:PMYSQL_MANAGER; cmd:Pchar; cmd_len:cint):cint;extdecl;external mysqllib name 'mysql_manager_command';
+    function mysql_manager_fetch_line(con:PMYSQL_MANAGER; res_buf:Pchar; res_buf_size:cint):cint;extdecl;external mysqllib name 'mysql_manager_fetch_line';
+    function mysql_read_query_result(mysql:PMYSQL):my_bool;extdecl;external mysqllib name 'mysql_read_query_result';
+
+    function mysql_stmt_init(mysql:PMYSQL):PMYSQL_STMT;extdecl;external mysqllib name 'mysql_stmt_init';
+    function mysql_stmt_prepare(stmt:PMYSQL_STMT; query:Pchar; length:culong):cint;extdecl;external mysqllib name 'mysql_stmt_prepare';
+    function mysql_stmt_execute(stmt:PMYSQL_STMT):cint;extdecl;external mysqllib name 'mysql_stmt_execute';
+    function mysql_stmt_fetch(stmt:PMYSQL_STMT):cint;extdecl;external mysqllib name 'mysql_stmt_fetch';
+    function mysql_stmt_fetch_column(stmt:PMYSQL_STMT; bind:PMYSQL_BIND; column:cuint; offset:culong):cint;extdecl;external mysqllib name 'mysql_stmt_fetch_column';
+    function mysql_stmt_store_result(stmt:PMYSQL_STMT):cint;extdecl;external mysqllib name 'mysql_stmt_store_result';
+    function mysql_stmt_param_count(stmt:PMYSQL_STMT):culong;extdecl;external mysqllib name 'mysql_stmt_param_count';
+    function mysql_stmt_attr_set(stmt:PMYSQL_STMT; attr_type:enum_stmt_attr_type; attr:pointer):my_bool;extdecl;external mysqllib name 'mysql_stmt_attr_set';
+    function mysql_stmt_attr_get(stmt:PMYSQL_STMT; attr_type:enum_stmt_attr_type; attr:pointer):my_bool;extdecl;external mysqllib name 'mysql_stmt_attr_get';
+    function mysql_stmt_bind_param(stmt:PMYSQL_STMT; bnd:PMYSQL_BIND):my_bool;extdecl;external mysqllib name 'mysql_stmt_bind_param';
+    function mysql_stmt_bind_result(stmt:PMYSQL_STMT; bnd:PMYSQL_BIND):my_bool;extdecl;external mysqllib name 'mysql_stmt_bind_result';
+    function mysql_stmt_close(stmt:PMYSQL_STMT):my_bool;extdecl;external mysqllib name 'mysql_stmt_close';
+    function mysql_stmt_reset(stmt:PMYSQL_STMT):my_bool;extdecl;external mysqllib name 'mysql_stmt_reset';
+    function mysql_stmt_free_result(stmt:PMYSQL_STMT):my_bool;extdecl;external mysqllib name 'mysql_stmt_free_result';
+    function mysql_stmt_send_long_data(stmt:PMYSQL_STMT; param_number:cuint; data:Pchar; length:culong):my_bool;extdecl;external mysqllib name 'mysql_stmt_send_long_data';
+    function mysql_stmt_result_metadata(stmt:PMYSQL_STMT):PMYSQL_RES;extdecl;external mysqllib name 'mysql_stmt_result_metadata';
+    function mysql_stmt_param_metadata(stmt:PMYSQL_STMT):PMYSQL_RES;extdecl;external mysqllib name 'mysql_stmt_param_metadata';
+    function mysql_stmt_errno(stmt:PMYSQL_STMT):cuint;extdecl;external mysqllib name 'mysql_stmt_errno';
+    function mysql_stmt_error(stmt:PMYSQL_STMT):Pchar;extdecl;external mysqllib name 'mysql_stmt_error';
+    function mysql_stmt_sqlstate(stmt:PMYSQL_STMT):Pchar;extdecl;external mysqllib name 'mysql_stmt_sqlstate';
+    function mysql_stmt_row_seek(stmt:PMYSQL_STMT; offset:MYSQL_ROW_OFFSET):MYSQL_ROW_OFFSET;extdecl;external mysqllib name 'mysql_stmt_row_seek';
+    function mysql_stmt_row_tell(stmt:PMYSQL_STMT):MYSQL_ROW_OFFSET;extdecl;external mysqllib name 'mysql_stmt_row_tell';
+    procedure mysql_stmt_data_seek(stmt:PMYSQL_STMT; offset:my_ulonglong);extdecl;external mysqllib name 'mysql_stmt_data_seek';
+    function mysql_stmt_num_rows(stmt:PMYSQL_STMT):my_ulonglong;extdecl;external mysqllib name 'mysql_stmt_num_rows';
+    function mysql_stmt_affected_rows(stmt:PMYSQL_STMT):my_ulonglong;extdecl;external mysqllib name 'mysql_stmt_affected_rows';
+    function mysql_stmt_insert_id(stmt:PMYSQL_STMT):my_ulonglong;extdecl;external mysqllib name 'mysql_stmt_insert_id';
+    function mysql_stmt_field_count(stmt:PMYSQL_STMT):cuint;extdecl;external mysqllib name 'mysql_stmt_field_count';
+
+    function mysql_commit(mysql:PMYSQL):my_bool;extdecl;external mysqllib name 'mysql_commit';
+    function mysql_rollback(mysql:PMYSQL):my_bool;extdecl;external mysqllib name 'mysql_rollback';
+    function mysql_autocommit(mysql:PMYSQL; auto_mode:my_bool):my_bool;extdecl;external mysqllib name 'mysql_autocommit';
+    function mysql_more_results(mysql:PMYSQL):my_bool;extdecl;external mysqllib name 'mysql_more_results';
+    function mysql_next_result(mysql:PMYSQL):cint;extdecl;external mysqllib name 'mysql_next_result';
+    procedure mysql_close(sock:PMYSQL);extdecl;external mysqllib name 'mysql_close';
 
 
 {$ELSE}
 {$ELSE}
     var
     var
@@ -1532,7 +1531,7 @@ uses
 
 
     function mysql_reload(mysql : PMySQL) : cint;
     function mysql_reload(mysql : PMySQL) : cint;
 
 
-{$IFNDEF LOAD_DYNAMICALLY}
+{$IFNDEF LinkDynamically}
 {$ifdef USE_OLD_FUNCTIONS}
 {$ifdef USE_OLD_FUNCTIONS}
     function mysql_connect(mysql:PMYSQL; host:Pchar; user:Pchar; passwd:Pchar):PMYSQL;extdecl;external External_library name 'mysql_connect';
     function mysql_connect(mysql:PMYSQL; host:Pchar; user:Pchar; passwd:Pchar):PMYSQL;extdecl;external External_library name 'mysql_connect';
     function mysql_create_db(mysql:PMYSQL; DB:Pchar):cint;extdecl;external External_library name 'mysql_create_db';
     function mysql_create_db(mysql:PMYSQL; DB:Pchar):cint;extdecl;external External_library name 'mysql_create_db';
@@ -1541,262 +1540,260 @@ uses
 {$endif}
 {$endif}
 {$endif}
 {$endif}
 
 
-{$define HAVE_MYSQL_REAL_CONNECT}
+{$define HAVE_MYSQL_REAL_CONNECT}    
     { The following functions are mainly exported because of mysqlbinlog;
     { The following functions are mainly exported because of mysqlbinlog;
       They are not for general usage     }
       They are not for general usage     }
 
 
     function simple_command(mysql,command,arg,length,skip_check : cint) : cint;
     function simple_command(mysql,command,arg,length,skip_check : cint) : cint;
-{$IFNDEF LOAD_DYNAMICALLY}
-    function net_safe_read(mysql:PMYSQL):cuint;cdecl;external mysqlvlib name 'net_safe_read';
+{$IFNDEF LinkDynamically}
+    function net_safe_read(mysql:PMYSQL):cuint;cdecl;external mysqllib name 'net_safe_read';
 {$ENDIF}
 {$ENDIF}
 
 
 {$ifdef NETWARE}
 {$ifdef NETWARE}
 (** unsupported pragma#pragma pack(pop)		/* restore alignment */*)
 (** unsupported pragma#pragma pack(pop)		/* restore alignment */*)
 {$endif}
 {$endif}
 
 
-{$IFDEF LOAD_DYNAMICALLY}
-function InitializeMysql(const LibraryName: String = ''; argc: cint = -1; argv: PPchar = nil; groups: PPchar = nil): Integer;
-function TryInitializeMysql(const LibraryName: string = ''; argc: cint = -1; argv: PPchar = nil; groups: PPchar = nil): Integer;
-function ReleaseMysql: Integer;
+{$IFDEF LinkDynamically}
+Function InitialiseMysql(Const LibraryName : String; argc:cint = -1; argv:PPchar = nil; groups:PPchar = nil) : Integer;
+Function InitialiseMysql(argc:cint = -1; argv:PPchar = nil; groups:PPchar = nil) : Integer;
+Procedure ReleaseMysql;
 
 
-var
-  MysqlLibrary: TLibHandler;
-
-function InitialiseMysql(argc: cint = -1; argv: PPchar = nil; groups: PPchar = nil): Integer; deprecated;
-function InitialiseMysql(const LibraryName: String; argc: cint = -1; argv: PPchar = nil; groups: PPchar = nil): Integer; deprecated;
-function TryInitialiseMysql(const LibraryName: string; argc: cint = -1; argv: PPchar = nil; groups: PPchar = nil): Integer; deprecated;
+var MysqlLibraryHandle : TLibHandle;
 {$ENDIF}
 {$ENDIF}
 
 
 implementation
 implementation
 
 
+{$IFDEF LinkDynamically}
 
 
-function net_new_transaction(net : st_net) : st_net;
-begin
-  net.pkt_nr := 0;
-  result := net;
-end;
+ResourceString
+  SErrAlreadyLoaded  = 'MySQL interface already initialized from library %s.';
+  SErrLoadFailed     = 'Can not load MySQL library "%s". Please check your installation.';
+  SErrDefaultsFailed = 'Can not load default MySQL library ("%s" or "%s"). Check your installation.';
 
 
-function IS_PRI_KEY(n : longint) : boolean;
-begin
-  IS_PRI_KEY:=(n and PRI_KEY_FLAG)<>0;
-end;
+var 
+  RefCount : integer;
+  LoadedLibrary : String;
 
 
-function IS_NOT_NULL(n : longint) : boolean;
-begin
- IS_NOT_NULL:=(n and NOT_NULL_FLAG)<>0;
-end;
+Function TryInitialiseMysql(Const LibraryName: String; argc: cint; argv: PPchar; groups: PPchar) : Integer;
 
 
-function IS_BLOB(n : longint) : boolean;
 begin
 begin
- IS_BLOB:=(n and BLOB_FLAG)<>0;
-end;
+  Result := 0;
+  if (RefCount=0) then
+    begin
+    MysqlLibraryHandle := loadlibrary(LibraryName);
+    if (MysqlLibraryHandle=nilhandle) then
+      Exit;
+    Inc(RefCount);
+    LoadedLibrary:=LibraryName;
+// Only the procedure that are given in the c-library documentation are loaded, to
+// avoid problems with 'incomplete' libraries
+    pointer(my_init) := GetProcedureAddress(MysqlLibraryHandle,'my_init');
+    pointer(my_thread_init) := GetProcedureAddress(MysqlLibraryHandle,'my_thread_init');
+    pointer(my_thread_end) := GetProcedureAddress(MysqlLibraryHandle,'my_thread_end');
+
+    pointer(mysql_affected_rows) := GetProcedureAddress(MysqlLibraryHandle,'mysql_affected_rows');
+    pointer(mysql_autocommit) := GetProcedureAddress(MysqlLibraryHandle,'mysql_autocommit');
+    pointer(mysql_change_user) := GetProcedureAddress(MysqlLibraryHandle,'mysql_change_user');
+//    pointer(mysql_charset_name) := GetProcedureAddress(MysqlLibraryHandle,'mysql_charset_name');
+    pointer(mysql_close) := GetProcedureAddress(MysqlLibraryHandle,'mysql_close');
+    pointer(mysql_commit) := GetProcedureAddress(MysqlLibraryHandle,'mysql_commit');
+//    pointer(mysql_connect) := GetProcedureAddress(MysqlLibraryHandle,'mysql_connect');
+//    pointer(mysql_create_db) := GetProcedureAddress(MysqlLibraryHandle,'mysql_create_db');
+    pointer(mysql_data_seek) := GetProcedureAddress(MysqlLibraryHandle,'mysql_data_seek');
+//    pointer(mysql_drop_db) := GetProcedureAddress(MysqlLibraryHandle,'mysql_drop_db');
+    pointer(mysql_debug) := GetProcedureAddress(MysqlLibraryHandle,'mysql_debug');
+    pointer(mysql_dump_debug_info) := GetProcedureAddress(MysqlLibraryHandle,'mysql_dump_debug_info');
+    pointer(mysql_eof) := GetProcedureAddress(MysqlLibraryHandle,'mysql_eof');
+    pointer(mysql_errno) := GetProcedureAddress(MysqlLibraryHandle,'mysql_errno');
+    pointer(mysql_error) := GetProcedureAddress(MysqlLibraryHandle,'mysql_error');
+    pointer(mysql_escape_string) := GetProcedureAddress(MysqlLibraryHandle,'mysql_escape_string');
+    pointer(mysql_fetch_field) := GetProcedureAddress(MysqlLibraryHandle,'mysql_fetch_field');
+    pointer(mysql_fetch_field_direct) := GetProcedureAddress(MysqlLibraryHandle,'mysql_fetch_field_direct');
+    pointer(mysql_fetch_fields) := GetProcedureAddress(MysqlLibraryHandle,'mysql_fetch_fields');
+    pointer(mysql_fetch_lengths) := GetProcedureAddress(MysqlLibraryHandle,'mysql_fetch_lengths');
+    pointer(mysql_fetch_row) := GetProcedureAddress(MysqlLibraryHandle,'mysql_fetch_row');
+    pointer(mysql_field_seek) := GetProcedureAddress(MysqlLibraryHandle,'mysql_field_seek');
+    pointer(mysql_field_count) := GetProcedureAddress(MysqlLibraryHandle,'mysql_field_count');
+    pointer(mysql_field_tell) := GetProcedureAddress(MysqlLibraryHandle,'mysql_field_tell');
+    pointer(mysql_free_result) := GetProcedureAddress(MysqlLibraryHandle,'mysql_free_result');
+    pointer(mysql_get_client_info) := GetProcedureAddress(MysqlLibraryHandle,'mysql_get_client_info');
+    pointer(mysql_get_client_version) := GetProcedureAddress(MysqlLibraryHandle,'mysql_get_client_version');
+    pointer(mysql_get_host_info) := GetProcedureAddress(MysqlLibraryHandle,'mysql_get_host_info');
+    pointer(mysql_get_server_version) := GetProcedureAddress(MysqlLibraryHandle,'mysql_get_server_version');
+    pointer(mysql_get_proto_info) := GetProcedureAddress(MysqlLibraryHandle,'mysql_get_proto_info');
+    pointer(mysql_get_server_info) := GetProcedureAddress(MysqlLibraryHandle,'mysql_get_server_info');
+    pointer(mysql_info) := GetProcedureAddress(MysqlLibraryHandle,'mysql_info');
+    pointer(mysql_init) := GetProcedureAddress(MysqlLibraryHandle,'mysql_init');
+    pointer(mysql_insert_id) := GetProcedureAddress(MysqlLibraryHandle,'mysql_insert_id');
+    pointer(mysql_kill) := GetProcedureAddress(MysqlLibraryHandle,'mysql_kill');
+    pointer(mysql_library_end) := GetProcedureAddress(MysqlLibraryHandle,'mysql_server_end');
+    pointer(mysql_library_init) := GetProcedureAddress(MysqlLibraryHandle,'mysql_server_init');
+    pointer(mysql_list_dbs) := GetProcedureAddress(MysqlLibraryHandle,'mysql_list_dbs');
+    pointer(mysql_list_fields) := GetProcedureAddress(MysqlLibraryHandle,'mysql_list_fields');
+    pointer(mysql_list_processes) := GetProcedureAddress(MysqlLibraryHandle,'mysql_list_processes');
+    pointer(mysql_list_tables) := GetProcedureAddress(MysqlLibraryHandle,'mysql_list_tables');
+    pointer(mysql_more_results) := GetProcedureAddress(MysqlLibraryHandle,'mysql_more_results');
+    pointer(mysql_next_result) := GetProcedureAddress(MysqlLibraryHandle,'mysql_next_result');
+    pointer(mysql_num_fields) := GetProcedureAddress(MysqlLibraryHandle,'mysql_num_fields');
+    pointer(mysql_num_rows) := GetProcedureAddress(MysqlLibraryHandle,'mysql_num_rows');
+    pointer(mysql_options) := GetProcedureAddress(MysqlLibraryHandle,'mysql_options');
+    pointer(mysql_ping) := GetProcedureAddress(MysqlLibraryHandle,'mysql_ping');
+    pointer(mysql_query) := GetProcedureAddress(MysqlLibraryHandle,'mysql_query');
+    pointer(mysql_real_connect) := GetProcedureAddress(MysqlLibraryHandle,'mysql_real_connect');
+    pointer(mysql_real_escape_string) := GetProcedureAddress(MysqlLibraryHandle,'mysql_real_escape_string');
+    pointer(mysql_real_query) := GetProcedureAddress(MysqlLibraryHandle,'mysql_real_query');
+    pointer(mysql_refresh) := GetProcedureAddress(MysqlLibraryHandle,'mysql_refresh');
+//    pointer(mysql_reload) := GetProcedureAddress(MysqlLibraryHandle,'mysql_reload');
+    pointer(mysql_rollback) := GetProcedureAddress(MysqlLibraryHandle,'mysql_rollback');
+    pointer(mysql_row_seek) := GetProcedureAddress(MysqlLibraryHandle,'mysql_row_seek');
+    pointer(mysql_row_tell) := GetProcedureAddress(MysqlLibraryHandle,'mysql_row_tell');
+    pointer(mysql_select_db) := GetProcedureAddress(MysqlLibraryHandle,'mysql_select_db');
+    pointer(mysql_server_end) := GetProcedureAddress(MysqlLibraryHandle,'mysql_server_end');
+    pointer(mysql_server_init) := GetProcedureAddress(MysqlLibraryHandle,'mysql_server_init');
+    pointer(mysql_set_server_option) := GetProcedureAddress(MysqlLibraryHandle,'mysql_set_server_option');
+    pointer(mysql_sqlstate) := GetProcedureAddress(MysqlLibraryHandle,'mysql_sqlstate');
+    pointer(mysql_shutdown) := GetProcedureAddress(MysqlLibraryHandle,'mysql_shutdown');
+    pointer(mysql_stat) := GetProcedureAddress(MysqlLibraryHandle,'mysql_stat');
+    pointer(mysql_store_result) := GetProcedureAddress(MysqlLibraryHandle,'mysql_store_result');
+    pointer(mysql_thread_id) := GetProcedureAddress(MysqlLibraryHandle,'mysql_thread_id');
+//    pointer(mysql_thread_save) := GetProcedureAddress(MysqlLibraryHandle,'mysql_thread_save');
+    pointer(mysql_use_result) := GetProcedureAddress(MysqlLibraryHandle,'mysql_use_result');
+    pointer(mysql_warning_count) := GetProcedureAddress(MysqlLibraryHandle,'mysql_warning_count');
+    pointer(mysql_stmt_init) := GetProcedureAddress(MysqlLibraryHandle,'mysql_stmt_init');
+    pointer(mysql_stmt_prepare) := GetProcedureAddress(MysqlLibraryHandle,'mysql_stmt_prepare');
+    pointer(mysql_stmt_execute) := GetProcedureAddress(MysqlLibraryHandle,'mysql_stmt_execute');
+    pointer(mysql_stmt_fetch) := GetProcedureAddress(MysqlLibraryHandle,'mysql_stmt_fetch');
+    pointer(mysql_stmt_fetch_column) := GetProcedureAddress(MysqlLibraryHandle,'mysql_stmt_fetch_column');
+    pointer(mysql_stmt_store_result) := GetProcedureAddress(MysqlLibraryHandle,'mysql_stmt_store_result');
+    pointer(mysql_stmt_param_count) := GetProcedureAddress(MysqlLibraryHandle,'mysql_stmt_param_count');
+    pointer(mysql_stmt_attr_set) := GetProcedureAddress(MysqlLibraryHandle,'mysql_stmt_attr_set');
+    pointer(mysql_stmt_attr_get) := GetProcedureAddress(MysqlLibraryHandle,'mysql_stmt_attr_get');
+    pointer(mysql_stmt_bind_param) := GetProcedureAddress(MysqlLibraryHandle,'mysql_stmt_bind_param');
+    pointer(mysql_stmt_bind_result) := GetProcedureAddress(MysqlLibraryHandle,'mysql_stmt_bind_result');
+    pointer(mysql_stmt_close) := GetProcedureAddress(MysqlLibraryHandle,'mysql_stmt_close');
+    pointer(mysql_stmt_reset) := GetProcedureAddress(MysqlLibraryHandle,'mysql_stmt_reset');
+    pointer(mysql_stmt_free_result) := GetProcedureAddress(MysqlLibraryHandle,'mysql_stmt_free_result');
+    pointer(mysql_stmt_send_long_data) := GetProcedureAddress(MysqlLibraryHandle,'mysql_stmt_send_long_data');
+    pointer(mysql_stmt_result_metadata) := GetProcedureAddress(MysqlLibraryHandle,'mysql_stmt_result_metadata');
+    pointer(mysql_stmt_param_metadata) := GetProcedureAddress(MysqlLibraryHandle,'mysql_stmt_param_metadata');
+    pointer(mysql_stmt_errno) := GetProcedureAddress(MysqlLibraryHandle,'mysql_stmt_errno');
+    pointer(mysql_stmt_error) := GetProcedureAddress(MysqlLibraryHandle,'mysql_stmt_error');
+    pointer(mysql_stmt_sqlstate) := GetProcedureAddress(MysqlLibraryHandle,'mysql_stmt_sqlstate');
+    pointer(mysql_stmt_row_seek) := GetProcedureAddress(MysqlLibraryHandle,'mysql_stmt_row_seek');
+    pointer(mysql_stmt_row_tell) := GetProcedureAddress(MysqlLibraryHandle,'mysql_stmt_row_tell');
+    pointer(mysql_stmt_data_seek) := GetProcedureAddress(MysqlLibraryHandle,'mysql_stmt_data_seek');
+    pointer(mysql_stmt_num_rows) := GetProcedureAddress(MysqlLibraryHandle,'mysql_stmt_num_rows');
+    pointer(mysql_stmt_affected_rows) := GetProcedureAddress(MysqlLibraryHandle,'mysql_stmt_affected_rows');
+    pointer(mysql_stmt_insert_id) := GetProcedureAddress(MysqlLibraryHandle,'mysql_stmt_insert_id');
+    pointer(mysql_stmt_field_count) := GetProcedureAddress(MysqlLibraryHandle,'mysql_stmt_field_count');
+
+    if mysql_library_init(argc, argv, groups) <> 0 then
+      Exit;
+    end
+  else
+    inc(RefCount);
 
 
-function IS_NUM_FIELD(f : pst_mysql_field) : boolean;
-begin
-   IS_NUM_FIELD:=((f^.flags) and NUM_FLAG)<>0;
+  Result:=RefCount;
 end;
 end;
 
 
-function IS_NUM(t : enum_field_types) : boolean;
-begin
-{$IF DEFINED(mysql50) or DEFINED(mysql51)}
-  IS_NUM := (t <= FIELD_TYPE_INT24) or (t=FIELD_TYPE_YEAR) or (t=FIELD_TYPE_NEWDECIMAL);
-{$ELSE}
-  IS_NUM := (t <= FIELD_TYPE_INT24) or (t=FIELD_TYPE_YEAR);
-{$ENDIF}
-end;
 
 
-function INTERNAL_NUM_FIELD(f : Pst_mysql_field) : boolean;
-begin
-  INTERNAL_NUM_FIELD := (f^.ftype <= FIELD_TYPE_INT24) and ((f^.ftype <> FIELD_TYPE_TIMESTAMP)
-  or (f^.length = 14) or (f^.length=8)) or (f^.ftype=FIELD_TYPE_YEAR);
-end;
 
 
-function mysql_reload(mysql : PMySQL) : cint;
-begin
-  mysql_reload:=mysql_refresh(mysql,REFRESH_GRANT);
-end;
+Function InitialiseMysql(argc: cint; argv: PPchar; groups: PPchar) : Integer;
 
 
-function simple_command(mysql,command,arg,length,skip_check : longint) : longint;
 begin
 begin
-  //simple_command:=mysql^.(methods^.advanced_command)(mysqlcommandNullS0arglengthskip_check);
-  result := -1;
+  Result := 0;
+  If (TryInitialiseMysql(mysqlvlib,argc,argv,groups) = 0) and
+     (TryInitialiseMysql(mysqllib,argc,argv,groups) = 0) then
+      Raise EInOutError.CreateFmt(SErrDefaultsFailed,[mysqlvlib,mysqllib]);
+  Result := RefCount;
 end;
 end;
 
 
+Function InitialiseMysql(Const LibraryName: String; argc: cint; argv: PPchar; groups:PPchar) : Integer;
 
 
-{$IFDEF LOAD_DYNAMICALLY}
-const
-  mysql_symbols: array[0..91] of TLibSymbol = (
-  // Only the procedure that are given in the c-library documentation are loaded, to
-  // avoid problems with 'incomplete' libraries
-    (pvar:@my_init; name:'my_init'; weak:true),
-    (pvar:@my_thread_init; name:'my_thread_init'; weak:true),
-    (pvar:@my_thread_end; name:'my_thread_end'; weak:true),
-
-    (pvar:@mysql_affected_rows; name:'mysql_affected_rows'; weak:false),
-    (pvar:@mysql_autocommit; name:'mysql_autocommit'; weak:false),
-    (pvar:@mysql_change_user; name:'mysql_change_user'; weak:false),
-  //    (pvar:@mysql_charset_name; name:'mysql_charset_name'; weak:false),
-    (pvar:@mysql_close; name:'mysql_close'; weak:false),
-    (pvar:@mysql_commit; name:'mysql_commit'; weak:false),
-  //    (pvar:@mysql_connect; name:'mysql_connect'; weak:false),
-  //    (pvar:@mysql_create_db; name:'mysql_create_db'; weak:false),
-    (pvar:@mysql_data_seek; name:'mysql_data_seek'; weak:false),
-  //    (pvar:@mysql_drop_db; name:'mysql_drop_db'; weak:false),
-    (pvar:@mysql_debug; name:'mysql_debug'; weak:false),
-    (pvar:@mysql_dump_debug_info; name:'mysql_dump_debug_info'; weak:false),
-    (pvar:@mysql_eof; name:'mysql_eof'; weak:false),
-    (pvar:@mysql_errno; name:'mysql_errno'; weak:false),
-    (pvar:@mysql_error; name:'mysql_error'; weak:false),
-    (pvar:@mysql_escape_string; name:'mysql_escape_string'; weak:false),
-    (pvar:@mysql_fetch_field; name:'mysql_fetch_field'; weak:false),
-    (pvar:@mysql_fetch_field_direct; name:'mysql_fetch_field_direct'; weak:false),
-    (pvar:@mysql_fetch_fields; name:'mysql_fetch_fields'; weak:false),
-    (pvar:@mysql_fetch_lengths; name:'mysql_fetch_lengths'; weak:false),
-    (pvar:@mysql_fetch_row; name:'mysql_fetch_row'; weak:false),
-    (pvar:@mysql_field_seek; name:'mysql_field_seek'; weak:false),
-    (pvar:@mysql_field_count; name:'mysql_field_count'; weak:false),
-    (pvar:@mysql_field_tell; name:'mysql_field_tell'; weak:false),
-    (pvar:@mysql_free_result; name:'mysql_free_result'; weak:false),
-    (pvar:@mysql_get_client_info; name:'mysql_get_client_info'; weak:false),
-    (pvar:@mysql_get_client_version; name:'mysql_get_client_version'; weak:false),
-    (pvar:@mysql_get_host_info; name:'mysql_get_host_info'; weak:false),
-    (pvar:@mysql_get_server_version; name:'mysql_get_server_version'; weak:false),
-    (pvar:@mysql_get_proto_info; name:'mysql_get_proto_info'; weak:false),
-    (pvar:@mysql_get_server_info; name:'mysql_get_server_info'; weak:false),
-    (pvar:@mysql_info; name:'mysql_info'; weak:false),
-    (pvar:@mysql_init; name:'mysql_init'; weak:false),
-    (pvar:@mysql_insert_id; name:'mysql_insert_id'; weak:false),
-    (pvar:@mysql_kill; name:'mysql_kill'; weak:false),
-    (pvar:@mysql_library_end; name:'mysql_server_end'; weak:false),
-    (pvar:@mysql_library_init; name:'mysql_server_init'; weak:false),
-    (pvar:@mysql_list_dbs; name:'mysql_list_dbs'; weak:false),
-    (pvar:@mysql_list_fields; name:'mysql_list_fields'; weak:false),
-    (pvar:@mysql_list_processes; name:'mysql_list_processes'; weak:false),
-    (pvar:@mysql_list_tables; name:'mysql_list_tables'; weak:false),
-    (pvar:@mysql_more_results; name:'mysql_more_results'; weak:false),
-    (pvar:@mysql_next_result; name:'mysql_next_result'; weak:false),
-    (pvar:@mysql_num_fields; name:'mysql_num_fields'; weak:false),
-    (pvar:@mysql_num_rows; name:'mysql_num_rows'; weak:false),
-    (pvar:@mysql_options; name:'mysql_options'; weak:false),
-    (pvar:@mysql_ping; name:'mysql_ping'; weak:false),
-    (pvar:@mysql_query; name:'mysql_query'; weak:false),
-    (pvar:@mysql_real_connect; name:'mysql_real_connect'; weak:false),
-    (pvar:@mysql_real_escape_string; name:'mysql_real_escape_string'; weak:false),
-    (pvar:@mysql_real_query; name:'mysql_real_query'; weak:false),
-    (pvar:@mysql_refresh; name:'mysql_refresh'; weak:false),
-  //    (pvar:@mysql_reload; name:'mysql_reload'; weak:false),
-    (pvar:@mysql_rollback; name:'mysql_rollback'; weak:false),
-    (pvar:@mysql_row_seek; name:'mysql_row_seek'; weak:false),
-    (pvar:@mysql_row_tell; name:'mysql_row_tell'; weak:false),
-    (pvar:@mysql_select_db; name:'mysql_select_db'; weak:false),
-    (pvar:@mysql_server_end; name:'mysql_server_end'; weak:false),
-    (pvar:@mysql_server_init; name:'mysql_server_init'; weak:false),
-    (pvar:@mysql_set_server_option; name:'mysql_set_server_option'; weak:false),
-    (pvar:@mysql_sqlstate; name:'mysql_sqlstate'; weak:false),
-    (pvar:@mysql_shutdown; name:'mysql_shutdown'; weak:false),
-    (pvar:@mysql_stat; name:'mysql_stat'; weak:false),
-    (pvar:@mysql_store_result; name:'mysql_store_result'; weak:false),
-    (pvar:@mysql_thread_id; name:'mysql_thread_id'; weak:false),
-  //    (pvar:@mysql_thread_save; name:'mysql_thread_save'; weak:false),
-    (pvar:@mysql_use_result; name:'mysql_use_result'; weak:false),
-    (pvar:@mysql_warning_count; name:'mysql_warning_count'; weak:false),
-    (pvar:@mysql_stmt_init; name:'mysql_stmt_init'; weak:false),
-    (pvar:@mysql_stmt_prepare; name:'mysql_stmt_prepare'; weak:false),
-    (pvar:@mysql_stmt_execute; name:'mysql_stmt_execute'; weak:false),
-    (pvar:@mysql_stmt_fetch; name:'mysql_stmt_fetch'; weak:false),
-    (pvar:@mysql_stmt_fetch_column; name:'mysql_stmt_fetch_column'; weak:false),
-    (pvar:@mysql_stmt_store_result; name:'mysql_stmt_store_result'; weak:false),
-    (pvar:@mysql_stmt_param_count; name:'mysql_stmt_param_count'; weak:false),
-    (pvar:@mysql_stmt_attr_set; name:'mysql_stmt_attr_set'; weak:false),
-    (pvar:@mysql_stmt_attr_get; name:'mysql_stmt_attr_get'; weak:false),
-    (pvar:@mysql_stmt_bind_param; name:'mysql_stmt_bind_param'; weak:false),
-    (pvar:@mysql_stmt_bind_result; name:'mysql_stmt_bind_result'; weak:false),
-    (pvar:@mysql_stmt_close; name:'mysql_stmt_close'; weak:false),
-    (pvar:@mysql_stmt_reset; name:'mysql_stmt_reset'; weak:false),
-    (pvar:@mysql_stmt_free_result; name:'mysql_stmt_free_result'; weak:false),
-    (pvar:@mysql_stmt_send_long_data; name:'mysql_stmt_send_long_data'; weak:false),
-    (pvar:@mysql_stmt_result_metadata; name:'mysql_stmt_result_metadata'; weak:false),
-    (pvar:@mysql_stmt_param_metadata; name:'mysql_stmt_param_metadata'; weak:false),
-    (pvar:@mysql_stmt_errno; name:'mysql_stmt_errno'; weak:false),
-    (pvar:@mysql_stmt_error; name:'mysql_stmt_error'; weak:false),
-    (pvar:@mysql_stmt_sqlstate; name:'mysql_stmt_sqlstate'; weak:false),
-    (pvar:@mysql_stmt_row_seek; name:'mysql_stmt_row_seek'; weak:false),
-    (pvar:@mysql_stmt_row_tell; name:'mysql_stmt_row_tell'; weak:false),
-    (pvar:@mysql_stmt_data_seek; name:'mysql_stmt_data_seek'; weak:false),
-    (pvar:@mysql_stmt_num_rows; name:'mysql_stmt_num_rows'; weak:false),
-    (pvar:@mysql_stmt_affected_rows; name:'mysql_stmt_affected_rows'; weak:false),
-    (pvar:@mysql_stmt_insert_id; name:'mysql_stmt_insert_id'; weak:false),
-    (pvar:@mysql_stmt_field_count; name:'mysql_stmt_field_count'; weak:false)
-  );
-
-type
-  PMysqlArgs = ^TMysqlArgs;
-  TMysqlArgs = record
-    argc: cint;
-    argv: PPchar;
-    groups: PPchar;
-  end;
-
-function mysql_initialize(User: Pointer; Handler: PLibHandler): Boolean;
-var
-  args: PMysqlArgs absolute User;
 begin
 begin
-  if Assigned(args) then
-    Result := mysql_library_init(args^.argc, args^.argv, args^.groups) = 0
-  else
-    Result := mysql_library_init(0, nil, nil) = 0;
-
-  if not Result then
-    AppendLibraryError(Handler^, 'mysql_library_init failed');
+  Result := TryInitialiseMysql(LibraryName,argc,argv,groups);
+  If Result = 0 then
+    Raise EInOutError.CreateFmt(SErrLoadFailed,[LibraryName])
+  else If (LibraryName<>LoadedLibrary) then
+    begin
+    Dec(RefCount);
+    Result := RefCount;
+    Raise EInOUtError.CreateFmt(SErrAlreadyLoaded,[LoadedLibrary]);
+    end;
 end;
 end;
 
 
-procedure mysql_finalize(Handler: PLibHandler);
-begin
-  mysql_library_end();
-end;
+Procedure ReleaseMysql;
 
 
-function TryInitializeMysql(Const LibraryName: String; argc: cint; argv: PPchar; groups: PPchar): Integer;
-var
-  args: TMysqlArgs;
 begin
 begin
-  args.argc := argc;
-  args.argv := argv;
-  args.groups := groups;
-  Result := TryInitializeLibrary(MysqlLibrary, LibraryName, @args);
+  if RefCount> 1 then
+    Dec(RefCount)
+  else if RefCount = 1 then
+    begin
+    mysql_library_end;
+    if UnloadLibrary(MysqlLibraryHandle) then
+      begin
+      Dec(RefCount);
+      MysqlLibraryHandle := NilHandle;
+      LoadedLibrary:='';
+      end
+    end
 end;
 end;
 
 
-function InitializeMysql(const LibraryName: String; argc: cint; argv: PPchar; groups: PPchar): Integer;
-var
-  args: TMysqlArgs;
-begin
-  args.argc := argc;
-  args.argv := argv;
-  args.groups := groups;
-  Result := InitializeLibrary(MysqlLibrary, LibraryName, @args);
-end;
+{$ENDIF}
+    function net_new_transaction(net : st_net) : st_net;
+    begin
+      net.pkt_nr := 0;
+      result := net;
+    end;
 
 
-function ReleaseMysql: Integer;
-begin
-  Result := ReleaseLibrary(MysqlLibrary);
-end;
+    function IS_PRI_KEY(n : longint) : boolean;
+    begin
+      IS_PRI_KEY:=(n and PRI_KEY_FLAG)<>0;
+    end;
 
 
-function InitialiseMysql(argc: cint; argv: PPchar; groups: PPchar): Integer;
-begin
-  Result := InitializeMysql('', argc, argv, groups);
-end;
+    function IS_NOT_NULL(n : longint) : boolean;
+    begin
+     IS_NOT_NULL:=(n and NOT_NULL_FLAG)<>0;
+    end;
 
 
-function InitialiseMysql(const LibraryName: String; argc: cint; argv: PPchar; groups: PPchar): Integer;
-begin
-  Result := InitializeMysql(LibraryName, argc, argv, groups);
-end;
+    function IS_BLOB(n : longint) : boolean;
+    begin
+     IS_BLOB:=(n and BLOB_FLAG)<>0;
+    end;
 
 
-function TryInitialiseMysql(const LibraryName: string; argc: cint; argv: PPchar; groups: PPchar): Integer;
-begin
-  Result := TryInitializeMysql(LibraryName, argc, argv, groups);
-end;
+    function IS_NUM_FIELD(f : pst_mysql_field) : boolean;
+    begin
+       IS_NUM_FIELD:=((f^.flags) and NUM_FLAG)<>0;
+    end;
 
 
-initialization
-  MysqlLibrary := LibraryHandler('mysql', [mysqllib,mysqlvlib], @mysql_symbols, Length(mysql_symbols), @mysql_initialize, @mysql_finalize);
+    function IS_NUM(t : enum_field_types) : boolean;
+    begin
+{$IF DEFINED(mysql50) or DEFINED(mysql51)}
+      IS_NUM := (t <= FIELD_TYPE_INT24) or (t=FIELD_TYPE_YEAR) or (t=FIELD_TYPE_NEWDECIMAL);
+{$ELSE}
+      IS_NUM := (t <= FIELD_TYPE_INT24) or (t=FIELD_TYPE_YEAR);
 {$ENDIF}
 {$ENDIF}
+    end;
 
 
+    function INTERNAL_NUM_FIELD(f : Pst_mysql_field) : boolean;
+    begin
+      INTERNAL_NUM_FIELD := (f^.ftype <= FIELD_TYPE_INT24) and ((f^.ftype <> FIELD_TYPE_TIMESTAMP)
+      or (f^.length = 14) or (f^.length=8)) or (f^.ftype=FIELD_TYPE_YEAR);
+    end;
+
+    function mysql_reload(mysql : PMySQL) : cint;
+    begin
+      mysql_reload:=mysql_refresh(mysql,REFRESH_GRANT);
+    end;
+
+    function simple_command(mysql,command,arg,length,skip_check : longint) : longint;
+    begin
+      //simple_command:=mysql^.(methods^.advanced_command)(mysqlcommandNullS0arglengthskip_check);
+      result := -1;
+    end;
+
+{$IFDEF LinkDynamically}
+initialization
+  Refcount := 0;
+{$ENDIF}
 end.
 end.

+ 1 - 1
packages/mysql/src/mysql40dyn.pp

@@ -4,7 +4,7 @@
 
 
 unit mysql40dyn;
 unit mysql40dyn;
 
 
-{$DEFINE LOAD_DYNAMICALLY}
+{$DEFINE LinkDynamically}
 {$UNDEF MYSQL41}
 {$UNDEF MYSQL41}
 
 
 {$i mysql.inc}
 {$i mysql.inc}

+ 1 - 1
packages/mysql/src/mysql41dyn.pp

@@ -4,7 +4,7 @@
 
 
 unit mysql41dyn;
 unit mysql41dyn;
 
 
-{$DEFINE LOAD_DYNAMICALLY}
+{$DEFINE LinkDynamically}
 {$DEFINE MYSQL41}
 {$DEFINE MYSQL41}
 
 
 {$i mysql.inc}
 {$i mysql.inc}

+ 1 - 1
packages/mysql/src/mysql4_comtypes.inc

@@ -8,7 +8,7 @@ type
     My_socket = longint;
     My_socket = longint;
     my_bool = byte;
     my_bool = byte;
     gptr = Pointer;
     gptr = Pointer;
-    pppchar = ^ppchar;
+
   {
   {
      Common definition between mysql server & client
      Common definition between mysql server & client
    }
    }

+ 1 - 1
packages/mysql/src/mysql50dyn.pp

@@ -4,7 +4,7 @@
 
 
 unit mysql50dyn;
 unit mysql50dyn;
 
 
-{$DEFINE LOAD_DYNAMICALLY}
+{$DEFINE LinkDynamically}
 {$DEFINE MYSQL50}
 {$DEFINE MYSQL50}
 
 
 {$i mysql.inc}
 {$i mysql.inc}

File diff suppressed because it is too large
+ 161 - 158
packages/sqlite/src/sqlite3.inc


+ 50 - 20
packages/zorba/src/zorba.inc

@@ -21,7 +21,7 @@
 interface
 interface
 
 
 uses
 uses
-  ctypes, dynlibs, xqc;
+  Sysutils,ctypes, dynlibs, xqc;
 
 
 {$IFDEF UNIX}
 {$IFDEF UNIX}
   {$DEFINE extdecl:=cdecl}
   {$DEFINE extdecl:=cdecl}
@@ -74,40 +74,70 @@ function TryInitializeZorba(const LibraryName: string = ''): Integer;
 function ReleaseZorba: Integer;
 function ReleaseZorba: Integer;
 
 
 var
 var
-  ZorbaLibrary: TLibHandler;
+  ZorbaLibraryHandle: TLibHandle;
 {$ENDIF LOAD_DYNAMICALLY}
 {$ENDIF LOAD_DYNAMICALLY}
 
 
 implementation
 implementation
 
 
 {$IFDEF LOAD_DYNAMICALLY}
 {$IFDEF LOAD_DYNAMICALLY}
-const
-  zorba_symbols: array[0..6] of TLibSymbol = (
-    (pvar:@create_simple_store; name:'create_simple_store'; weak:false),
-    (pvar:@shutdown_simple_store; name:'shutdown_simple_store'; weak:false),
-    (pvar:@zorba_implementation; name:'zorba_implementation'; weak:false),
-    (pvar:@Zorba_CompilerHints_default; name:'Zorba_CompilerHints_default'; weak:false),
-    (pvar:@Zorba_SerializerOptions_default; name:'Zorba_SerializerOptions_default'; weak:false),
-    (pvar:@Zorba_SerializerOptions_free; name:'Zorba_SerializerOptions_free'; weak:false),
-    (pvar:@Zorba_SerializerOptions_set; name:'Zorba_SerializerOptions_set'; weak:false)
-  );
-
-function TryInitializeZorba(const LibraryName: string): Integer;
+
+ResourceString
+  SErrDefaultsFailed = 'Can not load default Zorba clients ("%s" or "%s"). Check your installation.';
+  SErrLoadFailed     = 'Can not load Zorba client library "%s". Check your installation.';
+  SErrAlreadyLoaded  = 'Zorba interface already initialized from library %s.';
+
+var
+  RefCount : integer;
+  LoadedLibrary : String;
+
+Function TryInitializeZorba(Const LibraryName : String) : integer;
+
 begin
 begin
-  Result := TryInitializeLibrary(ZorbaLibrary, LibraryName);
+  Result := 0;
+  if (RefCount=0) then
+    begin
+    ZorbaLibraryHandle:=LoadLibrary(LibraryName);
+    if (ZorbaLibraryHandle=nilhandle) then
+      Exit;
+    inc(RefCount);
+    LoadedLibrary:=LibraryName;    
+    pointer(create_simple_store)   :=GetProcedureAddress(ZorbaLibraryHandle,'create_simple_store');
+    pointer(shutdown_simple_store) :=GetProcedureAddress(ZorbaLibraryHandle,'shutdown_simple_store');
+    pointer(zorba_implementation)  :=GetProcedureAddress(ZorbaLibraryHandle,'zorba_implementation');
+    pointer(Zorba_CompilerHints_default)    :=GetProcedureAddress(ZorbaLibraryHandle,'Zorba_CompilerHints_default');
+    pointer(Zorba_SerializerOptions_default):=GetProcedureAddress(ZorbaLibraryHandle,'Zorba_SerializerOptions_default');
+    pointer(Zorba_SerializerOptions_free)   :=GetProcedureAddress(ZorbaLibraryHandle,'Zorba_SerializerOptions_free');
+    pointer(Zorba_SerializerOptions_set)    :=GetProcedureAddress(ZorbaLibraryHandle,'Zorba_SerializerOptions_set');
+   end
+  else
+    inc(RefCount);
+  Result := RefCount;
 end;
 end;
 
 
 function InitializeZorba(const LibraryName: String): Integer;
 function InitializeZorba(const LibraryName: String): Integer;
 begin
 begin
-  Result := InitializeLibrary(ZorbaLibrary, LibraryName);
+  Result := TryInitializeZorba( LibraryName);
+  If Result = 0 then
+    Raise EInOutError.CreateFmt(SErrLoadFailed,[LibraryName])
+  else If (LibraryName<>LoadedLibrary) then
+    begin
+      Dec(RefCount);
+      Result := RefCount;
+      Raise EInOUtError.CreateFmt(SErrAlreadyLoaded,[LoadedLibrary]);
+    end;
 end;
 end;
 
 
 function ReleaseZorba: Integer;
 function ReleaseZorba: Integer;
 begin
 begin
-  Result := ReleaseLibrary(ZorbaLibrary);
+ if RefCount>1 then
+    Dec(RefCount)
+  else if UnloadLibrary(ZorbaLibraryHandle) then
+    begin
+      Dec(RefCount);
+      ZorbaLibraryHandle := NilHandle;
+      LoadedLibrary:='';
+    end;
 end;
 end;
 
 
-initialization
-  ZorbaLibrary := LibraryHandler('zorba', [zorbalib,zorbavlib], @zorba_symbols, Length(zorba_symbols));
 {$ENDIF}
 {$ENDIF}
-
 end.
 end.

+ 3 - 306
rtl/inc/dynlibs.pas

@@ -20,9 +20,6 @@ unit dynlibs;
 
 
 interface
 interface
 
 
-uses
-  SysUtils, RtlConsts, SysConst;
-
 { ---------------------------------------------------------------------
 { ---------------------------------------------------------------------
   Read OS-dependent interface declarations.
   Read OS-dependent interface declarations.
   ---------------------------------------------------------------------}
   ---------------------------------------------------------------------}
@@ -41,86 +38,13 @@ Function LoadLibrary(const Name : AnsiString) : TLibHandle;
 Function GetProcedureAddress(Lib : TlibHandle; const ProcName : AnsiString) : Pointer;
 Function GetProcedureAddress(Lib : TlibHandle; const ProcName : AnsiString) : Pointer;
 Function UnloadLibrary(Lib : TLibHandle) : Boolean;
 Function UnloadLibrary(Lib : TLibHandle) : Boolean;
 
 
-
 // Kylix/Delphi compability
 // Kylix/Delphi compability
 
 
-Type
-  HModule = TLibHandle;
-
 Function FreeLibrary(Lib : TLibHandle) : Boolean;
 Function FreeLibrary(Lib : TLibHandle) : Boolean;
 Function GetProcAddress(Lib : TlibHandle; const ProcName : AnsiString) : Pointer;
 Function GetProcAddress(Lib : TlibHandle; const ProcName : AnsiString) : Pointer;
 
 
-
-// Dynamic Library Manager
-
-{ Note: If you look for some code that uses this library handler, take a look at
-    sqlite3.inc of sqlite package (simple) or
-    mysql.inc of mysql package (advanced)
-}
-
-type
-  PLibHandler = ^TLibHandler;
-
-  TLibEventLoading = function(User: Pointer; Handler: PLibHandler): Boolean;
-  TLibEventUnloading = procedure(Handler: PLibHandler);
-
-  TLibIdent = QWord;
-  TLibIdentGetter = function(const Filename: String): TLibIdent;
-
-  PPLibSymbol = ^PLibSymbol;
-  PLibSymbol = ^TLibSymbol;
-  TLibSymbol = record
-    pvar: PPointer;  { pointer to Symbol variable }
-    name: String;    { name of the Symbol }
-    weak: Boolean;   { weak }
-  end;
-
-  PLibSymbolPtrArray = ^TLibSymbolPtrArray;
-  TLibSymbolPtrArray = array of PLibSymbol;
-
-  TLibHandler = record
-    InterfaceName: String;                { abstract name of the library }
-    Defaults     : array of String;       { list of default library filenames }
-    Filename     : String;                { filename of the current loaded library }
-    Handle       : TLibHandle;            { handle of the current loaded library }
-    Loading      : TLibEventLoading;      { loading event, called after the unit is loaded }
-    Unloading    : TLibEventUnloading;    { unloading event, called before the unit is unloaded }
-    IdentGetter  : TLibIdentGetter;       { identifier getter event }
-    Ident        : TLibIdent;             { identifier of the current loaded library }
-    SymCount     : Integer;               { number of symbols }
-    Symbols      : PLibSymbol;            { symbol address- and namelist }
-    ErrorMsg     : String;                { last error message }
-    RefCount     : Integer;               { reference counter }
-  end;
-
-
-{ handler definition }
-function LibraryHandler(const InterfaceName: String; const DefaultLibraries: array of String;
-  const Symbols: PLibSymbol; const SymCount: Integer; const AfterLoading: TLibEventLoading = nil;
-  const BeforeUnloading: TLibEventUnloading = nil; const IdentGetter: TLibIdentGetter = nil): TLibHandler;
-
-{ initialization/finalization }
-function TryInitializeLibrary(var Handler: TLibHandler; const LibraryNames: array of String;
-  const User: Pointer = nil; const NoSymbolErrors: Boolean = True): Integer;
-function TryInitializeLibrary(var Handler: TLibHandler; const LibraryName: String = '';
-  const User: Pointer = nil; const NoSymbolErrors: Boolean = True): Integer;
-function InitializeLibrary(var Handler: TLibHandler; const LibraryNames: array of String;
-  const User: Pointer = nil; const NoSymbolErrors: Boolean = True): Integer;
-function InitializeLibrary(var Handler: TLibHandler; const LibraryName: String = '';
-  const User: Pointer = nil; const NoSymbolErrors: Boolean = True): Integer;
-function ReleaseLibrary(var Handler: TLibHandler): Integer;
-
-{ errors }
-procedure AppendLibraryError(var Handler: TLibHandler; const Msg: String);
-function GetLastLibraryError(var Handler: TLibHandler): String;
-procedure RaiseLibraryException(var Handler: TLibHandler);
-
-{ symbol load/clear }
-function LoadLibrarySymbols(const Lib: TLibHandle; const Symbols: PLibSymbol; const Count: Integer;
-  const ErrorSymbols: PLibSymbolPtrArray = nil): Boolean;
-procedure ClearLibrarySymbols(const Symbols: PLibSymbol; const Count: Integer);
-
-
+Type
+  HModule = TLibHandle; 
 
 
 Implementation
 Implementation
 
 
@@ -148,6 +72,7 @@ Function SafeLoadLibrary(const Name : AnsiString) : TLibHandle;
  var w : word;
  var w : word;
 {$endif}
 {$endif}
 
 
+
 Begin
 Begin
 {$ifdef i386}
 {$ifdef i386}
   w:=get8087cw;
   w:=get8087cw;
@@ -159,232 +84,4 @@ Begin
 {$endif}
 {$endif}
 End;
 End;
 
 
-function LibraryHandler(const InterfaceName: String; const DefaultLibraries: array of String;
-  const Symbols: PLibSymbol; const SymCount: Integer; const AfterLoading: TLibEventLoading;
-  const BeforeUnloading: TLibEventUnloading; const IdentGetter: TLibIdentGetter): TLibHandler;
-var
-  I: Integer;
-begin
-  Result.InterfaceName := InterfaceName;
-  Result.Filename      := '';
-  Result.Handle        := NilHandle;
-  Result.Loading       := AfterLoading;
-  Result.Unloading     := BeforeUnloading;
-  Result.IdentGetter   := IdentGetter;
-  Result.Ident         := 0;
-  Result.SymCount      := SymCount;
-  Result.Symbols       := Symbols;
-  Result.ErrorMsg      := '';
-  Result.RefCount      := 0;
-
-  SetLength(Result.Defaults, Length(DefaultLibraries));
-  for I := 0 to High(DefaultLibraries) do
-    Result.Defaults[I] := DefaultLibraries[I];
-end;
-
-function TryInitializeLibraryInternal(var Handler: TLibHandler; const LibraryName: String;
-  const User: Pointer; const NoSymbolErrors: Boolean): Integer;
-var
-  ErrSyms: TLibSymbolPtrArray;
-  NewIdent: TLibIdent;
-  I: Integer;
-begin
-  if Handler.Filename <> '' then
-  begin
-    if Assigned(Handler.IdentGetter) then
-    begin
-      NewIdent := Handler.IdentGetter(LibraryName);
-      if NewIdent <> Handler.Ident then
-      begin
-        AppendLibraryError(Handler, Format(SLibraryAlreadyLoaded, [Handler.InterfaceName, Handler.Filename]));
-        Result := -1;
-        Exit;
-      end;
-    end;
-  end;
-
-  Result := InterlockedIncrement(Handler.RefCount);
-  if Result = 1 then
-  begin
-    Handler.Handle := LoadLibrary(LibraryName);
-    if Handler.Handle = NilHandle then
-    begin
-      AppendLibraryError(Handler, Format(SLibraryNotLoaded, [Handler.InterfaceName, LibraryName]));
-      Handler.RefCount := 0;
-      Result := -1;
-      Exit;
-    end;
-
-    Handler.Filename := LibraryName;
-
-    if not LoadLibrarySymbols(Handler.Handle, Handler.Symbols, Handler.SymCount, @ErrSyms) and not NoSymbolErrors then
-    begin
-      for I := 0 to Length(ErrSyms) - 1 do
-        AppendLibraryError(Handler, Format(SLibraryUnknownSym, [ErrSyms[I]^.name, Handler.InterfaceName, LibraryName]));
-      UnloadLibrary(Handler.Handle);
-      Handler.Handle := NilHandle;
-      Handler.Filename := '';
-      Handler.RefCount := 0;
-      Result := -1;
-      Exit;
-    end;
-
-    if Assigned(Handler.Loading) and not Handler.Loading(User, @Handler) then
-    begin
-      UnloadLibrary(Handler.Handle);
-      Handler.Handle := NilHandle;
-      Handler.Filename := '';
-      Handler.RefCount := 0;
-      Result := -1;
-      Exit;
-    end;
-
-    if Assigned(Handler.IdentGetter) then
-      Handler.Ident := Handler.IdentGetter(Handler.Filename)
-    else
-      Handler.Ident := 0;
-  end;
-end;
-
-function TryInitializeLibrary(var Handler: TLibHandler; const LibraryName: String;
-  const User: Pointer; const NoSymbolErrors: Boolean): Integer;
-begin
-  if LibraryName <> '' then
-  begin
-    Handler.ErrorMsg := '';
-    Result := TryInitializeLibraryInternal(Handler, LibraryName, User, NoSymbolErrors);
-  end else
-    Result := TryInitializeLibrary(Handler, Handler.Defaults, User, NoSymbolErrors);
-end;
-
-function TryInitializeLibrary(var Handler: TLibHandler; const LibraryNames: array of String;
-  const User: Pointer; const NoSymbolErrors: Boolean): Integer;
-var
-  I: Integer;
-begin
-  Handler.ErrorMsg := '';
-
-  if Length(LibraryNames) <= 0 then
-  begin
-    if Length(Handler.Defaults) > 0 then
-    begin
-      Result := TryInitializeLibrary(Handler, Handler.Defaults, User, NoSymbolErrors);
-      Exit;
-    end;
-
-    AppendLibraryError(Handler, SVarInvalid);
-    Result := -1;
-    Exit;
-  end;
-
-  for I := 0 to High(LibraryNames) do
-  begin
-    Result := TryInitializeLibraryInternal(Handler, LibraryNames[I], User, NoSymbolErrors);
-    if Result > 0 then
-    begin
-      Handler.ErrorMsg := '';
-      Exit;
-    end;
-  end;
-end;
-
-function InitializeLibrary(var Handler: TLibHandler; const LibraryNames: array of String;
-  const User: Pointer; const NoSymbolErrors: Boolean): Integer;
-begin
-  Result := TryInitializeLibrary(Handler, LibraryNames, User, NoSymbolErrors);
-  if Result < 0 then
-    RaiseLibraryException(Handler);
-end;
-
-function InitializeLibrary(var Handler: TLibHandler; const LibraryName: String;
-  const User: Pointer; const NoSymbolErrors: Boolean): Integer;
-begin
-  Result := TryInitializeLibrary(Handler, LibraryName, User, NoSymbolErrors);
-  if Result < 0 then
-    RaiseLibraryException(Handler);
-end;
-
-function ReleaseLibrary(var Handler: TLibHandler): Integer;
-begin
-  Handler.ErrorMsg := '';
-
-  Result := InterlockedDecrement(Handler.RefCount);
-  if Result = 0 then
-  begin
-    if Assigned(Handler.Unloading) then
-      Handler.Unloading(@Handler);
-    ClearLibrarySymbols(Handler.Symbols, Handler.SymCount);
-    UnloadLibrary(Handler.Handle);
-    Handler.Handle := NilHandle;
-    Handler.Filename := '';
-    Handler.Ident := 0;
-  end else
-    if Result < 0 then
-      Handler.RefCount := 0;
-end;
-
-procedure AppendLibraryError(var Handler: TLibHandler; const Msg: String);
-begin
-  if Handler.ErrorMsg <> '' then
-    Handler.ErrorMsg := Handler.ErrorMsg + LineEnding + Msg
-  else
-    Handler.ErrorMsg := Msg;
-end;
-
-function GetLastLibraryError(var Handler: TLibHandler): String;
-begin
-  Result := Handler.ErrorMsg;
-  Handler.ErrorMsg := '';
-end;
-
-procedure RaiseLibraryException(var Handler: TLibHandler);
-var
-  Msg: String;
-begin
-  Msg := GetLastLibraryError(Handler);
-  if Msg <> '' then
-    raise EInOutError.Create(Msg)
-  else
-    raise EInOutError.Create(SUnknown);
-end;
-
-function LoadLibrarySymbols(const Lib: TLibHandle; const Symbols: PLibSymbol; const Count: Integer;
-  const ErrorSymbols: PLibSymbolPtrArray): Boolean;
-var
-  P,L: PLibSymbol;
-  Len: Integer;
-begin
-  P := Symbols;
-  L := @Symbols[Count];
-  while P < L do
-  begin
-    P^.pvar^ := GetProcedureAddress(Lib, P^.name);
-    if not Assigned(P^.pvar^) and not P^.weak then
-    begin
-      if Assigned(ErrorSymbols) then
-      begin
-        Len := Length(ErrorSymbols^);
-        SetLength(ErrorSymbols^, Len+1);
-        ErrorSymbols^[Len] := P;
-      end;
-      Result := False;
-    end;
-    Inc(P);
-  end;
-  Result := True;
-end;
-
-procedure ClearLibrarySymbols(const Symbols: PLibSymbol; const Count: Integer);
-var
-  P,L: PLibSymbol;
-begin
-  P := Symbols;
-  L := @Symbols[Count];
-  while P < L do
-  begin
-    P^.pvar^ := nil;
-    Inc(P);
-  end;
-end;
-
 end.
 end.

Some files were not shown because too many files changed in this diff