/* CFaxApiFunctionParameterInfo class implementation file. */ #include "StdAfx.h" #include "param.h" extern "C" { #include "winfax.h" } //#include "winfax.h" /* * CFaxApiFunctionParameterInfo * * Purpose: * This function constructs a CFaxApiFunctionParameterInfo object. * * Arguments: * None * * Returns: * None * */ CFaxApiFunctionParameterInfo::CFaxApiFunctionParameterInfo() { m_cpaParameterValue.RemoveAll(); m_cpaParameterRange1.RemoveAll(); m_cpaParameterRange2.RemoveAll(); m_xNumberOfParameters = 0; } /* * ~CFaxApiFunctionParameterInfo * * Purpose: * This function destroys a CFaxApiFunctionParameterInfo object. * * Arguments: * None * * Returns: * None * */ CFaxApiFunctionParameterInfo::~CFaxApiFunctionParameterInfo() { int xNumberOfElements; int xItemIndex; xNumberOfElements = m_cpaParameterValue.GetSize(); if ( xNumberOfElements > 0 ) { for ( xItemIndex = 0; xItemIndex < xNumberOfElements; xItemIndex++ ) { if ( m_cpaParameterValue[xItemIndex] != (void *) NULL ) { delete m_cpaParameterValue[xItemIndex]; } } } xNumberOfElements = m_cpaParameterRange1.GetSize(); if ( xNumberOfElements > 0 ) { for ( xItemIndex = 0; xItemIndex < xNumberOfElements; xItemIndex++ ) { if ( m_cpaParameterRange1[xItemIndex] != (void *) NULL ) { delete m_cpaParameterRange1[xItemIndex]; } } } xNumberOfElements = m_cpaParameterRange2.GetSize(); if ( xNumberOfElements > 0 ) { for ( xItemIndex = 0; xItemIndex < xNumberOfElements; xItemIndex++ ) { if ( m_cpaParameterRange2[xItemIndex] != (void *) NULL ) { delete m_cpaParameterRange2[xItemIndex]; } } } } /* * InitParameterInfoMember * * Purpose: * This function constructs a CFaxApiFunctionParameterInfo object. * * Arguments: * rcsFunctionName - a reference to a CString tha contains the * name of a Fax API function. * * Returns: * None * */ void CFaxApiFunctionParameterInfo::InitParameterInfoMember( const CString & rcsFunctionName ) { m_cpaParameterValue.RemoveAll(); m_cpaParameterRange1.RemoveAll(); m_cpaParameterRange2.RemoveAll(); /* Get the number of parameters from the initialization file. */ int xNumberOfParameters; xNumberOfParameters = (int) GetPrivateProfileInt( (LPCTSTR) rcsFunctionName, (LPCTSTR) TEXT("NumberOfParameters"), -1, // default return value (LPCTSTR) TEXT(".\\faxapi.ini") ); if ( xNumberOfParameters > 0 ) { m_xNumberOfParameters = xNumberOfParameters; /* Initialize the sizes of the CStringArray data members. */ m_csaParameterName.SetSize( m_xNumberOfParameters ); m_csaParameterDescription.SetSize( m_xNumberOfParameters ); /* Initialize the size of the CUIntArray data member. */ m_cuiaParameterTypeEnum.SetSize( m_xNumberOfParameters ); /* Initialize the sizes of the CPtrArray data members. */ m_cpaParameterValue.SetSize( m_xNumberOfParameters ); m_cpaParameterRange1.SetSize( m_xNumberOfParameters ); m_cpaParameterRange2.SetSize( m_xNumberOfParameters ); /************************************************************************/ /* Read the parameter names, types, and descriptions from the ini file. */ /************************************************************************/ CString csParameterName; CString csParameterType; CString csParameterDescription; eParamType eParameterType; CString csKeyName; int xParameterIndex; DWORD dwGPPSrv; // returned by GetPrivateProfileString TCHAR tszProfileString[MAX_PARAM_VALUE_STRING_LENGTH]; // arbitrarily set size DWORD dwErrorCode; for ( xParameterIndex = 0; xParameterIndex < xNumberOfParameters; xParameterIndex++ ) { /* Make the key for the parameter name. */ csKeyName.Format( TEXT("ParameterName%d"), xParameterIndex ); /* Read the parameter name. */ dwGPPSrv = GetPrivateProfileString( (LPCTSTR) rcsFunctionName, (LPCTSTR) csKeyName, (LPCTSTR) TEXT("NULL"), (LPTSTR) tszProfileString, (DWORD) sizeof( tszProfileString ), (LPCTSTR) TEXT(".\\faxapi.ini") ); /* Did GetPrivateProfileString return the string "NULL" ? */ if ( _wcsicmp( tszProfileString, TEXT("NULL") ) != 0 ) { /* Did GetPrivateProfileString read an entry ? */ if ( dwGPPSrv > (DWORD) 0L ) { csParameterName = (CString) tszProfileString; try { m_csaParameterName.SetAt( xParameterIndex, csParameterName ); } catch ( ... ) { dwErrorCode = GetLastError(); if ( dwErrorCode == (DWORD) NO_ERROR ) { dwErrorCode = (DWORD) ERROR_NOT_ENOUGH_MEMORY; } } } } /* Make the key for the parameter type. */ csKeyName.Format( TEXT("ParameterType%d"), xParameterIndex ); /* Read the parameter name. */ dwGPPSrv = GetPrivateProfileString( (LPCTSTR) rcsFunctionName, (LPCTSTR) csKeyName, (LPCTSTR) TEXT("NULL"), (LPTSTR) tszProfileString, (DWORD) sizeof( tszProfileString ), (LPCTSTR) TEXT(".\\faxapi.ini") ); /* Did GetPrivateProfileString return the string "NULL" ? */ if ( _wcsicmp( tszProfileString, TEXT("NULL") ) != 0 ) { /* Did GetPrivateProfileString read an entry ? */ if ( dwGPPSrv > (DWORD) 0L ) { csParameterType = (CString) tszProfileString; eParameterType = GetParameterTypeEnum( (CString &) csParameterType ); try { m_cuiaParameterTypeEnum.SetAt( xParameterIndex, (UINT) eParameterType ); } catch ( ... ) { dwErrorCode = GetLastError(); if ( dwErrorCode == (DWORD) NO_ERROR ) { dwErrorCode = (DWORD) ERROR_NOT_ENOUGH_MEMORY; } } // Terminate the for loop on error ? /* Allocate Storage for the parameter value. */ m_cpaParameterValue[xParameterIndex] = AllocateStorageForParameterEntity( eParameterType ); } } /* Make the key for the parameter description. */ csKeyName.Format( TEXT("ParameterDescr%d"), xParameterIndex ); /* Read the parameter name. */ dwGPPSrv = GetPrivateProfileString( (LPCTSTR) rcsFunctionName, (LPCTSTR) csKeyName, (LPCTSTR) TEXT("NULL"), (LPTSTR) tszProfileString, (DWORD) sizeof( tszProfileString ), (LPCTSTR) TEXT(".\\faxapi.ini") ); /* Did GetPrivateProfileString return the string "NULL" ? */ if ( _wcsicmp( tszProfileString, TEXT("NULL") ) != 0 ) { /* Did GetPrivateProfileString read an entry ? */ if ( dwGPPSrv > (DWORD) 0L ) { csParameterDescription = (CString) tszProfileString; try { m_csaParameterDescription.SetAt( xParameterIndex, csParameterDescription ); } catch ( ... ) { dwErrorCode = GetLastError(); if ( dwErrorCode == (DWORD) NO_ERROR ) { dwErrorCode = (DWORD) ERROR_NOT_ENOUGH_MEMORY; } } } } // Will need to handle the parameter range(s) later ! } // end of for loop } else { m_xNumberOfParameters = 0; } } /* * AllocateStorageForParameterEntity * * Purpose: * This function allocates (via the new operator) storage for either * a parameter value or range entity. * * Arguments: * eParameterType - indicates the type of the parameter * * Returns: * a pointer to the storage that was allocated. * */ void * CFaxApiFunctionParameterInfo::AllocateStorageForParameterEntity( eParamType eParameterType ) { void * pvParameterStorage; CString csMessage; /* As of 6/11/97, there are 22 types of parameters. */ switch ( eParameterType ) { case eBOOL: /* The parameter type is BOOL. */ pvParameterStorage = (void *) new BOOL; *((BOOL *) pvParameterStorage) = (BOOL) FALSE; break; case eDWORD: /* The parameter type is DWORD. */ pvParameterStorage = (void *) new DWORD; *((DWORD *) pvParameterStorage) = (DWORD) 0L; break; case eHANDLE: /* The parameter type is HANDLE. */ pvParameterStorage = (void *) new HANDLE; *((HANDLE *) pvParameterStorage) = (HANDLE) INVALID_HANDLE_VALUE; break; case eHDC: /* The parameter type is HDC. */ pvParameterStorage = (void *) new HDC; *((HDC *) pvParameterStorage) = (HDC) INVALID_HANDLE_VALUE; break; case ePHDC: /* The parameter type is HDC *. */ pvParameterStorage = (void *) new HDC *; *((HDC * *) pvParameterStorage) = (HDC *) NULL; break; case eLPBYTE: /* The parameter type is LPBYTE. */ pvParameterStorage = (void *) new LPBYTE; *((LPBYTE *) pvParameterStorage) = (LPBYTE) NULL; break; case ePLPBYTE: /* The parameter type is LPBYTE *. */ pvParameterStorage = (void *) new LPBYTE *; *((LPBYTE * *) pvParameterStorage) = (LPBYTE *) NULL; break; case eLPDWORD: /* The parameter type is LPDWORD. */ pvParameterStorage = (void *) new LPDWORD; *((LPDWORD *) pvParameterStorage) = (LPDWORD) NULL; break; case eLPHANDLE: /* The parameter type is LPHANDLE. */ pvParameterStorage = (void *) new LPHANDLE; *((LPHANDLE *) pvParameterStorage) = (LPHANDLE) NULL; break; case eLPSTR: /* The parameter type is LPSTR. */ pvParameterStorage = (void *) new char[MAX_PARAM_VALUE_STRING_LENGTH]; // arbitrary size ! /* Intialize it to an empty string. */ *((char *) pvParameterStorage) = (char) '\0'; break; case eLPVOID: /* The parameter type is LPVOID. */ pvParameterStorage = (void *) new LPVOID; *((LPVOID *) pvParameterStorage) = (LPVOID) NULL; break; case eLPWSTR: /* The parameter type is LPWSTR. */ pvParameterStorage = (void *) new wchar_t[MAX_PARAM_VALUE_STRING_LENGTH]; // arbitrary size /* Initialize it to an empty string. */ *((wchar_t *) pvParameterStorage) = (wchar_t) L'\0'; break; case ePFAX_CONFIGURATIONA: /* The parameter type is PFAX_CONFIGURATIONA. */ pvParameterStorage = (void *) new PFAX_CONFIGURATIONA; *((PFAX_CONFIGURATIONA *) pvParameterStorage) = (PFAX_CONFIGURATIONA) NULL; break; case ePPFAX_CONFIGURATIONA: /* The parameter type is PFAX_CONFIGURATIONA *. */ pvParameterStorage = (void *) new PFAX_CONFIGURATIONA *; *((PFAX_CONFIGURATIONA * *) pvParameterStorage) = (PFAX_CONFIGURATIONA *) NULL; break; case ePFAX_CONFIGURATIONW: /* The parameter type is PFAX_CONFIGURATIONW. */ pvParameterStorage = (void *) new PFAX_CONFIGURATIONW; *((PFAX_CONFIGURATIONW *) pvParameterStorage) = (PFAX_CONFIGURATIONW) NULL; break; case ePPFAX_CONFIGURATIONW: /* The parameter type is PFAX_CONFIGURATIONW *. */ pvParameterStorage = (void *) new PFAX_CONFIGURATIONW *; *((PFAX_CONFIGURATIONW * *) pvParameterStorage) = (PFAX_CONFIGURATIONW *) NULL; break; case ePFAX_COVERPAGE_INFOA: /* The parameter type is PFAX_COVERPAGE_INFOA. */ pvParameterStorage = (void *) new PFAX_COVERPAGE_INFOA; *((PFAX_COVERPAGE_INFOA *) pvParameterStorage) = (PFAX_COVERPAGE_INFOA) NULL; break; case ePFAX_COVERPAGE_INFOW: /* The parameter type is PFAX_COVERPAGE_INFOW. */ pvParameterStorage = (void *) new PFAX_COVERPAGE_INFOW; *((PFAX_COVERPAGE_INFOW *) pvParameterStorage) = (PFAX_COVERPAGE_INFOW) NULL; break; case ePPFAX_DEVICE_STATUSA: /* The parameter type is PFAX_DEVICE_STATUSA *. */ pvParameterStorage = (void *) new PFAX_DEVICE_STATUSA *; *((PFAX_DEVICE_STATUSA * *) pvParameterStorage) = (PFAX_DEVICE_STATUSA *) NULL; break; case ePPFAX_DEVICE_STATUSW: /* The parameter type is PFAX_DEVICE_STATUSW *. */ pvParameterStorage = (void *) new PFAX_DEVICE_STATUSW *; *((PFAX_DEVICE_STATUSW * *) pvParameterStorage) = (PFAX_DEVICE_STATUSW *) NULL; break; case ePFAX_JOB_ENTRYA: /* The parameter type is PFAX_JOB_ENTRYA. */ pvParameterStorage = (void *) new PFAX_JOB_ENTRYA; *((PFAX_JOB_ENTRYA *) pvParameterStorage) = (PFAX_JOB_ENTRYA) NULL; break; case ePPFAX_JOB_ENTRYA: /* The parameter type is PFAX_JOB_ENTRYA *. */ pvParameterStorage = (void *) new PFAX_JOB_ENTRYA *; *((PFAX_JOB_ENTRYA * *) pvParameterStorage) = (PFAX_JOB_ENTRYA *) NULL; break; case ePFAX_JOB_ENTRYW: /* The parameter type is PFAX_JOB_ENTRYW. */ pvParameterStorage = (void *) new PFAX_JOB_ENTRYW; *((PFAX_JOB_ENTRYW *) pvParameterStorage) = (PFAX_JOB_ENTRYW) NULL; break; case ePPFAX_JOB_ENTRYW: /* The parameter type is PFAX_JOB_ENTRYW *. */ pvParameterStorage = (void *) new PFAX_JOB_ENTRYW *; *((PFAX_JOB_ENTRYW * *) pvParameterStorage) = (PFAX_JOB_ENTRYW *) NULL; break; case ePFAX_JOB_PARAMA: /* The parameter type is PFAX_JOB_PARAMA. */ pvParameterStorage = (void *) new PFAX_JOB_PARAMA; *((PFAX_JOB_PARAMA *) pvParameterStorage) = (PFAX_JOB_PARAMA) NULL; break; case ePFAX_JOB_PARAMW: /* The parameter type is PFAX_JOB_PARAMW. */ pvParameterStorage = (void *) new PFAX_JOB_PARAMW; *((PFAX_JOB_PARAMW *) pvParameterStorage) = (PFAX_JOB_PARAMW) NULL; break; case ePFAX_LOG_CATEGORY: /* The parameter type is PFAX_LOG_CATEGORY. */ pvParameterStorage = (void *) new PFAX_LOG_CATEGORY; *((PFAX_LOG_CATEGORY *) pvParameterStorage) = (PFAX_LOG_CATEGORY) NULL; break; case ePPFAX_LOG_CATEGORY: /* The parameter type is PFAX_LOG_CATEGORY *. */ pvParameterStorage = (void *) new PFAX_LOG_CATEGORY *; *((PFAX_LOG_CATEGORY * *) pvParameterStorage) = (PFAX_LOG_CATEGORY *) NULL; break; case ePFAX_PORT_INFOA: /* The parameter type is PFAX_PORT_INFOA. */ pvParameterStorage = (void *) new PFAX_PORT_INFOA; *((PFAX_PORT_INFOA *) pvParameterStorage) = (PFAX_PORT_INFOA) NULL; break; case ePPFAX_PORT_INFOA: /* The parameter type is PFAX_PORT_INFOA *. */ pvParameterStorage = (void *) new PFAX_PORT_INFOA *; *((PFAX_PORT_INFOA * *) pvParameterStorage) = (PFAX_PORT_INFOA *) NULL; break; case ePFAX_PORT_INFOW: /* The parameter type is PFAX_PORT_INFOW. */ pvParameterStorage = (void *) new PFAX_PORT_INFOW; *((PFAX_PORT_INFOW *) pvParameterStorage) = (PFAX_PORT_INFOW) NULL; break; case ePPFAX_PORT_INFOW: /* The parameter type is PFAX_PORT_INFOW *. */ pvParameterStorage = (void *) new PFAX_PORT_INFOW *; *((PFAX_PORT_INFOW * *) pvParameterStorage) = (PFAX_PORT_INFOW *) NULL; break; case ePFAX_PRINT_INFOA: /* The parameter type is PFAX_PRINT_INFOA. */ pvParameterStorage = (void *) new PFAX_PRINT_INFOA; *((PFAX_PRINT_INFOA *) pvParameterStorage) = (PFAX_PRINT_INFOA) NULL; break; case ePFAX_PRINT_INFOW: /* The parameter type is PFAX_PRINT_INFOW. */ pvParameterStorage = (void *) new PFAX_PRINT_INFOW; *((PFAX_PRINT_INFOW *) pvParameterStorage) = (PFAX_PRINT_INFOW) NULL; break; case ePPFAX_ROUTING_METHODA: /* The parameter type is PFAX_ROUTING_METHODA *. */ pvParameterStorage = (void *) new PFAX_ROUTING_METHODA *; *((PFAX_ROUTING_METHODA * *) pvParameterStorage) = (PFAX_ROUTING_METHODA *) NULL; break; case ePPFAX_ROUTING_METHODW: /* The parameter type is PFAX_ROUTING_METHODW *. */ pvParameterStorage = (void *) new PFAX_ROUTING_METHODW *; *((PFAX_ROUTING_METHODW * *) pvParameterStorage) = (PFAX_ROUTING_METHODW *) NULL; break; default: /* The parameter type was not one of the cases above. */ csMessage.Format( TEXT("Unrecognized type in AllocateStorageForParameterEntity") ); AfxMessageBox( csMessage ); pvParameterStorage = (void *) NULL; } return ( pvParameterStorage ); } /* * GetNumberOfParameters * * Purpose: * This function retrieves the m_xNumberOfParameters member of the * CFaxApiFunctionParameterInfo object. * * Arguments: * None * * Returns: * The number of parameters * */ int CFaxApiFunctionParameterInfo::GetNumberOfParameters() { return ( m_xNumberOfParameters ); } /* * GetParameterName * * Purpose: * This function retrieves the Name of a parameter from the * CFaxApiFunctionParameterInfo object. * * Arguments: * xParameterIndex - the index to the parameter * * Returns: * A CString that contains the parameter name. * */ CString CFaxApiFunctionParameterInfo::GetParameterName( int xParameterIndex ) { return ( (CString) m_csaParameterName.GetAt( xParameterIndex ) ); } /* * GetParameterValuePointer * * Purpose: * This function retrieves the pointer to the storage for the * parameter value. * * Arguments: * xParameterIndex = the index into the CPtrArray object to the * element that points to the parameter value. * * Returns: * a pointer to the storage for the parameter value. * */ void * CFaxApiFunctionParameterInfo::GetParameterValuePointer( int xParameterIndex ) { void * pvParameterValue; pvParameterValue = m_cpaParameterValue[xParameterIndex]; return ( pvParameterValue ); } /* * FormatParameterValueForOutput * * Purpose: * This function prepares a CString representation of the parameter * value whose index is xParameterIndex. * * Arguments: * xParameterIndex = the index to the parameter value to be output. * rcsParameterValue - a reference to the CString to receive the string * representation of the parameter value. * * Returns: * None * */ void CFaxApiFunctionParameterInfo::FormatParameterValueForOutput( int xParameterIndex, CString & rcsParameterValue ) { /* Get the parameter type. */ eParamType eParameterType; eParameterType = GetParameterTypeEnum( xParameterIndex ); /* Get a pointer to the storage for the parameter. */ void * pvParameterValue; pvParameterValue = GetParameterValuePointer( xParameterIndex ); /* As of 6/11/97, there are 22 types of parameters. */ switch ( eParameterType ) { case eBOOL: { /* The parameter type is BOOL. */ if ( (BOOL) *((BOOL *) pvParameterValue) == (BOOL) FALSE ) { rcsParameterValue = (CString) TEXT("FALSE"); } else { rcsParameterValue = (CString) TEXT("TRUE"); } } break; case eDWORD: { /* The parameter type is DWORD. */ rcsParameterValue.Format( TEXT("0x%x"), (DWORD) *((DWORD *) pvParameterValue) ); } break; case eHANDLE: { /* The parameter type is HANDLE. */ rcsParameterValue.Format( TEXT("0x%x"), (HANDLE) *((HANDLE *) pvParameterValue) ); } break; case eHDC: { /* The parameter type is HDC. */ rcsParameterValue.Format( TEXT("0x%x"), (HDC) *((HDC *) pvParameterValue) ); } break; case ePHDC: { /* The parameter type is HDC *. */ rcsParameterValue.Format( TEXT("0x%x"), (HDC *) *((HDC * *) pvParameterValue) ); } break; case eLPBYTE: { /* The parameter type is LPBYTE. */ rcsParameterValue.Format( TEXT("0x%x"), (LPBYTE) *((LPBYTE) pvParameterValue) ); } break; case ePLPBYTE: { /* The parameter type is LPBYTE *. */ rcsParameterValue.Format( TEXT("0x%x"), (LPBYTE *) *((LPBYTE * *) pvParameterValue) ); } break; case eLPDWORD: { /* The parameter type is LPDWORD. */ rcsParameterValue.Format( TEXT("0x%x"), (LPDWORD) *((LPDWORD *) pvParameterValue) ); } break; case eLPHANDLE: { /* The parameter type is LPHANDLE. */ rcsParameterValue.Format( TEXT("0x%x"), (LPHANDLE) *((LPHANDLE *) pvParameterValue) ); } break; case eLPSTR: { /* The parameter type is LPSTR. */ LPSTR pszParameterValue; pszParameterValue = (LPSTR) pvParameterValue; /* Convert the ANSI string to UNICODE. */ size_t t_AnsiStringLength; t_AnsiStringLength = strlen( pszParameterValue ); LPWSTR pwszParameterValue; pwszParameterValue = new wchar_t[t_AnsiStringLength+1]; // reserve space for the terminator if ( pwszParameterValue != (LPWSTR) NULL ) { int xNumberOfCharsConverted; xNumberOfCharsConverted = mbstowcs( pwszParameterValue, pszParameterValue, t_AnsiStringLength ); /* Terminate the wide character string. */ pwszParameterValue[xNumberOfCharsConverted] = (wchar_t) L'\0'; rcsParameterValue.Format( TEXT("%s"), (LPTSTR) pwszParameterValue ); delete pwszParameterValue; } } break; case eLPVOID: { /* The parameter type is LPVOID. */ rcsParameterValue.Format( TEXT("0x%x"), (LPVOID) *((LPVOID *) pvParameterValue) ); } break; case eLPWSTR: { /* The parameter type is LPWSTR. */ rcsParameterValue.Format( TEXT("%s"), (LPTSTR) (LPWSTR) pvParameterValue ); } break; case ePFAX_CONFIGURATIONA: { /* The parameter type is PFAX_CONFIGURATIONA. */ rcsParameterValue.Format( TEXT("0x%x"), (PFAX_CONFIGURATIONA) *((PFAX_CONFIGURATIONA *) pvParameterValue) ); } break; case ePPFAX_CONFIGURATIONA: { /* The parameter type is PFAX_CONFIGURATIONA *. */ rcsParameterValue.Format( TEXT("0x%x"), (PFAX_CONFIGURATIONA *) *((PFAX_CONFIGURATIONA * *) pvParameterValue) ); } break; case ePFAX_CONFIGURATIONW: { /* The parameter type is PFAX_CONFIGURATIONW. */ rcsParameterValue.Format( TEXT("0x%x"), (PFAX_CONFIGURATIONW) *((PFAX_CONFIGURATIONW *) pvParameterValue) ); } break; case ePPFAX_CONFIGURATIONW: { /* The parameter type is PFAX_CONFIGURATIONW *. */ rcsParameterValue.Format( TEXT("0x%x"), (PFAX_CONFIGURATIONW *) *((PFAX_CONFIGURATIONW * *) pvParameterValue) ); } break; case ePFAX_COVERPAGE_INFOA: { /* The parameter type is PFAX_COVERPAGE_INFOA. */ rcsParameterValue.Format( TEXT("0x%x"), (PFAX_COVERPAGE_INFOA) *((PFAX_COVERPAGE_INFOA *) pvParameterValue) ); } break; case ePFAX_COVERPAGE_INFOW: { /* The parameter type is PFAX_COVERPAGE_INFOW. */ rcsParameterValue.Format( TEXT("0x%x"), (PFAX_COVERPAGE_INFOW) *((PFAX_COVERPAGE_INFOW *) pvParameterValue) ); } break; case ePPFAX_DEVICE_STATUSA: { /* The parameter type is PFAX_DEVICE_STATUSA *. */ rcsParameterValue.Format( TEXT("0x%x"), (PFAX_DEVICE_STATUSA *) *((PFAX_DEVICE_STATUSA * *) pvParameterValue) ); } break; case ePPFAX_DEVICE_STATUSW: { /* The parameter type is PFAX_DEVICE_STATUSW *. */ rcsParameterValue.Format( TEXT("0x%x"), (PFAX_DEVICE_STATUSW *) *((PFAX_DEVICE_STATUSW * *) pvParameterValue) ); } break; case ePFAX_JOB_ENTRYA: { /* The parameter type is PFAX_JOB_ENTRYA. */ rcsParameterValue.Format( TEXT("0x%x"), (PFAX_JOB_ENTRYA) *((PFAX_JOB_ENTRYA *) pvParameterValue) ); } break; case ePPFAX_JOB_ENTRYA: { /* The parameter type is PFAX_JOB_ENTRYA *. */ rcsParameterValue.Format( TEXT("0x%x"), (PFAX_JOB_ENTRYA *) *((PFAX_JOB_ENTRYA * *) pvParameterValue) ); } break; case ePFAX_JOB_ENTRYW: { /* The parameter type is PFAX_JOB_ENTRYW. */ rcsParameterValue.Format( TEXT("0x%x"), (PFAX_JOB_ENTRYW) *((PFAX_JOB_ENTRYW *) pvParameterValue) ); } break; case ePPFAX_JOB_ENTRYW: { /* The parameter type is PFAX_JOB_ENTRYW *. */ rcsParameterValue.Format( TEXT("0x%x"), (PFAX_JOB_ENTRYW *) *((PFAX_JOB_ENTRYW * *) pvParameterValue) ); } break; case ePFAX_JOB_PARAMA: { /* The parameter type is PFAX_JOB_PARAMA. */ rcsParameterValue.Format( TEXT("0x%x"), (PFAX_JOB_PARAMA) *((PFAX_JOB_PARAMA *) pvParameterValue) ); } break; case ePFAX_JOB_PARAMW: { /* The parameter type is PFAX_JOB_PARAMW. */ rcsParameterValue.Format( TEXT("0x%x"), (PFAX_JOB_PARAMW) *((PFAX_JOB_PARAMW *) pvParameterValue) ); } break; case ePFAX_LOG_CATEGORY: { /* The parameter type is PFAX_LOG_CATEGORY. */ rcsParameterValue.Format( TEXT("0x%x"), (PFAX_LOG_CATEGORY) *((PFAX_LOG_CATEGORY *) pvParameterValue) ); } break; case ePPFAX_LOG_CATEGORY: { /* The parameter type is PFAX_LOG_CATEGORY *. */ rcsParameterValue.Format( TEXT("0x%x"), (PFAX_LOG_CATEGORY *) *((PFAX_LOG_CATEGORY * *) pvParameterValue) ); } break; case ePFAX_PORT_INFOA: { /* The parameter type is PFAX_PORT_INFOA. */ rcsParameterValue.Format( TEXT("0x%x"), (PFAX_PORT_INFOA) *((PFAX_PORT_INFOA *) pvParameterValue) ); } break; case ePPFAX_PORT_INFOA: { /* The parameter type is PFAX_PORT_INFOA *. */ rcsParameterValue.Format( TEXT("0x%x"), (PFAX_PORT_INFOA *) *((PFAX_PORT_INFOA * *) pvParameterValue) ); } break; case ePFAX_PORT_INFOW: { /* The parameter type is PFAX_PORT_INFOW. */ rcsParameterValue.Format( TEXT("0x%x"), (PFAX_PORT_INFOW) *((PFAX_PORT_INFOW *) pvParameterValue) ); } break; case ePPFAX_PORT_INFOW: { /* The parameter type is PFAX_PORT_INFOW *. */ rcsParameterValue.Format( TEXT("0x%x"), (PFAX_PORT_INFOW *) *((PFAX_PORT_INFOW * *) pvParameterValue) ); } break; case ePFAX_PRINT_INFOA: { /* The parameter type is PFAX_PRINT_INFOA. */ rcsParameterValue.Format( TEXT("0x%x"), (PFAX_PRINT_INFOA) *((PFAX_PRINT_INFOA *) pvParameterValue) ); } break; case ePFAX_PRINT_INFOW: { /* The parameter type is PFAX_PRINT_INFOW. */ rcsParameterValue.Format( TEXT("0x%x"), (PFAX_PRINT_INFOW) *((PFAX_PRINT_INFOW *) pvParameterValue) ); } break; case ePPFAX_ROUTING_METHODA: { /* The parameter type is PFAX_ROUTING_METHODA *. */ rcsParameterValue.Format( TEXT("0x%x"), (PFAX_ROUTING_METHODA *) *((PFAX_ROUTING_METHODA * *) pvParameterValue) ); } break; case ePPFAX_ROUTING_METHODW: { /* The parameter type is PFAX_ROUTING_METHODW *. */ rcsParameterValue.Format( TEXT("0x%x"), (PFAX_ROUTING_METHODW *) *((PFAX_ROUTING_METHODW * *) pvParameterValue) ); } break; default: { /* The parameter type was not one of the cases above. */ CString csMessage; csMessage.Format( TEXT("Unrecognized type in FormatParameterValueForOutput") ); AfxMessageBox( csMessage ); rcsParameterValue.Empty(); } } } /* * GetParameterTypeString * * Purpose: * This function retrieves the parameter type for the parameter whose * index is xParameterIndex. * * Arguments: * xParameterIndex = the index into the CPtrArray to the pointer * to the CFaxApiFunctionParameterInfo object. * * Returns: * A CString that contains the parameter type. * */ CString CFaxApiFunctionParameterInfo::GetParameterTypeString( int xParameterIndex ) { CString csParameterType; eParamType eParameterType; eParameterType = (eParamType) m_cuiaParameterTypeEnum.GetAt( xParameterIndex ); switch ( eParameterType ) { case eBOOL: /* The parameter type is BOOL. */ csParameterType = (CString) TEXT("BOOL"); break; case eDWORD: /* The parameter type is DWORD. */ csParameterType = (CString) TEXT("DWORD"); break; case eHANDLE: /* The parameter type is HANDLE. */ csParameterType = (CString) TEXT("HANDLE"); break; case eHDC: /* The parameter type is HDC. */ csParameterType = (CString) TEXT("HDC"); break; case ePHDC: /* The parameter type is HDC *. */ csParameterType = (CString) TEXT("HDC *"); break; case eLPBYTE: /* The parameter type is LPBYTE. */ csParameterType = (CString) TEXT("LPBYTE"); break; case ePLPBYTE: /* The parameter type is LPBYTE *. */ csParameterType = (CString) TEXT("LPBYTE *"); break; case eLPDWORD: /* The parameter type is LPDWORD. */ csParameterType = (CString) TEXT("LPDWORD"); break; case eLPHANDLE: /* The parameter type is LPHANDLE. */ csParameterType = (CString) TEXT("LPHANDLE"); break; case eLPSTR: /* The parameter type is LPSTR. */ csParameterType = (CString) TEXT("LPSTR"); break; case eLPVOID: /* The parameter type is LPVOID. */ csParameterType = (CString) TEXT("LPVOID"); break; case eLPWSTR: /* The parameter type is LPWSTR. */ csParameterType = (CString) TEXT("LPWSTR"); break; case ePFAX_CONFIGURATIONA: /* The parameter type is PFAX_CONFIGURATIONA. */ csParameterType = (CString) TEXT("PFAX_CONFIGURATIONA"); break; case ePPFAX_CONFIGURATIONA: /* The parameter type is PFAX_CONFIGURATIONA *. */ csParameterType = (CString) TEXT("PFAX_CONFIGURATIONA *"); break; case ePFAX_CONFIGURATIONW: /* The parameter type is PFAX_CONFIGURATIONW. */ csParameterType = (CString) TEXT("PFAX_CONFIGURATIONW"); break; case ePPFAX_CONFIGURATIONW: /* The parameter type is PFAX_CONFIGURATIONW *. */ csParameterType = (CString) TEXT("PFAX_CONFIGURATIONW *"); break; case ePFAX_COVERPAGE_INFOA: /* The parameter type is PFAX_COVERPAGE_INFOA. */ csParameterType = (CString) TEXT("PFAX_COVERPAGE_INFOA"); break; case ePFAX_COVERPAGE_INFOW: /* The parameter type is PFAX_COVERPAGE_INFOW. */ csParameterType = (CString) TEXT("PFAX_COVERPAGE_INFOW"); break; case ePPFAX_DEVICE_STATUSA: /* The parameter type is PFAX_DEVICE_STATUSA *. */ csParameterType = (CString) TEXT("PFAX_DEVICE_STATUSA *"); break; case ePPFAX_DEVICE_STATUSW: /* The parameter type is PFAX_DEVICE_STATUSW *. */ csParameterType = (CString) TEXT("PFAX_DEVICE_STATUSW *"); break; case ePFAX_JOB_ENTRYA: /* The parameter type is PFAX_JOB_ENTRYA. */ csParameterType = (CString) TEXT("PFAX_JOB_ENTRYA"); break; case ePPFAX_JOB_ENTRYA: /* The parameter type is PFAX_JOB_ENTRYA *. */ csParameterType = (CString) TEXT("PFAX_JOB_ENTRYA *"); break; case ePFAX_JOB_ENTRYW: /* The parameter type is PFAX_JOB_ENTRYW. */ csParameterType = (CString) TEXT("PFAX_JOB_ENTRYW"); break; case ePPFAX_JOB_ENTRYW: /* The parameter type is PFAX_JOB_ENTRYW *. */ csParameterType = (CString) TEXT("PFAX_JOB_ENTRYW *"); break; case ePFAX_JOB_PARAMA: /* The parameter type is PFAX_JOB_PARAMA. */ csParameterType = (CString) TEXT("PFAX_JOB_PARAMA"); break; case ePFAX_JOB_PARAMW: /* The parameter type is PFAX_JOB_PARAMW. */ csParameterType = (CString) TEXT("PFAX_JOB_PARAMW"); break; case ePFAX_PORT_INFOA: /* The parameter type is PFAX_PORT_INFOA. */ csParameterType = (CString) TEXT("PFAX_PORT_INFOA"); break; case ePPFAX_PORT_INFOA: /* The parameter type is PFAX_PORT_INFOA *. */ csParameterType = (CString) TEXT("PFAX_PORT_INFOA *"); break; case ePFAX_PORT_INFOW: /* The parameter type is PFAX_PORT_INFOW. */ csParameterType = (CString) TEXT("PFAX_PORT_INFOW"); break; case ePPFAX_PORT_INFOW: /* The parameter type is PFAX_PORT_INFOW *. */ csParameterType = (CString) TEXT("PFAX_PORT_INFOW *"); break; case ePFAX_PRINT_INFOA: /* The parameter type is PFAX_PRINT_INFOA. */ csParameterType = (CString) TEXT("PFAX_PRINT_INFOA"); break; case ePFAX_PRINT_INFOW: /* The parameter type is PFAX_PRINT_INFOW. */ csParameterType = (CString) TEXT("PFAX_PRINT_INFOW"); break; case ePPFAX_ROUTING_METHODA: /* The parameter type is PFAX_ROUTING_METHODA *. */ csParameterType = (CString) TEXT("PFAX_ROUTING_METHODA *"); break; case ePPFAX_ROUTING_METHODW: /* The parameter type is PFAX_ROUTING_METHODW *. */ csParameterType = (CString) TEXT("PFAX_ROUTING_METHODW *"); break; default: csParameterType.Empty(); break; } return ( csParameterType ); } /* * GetParameterTypeEnum * * Purpose: * This function returns the eParamType value thet represents the * data type of the parameter whose index is xParameterIndex. * * Arguments: * xParameterIndex = the index into the CPtrArray to the pointer * to the CFaxApiFunctionParameterInfo object. * * Returns: * The eParamType value that represents the data type of the parameter. * * Note: * GetParameterTypeEnum is overloaded to accept either a integer or * a reference to a CString as a parameter. * */ eParamType CFaxApiFunctionParameterInfo::GetParameterTypeEnum( int xParameterIndex ) { return ( (eParamType) m_cuiaParameterTypeEnum.GetAt( xParameterIndex ) ); } /* * GetParameterTypeEnum * * Purpose: * This function returns the eParamType value that represents the * data type specified in rcsParameterType. * * Arguments: * rcsParameterType - a reference to a CString that contains the data * type of the parameter. * * Returns: * The eParamType value that represents the data type of the parameter. * * Note: * GetParameterTypeEnum is overloaded to accept either a integer or * a reference to a CString as a parameter. * * As much as I hate to use a "goto" statement in a structured language * in this case I feel it is justified in order to avoid executing the * comparisons that will fail. * */ eParamType CFaxApiFunctionParameterInfo::GetParameterTypeEnum( const CString & rcsParameterType ) { eParamType eReturnValue; /* As of 6/11/97, there are 22 types of parameters. */ /* Note: a "switch" statement cannot be used here because rcsParameterType */ /* is not an integral type and is an illegal switch expression. */ if ( rcsParameterType.Compare( TEXT("BOOL") ) == 0 ) { /* Note: "BOOL" is typedefed, in windef.h, as type int. It is not the */ /* the same as the native data type "bool". */ eReturnValue = eBOOL; goto ExitGetParameterTypeEnum; } if ( rcsParameterType.Compare( TEXT("DWORD") ) == 0 ) { eReturnValue = eDWORD; goto ExitGetParameterTypeEnum; } if ( rcsParameterType.Compare( TEXT("HANDLE") ) == 0 ) { eReturnValue = eHANDLE; goto ExitGetParameterTypeEnum; } if ( rcsParameterType.Compare( TEXT("HDC") ) == 0 ) { eReturnValue = eHDC; goto ExitGetParameterTypeEnum; } if ( rcsParameterType.Compare( TEXT("HDC *") ) == 0 ) { eReturnValue = ePHDC; goto ExitGetParameterTypeEnum; } if ( rcsParameterType.Compare( TEXT("LPBYTE") ) == 0 ) { eReturnValue = eLPBYTE; goto ExitGetParameterTypeEnum; } if ( rcsParameterType.Compare( TEXT("LPBYTE *") ) == 0 ) { eReturnValue = ePLPBYTE; goto ExitGetParameterTypeEnum; } if ( rcsParameterType.Compare( TEXT("LPDWORD") ) == 0 ) { eReturnValue = eLPDWORD; goto ExitGetParameterTypeEnum; } if ( rcsParameterType.Compare( TEXT("LPHANDLE") ) == 0 ) { eReturnValue = eLPHANDLE; goto ExitGetParameterTypeEnum; } if ( rcsParameterType.Compare( TEXT("LPSTR") ) == 0 ) { eReturnValue = eLPSTR; goto ExitGetParameterTypeEnum; } if ( rcsParameterType.Compare( TEXT("LPVOID") ) == 0 ) { eReturnValue = eLPVOID; goto ExitGetParameterTypeEnum; } if ( rcsParameterType.Compare( TEXT("LPWSTR") ) == 0 ) { eReturnValue = eLPWSTR; goto ExitGetParameterTypeEnum; } if ( rcsParameterType.Compare( TEXT("PFAX_CONFIGURATIONA") ) == 0 ) { eReturnValue = ePFAX_CONFIGURATIONA; goto ExitGetParameterTypeEnum; } if ( rcsParameterType.Compare( TEXT("PFAX_CONFIGURATIONA *") ) == 0 ) { eReturnValue = ePPFAX_CONFIGURATIONA; goto ExitGetParameterTypeEnum; } if ( rcsParameterType.Compare( TEXT("PFAX_CONFIGURATIONW") ) == 0 ) { eReturnValue = ePFAX_CONFIGURATIONW; goto ExitGetParameterTypeEnum; } if ( rcsParameterType.Compare( TEXT("PFAX_CONFIGURATIONW *") ) == 0 ) { eReturnValue = ePPFAX_CONFIGURATIONW; goto ExitGetParameterTypeEnum; } if ( rcsParameterType.Compare( TEXT("PFAX_COVERPAGE_INFOA") ) == 0 ) { eReturnValue = ePFAX_COVERPAGE_INFOA; goto ExitGetParameterTypeEnum; } if ( rcsParameterType.Compare( TEXT("PFAX_COVERPAGE_INFOW") ) == 0 ) { eReturnValue = ePFAX_COVERPAGE_INFOW; goto ExitGetParameterTypeEnum; } if ( rcsParameterType.Compare( TEXT("PFAX_DEVICE_STATUSA *") ) == 0 ) { eReturnValue = ePPFAX_DEVICE_STATUSA; goto ExitGetParameterTypeEnum; } if ( rcsParameterType.Compare( TEXT("PFAX_DEVICE_STATUSW *") ) == 0 ) { eReturnValue = ePPFAX_DEVICE_STATUSW; goto ExitGetParameterTypeEnum; } if ( rcsParameterType.Compare( TEXT("PFAX_JOB_ENTRYA") ) == 0 ) { eReturnValue = ePFAX_JOB_ENTRYA; goto ExitGetParameterTypeEnum; } if ( rcsParameterType.Compare( TEXT("PFAX_JOB_ENTRYA *") ) == 0 ) { eReturnValue = ePPFAX_JOB_ENTRYA; goto ExitGetParameterTypeEnum; } if ( rcsParameterType.Compare( TEXT("PFAX_JOB_ENTRYW") ) == 0 ) { eReturnValue = ePFAX_JOB_ENTRYW; goto ExitGetParameterTypeEnum; } if ( rcsParameterType.Compare( TEXT("PFAX_JOB_ENTRYW *") ) == 0 ) { eReturnValue = ePPFAX_JOB_ENTRYW; goto ExitGetParameterTypeEnum; } if ( rcsParameterType.Compare( TEXT("PFAX_JOB_PARAMA") ) == 0 ) { eReturnValue = ePFAX_JOB_PARAMA; goto ExitGetParameterTypeEnum; } if ( rcsParameterType.Compare( TEXT("PFAX_JOB_PARAMW") ) == 0 ) { eReturnValue = ePFAX_JOB_PARAMW; goto ExitGetParameterTypeEnum; } if ( rcsParameterType.Compare( TEXT("PFAX_LOG_CATEGORY") ) == 0 ) { eReturnValue = ePFAX_LOG_CATEGORY; goto ExitGetParameterTypeEnum; } if ( rcsParameterType.Compare( TEXT("PFAX_LOG_CATEGORY *") ) == 0 ) { eReturnValue = ePPFAX_LOG_CATEGORY; goto ExitGetParameterTypeEnum; } if ( rcsParameterType.Compare( TEXT("PFAX_PORT_INFOA") ) == 0 ) { eReturnValue = ePFAX_PORT_INFOA; goto ExitGetParameterTypeEnum; } if ( rcsParameterType.Compare( TEXT("PFAX_PORT_INFOA *") ) == 0 ) { eReturnValue = ePPFAX_PORT_INFOA; goto ExitGetParameterTypeEnum; } if ( rcsParameterType.Compare( TEXT("PFAX_PORT_INFOW") ) == 0 ) { eReturnValue = ePFAX_PORT_INFOW; goto ExitGetParameterTypeEnum; } if ( rcsParameterType.Compare( TEXT("PFAX_PORT_INFOW *") ) == 0 ) { eReturnValue = ePPFAX_PORT_INFOW; goto ExitGetParameterTypeEnum; } if ( rcsParameterType.Compare( TEXT("PFAX_PRINT_INFOA") ) == 0 ) { eReturnValue = ePFAX_PRINT_INFOA; goto ExitGetParameterTypeEnum; } if ( rcsParameterType.Compare( TEXT("PFAX_PRINT_INFOW") ) == 0 ) { eReturnValue = ePFAX_PRINT_INFOW; goto ExitGetParameterTypeEnum; } if ( rcsParameterType.Compare( TEXT("PFAX_ROUTING_METHODA *") ) == 0 ) { eReturnValue = ePPFAX_ROUTING_METHODA; goto ExitGetParameterTypeEnum; } if ( rcsParameterType.Compare( TEXT("PFAX_ROUTING_METHODW *") ) == 0 ) { eReturnValue = ePPFAX_ROUTING_METHODW; goto ExitGetParameterTypeEnum; } else { eReturnValue = eUnknownParamType; // the parameter type wasn't // in the list above ! } ExitGetParameterTypeEnum: return ( eReturnValue ); } /* * GetParameterDescription * * Purpose: * This function retrieves the description for a parameter to a * Fax API function. * * Arguments: * xParameterIndex = the index into the CPtrArray to the pointer * to the CFaxApiFunctionParameterInfo object. * * Returns: * A CString that contains the description of the parameter. * */ CString CFaxApiFunctionParameterInfo::GetParameterDescription( int xParameterIndex ) { return ( m_csaParameterDescription.GetAt( xParameterIndex ) ); } /* * StoreParameterValue * * Purpose: * This function stores the value contained in a CSting in the storage * location for the parameter value indexed by xParameterIndex. * * Arguments: * xParameterIndex - the index to the pointer to the storage for a * parameer value. * rcsParameterValue - a reference to a CString that contains a * representation of the value to be stored. * * Returns: * TRUE - indicates success * FALSE - indicates failure * */ BOOL CFaxApiFunctionParameterInfo::StoreParameterValue( int xParameterIndex, CString & rcsParameterValue ) { BOOL fReturnValue = (BOOL) TRUE; CString csParameterValue; /* Get the parameter type. */ eParamType eParameterType; eParameterType = GetParameterTypeEnum( xParameterIndex ); if ( (eParameterType != eLPSTR) && (eParameterType != eLPWSTR) ) { /* rcsParameterValue may begin with "0x", "0X", "x" or "X". */ /* The first two will be scanned properly, but the second */ /* two will not. The following code segment eliminates the */ /* second two prefixes if they exist. */ csParameterValue = PreProcessParameterValueString( (const CString &) rcsParameterValue ); } else { csParameterValue = rcsParameterValue; } /* Get a pointer to the string representation of the parameter value. */ LPTSTR ptszParameterValue; ptszParameterValue = (LPTSTR) csParameterValue.GetBuffer( MAX_PARAM_VALUE_STRING_LENGTH ); // arbitrary size /* Get a pointer to the storage for the parameter. */ void * pvParameterValue; pvParameterValue = GetParameterValuePointer( xParameterIndex ); /* As of 6/11/97, there are 22 types of parameters. */ switch ( eParameterType ) { case eBOOL: { /* The parameter type is BOOL. */ BOOL fParameterValue = (BOOL) FALSE; // set default value if ( csParameterValue.CompareNoCase( TEXT("FALSE") ) == 0 ) { *((BOOL *) pvParameterValue) = (BOOL) FALSE; } else { if ( csParameterValue.CompareNoCase( TEXT("TRUE") ) == 0 ) { *((BOOL *) pvParameterValue) = (BOOL) TRUE; } else { swscanf( (const wchar_t *) ptszParameterValue, (const wchar_t *) TEXT("%x"), &fParameterValue ); *((BOOL *) pvParameterValue) = fParameterValue; } } } break; case eDWORD: { /* The parameter type is DWORD. */ DWORD dwParameterValue = (DWORD) 0L; // set default value swscanf( (const wchar_t *) ptszParameterValue, (const wchar_t *) TEXT("%x"), &dwParameterValue ); *((DWORD *) pvParameterValue) = (DWORD) dwParameterValue; } break; case eHANDLE: { /* The parameter type is HANDLE. */ HANDLE hParameterValue = (HANDLE) INVALID_HANDLE_VALUE; swscanf( (const wchar_t *) ptszParameterValue, (const wchar_t *) TEXT("%x"), &hParameterValue ); *((HANDLE *) pvParameterValue) = hParameterValue; } break; case eHDC: { /* The parameter type is HDC. */ HDC hdcParameterValue = (HDC) INVALID_HANDLE_VALUE; swscanf( (const wchar_t *) ptszParameterValue, (const wchar_t *) TEXT("%x"), &hdcParameterValue ); *((HDC *) pvParameterValue) = hdcParameterValue; } break; case ePHDC: { /* The parameter type is HDC *. */ HDC * phdcParameterValue = (HDC *) NULL; swscanf( (const wchar_t *) ptszParameterValue, (const wchar_t *) TEXT("%x"), &phdcParameterValue ); *((HDC * *) pvParameterValue) = phdcParameterValue; } break; case eLPBYTE: { /* The parameter type is LPBYTE. */ LPBYTE pbParameterValue = (LPBYTE) NULL; swscanf( (const wchar_t *) ptszParameterValue, (const wchar_t *) TEXT("%x"), &pbParameterValue ); *((LPBYTE *) pvParameterValue) = pbParameterValue; } break; case ePLPBYTE: { /* The parameter type is LPBYTE *. */ LPBYTE * ppbParameterValue = (LPBYTE *) NULL; swscanf( (const wchar_t *) ptszParameterValue, (const wchar_t *) TEXT("%x"), &ppbParameterValue ); *((LPBYTE * *) pvParameterValue) = ppbParameterValue; } break; case eLPDWORD: { /* The parameter type is LPDWORD. */ LPDWORD pdwParameterValue = (LPDWORD) NULL; swscanf( (const wchar_t *) ptszParameterValue, (const wchar_t *) TEXT("%x"), &pdwParameterValue ); *((LPDWORD *) pvParameterValue) = pdwParameterValue; } break; case eLPHANDLE: { /* The parameter type is LPHANDLE. */ LPHANDLE phParameterValue = (LPHANDLE) NULL; swscanf( (const wchar_t *) ptszParameterValue, (const wchar_t *) TEXT("%x"), &phParameterValue ); *((LPHANDLE *) pvParameterValue) = phParameterValue; } break; case eLPSTR: { /* The parameter type is LPSTR. */ /* Convert ptszParameterValue to ANSI !! */ size_t t_WideStringLength; t_WideStringLength = wcslen( ptszParameterValue ); LPSTR pszAnsiString; pszAnsiString = new char[t_WideStringLength+1]; // reserve a character for the NULL LPSTR * ppszParameterValue; ppszParameterValue = (LPSTR *) pvParameterValue; if ( pszAnsiString != (LPSTR) NULL ) { int xNumberOfCharsConverted; xNumberOfCharsConverted = wcstombs( pszAnsiString, ptszParameterValue, t_WideStringLength ); /* Terminate the Ansi string. */ pszAnsiString[xNumberOfCharsConverted] = (char) '\0'; strcpy( (char *) ppszParameterValue, (const char *) pszAnsiString ); delete [] pszAnsiString; } else { **ppszParameterValue = (char) '\0'; } } break; case eLPVOID: { /* The parameter type is LPVOID. */ LPVOID pvDataValue = (LPVOID) NULL; swscanf( (const wchar_t *) ptszParameterValue, (const wchar_t *) TEXT("%x"), &pvDataValue ); *((LPVOID *) pvParameterValue) = pvDataValue; } break; case eLPWSTR: { /* The parameter type is LPWSTR. */ LPWSTR * ppwszParameterValue; ppwszParameterValue = (LPWSTR *) pvParameterValue; wcscpy( (wchar_t *) ppwszParameterValue, (const wchar_t *) ptszParameterValue ); } break; case ePFAX_CONFIGURATIONA: { /* The parameter type is PFAX_CONFIGURATIONA. */ PFAX_CONFIGURATIONA pfcaParameterValue = (PFAX_CONFIGURATIONA) NULL; swscanf( (const wchar_t *) ptszParameterValue, (const wchar_t *) TEXT("%x"), &pfcaParameterValue ); *((PFAX_CONFIGURATIONA *) pvParameterValue) = pfcaParameterValue; } break; case ePPFAX_CONFIGURATIONA: { /* The parameter type is PFAX_CONFIGURATIONA *. */ PFAX_CONFIGURATIONA * ppfcaParameterValue = (PFAX_CONFIGURATIONA *) NULL; swscanf( (const wchar_t *) ptszParameterValue, (const wchar_t *) TEXT("%x"), &ppfcaParameterValue ); *((PFAX_CONFIGURATIONA * *) pvParameterValue) = ppfcaParameterValue; } break; case ePFAX_CONFIGURATIONW: { /* The parameter type is PFAX_CONFIGURATIONW. */ PFAX_CONFIGURATIONW pfcwParameterValue = (PFAX_CONFIGURATIONW) NULL; swscanf( (const wchar_t *) ptszParameterValue, (const wchar_t *) TEXT("%x"), &pfcwParameterValue ); *((PFAX_CONFIGURATIONW *) pvParameterValue) = pfcwParameterValue; } break; case ePPFAX_CONFIGURATIONW: { /* The parameter type is PFAX_CONFIGURATIONW *. */ PFAX_CONFIGURATIONW * ppfcwParameterValue = (PFAX_CONFIGURATIONW *) NULL; swscanf( (const wchar_t *) ptszParameterValue, (const wchar_t *) TEXT("%x"), &ppfcwParameterValue ); *((PFAX_CONFIGURATIONW * *) pvParameterValue) = ppfcwParameterValue; } break; case ePFAX_COVERPAGE_INFOA: { /* The parameter type is PFAX_COVERPAGE_INFOA. */ PFAX_COVERPAGE_INFOA pfciaParameterValue = (PFAX_COVERPAGE_INFOA) NULL; swscanf( (const wchar_t *) ptszParameterValue, (const wchar_t *) TEXT("%x"), &pfciaParameterValue ); *((PFAX_COVERPAGE_INFOA *) pvParameterValue) = pfciaParameterValue; } break; case ePFAX_COVERPAGE_INFOW: { /* The parameter type is PFAX_COVERPAGE_INFOW. */ PFAX_COVERPAGE_INFOW pfciwParameterValue = (PFAX_COVERPAGE_INFOW) NULL; swscanf( (const wchar_t *) ptszParameterValue, (const wchar_t *) TEXT("%x"), &pfciwParameterValue ); *((PFAX_COVERPAGE_INFOW *) pvParameterValue) = pfciwParameterValue; } break; case ePPFAX_DEVICE_STATUSA: { /* The parameter type is PFAX_DEVICE_STATUSA *. */ PFAX_DEVICE_STATUSA * ppfcwParameterValue = (PFAX_DEVICE_STATUSA *) NULL; swscanf( (const wchar_t *) ptszParameterValue, (const wchar_t *) TEXT("%x"), &ppfcwParameterValue ); *((PFAX_DEVICE_STATUSA * *) pvParameterValue) = ppfcwParameterValue; } break; case ePPFAX_DEVICE_STATUSW: { /* The parameter type is PFAX_DEVICE_STATUSW *. */ PFAX_DEVICE_STATUSW * ppfcwParameterValue = (PFAX_DEVICE_STATUSW *) NULL; swscanf( (const wchar_t *) ptszParameterValue, (const wchar_t *) TEXT("%x"), &ppfcwParameterValue ); *((PFAX_DEVICE_STATUSW * *) pvParameterValue) = ppfcwParameterValue; } break; case ePFAX_JOB_ENTRYA: { /* The parameter type is PFAX_JOB_ENTRYA. */ PFAX_JOB_ENTRYA pfcwParameterValue = (PFAX_JOB_ENTRYA) NULL; swscanf( (const wchar_t *) ptszParameterValue, (const wchar_t *) TEXT("%x"), &pfcwParameterValue ); *((PFAX_JOB_ENTRYA *) pvParameterValue) = pfcwParameterValue; } break; case ePPFAX_JOB_ENTRYA: { /* The parameter type is PFAX_JOB_ENTRYA *. */ PFAX_JOB_ENTRYA * ppfcwParameterValue = (PFAX_JOB_ENTRYA *) NULL; swscanf( (const wchar_t *) ptszParameterValue, (const wchar_t *) TEXT("%x"), &ppfcwParameterValue ); *((PFAX_JOB_ENTRYA * *) pvParameterValue) = ppfcwParameterValue; } break; case ePFAX_JOB_ENTRYW: { /* The parameter type is PFAX_JOB_ENTRYW. */ PFAX_JOB_ENTRYW pfcwParameterValue = (PFAX_JOB_ENTRYW) NULL; swscanf( (const wchar_t *) ptszParameterValue, (const wchar_t *) TEXT("%x"), &pfcwParameterValue ); *((PFAX_JOB_ENTRYW *) pvParameterValue) = pfcwParameterValue; } break; case ePPFAX_JOB_ENTRYW: { /* The parameter type is PFAX_JOB_ENTRYW *. */ PFAX_JOB_ENTRYW * ppfcwParameterValue = (PFAX_JOB_ENTRYW *) NULL; swscanf( (const wchar_t *) ptszParameterValue, (const wchar_t *) TEXT("%x"), &ppfcwParameterValue ); *((PFAX_JOB_ENTRYW * *) pvParameterValue) = ppfcwParameterValue; } break; case ePFAX_JOB_PARAMA: { /* The parameter type is PFAX_JOB_PARAMA. */ PFAX_JOB_PARAMA pfjpaParameterValue = (PFAX_JOB_PARAMA) NULL; swscanf( (const wchar_t *) ptszParameterValue, (const wchar_t *) TEXT("%x"), &pfjpaParameterValue ); *((PFAX_JOB_PARAMA *) pvParameterValue) = pfjpaParameterValue; } break; case ePFAX_JOB_PARAMW: { /* The parameter type is PFAX_JOB_PARAMW. */ PFAX_JOB_PARAMW pfjpwParameterValue = (PFAX_JOB_PARAMW) NULL; swscanf( (const wchar_t *) ptszParameterValue, (const wchar_t *) TEXT("%x"), &pfjpwParameterValue ); *((PFAX_JOB_PARAMW *) pvParameterValue) = pfjpwParameterValue; } break; case ePFAX_LOG_CATEGORY: { /* The parameter type is PFAX_LOG_CATEGORY. */ PFAX_LOG_CATEGORY pfcwParameterValue = (PFAX_LOG_CATEGORY) NULL; swscanf( (const wchar_t *) ptszParameterValue, (const wchar_t *) TEXT("%x"), &pfcwParameterValue ); *((PFAX_LOG_CATEGORY *) pvParameterValue) = pfcwParameterValue; } break; case ePPFAX_LOG_CATEGORY: { /* The parameter type is PFAX_LOG_CATEGORY *. */ PFAX_LOG_CATEGORY * ppfcwParameterValue = (PFAX_LOG_CATEGORY *) NULL; swscanf( (const wchar_t *) ptszParameterValue, (const wchar_t *) TEXT("%x"), &ppfcwParameterValue ); *((PFAX_LOG_CATEGORY * *) pvParameterValue) = ppfcwParameterValue; } break; case ePFAX_PORT_INFOA: { /* The parameter type is PFAX_PORT_INFOA. */ PFAX_PORT_INFOA pfcwParameterValue = (PFAX_PORT_INFOA) NULL; swscanf( (const wchar_t *) ptszParameterValue, (const wchar_t *) TEXT("%x"), &pfcwParameterValue ); *((PFAX_PORT_INFOA *) pvParameterValue) = pfcwParameterValue; } break; case ePPFAX_PORT_INFOA: { /* The parameter type is PFAX_PORT_INFOA *. */ PFAX_PORT_INFOA * ppfcwParameterValue = (PFAX_PORT_INFOA *) NULL; swscanf( (const wchar_t *) ptszParameterValue, (const wchar_t *) TEXT("%x"), &ppfcwParameterValue ); *((PFAX_PORT_INFOA * *) pvParameterValue) = ppfcwParameterValue; } break; case ePFAX_PORT_INFOW: { /* The parameter type is PFAX_PORT_INFOW. */ PFAX_PORT_INFOW pfcwParameterValue = (PFAX_PORT_INFOW) NULL; swscanf( (const wchar_t *) ptszParameterValue, (const wchar_t *) TEXT("%x"), &pfcwParameterValue ); *((PFAX_PORT_INFOW *) pvParameterValue) = pfcwParameterValue; } break; case ePPFAX_PORT_INFOW: { /* The parameter type is PFAX_PORT_INFOW *. */ PFAX_PORT_INFOW * ppfcwParameterValue = (PFAX_PORT_INFOW *) NULL; swscanf( (const wchar_t *) ptszParameterValue, (const wchar_t *) TEXT("%x"), &ppfcwParameterValue ); *((PFAX_PORT_INFOW * *) pvParameterValue) = ppfcwParameterValue; } break; case ePFAX_PRINT_INFOA: { /* The parameter type is PFAX_PRINT_INFOA. */ PFAX_PRINT_INFOA pfpiaParameterValue = (PFAX_PRINT_INFOA) NULL; swscanf( (const wchar_t *) ptszParameterValue, (const wchar_t *) TEXT("%x"), &pfpiaParameterValue ); *((PFAX_PRINT_INFOA *) pvParameterValue) = pfpiaParameterValue; } break; case ePFAX_PRINT_INFOW: { /* The parameter type is PFAX_PRINT_INFOW. */ PFAX_PRINT_INFOW pfpiwParameterValue = (PFAX_PRINT_INFOW) NULL; swscanf( (const wchar_t *) ptszParameterValue, (const wchar_t *) TEXT("%x"), &pfpiwParameterValue ); *((PFAX_PRINT_INFOW *) pvParameterValue) = pfpiwParameterValue; } break; case ePPFAX_ROUTING_METHODA: { /* The parameter type is PFAX_ROUTING_METHODA *. */ PFAX_ROUTING_METHODA * ppfcwParameterValue = (PFAX_ROUTING_METHODA *) NULL; swscanf( (const wchar_t *) ptszParameterValue, (const wchar_t *) TEXT("%x"), &ppfcwParameterValue ); *((PFAX_ROUTING_METHODA * *) pvParameterValue) = ppfcwParameterValue; } break; case ePPFAX_ROUTING_METHODW: { /* The parameter type is PFAX_ROUTING_METHODW *. */ PFAX_ROUTING_METHODW * ppfcwParameterValue = (PFAX_ROUTING_METHODW *) NULL; swscanf( (const wchar_t *) ptszParameterValue, (const wchar_t *) TEXT("%x"), &ppfcwParameterValue ); *((PFAX_ROUTING_METHODW * *) pvParameterValue) = ppfcwParameterValue; } break; default: { /* The parameter type was not recognized by the "if" statements above. */ CString csMessage; csMessage.Format( TEXT("Unrecognized type in StoreParameterValue.") ); AfxMessageBox( csMessage ); fReturnValue = (BOOL) FALSE; } break; } csParameterValue.ReleaseBuffer(); return ( fReturnValue ); } /* * PreProcessParameterValueString * * Purpose: * This function prepares a CString object to be scanned as a * hexadecimal number by removing the characters "x" ot "X" if * they appear as a prefix. * * Arguments: * rcsParameterValue - a reference to a CString that contains the * parameter value. * * Returns: * a CString that has been formatted to be properly scanned as a * hexadecimal value. * */ CString CFaxApiFunctionParameterInfo::PreProcessParameterValueString( const CString & rcsParameterValue ) { CString csParameterValue; if ( rcsParameterValue.FindOneOf( TEXT("xX") ) == 0 ) { int xStringLength; xStringLength = rcsParameterValue.GetLength(); /* Remove the "x" ot "X" prefix. */ csParameterValue = rcsParameterValue.Right( xStringLength - 1 ); } else { csParameterValue = rcsParameterValue; } return ( csParameterValue ); }