xref: /trunk/main/basic/workben/mgrtest.cxx (revision 07a3d7f1)
1 /**************************************************************
2  *
3  * Licensed to the Apache Software Foundation (ASF) under one
4  * or more contributor license agreements.  See the NOTICE file
5  * distributed with this work for additional information
6  * regarding copyright ownership.  The ASF licenses this file
7  * to you under the Apache License, Version 2.0 (the
8  * "License"); you may not use this file except in compliance
9  * with the License.  You may obtain a copy of the License at
10  *
11  *   http://www.apache.org/licenses/LICENSE-2.0
12  *
13  * Unless required by applicable law or agreed to in writing,
14  * software distributed under the License is distributed on an
15  * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
16  * KIND, either express or implied.  See the License for the
17  * specific language governing permissions and limitations
18  * under the License.
19  *
20  *************************************************************/
21 
22 
23 
24 // MARKER(update_precomp.py): autogen include statement, do not remove
25 #include "precompiled_basic.hxx"
26 #include <vcl/svapp.hxx>
27 #include <vcl/wrkwin.hxx>
28 #include <vcl/toolbox.hxx>
29 #include <vcl/msgbox.hxx>
30 #include <vcl/sound.hxx>
31 #include <basic/basmgr.hxx>
32 #include <basic/sbx.hxx>
33 #include <basic/sbmod.hxx>
34 #include <basic/basrdll.hxx>
35 
36 //#include <sv.hxx>
37 //#include <basic.hxx>
38 //#include <sostor.hxx>
39 
40 // Defines for ToolBox-Id's
41 #define TB_NEW				1
42 #define TB_OPENSTORAGE		2
43 #define TB_SAVESTORAGE		3
44 #define TB_ORG				4
45 #define TB_CREATELIB1		10
46 #define TB_CREATELIB2		11
47 #define TB_CREATELIB3		12
48 #define TB_LOADLIB1			20
49 #define TB_LOADLIB2			21
50 #define TB_LOADLIB3			22
51 #define TB_STORELIBX		30
52 #define TB_UNLOADX			31
53 #define TB_LOADX			32
54 #define TB_EXECX			33
55 #define TB_REMOVEX			34
56 #define TB_REMOVEDELX		35
57 
58 #define TB_LIB0				40
59 #define TB_LIB1				41
60 #define TB_LIB2				42
61 #define TB_LIB3				43
62 
63 const char* pLib1Str = "Lib1";
64 const char* pLib2Str = "Lib2";
65 const char* pLib3Str = "Lib3";
66 
67 // Test-Application
68 class TestApp : public Application
69 {
70 public:
71 	virtual void Main( void );
72 	virtual void Main( int, char*[] );
73 };
74 
75 // Test-Window with a ToolBox to choose a test from
76 // and the typically used virtual methods
77 class TestWindow : public WorkWindow
78 {
79 private:
80 	ToolBox 		aToolBox;
81 	BasicManager*	pBasMgr;
82 
83 	void			CheckError();
84 	sal_uInt16			nLibX;
85 	DECL_LINK( BasicErrorHdl, StarBASIC * );
86 
87 
88 public:
89 					TestWindow();
90 					~TestWindow();
91 
92 	virtual void	Paint( const Rectangle& );
93 	virtual void	Resize();
94 	virtual void	KeyInput( const KeyEvent& rKeyEvt );
95 	virtual void	MouseMove( const MouseEvent& rMEvt );
96 	virtual void	MouseButtonDown( const MouseEvent& rMEvt );
97 	virtual void	MouseButtonUp( const MouseEvent& rMEvt );
98 
99 	DECL_LINK( TBSelect, ToolBox * );
100 	void			UpdateToolBox();
101 	void			ShowInfo();
102 };
103 
~TestWindow()104 TestWindow::~TestWindow()
105 {
106 }
107 
TestWindow()108 TestWindow::TestWindow() :
109 	WorkWindow( NULL, WB_APP | WB_STDWORK | WB_3DLOOK | WB_CLIPCHILDREN ) ,
110 	aToolBox( this, WinBits( WB_BORDER | WB_3DLOOK | WB_SCROLL | WB_LINESPACING ) )
111 {
112 	nLibX = 0;
113 
114 	aToolBox.SetButtonType( BUTTON_TEXT );
115 	aToolBox.SetLineCount( 2 );
116 	aToolBox.SetPosPixel( Point( 0, 0 ) );
117 	aToolBox.SetSelectHdl( LINK( this, TestWindow, TBSelect ) );
118 
119 	Font aFont;
120 	aFont.SetName( "Helv" );
121 	aFont.SetSize( Size( 0, 6 ) );
122 	aFont.SetPitch( PITCH_VARIABLE );
123 	aFont.SetFamily( FAMILY_SWISS );
124 	aFont.SetTransparent( sal_True );
125 	aFont.SetAlign( ALIGN_TOP );
126 	aToolBox.SetFont( aFont );
127 	SetFont( aFont );
128 
129 	aToolBox.InsertItem( TB_NEW, "New" );
130 	aToolBox.SetHelpText( TB_NEW, "New BasicManager" );
131 	aToolBox.InsertItem( TB_OPENSTORAGE, "Load" );
132 	aToolBox.SetHelpText( TB_OPENSTORAGE, "Load Storage D:\\MYSTORE.SVS" );
133 	aToolBox.InsertItem( TB_SAVESTORAGE, "Save" );
134 	aToolBox.SetHelpText( TB_SAVESTORAGE, "Save Storage D:\\MYSTORE.SVS" );
135 
136 	aToolBox.InsertSeparator();
137 
138 	aToolBox.InsertItem( TB_ORG, "Verwalten" );
139 	aToolBox.SetHelpText( TB_ORG, "Libaries verwalten" );
140 
141 	aToolBox.InsertSeparator();
142 
143 	aToolBox.InsertItem( TB_LIB0, "0" );
144 	aToolBox.SetHelpText( TB_LIB0, "Aktuelle Lib: STANDARD" );
145 	aToolBox.InsertItem( TB_LIB1, "1" );
146 	aToolBox.SetHelpText( TB_LIB1, "Aktuelle Lib: 1" );
147 	aToolBox.InsertItem( TB_LIB2, "2" );
148 	aToolBox.SetHelpText( TB_LIB2, "Aktuelle Lib: 2" );
149 	aToolBox.InsertItem( TB_LIB3, "3" );
150 	aToolBox.SetHelpText( TB_LIB3, "Aktuelle Lib: 3" );
151 
152 	aToolBox.InsertBreak();
153 	aToolBox.InsertItem( TB_CREATELIB1, "CreateLib1" );
154 	aToolBox.SetHelpText( TB_CREATELIB1, "Create Library LIB1" );
155 	aToolBox.InsertItem( TB_CREATELIB2, "CreateLib2" );
156 	aToolBox.SetHelpText( TB_CREATELIB2, "Create Library LIB2" );
157 	aToolBox.InsertItem( TB_CREATELIB3, "CreateLib3" );
158 	aToolBox.SetHelpText( TB_CREATELIB3, "Create Library LIB3" );
159 
160 	aToolBox.InsertSeparator();
161 	aToolBox.InsertItem( TB_LOADLIB1, "LoadLib1" );
162 	aToolBox.SetHelpText( TB_LOADLIB1, "Load Library LIB1" );
163 	aToolBox.InsertItem( TB_LOADLIB2, "LoadLib2" );
164 	aToolBox.SetHelpText( TB_LOADLIB2, "Load Library LIB2" );
165 	aToolBox.InsertItem( TB_LOADLIB3, "LoadLib3" );
166 	aToolBox.SetHelpText( TB_LOADLIB3, "Load Library LIB3" );
167 
168 	aToolBox.InsertSeparator();
169 	aToolBox.InsertItem( TB_STORELIBX, "StoreLibX" );
170 	aToolBox.SetHelpText( TB_STORELIBX, "Store Library LIBX" );
171 	aToolBox.InsertItem( TB_UNLOADX, "UnloadX" );
172 	aToolBox.SetHelpText( TB_UNLOADX, "Unload Library LIBX" );
173 	aToolBox.InsertItem( TB_LOADX, "LoadX" );
174 	aToolBox.SetHelpText( TB_LOADX, "Load Library LIBX" );
175 	aToolBox.InsertItem( TB_EXECX, "ExecX" );
176 	aToolBox.SetHelpText( TB_EXECX, "Execute 'Libary' LIBX" );
177 	aToolBox.InsertItem( TB_REMOVEX, "RemoveX" );
178 	aToolBox.SetHelpText( TB_REMOVEX, "Remove Library LIBX" );
179 	aToolBox.InsertItem( TB_REMOVEDELX, "RemDelX" );
180 	aToolBox.SetHelpText( TB_REMOVEDELX, "Remove and delete Library LIBX" );
181 
182 	pBasMgr = 0;
183 
184 	Show();
185 	UpdateToolBox();
186 	aToolBox.Show();
187 }
ShowInfo()188 void TestWindow::ShowInfo()
189 {
190 	Invalidate();
191 	Update();
192 	long nH = GetTextSize( "X" ).Height();
193 	if ( pBasMgr )
194 	{
195 		Point aPos( 10, aToolBox.GetSizePixel().Height()+5 );
196 		for ( sal_uInt16 nLib = 0; nLib < pBasMgr->GetLibCount(); nLib++ )
197 		{
198 			String aOutStr( nLib );
199 			aOutStr +=": ";
200 			StarBASIC* pL = pBasMgr->GetLib( nLib );
201 			aOutStr += '[';
202 			aOutStr += pBasMgr->GetLibName( nLib );
203 			aOutStr += "]<";
204 			if ( pL )
205 				aOutStr += pL->GetName();
206 			else
207 				aOutStr += "NoLoaded";
208 			aOutStr += ">, Storage='";
209 			aOutStr += pBasMgr->GetLibStorageName( nLib );
210 			aOutStr += "', bLoaded=";
211 			aOutStr += (sal_uInt16)pBasMgr->IsLibLoaded( nLib );
212 			DrawText( aPos, aOutStr );
213 			aPos.Y() += nH;
214 		}
215 	}
216 }
217 
UpdateToolBox()218 void TestWindow::UpdateToolBox()
219 {
220     // View of some buttons as checked or disabled if
221     // wished by tests
222     aToolBox.EnableItem( TB_ORG, (sal_Bool)(sal_uIntPtr)pBasMgr );
223 
224     aToolBox.EnableItem( TB_CREATELIB1, (sal_Bool)(sal_uIntPtr)pBasMgr );
225     aToolBox.EnableItem( TB_CREATELIB2, (sal_Bool)(sal_uIntPtr)pBasMgr );
226     aToolBox.EnableItem( TB_CREATELIB3, (sal_Bool)(sal_uIntPtr)pBasMgr );
227 
228     aToolBox.EnableItem( TB_LOADLIB1, (sal_Bool)(sal_uIntPtr)pBasMgr );
229     aToolBox.EnableItem( TB_LOADLIB2, (sal_Bool)(sal_uIntPtr)pBasMgr );
230     aToolBox.EnableItem( TB_LOADLIB3, (sal_Bool)(sal_uIntPtr)pBasMgr );
231 
232     aToolBox.EnableItem( TB_STORELIBX, (sal_Bool)(sal_uIntPtr)pBasMgr );
233     aToolBox.EnableItem( TB_EXECX, (sal_Bool)(sal_uIntPtr)pBasMgr );
234     aToolBox.EnableItem( TB_UNLOADX, (sal_Bool)(sal_uIntPtr)pBasMgr );
235     aToolBox.EnableItem( TB_LOADX, (sal_Bool)(sal_uIntPtr)pBasMgr );
236     aToolBox.EnableItem( TB_REMOVEX, (sal_Bool)(sal_uIntPtr)pBasMgr );
237     aToolBox.EnableItem( TB_REMOVEDELX, (sal_Bool)(sal_uIntPtr)pBasMgr );
238 
239     aToolBox.CheckItem( TB_LIB0, nLibX == 0 );
240     aToolBox.CheckItem( TB_LIB1, nLibX == 1 );
241     aToolBox.CheckItem( TB_LIB2, nLibX == 2 );
242     aToolBox.CheckItem( TB_LIB3, nLibX == 3 );
243 }
244 
IMPL_LINK(TestWindow,TBSelect,ToolBox *,p)245 IMPL_LINK( TestWindow, TBSelect, ToolBox *, p )
246 {
247 	sal_uInt16 nId = aToolBox.GetCurItemId();
248 	sal_Bool bChecked = aToolBox.IsItemChecked( nId );
249 	switch ( nId )
250 	{
251 		case TB_NEW:
252 		{
253 			delete pBasMgr;
254 			pBasMgr = new BasicManager( new StarBASIC );
255 			pBasMgr->SetStorageName( "d:\\mystore.svs" );
256 		}
257 		break;
258 		case TB_OPENSTORAGE:
259 		{
260 			delete pBasMgr;
261 			SvStorageRef xStorage = new SvStorage( "d:\\mystore.svs", STREAM_READ | STREAM_SHARE_DENYWRITE );
262 			DBG_ASSERT( xStorage.Is(), "Kein Storage!" );
263 			pBasMgr = new BasicManager( *xStorage );
264 		}
265 		break;
266 		case TB_SAVESTORAGE:
267 		{
268 			if ( pBasMgr)
269 			{
270 				SvStorageRef xStorage = new SvStorage( "d:\\mystore.svs" );
271 				DBG_ASSERT( xStorage.Is(), "Kein Storage!" );
272 				pBasMgr->Store( *xStorage );
273 			}
274 		}
275 		break;
276 		case TB_ORG:
277 		{
278 			if ( pBasMgr)
279 			{
280 				InfoBox( 0, "Organisieren..." ).Execute();
281 			}
282 		}
283 		break;
284 		case TB_CREATELIB1:
285 		{
286 			if ( pBasMgr )
287 			{
288 				sal_uInt16 nLib = pBasMgr->GetLibId( pBasMgr->CreateLib( pLib1Str ) );
289 				if ( nLib != LIB_NOTFOUND )
290 				{
291 					pBasMgr->SetLibStorageName( nLib, "d:\\mystore.svs" );
292 					StarBASIC* pLib = pBasMgr->GetLib( pLib1Str );
293 					DBG_ASSERT( pLib, "Lib?!" );
294 					String aSource( "Sub SubInLib1Mod1\nprint\"XXX\"\nEnd Sub");
295 					SbModule* pM = pLib->MakeModule( "ModLib1", aSource  );
296 					DBG_ASSERT( pM, "Modul?" );
297 					pLib->Compile( pM );
298 				}
299 				else
300 					InfoBox( 0, "CreateLibary fehlgeschlagen..." ).Execute();
301 			}
302 		}
303 		break;
304 		case TB_CREATELIB2:
305 		{
306 			if ( pBasMgr )
307 			{
308 				sal_uInt16 nLib = pBasMgr->GetLibId( pBasMgr->CreateLib( pLib2Str ) );
309 				if ( nLib != LIB_NOTFOUND )
310 				{
311 					pBasMgr->SetLibStorageName( nLib, "d:\\mystore.svs" );
312 					StarBASIC* pLib = pBasMgr->GetLib( pLib2Str );
313 					DBG_ASSERT( pLib, "Lib?!" );
314 					SbModule* pM = pLib->MakeModule( "ModuleLib2", "Sub SubInLib2\n print \"Tralala\" \nEnd Sub\n" );
315 					pLib->Compile( pM );
316 				}
317 				else
318 					InfoBox( 0, "CreateLibary fehlgeschlagen..." ).Execute();
319 			}
320 		}
321 		break;
322 		case TB_CREATELIB3:
323 		{
324 			if ( pBasMgr )
325 			{
326 				// liegt in einem anderen Storage !!!
327 				sal_uInt16 nLib = pBasMgr->GetLibId( pBasMgr->CreateLib( pLib3Str ) );
328 				if ( nLib != LIB_NOTFOUND )
329 				{
330 					pBasMgr->SetLibStorageName( nLib, "d:\\mystore2.svs" );
331 					StarBASIC* pLib = pBasMgr->GetLib( pLib3Str );
332 					DBG_ASSERT( pLib, "Lib?!" );
333 					SbModule* pM = pLib->MakeModule( "ModuleLib2", "Sub XYZInLib3\n print \"?!\" \nEnd Sub\n" );
334 					pLib->Compile( pM );
335 				}
336 				else
337 					InfoBox( 0, "CreateLibary fehlgeschlagen..." ).Execute();
338 			}
339 		}
340 		break;
341 		case TB_LOADLIB1:
342 		{
343 			if ( pBasMgr )
344 			{
345 				SvStorageRef xStorage = new SvStorage( "d:\\mystore.svs" );
346 				if ( !pBasMgr->AddLib( *xStorage, pLib1Str, sal_False ) )
347 					Sound::Beep();
348 			}
349 		}
350 		break;
351 		case TB_LOADLIB2:
352 		{
353 			if ( pBasMgr )
354 			{
355 				SvStorageRef xStorage = new SvStorage( "d:\\mystore.svs" );
356 				if ( !pBasMgr->AddLib( *xStorage, pLib2Str, sal_False ) )
357 					Sound::Beep();
358 			}
359 		}
360 		break;
361 		case TB_LOADLIB3:
362 		{
363 			if ( pBasMgr )
364 			{
365 				// liegt in einem anderen Storage !!!
366 				SvStorageRef xStorage = new SvStorage( "d:\\mystore2.svs" );
367 				if ( !pBasMgr->AddLib( *xStorage, pLib3Str, sal_False ) )
368 					Sound::Beep();
369 			}
370 		}
371 		break;
372 		case TB_STORELIBX:
373 		{
374 			if ( pBasMgr )
375 				pBasMgr->StoreLib( nLibX );
376 		}
377 		break;
378 		case TB_UNLOADX:
379 		{
380 			if ( pBasMgr )
381 				pBasMgr->UnloadLib( nLibX );
382 		}
383 		break;
384 		case TB_LOADX:
385 		{
386 			if ( pBasMgr )
387 				pBasMgr->LoadLib( nLibX );
388 		}
389 		break;
390 		case TB_REMOVEX:
391 		{
392 			if ( pBasMgr )
393 				pBasMgr->RemoveLib( nLibX, sal_False );
394 		}
395 		break;
396 		case TB_REMOVEDELX:
397 		{
398 			if ( pBasMgr )
399 				pBasMgr->RemoveLib( nLibX, sal_True );
400 		}
401 		break;
402 		case TB_EXECX:
403 		{
404 			if ( pBasMgr )
405 			{
406 				StarBASIC* pBasic = pBasMgr->GetLib( nLibX );
407 				if ( pBasic && pBasic->GetModules()->Count() )
408 				{
409 					pBasic->SetErrorHdl( LINK( this, TestWindow, BasicErrorHdl ) );
410 
411 					SbModule* pMod = (SbModule*)pBasic->GetModules()->Get( 0 );
412 					if ( pMod && pMod->GetMethods()->Count() )
413 						pMod->GetMethods()->Get(0)->GetInteger();
414 				}
415 			}
416 		}
417 		break;
418 
419 		case TB_LIB0:	nLibX = 0;
420 		break;
421 		case TB_LIB1:	nLibX = 1;
422 		break;
423 		case TB_LIB2:	nLibX = 2;
424 		break;
425 		case TB_LIB3:	nLibX = 3;
426 		break;
427 	}
428 
429 	UpdateToolBox();
430 	CheckError();
431 	ShowInfo();
432 	return 0;
433 }
434 
CheckError()435 void TestWindow::CheckError()
436 {
437 	 if ( pBasMgr )
438 	 {
439 		BasicError* pError = pBasMgr->GetFirstError();
440 		while ( pError )
441 		{
442 			String aErrorStr;
443 			String aReasonStr;
444 			switch ( pError->GetErrorId() )
445 			{
446 				case BASERR_ID_STDLIBOPEN:
447 					aErrorStr = "Standard-Lib konnte nicht geoffnet werden.";
448 				break;
449 				case BASERR_ID_STDLIBSAVE:
450 					aErrorStr = "Standard-Lib konnte nicht gespeichert werden.";
451 				break;
452 				case BASERR_ID_LIBLOAD:
453 					aErrorStr = "Lib konnte nicht geoffnet werden.";
454 				break;
455 				case BASERR_ID_LIBCREATE:
456 					aErrorStr = "Lib konnte nicht erzeugt werden.";
457 				break;
458 				case BASERR_ID_LIBSAVE:
459 					aErrorStr = "Lib konnte nicht gespeichert werden.";
460 				break;
461 				case BASERR_ID_MGROPEN:
462 					aErrorStr = "Manager konnte nicht geladen werden.";
463 				break;
464 				case BASERR_ID_MGRSAVE:
465 					aErrorStr = "Manager konnte nicht gespeichert werden.";
466 				break;
467 				case BASERR_ID_UNLOADLIB:
468 					aErrorStr = "Libary konnte nicht entladen werden.";
469 				break;
470 				case BASERR_ID_REMOVELIB:
471 					aErrorStr = "Libary konnte nicht entfernt werden.";
472 				break;
473 				default:
474 					aErrorStr = "Unbekannter Fehler!";
475 			}
476 
477 			switch ( pError->GetReason() )
478 			{
479 				case BASERR_REASON_OPENSTORAGE:
480 					aReasonStr = "Der Storage konnte nicht geoeffnet werden";
481 				break;
482 				case BASERR_REASON_OPENLIBSTORAGE:
483 					aReasonStr = "Der Lib-Storage konnte nicht geoeffnet werden";
484 				break;
485 				case BASERR_REASON_OPENMGRSTREAM:
486 					aReasonStr = "Der Manager-Stream konnte nicht geoeffnet werden";
487 				break;
488 				case BASERR_REASON_OPENLIBSTREAM:
489 					aReasonStr = "Der Basic-Stream konnte nicht geoeffnet werden";
490 				break;
491 				case BASERR_REASON_STDLIB:
492 					aReasonStr = "STANDARD-Lib";
493 				break;
494 				case BASERR_REASON_BASICLOADERROR:
495 					aReasonStr = "Fehler beim Laden des Basics";
496 				default:
497 					aReasonStr = " - ";
498 			}
499 
500 			String aErr( aErrorStr );
501 			aErr += "\nGrund: ";
502 			aErr += aReasonStr;
503 			InfoBox( 0, aErr ).Execute();
504 
505 			pError = pBasMgr->GetNextError();
506 		}
507 		pBasMgr->ClearErrors();
508 	 }
509 }
510 
Paint(const Rectangle & rRec)511 void __EXPORT TestWindow::Paint( const Rectangle& rRec )
512 {
513 }
514 
Resize()515 void __EXPORT TestWindow::Resize()
516 {
517 	Size aTBSz = aToolBox.CalcWindowSizePixel();
518 	aToolBox.SetSizePixel( Size( GetOutputSizePixel().Width(), aTBSz.Height()) );
519 	Invalidate();
520 	ShowInfo();
521 }
522 
KeyInput(const KeyEvent & rKEvt)523 void __EXPORT TestWindow::KeyInput( const KeyEvent& rKEvt )
524 {
525 	char nCharCode = rKEvt.GetCharCode();
526 	sal_uInt16 nCode = rKEvt.GetKeyCode().GetCode();
527 
528 	// Nur bei Alt-Return
529 	if ( ( nCode == KEY_RETURN ) && rKEvt.GetKeyCode().IsMod2() )
530 		;
531 	else
532 		WorkWindow::KeyInput( rKEvt );
533 
534 	UpdateToolBox();
535 }
536 
MouseMove(const MouseEvent & rMEvt)537 void __EXPORT TestWindow::MouseMove( const MouseEvent& rMEvt )
538 {
539 }
540 
MouseButtonDown(const MouseEvent & rMEvt)541 void __EXPORT TestWindow::MouseButtonDown( const MouseEvent& rMEvt )
542 {
543 	ShowInfo();
544 }
545 
MouseButtonUp(const MouseEvent & rMEvt)546 void __EXPORT TestWindow::MouseButtonUp( const MouseEvent& rMEvt )
547 {
548 	UpdateToolBox();
549 }
550 
IMPL_LINK(TestWindow,BasicErrorHdl,StarBASIC *,pBasic)551 IMPL_LINK( TestWindow, BasicErrorHdl, StarBASIC *, pBasic )
552 {
553 	String aErrorText( pBasic->GetErrorText() );
554 
555 	String aErrorTextPrefix;
556 	if( pBasic->IsCompilerError() )
557 	{
558 		aErrorTextPrefix = "Compilererror: ";
559 	}
560 	else
561 	{
562 		aErrorTextPrefix = "Runtimeerror: ";
563 		aErrorTextPrefix += pBasic->GetErrorCode();
564 		aErrorTextPrefix += " ";
565 	}
566 
567 	InfoBox( 0, String( aErrorTextPrefix + aErrorText ) ).Execute();
568 	return 0;
569 }
570 
Main(void)571 void __EXPORT TestApp::Main( void )
572 {
573 	Main( 0, NULL );
574 }
575 
Main(int,char * [])576 void __EXPORT TestApp::Main( int, char*[] )
577 {
578 	BasicDLL aBasiDLL;
579 	SvFactory::Init();
580 	EnableSVLook();
581 	TestWindow aWindow;
582 	Execute();
583 	SvFactory::DeInit();
584 }
585 
586 
587 TestApp aTestApp;
588