windows-nt/Source/XPSP1/NT/base/ntsetup/opktools/setupmgr/net/msnwipx.c
2020-09-26 16:20:57 +08:00

425 lines
14 KiB
C

//----------------------------------------------------------------------------
//
// Copyright (c) 1997-1999 Microsoft Corporation
// All rights reserved.
//
// File Name:
// msnwipx.c
//
// Description:
// This file contains the property sheet and page procedures for the
// IPX protocol property sheet.
//
//----------------------------------------------------------------------------
#include "pch.h"
#include "resource.h"
#define MAX_NETWORKNUMBER_LENGTH 8
static TCHAR *StrIpxDescription;
static TCHAR *StrAutoDetect;
static TCHAR *StrEthernet_802_2;
static TCHAR *StrEthernet_802_3;
static TCHAR *StrEthernet_II;
static TCHAR *StrEthernetSnap;
PROPSHEETHEADER MS_NWIPX_pshead ;
PROPSHEETPAGE MS_NWIPX_pspage ;
UINT CALLBACK
MS_NWIPX_PropertiesPageProc( HWND hwnd, UINT uMsg, LPPROPSHEETPAGE ppsp );
int CALLBACK MS_NWIPX_PropertySheetProc( IN HWND hwndDlg,
IN UINT uMsg,
IN LPARAM lParam );
INT_PTR CALLBACK MS_NWIPX_PropertiesDlgProc(
IN HWND hwnd,
IN UINT uMsg,
IN WPARAM wParam,
IN LPARAM lParam);
//----------------------------------------------------------------------------
//
// Function: MS_NWIPX_PropertySheetProc
//
// Purpose:
//
// Arguments:
//
// Returns:
//
//----------------------------------------------------------------------------
int CALLBACK MS_NWIPX_PropertySheetProc( IN HWND hwndDlg,
IN UINT uMsg,
IN LPARAM lParam ) {
switch( uMsg ) {
case PSCB_INITIALIZED:
// Process PSCB_INITIALIZED
break;
case PSCB_PRECREATE:
// Process PSCB_PRECREATE
break;
default:
// Unknown message
break;
}
return 0 ;
}
//----------------------------------------------------------------------------
//
// Function: Create_MS_NWIPX_PropertySheet
//
// Purpose:
//
// Arguments:
//
// Returns:
//
//----------------------------------------------------------------------------
BOOL Create_MS_NWIPX_PropertySheet( HWND hwndParent ) {
// Initialize property sheet HEADER data
ZeroMemory( &MS_NWIPX_pshead, sizeof( PROPSHEETHEADER ) ) ;
MS_NWIPX_pshead.dwSize = sizeof( PROPSHEETHEADER ) ;
MS_NWIPX_pshead.dwFlags = PSH_PROPSHEETPAGE |
PSH_USECALLBACK |
PSH_USEHICON |
PSH_NOAPPLYNOW;
MS_NWIPX_pshead.hwndParent = hwndParent ;
MS_NWIPX_pshead.hInstance = FixedGlobals.hInstance;
MS_NWIPX_pshead.pszCaption = g_StrIpxProtocolTitle;
MS_NWIPX_pshead.nPages = 1 ;
MS_NWIPX_pshead.nStartPage = 0 ;
MS_NWIPX_pshead.ppsp = &MS_NWIPX_pspage ;
MS_NWIPX_pshead.pfnCallback = MS_NWIPX_PropertySheetProc ;
// Zero out property PAGE data
ZeroMemory (&MS_NWIPX_pspage, 1 * sizeof( PROPSHEETPAGE) ) ;
MS_NWIPX_pspage.dwSize = sizeof( PROPSHEETPAGE ) ;
MS_NWIPX_pspage.dwFlags = PSP_USECALLBACK ;
MS_NWIPX_pspage.hInstance = FixedGlobals.hInstance;
MS_NWIPX_pspage.pszTemplate = MAKEINTRESOURCE(IDD_IPX_CONFIG) ;
MS_NWIPX_pspage.pfnDlgProc = MS_NWIPX_PropertiesDlgProc ;
MS_NWIPX_pspage.pfnCallback = MS_NWIPX_PropertiesPageProc ;
// --------- Create & display property sheet ---------
return PropertySheet( &MS_NWIPX_pshead ) ? TRUE : FALSE ;
}
//----------------------------------------------------------------------------
//
// Function: MS_NWIPX_PropertiesPageProc
//
// Purpose:
//
// Arguments:
//
// Returns:
//
//----------------------------------------------------------------------------
UINT CALLBACK
MS_NWIPX_PropertiesPageProc( HWND hwnd, UINT uMsg, LPPROPSHEETPAGE ppsp ) {
switch( uMsg ) {
case PSPCB_CREATE :
return 1 ;
case PSPCB_RELEASE :
return 0;
}
return 0 ;
}
//----------------------------------------------------------------------------
//
// Function: MS_NWIPX_PropertiesDlgProc
//
// Purpose:
//
// Arguments:
//
// Returns:
//
//----------------------------------------------------------------------------
INT_PTR CALLBACK MS_NWIPX_PropertiesDlgProc(
IN HWND hwnd,
IN UINT uMsg,
IN WPARAM wParam,
IN LPARAM lParam)
{
BOOL bStatus = TRUE;
switch( uMsg ) {
case WM_INITDIALOG: {
HWND hInternalNetworkNumberEditBox = GetDlgItem( hwnd,
IDC_EDT_IPXAS_INTERNAL );
HWND hNetworkNumberEditBox = GetDlgItem( hwnd,
IDC_EDT_IPXPP_NETWORKNUMBER );
StrIpxDescription = MyLoadString( IDS_IPX_DESCRIPTION );
StrAutoDetect = MyLoadString( IDS_AUTO_DETECT );
StrEthernet_802_2 = MyLoadString( IDS_ETHERNET_802_2 );
StrEthernet_802_3 = MyLoadString( IDS_ETHERNET_802_3 );
StrEthernet_II = MyLoadString( IDS_ETHERNET_II );
StrEthernetSnap = MyLoadString( IDS_ETHERNET_SNAP );
SetWindowText(
GetDlgItem( hwnd, IDC_IPXPP_TEXT ), StrIpxDescription );
//
// Set the text limit on the edit boxes to MAX_NETWORKNUMBER_LENGTH
//
SendDlgItemMessage( hwnd,
IDC_EDT_IPXAS_INTERNAL,
EM_LIMITTEXT,
(WPARAM) MAX_NETWORKNUMBER_LENGTH,
(LPARAM) 0 );
SendDlgItemMessage( hwnd,
IDC_EDT_IPXPP_NETWORKNUMBER,
EM_LIMITTEXT,
(WPARAM) MAX_NETWORKNUMBER_LENGTH,
(LPARAM) 0 );
//
// Fill Combo box with initial values
//
SendDlgItemMessage( hwnd,
IDC_CMB_IPXPP_FRAMETYPE,
CB_ADDSTRING,
(WPARAM) 0,
(LPARAM) StrAutoDetect );
SendDlgItemMessage( hwnd,
IDC_CMB_IPXPP_FRAMETYPE,
CB_ADDSTRING,
(WPARAM) 0,
(LPARAM) StrEthernet_802_2 );
SendDlgItemMessage( hwnd,
IDC_CMB_IPXPP_FRAMETYPE,
CB_ADDSTRING,
(WPARAM) 0,
(LPARAM) StrEthernet_802_3);
SendDlgItemMessage( hwnd,
IDC_CMB_IPXPP_FRAMETYPE,
CB_ADDSTRING,
(WPARAM) 0,
(LPARAM) StrEthernet_II );
SendDlgItemMessage( hwnd,
IDC_CMB_IPXPP_FRAMETYPE,
CB_ADDSTRING,
(WPARAM) 0,
(LPARAM) StrEthernetSnap );
SetWindowText( hInternalNetworkNumberEditBox,
NetSettings.szInternalNetworkNumber );
//
// Make the default selection in the combo box whatever
// NetSettings.szFrameType is
//
if( lstrcmp( NetSettings.pCurrentAdapter->szFrameType,
_T("0xFF") ) == 0 ) {
SendDlgItemMessage( hwnd,
IDC_CMB_IPXPP_FRAMETYPE,
CB_SETCURSEL,
(WPARAM) 0,
(LPARAM) 0 );
}
else if( lstrcmp( NetSettings.pCurrentAdapter->szFrameType,
_T("0x2") ) == 0 ) {
SendDlgItemMessage( hwnd,
IDC_CMB_IPXPP_FRAMETYPE,
CB_SETCURSEL,
(WPARAM) 1,
(LPARAM) 0 );
}
else if( lstrcmp( NetSettings.pCurrentAdapter->szFrameType,
_T("0x1") ) == 0 ) {
SendDlgItemMessage( hwnd,
IDC_CMB_IPXPP_FRAMETYPE,
CB_SETCURSEL,
(WPARAM) 2,
(LPARAM) 0 );
}
else if( lstrcmp( NetSettings.pCurrentAdapter->szFrameType,
_T("0x0") ) == 0 ) {
SendDlgItemMessage( hwnd,
IDC_CMB_IPXPP_FRAMETYPE,
CB_SETCURSEL,
(WPARAM) 3,
(LPARAM) 0 );
}
else if( lstrcmp( NetSettings.pCurrentAdapter->szFrameType,
_T("0x3") ) == 0 ) {
SendDlgItemMessage( hwnd,
IDC_CMB_IPXPP_FRAMETYPE,
CB_SETCURSEL,
(WPARAM) 4,
(LPARAM) 0 );
}
if( lstrcmp( NetSettings.pCurrentAdapter->szFrameType,
_T("0xFF") ) == 0 ) {
EnableWindow( GetDlgItem( hwnd, IDC_STATIC_NETNUM ), FALSE );
EnableWindow( GetDlgItem( hwnd, IDC_EDT_IPXPP_NETWORKNUMBER ), FALSE );
}
else {
SetWindowText( hInternalNetworkNumberEditBox,
NetSettings.szInternalNetworkNumber );
SetWindowText( hNetworkNumberEditBox,
NetSettings.pCurrentAdapter->szNetworkNumber );
}
break;
}
case WM_NOTIFY: {
LPNMHDR pnmh = (LPNMHDR) lParam;
switch( pnmh->code ) {
case PSN_APPLY: {
TCHAR szFrameTypeBuffer[MAX_STRING_LEN];
// user clicked the OK button on the property sheet
HWND hInternalNetworkNumberEditBox = GetDlgItem( hwnd, IDC_EDT_IPXAS_INTERNAL );
HWND hNetworkNumberEditBox = GetDlgItem( hwnd, IDC_EDT_IPXPP_NETWORKNUMBER );
HWND hFrameTypeComboBox = GetDlgItem( hwnd, IDC_CMB_IPXPP_FRAMETYPE );
// 8+1 because only want to take the first 8 characters +1 for the null
GetWindowText( hInternalNetworkNumberEditBox, NetSettings.szInternalNetworkNumber, 8+1 );
GetWindowText( hNetworkNumberEditBox, NetSettings.pCurrentAdapter->szNetworkNumber, 8+1 );
//
// Map Combo Box names to the appropriate string for the answer file
//
GetWindowText( hFrameTypeComboBox, szFrameTypeBuffer, MAX_STRING_LEN );
if( lstrcmp( szFrameTypeBuffer, StrAutoDetect ) == 0 ) {
lstrcpyn( NetSettings.pCurrentAdapter->szFrameType, _T("0xFF"), AS(NetSettings.pCurrentAdapter->szFrameType) );
}
else if( lstrcmp( szFrameTypeBuffer, StrEthernet_802_2 ) == 0 ) {
lstrcpyn( NetSettings.pCurrentAdapter->szFrameType, _T("0x2"), AS(NetSettings.pCurrentAdapter->szFrameType) );
}
else if( lstrcmp( szFrameTypeBuffer, StrEthernet_802_3 ) == 0 ) {
lstrcpyn( NetSettings.pCurrentAdapter->szFrameType, _T("0x1"), AS(NetSettings.pCurrentAdapter->szFrameType) );
}
else if( lstrcmp( szFrameTypeBuffer, StrEthernet_II ) == 0 ) {
lstrcpyn( NetSettings.pCurrentAdapter->szFrameType, _T("0x0"), AS(NetSettings.pCurrentAdapter->szFrameType) );
}
else if( lstrcmp( szFrameTypeBuffer, StrEthernetSnap ) == 0 ) {
lstrcpyn( NetSettings.pCurrentAdapter->szFrameType, _T("0x3"), AS(NetSettings.pCurrentAdapter->szFrameType) );
}
}
}
break;
} // end case WM_NOTIFY
case WM_COMMAND: {
WORD wNotifyCode = HIWORD( wParam ) ;
WORD wButtonId = LOWORD( wParam ) ;
if( wNotifyCode == CBN_SELCHANGE ) {
if( wButtonId == IDC_CMB_IPXPP_FRAMETYPE ) {
INT_PTR iIndex;
HWND hNetworkNumberEditBox = GetDlgItem( hwnd, IDC_EDT_IPXPP_NETWORKNUMBER );
// get the current selection from the combo box
iIndex = SendDlgItemMessage( hwnd,
IDC_CMB_IPXPP_FRAMETYPE,
CB_GETCURSEL,
(WPARAM) 0,
(LPARAM) 0 ) ;
// infer the settings from the index since they they added in a fixed order
if( iIndex == 0 ) { // if "Auto Detect" is selected then do not let user edit the Network Number
EnableWindow( GetDlgItem( hwnd, IDC_STATIC_NETNUM ), FALSE );
EnableWindow( hNetworkNumberEditBox, FALSE );
SetWindowText( hNetworkNumberEditBox, _T("") );
}
else { // else let user edit Network Number
EnableWindow( GetDlgItem( hwnd, IDC_STATIC_NETNUM ), TRUE );
EnableWindow( hNetworkNumberEditBox, TRUE );
}
}
}
break;
}
default:
bStatus = FALSE;
break;
}
return bStatus;
}