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
		
			
				
	
	
		
			373 lines
		
	
	
		
			9.0 KiB
		
	
	
	
		
			C
		
	
	
		
			Executable File
		
	
	
	
	
			
		
		
	
	
			373 lines
		
	
	
		
			9.0 KiB
		
	
	
	
		
			C
		
	
	
		
			Executable File
		
	
	
	
	
/*********************************************************************
 | 
						|
  d4ex_win.c   (c)Copyright Sequiter Software Inc., 1990-1993.
 | 
						|
  All rights reserved.
 | 
						|
 | 
						|
  This example program is a Windows application similar in operation to
 | 
						|
  d4exampl.c
 | 
						|
 | 
						|
  *********************************************************************/
 | 
						|
 | 
						|
#include "d4all.h"
 | 
						|
#include <windows.h>
 | 
						|
 | 
						|
#ifdef __TURBOC__
 | 
						|
extern unsigned _stklen = 10000 ;
 | 
						|
#endif
 | 
						|
 | 
						|
 | 
						|
/*********** Structure Declarations **********************************/
 | 
						|
 | 
						|
typedef struct
 | 
						|
{
 | 
						|
#ifdef S4MEDIUM
 | 
						|
  char *ptr ;
 | 
						|
#else
 | 
						|
  LPSTR  ptr ;
 | 
						|
#endif
 | 
						|
} D4PARSE_STR;
 | 
						|
 | 
						|
typedef struct
 | 
						|
{
 | 
						|
  HWND      hWnd ;
 | 
						|
  HANDLE    hInst ;
 | 
						|
  D4PARSE_STR  parse_str ;
 | 
						|
  int          x,y ;
 | 
						|
  TEXTMETRIC   tm ;
 | 
						|
  LPMSG        lpmsg ;
 | 
						|
  MSG          msg ;  /* Last Message */
 | 
						|
  int          did_close ;
 | 
						|
  int          did_quit ;
 | 
						|
  HCURSOR      hSaveCursor ;
 | 
						|
} D4DISPLAY;
 | 
						|
 | 
						|
FIELD4INFO field_info[] =
 | 
						|
{
 | 
						|
{ "TEST_FIELD",'C',20,0 },
 | 
						|
{ 0,0,0,0 },
 | 
						|
};
 | 
						|
 | 
						|
 | 
						|
/*********** Function Prototype and Global Variable Declarations *****/
 | 
						|
 | 
						|
HCURSOR hHourGlass, hSaveCursor ;
 | 
						|
D4DISPLAY display ;
 | 
						|
extern MSG msg ;
 | 
						|
extern TEXTMETRIC tm ;
 | 
						|
 | 
						|
int PASCAL WinMain(HANDLE, HANDLE, LPSTR, int) ;
 | 
						|
BOOL InitApplication(HANDLE) ;
 | 
						|
BOOL InitInstance(HANDLE, int) ;
 | 
						|
LRESULT CALLBACK MainWndProc(HWND, UINT, UINT, LONG) ;
 | 
						|
extern void verify_switches() ;
 | 
						|
 | 
						|
void S4FUNCTION d4display_init( HWND ) ;
 | 
						|
void S4FUNCTION d4parsestring_init( D4PARSE_STR *, LPSTR ) ;
 | 
						|
void S4FUNCTION d4display_str( char *, int ) ;
 | 
						|
int S4FUNCTION d4display_quit() ;
 | 
						|
 | 
						|
 | 
						|
/*********** Windows initialization functions ************************/
 | 
						|
 | 
						|
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, hWnd, 1000, NULL ) ;
 | 
						|
 | 
						|
  d4display_init( 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;
 | 
						|
}
 | 
						|
 | 
						|
/************ display text in Windows functions ***********************/
 | 
						|
 | 
						|
void S4FUNCTION d4parsestring_init( D4PARSE_STR *p_str, LPSTR p )
 | 
						|
{
 | 
						|
  memset( p_str, 0, sizeof(D4PARSE_STR) ) ;
 | 
						|
 | 
						|
#ifdef S4MEDIUM
 | 
						|
  lstrcpy( pointer, p ) ;
 | 
						|
  p_str->ptr = pointer ;
 | 
						|
#else
 | 
						|
  p_str->ptr =  p ;
 | 
						|
#endif
 | 
						|
}
 | 
						|
 | 
						|
