windows-nt/Source/XPSP1/NT/shell/osshell/regwiz/phbooklib/suapi.cpp

757 lines
21 KiB
C++
Raw Normal View History

2020-09-26 03:20:57 -05:00
// ############################################################################
#include "pch.hpp"
#include "phbk.h"
#include "debug.h"
#include "phbkrc.h"
#include "misc.h"
//#include "ras.h"
#include <ras.h>
#pragma pack (4)
//#if !defined(WIN16)
//#include <rnaph.h>
//#endif
#pragma pack ()
#include "suapi.h"
#define ERROR_USER_EXIT 0x8b0bffff
#define MB_MYERROR (MB_APPLMODAL | MB_ICONERROR | MB_SETFOREGROUND)
#define NOTIFY_CODE (HIWORD(wParam))
#define WM_SHOWSTATEMSG WM_USER+1
char szTemp[100];
char szValidPhoneCharacters[] = {"0123456789AaBbCcDdPpTtWw!@$ -.()+*#,&\0"};
// ############################################################################
BOOL CSelectNumDlg::FHasPhoneNumbers(LPLINECOUNTRYENTRY pLCE)
{
LPIDLOOKUPELEMENT pIDLookUp;
IDLOOKUPELEMENT LookUpTarget;
CPhoneBook far *pcPBTemp;
PACCESSENTRY pAE = NULL, pAELast = NULL;
DWORD dwCountryID;
pcPBTemp = ((CPhoneBook far*)m_dwPhoneBook);
LookUpTarget.dwID = pLCE->dwCountryID;
pIDLookUp = NULL;
pIDLookUp = (LPIDLOOKUPELEMENT)bsearch(&LookUpTarget,pcPBTemp->m_rgIDLookUp,
(int)pcPBTemp->m_pLineCountryList->dwNumCountries,sizeof(IDLOOKUPELEMENT),CompareIDLookUpElements);
if (!pIDLookUp) return FALSE; // no such country
pAE = pIDLookUp->pFirstAE;
if (!pAE) return FALSE; // no phone numbers at all
dwCountryID = pAE->dwCountryID;
pAELast = &(pcPBTemp->m_rgPhoneBookEntry[pcPBTemp->m_cPhoneBookEntries - 1]);
while (pAELast > pAE &&
pAE->dwCountryID == dwCountryID)
{
if ((pAE->fType & m_bMask) == m_fType) return TRUE;
pAE++;
}
return FALSE; // no phone numbers of the right type
// return ((BOOL)(pIDLookUp->pFirstAE));
}
// ############################################################################
INT_PTR CSelectNumDlg::DlgProc(HWND hwndDlg, UINT uMsg, WPARAM wParam, LPARAM lParam, LRESULT lResult)
{
LRESULT lRet = TRUE;
unsigned int idx;
int iCurIndex;
int iLastIndex;
PACCESSENTRY pAE = NULL;
LPSTR p, p2;
switch (uMsg)
{
case WM_INITDIALOG:
CPhoneBook far *pcPBTemp;
pcPBTemp = ((CPhoneBook far *)m_dwPhoneBook);
m_hwndDlg = hwndDlg;
// figure out if we are in the middle of an AUTODIAL
//
if (m_dwFlags & AUTODIAL_IN_PROGRESS)
{
EnableWindow(GetDlgItem(m_hwndDlg,IDC_CMDBACK),FALSE);
ShowWindow(GetDlgItem(m_hwndDlg,IDC_LBLSIGNUP),SW_HIDE);
ShowWindow(GetDlgItem(m_hwndDlg,IDC_LBLDIALERR),SW_HIDE);
} else if (m_dwFlags& DIALERR_IN_PROGRESS){
ShowWindow(GetDlgItem(m_hwndDlg,IDC_LBLSIGNUP),SW_HIDE);
ShowWindow(GetDlgItem(m_hwndDlg,IDC_LBLAUTODIAL),SW_HIDE);
ShowWindow(GetDlgItem(m_hwndDlg,IDC_CMDBACK),SW_HIDE);
SetDlgItemText(m_hwndDlg,IDC_CMDNEXT,GetSz(IDS_OK));
}else {
ShowWindow(GetDlgItem(m_hwndDlg,IDC_LBLAUTODIAL),SW_HIDE);
ShowWindow(GetDlgItem(m_hwndDlg,IDC_LBLDIALERR),SW_HIDE);
}
// Fill in country list and select current country
//
iCurIndex = -1; // 0xFFFFFFFF
// NOTE: it might be nice for INTL testing purposes to fill this combo box with
// a list sorted by the country ID instead of the country name.
for (idx=0;idx<pcPBTemp->m_pLineCountryList->dwNumCountries;idx++)
{
if (FHasPhoneNumbers(pcPBTemp->m_rgNameLookUp[idx].pLCE))
{
wsprintf(szTemp,"%s (%ld)",
pcPBTemp->m_rgNameLookUp[idx].psCountryName,
pcPBTemp->m_rgNameLookUp[idx].pLCE->dwCountryID);
iLastIndex = (int)SendDlgItemMessage(m_hwndDlg,IDC_CMBCOUNTRY,
CB_ADDSTRING,0,
(LPARAM)((LPSTR) &szTemp[0]));
SendDlgItemMessage(m_hwndDlg,IDC_CMBCOUNTRY,CB_SETITEMDATA,
(WPARAM)iLastIndex,
(LPARAM)pcPBTemp->m_rgNameLookUp[idx].pLCE->dwCountryID);
if (pcPBTemp->m_rgNameLookUp[idx].pLCE->dwCountryID == m_dwCountryID)
{
iCurIndex = iLastIndex;
}
}
}
if (iCurIndex != -1) // 0xFFFFFFFF
{
SendDlgItemMessage(m_hwndDlg,IDC_CMBCOUNTRY,CB_SETCURSEL,(WPARAM)iCurIndex,0);
} else {
SendDlgItemMessage(m_hwndDlg,IDC_CMBCOUNTRY,CB_SETCURSEL,0,0);
iCurIndex = (int)SendDlgItemMessage(m_hwndDlg,IDC_CMBCOUNTRY,CB_GETITEMDATA,0,0);
if (iCurIndex != CB_ERR) m_dwCountryID = iCurIndex;
}
// Copy country to label
//
if (GetDlgItemText(m_hwndDlg,IDC_CMBCOUNTRY,szTemp,100))
{
SetDlgItemText(m_hwndDlg,IDC_LBLCOUNTRY,szTemp);
}
// Initialize Last Selection Method
//
m_dwFlags &= (~FREETEXT_SELECTION_METHOD);
m_dwFlags |= PHONELIST_SELECTION_METHOD;
// Fill in region list and select current region
//
FillRegion();
// Fill in phone numbers
//
FillNumber();
SetFocus(GetDlgItem(m_hwndDlg,IDC_CMBCOUNTRY));
lRet = FALSE;
break;
case WM_SHOWSTATEMSG:
if (wParam)
{
ShowWindow(GetDlgItem(m_hwndDlg,IDC_LBLSTATEMSG),SW_SHOW);
} else {
ShowWindow(GetDlgItem(m_hwndDlg,IDC_LBLSTATEMSG),SW_HIDE);
}
break;
// 1/9/96 jmazner added for Normandy #13185
case WM_CLOSE:
if ((m_dwFlags & (AUTODIAL_IN_PROGRESS|DIALERR_IN_PROGRESS)) == 0)
{
if (MessageBox(hwndDlg,GetSz(IDS_WANTTOEXIT),GetSz(IDS_TITLE),
MB_APPLMODAL | MB_ICONQUESTION | MB_YESNO | MB_DEFBUTTON2) == IDYES)
EndDialog(hwndDlg,IDC_CMDCANCEL);
} else {
EndDialog(hwndDlg,IDC_CMDCANCEL);
}
break;
case WM_COMMAND:
switch (LOWORD(wParam))
{
case IDC_CMBCOUNTRY:
if (NOTIFY_CODE == CBN_SELCHANGE)
{
iCurIndex = (int)SendDlgItemMessage(m_hwndDlg,IDC_CMBCOUNTRY,CB_GETCURSEL,0,0);
if (iCurIndex == CB_ERR) break;
iCurIndex = (int)SendDlgItemMessage(m_hwndDlg,IDC_CMBCOUNTRY,CB_GETITEMDATA,(WPARAM)iCurIndex,0);
if (iCurIndex == CB_ERR) break;
m_dwCountryID = iCurIndex; //REVIEW: data type????
FillRegion();
m_wRegion = 0;
FillNumber();
}
break;
case IDC_CMBREGION:
if (NOTIFY_CODE == CBN_SELCHANGE)
{
iCurIndex = (int)SendDlgItemMessage(m_hwndDlg,IDC_CMBREGION,CB_GETCURSEL,0,0);
if (iCurIndex == CB_ERR) break;
iCurIndex = (int)SendDlgItemMessage(m_hwndDlg,IDC_CMBREGION,CB_GETITEMDATA,(WPARAM)iCurIndex,0);
if (iCurIndex == CB_ERR) break;
m_wRegion = (WORD) iCurIndex; //REVIEW: data type???
FillNumber();
}
break;
case IDC_CMBNUMBER:
if ((NOTIFY_CODE == CBN_SELCHANGE) || (NOTIFY_CODE == CBN_DROPDOWN))
{
//iCurIndex = SendDlgItemMessage(m_hwndDlg,IDC_CMBNUMBER,CB_GETCURSEL,0,0);
//if (iCurIndex == CB_ERR) break;
EnableWindow(GetDlgItem(m_hwndDlg,IDC_CMDNEXT),TRUE);
//iCurIndex = SendDlgItemMessage(m_hwndDlg,IDC_CMBNUMBER,CB_GETITEMDATA,(WPARAM)iCurIndex,0);
//if (iCurIndex == CB_ERR) break;
//if (!lstrcpy(&m_szDunFile[0],&((PACCESSENTRY)iCurIndex)->szDataCenter[0]))
//{
// AssertSz(0,"Failed to copy data center from AE\n");
// break;
//}
// Set Last Selection Method
//
m_dwFlags &= (~FREETEXT_SELECTION_METHOD);
m_dwFlags |= PHONELIST_SELECTION_METHOD;
} else if (NOTIFY_CODE == CBN_EDITCHANGE) {
if (SendDlgItemMessage(m_hwndDlg,IDC_CMBNUMBER,WM_GETTEXTLENGTH,0,0))
{
EnableWindow(GetDlgItem(m_hwndDlg,IDC_CMDNEXT),TRUE);
} else {
EnableWindow(GetDlgItem(m_hwndDlg,IDC_CMDNEXT),FALSE);
}
// Set Last Selection Method
//
m_dwFlags &= (~PHONELIST_SELECTION_METHOD);
m_dwFlags |= FREETEXT_SELECTION_METHOD;
}
break;
case IDC_CMDNEXT:
if ((m_dwFlags & PHONELIST_SELECTION_METHOD) == PHONELIST_SELECTION_METHOD)
{
DWORD_PTR dwItemData;
iCurIndex = (int)SendDlgItemMessage(m_hwndDlg,IDC_CMBNUMBER,CB_GETCURSEL,0,0);
if (iCurIndex == CB_ERR) break;
dwItemData = SendDlgItemMessage(m_hwndDlg,IDC_CMBNUMBER,CB_GETITEMDATA,(WPARAM)iCurIndex,0);
if (iCurIndex == CB_ERR) break;
// Get the relavant information out of the AE structures
//
pAE = (PACCESSENTRY)dwItemData;
((CPhoneBook far *)m_dwPhoneBook)->GetCanonical(pAE,m_szPhoneNumber);
lstrcpy(m_szDunFile,pAE->szDataCenter);
} else {
// Parse the text that the user entered
//
if (GetDlgItemText(m_hwndDlg,IDC_CMBNUMBER,m_szPhoneNumber,RAS_MaxPhoneNumber))
{
m_szPhoneNumber[RAS_MaxPhoneNumber] = '\0';
for (p = m_szPhoneNumber;*p && *p != ':';p++);
if (*p)
{
*p = '\0';
p++;
lstrcpy(m_szDunFile,p);
} else {
m_szDunFile[0] = '\0';
}
// Check that the phone number on contains valid characters
//
for (p = m_szPhoneNumber;*p;p++)
{
for(p2 = szValidPhoneCharacters;*p2;p2++)
{
if (*p == *p2)
break; // p2 for loop
}
if (!*p2) break; // p for loop
}
if (*p)
{
MessageBox(m_hwndDlg,GetSz(IDS_INVALIDPHONE),GetSz(IDS_TITLE),MB_MYERROR);
//MsgBox(IDS_INVALIDPHONE,MB_MYERROR);
break; // switch statement
}
} else {
AssertSz(0,"You should never be able to hit NEXT with nothing in the phone number.\n");
}
}
EndDialog(m_hwndDlg,IDC_CMDNEXT);
break;
case IDC_CMDCANCEL:
if ((m_dwFlags & (AUTODIAL_IN_PROGRESS|DIALERR_IN_PROGRESS)) == 0)
{
if (MessageBox(hwndDlg,GetSz(IDS_WANTTOEXIT),GetSz(IDS_TITLE),
MB_APPLMODAL | MB_ICONQUESTION | MB_YESNO | MB_DEFBUTTON2) == IDYES)
EndDialog(hwndDlg,IDC_CMDCANCEL);
} else {
EndDialog(hwndDlg,IDC_CMDCANCEL);
}
break;
EndDialog(m_hwndDlg,IDC_CMDCANCEL);
break;
case IDC_CMDBACK:
EndDialog(m_hwndDlg,IDC_CMDBACK);
break;
}
default:
lRet = FALSE;
break;
}// switch
return lRet;
}
// ############################################################################
/***** 1/9/96 jmazner Normandy #13185
CAccessNumDlg::CAccessNumDlg()
{
m_szDunPrimary[0] = '\0';
m_szDunSecondary[0] = '\0';
m_szPrimary[0] = '\0';
m_szSecondary[0] = '\0';
m_rgAccessEntry = NULL;
m_wNumber = 0;
m_dwPhoneBook=0;
}
*********/
// ############################################################################
/********* 1/9/96 jmazner Normandy #13185
This was dead code, unused anywhere in icwphbk
INT_PTR CAccessNumDlg::DlgProc(HWND hwnd, UINT uMsg, WPARAM wParam, LPARAM lParam,
LRESULT lResult)
{
LRESULT lRet = TRUE;
switch (uMsg)
{
case WM_INITDIALOG:
SendDlgItemMessage(hwnd,IDC_TXTPRIMARY,EM_SETLIMITTEXT,RAS_MaxPhoneNumber,0);
SendDlgItemMessage(hwnd,IDC_TXTSECONDARY,EM_SETLIMITTEXT,RAS_MaxPhoneNumber,0);
/ *
// turn AccessEntries into phone numbers
if(m_szPrimary[0] == '\0')
{
LPIDLOOKUPELEMENT pIDLookUp;
CPhoneBook *pcPBTemp;
pcPBTemp = ((CPhoneBook far *)m_dwPhoneBook);
AssertSz(m_dwPhoneBook,"No phonebook set");
//For the primary phone number
pIDLookUp = (LPIDLOOKUPELEMENT)bsearch(&m_rgAccessEntry[0]->dwCountryID,
pcPBTemp->m_rgIDLookUp,pcPBTemp->m_pLineCountryList->dwNumCountries,
sizeof(IDLOOKUPELEMENT),CompareIdxLookUpElements);
SzCanonicalFromAE (m_szPrimary, m_rgAccessEntry[0], pIDLookUp->pLCE);
if (m_rgAccessEntry[1])
{
if (m_rgAccessEntry[0]->dwCountryID != m_rgAccessEntry[1]->dwCountryID)
{
pIDLookUp = (LPIDLOOKUPELEMENT)bsearch(&m_rgAccessEntry[0]->dwCountryID,
pcPBTemp->m_rgIDLookUp,pcPBTemp->m_pLineCountryList->dwNumCountries,
sizeof(IDLOOKUPELEMENT),CompareIdxLookUpElements);
}
SzCanonicalFromAE (m_szSecondary, m_rgAccessEntry[1], pIDLookUp->pLCE);
}
}
* /
SendDlgItemMessage(hwnd,IDC_TXTPRIMARY,WM_SETTEXT,0,(LPARAM)&m_szPrimary[0]);
SendDlgItemMessage(hwnd,IDC_TXTSECONDARY,WM_SETTEXT,0,(LPARAM)&m_szSecondary[0]);
break;
case WM_COMMAND:
switch (LOWORD(wParam))
{
case IDC_CMDOK:
// Check that we have at least one phone number
// Leave dialog
GetDlgItemText(hwnd,IDC_TXTPRIMARY,&m_szPrimary[0],RAS_MaxPhoneNumber);
GetDlgItemText(hwnd,IDC_TXTSECONDARY,&m_szSecondary[0],RAS_MaxPhoneNumber);
if (m_szPrimary[0])
m_wNumber=1;
else
m_wNumber=0;
if (m_szSecondary[0])
m_wNumber++;
EndDialog(hwnd,IDC_CMDOK);
break;
case IDC_CMDEXIT:
// Verify with user
// Get out of Dodge
if (MessageBox(hwnd,GetSz(IDS_WANTTOEXIT),GetSz(IDS_TITLE),
MB_APPLMODAL | MB_ICONQUESTION | MB_YESNO | MB_DEFBUTTON2) == IDYES)
EndDialog(hwnd,IDC_CMDEXIT);
break;
case IDC_CMDCHANGEPRIMARY:
// hide dialog
ShowWindow(hwnd,SW_HIDE);
// show new dialog
CSelectNumDlg far *pcSelectNumDlg;
pcSelectNumDlg = new CSelectNumDlg;
if (!pcSelectNumDlg)
{
MessageBox(hwnd,GetSz(IDS_NOTENOUGHMEMORY),GetSz(IDS_TITLE),MB_MYERROR);
// MsgBox(IDS_NOTENOUGHMEMORY,MB_MYERROR);
ShowWindow(hwnd,SW_SHOW);
break;
}
int irc;
pcSelectNumDlg->m_dwPhoneBook = m_dwPhoneBook;
pcSelectNumDlg->m_dwCountryID = m_dwCountryID;
pcSelectNumDlg->m_wRegion = m_wRegion;
irc = DialogBoxParam(g_hInstDll,MAKEINTRESOURCE(IDD_SELECTNUMBER),
g_hWndMain,PhbkGenericDlgProc,
(LPARAM)pcSelectNumDlg);
ShowWindow(hwnd,SW_SHOW);
switch (irc)
{
case -1:
MessageBox(hwnd,GetSz(IDS_NOTENOUGHMEMORY),GetSz(IDS_TITLE),MB_MYERROR);
// MsgBox(IDS_NOTENOUGHMEMORY,MB_MYERROR);
goto DlgProcExit;
// break;
case IDC_CMDOK:
m_dwCountryID = pcSelectNumDlg->m_dwCountryID;
m_wRegion = pcSelectNumDlg->m_wRegion;
lstrcpy(m_szDunPrimary,pcSelectNumDlg->m_szDunFile);
SetDlgItemText(hwnd,IDC_TXTPRIMARY,pcSelectNumDlg->m_szPhoneNumber);
break;
}
break;
}
break;
default:
lRet = FALSE;
break;
}
DlgProcExit:
return lRet;
}
*********************/
#ifdef WIN16
// ############################################################################
// NAME: SetNonBoldDlg
//
// Set all the child controls in a window to a non-bold version of the
// current control font.
//
// Parameters: HWND hDlg Handle to the dialog window
//
// Created 8/12/96 ValdonB (creatively borrowed from IE)
// ############################################################################
void
SetNonBoldDlg(HWND hDlg)
{
HFONT hfontDlg = (HFONT) NULL;
LOGFONT lFont;
HWND hCtl;
if ((hfontDlg = (HFONT) SendMessage(hDlg, WM_GETFONT, 0, 0L)))
{
if (GetObject(hfontDlg, sizeof(LOGFONT), (LPSTR) &lFont))
{
lFont.lfWeight = FW_NORMAL;
if (hfontDlg = CreateFontIndirect((LPLOGFONT) &lFont))
{
// apply the font to all the child controls
for (hCtl = GetWindow(hDlg, GW_CHILD);
NULL != hCtl;
hCtl = GetWindow(hCtl, GW_HWNDNEXT))
{
SendMessage(hCtl, WM_SETFONT, (WPARAM) hfontDlg, 0);
}
}
}
}
}
// ############################################################################
// NAME: SetNonBoldDlg
//
// The dialog was modified earlier by unbolding the dialog font, and
// getting each control in the dialog to use that font. This function
// is called when the dialog is being destroyed so the font can be
// deleted
//
// Parameters: HWND hDlg Handle to the dialog window
//
// Created 8/12/96 ValdonB (creatively borrowed from IE)
// ############################################################################
void
DeleteDlgFont
(
HWND hDlg
)
{
HFONT hfont = NULL;
hfont = (HFONT)SendMessage(hDlg,WM_GETFONT,0,0);
if (hfont) DeleteObject(hfont);
}
#endif // WIN16
// ############################################################################
#ifdef WIN16
extern "C" INT_PTR CALLBACK __export PhbkGenericDlgProc(
#else
extern "C" __declspec(dllexport) INT_PTR CALLBACK PhbkGenericDlgProc(
#endif
HWND hwndDlg, // handle to dialog box
UINT uMsg, // message
WPARAM wParam, // first message parameter
LPARAM lParam // second message parameter
)
{
#if defined(WIN16)
RECT MyRect;
RECT DTRect;
#endif
//#ifdef DEBUG
// DebugBreak();
//#endif
CDialog far *pcDlg = NULL;
LRESULT lRet;
switch (uMsg)
{
case WM_DESTROY:
ReleaseBold(GetDlgItem(hwndDlg,IDC_LBLTITLE));
break;
case WM_INITDIALOG:
pcDlg = (CDialog far *)lParam;
SetWindowLongPtr(hwndDlg,DWLP_USER,lParam);
lRet = TRUE;
#if defined(WIN16)
//
// Move the window to the center of the screen
//
GetWindowRect(hwndDlg, &MyRect);
if (0 == MyRect.left && 0 == MyRect.top)
{
GetWindowRect(GetDesktopWindow(), &DTRect);
MoveWindow(hwndDlg, (DTRect.right - MyRect.right) / 2, (DTRect.bottom - MyRect.bottom) /2,
MyRect.right, MyRect.bottom, FALSE);
}
SetNonBoldDlg(hwndDlg);
#endif
MakeBold(GetDlgItem(hwndDlg,IDC_LBLTITLE));
break;
#if defined(WIN16)
case WM_SYSCOLORCHANGE:
Ctl3dColorChange();
break;
#endif
// 1/9/96 jmazner Normandy #13185, moved to CSelectNumDlg::DlgProc
//case WM_CLOSE:
// if (MessageBox(hwndDlg,GetSz(IDS_WANTTOEXIT),GetSz(IDS_TITLE),
// MB_APPLMODAL | MB_ICONQUESTION | MB_YESNO | MB_DEFBUTTON2) == IDYES)
// EndDialog(hwndDlg,IDC_CMDCANCEL);
// lRet = TRUE;
// break;
// //PostQuitMessage(0);
// EndDialog(hwndDlg,FALSE);
// lRet = TRUE;
// break;
default:
// let the system process the message
lRet = FALSE;
}
if (!pcDlg) pcDlg = (CDialog far*)GetWindowLongPtr(hwndDlg,DWLP_USER);
if (pcDlg)
lRet = pcDlg->DlgProc(hwndDlg,uMsg,wParam,lParam,lRet);
return (INT_PTR)lRet;
}
// ############################################################################
HRESULT CSelectNumDlg::FillRegion()
{
HRESULT hr = ERROR_NOT_ENOUGH_MEMORY;
int iCurIndex;
int iLastIndex;
unsigned int idx;
CPhoneBook far *pcPBTemp;
pcPBTemp = ((CPhoneBook far *)m_dwPhoneBook);
int iDebugIdx;
// Fill in region list
//
SendDlgItemMessage(m_hwndDlg,IDC_CMBREGION,CB_RESETCONTENT,0,0);
SendDlgItemMessage(m_hwndDlg,IDC_CMBREGION,CB_ADDSTRING,0,(LPARAM)GetSz(IDS_NATIONWIDE));
iCurIndex = -1; // 0xFFFFFFFF;
m_fHasRegions = FALSE;
for (idx=0;idx<pcPBTemp->m_cStates;idx++)
{
if (pcPBTemp->m_rgState[idx].dwCountryID == m_dwCountryID)
{
PACCESSENTRY pAE = NULL, pAELast = NULL;
pAE = pcPBTemp->m_rgState[idx].paeFirst;
Assert(pAE);
pAELast = &(pcPBTemp->m_rgPhoneBookEntry[pcPBTemp->m_cPhoneBookEntries - 1]);
while (pAELast > pAE &&
pAE->dwCountryID == m_dwCountryID &&
pAE->wStateID == idx+1)
{
if ((pAE->fType & m_bMask) == m_fType)
goto AddRegion;
pAE++;
}
continue;
AddRegion:
m_fHasRegions = TRUE;
iLastIndex = (int)SendDlgItemMessage(m_hwndDlg,IDC_CMBREGION,CB_ADDSTRING,0,(LPARAM)&pcPBTemp->m_rgState[idx].szStateName[0]);
iDebugIdx = (int)SendDlgItemMessage(m_hwndDlg,IDC_CMBREGION,CB_SETITEMDATA,(WPARAM)iLastIndex,(LPARAM)idx+1);
if ((idx+1) == m_wRegion)
{
iCurIndex = iLastIndex;
}
}
}
// select current region or nation wide
//
if (iCurIndex != -1) // 0xFFFFFFFF
{
SendDlgItemMessage(m_hwndDlg,IDC_CMBREGION,CB_SETCURSEL,(WPARAM)iCurIndex,0);
} else {
m_wRegion = 0; // Nationwide
SendDlgItemMessage(m_hwndDlg,IDC_CMBREGION,CB_SETCURSEL,0,0);
}
EnableWindow(GetDlgItem(m_hwndDlg,IDC_CMBREGION),m_fHasRegions);
PostMessage(m_hwndDlg,WM_SHOWSTATEMSG,m_fHasRegions,0);
hr = ERROR_SUCCESS;
return hr;
}
// ############################################################################
CSelectNumDlg::CSelectNumDlg()
{
m_dwCountryID = 0;
m_wRegion = 0;
m_dwPhoneBook = 0;
m_szPhoneNumber[0] = '\0';
m_szDunFile[0] = '\0';
m_fType = 0;
m_bMask = 0;
m_fHasRegions = FALSE;
m_hwndDlg = NULL;
m_dwFlags = 0;
}
// ############################################################################
HRESULT CSelectNumDlg::FillNumber()
{
HRESULT hr = ERROR_NOT_ENOUGH_MEMORY;
PACCESSENTRY pAELast, pAE = NULL;
CPhoneBook far *pcPBTemp;
unsigned int idx;
pcPBTemp = ((CPhoneBook far *)m_dwPhoneBook);
// Check if we need to look up the number from the region or from the country
//
if (m_fHasRegions && m_wRegion)
pAE = pcPBTemp->m_rgState[m_wRegion-1].paeFirst;
// Find the Access Entries for the country
//
if (!pAE)
{
LPIDLOOKUPELEMENT pIDLookUp, pLookUpTarget;
pLookUpTarget = (LPIDLOOKUPELEMENT)GlobalAlloc(GPTR,sizeof(IDLOOKUPELEMENT));
Assert(pLookUpTarget);
if (!pLookUpTarget) goto FillNumberExit;
pLookUpTarget->dwID = m_dwCountryID;
pIDLookUp = NULL;
pIDLookUp = (LPIDLOOKUPELEMENT)bsearch(pLookUpTarget,pcPBTemp->m_rgIDLookUp,
(int)pcPBTemp->m_pLineCountryList->dwNumCountries,sizeof(IDLOOKUPELEMENT),CompareIDLookUpElements);
if (pIDLookUp)
pAE = pIDLookUp->pFirstAE;
}
// Fill the list for whatever AE's we found
//
SendDlgItemMessage(m_hwndDlg,IDC_CMBNUMBER,CB_RESETCONTENT,0,0);
if (pAE)
{
//pAELast = pcPBTemp->m_rgPhoneBookEntry + pcPBTemp->m_cPhoneBookEntries;
pAELast = &(pcPBTemp->m_rgPhoneBookEntry[pcPBTemp->m_cPhoneBookEntries - 1]);
while (pAELast > pAE && pAE->dwCountryID == m_dwCountryID && pAE->wStateID == m_wRegion)
{
if ((pAE->fType & m_bMask) == m_fType)
{
wsprintf(szTemp,"%s (%s) %s",pAE->szCity,pAE->szAreaCode,
pAE->szAccessNumber);
idx = (int)SendDlgItemMessage(m_hwndDlg,IDC_CMBNUMBER,
CB_ADDSTRING,0,
(LPARAM)((LPSTR) &szTemp[0]));
if (idx == -1) goto FillNumberExit;
SendDlgItemMessage(m_hwndDlg,IDC_CMBNUMBER,CB_SETITEMDATA,
(WPARAM)idx,(LPARAM)pAE);
}
pAE++;
}
// Select the first item
//
if (SendDlgItemMessage(m_hwndDlg,IDC_CMBNUMBER,CB_SETCURSEL,0,0) == CB_ERR)
EnableWindow(GetDlgItem(m_hwndDlg,IDC_CMDNEXT),FALSE);
else
EnableWindow(GetDlgItem(m_hwndDlg,IDC_CMDNEXT),TRUE);
hr = ERROR_SUCCESS;
}
FillNumberExit:
return hr;
}