/* ヘッダファイルの宣言 */
#include "sample.h"
#include "bsrt.h" /* 共通定義ファイルの宣言 */
#include <memory.h>
#include <malloc.h>
#include <stdlib.h>
/* DLLの呼び出しに使用する構造体変数の宣言 */
BSRTFUNC func; /* 関数アドレス格納領域の宣言 */
BSRTPRIM prim; /* 主要情報テーブル領域の宣言 */
BSRTREC rec; /* レコード情報領域の宣言 */
BSRTFILE file; /* ファイル情報領域の宣言 */
BSPTR_BSRTKEY key; /* キー情報領域の宣言 */
BSRTOPT opt; /* オプション情報領域の宣言 */
int sample()
{
int rcd; /* 関数復帰値 */
HGLOBAL hHdlFile; /* 入力ファイルテーブル領域ハンドル */
HGLOBAL hHdlKey; /* キーテーブル領域ハンドル */
char szStr[80]; /* エラー詳細コード表示用領域 */
/* bsrtopen関数の引数情報設定・・・(1) */
/* BSRTPRIMの設定処理 ・・・(2) */
memset(&prim, 0x00, sizeof(BSRTPRIM)); /* BSRTPRIM(prim)領域の初期化 */
prim.function = BS_SORT; /* ソート機能 */
prim.optionfunc = 0; /* レコード処理指定なし */
prim.msglevel = BSMSG_LEVEL0; /* 処理情報を出力しない */
prim.cdmode = BSZD_AU; /* 入力データのコード系はASCII */
prim.chklevel = BSCHK_LEVEL0; /* BSORT関数のチェックをしない */
prim.rec_len = 15; /* レコード長は15バイト */
prim.fieldmode = BS_FLTFLD; /* 浮動フィールド指定 */
/* BSRTFILEの設定処理 */
memset(&file, 0x00, sizeof(BSRTFILE)); /* BSRTFILE(file)領域の初期化 */
/* 入力ファイルテーブル領域の確保・・・(3) */
hHdlFile = GlobalAlloc(GMEM_MOVEABLE | GMEM_ZEROINIT, BS_FILESIZE(1));
file.inpfile_tbl = (BSPTR_BSFILE)GlobalLock((HGLOBAL)hHdlFile);
file.inpfile_tbl->entry_no = 1; /* 入力ファイル数は1個 */
file.inpfile_tbl->file_addr[0] = (BSPTR_UCHAR)"sortin.txt";
/* ファイル名はsortin.txt */
/* 出力ファイル名の指定(ファイル名をポイントするアドレスを指定) */
file.outfile_addr = (BSPTR_UCHAR)"sortout.txt";
/* ファイル名はsortout.txt */
/* キーテーブル領域の確保・・・(4) */
hHdlKey = GlobalAlloc(GMEM_MOVEABLE | GMEM_ZEROINIT, BS_KEYTABSIZE(1));
key = (BSPTR_BSRTKEY)GlobalLock((HGLOBAL)hHdlKey);
/* キーテーブル領域の確保 */
memset(key, 0x00, BS_KEYTABSIZE(1)); /* BSRTKEY(key)領域の初期化 */
/* BSRTKEYの設定処理 */
key->entry_no = 1; /* キーの個数は1個 */
key->key_entry[0].key_position = 0; /* 比較位置は第1フィールド */
key->key_entry[0].key_length = 4; /* キー長は4バイト */
key->key_entry[0].key_type = BSKEY_ASC; /* データ形式はASCII文字 */
key->key_entry[0].key_order = BS_ASCND; /* 昇順に並べる */
/* BSRTRECの設定処理(初期化) */
memset(&rec, 0x00, sizeof(BSRTREC)); /* BSRTREC(rec)領域の初期化 */
/* BSRTOPTの設定処理(初期化) */
memset(&opt, 0x00, sizeof(BSRTOPT)); /* BSRTOPTの設定処理(初期化) */
/* bsrtopen関数の発行・・・(5) */
rcd = bsrtopen(BSRTVL, &func, &prim, &rec, key, &file, &opt);
/* bsrtopen関数の復帰値・・・(6) */
if(rcd != 0) /* エラーの表示例 */
{
wsprintf((LPSTR)szStr, "bsrtopen関数で詳細コード %d のエラーが発生しました.",
rec.errdetail);
MessageBox(NULL,
szStr,
"PowerSORT 関数呼び出しサンプル",
MB_OK | MB_ICONSTOP);
}
if(rcd == -1) /* bsrtopen関数実行環境構築後にエラー発生 */
{
bsrtclse(BSRTVL, &func, &prim, &rec);
GlobalUnlock((HGLOBAL)hHdlKey);
GlobalFree((HGLOBAL)hHdlKey);
GlobalUnlock((HGLOBAL)hHdlFile);
GlobalFree((HGLOBAL)hHdlFile);
return -1;
}
else if(rcd == -2) /* bsrtopen関数実行環境構築前にエラー発生 */
{
GlobalUnlock((HGLOBAL)hHdlKey);
GlobalFree((HGLOBAL)hHdlKey);
GlobalUnlock((HGLOBAL)hHdlFile);
GlobalFree((HGLOBAL)hHdlFile);
return -1;
}
/* bsrtclse関数の発行 */
rcd = bsrtclse(BSRTVL, &func, &prim, &rec);
/* bsrtclse関数の復帰値・・・(7) */
if(rcd == -1 ) /* bsrtclse関数でエラー発生 */
{
GlobalUnlock((HGLOBAL)hHdlKey);
GlobalFree((HGLOBAL)hHdlKey);
GlobalUnlock((HGLOBAL)hHdlFile);
GlobalFree((HGLOBAL)hHdlFile);
return -2;
}
GlobalUnlock((HGLOBAL)hHdlKey);
GlobalFree((HGLOBAL)hHdlKey);
GlobalUnlock((HGLOBAL)hHdlFile);
GlobalFree((HGLOBAL)hHdlFile);
return 0; /* 正常終了 */
} |