Hitachi

OpenTP1 Version 7 分散トランザクション処理機能 OpenTP1 プログラム作成リファレンス C言語編


7.2.2 SPPの例(サービス関数)

SPPのサービス関数のコーディング例を次に示します。

  10  /*
  20   * srv01 サービス関数
  30   */
  40  #include <stdio.h>
  50  #include <string.h>
  60  #include <dctam.h>
  70  #define  TAM_REC_SIZE  128
  80  
  90  extern  long tamfd ;   /* tamfile file-id */
 100  
 110  void svr01(in_data, in_leng, out_data, out_leng)
 120    char *in_data ;
 130    long *in_leng ;
 140    char *out_data ;
 150    long *out_leng ;
 160  {
 170  
 180  /*
 190   * 変数の定義
 200   */
 210    static struct DC_TAMKEY keyptr ;
 220    static char   *tamc_buf ;
 230    static char   tam_cntl_buf[TAM_REC_SIZE] ;
 240    static char   write_buf[TAM_REC_SIZE] ;
 250    struct tam_cntl_p {
 260                       char keyname[10] ;
 270                       char filler[118] ;
 280                      } *tam_cntl_p ;
 290    int    rcd ;
 300    int    write_size ;
 310    int    tamc_buf_size ;
 320    static char keypar[4][10] = {
 330                                  { 0x00, 0x00, 0x00, 0x00, 0x00,
 340                                    0x00, 0x00, 0x00, 0x00, 0x01} ,
 350                                  { 0x00, 0x00, 0x00, 0x00, 0x00,
 360                                    0x00, 0x00, 0x00, 0x00, 0x02} ,
 370                                  { 0x00, 0x00, 0x00, 0x00, 0x00,
 380                                    0x00, 0x00, 0x00, 0x00, 0x03} ,
 390                                  { 0x00, 0x00, 0x00, 0x00, 0x00,
 400                                    0x00, 0x00, 0x00, 0x00, 0x04} ,
 410                                } ;
 420    printf("SVR01:処理の開始 \n") ;
 430  /*
 440   * TAM_READ(TAMテーブルから第1レコードを入力)
 450   */
 460    keyptr.keyname = keypar[0] ;
 470    tamc_buf_size = TAM_REC_SIZE ;
 480    rcd = dc_tam_read(tamfd, &keyptr, 1, tam_cntl_buf,
 490                      tamc_buf_size, DCTAM_EQLSRC | DCTAM_MODIFY) ;
 500    if(rcd != DC_OK) {
 510      printf("SVR01:dc_tam_readに失敗しました。code = %d \n", rcd) ;
 520      strcpy(out_data, "SVR01:TAM READ FAILED") ;
 530      *out_leng = strlen(out_data) ;
 540      goto PROG_END ;
 550    }
 560  /*
 570   * TAM_REWRITE(TAMテーブルの第1レコードを検索前提の更新)
 580   */
 590    tam_cntl_p = (struct tam_cntl_p *)tam_cntl_buf ;
 600    memcpy(tam_cntl_p->filler, in_data, *in_leng) ;
 610    rcd = dc_tam_rewrite(tamfd, &keyptr, 1, tam_cntl_buf,
 620                                tamc_buf_size, DCNOFLAGS) ;
 630    if(rcd != DC_OK) {
 640      printf("SVR01:dc_tam_rewriteに失敗しました。code = %d \n", rcd) ;
 650      strcpy(out_data, "SVR01:TAM REWRITE FAILED") ;
 660      *out_leng = strlen(out_data) ;
 670      goto PROG_END ;
 680    }
 690  /*
 700   * TAM_WRITE(TAMテーブルの第2レコードを更新)
 710   */
 720    keyptr.keyname = keypar[1] ;
 730    tam_cntl_p = (struct tam_cntl_p *)write_buf ;
 740    memcpy(tam_cntl_p->keyname, keypar[1], 10) ;
 750    memcpy(tam_cntl_p->filler, in_data, *in_leng) ;
 760    write_size = TAM_REC_SIZE ;
 770    rcd = dc_tam_write(tamfd, &keyptr, 1, tam_cntl_p,
 780                              write_size, DCTAM_WRITE) ;
 790    if(rcd != DC_OK) {
 800      printf("SVR01:dc_tam_writeに失敗しました。code = %d \n", rcd) ;
 810      strcpy(out_data, "SVR01:TAM WRITE FAILED") ;
 820      *out_leng = strlen(out_data) ;
 830      goto PROG_END ;
 840    }
 850  /*
 860   * TAM_READ(TAMテーブルから第3レコードを入力)
 870   */
 880    keyptr.keyname = keypar[2] ;
 890    tamc_buf_size = TAM_REC_SIZE ;
 900    rcd = dc_tam_read(tamfd, &keyptr, 1, tam_cntl_buf,
 910                      tamc_buf_size, DCTAM_EQLSRC | DCTAM_MODIFY) ;
 920    if(rcd != DC_OK) {
 930      printf("SVR01:dc_tam_readに失敗しました。code = %d \n", rcd) ;
 940      strcpy(out_data, "SVR01:TAM READ FAILED") ;
 950      *out_leng = strlen(out_data) ;
 960      goto PROG_END ;
 970    }
 980  /*
 990   * TAM_READ_CANCEL(TAMテーブルの第3レコードの検索を取り消す)
1000   */
1010    rcd = dc_tam_read_cancel(tamfd, &keyptr, 1, DCNOFLAGS) ;
1020    if(rcd != DC_OK) {
1030      printf("SVR01:dc_tam_read_cancelに失敗しました。code = %d \n",
1040                                                                rcd) ;
1050      strcpy(out_data, "SVR01:TAM READ CANCEL FAILED") ;
1060      *out_leng = strlen(out_data) ;
1070      goto PROG_END ;
1080    }
1090  /*
1100   * TAM_delete(TAMテーブルの第4レコードを削除)
1110   */
1120    keyptr.keyname = keypar[3] ;
1130    rcd = dc_tam_delete(tamfd, &keyptr, 1,
1140                               NULL, 0, DCTAM_NOOUTREC) ;
1150    if(rcd != DC_OK) {
1160      printf("SVR01:dc_tam_deleteに失敗しました。code = %d \n", rcd) ;
1170      strcpy(out_data, "SVR01:TAM DELETE FAILED") ;
1180      *out_leng = strlen(out_data) ;
1190      goto PROG_END ;
1200    }
1210    strcpy(out_data, "SVR01:PROCESS COMPLETE") ;
1220    *out_leng = strlen(out_data) ;
1230  PROG_END :
1240    printf("SVR01:処理を終了します。\n") ;
1250    return ;
1260  }