void S4FUNCTION d4display_init( HWND h )
 | 
						|
{
 | 
						|
  HDC hdc ;
 | 
						|
  TEXTMETRIC tm ;
 | 
						|
 | 
						|
  memset( &display, 0, sizeof(D4DISPLAY) ) ;
 | 
						|
  display.hWnd =  h ;
 | 
						|
  display.lpmsg = &(display.msg) ;
 | 
						|
  hdc =  GetDC(display.hWnd) ;
 | 
						|
  GetTextMetrics( hdc, &tm ) ;
 | 
						|
  display.tm = tm ;
 | 
						|
  ReleaseDC(display.hWnd,hdc) ;
 | 
						|
  display.x =  0 ;
 | 
						|
  display.y =  0 ;
 | 
						|
  display.did_close =  0 ;
 | 
						|
  display.did_quit  =  0 ;
 | 
						|
}
 | 
						|
 | 
						|
void  S4FUNCTION d4display_str( char *str, int is_new_line )
 | 
						|
{                               
 | 
						|
  RECT rect ;
 | 
						|
  HDC hdc ;
 | 
						|
  SIZE size;
 | 
						|
  int len, height, width ;
 | 
						|
  char blank_line[180] ;
 | 
						|
 | 
						|
  memset(blank_line, 32, 179) ;
 | 
						|
  blank_line[179] = '\0' ;
 | 
						|
 | 
						|
  hdc =  GetDC(display.hWnd) ;
 | 
						|
  len =   strlen(str) ;
 | 
						|
 | 
						|
  GetTextExtentPoint( hdc, str, len, &size ) ;
 | 
						|
 | 
						|
  height =  size.cy ;
 | 
						|
  width  =  size.cx ;
 | 
						|
 | 
						|
  if ( is_new_line )
 | 
						|
  {
 | 
						|
    display.x  =  0 ;
 | 
						|
    display.y +=  height +  display.tm.tmExternalLeading ;
 | 
						|
  }
 | 
						|
 | 
						|
  GetClientRect( display.hWnd, &rect ) ;
 | 
						|
 | 
						|
  if ( (display.y+height) > rect.bottom )
 | 
						|
  {
 | 
						|
    display.y =  0 ;
 | 
						|
    InvalidateRect( display.hWnd, &rect, 1 ) ;
 | 
						|
  }
 | 
						|
 | 
						|
  TextOut( hdc, display.x,display.y, str, len ) ;
 | 
						|
 | 
						|
  if ( (display.y+(2*height)) > rect.bottom )
 | 
						|
    TextOut( hdc, 0, 0, blank_line, strlen(blank_line) ) ;
 | 
						|
  else   
 | 
						|
    TextOut( hdc, 0, (display.y+height+display.tm.tmExternalLeading), blank_line, strlen(blank_line) ) ;
 | 
						|
 | 
						|
  display.x +=  width ;
 | 
						|
 | 
						|
  ReleaseDC(display.hWnd,hdc) ;
 | 
						|
}
 | 
						|
 | 
						|
int S4FUNCTION d4display_quit( )
 | 
						|
{
 | 
						|
  /* If there is a message, the message is processed. */
 | 
						|
  /* If the message says quit, then TRUE is returned. */
 | 
						|
  if ( display.did_quit ) return 1 ;
 | 
						|
 | 
						|
  for (;;)
 | 
						|
  {
 | 
						|
    if ( ! display.did_close )
 | 
						|
      if ( ! PeekMessage( display.lpmsg, display.hWnd, 0, 0, PM_NOREMOVE ) )
 | 
						|
        return 0 ;
 | 
						|
 | 
						|
    if ( ! GetMessage( display.lpmsg, display.hWnd, 0, 0 ) )
 | 
						|
    {
 | 
						|
      MessageBox( display.hWnd, "", "Program Completed", MB_OK ) ;
 | 
						|
      display.did_quit =  1 ;
 | 
						|
      return 1 ;
 | 
						|
    }
 | 
						|
 | 
						|
    TranslateMessage(display.lpmsg);
 | 
						|
    DispatchMessage(display.lpmsg);
 | 
						|
  }
 | 
						|
}
 | 
						|
 | 
						|
