which included commits to RCS files with non-trunk default branches. git-svn-id: svn://10.65.10.50/trunk@976 c028cbd2-c16b-5b4b-a496-9718f37d4682
		
			
				
	
	
		
			365 lines
		
	
	
		
			8.5 KiB
		
	
	
	
		
			C
		
	
	
		
			Executable File
		
	
	
	
	
			
		
		
	
	
			365 lines
		
	
	
		
			8.5 KiB
		
	
	
	
		
			C
		
	
	
		
			Executable File
		
	
	
	
	
| /* 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
 | |
| 
 | |
| 
 |