1 const char win32_rcs[] = "$Id: win32.c,v 1.1 2001/05/13 21:57:07 administrator Exp $";
2 /*********************************************************************
4 * File : $Source: /home/administrator/cvs/ijb/win32.c,v $
6 * Purpose : Win32 User Interface initialization and message loop
8 * Copyright : Written by and Copyright (C) 2001 the SourceForge
9 * IJBSWA team. http://ijbswa.sourceforge.net
11 * Written by and Copyright (C) 1999 Adam Lock
14 * This program is free software; you can redistribute it
15 * and/or modify it under the terms of the GNU General
16 * Public License as published by the Free Software
17 * Foundation; either version 2 of the License, or (at
18 * your option) any later version.
20 * This program is distributed in the hope that it will
21 * be useful, but WITHOUT ANY WARRANTY; without even the
22 * implied warranty of MERCHANTABILITY or FITNESS FOR A
23 * PARTICULAR PURPOSE. See the GNU General Public
24 * License for more details.
26 * The GNU General Public License should be included with
27 * this file. If not, you can view it at
28 * http://www.gnu.org/copyleft/gpl.html
29 * or write to the Free Software Foundation, Inc., 59
30 * Temple Place - Suite 330, Boston, MA 02111-1307, USA.
35 *********************************************************************/
47 /* Uncomment this if you want to build Win32 as a console app */
48 /* #define _WIN_CONSOLE */
57 const char win32_h_rcs[] = WIN32_H_VERSION;
59 const char win32_blurb[] =
60 "Internet Junkbuster Proxy(TM) Version " VERSION " for Windows is Copyright (C) 1997-8\n"
61 "by Junkbusters Corp. This is free software; it may be used and copied under\n"
62 "the GNU General Public License: http://www.gnu.org/copyleft/gpl.html .\n"
63 "This program comes with ABSOLUTELY NO WARRANTY OF ANY KIND.\n"
65 "For information about how to to configure the proxy and your browser, see\n"
66 " " REDIRECT_URL "win\n"
68 "The Internet Junkbuster Proxy(TM) is running and ready to serve!\n"
77 HINSTANCE g_hInstance;
80 static void __cdecl UserInterfaceThread(void *);
85 /*********************************************************************
89 * Description : M$ Windows "main" routine:
90 * parse the `lpCmdLine' param into main's argc and argv variables,
91 * start the user interface thread (for the systray window), and
92 * call main (i.e. patch execution into normal IJB startup).
95 * 1 : hInstance = instance handle of this IJB execution
96 * 2 : hPrevInstance = instance handle of previous IJB execution
97 * 3 : lpCmdLine = command line string which started IJB
98 * 4 : nCmdShow = window show value (MIN, MAX, NORMAL, etc...)
100 * Returns : `main' never returns, so WinMain will also never return.
102 *********************************************************************/
103 int WINAPI WinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance, LPSTR lpCmdLine, int nCmdShow)
109 char *pszArgs = NULL;
111 char szModule[MAX_PATH+1];
113 HANDLE hInitCompleteEvent = NULL;
116 /* Split command line into arguments */
117 pszArgs = (char *)malloc(strlen(lpCmdLine) + 1);
118 strcpy(pszArgs, lpCmdLine);
120 GetModuleFileName(hInstance, szModule, MAX_PATH);
122 /* Count number of spaces */
124 if (strlen(pszArgs) > 0)
126 pszLastTok = pszArgs;
130 pszLastTok = strchr(pszLastTok+1, ' ');
131 } while (pszLastTok);
134 /* Allocate array of strings */
135 argv = (char **)malloc(sizeof(char *) * argc);
137 /* step through command line replacing spaces with zeros, initialise array */
140 pszLastTok = pszArgs;
143 argv[i] = pszLastTok;
144 pszLastTok = strchr(pszLastTok+1, ' ');
147 while (*pszLastTok != '\0' && *pszLastTok == ' ')
154 } while (pszLastTok && *pszLastTok != '\0');
157 /* Create a user-interface thread and wait for it to initialise */
158 hInitCompleteEvent = CreateEvent(NULL, TRUE, FALSE, NULL);
159 g_hInstance = hInstance;
160 g_nCmdShow = nCmdShow;
161 _beginthread(UserInterfaceThread, 0, &hInitCompleteEvent);
162 WaitForSingleObject(hInitCompleteEvent, INFINITE);
163 DeleteObject(hInitCompleteEvent);
167 res = _main( argc, argv );
169 res = main( argc, argv );
182 /*********************************************************************
184 * Function : InitWin32
186 * Description : Initialise windows, setting up the console or windows as appropriate.
192 *********************************************************************/
195 WORD wVersionRequested;
199 SetProcessShutdownParameters(0x100, SHUTDOWN_NORETRY);
205 wVersionRequested = MAKEWORD(2, 0);
206 if (WSAStartup(wVersionRequested, &wsaData) != 0)
209 MessageBox(NULL, "Cannot initialize WinSock library", "Internet JunkBuster Error",
210 MB_OK | MB_ICONERROR | MB_TASKMODAL | MB_SETFOREGROUND | MB_TOPMOST);
226 /*********************************************************************
228 * Function : UserInterfaceThread
230 * Description : User interface thread. WinMain will wait for us to set
231 * the hInitCompleteEvent before patching over to `main'.
232 * This ensures the systray window is active before beginning
236 * 1 : pData = pointer to `hInitCompleteEvent'.
240 *********************************************************************/
241 static void __cdecl UserInterfaceThread(void *pData)
244 HANDLE hInitCompleteEvent = *((HANDLE *) pData);
248 SetEvent(hInitCompleteEvent);
250 /* Enter a message processing loop */
251 while (GetMessage(&msg, (HWND) NULL, 0, 0))
253 TranslateMessage(&msg);
254 DispatchMessage(&msg);