windows-nt/Source/XPSP1/NT/printscan/fax/config/cpl/faxcfg.c

371 lines
6.6 KiB
C
Raw Normal View History

2020-09-26 03:20:57 -05:00
/*++
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 <stdlib.h>
#include <windows.h>
#include <commctrl.h>
#include <cpl.h>
#include <tchar.h>
#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;
}