第7章  I仕様書−データエリア
RPGプログラマーの為のC言語講座
データエリアを使用するRPGプログラムは、UDSの指定を行うだけです。 簡単なので、RPGではよく使われる機能です。

     H            Y/                                    1
     H*---------------------------------------------------------------*
     H* PROGRAM-ID    :    ISPEC3R                                    *
     H* REMARKS       :    LDA                                     *
     H* AUTHOR        :    Y.IDE                                      *
     H* DATE-WRITEN   :    1999/8/15                                  *
     H* VERSION       :    01.00 ORIGINAL                             *
     H*---------------------------------------------------------------*
     I           UDS
     I                                        1   1 CHAR
     I                                        2  11 STRING
     C*
     C                     MOVE 'A'       CHAR
     C                     MOVEL'12345678'STRING
     C*
     C                     CALL 'ISPEC3'
     C*
     C                     SETON                     LR
     C                     RETRN
     C*

Cのプログラムでは、データエリアにアクセスするには、2つの方法があります。

1.システムAPIを使用する方法

2.Cのライブラリー関数で用意されている組み込み関数を利用する方法

1.システムAPIを使用する方法

/*---------------------------------------------------------------*/
/* PROGRAM-ID  : ISPEC3                                          */
/* REMARKS     : I仕様書データエリア                          */
/* AUTHOR      : Y.Ide                                           */
/* DATE-WRITEN : 1999/8/15                                       */
/* VERSION     : 01.00 ORIGINAL                                  */
/*---------------------------------------------------------------*/
/*  Cでデータエリアを使うには、APIの利用が必要です。         */

#include<stdio.h>
#include<qusec.h>
#include<QWCRDTAA.H>

typedef _Packed struct Rdtaa_Data_Returned
    {
       int  Bytes_Available;
       int  Bytes_Returned;
       char Type_Value_Returned[10];
       char Library_Name[10];
       int  Length_Value_Returned;
       int  Number_Decimal_Positions;
       char Value[120];
    } Rdtaa_Data_Returned_t;

void main(int argc, char *argv[])
{
  Rdtaa_Data_Returned_t LDA;
  int RcverLen = 37 + 120;
  char DataAraName[20] = "*LDA                ";
  int StartPos = 1;
  int DataLen = 120;
  Qus_EC_t err_code;

  err_code.Bytes_Provided = 0;

  QWCRDTAA(&LDA,RcverLen,DataAraName,StartPos,DataLen,&err_code);
  printf("%s",LDA.Value);
}

2.Cのライブラリー関数で用意されている組み込み関数を利用する方法

/*---------------------------------------------------------------*/
/* PROGRAM-ID  : ISPEC3                                          */
/* REMARKS     :I仕様書データエリア                       */
/* AUTHOR      : Y.Ide                                           */
/* DATE-WRITEN : 1999/8/22                                       */
/* VERSION     : 01.00 ORIGINAL                                  */
/*---------------------------------------------------------------*/
/* 組子関数を利用してデータエリアをアクセスする                */
#include <stdio.h>
#include <xxdtaa.h>

int main(void)
{
  char Value[1025] = {0};

 /* データエリアの名前*/
  _DTAA_NAME_T DataAraName = {"*LDA      ", "          "};

 /* RTVDTAARAの実行*/
  QXXRTVDA(DataAraName,1,1024,Value);

 /* データエリアの内容表示*/
  printf("%s",Value);

}