home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
DOS/V Power Report 1997 March
/
VPR9703A.ISO
/
VPR_DATA
/
DOGA
/
SOURCES
/
POLYEDIT.LZH
/
MODEL
/
MAIN.CPP
< prev
next >
Wrap
C/C++ Source or Header
|
1996-07-23
|
19KB
|
780 lines
//
// OWL メイン関数
//
// 1996.1.6 T.Kobayashi
//
#include <owl\owlpch.h>
#include <owl\applicat.h>
#include <owl\framewin.h>
#include <owl\menu.h>
#include <stdio.h>
#include <dos.h>
#include <ctype.h>
#include <jctype.h>
#include <assert.h>
#include "ml.h"
#include "message.h"
#include "input.h"
#include "menu.h"
#include "button.h"
#include "model.h"
#include "model.rh"
extern "C" void SetWindowsMenu(int no);
// 外部参照
extern "C" void ViewSetDisplay(int h, int v);
extern "C" void ModelMain( int, char** );
extern "C" void RedrawAll( void );
extern int QuitFlag ;
extern int IdentCanClose;
extern MenuClass *Menu[MAX_MENU] ;
extern int Display_X, Display_Y;
//
// メインウインドウ
//
class TMyWindow : public TFrameWindow {
public:
TMyWindow();
~TMyWindow();
int KeyCode ;
int ShiftStat ;
int KanjiFlag ;
int MouseX, MouseY ;
int MouseLeft, MouseRight ;
int MouseMove ;
int CreateFlag ;
TMenu *MenuRoot;
TPopupMenu *MenuSub[MAX_MENU];
void KeyIn( int key )
{
KeyCode = key ;
}
protected:
virtual BOOL CanClose();
virtual void SetupWindow ();
// メッセージ応答関数
void Paint( TDC&, BOOL, TRect& );
void EvChar( UINT key, UINT count, UINT flags );
void EvKeyDown( UINT key, UINT count, UINT flags );
void EvKeyUp( UINT key, UINT count, UINT flags );
void EvLButtonDown( UINT modkeys, TPoint& point );
void EvRButtonDown( UINT modkeys, TPoint& point );
void EvLButtonUp( UINT modkeys, TPoint& point );
void EvRButtonUp( UINT modkeys, TPoint& point );
void EvLButtonDblClk( UINT modkeys, TPoint& point );
void EvRButtonDblClk( UINT modkeys, TPoint& point );
void EvMouseMove( UINT modkeys, TPoint& point );
void EvSize( UINT, TSize& );
void EvWindowPosChanging(WINDOWPOS far &windowPos); // 96/1/9 Taka2
void EvMenu(WPARAM param);
void EvMenuEnable(TCommandEnabler &tce);
void EvPaletteChanged(HWND hWndPalChg);
void EvPaletteIsChanging(HWND hWndPalChg);
BOOL EvQueryNewPalette();
DECLARE_RESPONSE_TABLE(TMyWindow);
};
#define EV_COMMAND_AND_ID_64(start, func) \
EV_COMMAND_AND_ID_16((start), func),\
EV_COMMAND_AND_ID_16((start)+16, func),\
EV_COMMAND_AND_ID_16((start)+32, func),\
EV_COMMAND_AND_ID_16((start)+48, func)
#define EV_COMMAND_AND_ID_16(start, func) \
EV_COMMAND_AND_ID_4((start), func),\
EV_COMMAND_AND_ID_4((start)+ 4, func),\
EV_COMMAND_AND_ID_4((start)+ 8, func),\
EV_COMMAND_AND_ID_4((start)+12, func)
#define EV_COMMAND_AND_ID_4(start, func) \
EV_COMMAND_AND_ID((start), func),\
EV_COMMAND_AND_ID((start)+1, func),\
EV_COMMAND_AND_ID((start)+2, func),\
EV_COMMAND_AND_ID((start)+3, func)
#define EV_COMMAND_ENABLE_64(start, func) \
EV_COMMAND_ENABLE_16((start), func),\
EV_COMMAND_ENABLE_16((start)+16, func),\
EV_COMMAND_ENABLE_16((start)+32, func),\
EV_COMMAND_ENABLE_16((start)+48, func)
#define EV_COMMAND_ENABLE_16(start, func) \
EV_COMMAND_ENABLE_4((start), func),\
EV_COMMAND_ENABLE_4((start)+ 4, func),\
EV_COMMAND_ENABLE_4((start)+ 8, func),\
EV_COMMAND_ENABLE_4((start)+12, func)
#define EV_COMMAND_ENABLE_4(start, func) \
EV_COMMAND_ENABLE((start), func),\
EV_COMMAND_ENABLE((start)+1, func),\
EV_COMMAND_ENABLE((start)+2, func),\
EV_COMMAND_ENABLE((start)+3, func)
DEFINE_RESPONSE_TABLE1(TMyWindow, TFrameWindow)
EV_WM_CHAR,
EV_WM_KEYDOWN,
EV_WM_KEYUP,
EV_WM_LBUTTONDOWN,
EV_WM_RBUTTONDOWN,
EV_WM_LBUTTONUP,
EV_WM_RBUTTONUP,
EV_WM_LBUTTONDBLCLK,
EV_WM_RBUTTONDBLCLK,
EV_WM_MOUSEMOVE,
EV_WM_SIZE,
EV_WM_WINDOWPOSCHANGING,
EV_WM_PALETTECHANGED,
EV_WM_PALETTEISCHANGING,
EV_WM_QUERYNEWPALETTE,
EV_COMMAND_ENABLE_64(KEY_MENU_START+ 0*KEY_MENU_STEP, EvMenuEnable),
EV_COMMAND_ENABLE_64(KEY_MENU_START+ 1*KEY_MENU_STEP, EvMenuEnable),
EV_COMMAND_ENABLE_64(KEY_MENU_START+ 2*KEY_MENU_STEP, EvMenuEnable),
EV_COMMAND_ENABLE_64(KEY_MENU_START+ 3*KEY_MENU_STEP, EvMenuEnable),
EV_COMMAND_ENABLE_64(KEY_MENU_START+ 4*KEY_MENU_STEP, EvMenuEnable),
EV_COMMAND_ENABLE_64(KEY_MENU_START+ 5*KEY_MENU_STEP, EvMenuEnable),
EV_COMMAND_ENABLE_64(KEY_MENU_START+ 6*KEY_MENU_STEP, EvMenuEnable),
EV_COMMAND_ENABLE_64(KEY_MENU_START+ 7*KEY_MENU_STEP, EvMenuEnable),
EV_COMMAND_ENABLE_64(KEY_MENU_START+ 8*KEY_MENU_STEP, EvMenuEnable),
EV_COMMAND_ENABLE_64(KEY_MENU_START+ 9*KEY_MENU_STEP, EvMenuEnable),
EV_COMMAND_ENABLE_64(KEY_MENU_START+10*KEY_MENU_STEP, EvMenuEnable),
EV_COMMAND_ENABLE_64(KEY_MENU_START+11*KEY_MENU_STEP, EvMenuEnable),
EV_COMMAND_ENABLE_64(KEY_MENU_START+12*KEY_MENU_STEP, EvMenuEnable),
EV_COMMAND_ENABLE_64(KEY_MENU_START+13*KEY_MENU_STEP, EvMenuEnable),
EV_COMMAND_ENABLE_64(KEY_MENU_START+14*KEY_MENU_STEP, EvMenuEnable),
EV_COMMAND_ENABLE_64(KEY_MENU_START+15*KEY_MENU_STEP, EvMenuEnable),
EV_COMMAND_AND_ID_64(KEY_MENU_START+ 0*KEY_MENU_STEP, EvMenu),
EV_COMMAND_AND_ID_64(KEY_MENU_START+ 1*KEY_MENU_STEP, EvMenu),
EV_COMMAND_AND_ID_64(KEY_MENU_START+ 2*KEY_MENU_STEP, EvMenu),
EV_COMMAND_AND_ID_64(KEY_MENU_START+ 3*KEY_MENU_STEP, EvMenu),
EV_COMMAND_AND_ID_64(KEY_MENU_START+ 4*KEY_MENU_STEP, EvMenu),
EV_COMMAND_AND_ID_64(KEY_MENU_START+ 5*KEY_MENU_STEP, EvMenu),
EV_COMMAND_AND_ID_64(KEY_MENU_START+ 6*KEY_MENU_STEP, EvMenu),
EV_COMMAND_AND_ID_64(KEY_MENU_START+ 7*KEY_MENU_STEP, EvMenu),
EV_COMMAND_AND_ID_64(KEY_MENU_START+ 8*KEY_MENU_STEP, EvMenu),
EV_COMMAND_AND_ID_64(KEY_MENU_START+ 9*KEY_MENU_STEP, EvMenu),
EV_COMMAND_AND_ID_64(KEY_MENU_START+10*KEY_MENU_STEP, EvMenu),
EV_COMMAND_AND_ID_64(KEY_MENU_START+11*KEY_MENU_STEP, EvMenu),
EV_COMMAND_AND_ID_64(KEY_MENU_START+12*KEY_MENU_STEP, EvMenu),
EV_COMMAND_AND_ID_64(KEY_MENU_START+13*KEY_MENU_STEP, EvMenu),
EV_COMMAND_AND_ID_64(KEY_MENU_START+14*KEY_MENU_STEP, EvMenu),
EV_COMMAND_AND_ID_64(KEY_MENU_START+15*KEY_MENU_STEP, EvMenu),
END_RESPONSE_TABLE;
TMyWindow *MainWindow ;
TApplication *Application ;
TDC *ModelDC = NULL ;
TPalette *ModelPalet = NULL;
extern int lastcolor;
extern int paletteowner;
static char logname[256];
TWindow *GetModelWindow(void)
{
return (TWindow*)MainWindow;
}
TMyWindow::TMyWindow() : TFrameWindow( 0, "Polygon Editor" )
{
// Attr.X = 256 ;
// Attr.Y = 0 ;
Attr.W = 768 ;
Attr.H = 512 ;
CreateFlag = 0 ;
KeyCode = 0 ;
ShiftStat = 0 ;
KanjiFlag = 0 ;
MouseX = 0 ;
MouseY = 0 ;
MouseLeft = 0 ;
MouseRight = 0 ;
MouseMove = 0 ;
MenuRoot = new TMenu();;
for (int i = 0; i < MAX_MENU; ++i) {
MenuSub[i] = new TPopupMenu();
MenuRoot->AppendMenu(MF_POPUP|MF_DISABLED, *MenuSub[i], "");
}
}
TMyWindow::~TMyWindow()
{
delete MenuRoot;
for (int i = 0; i < MAX_MENU; ++i) {
delete MenuSub[i];
}
}
void TMyWindow::SetupWindow()
{
TFrameWindow::SetupWindow();
SetMenu(*MenuRoot);
}
// 終了処理
TMyWindow::CanClose()
{
if (IdentCanClose >= 0) {
int flag;
DataStruct *top;
top = StackTop();
StackPushInt( 0 );
CallFunction( IdentCanClose, 1, top+1 );
flag= top[1].id.i ;
StackRelease( top );
if (flag) {
QuitFlag = 1;
}
return flag != 0;
} else {
QuitFlag = 1 ;
return TRUE ;
}
}
// 再表示
void TMyWindow::Paint( TDC& tdc, BOOL, TRect&rect)
{
if ( CreateFlag )
{
#if 1
TDC *restorDC ;
restorDC = ModelDC ;
ModelDC = &tdc ;
// TRect rect = tdc.GetClipBox();
//printf("(%d,%d)-(%d,%d)\n", rect.left, rect.top, rect.right, rect.bottom);
if (ModelPalet != NULL && paletteowner) {
ModelDC->SelectObject(*ModelPalet);
ModelDC->RealizePalette();
}
ModelDC->SetBkMode(TRANSPARENT);
lastcolor = -1;
char fontname[256] ;
ModelDC->GetTextFace( 256, fontname );
ModelDC->SelectObject( TFont( fontname, 0, 0, 0, 0, FW_NORMAL,
FIXED_PITCH|FF_DONTCARE ) );
// RedrawAll();
ViewFrame();
ViewLineAll( rect.left, rect.top, rect.right, rect.bottom, TRUE );
DrawTitleBar();
DrawControlPanel();
DrawUserButtonAll();
ModelDC = restorDC ;
lastcolor = -1;
#else
ViewFrame();
ViewLineAll( rect.left, rect.top, rect.right, rect.bottom, TRUE );
DrawTitleBar();
DrawControlPanel();
DrawUserButtonAll();
#endif
}
}
// キー入力
void TMyWindow::EvChar( UINT key, UINT, UINT flag )
{
if ( KanjiFlag )
{
KanjiFlag = FALSE ;
}
else
{
KanjiFlag = iskanji( key );
// ctrl-key
if ( ShiftStat == 2 && ( flag & 0xff ) == 0x73 )
key = 0x1f ; // ctrl-_
}
if (KeyCode == 0) {
KeyIn( (int)key );
}
}
typedef struct {
int vk, key;
} VkConvert;
VkConvert keytable[] = {
{VK_PRIOR, KEY_ROLLDOWN},
{VK_NEXT, KEY_ROLLUP},
{VK_END, KEY_UNDO},
{VK_HOME, KEY_HOME},
{VK_LEFT, KEY_LEFT},
{VK_UP, KEY_UP},
{VK_RIGHT, KEY_RIGHT},
{VK_DOWN, KEY_DOWN},
{VK_INSERT, KEY_INS},
{VK_DELETE, KEY_DEL},
{VK_HELP, KEY_HELP},
{VK_NUMPAD0, KEY_NUMPAD_0},
{VK_NUMPAD1, KEY_NUMPAD_1},
{VK_NUMPAD2, KEY_NUMPAD_2},
{VK_NUMPAD3, KEY_NUMPAD_3},
{VK_NUMPAD4, KEY_NUMPAD_4},
{VK_NUMPAD5, KEY_NUMPAD_5},
{VK_NUMPAD6, KEY_NUMPAD_6},
{VK_NUMPAD7, KEY_NUMPAD_7},
{VK_NUMPAD8, KEY_NUMPAD_8},
{VK_NUMPAD9, KEY_NUMPAD_9},
{VK_MULTIPLY, KEY_NUMPAD_ASTERISK},
{VK_ADD, KEY_NUMPAD_PLUS},
{VK_SUBTRACT, KEY_NUMPAD_MINUS},
{VK_DECIMAL, KEY_NUMPAD_PERIOD},
{VK_DIVIDE, KEY_NUMPAD_SLASH},
{VK_NUMLOCK, KEY_CLR},
};
void TMyWindow::EvKeyDown( UINT key, UINT, UINT )
{
#if 0
static int keycode[] = {
/* ROLLUP ROLLDN INS DEL UP LEFT */
0x22, 0x21, 0x2d, 0x2e, 0x26, 0x25,
/* RIGHT DOWN CLR HELP HOME */
0x27, 0x28, 0, 0, 0x24, -1 };
static int keycode[] = {
};
static int returncode[] = {
};
// shift
if ( key == 0x10 )
ShiftStat |= 1 ;
// ctrl
if ( key == 0x11 )
ShiftStat |= 2 ;
// function key
if ( VK_F1 <= key && key <= VK_F15 )
{
KeyIn( (int)( key - 0x70 ) + 1 + KEY_FUNC_START);
#if 0
if ( ShiftStat & 1 )
KeyIn( (int)( key - 0x70 ) + KEY_SFUNC_START);
else
KeyIn( (int)( key - 0x70 ) + KEY_FUNC_START);
#endif
}
else
{
for( int i = 0 ; keycode[i] != -1 ; i++ )
{
if ( key == keycode[i] )
KeyIn( (int)i + KEY_SPECIAL_START);
}
}
// ctrl-key
if ( ShiftStat == 2 && key == 222 )
KeyIn( 0x1e ); // ctrl-^
#endif
if ( key == VK_SHIFT) {
ShiftStat |= 1 ;
} else if ( key == VK_CONTROL ) {
ShiftStat |= 2 ;
} else if ('A' <= key && key <= 'Z') {
if (ShiftStat & 2) {
KeyIn( key - 'A' + 1);
} else if ( ShiftStat & 1 ) {
KeyIn( key );
} else {
KeyIn( key - 'A' + 'a');
}
} else if ( VK_F1 <= key && key <= VK_F15 ) {
KeyIn( (int)( key - VK_F1 ) + KEY_F1);
} else {
for (int i = 0; i < sizeof(keytable) / sizeof(keytable[0]); i++) {
if (keytable[i].vk == key) {
KeyIn(keytable[i].key);
break;
}
}
}
}
void TMyWindow::EvKeyUp( UINT key, UINT, UINT )
{
if ( key == VK_SHIFT )
ShiftStat &= 0xfe ;
if ( key == VK_CONTROL)
ShiftStat &= 0xfd ;
}
void TMyWindow::EvLButtonDown( UINT, TPoint& point )
{
MouseLeft = 1 ;
SetCapture();
}
void TMyWindow::EvRButtonDown( UINT, TPoint& point )
{
MouseRight = 1 ;
SetCapture();
}
void TMyWindow::EvLButtonUp( UINT, TPoint& point )
{
MouseLeft = 0 ;
ReleaseCapture();
}
void TMyWindow::EvRButtonUp( UINT, TPoint& point )
{
MouseRight = 0 ;
ReleaseCapture();
}
void TMyWindow::EvLButtonDblClk( UINT, TPoint& point )
{
MouseLeft = 1 ;
}
void TMyWindow::EvRButtonDblClk( UINT, TPoint& point )
{
MouseRight = 1 ;
}
void TMyWindow::EvMouseMove( UINT fwKeys, TPoint& point )
{
MouseLeft = (fwKeys & MK_LBUTTON) ? 1 : 0;
MouseRight = (fwKeys & MK_RBUTTON) ? 1 : 0;
ShiftStat = (ShiftStat & 0xfc)
| ((fwKeys & MK_CONTROL) ? 2 : 0)
| ((fwKeys & MK_SHIFT) ? 1 : 0);
MouseX = point.x ;
MouseY = point.y ;
}
void TMyWindow::EvSize( UINT, TSize& )
{
if ( CreateFlag )
{
TRect rect = GetClientRect();
#if 0
Cols = ( rect.right - rect.left ) / FontH ;
Lines = ( rect.bottom - rect.top) / FontV;
ViewSetDisplay(Cols * FontH - CTRL_WIDTH - ButtonAreaWidth, Lines * FontV);
#endif
Display_X = rect.right - rect.left;
Display_Y = rect.bottom - rect.top;
ViewSetDisplay(Display_X - CTRL_WIDTH - ButtonAreaWidth, Display_Y);
RedrawAll();
}
}
void TMyWindow::EvWindowPosChanging (WINDOWPOS far& windowPos) //96/1/9 Taka2
{
TFrameWindow::EvWindowPosChanging(windowPos);
#if 0
if ( CreateFlag )
{
int bx, by;
bx = GetSystemMetrics(SM_CXFRAME)*2;
by = GetSystemMetrics(SM_CYCAPTION)
+ GetSystemMetrics(SM_CYMENU)
+ GetSystemMetrics(SM_CYFRAME)*2;
windowPos.cx = ((windowPos.cx-bx) / FontH)*FontH + bx;
windowPos.cy = ((windowPos.cy-by) / FontV)*FontV + by;
}
#endif
}
void TMyWindow::EvPaletteChanged(HWND hWndPalChg)
{
if (hWndPalChg != HWindow && ModelDC != NULL && ModelPalet != NULL) {
paletteowner = FALSE;
ModelDC->RealizePalette();
//printf("not owner\n");
}
}
void TMyWindow::EvPaletteIsChanging(HWND hWndPalChg)
{
if (hWndPalChg != HWindow && ModelDC != NULL && ModelPalet != NULL) {
paletteowner = FALSE;
//printf("not owner\n");
}
}
BOOL TMyWindow::EvQueryNewPalette()
{
if (ModelDC != NULL && ModelPalet != NULL) {
//printf("owner\n");
paletteowner = TRUE;
ModelDC->RealizePalette();
// Invalidate();
// if (Selects > 0) {
// ViewLineAll( 0, 0, DISPLAY_X, DISPLAY_Y, TRUE );
// ViewLineSelectAll();
// }
// TDC tmpdc(*ModelDC);
// Paint(tmpdc, FALSE, TRect(DISPLAY_X-2, DISPLAY_Y-2, DISPLAY_X-1, DISPLAY_Y-1));
Paint(*ModelDC, FALSE, TRect(DISPLAY_X-2, DISPLAY_Y-2, DISPLAY_X-1, DISPLAY_Y-1));
return TRUE;
}
return FALSE;
}
void TMyWindow::EvMenu(WPARAM wparam) //96/1/10
{
KeyIn(wparam);
}
void TMyWindow::EvMenuEnable(TCommandEnabler &tce)
{
int x, y;
x = (tce.Id- KEY_MENU_START)/KEY_MENU_STEP;
y = (tce.Id - KEY_MENU_START)%KEY_MENU_STEP;
if (0 <= x && x <MAX_MENU && 0 <= y && y < Menu[x]->items) {
if (Menu[x]->query[y] >= 0) {
DataStruct *top;
CurrentX = x;
CurrentY = y;
top = StackTop();
StackPushInt( x );
StackPushInt( y );
CallFunction( Menu[x]->query[y], 2, top+2 );
StackRelease( top );
CurrentX = CurrentY = -1;
tce.SetText(Menu[x]->item[y]);
}
tce.SetCheck((Menu[x]->check[y] & MENU_CHECK) != 0);
tce.Enable((Menu[x]->check[y] & MENU_DISABLE) == 0);
}
}
//
// イベント取得関数
//
int GetKey()
{
int ret = MainWindow->KeyCode ;
MainWindow->KeyCode = 0 ;
return ret ;
}
int PeekKey()
{
return MainWindow->KeyCode;
}
int GetShift()
{
return MainWindow->ShiftStat ;
}
void GetMouseStat( int &left, int &right )
{
left = MainWindow->MouseLeft ;
right = MainWindow->MouseRight ;
}
void GetMousePos( int &x, int &y )
{
x = MainWindow->MouseX ;
y = MainWindow->MouseY ;
}
int GetMouseMove()
{
return MainWindow->MouseMove ;
}
//
// メニュー処理関数
//
static int isSeparator(char *name)
{
for (; *name; ++name) {
if (*name != '-') {
return FALSE;
}
}
return TRUE;
}
void SetWindowsMenu(int no)
{
int i;
if (no >= 0 && no < MAX_MENU) {
TPopupMenu *sub = MainWindow->MenuSub[no];
TMenu *root = MainWindow->MenuRoot;
for (i = sub->GetMenuItemCount(); i > 0; --i) {
sub->RemoveMenu(i-1, MF_BYPOSITION);
}
if (Menu[no] != NULL) {
for (i = 0; i <Menu[no]->items; ++i) {
UINT flag = (Menu[no]->exec[i] > 0 ? 0 : MF_DISABLED)
| (isSeparator(Menu[no]->item[i]) ? MF_SEPARATOR : 0);
sub->AppendMenu(MF_STRING | flag,
KEY_MENU_START+no*KEY_MENU_STEP+i,
Menu[no]->item[i]);
}
}
#if 0
char *title = (Menu[no] != NULL ? Menu[no]->title : "");
UINT flag = (Menu[no] != NULL && Menu[no]->items > 0 ? 0 : MF_DISABLED);
root->ModifyMenu(no, MF_BYPOSITION | MF_POPUP | flag, *sub, title);
#else
for (i = root->GetMenuItemCount(); i > 0; --i) {
root->RemoveMenu(i-1, MF_BYPOSITION);
}
for (i = 0; i < MAX_MENU && Menu[i] != NULL; i++) {
UINT flag = (Menu[i]->items > 0 ? 0 : MF_DISABLED);
root->AppendMenu(MF_POPUP|flag, *MainWindow->MenuSub[i], Menu[i]->title);
}
#endif
MainWindow->SetMenu(*root);
MainWindow->DrawMenuBar();
} else {
TMenu *root = MainWindow->MenuRoot;
#if 0
for (no = 0; no < MAX_MENU; ++no) {
TPopupMenu *sub = MainWindow->MenuSub[no];
root->ModifyMenu(no, MF_BYPOSITION | MF_POPUP | MF_DISABLED, *sub, "");
}
#else
for (i = root->GetMenuItemCount(); i > 0; --i) {
root->RemoveMenu(i-1, MF_BYPOSITION);
}
root->AppendMenu(MF_STRING|MF_DISABLED, 0, "");
#endif
MainWindow->SetMenu(*root);
MainWindow->DrawMenuBar();
}
}
//
// アプリケーションクラス
//
class TMyApp : public TApplication {
public:
TMyApp() : TApplication("PolyEdit") {}
protected:
BOOL isidle ;
void InitMainWindow();
virtual BOOL IdleAction( long );
};
static TMessageWindow *DebugWindow ;
void TMyApp::InitMainWindow()
{
isidle = TRUE ;
EnableCtl3d();
::MainWindow = new TMyWindow();
::MainWindow->SetIcon(this, ID_MODEL);
SetMainWindow( ::MainWindow );
#if 0
DebugWindow = new TMessageWindow( "message window", 200 );
DebugWindow->GetWindowPtr()->Create();
#endif
}
BOOL TMyApp::IdleAction( long idleCount )
{
if ( isidle )
{
TClientDC dc( *::MainWindow );
ModelDC = &dc ;
ModelDC->SetBkMode(TRANSPARENT);
lastcolor = -1;
char fontname[256] ;
ModelDC->GetTextFace( 256, fontname );
ModelDC->SelectObject( TFont( fontname, 0, 0, 0, 0, FW_NORMAL,
FIXED_PITCH|FF_DONTCARE ) );
TSize size = ModelDC->GetTextExtent( " ", 1 );
FontH = size.cx ;
FontV = size.cy ;
TRect rect = MainWindow->GetClientRect();
// Cols = ( rect.right - rect.left ) / FontH ;
// Lines = ( rect.bottom - rect.top ) / FontV ;
Display_X = rect.right - rect.left;
Display_Y = rect.bottom - rect.top;
::MainWindow->CreateFlag = 1 ;
int i;
strcpy(logname, _argv[0]);
i = strlen(logname);
if (logname[i-4] == '.') {
strcpy(logname + (i-3), "log");
unlink(logname);
} else {
logname[0] = '\0';
}
// ModelMain( 0, NULL );
ModelMain( _argc, _argv);
ModelDC = 0 ;
isidle = FALSE ;
}
return TApplication::IdleAction(idleCount) ;
}
int OwlMain(int /*argc*/, char* /*argv*/ [])
{
TMyApp app ;
Application = & app ;
return app.Run();
}
int printf(const char *fmt, ...)
{
#if 0
char buf[256] ;
va_list argptr ;
va_start( argptr, fmt );
vsprintf( buf, fmt, argptr );
va_end( argptr );
LogPrintf( buf );
#else
FILE *fp;
if (logname[0] && (fp = fopen(logname, "a")) != NULL) {
va_list argptr ;
va_start( argptr, fmt );
vfprintf( fp, fmt, argptr );
va_end( argptr );
fclose(fp);
}
#endif
return 0;
}