ViewVC Help
View File | Revision Log | Show Annotations | Download File | View Changeset | Root Listing
root/public/ibx/trunk/runtime/IBIntf.pas
(Generate patch)

Comparing ibx/trunk/runtime/IBIntf.pas (file contents):
Revision 1 by tony, Mon Jul 31 16:43:00 2000 UTC vs.
Revision 7 by tony, Sun Aug 5 18:28:19 2012 UTC

# Line 24 | Line 24
24   {       Corporation. All Rights Reserved.                                }
25   {    Contributor(s): Jeff Overcash                                       }
26   {                                                                        }
27 + {    IBX For Lazarus (Firebird Express)                                  }
28 + {    Contributor: Tony Whyman, MWA Software http://www.mwasoftware.co.uk }
29 + {    Portions created by MWA Software are copyright McCallum Whyman      }
30 + {    Associates Ltd 2011                                                 }
31 + {                                                                        }
32   {************************************************************************}
33  
34   unit IBIntf;
35  
36 + {$Mode Delphi}
37 +
38   interface
39  
40 < uses Windows, IBHeader, IBInstallHeader, IBExternals;
40 > uses
41 > {$IFDEF WINDOWS }
42 >  Windows,
43 > {$ELSE}
44 >  unix,
45 > {$ENDIF}
46 >  IBHeader,IBExternals;
47  
48   var
49    BLOB_get: TBLOB_get;
# Line 39 | Line 52 | var
52    isc_sql_interprete: Tisc_sql_interprete;
53    isc_interprete: Tisc_interprete;
54    isc_vax_integer: Tisc_vax_integer;
55 +  isc_portable_integer: Tisc_portable_integer;
56    isc_blob_info: Tisc_blob_info;
57    isc_open_blob2: Tisc_open_blob2;
58    isc_close_blob: Tisc_close_blob;
# Line 86 | Line 100 | var
100    isc_delete_user: Tisc_delete_user;
101    isc_modify_user: Tisc_modify_user;
102  
89  isc_install_clear_options: Tisc_install_clear_options;
90  isc_install_execute: Tisc_install_execute;
91  isc_install_get_info: Tisc_install_get_info;
92  isc_install_get_message: Tisc_install_get_message;
93  isc_install_load_external_text: Tisc_install_load_external_text;
94  isc_install_precheck: Tisc_install_precheck;
95  isc_install_set_option: Tisc_install_set_option;
96  isc_uninstall_execute: Tisc_uninstall_execute;
97  isc_uninstall_precheck: Tisc_uninstall_precheck;
98  isc_install_unset_option: Tisc_install_unset_option;
103  
104   { Library Initialization }
105   procedure LoadIBLibrary;
106   procedure FreeIBLibrary;
103 procedure LoadIBInstallLibrary;
104 procedure FreeIBInstallLibrary;
107   function TryIBLoad: Boolean;
108   procedure CheckIBLoaded;
107 function GetIBClientVersion: Integer;
108 procedure CheckIBInstallLoaded;
109  
110   { Stubs for 6.0 only functions }
111   function isc_rollback_retaining_stub(status_vector   : PISC_STATUS;
112                tran_handle     : PISC_TR_HANDLE):
113 <                                     ISC_STATUS; stdcall;
113 >                                     ISC_STATUS; {$IFDEF WINDOWS} stdcall; {$ELSE} cdecl; {$ENDIF}
114   function isc_service_attach_stub(status_vector      : PISC_STATUS;
115                                   isc_arg2           : UShort;
116                                   isc_arg3           : PChar;
117                                   service_handle     : PISC_SVC_HANDLE;
118                                   isc_arg5           : UShort;
119                                   isc_arg6           : PChar):
120 <                                 ISC_STATUS; stdcall;
120 >                                 ISC_STATUS; {$IFDEF WINDOWS} stdcall; {$ELSE} cdecl; {$ENDIF}
121   function isc_service_detach_stub(status_vector      : PISC_STATUS;
122                                   service_handle     : PISC_SVC_HANDLE):
123 <                                 ISC_STATUS; stdcall;
123 >                                 ISC_STATUS; {$IFDEF WINDOWS} stdcall; {$ELSE} cdecl; {$ENDIF}
124   function isc_service_query_stub(status_vector        : PISC_STATUS;
125                                  service_handle       : PISC_SVC_HANDLE;
126                                  recv_handle          : PISC_SVC_HANDLE;
# Line 130 | Line 130 | function isc_service_query_stub(status_v
130                                  isc_arg7             : PChar;
131                                  isc_arg8             : UShort;
132                                  isc_arg9             : PChar):
133 <                                ISC_STATUS; stdcall;
133 >                                ISC_STATUS; {$IFDEF WINDOWS} stdcall; {$ELSE} cdecl; {$ENDIF}
134   function isc_service_start_stub(status_vector        : PISC_STATUS;
135                                  service_handle       : PISC_SVC_HANDLE;
136                                  recv_handle          : PISC_SVC_HANDLE;
137                                  isc_arg4             : UShort;
138                                  isc_arg5             : PChar):
139 <                                ISC_STATUS; stdcall;
139 >                                ISC_STATUS; {$IFDEF WINDOWS} stdcall; {$ELSE} cdecl; {$ENDIF}
140  
141   procedure isc_encode_sql_date_stub(tm_date           : PCTimeStructure;
142                   ib_date           : PISC_DATE);
143 <                                   stdcall;
143 >                                   {$IFDEF WINDOWS} stdcall; {$ELSE} cdecl; {$ENDIF}
144  
145   procedure isc_encode_sql_time_stub(tm_date           : PCTimeStructure;
146                     ib_time           : PISC_TIME);
147 <                                   stdcall;
147 >                                   {$IFDEF WINDOWS} stdcall; {$ELSE} cdecl; {$ENDIF}
148  
149   procedure isc_encode_timestamp_stub(tm_date          : PCTimeStructure;
150                    ib_timestamp     : PISC_TIMESTAMP);
151 <                                    stdcall;
151 >                                    {$IFDEF WINDOWS} stdcall; {$ELSE} cdecl; {$ENDIF}
152  
153   procedure isc_decode_sql_date_stub(ib_date           : PISC_DATE;
154                                     tm_date           : PCTimeStructure);
155 <                                   stdcall;
155 >                                   {$IFDEF WINDOWS} stdcall; {$ELSE} cdecl; {$ENDIF}
156  
157   procedure isc_decode_sql_time_stub(ib_time           : PISC_TIME;
158                                     tm_date           : PCTimeStructure);
159 <                                   stdcall;
159 >                                   {$IFDEF WINDOWS} stdcall; {$ELSE} cdecl; {$ENDIF}
160  
161   procedure isc_decode_timestamp_stub(ib_timestamp     : PISC_TIMESTAMP;
162                                      tm_date          : PCTimeStructure);
163 <                                    stdcall;
163 >                                    {$IFDEF WINDOWS} stdcall; {$ELSE} cdecl; {$ENDIF}
164 >
165 >
166 > var  IBServiceAPIPresent: boolean;
167 >
168 > type
169 >  TOnGetLibraryName = procedure(var libname: string);
170 >
171 > const
172 >  OnGetLibraryName: TOnGetLibraryName = nil;
173  
165 { stubs for install functions }
166 function isc_install_clear_options_stub(hOption: POPTIONS_HANDLE):MSG_NO; stdcall;
167 function isc_install_execute_stub(hOption: OPTIONS_HANDLE;
168                             src_dir: TEXT;
169                             dest_dir: TEXT;
170                             status_func: FP_STATUS;
171                             status_data: pointer;
172                             error_func: FP_ERROR;
173                             error_data: pointer;
174                             uninstal_file_name: TEXT):MSG_NO; stdcall;
175 function isc_install_get_info_stub(info_type :integer;
176                              option :OPT;
177                              info_buffer : Pointer;
178                              buf_len : Cardinal): MSG_NO; stdcall;
179 function isc_install_get_message_stub(hOption: OPTIONS_HANDLE;
180                                 message_no: MSG_NO;
181                                 message_txt: Pointer;
182                                 message_len: Cardinal):MSG_NO; stdcall;
183 function isc_install_load_external_text_stub(msg_file_name: TEXT):MSG_NO; stdcall;
184 function isc_install_precheck_stub(hOption: OPTIONS_HANDLE;
185                              src_dir: TEXT;
186                              dest_dir: TEXT):MSG_NO; stdcall;
187 function isc_install_set_option_stub(hOption: POPTIONS_HANDLE;
188                                option: OPT):MSG_NO; stdcall;
189 function isc_uninstall_execute_stub(uninstall_file_name: TEXT;
190                               status_func: FP_STATUS;
191                               status_data: pointer;
192                               error_func: FP_ERROR;
193                               error_data: pointer):MSG_NO; stdcall;
194 function isc_uninstall_precheck_stub(uninstall_file_name: TEXT):MSG_NO; stdcall;
195 function isc_install_unset_option_stub(hOption: POPTIONS_HANDLE;
196                                  option: OPT):MSG_NO; stdcall;
174  
175   implementation
176  
177 < uses Sysutils, IB;
177 > uses Sysutils, IB, Dynlibs
178 > {$IFDEF WINDOWS}
179 > ,Forms, Registry
180 > {$ENDIF}
181 > ;
182  
183   var
184 <  IBLibrary: THandle;
204 <  IBInstallLibrary: THandle;
205 <  IBClientVersion: Integer;
184 >  IBLibrary: TLibHandle;
185  
186   procedure LoadIBLibrary;
187  
# Line 210 | Line 189 | procedure LoadIBLibrary;
189    begin
190      Result := GetProcAddress(IBLibrary, ProcName);
191      if not Assigned(Result) then
192 <      RaiseLastWin32Error;
192 >      raise Exception.Create('Unable to load Firebird Client Library');
193    end;
194 + {$IFDEF UNIX }
195 +  function InternalLoadLibrary: TLibHandle;
196 +  var LibName: string;
197 +  begin
198 +    //Use default unless FBLIB overrides
199 +    LibName := GetEnvironmentVariable('FBLIB');
200 +    if LibName = '' then
201 +    begin
202 +      if assigned(OnGetLibraryName) then
203 +        OnGetLibraryName(LibName)
204 +      else
205 +        LibName := FIREBIRD_SO2;
206 +    end;
207 +    Result := LoadLibrary(LibName);
208 +    {$IFDEF DARWIN}
209 +    if Result = NilHandle then
210 +    begin
211 +      {See http://paulbeachsblog.blogspot.co.uk/2008/03/where-is-libfbclientdylib-on-macosx.html
212 +       Try loading direct from Firebird Framework}
213 +
214 +      LibName := '/Library/Frameworks/Firebird.framework/Firebird';
215 +      Result := LoadLibrary(LibName);
216 +    end
217 +    {$ENDIF}
218 +  end;
219 + {$ENDIF}
220 + {$IFDEF WINDOWS}
221 +  function InternalLoadLibrary: TLibHandle;
222 +  var InstallDir: string;
223 +      dllPathName: string;
224 +  begin
225 +    if assigned(OnGetLibraryName) then
226 +    begin
227 +      OnGetLibraryName(dllPathName);
228 +      Result := LoadLibrary(dllPathName);
229 +      Exit
230 +    end;
231 +
232 +    //First look for Firebird Embedded Server in installation dir
233 +    InstallDir := ExtractFilePath(Application.ExeName);
234 +    if FileExists(InstallDir + FIREBIRD_EMBEDDED) then
235 +    begin
236 +         dllPathName := InstallDir + FIREBIRD_EMBEDDED;
237 +         Result := LoadLibrary(dllPathName)
238 +    end
239 +    else
240 +    //Otherwise look for Firebird Client in installation dir
241 +    if FileExists(InstallDir + FIREBIRD_CLIENT) then
242 +    begin
243 +      //assume firebird.conf and firebird.msg in same dir
244 +      SetEnvironmentVariable('FIREBIRD',PChar(InstallDir));
245 +      dllPathName := InstallDir +FIREBIRD_CLIENT;
246 +      Result := LoadLibrary(dllPathName)
247 +    end
248 +    else
249 +    //Use Registry key if it exists to locate library
250 +    begin
251 +      with TRegistry.Create do
252 +      try
253 +        RootKey := HKEY_LOCAL_MACHINE;
254 +        if OpenKey('SOFTWARE\Firebird Project\Firebird Server\Instances',false) then
255 +        begin
256 +          if ValueExists('DefaultInstance') then
257 +          begin
258 +            dllPathName := ReadString('DefaultInstance')  + 'bin' + DirectorySeparator + FIREBIRD_CLIENT;
259 +            if FileExists(dllPathName) then
260 +            begin
261 +              Result := LoadLibrary(dllPathName);
262 +              Exit
263 +            end
264 +          end
265 +        end
266 +      finally
267 +        Free
268 +      end;
269 +
270 +      //Otherwise see if Firebird client is in path
271 +      //and rely on registry for location of firebird.conf and firebird.msg
272 +      Result := LoadLibrary(FIREBIRD_CLIENT);
273 +      if Result <= HINSTANCE_ERROR then
274 +         //well maybe InterBase is present...
275 +         Result := LoadLibrary(IBASE_DLL);
276 +    end
277 +  end;
278 + {$ENDIF}
279  
280   begin
281 <  IBLibrary := LoadLibrary(PChar(IBASE_DLL));
282 <  if (IBLibrary > HINSTANCE_ERROR) then
281 >  IBLibrary := InternalLoadLibrary;
282 >  if (IBLibrary <> NilHandle) then
283    begin
284      BLOB_get := GetProcAddr('BLOB_get'); {do not localize}
285      BLOB_put := GetProcAddr('BLOB_put'); {do not localize}
# Line 223 | Line 287 | begin
287      isc_sql_interprete := GetProcAddr('isc_sql_interprete'); {do not localize}
288      isc_interprete := GetProcAddr('isc_interprete'); {do not localize}
289      isc_vax_integer := GetProcAddr('isc_vax_integer'); {do not localize}
290 +    isc_portable_integer := GetProcAddr('isc_portable_integer'); {do not localize}
291      isc_blob_info := GetProcAddr('isc_blob_info'); {do not localize}
292      isc_open_blob2 := GetProcAddr('isc_open_blob2'); {do not localize}
293      isc_close_blob := GetProcAddr('isc_close_blob'); {do not localize}
# Line 259 | Line 324 | begin
324      isc_delete_user := GetProcAddr('isc_delete_user'); {do not localize}
325      isc_modify_user := GetProcAddr('isc_modify_user'); {do not localize}
326  
327 <    IBClientVersion := 6;
327 >    IBServiceAPIPresent := true;
328      isc_rollback_retaining := GetProcAddress(IBLibrary, 'isc_rollback_retaining'); {do not localize}
329      if Assigned(isc_rollback_retaining) then
330      begin
# Line 275 | Line 340 | begin
340        isc_encode_timestamp := GetProcAddr('isc_encode_timestamp'); {do not localize}
341      end else
342      begin
343 <      IBClientVersion := 5;
343 >      IBServiceAPIPresent := false;
344        isc_rollback_retaining := isc_rollback_retaining_stub;
345        isc_service_attach := isc_service_attach_stub;
346        isc_service_detach := isc_service_detach_stub;
# Line 293 | Line 358 | end;
358  
359   procedure FreeIBLibrary;
360   begin
361 <  if IBLibrary > HINSTANCE_ERROR then
361 >  if IBLibrary <> NilHandle then
362    begin
363      FreeLibrary(IBLibrary);
364      IBLibrary := 0;
365    end;
366   end;
367  
303 procedure LoadIBInstallLibrary;
304
305  function GetProcAddr(ProcName: PChar): Pointer;
306  begin
307    Result := GetProcAddress(IBInstallLibrary, ProcName);
308    if not Assigned(Result) then RaiseLastWin32Error;
309  end;
310
311 begin
312  IBInstallLibrary := LoadLibrary(PChar(IB_INSTALL_DLL));
313  if (IBInstallLibrary > HINSTANCE_ERROR) then
314  begin
315    isc_install_clear_options := GetProcAddr('isc_install_clear_options'); {do not localize}
316    isc_install_execute := GetProcAddr('isc_install_execute'); {do not localize}
317    isc_install_get_info := GetProcAddr('isc_install_get_info'); {do not localize}
318    isc_install_get_message := GetProcAddr('isc_install_get_message'); {do not localize}
319    isc_install_load_external_text := GetProcAddr('isc_install_load_external_text'); {do not localize}
320    isc_install_precheck := GetProcAddr('isc_install_precheck'); {do not localize}
321    isc_install_set_option := GetProcAddr('isc_install_set_option'); {do not localize}
322    isc_uninstall_execute := GetProcAddr('isc_uninstall_execute'); {do not localize}
323    isc_uninstall_precheck := GetProcAddr('isc_uninstall_precheck'); {do not localize}
324    isc_install_unset_option := GetProcAddr('isc_install_unset_option'); {do not localize}
325  end
326  else begin
327    isc_install_clear_options := isc_install_clear_options_stub;
328    isc_install_execute := isc_install_execute_stub;
329    isc_install_get_info := isc_install_get_info_stub;
330    isc_install_get_message := isc_install_get_message_stub;
331    isc_install_load_external_text := isc_install_load_external_text_stub;
332    isc_install_precheck := isc_install_precheck_stub;
333    isc_install_set_option := isc_install_set_option_stub;
334    isc_uninstall_execute := isc_uninstall_execute_stub;
335    isc_uninstall_precheck := isc_uninstall_precheck_stub;
336    isc_install_unset_option := isc_install_unset_option_stub;
337  end;
338 end;
339
340 procedure FreeIBInstallLibrary;
341 begin
342  if IBInstallLibrary > HINSTANCE_ERROR then
343  begin
344    FreeLibrary(IBInstallLibrary);
345    IBInstallLibrary := 0;
346  end;
347 end;
348
368   function TryIBLoad: Boolean;
369   begin
370 <  if (IBLibrary <= HINSTANCE_ERROR) then
370 >  if (IBLibrary = NilHandle) then
371      LoadIBLibrary;
372 <  if (IBLibrary <= HINSTANCE_ERROR) then
372 >  if (IBLibrary = NilHandle) then
373      result := False
374    else
375      result := True;
# Line 362 | Line 381 | begin
381      IBError(ibxeInterBaseMissing, [nil]);
382   end;
383  
365 function GetIBClientVersion: Integer;
366 begin
367  CheckIBLoaded;
368  result := IBClientVersion;
369 end;
370
371 procedure CheckIBInstallLoaded;
372 begin
373  if (IBInstallLibrary <= HINSTANCE_ERROR) then
374    LoadIBInstallLibrary;
375  if (IBInstallLibrary <= HINSTANCE_ERROR) then
376    IBError(ibxeInterBaseInstallMissing, [nil]);
377 end;
384  
385   function isc_rollback_retaining_stub(status_vector   : PISC_STATUS;
386                tran_handle     : PISC_TR_HANDLE):
387 <                                     ISC_STATUS; stdcall;
387 >                                     ISC_STATUS; {$IFDEF WINDOWS} stdcall; {$ELSE} cdecl; {$ENDIF}
388   begin
389    Result := 0;
390    IBError(ibxeIB60feature, ['isc_rollback_retaining']); {do not localize}
# Line 390 | Line 396 | function isc_service_attach_stub(status_
396                                   service_handle     : PISC_SVC_HANDLE;
397                                   isc_arg5           : UShort;
398                                   isc_arg6           : PChar):
399 <                                 ISC_STATUS; stdcall;
399 >                                 ISC_STATUS; {$IFDEF WINDOWS} stdcall; {$ELSE} cdecl; {$ENDIF}
400   begin
401    Result := 0;
402    IBError(ibxeIB60feature, ['isc_service_attach']); {do not localize}
# Line 398 | Line 404 | end;
404  
405   function isc_service_detach_stub(status_vector      : PISC_STATUS;
406                                   service_handle     : PISC_SVC_HANDLE):
407 <                                 ISC_STATUS; stdcall;
407 >                                 ISC_STATUS; {$IFDEF WINDOWS} stdcall; {$ELSE} cdecl; {$ENDIF}
408   begin
409    Result := 0;
410    IBError(ibxeIB60feature, ['isc_service_detach']); {do not localize}
# Line 413 | Line 419 | function isc_service_query_stub(status_v
419                                  isc_arg7             : PChar;
420                                  isc_arg8             : UShort;
421                                  isc_arg9             : PChar):
422 <                                ISC_STATUS; stdcall;
422 >                                ISC_STATUS; {$IFDEF WINDOWS} stdcall; {$ELSE} cdecl; {$ENDIF}
423   begin
424    Result := 0;
425    IBError(ibxeIB60feature, ['isc_service_query']); {do not localize}
# Line 424 | Line 430 | function isc_service_start_stub(status_v
430                                  recv_handle          : PISC_SVC_HANDLE;
431                                  isc_arg4             : UShort;
432                                  isc_arg5             : PChar):
433 <                                ISC_STATUS; stdcall;
433 >                                ISC_STATUS; {$IFDEF WINDOWS} stdcall; {$ELSE} cdecl; {$ENDIF}
434   begin
435    Result := 0;
436    IBError(ibxeIB60feature, ['isc_service_start']); {do not localize}
# Line 432 | Line 438 | end;
438  
439   procedure isc_encode_sql_date_stub(tm_date           : PCTimeStructure;
440                   ib_date           : PISC_DATE);
441 <                                   stdcall;
441 >                                   {$IFDEF WINDOWS} stdcall; {$ELSE} cdecl; {$ENDIF}
442   begin
443    IBError(ibxeIB60feature, ['isc_encode_sql_date']); {do not localize}
444   end;
445  
446   procedure isc_encode_sql_time_stub(tm_date           : PCTimeStructure;
447                     ib_time           : PISC_TIME);
448 <                                   stdcall;
448 >                                   {$IFDEF WINDOWS} stdcall; {$ELSE} cdecl; {$ENDIF}
449   begin
450    IBError(ibxeIB60feature, ['isc_encode_sql_time']); {do not localize}
451   end;
452  
453   procedure isc_encode_timestamp_stub(tm_date          : PCTimeStructure;
454                    ib_timestamp     : PISC_TIMESTAMP);
455 <                                    stdcall;
455 >                                    {$IFDEF WINDOWS} stdcall; {$ELSE} cdecl; {$ENDIF}
456   begin
457    IBError(ibxeIB60feature, ['isc_encode_sql_timestamp']); {do not localize}
458   end;
459  
460   procedure isc_decode_sql_date_stub(ib_date           : PISC_DATE;
461                                     tm_date           : PCTimeStructure);
462 <                                   stdcall;
462 >                                   {$IFDEF WINDOWS} stdcall; {$ELSE} cdecl; {$ENDIF}
463   begin
464    IBError(ibxeIB60feature, ['isc_decode_sql_date']); {do not localize}
465   end;
466  
467   procedure isc_decode_sql_time_stub(ib_time           : PISC_TIME;
468                                     tm_date           : PCTimeStructure);
469 <                                   stdcall;
469 >                                   {$IFDEF WINDOWS} stdcall; {$ELSE} cdecl; {$ENDIF}
470   begin
471    IBError(ibxeIB60feature, ['isc_decode_sql_time']); {do not localize}
472   end;
473  
474   procedure isc_decode_timestamp_stub(ib_timestamp     : PISC_TIMESTAMP;
475                                      tm_date          : PCTimeStructure);
476 <                                    stdcall;
476 >                                    {$IFDEF WINDOWS} stdcall; {$ELSE} cdecl; {$ENDIF}
477   begin
478    IBError(ibxeIB60feature, ['isc_decode_timestamp']); {do not localize}
479   end;
474
475 function isc_install_clear_options_stub(hOption: POPTIONS_HANDLE):MSG_NO; stdcall;
476 begin
477  Result := 0;
478  IBError(ibxeIB60feature, ['isc_install_xxx ']); {do not localize}
479 end;
480
481 function isc_install_execute_stub(hOption: OPTIONS_HANDLE;
482                             src_dir: TEXT;
483                             dest_dir: TEXT;
484                             status_func: FP_STATUS;
485                             status_data: pointer;
486                             error_func: FP_ERROR;
487                             error_data: pointer;
488                             uninstal_file_name: TEXT):MSG_NO; stdcall;
489 begin
490  Result := 0;
491  IBError(ibxeIB60feature, ['isc_install_xxx ']); {do not localize}
492 end;
493
494 function isc_install_get_info_stub(info_type :integer;
495                              option :OPT;
496                              info_buffer : Pointer;
497                              buf_len : Cardinal): MSG_NO; stdcall;
498 begin
499  Result := 0;
500  IBError(ibxeIB60feature, ['isc_install_xxx ']); {do not localize}
501 end;
502
503 function isc_install_get_message_stub(hOption: OPTIONS_HANDLE;
504                                 message_no: MSG_NO;
505                                 message_txt: Pointer;
506                                 message_len: Cardinal):MSG_NO; stdcall;
507 begin
508  Result := 0;
509  IBError(ibxeIB60feature, ['isc_install_xxx ']); {do not localize}
510 end;
511
512 function isc_install_load_external_text_stub(msg_file_name: TEXT):MSG_NO; stdcall;
513 begin
514  Result := 0;
515  IBError(ibxeIB60feature, ['isc_install_xxx ']); {do not localize}
516 end;
517
518 function isc_install_precheck_stub(hOption: OPTIONS_HANDLE;
519                              src_dir: TEXT;
520                              dest_dir: TEXT):MSG_NO; stdcall;
521 begin
522  Result := 0;
523  IBError(ibxeIB60feature, ['isc_install_xxx ']); {do not localize}
524 end;
525
526 function isc_install_set_option_stub(hOption: POPTIONS_HANDLE;
527                                option: OPT):MSG_NO; stdcall;
528 begin
529  Result := 0;
530  IBError(ibxeIB60feature, ['isc_install_xxx ']); {do not localize}
531 end;
532
533 function isc_uninstall_execute_stub(uninstall_file_name: TEXT;
534                               status_func: FP_STATUS;
535                               status_data: pointer;
536                               error_func: FP_ERROR;
537                               error_data: pointer):MSG_NO; stdcall;
538 begin
539  Result := 0;
540  IBError(ibxeIB60feature, ['isc_install_xxx ']); {do not localize}
541 end;
542
543 function isc_uninstall_precheck_stub(uninstall_file_name: TEXT):MSG_NO; stdcall;
544 begin
545  Result := 0;
546  IBError(ibxeIB60feature, ['isc_install_xxx ']); {do not localize}
547 end;
548
549 function isc_install_unset_option_stub(hOption: POPTIONS_HANDLE;
550                                  option: OPT):MSG_NO; stdcall;
551 begin
552  Result := 0;
553  IBError(ibxeIB60feature, ['isc_install_xxx ']); {do not localize}
554 end;
555
480   initialization
481  
482   finalization
483    FreeIBLibrary;
560  FreeIBInstallLibrary;
484   end.

Diff Legend

Removed lines
+ Added lines
< Changed lines
> Changed lines