/*********************************************************************/
 | 
						|
 | 
						|
 | 
						|
int PASCAL WinMain( HANDLE hInstance, HANDLE hPrevInstance, LPSTR lpCmdLine,
 | 
						|
                   int nCmdShow)
 | 
						|
{
 | 
						|
  int rc ;
 | 
						|
  CODE4 cb ;
 | 
						|
 | 
						|
  if (!hPrevInstance)
 | 
						|
    if (!InitApplication(hInstance)){
 | 
						|
      MessageBox(0,"","InitApplication Failed", MB_OK); 
 | 
						|
      return (FALSE);
 | 
						|
    }
 | 
						|
 | 
						|
  if (!InitInstance(hInstance, nCmdShow)){
 | 
						|
    MessageBox(0, "", "InitInstance Failed", MB_OK); 
 | 
						|
    return (FALSE);
 | 
						|
  }
 | 
						|
  d4parsestring_init( &display.parse_str, lpCmdLine ) ;
 | 
						|
 | 
						|
  d4init( &cb ) ;
 | 
						|
  cb.hWnd = display.hWnd ;
 | 
						|
#ifdef S4DLL
 | 
						|
  cb.hInst = display.hInst ;
 | 
						|
#endif
 | 
						|
 | 
						|
  verify_switches() ;
 | 
						|
  d4display_str( "\nSwitches Verified Successfully!", 1 ) ;
 | 
						|
 | 
						|
  cb.auto_open = 0 ;
 | 
						|
  cb.open_error = 0 ;
 | 
						|
  if( d4open( &cb, "TEST.DBF" ) != 0 )
 | 
						|
    d4display_str( "\nTEST.DBF Opened", 1 ) ;
 | 
						|
  else
 | 
						|
  {
 | 
						|
    if( d4create(&cb,"TEST.DBF",field_info,0) != 0 )
 | 
						|
      d4display_str( "\nTEST.DBF Created", 1) ;
 | 
						|
  }
 | 
						|
  d4close_all( &cb ) ;
 | 
						|
 | 
						|
  PostQuitMessage(0) ;
 | 
						|
 | 
						|
  for (;;)
 | 
						|
  {
 | 
						|
    if (d4display_quit() )
 | 
						|
      return (display.msg.wParam) ;
 | 
						|
  }
 | 
						|
}
 | 
						|
 | 
						|
