|
|
//*********************************************************************
//* Microsoft Windows **
//* Copyright(c) Microsoft Corp., 1994 **
//*********************************************************************
#include "pre.h"
extern CHAR szTempBuffer[];
const CHAR cszLUHN[] = "LUHN"; const CHAR cszCustURL[] = "CustURL";
#define ReadVerifyW(x) if (!ReadW(&(x),pcCSVFile)) \
{ \ AssertMsg(0,"Invalid WORD in CSV file"); \ goto PAYCSVReadOneLineError; \ } #define ReadVerifyBOOL(x) if (!ReadBOOL(&(x),pcCSVFile)) \
{ \ AssertMsg(0,"Invalid BOOL in CSV file"); \ goto PAYCSVReadOneLineError; \ } #define ReadVerifySZ(x,y) if (!ReadSZ(&x[0],y+sizeof('\0'),pcCSVFile)) \
{ \ AssertMsg(0,"Invalid STRING in CSV file"); \ goto PAYCSVReadOneLineError; \ }
// Do an strip of Single Quotes from a source string. The source is formatted as:
// 'some text', and the dest string ends up being
// some text
void CPAYCSV::StripQuotes ( LPSTR lpszDst, LPSTR lpszSrc ) { //lstrcpyn(lpszDst, lpszSrc + 1, lstrlen(lpszSrc) - 1);
strcpy(lpszDst, lpszSrc + 1); lpszDst[strlen(lpszDst) - 1] = '\0'; }
// ############################################################################
BOOL CPAYCSV::ReadW(WORD far *pw, CCSVFile far *pcCSVFile) { if (!pcCSVFile->ReadToken(szTempBuffer,TEMP_BUFFER_LENGTH)) return FALSE; return (FSz2W(szTempBuffer,pw)); }
// ############################################################################
BOOL CPAYCSV::ReadBOOL(BOOL far *pbool, CCSVFile far *pcCSVFile) { if (!pcCSVFile->ReadToken(szTempBuffer,TEMP_BUFFER_LENGTH)) return FALSE; return (FSz2BOOL(szTempBuffer,pbool)); }
// ############################################################################
BOOL CPAYCSV::ReadSZ(LPSTR psz, DWORD dwSize, CCSVFile far *pcCSVFile) { if (!pcCSVFile->ReadToken(psz,dwSize)) return FALSE; return TRUE; }
// ############################################################################
BOOL CPAYCSV::ReadToEOL(CCSVFile far *pcCSVFile) { return pcCSVFile->SkipTillEOL(); }
HRESULT CPAYCSV::ReadOneLine ( CCSVFile far *pcCSVFile, BOOL bLUHNFormat ) { HRESULT hr = ERROR_SUCCESS; CHAR szTemp[MAX_ISP_NAME] = "\0"; WORD wLUHN; CHAR szDisplayName[MAX_DISPLAY_NAME] = "\0"; CHAR szCustomPayURLPath[MAX_PATH] = "\0";
if (!ReadSZ(szTemp, MAX_ISP_NAME, pcCSVFile)) { hr = ERROR_NO_MORE_ITEMS; // no more enteries
goto PAYCSVReadOneLineExit; }
if ('\0' == *szTemp) { hr = ERROR_FILE_NOT_FOUND; // no more enteries
goto PAYCSVReadOneLineExit; }
// Strip the single quotes from the isp Name
StripQuotes(szDisplayName, szTemp);
#ifdef UNICODE
MultiByteToWideChar(CP_ACP, MB_PRECOMPOSED, szDisplayName, MAX_DISPLAY_NAME, m_szDisplayName, MAX_DISPLAY_NAME); #else
lstrcpy(m_szDisplayName, szDisplayName); #endif
ReadVerifyW(m_wPaymentType); // If this NOT a LUHN format file, then the next field is the payment custom URL
if (!bLUHNFormat) { if (ReadSZ(szTemp, MAX_ISP_NAME, pcCSVFile)) { StripQuotes(szCustomPayURLPath, szTemp); #ifdef UNICODE
MultiByteToWideChar(CP_ACP, MB_PRECOMPOSED, szCustomPayURLPath, MAX_PATH, m_szCustomPayURLPath, MAX_PATH); #else
lstrcpy(m_szCustomPayURLPath, szCustomPayURLPath); #endif
} else { goto PAYCSVReadOneLineError; } } else { // BUGBUG: The format of the PAYMENT CSV file is not clear, so I am coding this for
// now to just consume the entry, and move on. Once the format is clarified, and FORBIN
// updated, then the real code can be turned on, which should just be a ReadBOOL, followed
// by the readSZ.
ReadVerifyW(wLUHN); m_bLUHNCheck = FALSE; if (wLUHN == (WORD)1) { m_bLUHNCheck = TRUE; } // There may now also be a URL
if (ReadSZ(szTemp, MAX_ISP_NAME, pcCSVFile)) { StripQuotes(szCustomPayURLPath, szTemp); #ifdef UNICODE
MultiByteToWideChar(CP_ACP, MB_PRECOMPOSED, szCustomPayURLPath, MAX_PATH, m_szCustomPayURLPath, MAX_PATH); #else
lstrcpy(m_szCustomPayURLPath, szCustomPayURLPath); #endif
} }
ReadToEOL(pcCSVFile);
PAYCSVReadOneLineExit: return hr; PAYCSVReadOneLineError: hr = ERROR_INVALID_DATA; goto PAYCSVReadOneLineExit; }
HRESULT CPAYCSV::ReadFirstLine ( CCSVFile far *pcCSVFile, BOOL far *pbLUHNFormat ) { CHAR szTemp[TEMP_BUFFER_LENGTH]; int i = 0; while (TRUE) { if (!ReadSZ(szTemp, TEMP_BUFFER_LENGTH, pcCSVFile)) return(ERROR_INVALID_DATA); if (_strcmpi(szTemp, cszLUHN) == 0) *pbLUHNFormat = TRUE;
if (_strcmpi(szTemp, cszCustURL) == 0) break; // Safety check
if (i++ > NUM_PAYCSV_FIELDS) return (ERROR_INVALID_DATA); } ReadToEOL(pcCSVFile); return (ERROR_SUCCESS); }
|