/////////////////////////////////////////////////////////////////////
//DBスケルトンサンプル 06/25/98
#include "lxapi.h" // NKIT
#include "dbapi.h" // for DB Engine
// 文字列
char far *msgAppName = "DB-0";
char far *msgQuit = "Quit";
char far *msgOK = "OK";
char far *msgNull = "";
char far **StringTable[] = {
&msgAppName, &msgQuit, &msgOK,
};
// グローバル変数
LHAPIBLOCK LhapiData;
EVENT_NORM app_event;
BOOL Done;
#define MAX_CARD_WNDS 16
char far *SysMgrPtrs[MAX_CARD_WNDS + 27]; // シスマネ管理 far_pointer_table
// 関数プロトタイプ
void far DoQuit(void);
int far MainHandler(PLHWINDOW Wnd, WORD Message, WORD Data, WORD Extra,...);
/////////////////////////////////////////////////////////////////////
// 以下、DBエンジン関連
DBBLOCK dblk; // DBブロック構造体
char db_filename[50] = "c:\\_dat\\phone.pdb"; // DBファイル名
char filetype = 'D'; // タイプ == GDB
char paswd[] = ""; // パスワード
int DB_open_and_setvpt(void);
/////////////////////////////////////////////////////////////////////
// ファンクションキー定義
LHFKEY MainFkeys[] = {
{ (PLHRES)&msgQuit, (PLHFUNC)DoQuit, 1, 0 },
{ (PLHRES)&msgOK, (PLHFUNC)CMD_DONE, 10+FKEY_LAST, FKEY_SENDMSG }
};
// メニュー定義
LHMENU MainMenu[] = {
{ (PLHRES)&msgQuit, (PLHFUNC)DoQuit, 0, 0, NO_HELP },
{ 0, 0, 0, 0}
};
// WINDOW 定義
LHWINDOW TDateTime = {
DateTime, 0, 0, 0, 0,
0, 0, 0, STYLE_DATETIME | STYLE_NOFOCUS,
NULL, NO_FKEYS, NO_MENU, NO_HELP
};
LHWINDOW MainTitle = {
TitleBar, 0, 0, 0, 0,
(PLHRES)&msgAppName, 0, 0, STYLE_NOFOCUS,
NULL, NO_FKEYS, (PLHMENU)&TDateTime, NO_HELP
};
LHWINDOW MainView = {
(PLHCLASS)MainHandler, 0, 0, 640, 200,
(PLHRES)&msgNull, 0, 0, 0,
NULL, MainFkeys, MainMenu, NO_HELP
};
// ハンドラー
int far MainHandler( PLHWINDOW Wnd, WORD Message, WORD Data, WORD Extra,...)
{
// ここへアプリケーションの動作が入る
return SubclassMsg(Object, Wnd, Message, Data, Extra);
}
void far DoQuit(void)
{
Done = TRUE;
}
int DB_open_and_setvpt(void) //DBオープン,と View_Pointer_Table セット
{
if (DB_Open(&dblk, db_filename, filetype, NULL, paswd, 0, 0) < 0)
return FALSE;
if (DB_SetCurrentViewpt(&dblk, 0) < 0) { //View_Ptr_Table を 0 に選択
DB_Close(&dblk);
return FALSE;
}
return TRUE; // ... エラー処理等はもっとマジメにした方が良い(^^;
}
void FixupFarPtrs(void)
{
int i;
for (i = 0; i < countof(StringTable); i++)
*((int *)StringTable[i] + 1) = _DS; // MS_C, LSI_C では修正必要
}
// メイン
void main(void)
{
InitializeLHAPI(&LhapiData);
m_init_app(SYSTEM_MANAGER_VERSION);
m_reg_app_name(msgAppName);
m_reg_far(&SysMgrPtrs, countof(SysMgrPtrs), 4); // far_pointer_Table 登録 m_flush_kb();
SetDefaultFont(FONT_NORMAL);
SetMenuFont(FONT_NORMAL);
DB_Init(); //DBの初期化
DB_open_and_setvpt(); //DBオープン,と View_Pointer_Table セット
SendMsg(&MainTitle, CREATE, CREATE_NORMAL, 0);
SendMsg(&MainView, CREATE, CREATE_FOCUS, 0);
Done = FALSE;
while (!Done) //以下イベントループ
{
DB_FlushFile(&dblk); //DB(バッファ内)データ書き込み
app_event.do_event = DO_EVENT;
m_action(&app_event);
switch (app_event.kind)
{
case E_ACTIV:
case E_REFRESH:
FixupFarPtrs();
DB_Reactivate(&dblk); //DB再アクティブ化
ReactivateLHAPI(&LhapiData);
break;
case E_DEACT:
DB_Deactivate(&dblk); //DB非アクティブ化
DeactivateLHAPI();
break;
case E_TERM:
case E_BREAK:
FixupFarPtrs();
Done = TRUE;
break;
case E_NONE:
SendMsg(&TDateTime, DRAW, DRAW_ALL, 0);
break;
case E_KEY:
SendFocusMsg(KEYSTROKE, app_event.data, app_event.scan);
break;
}
}
DB_Close(&dblk); //DBクローズ
app_event.do_event = DO_FINI;
m_action(&app_event);
}
/////////////////////////////////////////////////////////////////////
|
Count (03/27/1999) ->
update 03/27/1999, since 06/25/1998(original)
Copyright (c) 1999 by guel. All rights reserved.