|
|
//+----------------------------------------------------------------------------
//
// File: misc.cpp
//
// Module: CMPBK32.DLL
//
// Synopsis: Miscellaneous phone book utility functions.
//
// Copyright (c) 1998 Microsoft Corporation
//
// Author: quintinb created header 08/17/99
//
//+----------------------------------------------------------------------------
// ############################################################################
// Miscellaneous support routines
#include "cmmaster.h"
/* Not used anywhere, take out
#define irgMaxSzs 5
char szStrTable[irgMaxSzs][256];
// ############################################################################
PSTR GetSz(WORD wszID) { static int iSzTable=0; PSTR psz = (PSTR) szStrTable[iSzTable];
iSzTable++; if (iSzTable >= irgMaxSzs) iSzTable = 0; if (!LoadString(g_hInst, wszID, psz, 256)) { CMTRACE1("LoadString failed %d\n", (DWORD) wszID); *psz = 0; } return (psz); } */ // ############################################################################
void SzCanonicalFromAE (char *psz, PACCESSENTRY pAE, LPLINECOUNTRYENTRY pLCE) { if (NO_AREA_CODE == pAE->dwAreaCode) { wsprintf(psz, "+%lu %s", pLCE->dwCountryCode, pAE->szAccessNumber); } else { wsprintf(psz, "+%lu (%s) %s", pLCE->dwCountryCode, pAE->szAreaCode, pAE->szAccessNumber); } return; }
// ############################################################################
void SzNonCanonicalFromAE (char *psz, PACCESSENTRY pAE, LPLINECOUNTRYENTRY pLCE) { if (NO_AREA_CODE == pAE->dwAreaCode) { wsprintf(psz, "%lu %s", pLCE->dwCountryCode, pAE->szAccessNumber); } else { wsprintf(psz, "%lu %s %s", pLCE->dwCountryCode, pAE->szAreaCode, pAE->szAccessNumber); } return; }
// ############################################################################
int MyStrcmp(PVOID pv1, PVOID pv2) { char *pc1 = (char*) pv1; char *pc2 = (char*) pv2; int iRC = 0; // loop while not pointed at the ending NULL character and no difference has been found
while (*pc1 && *pc2 && !iRC) { iRC = (int)(*pc1 - *pc2); pc1++; pc2++; }
// if we exited because we got to the end of one string before we found a difference
// return -1 if pv1 is longer, else return the character pointed at by pv2. If pv2
// is longer than pv1 then the value at pv2 will be greater than 0. If both strings
// ended at the same time, then pv2 will point to 0.
if (!iRC) { iRC = (*pc1) ? -1 : (*pc2); } return iRC; }
// ############################################################################
int __cdecl CompareIDLookUpElements(const void*e1, const void*e2) { if (((PIDLOOKUPELEMENT)e1)->dwID > ((PIDLOOKUPELEMENT)e2)->dwID) return 1; if (((PIDLOOKUPELEMENT)e1)->dwID < ((PIDLOOKUPELEMENT)e2)->dwID) return -1; return 0; }
// ############################################################################
int __cdecl CompareCntryNameLookUpElementsA(const void*e1, const void*e2) { PCNTRYNAMELOOKUPELEMENT pCUE1 = (PCNTRYNAMELOOKUPELEMENT)e1; PCNTRYNAMELOOKUPELEMENT pCUE2 = (PCNTRYNAMELOOKUPELEMENT)e2;
return CompareStringA(LOCALE_USER_DEFAULT,0,pCUE1->psCountryName, pCUE1->dwNameSize,pCUE2->psCountryName, pCUE2->dwNameSize) - 2; }
// ############################################################################
int __cdecl CompareCntryNameLookUpElementsW(const void*e1, const void*e2) { PCNTRYNAMELOOKUPELEMENTW pCUE1 = (PCNTRYNAMELOOKUPELEMENTW)e1; PCNTRYNAMELOOKUPELEMENTW pCUE2 = (PCNTRYNAMELOOKUPELEMENTW)e2;
return CompareStringW(LOCALE_USER_DEFAULT,0,pCUE1->psCountryName, pCUE1->dwNameSize,pCUE2->psCountryName, pCUE2->dwNameSize) - 2; }
// ############################################################################
int __cdecl CompareIdxLookUpElements(const void*e1, const void*e2) { PIDXLOOKUPELEMENT pidx1 = (PIDXLOOKUPELEMENT) e1; PIDXLOOKUPELEMENT pidx2 = (PIDXLOOKUPELEMENT) e2;
if (pidx1->dwIndex > pidx2->dwIndex) { return 1; }
if (pidx1->dwIndex < pidx2->dwIndex) { return -1; } return 0; }
// ############################################################################
int __cdecl CompareIdxLookUpElementsFileOrder(const void *pv1, const void *pv2) { PACCESSENTRY pae1, pae2; int iSort;
pae1 = (PACCESSENTRY) (((PIDXLOOKUPELEMENT)pv1)->iAE); pae2 = (PACCESSENTRY) (((PIDXLOOKUPELEMENT)pv2)->iAE);
// sort empty enteries to the end of the list
if (!(pae1 && pae2)) { // return ((int)pae1) ? -1 : ((int)pae2);
return (pae1 ? -1 : (pae2 ? 1 : 0)); }
// country ASC, state ASC, city ASC, toll free DESC, flip DESC, con spd max DESC
if (pae1->dwCountryID != pae2->dwCountryID) { return (int) (pae1->dwCountryID - pae2->dwCountryID); } if (pae1->wStateID != pae2->wStateID) { return (pae1->wStateID - pae2->wStateID); }
iSort = MyStrcmp((PVOID)pae1->szCity, (PVOID)pae2->szCity); if (iSort) { return (iSort); }
if (pae1->fType != pae2->fType) { return (int) (pae2->fType - pae1->fType); }
if (pae1->bFlipFactor != pae2->bFlipFactor) { return (pae2->bFlipFactor - pae1->bFlipFactor); }
if (pae1->dwConnectSpeedMax != pae2->dwConnectSpeedMax) { return (int) (pae2->dwConnectSpeedMax - pae1->dwConnectSpeedMax); }
return 0; }
// ############################################################################
//inline BOOL FSz2Dw(PCSTR pSz,DWORD *dw)
BOOL FSz2Dw(PCSTR pSz,DWORD *dw) { DWORD val = 0; while (*pSz) { if (*pSz >= '0' && *pSz <= '9') { val *= 10; val += *pSz++ - '0'; } else { return FALSE; //bad number
} } *dw = val; return (TRUE); }
// ############################################################################
//inline BOOL FSz2W(PCSTR pSz,WORD *w)
BOOL FSz2W(PCSTR pSz,WORD *w) { DWORD dw; if (FSz2Dw(pSz,&dw)) { *w = (WORD)dw; return TRUE; } return FALSE; }
// ############################################################################
//inline BOOL FSz2B(PCSTR pSz,BYTE *pb)
BOOL FSz2B(PCSTR pSz,BYTE *pb) { DWORD dw; if (FSz2Dw(pSz,&dw)) { *pb = (BYTE)dw; return TRUE; } return FALSE; }
|