2025-04-27 07:49:33 -04:00

265 lines
4.9 KiB
C

/*++
Copyright (c) 1990-1998 Microsoft Corporation
All rights reserved
Module Name:
dialogs.c
Abstract:
// @@BEGIN_DDKSPLIT
Environment:
User Mode -Win32
Revision History:
// @@END_DDKSPLIT
--*/
#include "precomp.h"
#pragma hdrstop
#include "dialogs.h"
WCHAR szLcmHelpFile[] = L"WINDOWS.HLP";
const DWORD g_aHelpIDs[]=
{
IDD_PF_EF_OUTPUTFILENAME, 8810218, // Print to File: "" (Edit)
0, 0
};
/* PortIsValid
*
* Validate the port by attempting to create/open it.
*/
BOOL
PortIsValid(
LPWSTR pPortName
)
{
HANDLE hFile;
BOOL Valid;
//
// For COM and LPT ports, no verification
//
if ( IS_COM_PORT( pPortName ) ||
IS_LPT_PORT( pPortName ) ||
IS_FILE_PORT( pPortName ) )
{
return TRUE;
}
hFile = CreateFile(pPortName,
GENERIC_WRITE,
FILE_SHARE_READ,
NULL,
OPEN_EXISTING,
FILE_ATTRIBUTE_NORMAL,
NULL);
if (hFile == INVALID_HANDLE_VALUE) {
hFile = CreateFile(pPortName,
GENERIC_WRITE,
FILE_SHARE_READ,
NULL,
OPEN_ALWAYS,
FILE_ATTRIBUTE_NORMAL | FILE_FLAG_DELETE_ON_CLOSE,
NULL);
}
if (hFile != INVALID_HANDLE_VALUE) {
CloseHandle(hFile);
Valid = TRUE;
} else {
Valid = FALSE;
}
return Valid;
}
/*
*
*/
INT_PTR APIENTRY
PrintToFileDlg(
HWND hwnd,
UINT msg,
WPARAM wparam,
LPARAM lparam
)
{
switch(msg)
{
case WM_INITDIALOG:
return PrintToFileInitDialog(hwnd, (PHANDLE)lparam);
case WM_COMMAND:
switch (LOWORD(wparam))
{
case IDOK:
return PrintToFileCommandOK(hwnd);
case IDCANCEL:
return PrintToFileCommandCancel(hwnd);
}
break;
case WM_HELP:
case WM_CONTEXTMENU:
return LocalHelp(hwnd, msg, wparam, lparam);
}
return FALSE;
}
/*
*
*/
BOOL
PrintToFileInitDialog(
HWND hwnd,
PHANDLE phFile
)
{
BringWindowToTop( hwnd );
SetFocus(hwnd);
SetWindowLongPtr( hwnd, GWLP_USERDATA, (LONG_PTR)phFile );
SendDlgItemMessage( hwnd, IDD_PF_EF_OUTPUTFILENAME, EM_LIMITTEXT, MAX_PATH, 0);
return TRUE;
}
/*
*
*/
BOOL
PrintToFileCommandOK(
HWND hwnd
)
{
WCHAR pFileName[MAX_PATH];
WIN32_FIND_DATA FindData;
PHANDLE phFile;
HANDLE hFile;
HANDLE hFind;
phFile = (PHANDLE)GetWindowLongPtr( hwnd, GWLP_USERDATA );
GetDlgItemText( hwnd, IDD_PF_EF_OUTPUTFILENAME,
pFileName, MAX_PATH );
hFind = FindFirstFile( pFileName, &FindData );
/* If the file already exists, get the user to verify
* before we overwrite it:
*/
if( hFind != INVALID_HANDLE_VALUE )
{
FindClose( hFind );
if( LcmMessage( hwnd, MSG_CONFIRMATION, IDS_LOCALMONITOR,
IDS_OVERWRITE_EXISTING_FILE )
!= IDOK )
{
return TRUE;
}
}
hFile = CreateFile( pFileName, GENERIC_WRITE, FILE_SHARE_READ, NULL,
OPEN_ALWAYS,
FILE_ATTRIBUTE_NORMAL | FILE_FLAG_SEQUENTIAL_SCAN,
NULL );
if( hFile == INVALID_HANDLE_VALUE )
{
ReportError( hwnd, IDS_LOCALMONITOR, IDS_COULD_NOT_OPEN_FILE );
}
else
{
*phFile = hFile;
EndDialog( hwnd, TRUE );
}
return TRUE;
}
/*
*
*/
BOOL
PrintToFileCommandCancel(
HWND hwnd
)
{
EndDialog(hwnd, FALSE);
return TRUE;
}
/*++
Routine Name:
LocalHelp
Routine Description:
Handles context sensitive help for the configure LPTX:
port and the dialog for adding a local port.
Arguments:
UINT uMsg,
HWND hDlg,
WPARAM wParam,
LPARAM lParam
Return Value:
TRUE if LcmMessage handled, otherwise FALSE.
--*/
BOOL
LocalHelp(
IN HWND hDlg,
IN UINT uMsg,
IN WPARAM wParam,
IN LPARAM lParam
)
{
BOOL bStatus = FALSE;
switch( uMsg ){
case WM_HELP:
bStatus = WinHelp((HWND)((LPHELPINFO)lParam)->hItemHandle,
szLcmHelpFile,
HELP_WM_HELP,
(ULONG_PTR)g_aHelpIDs );
break;
case WM_CONTEXTMENU:
bStatus = WinHelp((HWND)wParam,
szLcmHelpFile,
HELP_CONTEXTMENU,
(ULONG_PTR)g_aHelpIDs );
break;
}
return bStatus;
}