delphimvcframework/unittests/general/Several/bin32/firebird/examples/functions.c

150 lines
3.9 KiB
C
Raw Blame History

This file contains invisible Unicode characters

This file contains invisible Unicode characters that are indistinguishable to humans but may be processed differently by a computer. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

/*
* PROGRAM: InterBase Access Method
* MODULE: functions.c
* DESCRIPTION: External entrypoint definitions
*
* The contents of this file are subject to the Interbase Public
* License Version 1.0 (the "License"); you may not use this file
* except in compliance with the License. You may obtain a copy
* of the License at http://www.Inprise.com/IPL.html
*
* Software distributed under the License is distributed on an
* "AS IS" basis, WITHOUT WARRANTY OF ANY KIND, either express
* or implied. See the License for the specific language governing
* rights and limitations under the License.
*
* The Original Code was created by Inprise Corporation
* and its predecessors. Portions created by Inprise Corporation are
* Copyright (C) Inprise Corporation.
*
* All Rights Reserved.
* Contributor(s): ______________________________________.
*/
typedef int (*FUN_PTR)();
typedef struct {
char *fn_module;
char *fn_entrypoint;
FUN_PTR fn_function;
} FN;
static test();
extern char *fn_lower_c();
extern char *fn_strcat();
extern char *fn_substr();
extern char *fn_trim();
extern char *fn_trunc();
extern int fn_doy();
extern short *fn_moy();
extern char *fn_dow();
extern char *fn_sysdate();
extern int fn_add2();
extern double fn_mul();
extern double fn_fact();
extern double fn_abs();
extern double fn_max();
extern double fn_sqrt();
extern int fn_blob_linecount();
extern int fn_blob_bytecount();
extern char *fn_blob_substr();
static FN isc_functions [] = {
"test_module", "test_function", test,
"FUNCLIB", "fn_lower_c", (FUN_PTR) fn_lower_c,
"FUNCLIB", "fn_strcat", (FUN_PTR) fn_strcat,
"FUNCLIB", "fn_substr", (FUN_PTR) fn_substr,
"FUNCLIB", "fn_trim", (FUN_PTR) fn_trim,
"FUNCLIB", "fn_trunc", (FUN_PTR) fn_trunc,
"FUNCLIB", "fn_doy", (FUN_PTR) fn_doy,
"FUNCLIB", "fn_moy", (FUN_PTR) fn_moy,
"FUNCLIB", "fn_dow", (FUN_PTR) fn_dow,
"FUNCLIB", "fn_sysdate", (FUN_PTR) fn_sysdate,
"FUNCLIB", "fn_add2", (FUN_PTR) fn_add2,
"FUNCLIB", "fn_mul", (FUN_PTR) fn_mul,
"FUNCLIB", "fn_fact", (FUN_PTR) fn_fact,
"FUNCLIB", "fn_abs", (FUN_PTR) fn_abs,
"FUNCLIB", "fn_max", (FUN_PTR) fn_max,
"FUNCLIB", "fn_sqrt", (FUN_PTR) fn_sqrt,
"FUNCLIB", "fn_blob_linecount", (FUN_PTR) fn_blob_linecount,
"FUNCLIB", "fn_blob_bytecount", (FUN_PTR) fn_blob_bytecount,
"FUNCLIB", "fn_blob_substr", (FUN_PTR) fn_blob_substr,
0, 0, 0};
#ifdef SHLIB_DEFS
#define strcmp (*_libfun_strcmp)
#define sprintf (*_libfun_sprintf)
extern int strcmp();
extern int sprintf();
#endif
FUN_PTR FUNCTIONS_entrypoint (module, entrypoint)
char *module;
char *entrypoint;
{
/**************************************
*
* F U N C T I O N S _ e n t r y p o i n t
*
**************************************
*
* Functional description
* Lookup function in hardcoded table. The module and
* entrypoint names are null terminated, but may contain
* insignificant trailing blanks.
*
**************************************/
FN *function;
char *p, temp [64], *ep;
p = temp;
while (*module && *module != ' ')
*p++ = *module++;
*p++ = 0;
ep = p;
while (*entrypoint && *entrypoint != ' ')
*p++ = *entrypoint++;
*p = 0;
for (function = isc_functions; function->fn_module; ++function)
if (!strcmp (temp, function->fn_module) && !strcmp (ep, function->fn_entrypoint))
return function->fn_function;
return 0;
}
static test (n, result)
int n;
char *result;
{
/**************************************
*
* t e s t
*
**************************************
*
* Functional description
* Sample extern function. Defined in database by:
*
* define function test module_name "test_module" entry_point "test_function"
* long by value,
* char [20] by reference return_argument;
*
**************************************/
char *end;
sprintf (result, "%d is a number", n);
end = result + 20;
while (*result)
result++;
while (result < end)
*result++ = ' ';
}