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 }