目次 前 次 PDF


RECORDの例

RECORDの例
このトピックには次の項が含まれます:
RECORDの例: COBOLコピーブック・ファイル
リスト8-1は、COBOLコピーブックの例です。
リスト8-1 COBOLコピーブック・ファイルの例
* customer.cpy
01 CUSTOMER.
05 name PIC X(10).
05 balance PIC S9(9) COMP-5.
05 address PIC X(80).
 
cpy2record customer.cpyを使用して、バイナリ形式のRECORD記述ファイルcustomer.Rを生成します。このRECORD記述ファイルは、cpy2recordによってCOBOLコピーブック・ファイルから生成され、実行時にアプリケーション・プログラムで使用されます。
RECORDの例: RECORDのプログラム
リスト8-2およびリスト8-3は、RECORDを使用してCOBOLレコードをRECORDバッファにマップする例です。RECORDの環境設定で説明した環境変数を正しく設定する必要があります。
リスト8-2 RECORDクライアント・プログラムの例
#include <stdio.h>
#include <atmi.h>
#include <fml32.h>
 
int main()
{
/* declare needed program variables */
struct RECORD *pRec;
int bal = 0;
int rtn;
long len;
 
/* attach to System/T as a client process */
if (tpinit((TPINIT *) NULL) == -1) {
(void) fprintf(stderr, "Tpinit failed\n");
exit(1);
}
 
/* allocate memory to store the RECORD data buffer */
len = Frneeded("CUSTOMER");
pRec = (struct RECORD *)tpalloc("RECORD", "CUSTOMER", len);
 
/* initialize buffer */
Rinit(pRec, NULL, 0, 0);
 
/* set the value in the RECORD */
Rset(pRec, "name", "Michael", C_STRING, 0, 0);
 
/* call service */
tpcall("CUSTSVC", (char *)pRec, 0, (char **)&pRec, &len, (long)0);
 
/* get item from reply */
rtn = Rget(pRec, "balance", &bal, C_INT, NULL, 0);
if( rtn < 0) {
userlog("Rget failed. %d %s\n",Ferror32, Fstrerror32(Ferror32));
}
userlog("The balance is %d\n", bal);
 
return 0;
}
 
リスト8-3 RECORDサーバー・プログラムの例
#include <stdio.h>
#include <atmi.h>
 
void CUSTSVC(TPSVCINFO *rqst)
{
/* declare needed program variables */
struct RECORD *pRec;
char name[20];
int balance = 12345;
int len = sizeof(name);
int rtn;
 
/* retrieve RECORD buffer */
pRec = (struct RECORD *)rqst->data;
 
/* get data from RECORD buffer */
rtn = Rget(pRec, "name", name, C_STRING, &len, 0);
if( rtn < 0) {
userlog("Rget failed. %d %s\n",Ferror32, Fstrerror32(Ferror32));
}
userlog("customer name: %s", name);
 
/* set data to RECORD buffer */
Rset(pRec, "balance", &balance, C_INT, 0, 0);
if( rtn < 0) {
userlog("Rset failed. %d %s\n",Ferror32, Fstrerror32(Ferror32));
}
 
tpreturn(TPSUCCESS, 0, (char *)pRec, 0L, 0);
}
 
関連項目
『Oracle Tuxedoコマンド・リファレンス』のcpy2recordに関する項

Copyright ©1994, 2017,Oracle and/or its affiliates. All rights reserved