データエリアを使用する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);
}
|
|