campo-sirio/cb5/t4main.c

365 lines
8.5 KiB
C
Raw Normal View History

/* t4main.c (c)Copyright Sequiter Software Inc., 1990-1993. All rights reserved. */
/* Main test program for running CodeBase test code */
#ifdef S4OS2PM
#define INCL_WINSYS
#define INCL_WINWINDOWMGR
#define INCL_DOSPROCESS
#define INCL_GPIPRIMITIVES
#define INCL_GPILCIDS
#endif
#include "d4all.h"
#ifdef __TURBOC__
#pragma hdrstop
#endif
#include "t4test.h"
#ifdef __ZTC__
#ifdef S4WINDOWS
#ifndef NULL
#define NULL 0
#endif
#endif
#endif
#ifdef __TURBOC__
extern unsigned _stklen = 28000;
#endif
D4DISPLAY display ;
#ifndef S4WINDOWS
#ifndef S4OS2PM
main( int argc, char **argv )
{
d4parsestring_init( &display.parse_str, argc, argv ) ;
return t4test( &display ) ;
}
#else
#include <process.h>
HWND hwndMainFrame = NULLHANDLE ;
HWND hwndMain ;
HDC hdcMain ;
HAB hab ;
HMQ hmq ;
CHAR szAppName[MAXNAMEL] ;
CHAR szUntitled[MESSAGELEN] ;
VOID ExitProc(USHORT usTermCode)
{
if(WinIsWindow(hab, hwndMainFrame))
WinDestroyWindow(hwndMainFrame) ;
WinDestroyMsgQueue(hmq) ;
WinTerminate(hab) ;
DosExitList(EXLST_EXIT, (PFNEXITLIST)NULL) ;
}
int on_val = 0 ;
int thread_on = 0 ;
VOID t4thread( void *disp )
{
D4DISPLAY *display ;
int i ;
thread_on = 1 ;
display = (D4DISPLAY *)disp ;
/* Clear the window after marking that thread has started, but before test input started */
WinInvalidateRegion( display->hWnd, (HRGN)NULL, FALSE );
on_val = 1 ;
t4test( display ) ;
while ( display->display_set == 1 ) /* a display message not processed is waiting */
;
display->display_set = 1 ; /* mark a message as pending */
display->do_box = 1 ;
strcpy( display->str, "Test Thread Completed" ) ;
display->len = strlen( display->str ) ;
display->display_set = 1 ;
WinInvalidateRegion( display->hWnd, (HRGN)NULL, FALSE );
DosSleep( 1000L ) ; /* delay to ensure on_val still true when box comes out */
on_val = 0 ;
thread_on = 0 ;
_endthread() ;
}
VOID MainCommand(HWND hwnd, MPARAM mp1, MPARAM mp2)
{
switch(SHORT1FROMMP(mp1))
{
case IDM_ABOUT:
WinMessageBox(HWND_DESKTOP, hwnd, "CodeBase 5.0 Test Routines - version 1.0", "CB 5.0 OS/2", MSGBOXID, MB_OK ) ;
break ;
case EM_CODEBASE_ERROR:
WinMessageBox(HWND_DESKTOP, display.hWnd, display.str, "CB 5.0 OS/2 ERROR", MSGBOXID, MB_OK ) ;
display.display_set = 0 ;
break ;
case IDM_DO_TEST:
if ( thread_on == 1 ) /* test already executing... */
{
WinMessageBox(HWND_DESKTOP, hwnd, "Test thread already started...", "CB 5.0 OS/2 TEST", MSGBOXID, MB_OK ) ;
return;
}
if ( _beginthread( t4thread, 20480, (void *)&display ) == -1 )
{
WinMessageBox(HWND_DESKTOP, hwnd, "CodeBase 5.0 Test Failure- Couldn't start thread", "CB 5.0 OS/2", MSGBOXID, MB_OK ) ;
return;
}
break ;
}
return;
}
MRESULT EXPENTRY MainWndProc(HWND hwnd, ULONG msg, MPARAM mp1, MPARAM mp2)
{
RECTL rclUpdate ;
HPS hps ;
RECTL rect ;
POINTL pt ;
SIZEL size ;
int i, height, width ;
char blank_line[180] ;
switch(msg)
{
case WM_CREATE:
d4display_init( &display, hwnd ) ;
break ;
case WM_PAINT:
if ( display.display_set == 0 ) /* not a CodeBase message, must be a general system message... */
{
hps = WinBeginPaint(hwnd, NULLHANDLE, &rclUpdate) ;
WinFillRect(hps, &rclUpdate, SYSCLR_WINDOW) ;
WinEndPaint(hps) ;
}
else
{
if ( display.do_box == 1 ) /* message box instead of regular output */
{
display.do_box = 0 ;
WinMessageBox(HWND_DESKTOP, display.hWnd, display.str, "CB 5.0 OS/2 TEST", MSGBOXID, MB_OK ) ;
}
else
{
hps = WinBeginPaint( hwnd, (HPS)NULL, &rect );
GpiSetColor( hps, CLR_NEUTRAL ); /* set text color */
GpiSetBackColor( hps, CLR_BACKGROUND ); /* set text background */
GpiSetBackMix( hps, BM_OVERPAINT ); /* set text mix */
WinQueryWindowRect(hwnd,&rect); /* get window bounds */
memset(blank_line, 32, 179) ;
blank_line[179] = '\0' ;
GpiQueryDefCharBox( hps, &size ) ;
height = size.cy + 1 ;
width = size.cx ;
if ( display.is_new_line )
{
display.x = 0 ;
display.y += height + display.tm.lExternalLeading ;
}
if ( (display.y+height) > rect.yTop )
{
display.y = 0 ;
WinInvalidateRect( display.hWnd, &rect, 1 ) ;
}
pt.x = display.x ;
pt.y = rect.yTop - display.y ;
GpiCharStringAt( hps, &pt, display.len, display.str ) ;
if ( (display.y+(2*height)) > rect.yTop )
{
pt.x = 0 ;
pt.y = rect.yTop ;
GpiCharStringAt( hps, &pt, strlen( blank_line ), blank_line ) ;
}
else
{
pt.x = 0 ;
pt.y = rect.yTop - ( display.y + height + display.tm.lExternalLeading ) ;
GpiCharStringAt( hps, &pt, strlen( blank_line ), blank_line ) ;
}
WinEndPaint( hps );
display.x += width ;
}
display.display_set = 0 ;
}
break ;
case WM_COMMAND:
MainCommand(hwnd, mp1, mp2);
break ;
default:
return(WinDefWindowProc(hwnd, msg, mp1, mp2)) ;
}
return (MRESULT)0 ;
}
BOOL Init(VOID)
{
if(DosExitList(EXLST_ADD, (PFNEXITLIST)ExitProc))
DosExit(EXIT_PROCESS, 1) ;
if(0 == WinLoadString(hab, (HMODULE)0, IDS_APPNAME, MAXNAMEL, szAppName))
return 0 ;
if(!WinLoadString(hab, (HMODULE)0, IDS_UNTITLED, MESSAGELEN, szUntitled))
return 0 ;
if(!WinRegisterClass( hab, (PSZ)szAppName, (PFNWP)MainWndProc, CS_SIZEREDRAW, 0L))
return 0 ;
return 1 ;
}
main( int argc, char **argv )
{
QMSG qmsg ;
ULONG flCtlData ;
CODE4 cb ;
d4init( &cb ) ;
hab = WinInitialize(0) ;
if ( hab == NULLHANDLE )
return 1 ;
hmq = WinCreateMsgQueue(hab, 0) ;
if ( hmq == NULLHANDLE )
{
WinTerminate(hab) ;
return 1 ;
}
if(!Init())
return 1 ;
flCtlData = FCF_STANDARD & ~FCF_SHELLPOSITION ;
hwndMainFrame = WinCreateStdWindow( HWND_DESKTOP, 0, &flCtlData, (PSZ)szAppName, "", 0, (HMODULE)NULL, IDR_MAIN, (PHWND)&hwndMain) ;
if ( hwndMainFrame == NULLHANDLE )
return 1 ;
WinSetWindowText(hwndMainFrame, "CodeBase 5.0 Test");
if (!WinSetWindowPos( hwndMainFrame,
HWND_TOP,
20, 100, 600, 300,
SWP_SIZE | SWP_MOVE | SWP_ACTIVATE | SWP_SHOW
))
d4parsestring_init( &display.parse_str, argc, argv ) ;
while(WinGetMsg(hmq, (PQMSG)&qmsg, (HWND)NULL, (ULONG)NULL, (ULONG)NULL))
WinDispatchMsg(hmq, (PQMSG)&qmsg) ;
return 0 ;
}
#endif
#else
int PASCAL WinMain(HANDLE, HANDLE, LPSTR, int);
BOOL InitApplication(HANDLE);
BOOL InitInstance(HANDLE, int);
LRESULT CALLBACK MainWndProc(HWND, UINT, UINT, LONG);
int PASCAL WinMain( HANDLE hInstance, HANDLE hPrevInstance, LPSTR lpCmdLine,
int nCmdShow)
{
if (!hPrevInstance)
if (!InitApplication(hInstance))
return (FALSE);
if (!InitInstance(hInstance, nCmdShow))
return (FALSE);
d4parsestring_init( &display.parse_str, lpCmdLine ) ;
t4test( &display ) ;
PostQuitMessage(0) ;
for (;;)
{
if (d4display_quit( &display ) )
return (display.msg.wParam) ;
}
}
BOOL InitApplication(HANDLE hInstance)
{
WNDCLASS wc;
wc.style = (UINT) NULL;
wc.lpfnWndProc = MainWndProc;
wc.cbClsExtra = 0;
wc.cbWndExtra = 0;
wc.hInstance = hInstance;
wc.hIcon = LoadIcon( (HINSTANCE) NULL, IDI_APPLICATION);
wc.hCursor = LoadCursor( (HINSTANCE) NULL, IDC_ARROW);
wc.hbrBackground = GetStockObject(WHITE_BRUSH);
wc.lpszMenuName = "TestMenu";
wc.lpszClassName = "TestWClass";
return (RegisterClass(&wc));
}
BOOL InitInstance( HANDLE hInstance, int nCmdShow)
{
HWND hWnd;
hWnd = CreateWindow(
"TestWClass",
"Test CodeBase",
WS_OVERLAPPEDWINDOW,
CW_USEDEFAULT,
CW_USEDEFAULT,
CW_USEDEFAULT,
CW_USEDEFAULT,
(HWND) NULL,
(HMENU) NULL,
hInstance,
NULL
);
if ( !hWnd )
return (FALSE);
SetTimer( hWnd, (UINT) hWnd, 1000, (TIMERPROC) NULL ) ;
d4display_init( &display, hWnd ) ;
display.hInst = hInstance ; /* for t4filter.c */
ShowWindow(hWnd, nCmdShow);
UpdateWindow(hWnd);
return (TRUE);
}
LRESULT CALLBACK MainWndProc( HWND hWnd, UINT message, UINT wParam,
LONG lParam)
{
switch (message)
{
case WM_DESTROY:
PostQuitMessage(0);
break;
case WM_CLOSE:
display.did_close = 1 ;
return (DefWindowProc(hWnd, message, wParam, lParam));
default:
return (DefWindowProc(hWnd, message, wParam, lParam));
}
return (LONG) NULL ;
}
#endif