/*
* BBKライブラリアクセスサンプル
*
* (c) 1998,BearBeetle
*/
#include <stdio.h>
#include <windows.h>
#include "..\include\bbk.h"
/*
* BBKライブラリ APIへのポインタ
*/
BOOL (FAR *lpfnBBK_GetMemoryDial)(BBK_ARGUMENT *,BBK_MEMORY_DIAL_DATAS *,long,long);
BOOL (FAR *lpfnBBK_SetMemoryDial)(BBK_ARGUMENT *,BBK_MEMORY_DIAL_DATAS *,long,long);
BOOL (FAR *lpfnBBK_AllClearMemoryDial)(BBK_ARGUMENT *);
BOOL (FAR *lpfnBBK_GetMyDial)(BBK_ARGUMENT *,char *,long *);
/*
* エラーの表示
*/
void DisplayBBKError(BBK_ARGUMENT *stArg)
{
char *strErrString;
switch(stArg->enLastErrType){
case BBK_SYNTAX_ERR: // BBK_ API呼び出しの文法エラー
strErrString="BBK_SYNTAX_ERR";
break;
case BBK_INVALID_VAL_ERR: // BBK_ APIへの引数が不正
strErrString="BBK_INVALID_VAL_ERR";
break;
case BBK_INVALID_PASSWD_ERR:// 暗証番号が違う
strErrString="BBK_INVALID_PASSWD_ERR";
break;
case BBK_IF_INIT_ERR: // BBKライブが内部的に呼び出すI/F関数の初期化エラー
strErrString="BBK_IF_INIT_ERR";
break;
case BBK_IF_WR_ERR:
strErrString="BBK_IF_WR_ERR";
break;
case BBK_CMD_ERR: // 携帯電話の反応がおかしい
strErrString="BBK_CMD_ERR";
break;
default:
strErrString="Uncknown error";
break;
}
fprintf(stderr,"BBK Library Err Type:%s\n",strErrString);
}
/*
* ライブラリの開放
*/
BOOL FreeBBKLibrary(HINSTANCE hInstBBK)
{
return FreeLibrary(hInstBBK);
}
/*
* ライブラリのロードとポインタの取得
*/
BOOL LoadBBKLibrary(HINSTANCE hInstBBK)
{
// DLLのロード
hInstBBK=LoadLibrary("BBK.DLL");
if( hInstBBK <= (HINSTANCE)HINSTANCE_ERROR ){
fprintf(stderr,"BBK.DLLのロードに失敗しました\n");
return FALSE;
}
// ポインタの取得
lpfnBBK_GetMemoryDial=(BOOL (FAR *)(BBK_ARGUMENT *,BBK_MEMORY_DIAL_DATAS *,long,long))
GetProcAddress(hInstBBK,"BBK_GetMemoryDial");
if(lpfnBBK_GetMemoryDial==NULL){
fprintf(stderr,"BBK_GetMemoryDialのアドレスが取れません\n");
FreeBBKLibrary(hInstBBK);
return FALSE;
}
lpfnBBK_SetMemoryDial=(BOOL (FAR *)(BBK_ARGUMENT *,BBK_MEMORY_DIAL_DATAS *,long,long))
GetProcAddress(hInstBBK,"BBK_SetMemoryDial");
if(lpfnBBK_SetMemoryDial==NULL){
fprintf(stderr,"BBK_SetMemoryDialのアドレスが取れません\n");
FreeBBKLibrary(hInstBBK);
return FALSE;
}
lpfnBBK_AllClearMemoryDial=(BOOL (FAR *)(BBK_ARGUMENT *))
GetProcAddress(hInstBBK,"BBK_AllClearMemoryDial");
if(lpfnBBK_AllClearMemoryDial==NULL){
fprintf(stderr,"BBK_AllClearMemoryDialのアドレスが取れません\n");
FreeBBKLibrary(hInstBBK);
return FALSE;
}
lpfnBBK_GetMyDial=(BOOL (FAR *)(BBK_ARGUMENT *,char *,long *))
GetProcAddress(hInstBBK,"BBK_GetMyDial");
if(lpfnBBK_GetMyDial==NULL){
fprintf(stderr,"BBK_GetMyDialのアドレスが取れません\n");
FreeBBKLibrary(hInstBBK);
return FALSE;
}
return TRUE;
}
/*
* メモリダイヤルの読出し
* (BBK_GetMemoryDialコール)
*/
void GetMemoryDial(BBK_ARGUMENT *stArg,BBK_MEMORY_DIAL_DATAS *stMemDialDatas)
{
long lRecode,lRecodeStart,lRecodeEnd;
// パラメータ設定
printf("読込開始レコード番号, 終了レコード番号:");
scanf("%d,%d",&lRecodeStart,&lRecodeEnd);
// BBKライブラリ呼出し
if(lpfnBBK_GetMemoryDial(stArg,stMemDialDatas,lRecodeStart,lRecodeEnd)==FALSE){
DisplayBBKError(stArg);
return;
}
// 結果の表示
printf("--- 結果(番号,インデックス名,電話番号,グループ,種別, シークレット, 文字コード) ---\n");
for(lRecode=lRecodeStart; lRecode<=lRecodeEnd; lRecode++){
printf("%3u: %s, %s,%3u, %2X, %u, %u\n",lRecode,
stMemDialDatas->MDial[lRecode].strIndexName,
stMemDialDatas->MDial[lRecode].strDial,
stMemDialDatas->MDial[lRecode].lGroup,
stMemDialDatas->MDial[lRecode].bType,
stMemDialDatas->MDial[lRecode].IsSecret,
stMemDialDatas->MDial[lRecode].bIndexCode);
}
}
/*
* メモリダイヤルの書込み
* (BBK_SetMemoryDialコール)
*/
void SetMemoryDial(BBK_ARGUMENT *stArg,BBK_MEMORY_DIAL_DATAS *stMemDialDatas)
{
long lRecode,lRecodeStart,lRecodeEnd;
char dat[10];
// パラメータ設定
printf("書込開始レコード番号, 終了レコード番号:");
scanf("%d,%d",&lRecodeStart,&lRecodeEnd);
for(lRecode=lRecodeStart; lRecode<=lRecodeEnd; lRecode++){
printf("No.%3u:インデックス名:",lRecode);
scanf("%s",stMemDialDatas->MDial[lRecode].strIndexName);
printf("No.%3u:電話番号:",lRecode);
scanf("%s",stMemDialDatas->MDial[lRecode].strDial);
printf("No.%3u: グループ番号, 種別(0), シークレット, 文字コード :",lRecode);
scanf("%u,%x,%u,%u",
&stMemDialDatas->MDial[lRecode].lGroup,
&stMemDialDatas->MDial[lRecode].bType,
&stMemDialDatas->MDial[lRecode].IsSecret,
&stMemDialDatas->MDial[lRecode].bIndexCode);
stMemDialDatas->MDial[lRecode].lIndexNameLength =
strlen( stMemDialDatas->MDial[lRecode].strIndexName );
stMemDialDatas->MDial[lRecode].lDialLength =
strlen( stMemDialDatas->MDial[lRecode].strDial );
}
// 確認
printf("\n--- 番号,インデックス名,電話番号,グループ,種別, シークレット, 文字コード ---\n");
for(lRecode=lRecodeStart; lRecode<=lRecodeEnd; lRecode++){
printf("%3u: %s, %s,%3u, %2X, %u, %u\n",lRecode,
stMemDialDatas->MDial[lRecode].strIndexName,
stMemDialDatas->MDial[lRecode].strDial,
stMemDialDatas->MDial[lRecode].lGroup,
stMemDialDatas->MDial[lRecode].bType,
stMemDialDatas->MDial[lRecode].IsSecret,
stMemDialDatas->MDial[lRecode].bIndexCode);
}
printf("書き込みますか?[Y/N]");
scanf("%s",dat);
if(dat[0]!='y' && dat[0]!='Y')
return;
// BBKライブラリ呼出し
if(lpfnBBK_SetMemoryDial(stArg,stMemDialDatas,lRecodeStart,lRecodeEnd)==FALSE){
DisplayBBKError(stArg);
return;
}
}
/*
* メイン
*
*/
void main()
{
HINSTANCE hInstBBK; // BBKライブラリのハンドル
// 引数
static BBK_ARGUMENT stArg;
static BBK_MEMORY_DIAL_DATAS stMemDialDatas;
// ライブラリロード
if(LoadBBKLibrary(&hInstBBK) == FALSE )
exit(-1);
// 変数初期化
stArg.hWnd=NULL; // コンソールアプリはNULLにする
printf("デバイス名:(\"com1\",\"com2\",...):");
scanf("%s",stArg.strDevName);
printf("暗証番号(4ケタ):");
{
char buf[10];
scanf("%s",buf);
memcpy(stArg.lpbPassWord,buf,4);
}
// メインメニュー
int i=1;
while(i!=99){
printf("\nBBK Library acess sample\n\n");
printf(" 1:BBK_GetMemoryDial\n");
printf(" 2:BBK_SetMemoryDial\n");
printf(" 3:BBK_AllClearMemoryDial\n");
printf(" 4:BBK_GetMyDial\n");
printf("99:Exit\n");
printf("Command:");
char getstring[80];
scanf("%s",getstring);
i=atoi(getstring);
if(i<0){
continue;
}
switch(i){
case 1: // BBK_GetMemoryDial
GetMemoryDial(&stArg,&stMemDialDatas);
break;
case 2: // BBK_SetMemoryDial
SetMemoryDial(&stArg,&stMemDialDatas);
break;
case 3: // BBK_AllClearMemoryDial
lpfnBBK_AllClearMemoryDial(&stArg);
break;
case 4: // BBK_GetMyDial
{
char strDial[MAX_NUMBER_LENGTH+1];
long lLength=sizeof(strDial);
lpfnBBK_GetMyDial(&stArg,strDial,&lLength);
printf("自機電話番号:%s\n",strDial);
}
break;
case 99:// 終了
break;
default:
continue;
}
}
// ライブラリアンロード
if( FreeBBKLibrary(hInstBBK) == FALSE )
exit(-1);
exit(0);
}
|