Versions Compared

Key

  • This line was added.
  • This line was removed.
  • Formatting was changed.

...

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;
}