COBOL入出力サービスルーチンの使用例を,次に示します。
:
#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) ;
}
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) ;
}
}
}