Source code of Windows XP (NT5)
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
 
 
 
 
 
 

140 lines
2.3 KiB

/* ----------------------------------------------------------------------
Copyright (c) 1996, Microsoft Corporation
All rights reserved
stiderc.c
---------------------------------------------------------------------- */
#include "precomp.h"
#include "global.h"
#include "dirlist.h"
UINT gfOprahMode = 0;
VOID static _GetPsz(LPTSTR * ppsz, PTCHAR pszDest)
{
PTCHAR pch = *ppsz;
while (_T('\0') != *pch)
{
*pszDest++ = (*pch++)-1;
}
*pszDest = _T('\0');
*ppsz = pch+1;
}
PTCHAR static _NextWord(PTCHAR pch)
{
pch = (PTCHAR) _StrChr(pch, _T(','));
if (NULL != pch)
{
*pch = _T('\0');
pch++;
}
return pch;
}
HRESULT OprahDirectory(CDirListView* pdlv)
{
HRSRC hRes;
PVOID pData;
LPTSTR psz;
PTCHAR pch;
TCHAR szEmail[32];
TCHAR szCity[32];
TCHAR szCountry[128];
TCHAR rgsz[4][32];
if (NULL == (hRes = FindResource(GetInstanceHandle(), MAKEINTRESOURCE(IDC_STIDERC), "CDAT")) ||
(NULL == (psz = (LPTSTR) LockResource(LoadResource(GetInstanceHandle(), hRes))) ) )
{
return E_FAIL;
}
_GetPsz(&psz, szEmail);
_GetPsz(&psz, szCity);
_GetPsz(&psz, rgsz[0]);
_GetPsz(&psz, rgsz[1]);
_GetPsz(&psz, rgsz[2]);
_GetPsz(&psz, rgsz[3]);
for ( ; ; )
{
TCHAR szRow[MAX_PATH];
UINT bFlags;
LPTSTR pszFirst;
LPTSTR pszLast;
LPTSTR pszComments;
LPTSTR pszCity;
LPTSTR pszCountry;
_GetPsz(&psz, szRow);
if (FEmptySz(szRow))
break;
pch = szRow;
bFlags = (*pch) - _T('\0');
pch++;
pszFirst = pch;
pch = _NextWord(pch);
pszLast = pch;
pch = _NextWord(pch);
pszComments = pch;
pch++;
switch (*pch)
{
case _T(','):
pch++;
case _T('\0'):
pszComments = rgsz[*pszComments-_T('1')];
break;
default:
pch = _NextWord(pch);
break;
}
if (FEmptySz(pch))
{
pszCity = szCity;
pszCountry = TEXT("US");
}
else
{
pszCity = pch;
pszCountry = _NextWord(pch);
}
if ((_T('\0') != pszCountry[0]) &&
(_T('\0') != pszCountry[1]) &&
(_T('\0') == pszCountry[2]))
{
if (pdlv->FFindCountry(szCountry, pszCountry))
{
pszCountry = szCountry;
}
}
pdlv->Add(szEmail, pszFirst, pszLast, pszCity, pszCountry, pszComments,
(bFlags & 0x04) ? II_IN_CALL : II_NOT_IN_CALL,
(bFlags & 0x01) ? II_AUDIO_CAPABLE : 0,
(bFlags & 0x02) ? II_VIDEO_CAPABLE : 0);
}
FreeResource(hRes);
pdlv->CancelDirectory();
return E_FAIL;
}