COBOL2002 使用の手引 手引編


13.8 COBOL入出力サービスルーチンの使用例

COBOL入出力サービスルーチンの使用例を,次に示します。

(例1)サービスルーチンを使ってファイルを読み込むCプログラム
   :
#include "CBL85fl.h"   /* COBOL提供ヘッダファイルの取り込み */
   :
CBLCOMFL   com ;         /* 管理情報インタフェース領域 */
CBLPARMFL  parm ;        /* パラメタインタフェース領域 */
char  filename[100] ;    /* ファイル名称 */
int   end_flg ;
 
memset(&com, 0x00, sizeof(CBLCOMFL)) ; /* テーブル0クリア */
memset(&parm, 0x00, sizeof(CBLPARMFL)) ;
/* OPENパラメタを設定する */
strcpy(filename, "/tmp/outfile") ;
com.cblcom_pathname = filename ;
com.cblcom_flopt    = CBLCOM_NOCHK ;
                                    /*属性チェックをしない*/
com.cblcom_openmode = CBLCOM_OPEN_INPUT ;
                                    /*OPENモードはINPUT*/
parm.cblparm_lock   = CBLPARM_NOLOCK ;     /*施錠なし*/
if (CBLOPEN(&com, &parm) != 0) {
                               /*CBLOPENサービスルーチン実行*/
ERROUT(&com) ;          /*エラー情報出力用サブルーチン呼び出し*/
return(-1) ;
}
if (memcmp(com.cblcom_form, "SAMV", 4) != 0) {
   printf("ファイルはCOBOL順可変長形式ではない。\n") ;
   return(-1) ;
}
/* READパラメタを設定する */
parm.cblparm_lock = CBLPARM_NOLOCK ;        /*施錠なし*/
/* OPENのリターン情報に従い入出力バッファ取得 */
if ((parm.cblparm_read_buf = malloc(com.cblcom_maxrec))
      == NULL) {
   :        /* 必要なメモリが取得できない場合のエラー処理 */
}
end_flg = 0 ;
while(end_flg == 0) {              /*レコード終了までループ*/
if (CBLREAD(&com , &parm) == 0) {
                               /*CBLREADサービスルーチン実行*/
   :                                /* READ成功時の処理 */
} else {
   end_flg = 1 ;                /*読み込み終了フラグ オン */
     if (com.cblcom_fs == 10) {  /*入出力状態値10:ファイル終了*/
       :                        /* ファイル終了時の処理 */
   } else {
      ERROUT(&com) ;             /*エラー処理*/
     }
  }
}
/* 終了処理 */
if (CBLCLOSE(&com, &parm) != 0) {
                             /*CBLCLOSEサービスルーチン実行*/
 ERROUT(&com) ;
}
(例2)エラー情報を出力するC副プログラム
extern void ERROUT(p1)
CBLCOMFL *p1 ;
{
   if ((p1->cblcom_msgno >= 3701)
        && (p1->cblcom_msgno <= 3703)) {
     printf("パラメタエラー(詳細情報番号=%d)\n",
                   p1->cblcom_cbldetail) ;
   } else {
     printf("メッセージ番号=%d\n",p1->cblcom_msgno) ;
     if (p1->cblcom_sysinf == CBLCOM_ERR_SYSTEM) {
        /* システムエラー情報がある時 */
        printf("システムコール番号=%dエラーコード=%d\n", 
                   p1->cblcom_funcno, p1->cblcom_errno) ;
    }
  }
}