void verify_switches()
 | 
						|
{
 | 
						|
  long d4switch ;
 | 
						|
 | 
						|
  d4switch = u4switch() ;
 | 
						|
 | 
						|
  d4display_str( " ", 1 ) ;
 | 
						|
  d4display_str( " ", 1 ) ;
 | 
						|
  d4display_str( "Library Conditional Compilation Switches:", 1 ) ;
 | 
						|
  if( d4switch & 1 )
 | 
						|
    d4display_str( "S4FOX - FoxPro Index File Compatibility", 1 ) ;
 | 
						|
  if( d4switch & 2 )
 | 
						|
    d4display_str( "S4CLIPPER - Clipper Index File Compatibility", 1 ) ;
 | 
						|
  if( d4switch & 4 )
 | 
						|
    d4display_str( "S4MDX - dBASE IV Index File Compatibility", 1 ) ;
 | 
						|
  if( d4switch & 8 )
 | 
						|
    d4display_str( "S4NDX - dBASE III or III PLUS Index File Compatibility", 1 ) ;
 | 
						|
  if( d4switch & 0x10 )
 | 
						|
    d4display_str( "S4DLL - Microsoft Windows DLL (S4DLL_BUILD on Library Build)", 1 ) ;
 | 
						|
#ifdef S4DLL
 | 
						|
  if( d4switch & 0x20 )
 | 
						|
    d4display_str( "S4DLL - Microsoft Windows Dynamic with DLL", 1 ) ;
 | 
						|
#else
 | 
						|
  if( d4switch & 0x20 )
 | 
						|
    d4display_str( "S4WINDOWS - Microsoft Windows Static with Static Library", 1 ) ;
 | 
						|
#endif
 | 
						|
  if( d4switch & 0x40 )
 | 
						|
    d4display_str( "S4OS2 - OS/2", 1 ) ;
 | 
						|
  if( d4switch & 0x40 )
 | 
						|
    d4display_str( "S4CODE_SCREENS - CodeScreens output Functions", 1 ) ;
 | 
						|
  if( d4switch & 0x100 ) 
 | 
						|
    d4display_str( "S4DEBUG - Extensive CodeBase Error Checking", 1 ) ;
 | 
						|
  if( d4switch & 0x200 )
 | 
						|
    d4display_str( "S4ERROR_HOOK - Custom Error Function", 1 ) ;
 | 
						|
  if( d4switch & 0x400 )
 | 
						|
    d4display_str( "\nS4LOCK_CHECK - Internal CodeBase Locking Diagnostics", 1 ) ;
 | 
						|
  if( d4switch & 0x800 )
 | 
						|
    d4display_str( "\nS4LOCK_HOOK - Custom Lock Failure Function", 1 ) ;
 | 
						|
  if( d4switch & 0x1000 )
 | 
						|
    d4display_str( "\nS4MAX - Maximum Memory Allocation Testing", 1 ) ;
 | 
						|
  if( d4switch & 0x2000 )
 | 
						|
    d4display_str( "\nS4MEMO_OFF - Memo File support source code removed", 1 ) ;
 | 
						|
  if( d4switch & 0x4000 )
 | 
						|
    d4display_str( "\nS4OLD_CODE - Support Functions from CodeBase 4.5", 1 ) ;
 | 
						|
  if( d4switch & 0x8000 )
 | 
						|
    d4display_str( "\nS4OPTIMIZE_OFF - Memory Optimization source code removed", 1 ) ;
 | 
						|
  if( d4switch & 0x10000 )
 | 
						|
    d4display_str( "\nS4PORTABLE - Maximum Portability", 1 ) ;
 | 
						|
  if( d4switch & 0x20000 )
 | 
						|
    d4display_str( "\nS4SAFE  - Immediate File Length Updates", 1 ) ;
 | 
						|
  if( d4switch & 0x40000 )
 | 
						|
    d4display_str( "\nS4SINGLE  - Multi-user support source code removed", 1 ) ;
 | 
						|
 | 
						|
#ifdef S4OPTIMIZE_OFF
 | 
						|
  if( (d4switch & 0x8000)  ==  0 )
 | 
						|
    e4severe( e4result, "S4OPTIMIZE_OFF must be used in Library Build too." ) ;
 | 
						|
#else
 | 
						|
  if( d4switch & 0x8000  )
 | 
						|
    e4severe( e4result, "S4OPTIMIZE_OFF must be off in Library Build too." ) ;
 | 
						|
#endif
 | 
						|
 | 
						|
#ifdef S4FOX
 | 
						|
  if( (d4switch & 1)  == 0 )
 | 
						|
    e4severe( e4result, "S4FOX must be used in Library Build too." ) ;
 | 
						|
#endif
 | 
						|
 | 
						|
#ifdef S4CLIPPER
 | 
						|
  if( (d4switch & 2)  == 0 )
 | 
						|
    e4severe( e4result, "S4CLIPPER must be used in Library Build too." ) ;
 | 
						|
#endif
 | 
						|
 | 
						|
#ifdef S4MDX
 | 
						|
  if( (d4switch & 4)  == 0 )
 | 
						|
    e4severe( e4result, "S4MDX must be used in Library Build too." ) ;
 | 
						|
#endif
 | 
						|
 | 
						|
#ifdef S4NDX
 | 
						|
  if( (d4switch & 8)  == 0 )
 | 
						|
    e4severe( e4result, "S4NDX must be used in Library Build too." ) ;
 | 
						|
#endif
 | 
						|
}
 |