mirror of
https://git.openldap.org/openldap/openldap.git
synced 2026-01-09 08:23:35 -05:00
257 lines
5.7 KiB
C
257 lines
5.7 KiB
C
/*
|
|
* console.c -- simple windows console emulator for Winsock testing
|
|
* 27 June 1993 by Mark C Smith
|
|
*/
|
|
#include <stdio.h>
|
|
#include <winsock.h>
|
|
#include <string.h>
|
|
#include "console.h"
|
|
|
|
static char *argv[] = { "console", "rearwindow", 0 }; /* */
|
|
char szAppName[20];
|
|
char szLineBuf[512];
|
|
HWND hInst;
|
|
HWND hWndMain, hWndOutputEdit;
|
|
HANDLE hAccel;
|
|
|
|
int reg_classes( void );
|
|
void unreg_classes( void );
|
|
|
|
|
|
|
|
int PASCAL
|
|
WinMain( HANDLE hInstance, HANDLE hPrevInst, LPSTR lpszCmdLine, int nCmdShow)
|
|
{
|
|
MSG msg;
|
|
int rc;
|
|
|
|
strcpy( szAppName, "console");
|
|
|
|
hInst = hInstance;
|
|
if ( !hPrevInst ) {
|
|
if (( rc = reg_classes()) != 0 ) {
|
|
MessageBox(0, "Couldn't register window classes", NULL, MB_ICONEXCLAMATION);
|
|
return( rc );
|
|
}
|
|
}
|
|
|
|
hWndMain = CreateWindow(
|
|
szAppName, /* Window class name */
|
|
"Console", /* Window's title */
|
|
WS_CAPTION | /* Title and Min/Max */
|
|
WS_SYSMENU | /* Add system menu box */
|
|
WS_MINIMIZEBOX | /* Add minimize box */
|
|
WS_MAXIMIZEBOX | /* Add maximize box */
|
|
WS_THICKFRAME | /* thick sizeable frame */
|
|
WS_CLIPCHILDREN | /* don't draw in child windows areas */
|
|
WS_OVERLAPPED,
|
|
CW_USEDEFAULT, 0, /* Use default X, Y */
|
|
CW_USEDEFAULT, 0, /* Use default X, Y */
|
|
0, /* Parent window's handle */
|
|
0, /* Default to Class Menu */
|
|
hInst, /* Instance of window */
|
|
NULL ); /* Create struct for WM_CREATE */
|
|
|
|
if( !hWndMain ) {
|
|
MessageBox( 0, "Couldn't create main window", NULL, MB_ICONEXCLAMATION);
|
|
return( -1 );
|
|
}
|
|
|
|
ShowWindow( hWndMain, nCmdShow );
|
|
|
|
hAccel = LoadAccelerators( hInst, szAppName );
|
|
|
|
if (( hWndOutputEdit = new_editwindow( hWndMain, "console output" )) == NULL ) {
|
|
MessageBox( 0, "Couldn't create output window", NULL, MB_ICONEXCLAMATION);
|
|
return( -1 );
|
|
}
|
|
|
|
while( GetMessage( &msg, 0, 0, 0 )) {
|
|
if( TranslateAccelerator( hWndMain, hAccel, &msg )) {
|
|
continue;
|
|
}
|
|
|
|
TranslateMessage(&msg);
|
|
DispatchMessage(&msg);
|
|
}
|
|
|
|
unreg_classes();
|
|
return( msg.wParam );
|
|
}
|
|
|
|
LONG FAR PASCAL
|
|
WndProc( HWND hWnd, WORD msg, WORD wParam, LONG lParam )
|
|
{
|
|
HDC hDC;
|
|
PAINTSTRUCT ps;
|
|
|
|
switch( msg ) {
|
|
case WM_COMMAND:
|
|
switch( wParam ) {
|
|
case IDM_F_OPENLDAP:
|
|
ldapmain( 2, argv );
|
|
break;
|
|
|
|
case IDM_F_EXIT:
|
|
PostQuitMessage( 0 );
|
|
break;
|
|
|
|
default:
|
|
return( DefWindowProc( hWnd, msg, wParam, lParam ));
|
|
}
|
|
|
|
case WM_CREATE:
|
|
break;
|
|
|
|
case WM_MOVE:
|
|
break;
|
|
|
|
case WM_SIZE:
|
|
break;
|
|
|
|
case WM_PAINT:
|
|
memset( &ps, 0x00, sizeof( PAINTSTRUCT ));
|
|
hDC = BeginPaint( hWnd, &ps );
|
|
SetBkMode(hDC, TRANSPARENT);
|
|
|
|
EndPaint(hWnd, &ps);
|
|
break;
|
|
|
|
case WM_CLOSE:
|
|
DestroyWindow(hWnd);
|
|
if ( hWnd == hWndMain ) {
|
|
PostQuitMessage( 0 );
|
|
}
|
|
break;
|
|
|
|
default:
|
|
return( DefWindowProc( hWnd, msg, wParam, lParam ));
|
|
}
|
|
|
|
return( 0L );
|
|
}
|
|
|
|
int
|
|
reg_classes( void )
|
|
{
|
|
WNDCLASS wndclass;
|
|
memset( &wndclass, 0x00, sizeof( WNDCLASS ));
|
|
|
|
|
|
wndclass.style = CS_HREDRAW | CS_VREDRAW | CS_BYTEALIGNWINDOW;
|
|
wndclass.lpfnWndProc = WndProc;
|
|
wndclass.cbClsExtra = 0;
|
|
wndclass.cbWndExtra = 0;
|
|
wndclass.hInstance = hInst;
|
|
wndclass.hIcon = LoadIcon(hInst, "CONSOLE");
|
|
wndclass.hCursor = LoadCursor(NULL, IDC_ARROW);
|
|
wndclass.hbrBackground = (HBRUSH)( COLOR_WINDOW+1 );
|
|
wndclass.lpszMenuName = szAppName; /* Menu Name is App Name */
|
|
wndclass.lpszClassName = szAppName; /* Class Name is App Name */
|
|
if( !RegisterClass( &wndclass )) {
|
|
return( -1 );
|
|
}
|
|
|
|
return( 0 );
|
|
}
|
|
|
|
void
|
|
unreg_classes( void )
|
|
{
|
|
UnregisterClass( szAppName, hInst );
|
|
}
|
|
|
|
|
|
char *
|
|
getline( char *line, int len, FILE *s, char *prompt )
|
|
{
|
|
FARPROC lpfnDlgProc;
|
|
int nRc;
|
|
|
|
printf( prompt );
|
|
|
|
lpfnDlgProc = MakeProcInstance((FARPROC)GetLineDlgProc, hInst);
|
|
nRc = DialogBox(hInst, MAKEINTRESOURCE(200), hWndMain, lpfnDlgProc);
|
|
FreeProcInstance(lpfnDlgProc);
|
|
if ( !nRc ) {
|
|
return( NULL );
|
|
}
|
|
strncpy( line, szLineBuf, len );
|
|
printf( "%s\n", line );
|
|
return( line );
|
|
}
|
|
|
|
|
|
|
|
void
|
|
perror( char *msg )
|
|
{
|
|
printf( "%s: error %d\n", msg, WSAGetLastError());
|
|
}
|
|
|
|
void
|
|
appexit( int rc )
|
|
{
|
|
printf( "exit( %d )\n", rc );
|
|
}
|
|
|
|
int
|
|
fprintf( FILE *f, char *fmt, void *a1, void *a2, void *a3, void *a4,
|
|
void *a5 )
|
|
{
|
|
printf( fmt, a1, a2, a3, a4, a5 );
|
|
}
|
|
|
|
int
|
|
printf( char *fmt, void *a1, void *a2, void *a3, void *a4, void *a5 )
|
|
{
|
|
char *p, *send, buf[ 1024 ], *crlf = "\r\n";
|
|
|
|
sprintf( buf, fmt, a1, a2, a3, a4, a5 );
|
|
|
|
send = buf;
|
|
for ( p = buf; *p != '\0'; ++p ) {
|
|
if ( *p == '\n' ) {
|
|
*p = '\0';
|
|
SendMessage( hWndOutputEdit, EM_REPLACESEL, 0, (long)send );
|
|
SendMessage( hWndOutputEdit, EM_REPLACESEL, 0, (long)crlf );
|
|
send = p + 1;
|
|
}
|
|
}
|
|
|
|
if ( p > send ) {
|
|
SendMessage( hWndOutputEdit, EM_REPLACESEL, 0, (long)send );
|
|
}
|
|
}
|
|
|
|
BOOL FAR PASCAL
|
|
GetLineDlgProc(HWND hWndDlg, WORD Message, WORD wParam, LONG lParam)
|
|
{
|
|
switch(Message) {
|
|
case WM_INITDIALOG:
|
|
/* cwCenter(hWndDlg, 0); */
|
|
break;
|
|
|
|
case WM_CLOSE:
|
|
/* Closing the Dialog behaves the same as Cancel */
|
|
PostMessage(hWndDlg, WM_COMMAND, IDCANCEL, 0L);
|
|
break;
|
|
|
|
case WM_COMMAND:
|
|
switch(wParam) {
|
|
case IDOK:
|
|
SendDlgItemMessage( hWndDlg, DLG_GETLINE_TEXT, WM_GETTEXT, sizeof( szLineBuf),
|
|
(long)szLineBuf );
|
|
EndDialog(hWndDlg, TRUE);
|
|
break;
|
|
case IDCANCEL:
|
|
EndDialog(hWndDlg, FALSE);
|
|
break;
|
|
}
|
|
break;
|
|
|
|
default:
|
|
return FALSE;
|
|
}
|
|
return TRUE;
|
|
}
|