]> git.sur5r.net Git - openldap/blob - libraries/msdos/winsock/ltest/console.c
Initial revision
[openldap] / libraries / msdos / winsock / ltest / console.c
1 /*
2  * console.c -- simple windows console emulator for Winsock testing
3  * 27 June 1993 by Mark C Smith
4  */
5 #include <stdio.h>
6 #include <winsock.h>
7 #include <string.h>
8 #include "console.h"
9
10 static char *argv[] = { "console", "rearwindow", 0 };   /* */
11 char szAppName[20];
12 char szLineBuf[512];
13 HWND hInst;          
14 HWND hWndMain, hWndOutputEdit;
15 HANDLE hAccel;
16
17 int reg_classes( void );
18 void unreg_classes( void );
19
20
21
22 int PASCAL
23 WinMain( HANDLE hInstance, HANDLE hPrevInst, LPSTR lpszCmdLine, int nCmdShow)
24 {
25     MSG msg;
26     int rc;
27
28     strcpy( szAppName, "console");
29
30     hInst = hInstance;
31     if ( !hPrevInst ) {
32         if (( rc = reg_classes()) != 0 ) {
33            MessageBox(0, "Couldn't register window classes", NULL, MB_ICONEXCLAMATION);
34            return( rc );
35         }
36     }
37
38     hWndMain = CreateWindow(
39                 szAppName,               /* Window class name           */
40                 "Console",              /* Window's title              */
41                 WS_CAPTION      |        /* Title and Min/Max           */
42                 WS_SYSMENU      |        /* Add system menu box         */
43                 WS_MINIMIZEBOX  |        /* Add minimize box            */
44                 WS_MAXIMIZEBOX  |        /* Add maximize box            */
45                 WS_THICKFRAME   |        /* thick sizeable frame        */
46                 WS_CLIPCHILDREN |         /* don't draw in child windows areas */
47                 WS_OVERLAPPED,
48                 CW_USEDEFAULT, 0,        /* Use default X, Y            */
49                 CW_USEDEFAULT, 0,        /* Use default X, Y            */
50                 0,                        /* Parent window's handle      */
51                 0,                        /* Default to Class Menu       */
52                 hInst,                   /* Instance of window          */
53                 NULL );                  /* Create struct for WM_CREATE */
54
55     if( !hWndMain ) {
56         MessageBox( 0, "Couldn't create main window", NULL, MB_ICONEXCLAMATION);
57         return( -1 );
58     }
59
60     ShowWindow( hWndMain, nCmdShow );
61
62     hAccel = LoadAccelerators( hInst, szAppName );
63
64     if (( hWndOutputEdit = new_editwindow( hWndMain, "console output" )) == NULL ) {
65         MessageBox( 0, "Couldn't create output window", NULL, MB_ICONEXCLAMATION);
66         return( -1 );
67     }
68
69     while( GetMessage( &msg, 0, 0, 0 )) {
70         if( TranslateAccelerator( hWndMain, hAccel, &msg )) {
71             continue;
72         }
73
74         TranslateMessage(&msg);
75         DispatchMessage(&msg);
76     }
77
78     unreg_classes();
79     return( msg.wParam );
80 }
81
82 LONG FAR PASCAL
83 WndProc( HWND hWnd, WORD msg, WORD wParam, LONG lParam )
84 {
85     HDC     hDC;
86     PAINTSTRUCT ps;
87
88     switch( msg ) {
89     case WM_COMMAND:
90         switch( wParam ) {
91         case IDM_F_OPENLDAP:
92             ldapmain( 2, argv );
93             break;
94
95         case IDM_F_EXIT:
96             PostQuitMessage( 0 );
97             break;
98
99         default:
100            return( DefWindowProc( hWnd, msg, wParam, lParam ));
101      }
102
103     case WM_CREATE:
104          break;
105
106     case WM_MOVE:
107          break;
108
109     case WM_SIZE:
110          break;
111
112     case WM_PAINT:
113         memset( &ps, 0x00, sizeof( PAINTSTRUCT ));
114         hDC = BeginPaint( hWnd, &ps );
115         SetBkMode(hDC, TRANSPARENT);
116
117         EndPaint(hWnd, &ps);
118         break;
119
120     case WM_CLOSE:
121         DestroyWindow(hWnd);
122         if ( hWnd == hWndMain ) {
123             PostQuitMessage( 0 );
124         }
125         break;
126
127     default:
128          return( DefWindowProc( hWnd, msg, wParam, lParam ));
129    }
130
131    return( 0L );
132 }
133
134 int
135 reg_classes( void )
136 {
137     WNDCLASS   wndclass;
138     memset( &wndclass, 0x00, sizeof( WNDCLASS ));
139
140
141     wndclass.style = CS_HREDRAW | CS_VREDRAW | CS_BYTEALIGNWINDOW;
142     wndclass.lpfnWndProc = WndProc;
143     wndclass.cbClsExtra = 0;
144     wndclass.cbWndExtra = 0;
145     wndclass.hInstance = hInst;
146     wndclass.hIcon = LoadIcon(hInst, "CONSOLE");
147     wndclass.hCursor = LoadCursor(NULL, IDC_ARROW);
148     wndclass.hbrBackground = (HBRUSH)( COLOR_WINDOW+1 );
149     wndclass.lpszMenuName = szAppName;  /* Menu Name is App Name */
150     wndclass.lpszClassName = szAppName; /* Class Name is App Name */
151     if( !RegisterClass( &wndclass )) {
152         return( -1 );
153     }
154
155     return( 0 );
156 }
157
158 void
159 unreg_classes( void )
160 {
161     UnregisterClass( szAppName, hInst );
162 }
163
164
165 char *
166 getline( char *line, int len, FILE *s, char *prompt )
167 {
168      FARPROC lpfnDlgProc;
169      int        nRc;
170
171      printf( prompt );
172
173      lpfnDlgProc = MakeProcInstance((FARPROC)GetLineDlgProc, hInst);
174      nRc = DialogBox(hInst, MAKEINTRESOURCE(200), hWndMain, lpfnDlgProc);
175      FreeProcInstance(lpfnDlgProc);
176      if ( !nRc ) {
177         return( NULL );
178      }
179      strncpy( line, szLineBuf, len );
180      printf( "%s\n", line );
181      return( line );
182 }
183
184
185
186 void
187 perror( char *msg )
188 {
189     printf( "%s: error %d\n", msg, WSAGetLastError());
190 }
191
192 void
193 appexit( int rc )
194 {
195     printf( "exit( %d )\n", rc );
196 }
197
198 int
199 fprintf( FILE *f, char *fmt, void *a1, void *a2, void *a3, void *a4,
200     void *a5 )
201 {
202     printf( fmt, a1, a2, a3, a4, a5 );
203 }
204
205 int
206 printf( char *fmt, void *a1, void *a2, void *a3, void *a4, void *a5 )
207 {
208     char *p, *send, buf[ 1024 ], *crlf = "\r\n";
209
210     sprintf( buf, fmt, a1, a2, a3, a4, a5 );
211
212     send = buf;
213     for ( p = buf; *p != '\0'; ++p ) {
214         if ( *p == '\n' ) {
215             *p = '\0';
216             SendMessage( hWndOutputEdit, EM_REPLACESEL, 0, (long)send );
217             SendMessage( hWndOutputEdit, EM_REPLACESEL, 0, (long)crlf );
218             send = p + 1;
219         }
220     }
221
222     if ( p > send ) {
223         SendMessage( hWndOutputEdit, EM_REPLACESEL, 0, (long)send );
224     }
225 }
226
227 BOOL FAR PASCAL
228 GetLineDlgProc(HWND hWndDlg, WORD Message, WORD wParam, LONG lParam)
229 {
230    switch(Message) {
231    case WM_INITDIALOG:
232          /* cwCenter(hWndDlg, 0); */
233          break;
234
235     case WM_CLOSE:
236          /* Closing the Dialog behaves the same as Cancel               */
237          PostMessage(hWndDlg, WM_COMMAND, IDCANCEL, 0L);
238          break;
239
240     case WM_COMMAND:
241          switch(wParam) {
242              case IDOK:
243              SendDlgItemMessage( hWndDlg, DLG_GETLINE_TEXT, WM_GETTEXT, sizeof( szLineBuf),
244                 (long)szLineBuf );
245              EndDialog(hWndDlg, TRUE);
246              break;
247          case IDCANCEL:
248              EndDialog(hWndDlg, FALSE);
249              break;
250         }
251         break;
252
253     default:
254         return FALSE;
255     }
256     return TRUE;
257 }