ViewVC Help
View File | Revision Log | Show Annotations | Download File | View Changeset | Root Listing
root/public/ibx/trunk/runtime/IBIntf.pas
Revision: 37
Committed: Mon Feb 15 14:44:25 2016 UTC (8 years, 2 months ago) by tony
Content type: text/x-pascal
File size: 23742 byte(s)
Log Message:
Committing updates for Release R1-4-0

File Contents

# Content
1 {************************************************************************}
2 { }
3 { Borland Delphi Visual Component Library }
4 { InterBase Express core components }
5 { }
6 { Copyright (c) 1998-2000 Inprise Corporation }
7 { }
8 { InterBase Express is based in part on the product }
9 { Free IB Components, written by Gregory H. Deatz for }
10 { Hoagland, Longo, Moran, Dunst & Doukas Company. }
11 { Free IB Components is used under license. }
12 { }
13 { The contents of this file are subject to the InterBase }
14 { Public License Version 1.0 (the "License"); you may not }
15 { use this file except in compliance with the License. You }
16 { may obtain a copy of the License at http://www.Inprise.com/IPL.html }
17 { Software distributed under the License is distributed on }
18 { an "AS IS" basis, WITHOUT WARRANTY OF ANY KIND, either }
19 { express or implied. See the License for the specific language }
20 { governing rights and limitations under the License. }
21 { The Original Code was created by InterBase Software Corporation }
22 { and its successors. }
23 { Portions created by Inprise Corporation are Copyright (C) Inprise }
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
41 {$IFDEF WINDOWS }
42 Windows,
43 {$ELSE}
44 unix,
45 {$ENDIF}
46 IBHeader,IBExternals;
47
48 var
49 BLOB_get: TBLOB_get;
50 BLOB_put: TBLOB_put;
51 isc_sqlcode: Tisc_sqlcode;
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_blob_lookup_desc: Tisc_blob_lookup_desc;
58 isc_open_blob2: Tisc_open_blob2;
59 isc_close_blob: Tisc_close_blob;
60 isc_get_segment: Tisc_get_segment;
61 isc_put_segment: Tisc_put_segment;
62 isc_create_blob2: Tisc_create_blob2;
63 isc_service_attach: Tisc_service_attach;
64 isc_service_detach: Tisc_service_detach;
65 isc_service_query: Tisc_service_query;
66 isc_service_start: Tisc_service_start;
67 isc_decode_date: Tisc_decode_date;
68 isc_decode_sql_date: Tisc_decode_sql_date;
69 isc_decode_sql_time: Tisc_decode_sql_time;
70 isc_decode_timestamp: Tisc_decode_timestamp;
71 isc_encode_date: Tisc_encode_date;
72 isc_encode_sql_date: Tisc_encode_sql_date;
73 isc_encode_sql_time: Tisc_encode_sql_time;
74 isc_encode_timestamp: Tisc_encode_timestamp;
75 isc_dsql_free_statement: Tisc_dsql_free_statement;
76 isc_dsql_execute2: Tisc_dsql_execute2;
77 isc_dsql_execute: Tisc_dsql_execute;
78 isc_dsql_set_cursor_name: Tisc_dsql_set_cursor_name;
79 isc_dsql_fetch: Tisc_dsql_fetch;
80 isc_dsql_sql_info: Tisc_dsql_sql_info;
81 isc_dsql_alloc_statement2: Tisc_dsql_alloc_statement2;
82 isc_dsql_prepare: Tisc_dsql_prepare;
83 isc_dsql_describe_bind: Tisc_dsql_describe_bind;
84 isc_dsql_describe: Tisc_dsql_describe;
85 isc_dsql_execute_immediate: Tisc_dsql_execute_immediate;
86 isc_drop_database: Tisc_drop_database;
87 isc_detach_database: Tisc_detach_database;
88 isc_attach_database: Tisc_attach_database;
89 isc_database_info: Tisc_database_info;
90 isc_start_multiple: Tisc_start_multiple;
91 isc_commit_transaction: Tisc_commit_transaction;
92 isc_commit_retaining: Tisc_commit_retaining;
93 isc_rollback_transaction: Tisc_rollback_transaction;
94 isc_rollback_retaining: Tisc_rollback_retaining;
95 isc_cancel_events: Tisc_cancel_events;
96 isc_que_events: Tisc_que_events;
97 isc_event_counts: Tisc_event_counts;
98 isc_event_block: Tisc_event_block;
99 isc_free: Tisc_free;
100 isc_add_user : Tisc_add_user;
101 isc_delete_user: Tisc_delete_user;
102 isc_modify_user: Tisc_modify_user;
103
104 FBLibraryName: string;
105
106
107 { Library Initialization }
108 procedure LoadIBLibrary;
109 procedure FreeIBLibrary;
110 function TryIBLoad: Boolean;
111 procedure CheckIBLoaded;
112
113 {Utility}
114 function IsEmbeddedServer: boolean;
115
116 { Stubs for 6.0 only functions }
117 function isc_rollback_retaining_stub(status_vector : PISC_STATUS;
118 tran_handle : PISC_TR_HANDLE):
119 ISC_STATUS; {$IFDEF WINDOWS} stdcall; {$ELSE} cdecl; {$ENDIF}
120 function isc_service_attach_stub(status_vector : PISC_STATUS;
121 isc_arg2 : UShort;
122 isc_arg3 : PChar;
123 service_handle : PISC_SVC_HANDLE;
124 isc_arg5 : UShort;
125 isc_arg6 : PChar):
126 ISC_STATUS; {$IFDEF WINDOWS} stdcall; {$ELSE} cdecl; {$ENDIF}
127 function isc_service_detach_stub(status_vector : PISC_STATUS;
128 service_handle : PISC_SVC_HANDLE):
129 ISC_STATUS; {$IFDEF WINDOWS} stdcall; {$ELSE} cdecl; {$ENDIF}
130 function isc_service_query_stub(status_vector : PISC_STATUS;
131 service_handle : PISC_SVC_HANDLE;
132 recv_handle : PISC_SVC_HANDLE;
133 isc_arg4 : UShort;
134 isc_arg5 : PChar;
135 isc_arg6 : UShort;
136 isc_arg7 : PChar;
137 isc_arg8 : UShort;
138 isc_arg9 : PChar):
139 ISC_STATUS; {$IFDEF WINDOWS} stdcall; {$ELSE} cdecl; {$ENDIF}
140 function isc_service_start_stub(status_vector : PISC_STATUS;
141 service_handle : PISC_SVC_HANDLE;
142 recv_handle : PISC_SVC_HANDLE;
143 isc_arg4 : UShort;
144 isc_arg5 : PChar):
145 ISC_STATUS; {$IFDEF WINDOWS} stdcall; {$ELSE} cdecl; {$ENDIF}
146
147 procedure isc_encode_sql_date_stub(tm_date : PCTimeStructure;
148 ib_date : PISC_DATE);
149 {$IFDEF WINDOWS} stdcall; {$ELSE} cdecl; {$ENDIF}
150
151 procedure isc_encode_sql_time_stub(tm_date : PCTimeStructure;
152 ib_time : PISC_TIME);
153 {$IFDEF WINDOWS} stdcall; {$ELSE} cdecl; {$ENDIF}
154
155 procedure isc_encode_timestamp_stub(tm_date : PCTimeStructure;
156 ib_timestamp : PISC_TIMESTAMP);
157 {$IFDEF WINDOWS} stdcall; {$ELSE} cdecl; {$ENDIF}
158
159 procedure isc_decode_sql_date_stub(ib_date : PISC_DATE;
160 tm_date : PCTimeStructure);
161 {$IFDEF WINDOWS} stdcall; {$ELSE} cdecl; {$ENDIF}
162
163 procedure isc_decode_sql_time_stub(ib_time : PISC_TIME;
164 tm_date : PCTimeStructure);
165 {$IFDEF WINDOWS} stdcall; {$ELSE} cdecl; {$ENDIF}
166
167 procedure isc_decode_timestamp_stub(ib_timestamp : PISC_TIMESTAMP;
168 tm_date : PCTimeStructure);
169 {$IFDEF WINDOWS} stdcall; {$ELSE} cdecl; {$ENDIF}
170
171
172 var IBServiceAPIPresent: boolean;
173
174 type
175 TOnGetLibraryName = procedure(var libname: string);
176
177 const
178 OnGetLibraryName: TOnGetLibraryName = nil;
179
180
181 implementation
182
183 uses Sysutils, IB, Dynlibs, Classes
184 {$IFDEF WINDOWS}
185 , Registry, WinDirs
186 {$ENDIF}
187 ;
188
189 var
190 IBLibrary: TLibHandle;
191
192 procedure LoadIBLibrary;
193
194 function GetProcAddr(ProcName: PChar): Pointer;
195 begin
196 Result := GetProcAddress(IBLibrary, ProcName);
197 if not Assigned(Result) then
198 raise Exception.Create('Unable to load Firebird Client Library');
199 end;
200 {$IFDEF UNIX }
201 function FindLibrary(LibNameList: string): TLibHandle;
202 var LibNames: TStringList;
203 i: integer;
204 begin
205 Result := NilHandle;
206 LibNames := TStringList.Create;
207 try
208 LibNames.Delimiter := ':';
209 LibNames.StrictDelimiter := true;
210 LibNames.DelimitedText := LibNameList; {Split list on semi-colon}
211 for i := 0 to LibNames.Count - 1 do
212 begin
213 Result := LoadLibrary(LibNames[i]);
214 if Result <> NilHandle then
215 begin
216 FBLibraryName := LibNames[i];
217 Exit;
218 end;
219 end;
220 finally
221 LibNames.Free;
222 end;
223 end;
224
225 function InternalLoadLibrary: TLibHandle;
226 var LibName: string;
227 begin
228 //Use default unless FBLIB overrides
229 LibName := GetEnvironmentVariable('FBLIB');
230 if LibName = '' then
231 begin
232 if assigned(OnGetLibraryName) then
233 OnGetLibraryName(LibName)
234 else
235 LibName := FIREBIRD_SO2;
236 end;
237 Result := FindLibrary(LibName);
238 {$IFDEF DARWIN}
239 if Result = NilHandle then
240 begin
241 {See http://paulbeachsblog.blogspot.co.uk/2008/03/where-is-libfbclientdylib-on-macosx.html
242 Try loading direct from Firebird Framework}
243
244 LibName := '/Library/Frameworks/Firebird.framework/Firebird';
245 Result := LoadLibrary(LibName);
246 if Result <> NilHandle then
247 FBLibraryName := ExtractFileName(LibName);
248 end
249 {$ENDIF}
250 end;
251 {$ENDIF}
252 {$IFDEF WINDOWS}
253 function DoLoadLibrary(LibName: string): TLibHandle;
254 begin
255 Result := LoadLibrary(LibName);
256 if Result <> NilHandle then
257 FBLibraryName := ExtractFileName(LibName);
258 end;
259
260 function InternalLoadLibrary: TLibHandle;
261 var InstallDir: string;
262 dllPathName: string;
263 begin
264 Result := NilHandle;
265 {If OnGetLibraryName given then use this}
266 if assigned(OnGetLibraryName) then
267 begin
268 OnGetLibraryName(dllPathName);
269 Result := DoLoadLibrary(dllPathName);
270 Exit
271 end;
272
273 {Then look in application installation directory}
274 InstallDir := ExtractFilePath(Paramstr(0)); {Using ParamStr(0) assumes windows conventions}
275
276 //First look for Firebird Embedded Server in installation dir
277 if FileExists(InstallDir + FIREBIRD_EMBEDDED) then
278 begin
279 dllPathName := InstallDir + FIREBIRD_EMBEDDED;
280 Result := DoLoadLibrary(dllPathName)
281 end
282 else
283 //Otherwise look for Firebird Client in installation dir
284 if FileExists(InstallDir + FIREBIRD_CLIENT) then
285 begin
286 //assume firebird.conf and firebird.msg in same dir
287 SetEnvironmentVariable('FIREBIRD',PChar(InstallDir));
288 dllPathName := InstallDir +FIREBIRD_CLIENT;
289 Result := DoLoadLibrary(dllPathName)
290 end;
291
292 {If FIREBIRD environment variable available then try this}
293 if Result = NilHandle then
294 begin
295 InstallDir := GetEnvironmentVariable('FIREBIRD');
296 if (InstallDir <> '') and FileExists(InstallDir + FIREBIRD_CLIENT) then
297 begin
298 //assume firebird.conf and firebird.msg in same dir
299 dllPathName := InstallDir + FIREBIRD_CLIENT;
300 Result := DoLoadLibrary(dllPathName)
301 end
302 else
303 if (InstallDir <> '') and FileExists(InstallDir + 'bin' + DirectorySeparator + FIREBIRD_CLIENT) then
304 begin
305 dllPathName := InstallDir + FIREBIRD_CLIENT;
306 Result := DoLoadLibrary(dllPathName)
307 end
308 end;
309
310 if Result = NilHandle then
311 {Use Registry key if it exists to locate library}
312 begin
313 with TRegistry.Create do
314 try
315 RootKey := HKEY_LOCAL_MACHINE;
316 if OpenKey('SOFTWARE\Firebird Project\Firebird Server\Instances',false) then
317 begin
318 if ValueExists('DefaultInstance') then
319 begin
320 InstallDir := ReadString('DefaultInstance') + 'bin' + DirectorySeparator ;
321 dllPathName := InstallDir + FIREBIRD_CLIENT;
322 Result := DoLoadLibrary(dllPathName)
323 end
324 end
325 finally
326 Free
327 end;
328
329 {Now try default install dir}
330 if Result = NilHandle then
331 begin
332 InstallDir := GetWindowsSpecialDir(CSIDL_PROGRAM_FILES) +
333 DirectorySeparator + 'Firebird' +
334 DirectorySeparator + 'Firebird_2_5' +
335 DirectorySeparator + 'bin' + DirectorySeparator;
336 dllPathName := InstallDir + FIREBIRD_CLIENT;
337 Result := DoLoadLibrary(dllPathName)
338 end;
339
340 //Otherwise see if Firebird client is in path
341 //and rely on registry for location of firebird.conf and firebird.msg
342 if Result = NilHandle then
343 begin
344 Result := DoLoadLibrary(FIREBIRD_CLIENT);
345 if Result <= HINSTANCE_ERROR then
346 //well maybe InterBase is present...
347 Result := DoLoadLibrary(IBASE_DLL);
348 end;
349 end
350 end;
351 {$ENDIF}
352
353 begin
354 IBLibrary := InternalLoadLibrary;
355 if (IBLibrary <> NilHandle) then
356 begin
357 BLOB_get := GetProcAddr('BLOB_get'); {do not localize}
358 BLOB_put := GetProcAddr('BLOB_put'); {do not localize}
359 isc_sqlcode := GetProcAddr('isc_sqlcode'); {do not localize}
360 isc_sql_interprete := GetProcAddr('isc_sql_interprete'); {do not localize}
361 isc_interprete := GetProcAddr('isc_interprete'); {do not localize}
362 isc_vax_integer := GetProcAddr('isc_vax_integer'); {do not localize}
363 isc_portable_integer := GetProcAddr('isc_portable_integer'); {do not localize}
364 isc_blob_info := GetProcAddr('isc_blob_info'); {do not localize}
365 isc_blob_lookup_desc := GetProcAddr('isc_blob_lookup_desc'); {do not localize}
366 isc_open_blob2 := GetProcAddr('isc_open_blob2'); {do not localize}
367 isc_close_blob := GetProcAddr('isc_close_blob'); {do not localize}
368 isc_get_segment := GetProcAddr('isc_get_segment'); {do not localize}
369 isc_put_segment := GetProcAddr('isc_put_segment'); {do not localize}
370 isc_create_blob2 := GetProcAddr('isc_create_blob2'); {do not localize}
371 isc_decode_date := GetProcAddr('isc_decode_date'); {do not localize}
372 isc_encode_date := GetProcAddr('isc_encode_date'); {do not localize}
373 isc_dsql_free_statement := GetProcAddr('isc_dsql_free_statement'); {do not localize}
374 isc_dsql_execute2 := GetProcAddr('isc_dsql_execute2'); {do not localize}
375 isc_dsql_execute := GetProcAddr('isc_dsql_execute'); {do not localize}
376 isc_dsql_set_cursor_name := GetProcAddr('isc_dsql_set_cursor_name'); {do not localize}
377 isc_dsql_fetch := GetProcAddr('isc_dsql_fetch'); {do not localize}
378 isc_dsql_sql_info := GetProcAddr('isc_dsql_sql_info'); {do not localize}
379 isc_dsql_alloc_statement2 := GetProcAddr('isc_dsql_alloc_statement2'); {do not localize}
380 isc_dsql_prepare := GetProcAddr('isc_dsql_prepare'); {do not localize}
381 isc_dsql_describe_bind := GetProcAddr('isc_dsql_describe_bind'); {do not localize}
382 isc_dsql_describe := GetProcAddr('isc_dsql_describe'); {do not localize}
383 isc_dsql_execute_immediate := GetProcAddr('isc_dsql_execute_immediate'); {do not localize}
384 isc_drop_database := GetProcAddr('isc_drop_database'); {do not localize}
385 isc_detach_database := GetProcAddr('isc_detach_database'); {do not localize}
386 isc_attach_database := GetProcAddr('isc_attach_database'); {do not localize}
387 isc_database_info := GetProcAddr('isc_database_info'); {do not localize}
388 isc_start_multiple := GetProcAddr('isc_start_multiple'); {do not localize}
389 isc_commit_transaction := GetProcAddr('isc_commit_transaction'); {do not localize}
390 isc_commit_retaining := GetProcAddr('isc_commit_retaining'); {do not localize}
391 isc_rollback_transaction := GetProcAddr('isc_rollback_transaction'); {do not localize}
392 isc_cancel_events := GetProcAddr('isc_cancel_events'); {do not localize}
393 isc_que_events := GetProcAddr('isc_que_events'); {do not localize}
394 isc_event_counts := GetProcAddr('isc_event_counts'); {do not localize}
395 isc_event_block := GetProcAddr('isc_event_block'); {do not localize}
396 isc_free := GetProcAddr('isc_free'); {do not localize}
397 isc_add_user := GetProcAddr('isc_add_user'); {do not localize}
398 isc_delete_user := GetProcAddr('isc_delete_user'); {do not localize}
399 isc_modify_user := GetProcAddr('isc_modify_user'); {do not localize}
400
401 IBServiceAPIPresent := true;
402 isc_rollback_retaining := GetProcAddress(IBLibrary, 'isc_rollback_retaining'); {do not localize}
403 if Assigned(isc_rollback_retaining) then
404 begin
405 isc_service_attach := GetProcAddr('isc_service_attach'); {do not localize}
406 isc_service_detach := GetProcAddr('isc_service_detach'); {do not localize}
407 isc_service_query := GetProcAddr('isc_service_query'); {do not localize}
408 isc_service_start := GetProcAddr('isc_service_start'); {do not localize}
409 isc_decode_sql_date := GetProcAddr('isc_decode_sql_date'); {do not localize}
410 isc_decode_sql_time := GetProcAddr('isc_decode_sql_time'); {do not localize}
411 isc_decode_timestamp := GetProcAddr('isc_decode_timestamp'); {do not localize}
412 isc_encode_sql_date := GetProcAddr('isc_encode_sql_date'); {do not localize}
413 isc_encode_sql_time := GetProcAddr('isc_encode_sql_time'); {do not localize}
414 isc_encode_timestamp := GetProcAddr('isc_encode_timestamp'); {do not localize}
415 end else
416 begin
417 IBServiceAPIPresent := false;
418 isc_rollback_retaining := isc_rollback_retaining_stub;
419 isc_service_attach := isc_service_attach_stub;
420 isc_service_detach := isc_service_detach_stub;
421 isc_service_query := isc_service_query_stub;
422 isc_service_start := isc_service_start_stub;
423 isc_decode_sql_date := isc_decode_sql_date_stub;
424 isc_decode_sql_time := isc_decode_sql_time_stub;
425 isc_decode_timestamp := isc_decode_timestamp_stub;
426 isc_encode_sql_date := isc_encode_sql_date_stub;
427 isc_encode_sql_time := isc_encode_sql_time_stub;
428 isc_encode_timestamp := isc_encode_timestamp_stub;
429 end;
430 end;
431 end;
432
433 procedure FreeIBLibrary;
434 begin
435 if IBLibrary <> NilHandle then
436 begin
437 FreeLibrary(IBLibrary);
438 IBLibrary := 0;
439 end;
440 end;
441
442 function TryIBLoad: Boolean;
443 begin
444 if (IBLibrary = NilHandle) then
445 LoadIBLibrary;
446 if (IBLibrary = NilHandle) then
447 result := False
448 else
449 result := True;
450 end;
451
452 procedure CheckIBLoaded;
453 begin
454 if not TryIBLoad then
455 IBError(ibxeInterBaseMissing, [nil]);
456 end;
457
458 function IsEmbeddedServer: boolean;
459 begin
460 Result := false;
461 {$IFDEF UNIX}
462 Result := Pos('libfbembed',FBLibraryName) = 1;
463 {$ENDIF}
464 {$IFDEF WINDOWS}
465 Result := CompareText(FBLibraryName,FIREBIRD_EMBEDDED) = 0
466 {$ENDIF}
467 end;
468
469 function isc_rollback_retaining_stub(status_vector : PISC_STATUS;
470 tran_handle : PISC_TR_HANDLE):
471 ISC_STATUS; {$IFDEF WINDOWS} stdcall; {$ELSE} cdecl; {$ENDIF}
472 begin
473 Result := 0;
474 IBError(ibxeIB60feature, ['isc_rollback_retaining']); {do not localize}
475 end;
476
477 function isc_service_attach_stub(status_vector : PISC_STATUS;
478 isc_arg2 : UShort;
479 isc_arg3 : PChar;
480 service_handle : PISC_SVC_HANDLE;
481 isc_arg5 : UShort;
482 isc_arg6 : PChar):
483 ISC_STATUS; {$IFDEF WINDOWS} stdcall; {$ELSE} cdecl; {$ENDIF}
484 begin
485 Result := 0;
486 IBError(ibxeIB60feature, ['isc_service_attach']); {do not localize}
487 end;
488
489 function isc_service_detach_stub(status_vector : PISC_STATUS;
490 service_handle : PISC_SVC_HANDLE):
491 ISC_STATUS; {$IFDEF WINDOWS} stdcall; {$ELSE} cdecl; {$ENDIF}
492 begin
493 Result := 0;
494 IBError(ibxeIB60feature, ['isc_service_detach']); {do not localize}
495 end;
496
497 function isc_service_query_stub(status_vector : PISC_STATUS;
498 service_handle : PISC_SVC_HANDLE;
499 recv_handle : PISC_SVC_HANDLE;
500 isc_arg4 : UShort;
501 isc_arg5 : PChar;
502 isc_arg6 : UShort;
503 isc_arg7 : PChar;
504 isc_arg8 : UShort;
505 isc_arg9 : PChar):
506 ISC_STATUS; {$IFDEF WINDOWS} stdcall; {$ELSE} cdecl; {$ENDIF}
507 begin
508 Result := 0;
509 IBError(ibxeIB60feature, ['isc_service_query']); {do not localize}
510 end;
511
512 function isc_service_start_stub(status_vector : PISC_STATUS;
513 service_handle : PISC_SVC_HANDLE;
514 recv_handle : PISC_SVC_HANDLE;
515 isc_arg4 : UShort;
516 isc_arg5 : PChar):
517 ISC_STATUS; {$IFDEF WINDOWS} stdcall; {$ELSE} cdecl; {$ENDIF}
518 begin
519 Result := 0;
520 IBError(ibxeIB60feature, ['isc_service_start']); {do not localize}
521 end;
522
523 procedure isc_encode_sql_date_stub(tm_date : PCTimeStructure;
524 ib_date : PISC_DATE);
525 {$IFDEF WINDOWS} stdcall; {$ELSE} cdecl; {$ENDIF}
526 begin
527 IBError(ibxeIB60feature, ['isc_encode_sql_date']); {do not localize}
528 end;
529
530 procedure isc_encode_sql_time_stub(tm_date : PCTimeStructure;
531 ib_time : PISC_TIME);
532 {$IFDEF WINDOWS} stdcall; {$ELSE} cdecl; {$ENDIF}
533 begin
534 IBError(ibxeIB60feature, ['isc_encode_sql_time']); {do not localize}
535 end;
536
537 procedure isc_encode_timestamp_stub(tm_date : PCTimeStructure;
538 ib_timestamp : PISC_TIMESTAMP);
539 {$IFDEF WINDOWS} stdcall; {$ELSE} cdecl; {$ENDIF}
540 begin
541 IBError(ibxeIB60feature, ['isc_encode_sql_timestamp']); {do not localize}
542 end;
543
544 procedure isc_decode_sql_date_stub(ib_date : PISC_DATE;
545 tm_date : PCTimeStructure);
546 {$IFDEF WINDOWS} stdcall; {$ELSE} cdecl; {$ENDIF}
547 begin
548 IBError(ibxeIB60feature, ['isc_decode_sql_date']); {do not localize}
549 end;
550
551 procedure isc_decode_sql_time_stub(ib_time : PISC_TIME;
552 tm_date : PCTimeStructure);
553 {$IFDEF WINDOWS} stdcall; {$ELSE} cdecl; {$ENDIF}
554 begin
555 IBError(ibxeIB60feature, ['isc_decode_sql_time']); {do not localize}
556 end;
557
558 procedure isc_decode_timestamp_stub(ib_timestamp : PISC_TIMESTAMP;
559 tm_date : PCTimeStructure);
560 {$IFDEF WINDOWS} stdcall; {$ELSE} cdecl; {$ENDIF}
561 begin
562 IBError(ibxeIB60feature, ['isc_decode_timestamp']); {do not localize}
563 end;
564 initialization
565
566 finalization
567 FreeIBLibrary;
568 end.