Versions Compared

Key

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

...

例 - RDML 作業リストの操作

2 番目の例は、最初に紹介した例の簡単なバリエーションです。  

Wiki Markup2 番目の例は、最初に紹介した例の簡単なバリエーションです。  これは、UD_AVERAGE_LIST により呼び出され、複数の番号からなる RDML "作業リスト" を引き渡せるようにします。

このリストの値はすべて集められ、その平均値が算出されます。

このファンクションの一意識別子は 414 です。

必須の引数が 1 つあり、それは、複数の数値からなる作業リストです。

必須の戻り値も 1 つで、これが数値リストの平均値です。

この RDML ファンクションで使用され、平均値を算出するエントリーは 1,000 までサポートされます。   define fieldまでサポートされます。

     define field(#number)

...

 type(*dec)

...

 length(7)

...

                 
  def_list name(#list)

...

 fields(#number)

...

 type(*working)

...

        
           entrys(1000)

...

                                      
  define field(#mean)

...

 type(*dec)

...

 length(7)

...

                   
                                                             
 

...

use  ud_average_

...

list with_arg(#list)

...

 to_get(#mean)

...

         

  UD_AVERAGE_LIST

...

を導入するために必要となるユーザー定義組み込み関数のコードは例えば以下のようになります。 
/

...

 =================================================================

...

 */
/*

...

 ========== ユーザー定義組み込み関数の定義  =

...

==========

...

 */
/*

...

 ================================================================

...

 */
/*                                                                  */
/*

...

 ソース ファイル           : U_BIF414.C                           */
/*

...

 エントリー ポイント名     : U_Builtin_

...

414                        */
/*

...

 リンク先 DLL 名           : U_BIF414.DLL                         */
/*

...

 共有オブジェクト名        : u_bif414.O                           */
/*

...

 OS/依存性                 : Yes/No                               */
/*                                                                  */
/*

...

 修正履歴   :                                                     */
/*                                                                  */

...

 /* タスクID  日付    説明                                           */
/* =======

...

   ====    ===========

...

                                    */
/*                                                                  */
/*

...

 ================================================================

...

 */
#define

...

U_BIF_FUNCTION       U_Builtin_414

...


#define U_BIF_FUNCTION_

...

NAME "U_Builtin_414"
#define

...

U_BIF_

...

DESCRIPTION   "この組み込み関数の説明" 

#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"

...

  #include "x_bif000.h"
/*==================================================================*/
/*                                                                  */
/*

...

 引数          : pX_Ids       - 標準 X_IDS システム定義           */
/*                 pX_Pro       - 標準 X_PRO プロセス定義 */
/*                pX_Fun       - 標準 X_FUN ファンクション定義 */
/*                pX_Bif       - 標準 X_BIF 組み込み関数定義 */
/*                X_Fld[:      - 標準 X_FLD フィールド定義   */
/*                X_List[:     - 標準 X_LIST リスト定義   */
/*                sInCount     - 引き渡された引数の数   */
/*                sInVec[:     - 引数のベクター              */
/*                sRetCount    - 戻り値の数             */
/*                 sRetVec[:    - 戻り値のベクター           */
/*                                                                  */
/*==================================================================*/
 X_VOID_

...

FUNCTION U_BIF_

...

FUNCTION (

...

 U_BIF_STANDARD_

...

PARAMETERS )

...

 {

   /*

...

 -------------------------------------------------------------

...

 */
   /*

...

 シャットダウン要求の処理 (通常はアクティビティは不要)

...

         */
   /*

...

 -------------------------------------------------------------

...

 */
    if

...

(U_BIF_SHUTDOWN_REQUEST)
   

...

{
      U_BIF_SET_GOOD_RETURN
   

...

}
   /*

...

 -------------------------------------------------------------

...

 */
   /*

...

 それ以外 (ELSE)

...

 は要求のアクティビティを実行                  */
   /*

...

 -------------------------------------------------------------

...

 */
    else
   

...

{

      U_BIF_DECLARE_LIST_

...

POINTER (pListArg1)
      X_SHORT  sEntrys  =

...

 0;
      X_

...

LONG   lAverage =

...

 0;

      /*

...

 ----------------------------------------------

...

 */
      /*

...

 リスト ポインターを設定し、エントリー数を取得  */
      /*

...

 ----------------------------------------------

...

 */

       U_BIF_SET_ARG_LIST_

...

POINTER (pListArg1,

...

 0)
       U_BIF_GET_LIST_CURRENT_

...

ENTRYS (pListArg1,

...

 sEntrys)

      /*

...

 -------------------------------------

...

 */
      /*

...

  リストにエントリーが存在する場合     */
      /*

...

 -------------------------------------

...

 */

...

       if (sEntrys > 0)
      {
         X_SHORT  sCurrentEntry;
         X_CHAR   chFound;
         X_LONG   lValue;
         X_

...

DOUBLE dTotal = 0;

         /*

...

 --------------------------------------

...

 */
         /*

...

 リストのエントリーすべてを処理し、     */
         /*

...

 全エントリー値の平均を算出             */
         /*

...

 --------------------------------------

...

 */

      for

...

(

...

sCurrentEntry =

...

 1; sCurrentEntry <= sEntrys; sCurrentEntry++)
        

...

{
           U_BIF_GET_ENTRY_FROM_

...

LIST (pListArg1,

...

 sCurrentEntry,

...

 chFound)
           U_BIF_GET_LIST_COLUMN_AS_

...

LONG (pListArg1,

...

 0,

...

 lValue)
           dTotal = dTotal + lValue;
         }
          lAverage = dTotal / sEntrys;
       }
      /* -------------------------------------

...

 */
      /*

...

 結果を値 1 に返す                     */
      /*

...

 -------------------------------------

...

 */
        U_BIF_SET_RET_FROM_

...

LONG (0,

...

 lAverage);
        U_BIF_SET_GOOD_RETURN
    

...

}

   /*

...

 -------------------------------------------------------------

...

 */
   /*

...

 コントロールを呼び出し元に返す                                */
   /* -------------------------------------------------------------

...

 */
    U_BIF_RETURN;

...

  }

この例に関する注意点は以下の通りです。

  • 作業リストの操作について。組み込み関数に引き渡された作業リストは、簡単な U_BIF を利用することで、読み込んで更新したり、データを追加、もしくはクリアすることができます。

  • 引数や戻り値とは異なり、作業リストのエントリーは、 0 から (N-1) ではなく、1 から N で番号が振られます。