campo-sirio/cb5/d4switch.c
alex a0f5e0898b This commit was generated by cvs2svn to compensate for changes in r975,
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
1995-02-06 15:33:45 +00:00

536 lines
12 KiB
C
Executable File

/*********************************************************************
d4switch.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"
#ifdef __TURBOC__
extern unsigned _stklen = 10000 ;
#endif
/*********** Structure Declarations **********************************/
typedef struct
{
#ifdef S4WINDOWS
#ifdef S4MEDIUM
char *ptr ;
#else
LPSTR ptr ;
#endif
#else
int n_parms ;
int i_parm ;
char **parms ;
#endif
} D4PARSE_STR;
typedef struct
{
HWND hWnd ;
HANDLE hInst ;
D4PARSE_STR parse_str ;
int x,y ;
#ifdef S4WINDOWS
TEXTMETRIC tm ;
LPMSG lpmsg ;
MSG msg ; /* Last Message */
int did_close ;
int did_quit ;
HCURSOR hSaveCursor ;
#endif
} D4DISPLAY;
/*********** Function Prototype and Global Variable Declarations *****/
int verify_switches() ;
void S4FUNCTION d4display_str( char *, int ) ;
long S4FUNCTION u4switch() ;
D4DISPLAY display ;
#ifdef S4WINDOWS
HCURSOR hHourGlass, hSaveCursor ;
extern MSG msg ;
extern TEXTMETRIC tm ;
int PASCAL WinMan(HANDLE, HANDLE, LPSTR, int) ;
BOOL InitApplication(HANDLE) ;
BOOL InitInstance(HANDLE, int) ;
long FAR PASCAL _export MainWndProc(HWND, UINT, UINT, LONG) ;
void S4FUNCTION d4display_init( HWND ) ;
void S4FUNCTION d4parsestring_init( D4PARSE_STR *, LPSTR ) ;
int S4FUNCTION d4display_quit() ;
/*********** Windows initialization functions ************************/
BOOL InitApplication(HANDLE hInstance)
{
WNDCLASS wc;
wc.style = NULL;
wc.lpfnWndProc = MainWndProc;
wc.cbClsExtra = 0;
wc.cbWndExtra = 0;
wc.hInstance = hInstance;
wc.hIcon = LoadIcon(NULL, IDI_APPLICATION);
wc.hCursor = LoadCursor(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,
NULL,
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);
}
long FAR PASCAL _export 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 (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 ;
}
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);
}
}
#endif
void S4FUNCTION d4display_str( char *str, int is_new_line )
{
#ifdef S4WINDOWS
RECT rect ;
HDC hdc ;
int len, height, width ;
DWORD dword ;
char blank_line[180] ;
memset(blank_line, 32, 179) ;
blank_line[179] = '\0' ;
hdc = GetDC(display.hWnd) ;
len = strlen(str) ;
dword = GetTextExtent( hdc, str, len ) ;
height = HIWORD( dword ) ;
width = LOWORD( dword ) ;
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) ;
#else
if ( is_new_line )
{
printf( "\n%s", str ) ;
display.x = 1 ;
}
else
if (display.x == 0)
{
printf( "\r%s", str ) ;
display.x = 1 ;
}
else
{
printf( "%s", str ) ;
display.x = 1 ;
}
#endif
}
/*********************************************************************/
#ifndef S4WINDOWS
void main()
{
#else
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 ) ;
#endif
if (verify_switches())
{
d4display_str( "** ERROR ** Switch Configuration Confliction.", 1 ) ;
d4display_str( " Your current switches in 'd4all.h' do not match the library.", 1 ) ;
}
else
d4display_str( "\nSwitches Verified Successfully!", 1 ) ;
#ifdef S4WINDOWS
PostQuitMessage(0) ;
for (;;)
{
if (d4display_quit() )
return (display.msg.wParam) ;
}
#else
exit(0) ;
#endif
}
int 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 ) ;
if( d4switch & 0x20 )
d4display_str( "S4WINDOWS - Microsoft Windows Static with Static Library", 1 ) ;
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 )
{
d4display_str( "***ERROR***: S4OPTIMIZE_OFF must be used in Library Build too.", 1 ) ;
return 1 ;
}
#else
if( d4switch & 0x8000 )
{
d4display_str( "***ERROR***: S4OPTIMIZE_OFF must be off in Library Build too.", 1 ) ;
return 1 ;
}
#endif
#ifdef S4FOX
if( (d4switch & 1) == 0 )
{
d4display_str( "***ERROR***: S4FOX must be used in Library Build too.", 1 ) ;
return 1 ;
}
#endif
#ifdef S4CLIPPER
if( (d4switch & 2) == 0 )
{
d4display_str( "***ERROR***: S4CLIPPER must be used in Library Build too.", 1 ) ;
return 1 ;
}
#endif
#ifdef S4MDX
if( (d4switch & 4) == 0 )
{
d4display_str( "***ERROR***: S4MDX must be used in Library Build too.", 1 ) ;
return 1 ;
}
#endif
#ifdef S4NDX
if( (d4switch & 8) == 0 )
{
d4display_str( "***ERROR***: S4NDX must be used in Library Build too.", 1 ) ;
return 1 ;
}
#endif
return 0 ;
}
#ifdef S4FOX
#define S4FORMAT 1
#endif
#ifdef S4CLIPPER
#ifdef S4FORMAT
error Choose only one CodeBase index file compatibility option.
#endif
#define S4FORMAT 2
#endif
#ifdef S4MDX
#ifdef S4FORMAT
error Choose only one CodeBase index file compatibility option.
#endif
#define S4FORMAT 4
#endif
#ifdef S4NDX
#ifdef S4FORMAT
error Choose only one CodeBase index file compatibility option.
#endif
#define S4FORMAT 8
#endif
#ifndef S4FORMAT
error You must define either S4FOX, S4CLIPPER, S4NDX or S4MDX
#endif
#ifdef S4DLL
#define S4OPERATING 0x10
#ifndef S4DLL_BUILD
error When building a CodeBase DLL, use the S4DLL_BUILD switch.
#endif
#endif
#ifdef S4WINDOWS
#undef S4OPERATING
#define S4OPERATING 0x20
#endif
#ifdef S4OS2
#ifdef S4OPERATING
error Choose one of CodeBase switches S4DLL/S4WINDOWS, S4OS2, and S4CODE_SCREENS
#endif
#define S4OPERATING 0x40
#endif
#ifdef S4CODE_SCREENS
#ifdef S4OPERATING
error Choose one of CodeBase switches S4DLL/S4WINDOWS, S4OS2, and S4CODE_SCREENS
#endif
#define S4OPERATING 0x80
#endif
#ifndef S4OPERATING
#define S4OPERATING 0
#endif
#ifdef S4DEBUG
#define S4DEBUG_VAL 0x100
#else
#define S4DEBUG_VAL 0
#endif
#ifdef S4ERROR_HOOK
#define S4ERROR_HOOK_VAL 0x200
#else
#define S4ERROR_HOOK_VAL 0
#endif
#ifdef S4LOCK_CHECK
#define S4LOCK_CHECK_VAL 0x400
#else
#define S4LOCK_CHECK_VAL 0
#endif
#ifdef S4LOCK_HOOK
#define S4LOCK_HOOK_VAL 0x800
#else
#define S4LOCK_HOOK_VAL 0
#endif
#ifdef S4MAX
#define S4MAX_VAL 0x1000
#else
#define S4MAX_VAL 0
#endif
#ifdef S4MEMO_OFF
#define S4MEMO_OFF_VAL 0x2000
#else
#define S4MEMO_OFF_VAL 0
#endif
#ifdef S4OLD_CODE
#define S4OLD_CODE_VAL 0x4000
#else
#define S4OLD_CODE_VAL 0
#endif
#ifdef S4OPTIMIZE_OFF
#define S4OPTIMIZE_OFF_VAL 0x8000
#else
#define S4OPTIMIZE_OFF_VAL 0
#endif
#ifdef S4PORTABLE
#define S4PORTABLE_VAL 0x10000
#else
#define S4PORTABLE_VAL 0
#endif
#ifdef S4SAFE
#define S4SAFE_VAL 0x20000
#else
#define S4SAFE_VAL 0
#endif
#ifdef S4SINGLE
#define S4SINGLE_VAL 0x40000
#else
#define S4SINGLE_VAL 0
#endif
long S4FUNCTION u4switch()
{
return (long) ( S4FORMAT + S4OPERATING + S4DEBUG_VAL + S4ERROR_HOOK_VAL +
S4LOCK_CHECK_VAL + S4LOCK_HOOK_VAL + S4MAX_VAL +
S4MEMO_OFF_VAL + S4OLD_CODE_VAL + S4OPTIMIZE_OFF_VAL +
S4PORTABLE_VAL + S4SAFE_VAL + S4SINGLE_VAL ) ;
}