FMLを使用したOracle Tuxedo ATMIアプリケーションのプログラミング

     前  次    新規ウィンドウで目次を開く  新規ウィンドウで索引を開く  PDFとして表示 - 新規ウィンドウ  Adobe Readerを入手 - 新規ウィンドウ
コンテンツはここから始まります

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に関する項


  先頭に戻る       前  次