/*++ Copyright (c) 1996 Microsoft Corporation Module Name: faxcfg.c Abstract: Implementation of the control panel applet entry point Environment: Windows NT fax configuration applet Revision History: 02/27/96 -davidx- Created it. 05/22/96 -davidx- Share the same DLL with remote admin program. mm/dd/yy -author- description --*/ #include #include #include #include #include #include "faxcfg.h" #include "resource.h" // // Fax configuration applet index // #define FAX_CLIENT_APPLET 0 #define FAX_SERVER_APPLET 1 // // Definition of global variables // HANDLE ghInstance; // DLL instance handle INT faxConfigType; // fax configuration type // // Forward declaration of local functions // VOID FillOutCPlInfo(CPLINFO *, INT); INT DoFaxConfiguration(HWND, INT, LPTSTR); BOOL DllEntryPoint( HANDLE hModule, ULONG ulReason, PCONTEXT pContext ) /*++ Routine Description: DLL initialization procedure. Arguments: hModule - DLL instance handle ulReason - Reason for the call pContext - Pointer to context (not used by us) Return Value: TRUE if DLL is initialized successfully, FALSE otherwise. --*/ { switch (ulReason) { case DLL_PROCESS_ATTACH: ghInstance = hModule; break; case DLL_PROCESS_DETACH: break; } return TRUE; } LONG CPlApplet( HWND hwndCPl, UINT uMsg, LONG lParam1, LONG lParam2 ) /*++ Routine Description: Control panel applet entry point Arguments: hwndCPl - Identifies the Control Panel window uMsg - Specifies the message being sent to the Control Panel applet lParam1 - Specifies additional message-specific information lParam2 - Specifies additional message-specific information Return Value: Depends on the message --*/ { static BOOL Failed = FALSE; switch (uMsg) { case CPL_INIT: { DWORD Size; WCHAR ComputerName[MAX_COMPUTERNAME_LENGTH+4]; ComputerName[0] = L'\\'; ComputerName[1] = L'\\'; Size = sizeof(ComputerName)/sizeof(WCHAR); GetComputerName( &ComputerName[2], &Size ); return (faxConfigType = FaxConfigInit(ComputerName, TRUE)) >= 0; } case CPL_GETCOUNT: // // We export one or two applets depending on whether // we're doing client, server, or workstation configuration // return (faxConfigType == FAXCONFIG_SERVER) ? 2 : 1; case CPL_INQUIRE: // // Fill out the CPLINFO structure depending on the fax configuration type // FillOutCPlInfo((CPLINFO *) lParam2, lParam1); break; case CPL_DBLCLK: // // Treat this as CPL_STARTWPARMS with no parameter // if (Failed) { return 1; } return DoFaxConfiguration(hwndCPl, lParam1, NULL); case CPL_STARTWPARMS: // // Display fax configuration dialog: client, server, or workstation // if (!(DoFaxConfiguration(hwndCPl, lParam1, (LPTSTR) lParam2) == 0)) { Failed = TRUE; return 1; } return 0; case CPL_EXIT: FaxConfigCleanup(); break; } return 0; } VOID FillOutCPlInfo( CPLINFO *pCPlInfo, INT cplIndex ) /*++ Routine Description: Fill out the CPLINFO structure corresponding to the specified fax configuration control panel applet Arguments: pCPlInfo - Points to a CPLINFO buffer cplIndex - Index of the interested fax conguration applet Return Value: NONE --*/ { pCPlInfo->lData = 0; switch (faxConfigType) { case FAXCONFIG_SERVER: if (cplIndex == FAX_SERVER_APPLET) { // // Fax server configuration // pCPlInfo->idIcon = IDI_FAX_SERVER; pCPlInfo->idName = IDS_FAX_SERVER; pCPlInfo->idInfo = IDS_CONFIG_FAX_SERVER; } else { // // Fax client configuration // pCPlInfo->idIcon = IDI_FAX_CLIENT; pCPlInfo->idName = IDS_FAX_CLIENT; pCPlInfo->idInfo = IDS_CONFIG_FAX_CLIENT; } break; default: // // Fax client or workstation configuration // pCPlInfo->idIcon = IDI_FAX; pCPlInfo->idName = IDS_FAX; pCPlInfo->idInfo = IDS_CONFIG_FAX; break; } } INT DoFaxConfiguration( HWND hwndCPl, INT cplIndex, LPTSTR pCmdLine ) /*++ Routine Description: Display fax configuration dialogs: client, server, or workstation Arguments: hwndCPl - Handle to the Control Panel window cplIndex - Index of the interested fax configuration applet pCmdLine - Command line parameters Return Value: 0 if successful, -1 if there is an error --*/ #define MAX_PAGES 16 #define MAX_TITLE_LEN 64 { HPROPSHEETPAGE hPropSheetPages[MAX_PAGES]; PROPSHEETHEADER psh; CPLINFO cplInfo; TCHAR dlgTitle[MAX_TITLE_LEN]; INT nPages, nStartPage; // // Get an array of property sheet page handles // switch (faxConfigType) { case FAXCONFIG_WORKSTATION: nPages = FaxConfigGetWorkstationPages(hPropSheetPages, MAX_PAGES); break; case FAXCONFIG_SERVER: if (cplIndex == FAX_SERVER_APPLET) { nPages = FaxConfigGetServerPages(hPropSheetPages, MAX_PAGES); break; } default: nPages = FaxConfigGetClientPages(hPropSheetPages, MAX_PAGES); break; }; if (nPages < 0 || nPages > MAX_PAGES) return -1; // // Determine which page to activate initially // nStartPage = pCmdLine ? _ttol(pCmdLine) : 0; if (nStartPage < 0 || nStartPage >= nPages) nStartPage = 0; // // Fill out PROPSHEETHEADER structure // FillOutCPlInfo(&cplInfo, cplIndex); LoadString(ghInstance, cplInfo.idInfo, dlgTitle, MAX_TITLE_LEN); ZeroMemory(&psh, sizeof(psh)); psh.dwSize = sizeof(PROPSHEETHEADER); psh.dwFlags = PSH_USEICONID; psh.hwndParent = hwndCPl; psh.hInstance = ghInstance; psh.pszIcon = MAKEINTRESOURCE(cplInfo.idIcon); psh.pszCaption = dlgTitle; psh.nPages = nPages; psh.nStartPage = nStartPage; psh.phpage = hPropSheetPages; // // Display the property sheet // return (PropertySheet(&psh) == -1) ? -1 : 0; }