Page History
...
The X_ALLOW_10_0_STRUCTURES define must be disabled by a set of #ifdef … #endif at the beginning of the C code, just before #include "x_bif000.h" :
#ifdef X_ALLOW_10_0_STRUCTURES
#undef X_ALLOW_10_0_STRUCTURES
#endif
Also the list entries's counter and list entry's index type must to be changed from X_SHORT to X_LIST_COUNT.
Used in an RDMLX function like this it could support the averaging of up to 999999 entries:
...
define field(#number)
...
type(*dec)
...
length(7)
...
def_list name(#list)
...
fields(#number)
...
type(*working)
...
entrys(999999)
...
define field(#mean)
...
type(*dec)
...
length(7)
...
...
use ud_average_
...
list with_arg(#list)
...
to_get(#mean)
...
An example of the user defined Built-In Function required to implement UD_AVERAGE_LIST might be coded like this:
/
...
=================================================================
...
*/
/*
...
==========
...
USER DEFINED BUILT-IN FUNCTION DEFINITION ===========
...
*/
/*
...
================================================================
...
*/
/* */
/*
...
Source File : U_BIF414.C */
/*
...
Entry Point Name : U_BuiltIn_414 */
/*
...
Linked DLL Name : U_BIF414.DLL */
/
...
* Shared Object Name : u_bif414.O */
/*
...
OS/Dependencies :
...
Yes/No */
/* */
/*
...
Amendment History : */
/* */
/*
...
Task Id Date Description */
/*
...
======= ==== =========== */
/* */
/*
...
================================================================
...
*/
...
#define U_BIF_FUNCTION U_BuiltIn_414
...
#define U_BIF_FUNCTION_
...
NAME "U_BuiltIn_414"
...
#define U_BIF_DESCRIPTION "
...
This is a description of this built-in"
...
#include <string.h>
...
#include <stdlib.h>
...
#include <stdio.h>
...
#include <limits.h>
...
#include "x_glodef.h"
...
#include "x_glousr.h"
...
#ifdef X_OPERATING_SYSTEM_WIN
...
#include <windows.h>
#endif
...
#include "x_funstr.h"
...
#include "x_funpro.h"
/* Enable RDMLX list*/
#ifdef X_ALLOW_10_0_STRUCTURES
#undef X_ALLOW_10_0_STRUCTURES
#endif
...
#include "x_bif000.h"
/*==================================================================*/
/* */
/*
...
Arguments :
...
pX_Ids -
...
Standard X_IDS system definition */
/* pX_Pro -
...
Standard X_PRO process definition */
/* pX_Fun -
...
Standard X_FUN function definition */
/* pX_Bif -
...
Standard X_BIF built-in definition */
/* X_Fld[: -
...
Standard X_FLD field definitions */
/* X_List[: -
...
Standard X_LIST list definitions */
/* sInCount -
...
Number of arguments passed */
/* sInVec[: -
...
Vectors of arguments */
/* sRetCount -
...
Number of return values */
/* sRetVec[: -
...
Vectors of return values */
/* */
/*==================================================================*/
X_VOID_
...
FUNCTION U_BIF_
...
FUNCTION (
...
U_BIF_STANDARD_
...
PARAMETERS )
{
/*
...
-------------------------------------------------------------
...
*/
/*
...
Handle a shutdown request (usually no activity is required) */
/*
...
-------------------------------------------------------------
...
*/
...
if (U_BIF_SHUTDOWN_REQUEST)
{
U_BIF_SET_GOOD_RETURN
}
/*
...
-------------------------------------------------------------
...
*/
/*
...
Else perform the requested activity */
/*
...
-------------------------------------------------------------
...
*/
else
{
U_BIF_DECLARE_LIST_
...
POINTER (pListArg1)
X_LIST_COUNT lEntrys = 0 ; /* Instead of X_SHORT sEntrys =
...
0; */
X_
...
LONG lAverage =
...
0;
/* -------------------------------------
...
*/
/*
...
Set list pointer and get entry count */
/*
...
-------------------------------------
...
*/
U_BIF_SET_ARG_LIST_
...
POINTER (pListArg1,
...
0)
U_BIF_GET_LIST_CURRENT_
...
ENTRYS (pListArg1,
...
lEntrys)
/*
...
-------------------------------------
...
*/
/*
...
If there is any entries in the list */
/*
...
-------------------------------------
...
*/
...
if (lEntrys > 0)
{
X_LIST_COUNT lCurrentEntry; /* Instead of X_SHORT sCurrentEntry; */
X_CHAR chFound;
X_LONG lValue;
X_
...
DOUBLE dTotal = 0;
/*
...
--------------------------------------
...
*/
/*
...
Process all list entries and calculate */
/*
...
the average value of all of them */
/*
...
--------------------------------------
...
*/
...
for (lCurrentEntry = 1; lCurrentEntry <= lEntrys; lCurrentEntry ++)
{
U_BIF_GET_ENTRY_FROM_
...
LIST (pListArg1,
...
lCurrentEntry,
...
chFound)
U_BIF_GET_LIST_COLUMN_AS_
...
LONG (pListArg1,
...
0,
...
lValue)
...
dTotal = dTotal + lValue;
}
...
lAverage = dTotal / lEntrys;
}
/*
...
-------------------------------------
...
*/
/*
...
Return the result in return value 1 */
/*
...
-------------------------------------
...
*/
U_BIF_SET_RET_FROM_
...
LONG (0,
...
lAverage);
U_BIF_SET_GOOD_RETURN
}
/*
...
-------------------------------------------------------------
...
*/
/*
...
Return control to caller */
/*
...
-------------------------------------------------------------
...
*/
U_BIF_RETURN;
}