You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
169 lines
3.7 KiB
169 lines
3.7 KiB
/*++
|
|
|
|
Copyright (c) 1995-1996 Microsoft Corporation
|
|
|
|
Module Name:
|
|
|
|
main
|
|
|
|
Abstract:
|
|
|
|
Trivial WinMain() function, creates tabbed dialog "property pages"
|
|
and then creates the dialog... interesting code is in dialog procedures.
|
|
|
|
Author:
|
|
|
|
Steve Firebaugh (stevefir) 31-Dec-1995
|
|
|
|
Revision History:
|
|
|
|
SPORDER.EXE, DLL, & LIB were shipped in Win32 SDK along with NT4.
|
|
|
|
Comments:
|
|
|
|
Code is generally ready to be compiled with UNICODE defined, however,
|
|
we do not make use of this because EXE and DLL must also work on
|
|
Windows 95.
|
|
|
|
--*/
|
|
|
|
|
|
#include <windows.h>
|
|
#include <winsock2.h>
|
|
#include <commctrl.h>
|
|
#include "globals.h"
|
|
|
|
|
|
HINSTANCE ghInst;
|
|
|
|
|
|
int
|
|
APIENTRY
|
|
WinMain(
|
|
HINSTANCE hInstance,
|
|
HINSTANCE hPrevInstance,
|
|
LPSTR lpCmdLine,
|
|
int nCmdShow
|
|
)
|
|
{
|
|
|
|
PROPSHEETPAGE psp[3];
|
|
PROPSHEETHEADER psh;
|
|
WSADATA WSAData;
|
|
int iTab = 0;
|
|
int r;
|
|
DWORD dwWait;
|
|
HANDLE hMutex;
|
|
TCHAR pszMutextName[] = TEXT("sporder.exe");
|
|
|
|
|
|
DBGOUT((TEXT("checked build.\n")));
|
|
|
|
//
|
|
// It is possible that we will have multiple instances running at the
|
|
// same time... what we really want is the first to finish before the
|
|
// second really gets going... for that reason, wait here on mutex
|
|
//
|
|
|
|
hMutex = CreateMutex (NULL, FALSE, pszMutextName);
|
|
hMutex = OpenMutex (SYNCHRONIZE, FALSE, pszMutextName);
|
|
dwWait = WaitForSingleObject (hMutex, 0);
|
|
if (dwWait == WAIT_TIMEOUT)
|
|
{
|
|
OutputDebugString (TEXT("WaitForSingleObject, WAIT_TIMEOUT\n"));
|
|
return TRUE;
|
|
}
|
|
|
|
//
|
|
// Do global initializations.
|
|
//
|
|
|
|
ghInst = hInstance;
|
|
InitCommonControls();
|
|
memset (psp, 0, sizeof (psp));
|
|
memset (&psh, 0, sizeof (psh));
|
|
|
|
|
|
if (WSAStartup(MAKEWORD (2,2),&WSAData) == SOCKET_ERROR) {
|
|
OutputDebugString (TEXT("WSAStartup failed\n"));
|
|
return -1;
|
|
}
|
|
|
|
|
|
psp[iTab].dwSize = sizeof(PROPSHEETPAGE);
|
|
psp[iTab].dwFlags = PSP_USETITLE;
|
|
psp[iTab].hInstance = ghInst;
|
|
psp[iTab].pszTemplate = TEXT("WS2SPDlg");
|
|
psp[iTab].pszIcon = TEXT("");
|
|
psp[iTab].pfnDlgProc = SortDlgProc;
|
|
psp[iTab].pszTitle = TEXT("Service Providers");
|
|
psp[iTab].lParam = 0;
|
|
iTab++;
|
|
|
|
|
|
psp[iTab].dwSize = sizeof(PROPSHEETPAGE);
|
|
psp[iTab].dwFlags = PSP_USETITLE;
|
|
psp[iTab].hInstance = ghInst;
|
|
psp[iTab].pszTemplate = TEXT("RNRSPDlg");
|
|
psp[iTab].pszIcon = TEXT("");
|
|
psp[iTab].pfnDlgProc = RNRDlgProc;
|
|
psp[iTab].pszTitle = TEXT("Name Resolution ");
|
|
psp[iTab].lParam = 0;
|
|
iTab++;
|
|
|
|
psh.dwSize = sizeof(PROPSHEETHEADER);
|
|
psh.dwFlags = PSH_PROPSHEETPAGE ; // | PSH_NOAPPLYNOW ; // | PSH_HASHELP ;
|
|
psh.hwndParent = NULL;
|
|
psh.hInstance = ghInst;
|
|
psh.pszIcon = TEXT("");
|
|
psh.pszCaption = TEXT("Windows Sockets Configuration");
|
|
psh.nPages = iTab;
|
|
psh.ppsp = (LPCPROPSHEETPAGE) &psp;
|
|
|
|
//
|
|
// Finally display the dialog with the property sheets.
|
|
//
|
|
|
|
//
|
|
// Sundown: Possible truncation here from INT_PTR to int in the return value.
|
|
// However, WinMain returns an exit value which is still a 32bit value.
|
|
//
|
|
|
|
r = (int)PropertySheet(&psh);
|
|
|
|
//
|
|
// Cleanup sockets, release mutex, and close handle
|
|
//
|
|
|
|
WSACleanup ();
|
|
ReleaseMutex (hMutex);
|
|
CloseHandle (hMutex);
|
|
|
|
return r;
|
|
}
|
|
|
|
|
|
#if DBG
|
|
void
|
|
_cdecl
|
|
DbgPrint(
|
|
PTCH Format,
|
|
...
|
|
)
|
|
/*++
|
|
|
|
Write debug output messages if compiled with DEBUG
|
|
|
|
--*/
|
|
{
|
|
TCHAR buffer[MAX_PATH];
|
|
|
|
va_list marker;
|
|
va_start (marker,Format);
|
|
wvsprintf (buffer,Format, marker);
|
|
OutputDebugString (TEXT("SPORDER.EXE: "));
|
|
OutputDebugString (buffer);
|
|
|
|
return;
|
|
}
|
|
#endif
|