|
|
/*-------------------------------------------------------------------
| addwiz.c - Add Device Wizard. 11-24-98 - zero out psh struct to ensure deterministic propsheet behavior. kpb |--------------------------------------------------------------------*/ #include "precomp.h"
// testing!!!
#define ROCKETMODEM_PCI4_SUPPORT 1
static void set_field(HWND hDlg, WORD id); static void get_field(HWND hDlg, WORD id); //static int PaintIcon(HWND hWnd);
#ifdef NT50
// nt50 build does not link with this, so I made my own
#define strupr(s) my_strupr(s)
#endif
static void my_strupr(char *str);
static int FillDevicePropSheets(PROPSHEETPAGE *psp, LPARAM our_params); static int InvalidMacAddress = 1;
#ifdef S_RK
#define NUM_DEVPROP_SHEETS 7
const LPSTR idWizIntro = MAKEINTRESOURCE(IDD_ADD_WIZ_INTRO); const LPSTR idWizBus = MAKEINTRESOURCE(IDD_ADD_WIZ_BUSTYPE); const LPSTR idWizModel = MAKEINTRESOURCE(IDD_ADD_WIZ_BOARD); const LPSTR idWizNumPorts = MAKEINTRESOURCE(IDD_ADD_WIZ_NUMPORTS); const LPSTR idWizIoBase = MAKEINTRESOURCE(IDD_ADD_WIZ_BASEIO); const LPSTR idWizCountry = MAKEINTRESOURCE(IDD_ADD_WIZ_COUNTRY); const LPSTR idWizDone = MAKEINTRESOURCE(IDD_ADD_WIZ_DONE); #else
#define NUM_DEVPROP_SHEETS 7
const LPSTR idWizIntro = MAKEINTRESOURCE(IDD_ADD_WIZ_INTRO); const LPSTR idWizDevice = MAKEINTRESOURCE(IDD_ADD_WIZ_DEVICE); const LPSTR idWizNumPorts = MAKEINTRESOURCE(IDD_ADD_WIZ_NUMPORTS); const LPSTR idWizMac = MAKEINTRESOURCE(IDD_ADD_WIZ_MAC); const LPSTR idWizCountry = MAKEINTRESOURCE(IDD_ADD_WIZ_COUNTRY); const LPSTR idWizBackup = MAKEINTRESOURCE(IDD_ADD_WIZ_BACKUP); const LPSTR idWizDone = MAKEINTRESOURCE(IDD_ADD_WIZ_DONE); #endif
BOOL WINAPI WizIntroPropSheet( IN HWND hDlg, IN UINT uMessage, IN WPARAM wParam, IN LPARAM lParam); BOOL WINAPI WizBusPropSheet( IN HWND hDlg, IN UINT uMessage, IN WPARAM wParam, IN LPARAM lParam); BOOL WINAPI WizModelPropSheet( IN HWND hDlg, IN UINT uMessage, IN WPARAM wParam, IN LPARAM lParam); BOOL WINAPI WizNumPortsPropSheet( IN HWND hDlg, IN UINT uMessage, IN WPARAM wParam, IN LPARAM lParam); BOOL WINAPI WizIoBasePropSheet( IN HWND hDlg, IN UINT uMessage, IN WPARAM wParam, IN LPARAM lParam); BOOL WINAPI WizCountryPropSheet( IN HWND hDlg, IN UINT uMessage, IN WPARAM wParam, IN LPARAM lParam); BOOL WINAPI WizDonePropSheet( IN HWND hDlg, IN UINT uMessage, IN WPARAM wParam, IN LPARAM lParam);
// vs specific prototypes:
BOOL WINAPI WizDevicePropSheet( IN HWND hDlg, IN UINT uMessage, IN WPARAM wParam, IN LPARAM lParam); BOOL WINAPI WizNumPortsPropSheet( IN HWND hDlg, IN UINT uMessage, IN WPARAM wParam, IN LPARAM lParam); BOOL WINAPI WizMacPropSheet( IN HWND hDlg, IN UINT uMessage, IN WPARAM wParam, IN LPARAM lParam); BOOL WINAPI WizBackupPropSheet( IN HWND hDlg, IN UINT uMessage, IN WPARAM wParam, IN LPARAM lParam);
/*------------------------------------------------------------------------
| FillDevicePropSheets - Setup pages for driver level property sheets. |------------------------------------------------------------------------*/ static int FillDevicePropSheets(PROPSHEETPAGE *psp, LPARAM our_params) { INT pi; static TCHAR title[20];
load_str( glob_hinst, TITLESTR, title, CharSizeOf(title) ); memset(psp, 0, sizeof(*psp) * NUM_DEVPROP_SHEETS);
pi = 0;
// Intro wizard page
psp[pi].dwSize = sizeof(PROPSHEETPAGE); //psp[pi].dwFlags = PSP_USEICONID | PSP_USETITLE;
psp[pi].dwFlags = PSP_USETITLE | PSP_HASHELP; psp[pi].hInstance = glob_hinst; psp[pi].pszTemplate = idWizIntro; psp[pi].pfnDlgProc = WizIntroPropSheet; psp[pi].pszTitle = title; psp[pi].lParam = (LPARAM)our_params; psp[pi].pfnCallback = NULL; ++pi;
#ifdef S_RK
// BusType wizard page
psp[pi].dwSize = sizeof(PROPSHEETPAGE); //psp[pi].dwFlags = PSP_USEICONID | PSP_USETITLE;
psp[pi].dwFlags = PSP_USETITLE | PSP_HASHELP; psp[pi].hInstance = glob_hinst; psp[pi].pszTemplate = idWizBus; psp[pi].pfnDlgProc = WizBusPropSheet; psp[pi].pszTitle = title; psp[pi].lParam = (LPARAM)our_params; psp[pi].pfnCallback = NULL; ++pi; #endif
#ifdef S_RK
// RocketPort/RocketModem Model wizard page
psp[pi].dwSize = sizeof(PROPSHEETPAGE); //psp[pi].dwFlags = PSP_USEICONID | PSP_USETITLE;
psp[pi].dwFlags = PSP_USETITLE | PSP_HASHELP; psp[pi].hInstance = glob_hinst; psp[pi].pszTemplate = idWizModel; psp[pi].pfnDlgProc = WizModelPropSheet; psp[pi].pszTitle = title; psp[pi].lParam = (LPARAM)our_params; psp[pi].pfnCallback = NULL; ++pi; #else
// VS1000/VS2000/RocketPort Serial Hub wizard page
psp[pi].dwSize = sizeof(PROPSHEETPAGE); //psp[pi].dwFlags = PSP_USEICONID | PSP_USETITLE;
psp[pi].dwFlags = PSP_USETITLE | PSP_HASHELP; psp[pi].hInstance = glob_hinst; psp[pi].pszTemplate = idWizDevice; psp[pi].pfnDlgProc = WizDevicePropSheet; psp[pi].pszTitle = title; psp[pi].lParam = (LPARAM)our_params; psp[pi].pfnCallback = NULL; ++pi; #endif
// NumPorts wizard page
psp[pi].dwSize = sizeof(PROPSHEETPAGE); //psp[pi].dwFlags = PSP_USEICONID | PSP_USETITLE;
psp[pi].dwFlags = PSP_USETITLE | PSP_HASHELP; psp[pi].hInstance = glob_hinst; psp[pi].pszTemplate = idWizNumPorts; psp[pi].pfnDlgProc = WizNumPortsPropSheet; psp[pi].pszTitle = title; psp[pi].lParam = (LPARAM)our_params; psp[pi].pfnCallback = NULL; ++pi;
#ifdef S_RK
// BaseIoAddress wizard page
psp[pi].dwSize = sizeof(PROPSHEETPAGE); //psp[pi].dwFlags = PSP_USEICONID | PSP_USETITLE;
psp[pi].dwFlags = PSP_USETITLE | PSP_HASHELP; psp[pi].hInstance = glob_hinst; psp[pi].pszTemplate = idWizIoBase; psp[pi].pfnDlgProc = WizIoBasePropSheet; psp[pi].pszTitle = title; psp[pi].lParam = (LPARAM)our_params; psp[pi].pfnCallback = NULL; ++pi; #endif
// RowCountryCode wizard page
psp[pi].dwSize = sizeof(PROPSHEETPAGE); //psp[pi].dwFlags = PSP_USEICONID | PSP_USETITLE;
psp[pi].dwFlags = PSP_USETITLE | PSP_HASHELP; psp[pi].hInstance = glob_hinst; psp[pi].pszTemplate = idWizCountry; psp[pi].pfnDlgProc = WizCountryPropSheet; psp[pi].pszTitle = title; psp[pi].lParam = (LPARAM)our_params; psp[pi].pfnCallback = NULL; ++pi;
#ifdef S_VS
// MacAddress wizard page
psp[pi].dwSize = sizeof(PROPSHEETPAGE); //psp[pi].dwFlags = PSP_USEICONID | PSP_USETITLE;
psp[pi].dwFlags = PSP_USETITLE | PSP_HASHELP; psp[pi].hInstance = glob_hinst; psp[pi].pszTemplate = idWizMac; psp[pi].pfnDlgProc = WizMacPropSheet; psp[pi].pszTitle = title; psp[pi].lParam = (LPARAM)our_params; psp[pi].pfnCallback = NULL; ++pi; #endif
#ifdef S_VS
// BackupServer wizard page
psp[pi].dwSize = sizeof(PROPSHEETPAGE); //psp[pi].dwFlags = PSP_USEICONID | PSP_USETITLE;
psp[pi].dwFlags = PSP_USETITLE | PSP_HASHELP; psp[pi].hInstance = glob_hinst; psp[pi].pszTemplate = idWizBackup; psp[pi].pfnDlgProc = WizBackupPropSheet; psp[pi].pszTitle = title; psp[pi].lParam = (LPARAM)our_params; psp[pi].pfnCallback = NULL; ++pi; #endif
// Done wizard page
psp[pi].dwSize = sizeof(PROPSHEETPAGE); //psp[pi].dwFlags = PSP_USEICONID | PSP_USETITLE;
psp[pi].dwFlags = PSP_USETITLE | PSP_HASHELP; psp[pi].hInstance = glob_hinst; psp[pi].pszTemplate = idWizDone; psp[pi].pfnDlgProc = WizDonePropSheet; psp[pi].pszTitle = title; psp[pi].lParam = (LPARAM)our_params; psp[pi].pfnCallback = NULL; ++pi;
return 0; }
/*------------------------------------------------------------------------
| DoAddWizPropPages - Main driver level property sheet for NT4.0 |------------------------------------------------------------------------*/ int DoAddWizPropPages(HWND hwndOwner) { PROPSHEETPAGE psp[NUM_DEVPROP_SHEETS]; PROPSHEETHEADER psh; OUR_INFO *our_params; INT stat; AddWiz_Config *aw_info; #ifdef S_RK
INT i, j; static WORD preferred_addresses[] = {0x180, 0x100, 0x140, 0x1c0, 0x200, 0x240, 0x280, 0x2c0, 0x300, 0x340, 0x380, 0x3c0, 0}; #endif
our_params = glob_info; // temporary kludge, unless we don't need re-entrantancy
// init our add_wiz struct
aw_info = glob_add_wiz; memset(aw_info, 0, sizeof(*aw_info));
// set some defaults
aw_info->CountryIdx = 0; #ifdef S_RK
aw_info->NumPorts = 8; strcpy(aw_info->BoardType, szRocketPort); aw_info->IoAddress = 0; // next we'll try to pick a logical default address
for (i = 0; (preferred_addresses[i] != 0) && (aw_info->IoAddress == 0); i++) { aw_info->IoAddress = preferred_addresses[i]; // our assumption
for (j = 0; (j < glob_info->device_selected) && (aw_info->IoAddress != 0); j++) { if (wi->dev[j].IoAddress == preferred_addresses[i]) // not available, so undo this default
aw_info->IoAddress = 0; } } #else
aw_info->NumPorts = 16; strcpy(aw_info->BoardType, szSerialHub); // first in list
memset(aw_info->MacAddr, 0, sizeof(aw_info->MacAddr)); aw_info->BackupServer = 0; aw_info->BackupTimer = 2; #endif
//Fill out the PROPSHEETPAGE data structure for the Client Area Shape
//sheet
FillDevicePropSheets(&psp[0], (LPARAM)our_params);
//Fill out the PROPSHEETHEADER
memset(&psh, 0, sizeof(PROPSHEETHEADER)); // add fix 11-24-98
psh.dwSize = sizeof(PROPSHEETHEADER); psh.dwFlags = PSH_PROPSHEETPAGE | PSH_WIZARD | PSH_NOAPPLYNOW; psh.hwndParent = hwndOwner; psh.hInstance = glob_hinst; psh.pszIcon = ""; psh.pszCaption = (LPSTR)"Add Device Wizard"; psh.nPages = NUM_DEVPROP_SHEETS; psh.ppsp = (LPCPROPSHEETPAGE) &psp;
//And finally display the dialog with the property sheets.
stat = PropertySheet(&psh);
if (aw_info->finished) return 0; // ok
else return 1; // canceled out
}
/*----------------------------------------------------------
WizIntroPropSheet - |-------------------------------------------------------------*/ BOOL WINAPI WizIntroPropSheet( IN HWND hDlg, IN UINT uMessage, IN WPARAM wParam, IN LPARAM lParam) { OUR_INFO *OurProps = (OUR_INFO *)GetWindowLong(hDlg, DWL_USER);
switch(uMessage) { case WM_INITDIALOG : OurProps = (OUR_INFO *)((LPPROPSHEETPAGE)lParam)->lParam; SetWindowLong(hDlg, DWL_USER, (LONG)OurProps);
return TRUE; // No need for us to set the focus.
case WM_PAINT: return FALSE;
case WM_HELP: our_context_help(lParam); return FALSE;
case WM_NOTIFY : switch (((NMHDR *)lParam)->code) { case PSN_HELP : our_help(&wi->ip, IDD_ADD_WIZ_INTRO); break;
case PSN_SETACTIVE: PropSheet_SetWizButtons(GetParent(hDlg), PSWIZB_NEXT); break;
case PSN_WIZNEXT: SetWindowLong(hDlg, DWL_MSGRESULT, PSNRET_NOERROR); return TRUE;
default : return FALSE; }
default : return FALSE; } }
#ifdef S_RK
/*----------------------------------------------------------
WizBusPropSheet - |-------------------------------------------------------------*/ BOOL WINAPI WizBusPropSheet( IN HWND hDlg, IN UINT uMessage, IN WPARAM wParam, IN LPARAM lParam) { OUR_INFO *OurProps = (OUR_INFO *)GetWindowLong(hDlg, DWL_USER);
switch(uMessage) { case WM_INITDIALOG : OurProps = (OUR_INFO *)((LPPROPSHEETPAGE)lParam)->lParam; SetWindowLong(hDlg, DWL_USER, (LONG)OurProps);
return TRUE; // No need for us to set the focus.
case WM_PAINT: #if 0
PaintIcon(hDlg); #endif
return FALSE;
case WM_HELP: our_context_help(lParam); return FALSE;
case WM_NOTIFY : switch (((NMHDR *)lParam)->code) { case PSN_HELP : our_help(&wi->ip, IDD_ADD_WIZ_BUSTYPE); break;
case PSN_SETACTIVE: set_field(hDlg, IDC_WIZ_ISA); set_field(hDlg, IDC_WIZ_PCI);
PropSheet_SetWizButtons(GetParent(hDlg), PSWIZB_BACK | PSWIZB_NEXT); break;
case PSN_WIZNEXT: get_field(hDlg, IDC_WIZ_ISA); SetWindowLong(hDlg, DWL_MSGRESULT, PSNRET_NOERROR); return TRUE;
default : return FALSE; }
default : return FALSE; } } #endif
#ifdef S_RK
/*----------------------------------------------------------
WizModelPropSheet - |-------------------------------------------------------------*/ BOOL WINAPI WizModelPropSheet( IN HWND hDlg, IN UINT uMessage, IN WPARAM wParam, IN LPARAM lParam) { OUR_INFO *OurProps = (OUR_INFO *)GetWindowLong(hDlg, DWL_USER);
switch(uMessage) { case WM_INITDIALOG : OurProps = (OUR_INFO *)((LPPROPSHEETPAGE)lParam)->lParam; SetWindowLong(hDlg, DWL_USER, (LONG)OurProps); return TRUE; // No need for us to set the focus.
case WM_PAINT: #if 0
PaintIcon(hDlg); #endif
return FALSE;
case WM_HELP: our_context_help(lParam); return FALSE;
case WM_NOTIFY : switch (((NMHDR *)lParam)->code) { case PSN_SETACTIVE: set_field(hDlg, IDC_WIZ_CBOX_BOARD); PropSheet_SetWizButtons(GetParent(hDlg), PSWIZB_BACK | PSWIZB_NEXT); break;
case PSN_HELP : our_help(&wi->ip, IDD_ADD_WIZ_BOARD); break;
case PSN_WIZNEXT: get_field(hDlg, IDC_WIZ_CBOX_BOARD); SetWindowLong(hDlg, DWL_MSGRESULT, PSNRET_NOERROR); return TRUE;
default : return FALSE; }
default : return FALSE; } } #endif
#ifdef S_VS
/*----------------------------------------------------------
WizDevicePropSheet - |-------------------------------------------------------------*/ BOOL WINAPI WizDevicePropSheet( IN HWND hDlg, IN UINT uMessage, IN WPARAM wParam, IN LPARAM lParam) { OUR_INFO *OurProps = (OUR_INFO *)GetWindowLong(hDlg, DWL_USER);
switch(uMessage) { case WM_INITDIALOG : OurProps = (OUR_INFO *)((LPPROPSHEETPAGE)lParam)->lParam; SetWindowLong(hDlg, DWL_USER, (LONG)OurProps); return TRUE; // No need for us to set the focus.
case WM_PAINT: return FALSE;
case WM_HELP: our_context_help(lParam); return FALSE;
case WM_NOTIFY : switch (((NMHDR *)lParam)->code) { case PSN_SETACTIVE: set_field(hDlg, IDC_WIZ_CBOX_DEVICE); PropSheet_SetWizButtons(GetParent(hDlg), PSWIZB_BACK | PSWIZB_NEXT); break;
case PSN_HELP : our_help(&wi->ip, IDD_ADD_WIZ_DEVICE); break;
case PSN_WIZNEXT: get_field(hDlg, IDC_WIZ_CBOX_DEVICE); SetWindowLong(hDlg, DWL_MSGRESULT, PSNRET_NOERROR); return TRUE;
default : return FALSE; }
default : return FALSE; } } #endif
/*----------------------------------------------------------
WizNumPortsPropSheet - |-------------------------------------------------------------*/ BOOL WINAPI WizNumPortsPropSheet( IN HWND hDlg, IN UINT uMessage, IN WPARAM wParam, IN LPARAM lParam) { OUR_INFO *OurProps = (OUR_INFO *)GetWindowLong(hDlg, DWL_USER);
AddWiz_Config *aw; aw = glob_add_wiz;
switch(uMessage) { case WM_INITDIALOG : OurProps = (OUR_INFO *)((LPPROPSHEETPAGE)lParam)->lParam; SetWindowLong(hDlg, DWL_USER, (LONG)OurProps); return TRUE; // No need for us to set the focus.
case WM_PAINT: return FALSE;
case WM_HELP: our_context_help(lParam); return FALSE;
case WM_NOTIFY : switch (((NMHDR *)lParam)->code) { case PSN_SETACTIVE: set_field(hDlg, IDC_WIZ_CBOX_NUMPORTS); PropSheet_SetWizButtons(GetParent(hDlg), PSWIZB_BACK | PSWIZB_NEXT); break;
case PSN_HELP : our_help(&wi->ip, IDD_ADD_WIZ_NUMPORTS); break;
case PSN_WIZNEXT: SetWindowLong(hDlg, DWL_MSGRESULT, PSNRET_NOERROR); get_field(hDlg, IDC_WIZ_CBOX_NUMPORTS);
#ifdef S_RK
if (!aw->IsIsa) { // PCI
if (!aw->IsModemDev) { // not a RocketModem, so we're done
PropSheet_SetCurSelByID(((NMHDR *)lParam)->hwndFrom, idWizDone); // tell sheet not to handle advance -- we overrode it
SetWindowLong(hDlg, DWL_MSGRESULT, -1); } else { // new PCI RocketModem, so prompt for country
PropSheet_SetCurSelByID(((NMHDR *)lParam)->hwndFrom, idWizCountry); // tell sheet not to handle advance -- we overrode it
SetWindowLong(hDlg, DWL_MSGRESULT, -1); } } #else
#ifdef VS2000_ROW_SUPPORT
if (!aw->IsModemDev) { #endif
// not a VS2000 - and/or - no ROW support; skip over Country page
PropSheet_SetCurSelByID(((NMHDR *)lParam)->hwndFrom, idWizMac); // tell sheet not to handle advance -- we overrode it
SetWindowLong(hDlg, DWL_MSGRESULT, -1); #ifdef VS2000_ROW_SUPPORT
} #endif
#endif
return TRUE;
default : return FALSE; }
default : return FALSE; } }
#ifdef S_RK
/*----------------------------------------------------------
WizIoBasePropSheet - |-------------------------------------------------------------*/ BOOL WINAPI WizIoBasePropSheet( IN HWND hDlg, IN UINT uMessage, IN WPARAM wParam, IN LPARAM lParam) { OUR_INFO *OurProps = (OUR_INFO *)GetWindowLong(hDlg, DWL_USER);
AddWiz_Config *aw; aw = glob_add_wiz;
switch(uMessage) { case WM_INITDIALOG : OurProps = (OUR_INFO *)((LPPROPSHEETPAGE)lParam)->lParam; SetWindowLong(hDlg, DWL_USER, (LONG)OurProps); return TRUE; // No need for us to set the focus.
case WM_PAINT: return FALSE;
case WM_HELP: our_context_help(lParam); return FALSE;
case WM_NOTIFY : switch (((NMHDR *)lParam)->code) { case PSN_SETACTIVE: set_field(hDlg, IDC_WIZ_CBOX_IOADDR); PropSheet_SetWizButtons(GetParent(hDlg), PSWIZB_BACK | PSWIZB_NEXT); break;
case PSN_HELP : our_help(&wi->ip, IDD_ADD_WIZ_BASEIO); break;
case PSN_WIZNEXT: SetWindowLong(hDlg, DWL_MSGRESULT, PSNRET_NOERROR); get_field(hDlg, IDC_WIZ_CBOX_IOADDR);
if (!aw->IsModemDev) { PropSheet_SetCurSelByID(((NMHDR *)lParam)->hwndFrom, idWizDone); // tell sheet not to handle advance -- we overrode it
SetWindowLong(hDlg, DWL_MSGRESULT, -1); } return TRUE;
default : return FALSE; }
default : return FALSE; } } #endif
/*----------------------------------------------------------
WizCountryPropSheet - |-------------------------------------------------------------*/ BOOL WINAPI WizCountryPropSheet( IN HWND hDlg, IN UINT uMessage, IN WPARAM wParam, IN LPARAM lParam) { OUR_INFO *OurProps = (OUR_INFO *)GetWindowLong(hDlg, DWL_USER);
AddWiz_Config *aw; aw = glob_add_wiz;
switch(uMessage) { case WM_INITDIALOG : OurProps = (OUR_INFO *)((LPPROPSHEETPAGE)lParam)->lParam; SetWindowLong(hDlg, DWL_USER, (LONG)OurProps); return TRUE; // No need for us to set the focus.
case WM_PAINT: return FALSE;
case WM_HELP: our_context_help(lParam); return FALSE;
case WM_NOTIFY : switch (((NMHDR *)lParam)->code) { case PSN_SETACTIVE: set_field(hDlg, IDC_WIZ_CBOX_COUNTRY); PropSheet_SetWizButtons(GetParent(hDlg), PSWIZB_BACK | PSWIZB_NEXT); break;
case PSN_HELP : our_help(&wi->ip, IDD_ADD_WIZ_COUNTRY); break;
case PSN_WIZBACK: SetWindowLong(hDlg, DWL_MSGRESULT, PSNRET_NOERROR);
if (aw->IsIsa == 0) { // PCI RocketModem: back up to numports dialog instead of ioaddr
PropSheet_SetCurSelByID(((NMHDR *)lParam)->hwndFrom, idWizNumPorts); // tell sheet not to handle advance -- we overrode it
SetWindowLong(hDlg, DWL_MSGRESULT, -1); } return TRUE;
case PSN_WIZNEXT: get_field(hDlg, IDC_WIZ_CBOX_COUNTRY); SetWindowLong(hDlg, DWL_MSGRESULT, PSNRET_NOERROR); return TRUE;
default : return FALSE; }
default : return FALSE; } }
#ifdef S_VS
/*----------------------------------------------------------
WizMacPropSheet - |-------------------------------------------------------------*/ BOOL WINAPI WizMacPropSheet( IN HWND hDlg, IN UINT uMessage, IN WPARAM wParam, IN LPARAM lParam) { OUR_INFO *OurProps = (OUR_INFO *)GetWindowLong(hDlg, DWL_USER);
AddWiz_Config *aw; aw = glob_add_wiz;
switch(uMessage) { case WM_INITDIALOG : OurProps = (OUR_INFO *)((LPPROPSHEETPAGE)lParam)->lParam; SetWindowLong(hDlg, DWL_USER, (LONG)OurProps); return TRUE; // No need for us to set the focus.
case WM_PAINT: return FALSE;
case WM_HELP: our_context_help(lParam); return FALSE;
case WM_NOTIFY : switch (((NMHDR *)lParam)->code) { case PSN_SETACTIVE: set_field(hDlg, IDC_WIZ_CBOX_MAC); PropSheet_SetWizButtons(GetParent(hDlg), PSWIZB_BACK | PSWIZB_NEXT); break;
case PSN_HELP : our_help(&wi->ip, IDD_ADD_WIZ_MAC); break;
case PSN_WIZBACK: SetWindowLong(hDlg, DWL_MSGRESULT, PSNRET_NOERROR);
#ifdef VS2000_ROW_SUPPORT
if (!aw->IsModemDev) { #endif
// not a VS2000 - and/or - no ROW support; skip over Country page
PropSheet_SetCurSelByID(((NMHDR *)lParam)->hwndFrom, idWizNumPorts); // tell sheet not to handle advance -- we overrode it
SetWindowLong(hDlg, DWL_MSGRESULT, -1); #ifdef VS2000_ROW_SUPPORT
} #endif
break;
case PSN_WIZNEXT: get_field(hDlg, IDC_WIZ_CBOX_MAC); if (InvalidMacAddress == 1) // don't allow advance to next field
SetWindowLong(hDlg, DWL_MSGRESULT, -1); else SetWindowLong(hDlg, DWL_MSGRESULT, PSNRET_NOERROR); return TRUE;
default : return FALSE; }
default : return FALSE; } } #endif
#ifdef S_VS
/*----------------------------------------------------------
WizBackupPropSheet - |-------------------------------------------------------------*/ BOOL WINAPI WizBackupPropSheet( IN HWND hDlg, IN UINT uMessage, IN WPARAM wParam, IN LPARAM lParam) { OUR_INFO *OurProps = (OUR_INFO *)GetWindowLong(hDlg, DWL_USER);
char tmpstr[60]; WORD uCmd; HWND hwnd; AddWiz_Config *aw; aw = glob_add_wiz;
switch(uMessage) { case WM_INITDIALOG : OurProps = (OUR_INFO *)((LPPROPSHEETPAGE)lParam)->lParam; SetWindowLong(hDlg, DWL_USER, (LONG)OurProps); return TRUE; // No need for us to set the focus.
case WM_PAINT: return FALSE;
case WM_HELP: our_context_help(lParam); return FALSE;
case WM_COMMAND: uCmd = HIWORD(wParam);
switch (LOWORD(wParam)) { case IDC_WIZ_BACKUP_YES: case IDC_WIZ_BACKUP_NO: //--- enable or disable backup-timer field depending on backup server[]
hwnd = GetDlgItem(hDlg, IDC_WIZ_CBOX_BACKUPTIME); if (IsDlgButtonChecked(hDlg, IDC_WIZ_BACKUP_YES)) EnableWindow(hwnd,1); else EnableWindow(hwnd,0); break; } break;
case WM_NOTIFY : switch (((NMHDR *)lParam)->code) { case PSN_SETACTIVE: set_field(hDlg, IDC_WIZ_BACKUP_YES); set_field(hDlg, IDC_WIZ_CBOX_BACKUPTIME); //--- enable or disable backup-timer field depending on backup server[]
hwnd = GetDlgItem(hDlg, IDC_WIZ_CBOX_BACKUPTIME); if (IsDlgButtonChecked(hDlg, IDC_WIZ_BACKUP_YES)) EnableWindow(hwnd,1); else EnableWindow(hwnd,0); PropSheet_SetWizButtons(GetParent(hDlg), PSWIZB_BACK | PSWIZB_NEXT); break;
case PSN_HELP : our_help(&wi->ip, IDD_ADD_WIZ_BACKUP); break;
case PSN_WIZNEXT: get_field(hDlg, IDC_WIZ_BACKUP_YES); get_field(hDlg, IDC_WIZ_CBOX_BACKUPTIME); SetWindowLong(hDlg, DWL_MSGRESULT, PSNRET_NOERROR); return TRUE;
default : return FALSE; }
default : return FALSE; } } #endif
/*----------------------------------------------------------
WizDonePropSheet - |-------------------------------------------------------------*/ BOOL WINAPI WizDonePropSheet( IN HWND hDlg, IN UINT uMessage, IN WPARAM wParam, IN LPARAM lParam) { OUR_INFO *OurProps = (OUR_INFO *)GetWindowLong(hDlg, DWL_USER);
AddWiz_Config *aw; aw = glob_add_wiz;
switch(uMessage) { case WM_INITDIALOG : OurProps = (OUR_INFO *)((LPPROPSHEETPAGE)lParam)->lParam; SetWindowLong(hDlg, DWL_USER, (LONG)OurProps); return TRUE; // No need for us to set the focus.
case WM_PAINT: return FALSE;
case WM_HELP: our_context_help(lParam); return FALSE;
case WM_NOTIFY : switch (((NMHDR *)lParam)->code) { case PSN_SETACTIVE: PropSheet_SetWizButtons(GetParent(hDlg), PSWIZB_BACK | PSWIZB_FINISH); break;
case PSN_HELP : our_help(&wi->ip, IDD_ADD_WIZ_DONE); break;
#ifdef S_RK
case PSN_WIZBACK: SetWindowLong(hDlg, DWL_MSGRESULT, PSNRET_NOERROR); if (!aw->IsModemDev) { if (!aw->IsIsa) { // back up to the numports dialog
PropSheet_SetCurSelByID(((NMHDR *)lParam)->hwndFrom, idWizNumPorts); // tell sheet not to handle advance -- we overrode it
SetWindowLong(hDlg, DWL_MSGRESULT, -1); } else { // back up to the base io dialog
PropSheet_SetCurSelByID(((NMHDR *)lParam)->hwndFrom, idWizIoBase); // tell sheet not to handle advance -- we overrode it
SetWindowLong(hDlg, DWL_MSGRESULT, -1); } } return TRUE; #endif
case PSN_WIZNEXT: case PSN_WIZFINISH: aw->finished = 1;
SetWindowLong(hDlg, DWL_MSGRESULT, PSNRET_NOERROR); return TRUE;
default : return FALSE; }
default : return FALSE; } }
#ifdef S_VS
/*----------------------------------------------------------
set_mac_field - |------------------------------------------------------------*/ static int set_mac_field(HWND hDlg, WORD id) { HWND hwnd; char tmpstr[60]; int stat; int i; int addr_used, nbytes, found; BYTE *macbuf; BYTE *mac;
AddWiz_Config *aw; aw = glob_add_wiz;
//------------------ fill in mac addr selection
hwnd = GetDlgItem(hDlg, id); SendMessage(hwnd, CB_RESETCONTENT, 0, 0);
// alloc 8byte mac-address fields(2 times as many as could be configured)
found = 0; nbytes = 0; macbuf = our_get_ping_list(&stat, &nbytes);
if (stat == 0) { for (i=0; i<nbytes/8; i++) { mac = &macbuf[i*8]; //if (mac_match(mac, aw->MacAddr))
// found = 1;
//mess("macgot:%s",macbuf);
format_mac_addr(tmpstr, mac);
SendMessage(hwnd, CB_ADDSTRING, 0, (LPARAM)(char far *) tmpstr); } } addr_used = 1; if ( (mac_match(aw->MacAddr, broadcast_addr)) || (mac_match(aw->MacAddr, mac_zero_addr)) ) addr_used = 0; if (addr_used) { mac = &aw->MacAddr[0]; format_mac_addr(tmpstr, mac); if (!found) // configured mac-addr not in list yet
SendMessage(hwnd, CB_ADDSTRING, 0, (LPARAM)(char far *) tmpstr); } else { memset(aw->MacAddr, 0, 6); strcpy(tmpstr, "00 C0 4E # # #"); } // set the text in the window
SendMessage(hwnd, CB_ADDSTRING, 0, (LPARAM)(char far *) "00 C0 4E # # #"); SendMessage(hwnd, CB_SELECTSTRING, (WPARAM)-1, (LPARAM)(char far *) tmpstr);
return 0; } #endif
/*-------------------------------------------------------------------
| get_field - Run when a selection is changed. |--------------------------------------------------------------------*/ static void get_field(HWND hDlg, WORD id) { char tmpstr[60]; int i;
AddWiz_Config *aw; aw = glob_add_wiz;
switch (id) { #ifdef S_RK
case IDC_WIZ_ISA: case IDC_WIZ_PCI: if (IsDlgButtonChecked(hDlg, IDC_WIZ_ISA)) aw->IsIsa = 1; else aw->IsIsa = 0; break; #endif
#ifdef S_RK
case IDC_WIZ_CBOX_BOARD: GetDlgItemText(hDlg, id, aw->BoardType, sizeof(aw->BoardType));
aw->IsModemDev = 0;
if (!strcmp(aw->BoardType, szRocketModem)) aw->IsModemDev = TYPE_RM_VS2000; else if (!strcmp(aw->BoardType, szRocketModemII)) aw->IsModemDev = TYPE_RMII; else if (!strcmp(aw->BoardType, szRocketModem_i)) aw->IsModemDev = TYPE_RM_i;
break; #endif
#ifdef S_VS
case IDC_WIZ_CBOX_DEVICE: GetDlgItemText(hDlg, id, aw->BoardType, sizeof(aw->BoardType)); if (!strcmp(aw->BoardType, szSerialHub)) { aw->IsHub = 1; aw->IsModemDev = 0; } else { aw->IsHub = 0; if (!strcmp(aw->BoardType, szVS2000)) aw->IsModemDev = TYPE_RM_VS2000; else aw->IsModemDev = 0; } break; #endif
#ifdef S_RK
case IDC_WIZ_CBOX_IOADDR: GetDlgItemText(hDlg, id, tmpstr, 58); aw->IoAddress = gethint(tmpstr, &i); break; #endif
case IDC_WIZ_CBOX_NUMPORTS: GetDlgItemText(hDlg, id, tmpstr, 58); aw->NumPorts = getint(tmpstr, &i); break;
case IDC_WIZ_CBOX_COUNTRY: GetDlgItemText(hDlg, id, tmpstr, 58); aw->CountryIdx = 0;
if (aw->IsModemDev == TYPE_RM_VS2000) {
for ( i = 0; i < NUM_ROW_COUNTRIES; i++ ) {
if (!strcmp(tmpstr, RowInfo[i].RowCountryName)) { aw->CountryIdx = i; aw->CountryCode = RowInfo[i].RowCountryCode; break; } } } else if (aw->IsModemDev == TYPE_RM_i) {
for ( i = 0; i < NUM_CTR_ROW_COUNTRIES; i++ ) {
if (!strcmp(tmpstr, CTRRowInfo[i].RowCountryName)) { aw->CountryIdx = i; aw->CountryCode = CTRRowInfo[i].RowCountryCode; break; } } } else if (aw->IsModemDev) { aw->CountryIdx = 0; aw->CountryCode = RowInfo[0].RowCountryCode; } break;
#ifdef S_VS
case IDC_WIZ_CBOX_MAC: // get_mac_field() is shared and is in devprop.c
InvalidMacAddress = get_mac_field(hDlg, id, aw->MacAddr); break;
case IDC_WIZ_BACKUP_NO: case IDC_WIZ_BACKUP_YES: if (IsDlgButtonChecked(hDlg, IDC_WIZ_BACKUP_YES)) aw->BackupServer = 1; else aw->BackupServer = 0; break;
case IDC_WIZ_CBOX_BACKUPTIME: //------------------ get the backup timer value
GetDlgItemText(hDlg, id, tmpstr, 19); if (sscanf(tmpstr, "%ld", &i) == 1) aw->BackupTimer = i;
if (aw->BackupTimer < 2) aw->BackupTimer = 2; break; #endif
} }
/*----------------------------------------------------------
set_field - |------------------------------------------------------------*/ static void set_field(HWND hDlg, WORD id) { HWND hwnd; char tmpstr[60]; int i; #ifdef S_RK
int j; BOOL is_avail; WORD baseaddr; static WORD hex_addresses[] = {0x100, 0x140, 0x180, 0x1c0, 0x200, 0x240, 0x280, 0x2c0, 0x300, 0x340, 0x380, 0x3c0, 0}; #endif
AddWiz_Config *aw; aw = glob_add_wiz;
switch(id) { #ifdef S_RK
case IDC_WIZ_ISA: SendDlgItemMessage(hDlg, IDC_WIZ_ISA, BM_SETCHECK, aw->IsIsa, 0); SendDlgItemMessage(hDlg, IDC_WIZ_PCI, BM_SETCHECK, 1 - aw->IsIsa, 0); break; #endif
#ifdef S_RK
case IDC_WIZ_CBOX_BOARD: //------------------ fill in board type (model) selection
hwnd = GetDlgItem(hDlg, id); SendMessage(hwnd, CB_RESETCONTENT, 0, 0); if (aw->IsIsa) { SendMessage(hwnd, CB_ADDSTRING, 0, (LPARAM)szRocketPort); SendMessage(hwnd, CB_ADDSTRING, 0, (LPARAM)szRocketPort485); SendMessage(hwnd, CB_ADDSTRING, 0, (LPARAM)szRocketModem); } else { SendMessage(hwnd, CB_ADDSTRING, 0, (LPARAM)szRocketPort); SendMessage(hwnd, CB_ADDSTRING, 0, (LPARAM)szRocketPortPlus); SendMessage(hwnd, CB_ADDSTRING, 0, (LPARAM)szRocketModemII); SendMessage(hwnd, CB_ADDSTRING, 0, (LPARAM)szRocketModem_i); } // make sure there's a default
SendMessage(hwnd, CB_SELECTSTRING, (WPARAM)-1, (LPARAM)(char far *) "R"); // now try to select the last device chosen by user. it may not be valid
// if the user switched from ISA to PCI (for example) and the choice
// isn't available on the new bus.
SendMessage(hwnd, CB_SELECTSTRING, (WPARAM)-1, (LPARAM)(char far *) aw->BoardType); break; #endif
#ifdef S_VS
case IDC_WIZ_CBOX_DEVICE: //------------------ fill in board type (model) selection
hwnd = GetDlgItem(hDlg, id); SendMessage(hwnd, CB_RESETCONTENT, 0, 0); SendMessage(hwnd, CB_ADDSTRING, 0, (LPARAM)szVS1000); SendMessage(hwnd, CB_ADDSTRING, 0, (LPARAM)szVS2000); SendMessage(hwnd, CB_ADDSTRING, 0, (LPARAM)szSerialHub); // make sure there's a default
SendMessage(hwnd, CB_SELECTSTRING, (WPARAM)-1, (LPARAM)(char far *) aw->BoardType); break; #endif
#ifdef S_RK
case IDC_WIZ_CBOX_IOADDR: //------------------ fill in io base address selection
hwnd = GetDlgItem(hDlg, id); SendMessage(hwnd, CB_RESETCONTENT, 0, 0); for (i = 0; hex_addresses[i] != 0; i++) { baseaddr = hex_addresses[i]; // see if this base address already chosen by another card
is_avail = TRUE; // our assumption
for (j = 0; (j < glob_info->device_selected) && (is_avail); j++) { if (wi->dev[j].IoAddress == baseaddr) is_avail = FALSE; } if (is_avail) { wsprintf(tmpstr, "%x Hex", baseaddr); if (baseaddr == 0x180) strcat(tmpstr, " (default)"); SendMessage(hwnd, CB_ADDSTRING, 0, (LPARAM)tmpstr); } } // now make the previous choice the default choice
if (aw->IoAddress == 0x180) wsprintf(tmpstr, "%x hex (default)", aw->IoAddress); else wsprintf(tmpstr, "%x hex", aw->IoAddress); SendMessage(hwnd, CB_SELECTSTRING, (WPARAM)-1, (LPARAM)(char far *) tmpstr); break; #endif
case IDC_WIZ_CBOX_NUMPORTS: //------------------ fill in numports selection
hwnd = GetDlgItem(hDlg, id); SendMessage(hwnd, CB_RESETCONTENT, 0, 0); #ifdef S_RK
if ((aw->IsModemDev) && (aw->IsIsa == 0)) { // PCI RocketModem can be 4 or 6 ports
# ifdef ROCKETMODEM_PCI4_SUPPORT
SendMessage(hwnd, CB_ADDSTRING, 0, (LPARAM)szNP4); # endif
SendMessage(hwnd, CB_ADDSTRING, 0, (LPARAM)szNP6); // default the number of ports for the pci rocketmodem to 6
aw->NumPorts = 6; } else { // all other boards follow this logic:
if (strstr(aw->BoardType, szRocketPortPlus)) { // Rocketport Plus available in a 2-port version
SendMessage(hwnd, CB_ADDSTRING, 0, (LPARAM)szNP2); } if (!strstr(aw->BoardType, szRocketPort485)) { // all except Rocketport 485 available in a 4-port version
SendMessage(hwnd, CB_ADDSTRING, 0, (LPARAM)szNP4); } // all RocketPort variations available in an 8-port version
SendMessage(hwnd, CB_ADDSTRING, 0, (LPARAM)szNP8); if (strlen(aw->BoardType) == strlen(szRocketPort)) { // only standard boards available in 16 & 32 port versions
SendMessage(hwnd, CB_ADDSTRING, 0, (LPARAM)szNP16); SendMessage(hwnd, CB_ADDSTRING, 0, (LPARAM)szNP32); } } wsprintf(tmpstr, "%d", aw->NumPorts); SendMessage(hwnd, CB_SELECTSTRING, (WPARAM)-1, (LPARAM)(char far *) tmpstr); #else // S_VS
if (aw->IsModemDev) { // VS2000 only available in 8 port configuration
SendMessage(hwnd, CB_ADDSTRING, 0, (LPARAM)szNP8); // default the number of ports for the VS2000 to 8
aw->NumPorts = 8; } else if (aw->IsHub) { // SerialHub available in 4 (not yet) and 8 port configuration
SendMessage(hwnd, CB_ADDSTRING, 0, (LPARAM)szNP4); SendMessage(hwnd, CB_ADDSTRING, 0, (LPARAM)szNP8); // default the number of ports for the Serial Hub to 8
aw->NumPorts = 8; } else { // we must have a VS1000 or VS1000/VS1100 combo
SendMessage(hwnd, CB_ADDSTRING, 0, (LPARAM)szNP16); SendMessage(hwnd, CB_ADDSTRING, 0, (LPARAM)szNP32); SendMessage(hwnd, CB_ADDSTRING, 0, (LPARAM)szNP48); SendMessage(hwnd, CB_ADDSTRING, 0, (LPARAM)szNP64); // default the number of ports for the VS1000 to 16
aw->NumPorts = 16; } wsprintf(tmpstr, "%d", aw->NumPorts); SendMessage(hwnd, CB_SELECTSTRING, (WPARAM)-1, (LPARAM)(char far *) tmpstr); #endif // S_VS
break;
case IDC_WIZ_CBOX_COUNTRY: //------------------ fill in country selection
hwnd = GetDlgItem(hDlg, id); SendMessage(hwnd, CB_RESETCONTENT, 0, 0); if (aw->IsModemDev == TYPE_RM_VS2000) {
for ( i = 0; i < NUM_ROW_COUNTRIES; ++i ) { SendMessage(hwnd, CB_ADDSTRING, 0, (LPARAM)(RowInfo[i].RowCountryName)); }
SendMessage( hwnd, CB_SELECTSTRING, (WPARAM)-1, (LPARAM)(RowInfo[aw->CountryIdx].RowCountryName)); } else if (aw->IsModemDev == TYPE_RM_i) { for ( i = 0; i < NUM_CTR_ROW_COUNTRIES; ++i ) { SendMessage( hwnd, CB_ADDSTRING, 0, (LPARAM)(CTRRowInfo[i].RowCountryName)); }
SendMessage( hwnd, CB_SELECTSTRING, (WPARAM)-1, (LPARAM)(CTRRowInfo[aw->CountryIdx].RowCountryName)); } else if (aw->IsModemDev) {
SendMessage( hwnd, CB_ADDSTRING, 0, (LPARAM)(RowInfo[0].RowCountryName));
SendMessage( hwnd, CB_SELECTSTRING, (WPARAM)-1, (LPARAM)(RowInfo[0].RowCountryName)); } break;
#ifdef S_VS
case IDC_WIZ_CBOX_MAC: set_mac_field(hDlg, id); break;
case IDC_WIZ_BACKUP_YES: case IDC_WIZ_BACKUP_NO: SendDlgItemMessage(hDlg, IDC_WIZ_BACKUP_YES, BM_SETCHECK, aw->BackupServer, 0); SendDlgItemMessage(hDlg, IDC_WIZ_BACKUP_NO, BM_SETCHECK, 1 - aw->BackupServer, 0); break;
case IDC_WIZ_CBOX_BACKUPTIME: //------------------ fill in backup timer selection
hwnd = GetDlgItem(hDlg, IDC_WIZ_CBOX_BACKUPTIME); SendMessage(hwnd, CB_RESETCONTENT, 0, 0); SendMessage(hwnd, CB_ADDSTRING, 0, (LPARAM)(char far *) "2 min"); SendMessage(hwnd, CB_ADDSTRING, 0, (LPARAM)(char far *) "5 min"); SendMessage(hwnd, CB_ADDSTRING, 0, (LPARAM)(char far *) "10 min"); SendMessage(hwnd, CB_ADDSTRING, 0, (LPARAM)(char far *) "30 min"); SendMessage(hwnd, CB_ADDSTRING, 0, (LPARAM)(char far *) "60 min");
if (aw->BackupTimer < 2) aw->BackupTimer = 2; // 2 minutes, no less
wsprintf(tmpstr, "%d min", aw->BackupTimer); SetDlgItemText(hDlg, IDC_WIZ_CBOX_BACKUPTIME, tmpstr); break; #endif
} } #if 0
/*---------------------------------------------------------------------------
PaintIcon - Paints the Icon in the property sheet. |---------------------------------------------------------------------------*/ static int PaintIcon(HWND hWnd) { // int status;
HBITMAP hBitMap; HGDIOBJ hGdiObj; HDC hDC, hMemDC ; PAINTSTRUCT ps ; RECT spot, main; // left, top, right, bottom
static int cnt = 0;
GetWindowRect(GetDlgItem(hWnd, IDB_HELP), &spot); GetWindowRect(hWnd, &main); #ifdef COMMENT_OUT
rect = &right; mess("hlp r:%d l:%d b:%d t:%d", rect->right, rect->left, rect->bottom, rect->top); #endif
spot.left -= main.left; spot.top -= main.top;
spot.left += 5; spot.top += 20; // spacing
// load bitmap and display it
hDC = BeginPaint( hWnd, &ps ) ; if (NULL != (hMemDC = CreateCompatibleDC( hDC ))) { hBitMap = LoadBitmap(glob_hinst, MAKEINTRESOURCE(BMP_SMALL_LOGO));
hGdiObj = SelectObject(hMemDC, hBitMap);
BitBlt( hDC, spot.left, spot.top, 100, 100, hMemDC, 0, 0, SRCCOPY ) ; //StretchBlt( hDC, 5, 5, 600,100, hMemDC, 0, 0, 446, 85, SRCCOPY ) ;
DeleteObject( SelectObject( hMemDC, hGdiObj ) ) ; DeleteDC( hMemDC ) ; } EndPaint( hWnd, &ps ) ; return 0; } #endif
/*-------------------------------------------------------------------
| my_strupr - |--------------------------------------------------------------------*/ static void my_strupr(char *str) { while (*str != 0) { *str = (char) toupper(*str); ++str; } }
|