//+---------------------------------------------------------------------------- // // File: phbk.h // // Module: CMPBK32.DLL // // Synopsis: Definitions for the CPhoneBook class // // Copyright (c) 1998 Microsoft Corporation // // Author: quintinb created header 08/17/99 // //+---------------------------------------------------------------------------- #ifndef _PHBK #define _PHBK #define DllExportH extern "C" HRESULT WINAPI __stdcall //#define DllExport extern "C" __stdcall __declspec(dllexport) //#define DllExport extern "C" __declspec(dllexport) #define cbAreaCode 11 // maximum number of characters in an area code, not including \0 #define cbCity 31 // maximum number of chars in city name, not including \0 #define cbAccessNumber 41 // maximum number of chars in phone number, not including \0 #define cbStateName 31 // maximum number of chars in state name, not including \0 #define cbBaudRate 6 // maximum number of chars in a baud rate, not including \0 #define cbDataCenter (MAX_PATH+1) // max length of data center string // Our initial allocation of memory when loading the phone book #define PHONE_ENTRY_ALLOC_SIZE 500 #define NO_AREA_CODE (-1) #define TEMP_BUFFER_LENGTH 1024 typedef struct { DWORD dwIndex; // index number BYTE bFlipFactor; // for auto-pick DWORD fType; // phone number type WORD wStateID; // state ID DWORD dwCountryID; // TAPI country ID DWORD dwAreaCode; // area code or NO_AREA_CODE if none DWORD dwConnectSpeedMin; // minimum baud rate DWORD dwConnectSpeedMax; // maximum baud rate char szCity[cbCity + sizeof('\0')]; // city name char szAccessNumber[cbAccessNumber + sizeof('\0')]; // access number char szDataCenter[cbDataCenter + sizeof('\0')]; // data center access string char szAreaCode[cbAreaCode + sizeof('\0')]; //Keep the actual area code string around. } ACCESSENTRY, *PACCESSENTRY; // ae typedef struct { DWORD dwCountryID; // country ID that this state occurred in LONG_PTR iFirst; // index of first access entry for this state char szStateName[cbStateName + sizeof('\0')]; // state name } STATE, *PSTATE; typedef struct tagIDLOOKUPELEMENT { DWORD dwID; LPLINECOUNTRYENTRY pLCE; LONG_PTR iFirstAE; } IDLOOKUPELEMENT, *PIDLOOKUPELEMENT; typedef struct tagCNTRYNAMELOOKUPELEMENT { LPSTR psCountryName; DWORD dwNameSize; LPLINECOUNTRYENTRY pLCE; } CNTRYNAMELOOKUPELEMENT, *PCNTRYNAMELOOKUPELEMENT; typedef struct tagCNTRYNAMELOOKUPELEMENTW { LPWSTR psCountryName; DWORD dwNameSize; LPLINECOUNTRYENTRY pLCE; } CNTRYNAMELOOKUPELEMENTW, *PCNTRYNAMELOOKUPELEMENTW; typedef struct tagIDXLOOKUPELEMENT { DWORD dwIndex; LONG_PTR iAE; } IDXLOOKUPELEMENT,*PIDXLOOKUPELEMENT; typedef void (WINAPI *CB_PHONEBOOK)(unsigned int, DWORD_PTR); // // CPhoneBook // class CPhoneBook { public: CPhoneBook(); ~CPhoneBook(); HRESULT Init(LPCSTR pszISPCode); HRESULT Merge(LPCSTR pszChangeFilename); HRESULT GetCanonical(PACCESSENTRY pAE, char *psOut); HRESULT GetNonCanonical(PACCESSENTRY pAE, char *psOut); HRESULT GetCanonical(DWORD dwIdx, char *psOut) { return (GetCanonical(&m_rgPhoneBookEntry[dwIdx],psOut)); }; HRESULT GetNonCanonical(DWORD dwIdx, char *psOut) { return (GetNonCanonical(&m_rgPhoneBookEntry[dwIdx],psOut)); }; void EnumCountries(DWORD dwMask, DWORD fType, CB_PHONEBOOK pfnCountry, DWORD_PTR dwParam); void EnumCountries(PPBFS pFilter, CB_PHONEBOOK pfnCountry, DWORD_PTR dwParam); void EnumRegions(DWORD dwCountryID, DWORD dwMask, DWORD fType, CB_PHONEBOOK pfnCountry, DWORD_PTR dwParam); void EnumRegions(DWORD dwCountryID, PPBFS pFilter, CB_PHONEBOOK pfnCountry, DWORD_PTR dwParam); void EnumNumbersByCountry(DWORD dwCountryId, DWORD dwMask, DWORD fType, CB_PHONEBOOK pfnNumber, DWORD_PTR dwParam); void EnumNumbersByCountry(DWORD dwCountryId, PPBFS pFilter, CB_PHONEBOOK pfnNumber, DWORD_PTR dwParam); void EnumNumbersByRegion(unsigned int nRegion, DWORD dwCountryId, DWORD dwMask, DWORD fType, CB_PHONEBOOK pfnNumber, DWORD_PTR dwParam); void EnumNumbersByRegion(unsigned int nRegion, DWORD dwCountryId, PPBFS pFilter, CB_PHONEBOOK pfnNumber, DWORD_PTR dwParam); BOOL FHasPhoneType(PPBFS pFilter); BOOL FHasPhoneNumbers(DWORD dwCountryID, DWORD dwMask, DWORD fType); BOOL FHasPhoneNumbers(DWORD dwCountryID, PPBFS pFilter); LPCSTR GetCountryNameByIdx(DWORD dwIdx) { return (m_rgNameLookUp[dwIdx].psCountryName); }; LPCWSTR GetCountryNameByIdxW(DWORD dwIdx) { return (((CNTRYNAMELOOKUPELEMENTW *)(&m_rgNameLookUp[dwIdx]))->psCountryName); }; DWORD GetCountryIDByIdx(DWORD dwIdx) { return (m_rgNameLookUp[dwIdx].pLCE->dwCountryID); }; LPCTSTR GetRegionNameByIdx(DWORD dwIdx) { return (m_rgState[dwIdx].szStateName); }; LPCTSTR GetCityNameByIdx(DWORD dwIdx) { return (m_rgPhoneBookEntry[dwIdx].szCity); }; LPCTSTR GetAreaCodeByIdx(DWORD dwIdx) { return (m_rgPhoneBookEntry[dwIdx].szAreaCode); }; LPCTSTR GetAccessNumberByIdx(DWORD dwIdx) { return (m_rgPhoneBookEntry[dwIdx].szAccessNumber); }; LPCTSTR GetDataCenterByIdx(DWORD dwIdx) { return (m_rgPhoneBookEntry[dwIdx].szDataCenter); }; DWORD GetPhoneTypeByIdx(DWORD dwIdx) { return (m_rgPhoneBookEntry[dwIdx].fType); }; DWORD GetMinBaudByIdx(DWORD dwIdx) { return (m_rgPhoneBookEntry[dwIdx].dwConnectSpeedMin); }; DWORD GetMaxBaudByIdx(DWORD dwIdx) { return (m_rgPhoneBookEntry[dwIdx].dwConnectSpeedMax); }; private: ACCESSENTRY *m_rgPhoneBookEntry; DWORD m_cPhoneBookEntries; LINECOUNTRYENTRY *m_rgLineCountryEntry; LINECOUNTRYLIST *m_pLineCountryList; IDLOOKUPELEMENT *m_rgIDLookUp; CNTRYNAMELOOKUPELEMENT *m_rgNameLookUp; PSTATE m_rgState; DWORD m_cStates; char m_szINFFile[MAX_PATH]; char m_szPhoneBook[MAX_PATH]; BOOL ReadPhoneBookDW(DWORD *pdw, CCSVFile *pcCSVFile); BOOL ReadPhoneBookW(WORD *pw, CCSVFile *pcCSVFile); BOOL ReadPhoneBookSZ(LPSTR psz, DWORD dwSize, CCSVFile *pcCSVFile); BOOL ReadPhoneBookB(BYTE *pb, CCSVFile *pcCSVFile); BOOL ReadPhoneBookNL(CCSVFile *pcCSVFile); HRESULT ReadOneLine(PACCESSENTRY pAccessEntry, CCSVFile *pcCSVFile); PACCESSENTRY IdxToPAE(LONG_PTR iIdx) { return ((iIdx==0)?NULL:(m_rgPhoneBookEntry+(iIdx-1))); }; LONG_PTR PAEToIdx(PACCESSENTRY pAE) { return ((pAE==NULL)?0:((pAE-m_rgPhoneBookEntry)+1)); }; }; extern HINSTANCE g_hInst; // instance for this DLL #endif // _PHBK