408 lines
7.3 KiB
C
408 lines
7.3 KiB
C
/*++
|
||
|
||
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 <windowsx.h>
|
||
#include <commctrl.h>
|
||
#include <tchar.h>
|
||
|
||
#include "faxcfg.h"
|
||
#include "resource.h"
|
||
|
||
|
||
//
|
||
// Name of the remote fax server machine
|
||
//
|
||
|
||
#define MAX_NAME (MAX_COMPUTERNAME_LENGTH+3)
|
||
#define MAX_TITLE_LEN 128
|
||
#define MAX_MESSAGE_LEN 512
|
||
#define MAX_PAGES 16
|
||
|
||
HINSTANCE ghInstance;
|
||
INT gFaxConfigType;
|
||
INT gNumPages;
|
||
HPROPSHEETPAGE ghPropSheetPages[MAX_PAGES];
|
||
TCHAR FaxServerName[MAX_NAME];
|
||
TCHAR TitleStr[MAX_TITLE_LEN];
|
||
|
||
|
||
|
||
VOID
|
||
DisplayErrorMessage(
|
||
INT msgStrId
|
||
)
|
||
|
||
/*++
|
||
|
||
Routine Description:
|
||
|
||
Display an error message dialog box
|
||
|
||
Arguments:
|
||
|
||
msgStrId - Message format string resource ID
|
||
|
||
Return Value:
|
||
|
||
NONE
|
||
|
||
--*/
|
||
|
||
{
|
||
TCHAR buffer[MAX_MESSAGE_LEN];
|
||
|
||
if (! LoadString(ghInstance, msgStrId, buffer, MAX_MESSAGE_LEN))
|
||
buffer[0] = 0;
|
||
|
||
MessageBox(NULL, buffer, TitleStr, MB_OK | MB_ICONERROR);
|
||
}
|
||
|
||
|
||
|
||
VOID
|
||
MakeTitleString(
|
||
LPTSTR pServerName
|
||
)
|
||
|
||
/*++
|
||
|
||
Routine Description:
|
||
|
||
Compose the title string for the remote configuration dialog
|
||
|
||
Arguments:
|
||
|
||
pServerName - Specifies the name of the remote server
|
||
|
||
Return Value:
|
||
|
||
NONE
|
||
|
||
--*/
|
||
|
||
{
|
||
if (! LoadString(ghInstance, IDS_FAX_REMOTE_ADMIN, TitleStr, MAX_TITLE_LEN))
|
||
TitleStr[0] = 0;
|
||
|
||
if (_tcslen(TitleStr) + _tcslen(pServerName) < MAX_TITLE_LEN)
|
||
_tcscat(TitleStr, pServerName);
|
||
}
|
||
|
||
|
||
|
||
BOOL CALLBACK
|
||
GetFaxServerNameProc(
|
||
HWND hDlg,
|
||
UINT uMsg,
|
||
WPARAM wParam,
|
||
LPARAM lParam
|
||
)
|
||
|
||
/*++
|
||
|
||
Routine Description:
|
||
|
||
Dialog procedure for prompting the user to enter a fax server name
|
||
|
||
Arguments:
|
||
|
||
hDlg - Handle to dialog window
|
||
uMsg - Message
|
||
wParam, lParam - Parameters
|
||
|
||
Return Value:
|
||
|
||
Depends on message
|
||
|
||
--*/
|
||
|
||
{
|
||
switch (uMsg) {
|
||
|
||
case WM_INITDIALOG:
|
||
|
||
SendDlgItemMessage(hDlg, IDC_FAXSERVER_NAME, EM_LIMITTEXT, MAX_NAME-1, 0);
|
||
SetDlgItemText(hDlg, IDC_FAXSERVER_NAME, FaxServerName);
|
||
return TRUE;
|
||
|
||
case WM_COMMAND:
|
||
|
||
switch (GET_WM_COMMAND_ID(wParam, lParam)) {
|
||
|
||
case IDC_FAXSERVER_NAME:
|
||
|
||
if (GET_WM_COMMAND_CMD(wParam, lParam) == EN_CHANGE) {
|
||
|
||
EnableWindow(GetDlgItem(hDlg, IDOK),
|
||
GetWindowTextLength(GetDlgItem(hDlg, IDC_FAXSERVER_NAME)) > 0);
|
||
}
|
||
return TRUE;
|
||
|
||
case IDOK:
|
||
|
||
if (GetWindowTextLength(GetDlgItem(hDlg, IDC_FAXSERVER_NAME)) > 0) {
|
||
|
||
GetDlgItemText(hDlg, IDC_FAXSERVER_NAME, FaxServerName, MAX_NAME);
|
||
EndDialog(hDlg, IDOK);
|
||
|
||
} else
|
||
MessageBeep(MB_OK);
|
||
|
||
return TRUE;
|
||
|
||
case IDCANCEL:
|
||
|
||
EndDialog(hDlg, IDCANCEL);
|
||
return TRUE;
|
||
}
|
||
|
||
break;
|
||
}
|
||
|
||
return FALSE;
|
||
}
|
||
|
||
|
||
|
||
DWORD
|
||
ConnectFaxServerThread(
|
||
HWND hDlg
|
||
)
|
||
|
||
/*++
|
||
|
||
Routine Description:
|
||
|
||
Thread proc for connecting to the remote fax server
|
||
|
||
Arguments:
|
||
|
||
hDlg - Handle to the status dialog
|
||
|
||
Return Value:
|
||
|
||
IDOK if successful, IDCANCEL otherwise
|
||
|
||
--*/
|
||
|
||
{
|
||
DWORD result = IDCANCEL;
|
||
|
||
gFaxConfigType = FaxConfigInit(FaxServerName, FALSE);
|
||
|
||
if (gFaxConfigType == FAXCONFIG_SERVER &&
|
||
(gNumPages = FaxConfigGetServerPages(ghPropSheetPages, MAX_PAGES)) <= MAX_PAGES)
|
||
{
|
||
result = IDOK;
|
||
}
|
||
|
||
PostMessage(hDlg, WM_APP, result, 0);
|
||
return result;
|
||
}
|
||
|
||
|
||
|
||
BOOL CALLBACK
|
||
ConnectFaxServerProc(
|
||
HWND hDlg,
|
||
UINT uMsg,
|
||
WPARAM wParam,
|
||
LPARAM lParam
|
||
)
|
||
|
||
/*++
|
||
|
||
Routine Description:
|
||
|
||
Dialog procedure for connecting to the fax server
|
||
|
||
Arguments:
|
||
|
||
hDlg - Handle to dialog window
|
||
uMsg - Message
|
||
wParam, lParam - Parameters
|
||
|
||
Return Value:
|
||
|
||
Depends on message
|
||
|
||
--*/
|
||
|
||
{
|
||
HANDLE hThread;
|
||
DWORD threadId;
|
||
|
||
switch (uMsg) {
|
||
|
||
case WM_INITDIALOG:
|
||
|
||
SetWindowText(hDlg, TitleStr);
|
||
|
||
if (hThread = CreateThread(NULL,
|
||
0,
|
||
(LPTHREAD_START_ROUTINE) ConnectFaxServerThread,
|
||
(LPVOID) hDlg,
|
||
0,
|
||
&threadId))
|
||
{
|
||
CloseHandle(hThread);
|
||
} else
|
||
EndDialog(hDlg, IDCANCEL);
|
||
|
||
break;
|
||
|
||
case WM_APP:
|
||
|
||
EndDialog(hDlg, wParam);
|
||
return TRUE;
|
||
}
|
||
|
||
return FALSE;
|
||
}
|
||
|
||
|
||
|
||
INT
|
||
wWinMain(
|
||
HINSTANCE hInstance,
|
||
HINSTANCE hPrevInstance,
|
||
LPTSTR lpCmdLine,
|
||
INT nCmdShow
|
||
)
|
||
|
||
/*++
|
||
|
||
Routine Description:
|
||
|
||
Application entry point
|
||
|
||
Arguments:
|
||
|
||
hInstance - Identifies the current instance of the application
|
||
hPrevInstance - Identifies the previous instance of the application
|
||
lpCmdLine - Specifies the command line for the application.
|
||
nCmdShow - Specifies how the window is to be shown
|
||
|
||
Return Value:
|
||
|
||
0
|
||
|
||
--*/
|
||
|
||
{
|
||
PROPSHEETHEADER psh;
|
||
BOOL cmdlineServerName;
|
||
BOOL success = FALSE;
|
||
|
||
ghInstance = hInstance;
|
||
|
||
//
|
||
// Check if the server name is specified on the command line
|
||
//
|
||
|
||
if (lpCmdLine && *lpCmdLine) {
|
||
|
||
cmdlineServerName = TRUE;
|
||
|
||
if (_tcslen(lpCmdLine) > MAX_NAME+2) {
|
||
|
||
MakeTitleString(lpCmdLine);
|
||
DisplayErrorMessage(IDS_NAME_TOO_LONG);
|
||
return -1;
|
||
|
||
} else
|
||
_tcscpy(FaxServerName, lpCmdLine);
|
||
|
||
} else
|
||
cmdlineServerName = FALSE;
|
||
|
||
do {
|
||
|
||
//
|
||
// Let the user enter the name of fax server computer
|
||
//
|
||
|
||
if (! cmdlineServerName &&
|
||
DialogBox(hInstance,
|
||
MAKEINTRESOURCE(IDD_SELECT_FAXSERVER),
|
||
NULL,
|
||
GetFaxServerNameProc) != IDOK)
|
||
{
|
||
break;
|
||
}
|
||
|
||
MakeTitleString(FaxServerName);
|
||
|
||
//
|
||
// Establish connection to the fax server
|
||
//
|
||
|
||
gFaxConfigType = -1;
|
||
|
||
if (DialogBox(ghInstance,
|
||
MAKEINTRESOURCE(IDD_CONNECT_FAXSERVER),
|
||
NULL,
|
||
ConnectFaxServerProc) == IDOK)
|
||
{
|
||
ZeroMemory(&psh, sizeof(psh));
|
||
psh.dwSize = sizeof(PROPSHEETHEADER);
|
||
psh.dwFlags = PSH_USEICONID;
|
||
psh.hwndParent = NULL;
|
||
psh.hInstance = ghInstance;
|
||
psh.pszIcon = MAKEINTRESOURCE(IDI_FAX_REMOTE_ADMIN);
|
||
psh.pszCaption = TitleStr;
|
||
psh.nPages = gNumPages;
|
||
psh.phpage = ghPropSheetPages;
|
||
|
||
//
|
||
// Display the property sheet
|
||
//
|
||
|
||
success = (PropertySheet(&psh) != -1);
|
||
}
|
||
|
||
if (gFaxConfigType >= 0)
|
||
FaxConfigCleanup();
|
||
|
||
//
|
||
// Display an error message if the fax server
|
||
// configuration dialog wasn't displayed
|
||
//
|
||
|
||
if (! success)
|
||
DisplayErrorMessage(IDS_REMOTE_ADMIN_FAILED);
|
||
|
||
} while (!success && !cmdlineServerName);
|
||
|
||
return 0;
|
||
}
|
||
|