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
 | 
						|
 | 
						|
 |