203 lines
5.1 KiB
C
203 lines
5.1 KiB
C
#include <windows.h>
|
|
#include <stdio.h>
|
|
#include <malloc.h>
|
|
#include "generic.h"
|
|
|
|
HINSTANCE MyInstance;
|
|
static char GenericClass[32]="GenericClass";
|
|
|
|
static BOOL FirstInstance( HINSTANCE );
|
|
static BOOL AnyInstance( HINSTANCE, int, LPSTR );
|
|
|
|
long _EXPORT FAR PASCAL WindowProc( HWND, unsigned, UINT, LONG );
|
|
|
|
/*
|
|
* WinMain - initialization, message loop
|
|
*/
|
|
int PASCAL WinMain( HINSTANCE this_inst, HINSTANCE prev_inst, LPSTR cmdline,
|
|
int cmdshow )
|
|
{
|
|
#ifdef __NT__
|
|
typedef VOID (WINAPI *PFNICC)( VOID );
|
|
HINSTANCE commctrl_inst;
|
|
PFNICC icc;
|
|
#endif
|
|
MSG msg;
|
|
|
|
#ifdef __NT__
|
|
commctrl_inst = LoadLibrary( "comctl32.dll" );
|
|
if( commctrl_inst != NULL ) {
|
|
icc = (PFNICC)GetProcAddress( commctrl_inst, "InitCommonControls" );
|
|
if( icc != NULL ) {
|
|
icc();
|
|
}
|
|
}
|
|
#endif
|
|
|
|
MyInstance = this_inst;
|
|
#ifdef __WINDOWS_386__
|
|
sprintf( GenericClass, "GenericClass%d", this_inst );
|
|
prev_inst = 0;
|
|
#endif
|
|
if( !prev_inst ) {
|
|
if( !FirstInstance( this_inst ) ) return( FALSE );
|
|
}
|
|
if( !AnyInstance( this_inst, cmdshow, cmdline ) ) return( FALSE );
|
|
|
|
while( GetMessage( &msg, NULL, 0, 0 ) ) {
|
|
|
|
TranslateMessage( &msg );
|
|
DispatchMessage( &msg );
|
|
|
|
}
|
|
|
|
#ifdef __NT__
|
|
if( commctrl_inst != NULL ) {
|
|
FreeLibrary( commctrl_inst );
|
|
}
|
|
#endif
|
|
|
|
return( msg.wParam );
|
|
|
|
} /* WinMain */
|
|
|
|
/*
|
|
* FirstInstance - register window class for the application,
|
|
* and do any other application initialization
|
|
*/
|
|
static BOOL FirstInstance( HINSTANCE this_inst )
|
|
{
|
|
WNDCLASS wc;
|
|
BOOL rc;
|
|
|
|
/*
|
|
* set up and register window class
|
|
*/
|
|
wc.style = CS_HREDRAW | CS_VREDRAW;
|
|
wc.lpfnWndProc = (LPVOID) WindowProc;
|
|
wc.cbClsExtra = 0;
|
|
wc.cbWndExtra = sizeof( DWORD );
|
|
wc.hInstance = this_inst;
|
|
wc.hIcon = LoadIcon( this_inst, "GenericIcon" );
|
|
wc.hCursor = LoadCursor( NULL, IDC_ARROW );
|
|
wc.hbrBackground = GetStockObject( WHITE_BRUSH );
|
|
wc.lpszMenuName = "GenericMenu";
|
|
wc.lpszClassName = GenericClass;
|
|
rc = RegisterClass( &wc );
|
|
return( rc );
|
|
|
|
} /* FirstInstance */
|
|
|
|
/*
|
|
* AnyInstance - do work required for every instance of the application:
|
|
* create the window, initialize data
|
|
*/
|
|
static BOOL AnyInstance( HINSTANCE this_inst, int cmdshow, LPSTR cmdline )
|
|
{
|
|
HWND hwnd;
|
|
extra_data *edata_ptr;
|
|
|
|
/*
|
|
* create main window
|
|
*/
|
|
hwnd = CreateWindow(
|
|
GenericClass, /* class */
|
|
"Open Watcom Generic", /* caption */
|
|
WS_OVERLAPPEDWINDOW, /* style */
|
|
CW_USEDEFAULT, /* init. x pos */
|
|
CW_USEDEFAULT, /* init. y pos */
|
|
320, /* init. x size */
|
|
240, /* init. y size */
|
|
NULL, /* parent window */
|
|
NULL, /* menu handle */
|
|
this_inst, /* program handle */
|
|
NULL /* create parms */
|
|
);
|
|
|
|
if( !hwnd ) return( FALSE );
|
|
|
|
/*
|
|
* set up data associated with this window
|
|
*/
|
|
edata_ptr = malloc( sizeof( extra_data ) );
|
|
if( edata_ptr == NULL ) return( FALSE );
|
|
edata_ptr->cmdline = cmdline;
|
|
SetWindowLong( hwnd, EXTRA_DATA_OFFSET, (DWORD) edata_ptr );
|
|
|
|
/*
|
|
* display window
|
|
*/
|
|
ShowWindow( hwnd, cmdshow );
|
|
UpdateWindow( hwnd );
|
|
|
|
return( TRUE );
|
|
|
|
} /* AnyInstance */
|
|
|
|
/*
|
|
* AboutDlgProc - processes messages for the about dialog.
|
|
*/
|
|
BOOL _EXPORT FAR PASCAL AboutDlgProc( HWND hwnd, unsigned msg,
|
|
UINT wparam, LONG lparam )
|
|
{
|
|
lparam = lparam; /* turn off warning */
|
|
|
|
switch( msg ) {
|
|
case WM_INITDIALOG:
|
|
return( TRUE );
|
|
|
|
case WM_COMMAND:
|
|
if( LOWORD( wparam ) == IDOK ) {
|
|
EndDialog( hwnd, TRUE );
|
|
return( TRUE );
|
|
}
|
|
break;
|
|
}
|
|
return( FALSE );
|
|
|
|
} /* AboutDlgProc */
|
|
|
|
/*
|
|
* WindowProc - handle messages for the main application window
|
|
*/
|
|
LONG _EXPORT FAR PASCAL WindowProc( HWND hwnd, unsigned msg,
|
|
UINT wparam, LONG lparam )
|
|
{
|
|
FARPROC proc;
|
|
extra_data *edata_ptr;
|
|
char buff[128];
|
|
|
|
switch( msg ) {
|
|
case WM_COMMAND:
|
|
switch( LOWORD( wparam ) ) {
|
|
case MENU_ABOUT:
|
|
proc = MakeProcInstance( (FARPROC)AboutDlgProc, MyInstance );
|
|
DialogBox( MyInstance,"AboutBox", hwnd, (DLGPROC)proc );
|
|
FreeProcInstance( proc );
|
|
break;
|
|
|
|
case MENU_CMDSTR:
|
|
edata_ptr = (extra_data *) GetWindowLong( hwnd,
|
|
EXTRA_DATA_OFFSET );
|
|
#ifdef __NT__
|
|
sprintf( buff, "Command string was \"%s\"", edata_ptr->cmdline );
|
|
#else
|
|
sprintf( buff, "Command string was \"%Fs\"", edata_ptr->cmdline );
|
|
#endif
|
|
MessageBox( NULL, buff, "Program Information", MB_OK );
|
|
break;
|
|
}
|
|
break;
|
|
|
|
case WM_DESTROY:
|
|
PostQuitMessage( 0 );
|
|
break;
|
|
|
|
default:
|
|
return( DefWindowProc( hwnd, msg, wparam, lparam ) );
|
|
}
|
|
return( 0L );
|
|
|
|
} /* WindowProc */
|
|
|