/*
 * VARIANT test program
 *
 * Copyright 1998 Jean-Claude Cote
 *
 * The purpose of this program is validate the implementation
 * of the APIs related to VARIANTs. The validation is done
 * by comparing the results given by the Windows implementation
 * versus the Wine implementation.
 *
 * This program tests the creation/coercion/destruction of VARIANTs.
 *
 * The program does not currently test any API that takes
 * arguments of type: IDispatch, IUnknown, DECIMAL, CURRENCY.
 *
 * Since the purpose of this program is to compare the results
 * from Windows and Wine it is written so that with a simple
 * define it can be compiled either in Windows or Linux.
 *
 *
 * NOTES
 *	 - The Variant structure in Windows has a non-named union. This means
 *	 the member of the union are accessible simply by doing pVariant->pfltVal.
 *	 With gcc it is not possible to have non-named union so it has been named
 *	 'u'.  So it's members are accessible using this name like so
 *	 pVariant->u.pfltVal.  So if this program is compiled in Windows
 *	 the references to 'u' will need to be take out of this file.
 *
 *	 - Also the printf is a little different so the format specifiers may
 *	 need to be tweaked if this file is compile in Windows.
 *	 Printf is also different in that it continues printing numbers
 *	 even after there is no more significative digits left to print.  These
 *	 number are garbage and in windows they are set to zero but not
 *	 on Linux.
 *
 *	 - The VarDateFromStr is not implemented yet.
 *
 *	 - The date and floating point format may not be the exact same format has the one in
 *	 windows depending on what the Internatinal setting are in windows.
 *
 */



#include <stdio.h>
#include <malloc.h>
#include <windows.h>
#include <winerror.h>
#include <winnt.h>

#include <oleauto.h>

#include <math.h>
#include <float.h>
#include <time.h>

#include <windef.h>

#ifdef __unix__
#include <debugstr.h>
extern LPWSTR HEAP_strdupAtoW( HANDLE heap, DWORD flags, LPCSTR str );
#endif


static const int MAX_BUFFER = 1024;


#ifndef __unix__
char* WtoA( OLECHAR* p )
{
	int i = 0;
	char* pc = (char *)malloc( MAX_BUFFER*sizeof(char) );
	pc[0] = '\"';
	pc++;
	i = wcstombs( pc, p, MAX_BUFFER );
	if( i < MAX_BUFFER-1 )
	{
		pc[i] = '\"';
		pc[i+1] = '\0';
	}
	pc--;
	return pc;
}

OLECHAR* AtoW( char* p )
{
	int i = 0;
	OLECHAR* pwc = (OLECHAR *)malloc( MAX_BUFFER*sizeof(OLECHAR) );
	i = mbstowcs( pwc, p, MAX_BUFFER );
	return pwc;
}
#else 
char* WtoA( OLECHAR* p )
{
	return debugstr_wn( p, MAX_BUFFER );
}
OLECHAR* AtoW( char* p )
{
	return HEAP_strdupAtoW( GetProcessHeap(), 0, p );
}
#endif


int PASCAL WinMain (HANDLE inst, HANDLE prev, LPSTR cmdline, int show)
{
	VARIANTARG va;
	VARIANTARG vb;
	VARIANTARG vc;
	VARIANTARG vd;
	VARIANTARG ve;

	int theInt = 0;
	int* pInt = &theInt;
	VARIANT_BOOL b = 0;
	VARIANT_BOOL* pBool = &b;
	unsigned short uShort = 0;
	unsigned short* pUShort = &uShort;
	unsigned long uLong = 0;
	unsigned long* pULong = &uLong;
	CHAR theChar;
	CHAR* pChar = &theChar;
	BYTE byte;
	BYTE* pByte = &byte;
	short s = 0;
	short* pShort = &s;
	long Long = 0;
	long* pLong = &Long;
	float f = 0;
	float* pFloat = &f;
	double d = 0;
	double* pDouble = &d;
	
	unsigned short i = 0;
	HRESULT res = 0;
	BSTR bstr = NULL;
	int olePtrIndex = 0;
	int nOlePtrs = 120;
	OLECHAR* pOleChar[120];

	pOleChar[0] = AtoW( "-2" );
	pOleChar[1] = AtoW( "-1" );
	pOleChar[2] = AtoW( "-0.51" );
	pOleChar[3] = AtoW( "-0.5" );
	pOleChar[4] = AtoW( "-0.49" );
	pOleChar[5] = AtoW( "-0.0" );
	pOleChar[6] = AtoW( "0.0" );
	pOleChar[7] = AtoW( "0.49" );
	pOleChar[8] = AtoW( "0.5" );
	pOleChar[9] = AtoW( "0.51" );
	pOleChar[10] = AtoW( "1" );
	pOleChar[11] = AtoW( "127" );
	pOleChar[12] = AtoW( "128" );
	pOleChar[13] = AtoW( "129" );
	pOleChar[14] = AtoW( "255" );
	pOleChar[15] = AtoW( "256" );
	pOleChar[16] = AtoW( "257" );
	pOleChar[17] = AtoW( "32767" );
	pOleChar[18] = AtoW( "32768" );
	pOleChar[19] = AtoW( "-32768" );
	pOleChar[20] = AtoW( "-32769" );
	pOleChar[21] = AtoW( "16777216" );
	pOleChar[22] = AtoW( "16777217" );
	pOleChar[23] = AtoW( "-16777216" );
	pOleChar[24] = AtoW( "16777217" );
	pOleChar[25] = AtoW( "2147483647" );
	pOleChar[26] = AtoW( "2147483648" );
	pOleChar[27] = AtoW( "-2147483647" );
	pOleChar[28] = AtoW( "-2147483648" );

	pOleChar[29] = AtoW( "" );
	pOleChar[30] = AtoW( " " );
	pOleChar[31] = AtoW( "1F" );
	pOleChar[32] = AtoW( "1G" );
	pOleChar[33] = AtoW( " 1 " );
	pOleChar[34] = AtoW( " 1 2 " );
	pOleChar[35] = AtoW( "1,2,3" );
	pOleChar[36] = AtoW( "1 2 3" );
	pOleChar[37] = AtoW( "1,2, 3" );
	pOleChar[38] = AtoW( "1;2;3" );
	pOleChar[39] = AtoW( "1.2.3" );

	pOleChar[40] = AtoW( "0." );
	pOleChar[41] = AtoW( ".0" );
	pOleChar[42] = AtoW( "0.1E12" );
	pOleChar[43] = AtoW( "2.4,E1" );
	pOleChar[44] = AtoW( "	+3.2,E1" );
	pOleChar[45] = AtoW( "4E2.5" );
	pOleChar[46] = AtoW( "	2E+2" );
	pOleChar[47] = AtoW( "1 E+2" );
	pOleChar[48] = AtoW( "." );
	pOleChar[49] = AtoW( ".E2" );
	pOleChar[50] = AtoW( "1000000000000000000000000000000000000000000000000000000000000000" );
	pOleChar[51] = AtoW( "0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001" );
	pOleChar[52] = AtoW( "00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001" );
	pOleChar[53] = AtoW( "100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001" );
	pOleChar[54] = AtoW( "0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001" );
	pOleChar[55] = AtoW( "65535" );
	pOleChar[56] = AtoW( "65535.5" );
	pOleChar[57] = AtoW( "65536" );
	pOleChar[58] = AtoW( "4294967295" );
	pOleChar[59] = AtoW( "4294967296" );
	
	pOleChar[60] = AtoW( "1 January 99" );
	pOleChar[61] = AtoW( "December 31, 2078" );
	pOleChar[62] = AtoW( "January 1, 1900" );
	pOleChar[63] = AtoW( "January 2 1900" );
	pOleChar[64] = AtoW( "11.11.1999" );
	pOleChar[65] = AtoW( "11/11/1999" );
	pOleChar[66] = AtoW( " 11 / 11 / 1999" );
	pOleChar[67] = AtoW( "11/11/1999:11:11:1134" );
	pOleChar[68] = AtoW( "11/11/1999 11:11:11:1" );
	pOleChar[69] = AtoW( "\t1999/\t11/21 11 :11:11am" );

	pOleChar[70] = AtoW( "11/11/1999 11:11:11Am" );
	pOleChar[71] = AtoW( "11/11/1999 11:11:11PM" );
	pOleChar[72] = AtoW( "11/11/199911:11:11PM" );
	pOleChar[73] = AtoW( "11/11/1999 0:0:11am" );
	pOleChar[74] = AtoW( "11/11/1999 11,11:11am" );
	pOleChar[75] = AtoW( "11/11/1999 11:11:11am" );
	pOleChar[76] = AtoW( "11/11/1999 11/11:11am" );
	pOleChar[77] = AtoW( "11/11/1999 11:11AM" );
	pOleChar[78] = AtoW( "11/11/1999 1AM" );
	pOleChar[79] = AtoW( "11/11/1999 0AM" );

	pOleChar[80] = AtoW( "11/11/1999 11:11:11" );
	pOleChar[81] = AtoW( "11/13/1999 0AM" );
	pOleChar[82] = AtoW( "13/13/1999 0AM" );
	pOleChar[83] = AtoW( "13/11/1999 0AM" );
	pOleChar[84] = AtoW( "11/33/1999 0AM" );
	pOleChar[85] = AtoW( "11/11/1999 AM" );
	pOleChar[86] = AtoW( "1/1/0 0AM" );
	pOleChar[87] = AtoW( "1/1/-1 0AM" );
	pOleChar[88] = AtoW( "1999 January 3 9AM" );
	pOleChar[89] = AtoW( "1 January 1999 11AM" );

	pOleChar[90] = AtoW( "4AM 11/11/1999" );
	pOleChar[91] = AtoW( "4:22 11/11/1999 AM" );
	pOleChar[92] = AtoW( " 1 1 /11/1999" );
	pOleChar[93] = AtoW( "11-11/1999 11:11:11.12AM" );
	pOleChar[94] = AtoW( "1999 January 3, 9AM" );
	pOleChar[95] = AtoW( "December, 31, 2078" );
	pOleChar[96] = AtoW( "December, 31, 2078," );
	pOleChar[97] = AtoW( "December, 31 2078" );
	pOleChar[98] = AtoW( "11/99" );
	pOleChar[99] = AtoW( "11-1999" );

	pOleChar[100] = AtoW( "true" );
	pOleChar[101] = AtoW( "True" );
	pOleChar[102] = AtoW( "TRue" );
	pOleChar[103] = AtoW( "TRUE" );
	pOleChar[104] = AtoW( " TRUE" );
	pOleChar[105] = AtoW( "FALSE " );
	pOleChar[106] = AtoW( "False" );
	pOleChar[107] = AtoW( "JustSomeText" );
	pOleChar[108] = AtoW( "Just Some Text" );
	pOleChar[109] = AtoW( "" );

	pOleChar[110] = AtoW( "1.5" );
	pOleChar[111] = AtoW( "2.5" );
	pOleChar[112] = AtoW( "3.5" );
	pOleChar[113] = AtoW( "4.5" );
	pOleChar[114] = AtoW( "" );
	pOleChar[115] = AtoW( "" );
	pOleChar[116] = AtoW( "" );
	pOleChar[117] = AtoW( "" );
	pOleChar[118] = AtoW( "" );
	pOleChar[119] = AtoW( "" );


	/* Start testing the Low-Level API ( the coercions )
	 */


	/* unsigned char from...
	 */
	printf( "\n\n======== Testing VarUI1FromXXX ========\n");
	
	/* res = VarUI1FromI2( 0, NULL );
	 */
	printf( "VarUI1FromI2: passing in NULL as return val makes it crash, %X\n", (unsigned int) res );

	res = VarUI1FromStr( NULL, 0, 0, pByte );
	printf( "VarUI1FromStr: passing in NULL as param: %X\n", (unsigned int) res );

	res = VarUI1FromI2( 0, pByte );
	printf( "VarUI1FromI2: 0, %X, %X\n", *pByte, (unsigned int) res );
	res = VarUI1FromI2( 69, pByte );
	printf( "VarUI1FromI2: 69, %X, %X\n", *pByte, (unsigned int) res );
	res = VarUI1FromI2( 70, pByte );
	printf( "VarUI1FromI2: 70, %X, %X\n", *pByte, (unsigned int) res );
	res = VarUI1FromI2( 128, pByte );
	printf( "VarUI1FromI2: 128, %X, %X\n", *pByte, (unsigned int) res );
	res = VarUI1FromI2( 255, pByte );
	printf( "VarUI1FromI2: 255, %X, %X\n", *pByte, (unsigned int) res );
	res = VarUI1FromI2( 256, pByte );
	printf( "VarUI1FromI2: 256, %X, %X\n", *pByte, (unsigned int) res );
	res = VarUI1FromI2( 257, pByte );
	printf( "VarUI1FromI2: 257, %X, %X\n", *pByte, (unsigned int) res );

	res = VarUI1FromR8( 0.0, pByte );
	printf( "VarUI1FromR8: 0.0, %X, %X\n", *pByte, (unsigned int) res );
	res = VarUI1FromR8( 69.33, pByte );
	printf( "VarUI1FromR8: 69.33, %X, %X\n", *pByte, (unsigned int) res );
	res = VarUI1FromR8( 69.66, pByte );
	printf( "VarUI1FromR8: 69.66, %X, %X\n", *pByte, (unsigned int) res );
	res = VarUI1FromR8( -69.33, pByte );
	printf( "VarUI1FromR8: -69.33, %X, %X\n", *pByte, (unsigned int) res );
	res = VarUI1FromR8( -69.66, pByte );
	printf( "VarUI1FromR8: -69.66, %X, %X\n", *pByte, (unsigned int) res );

	res = VarUI1FromR8( -0.5, pByte );
	printf( "VarUI1FromR8: -0.5, %X, %X\n", *pByte, (unsigned int) res );
	res = VarUI1FromR8( -0.51, pByte );
	printf( "VarUI1FromR8: -0.51, %X, %X\n", *pByte, (unsigned int) res );
	res = VarUI1FromR8( -0.49, pByte );
	printf( "VarUI1FromR8: -0.49, %X, %X\n", *pByte, (unsigned int) res );

	res = VarUI1FromR8( 0.5, pByte );
	printf( "VarUI1FromR8: 0.5, %X, %X\n", *pByte, (unsigned int) res );
	res = VarUI1FromR8( 0.51, pByte );
	printf( "VarUI1FromR8: 0.51, %X, %X\n", *pByte, (unsigned int) res );
	res = VarUI1FromR8( 0.49, pByte );
	printf( "VarUI1FromR8: 0.49, %X, %X\n", *pByte, (unsigned int) res );

	res = VarUI1FromDate( 0.0, pByte );
	printf( "VarUI1FromDate: 0.0, %X, %X\n", *pByte, (unsigned int) res );
	res = VarUI1FromDate( 69.33, pByte );
	printf( "VarUI1FromDate: 69.33, %X, %X\n", *pByte, (unsigned int) res );
	res = VarUI1FromDate( 69.66, pByte );
	printf( "VarUI1FromDate: 69.66, %X, %X\n", *pByte, (unsigned int) res );
	res = VarUI1FromDate( -69.33, pByte );
	printf( "VarUI1FromDate: -69.33, %X, %X\n", *pByte, (unsigned int) res );
	res = VarUI1FromDate( -69.66, pByte );
	printf( "VarUI1FromDate: -69.66, %X, %X\n", *pByte, (unsigned int) res );

	res = VarUI1FromBool( VARIANT_TRUE, pByte );
	printf( "VarUI1FromBool: VARIANT_TRUE, %X, %X\n", *pByte, (unsigned int) res );
	res = VarUI1FromBool( VARIANT_FALSE, pByte );
	printf( "VarUI1FromBool: VARIANT_FALSE, %X, %X\n", *pByte, (unsigned int) res );

	for( olePtrIndex = 0; olePtrIndex < nOlePtrs; olePtrIndex ++ )
	{
		res = VarUI1FromStr( pOleChar[olePtrIndex], 0, 0, pByte );
		printf( "VarUI1FromStr: %s, %X, %X\n", WtoA(pOleChar[olePtrIndex]), *pByte, (unsigned int) res );
	}


	/* unsigned short from ...
	 */
	printf( "\n\n======== Testing VarUI2FromXXX ========\n");
	
	res = VarUI2FromI2( -1, &i );
	printf( "VarUI2FromI2: -1, %d, %X\n", i, (unsigned int) res );

	/* res = VarUI2FromI2( 0, NULL );
	 */
	printf( "VarUI2FromI2: passing in NULL as return val makes it crash, %X\n", (unsigned int) res );

	res = VarUI2FromStr( NULL, 0, 0, pUShort );
	printf( "VarUI2FromStr: passing in NULL as param: %X\n", (unsigned int) res );

	res = VarUI2FromI2( 0, pUShort );
	printf( "VarUI2FromI2: 0, %u, %X\n", *pUShort, (unsigned int) res );
	res = VarUI2FromI2( 69, pUShort );
	printf( "VarUI2FromI2: 69, %u, %X\n", *pUShort, (unsigned int) res );
	res = VarUI2FromI2( 70, pUShort );
	printf( "VarUI2FromI2: 70, %u, %X\n", *pUShort, (unsigned int) res );
	res = VarUI2FromI2( 128, pUShort );
	printf( "VarUI2FromI2: 128, %u, %X\n", *pUShort, (unsigned int) res );
	res = VarUI2FromI4( 65535, pUShort );
	printf( "VarUI2FromI4: 65535, %u, %X\n", *pUShort, (unsigned int) res );
	res = VarUI2FromI4( 65536, pUShort );
	printf( "VarUI2FromI4: 65536, %u, %X\n", *pUShort, (unsigned int) res );
	res = VarUI2FromI4( 65537, pUShort );
	printf( "VarUI2FromI4: 65537, %u, %X\n", *pUShort, (unsigned int) res );

	res = VarUI2FromR8( 0.0, pUShort );
	printf( "VarUI2FromR8: 0.0, %u, %X\n", *pUShort, (unsigned int) res );
	res = VarUI2FromR8( 69.33, pUShort );
	printf( "VarUI2FromR8: 69.33, %u, %X\n", *pUShort, (unsigned int) res );
	res = VarUI2FromR8( 69.66, pUShort );
	printf( "VarUI2FromR8: 69.66, %u, %X\n", *pUShort, (unsigned int) res );
	res = VarUI2FromR8( -69.33, pUShort );
	printf( "VarUI2FromR8: -69.33, %u, %X\n", *pUShort, (unsigned int) res );
	res = VarUI2FromR8( -69.66, pUShort );
	printf( "VarUI2FromR8: -69.66, %u, %X\n", *pUShort, (unsigned int) res );

	res = VarUI2FromR8( -0.5, pUShort );
	printf( "VarUI2FromR8: -0.5, %u, %X\n", *pUShort, (unsigned int) res );
	res = VarUI2FromR8( -0.51, pUShort );
	printf( "VarUI2FromR8: -0.51, %u, %X\n", *pUShort, (unsigned int) res );
	res = VarUI2FromR8( -0.49, pUShort );
	printf( "VarUI2FromR8: -0.49, %u, %X\n", *pUShort, (unsigned int) res );

	res = VarUI2FromR8( 0.5, pUShort );
	printf( "VarUI2FromR8: 0.5, %u, %X\n", *pUShort, (unsigned int) res );
	res = VarUI2FromR8( 0.51, pUShort );
	printf( "VarUI2FromR8: 0.51, %u, %X\n", *pUShort, (unsigned int) res );
	res = VarUI2FromR8( 0.49, pUShort );
	printf( "VarUI2FromR8: 0.49, %u, %X\n", *pUShort, (unsigned int) res );

	res = VarUI2FromDate( 0.0, pUShort );
	printf( "VarUI2FromDate: 0.0, %u, %X\n", *pUShort, (unsigned int) res );
	res = VarUI2FromDate( 69.33, pUShort );
	printf( "VarUI2FromDate: 69.33, %u, %X\n", *pUShort, (unsigned int) res );
	res = VarUI2FromDate( 69.66, pUShort );
	printf( "VarUI2FromDate: 69.66, %u, %X\n", *pUShort, (unsigned int) res );
	res = VarUI2FromDate( -69.33, pUShort );
	printf( "VarUI2FromDate: -69.33, %u, %X\n", *pUShort, (unsigned int) res );
	res = VarUI2FromDate( -69.66, pUShort );
	printf( "VarUI2FromDate: -69.66, %u, %X\n", *pUShort, (unsigned int) res );

	res = VarUI2FromBool( VARIANT_TRUE, pUShort );
	printf( "VarUI2FromBool: VARIANT_TRUE, %u, %X\n", *pUShort, (unsigned int) res );
	res = VarUI2FromBool( VARIANT_FALSE, pUShort );
	printf( "VarUI2FromBool: VARIANT_FALSE, %u, %X\n", *pUShort, (unsigned int) res );

	for( olePtrIndex = 0; olePtrIndex < nOlePtrs; olePtrIndex ++ )
	{
		res = VarUI2FromStr( pOleChar[olePtrIndex], 0, 0, pUShort );
		printf( "VarUI2FromStr: %s, %u, %X\n", WtoA(pOleChar[olePtrIndex]), (int)*pUShort, (unsigned int) res );
	}

	/* unsigned long from ...
	 */
	printf( "\n\n======== Testing VarUI4FromXXX ========\n");
	
	/*res = VarUI4FromI2( 0, NULL );
	 */
	printf( "VarUI4FromI2: passing in NULL as return val makes it crash, %X\n", (unsigned int) res );

	res = VarUI4FromStr( NULL, 0, 0, pULong );
	printf( "VarUI4FromStr: passing in NULL as param: %X\n", (unsigned int) res );

	res = VarUI4FromI2( 0, pULong );
	printf( "VarUI4FromI2: 0, %lu, %X\n", *pULong, (unsigned int) res );
	res = VarUI4FromI2( 69, pULong );
	printf( "VarUI4FromI2: 69, %lu, %X\n", *pULong, (unsigned int) res );
	res = VarUI4FromI2( 70, pULong );
	printf( "VarUI4FromI2: 70, %lu, %X\n", *pULong, (unsigned int) res );
	res = VarUI4FromI2( 128, pULong );
	printf( "VarUI4FromI2: 128, %lu, %X\n", *pULong, (unsigned int) res );
	res = VarUI4FromI2( 255, pULong );
	printf( "VarUI4FromI2: 255, %lu, %X\n", *pULong, (unsigned int) res );
	res = VarUI4FromR8( 4294967295.0, pULong );
	printf( "VarUI4FromR8: 4294967295, %lu, %X\n", *pULong, (unsigned int) res );
	res = VarUI4FromR8( 4294967296.0, pULong );
	printf( "VarUI4FromR8: 4294967296, %lu, %X\n", *pULong, (unsigned int) res );

	res = VarUI4FromR8( 0.0, pULong );
	printf( "VarUI4FromR8: 0.0, %lu, %X\n", *pULong, (unsigned int) res );
	res = VarUI4FromR8( 69.33, pULong );
	printf( "VarUI4FromR8: 69.33, %lu, %X\n", *pULong, (unsigned int) res );
	res = VarUI4FromR8( 69.66, pULong );
	printf( "VarUI4FromR8: 69.66, %lu, %X\n", *pULong, (unsigned int) res );
	res = VarUI4FromR8( -69.33, pULong );
	printf( "VarUI4FromR8: -69.33, %lu, %X\n", *pULong, (unsigned int) res );
	res = VarUI4FromR8( -69.66, pULong );
	printf( "VarUI4FromR8: -69.66, %lu, %X\n", *pULong, (unsigned int) res );

	res = VarUI4FromR8( -0.5, pULong );
	printf( "VarUI4FromR8: -0.5, %lu, %X\n", *pULong, (unsigned int) res );
	res = VarUI4FromR8( -0.51, pULong );
	printf( "VarUI4FromR8: -0.51, %lu, %X\n", *pULong, (unsigned int) res );
	res = VarUI4FromR8( -0.49, pULong );
	printf( "VarUI4FromR8: -0.49, %lu, %X\n", *pULong, (unsigned int) res );

	res = VarUI4FromR8( 0.5, pULong );
	printf( "VarUI4FromR8: 0.5, %lu, %X\n", *pULong, (unsigned int) res );
	res = VarUI4FromR8( 0.51, pULong );
	printf( "VarUI4FromR8: 0.51, %lu, %X\n", *pULong, (unsigned int) res );
	res = VarUI4FromR8( 0.49, pULong );
	printf( "VarUI4FromR8: 0.49, %lu, %X\n", *pULong, (unsigned int) res );

	res = VarUI4FromDate( 0.0, pULong );
	printf( "VarUI4FromDate: 0.0, %lu, %X\n", *pULong, (unsigned int) res );
	res = VarUI4FromDate( 69.33, pULong );
	printf( "VarUI4FromDate: 69.33, %lu, %X\n", *pULong, (unsigned int) res );
	res = VarUI4FromDate( 69.66, pULong );
	printf( "VarUI4FromDate: 69.66, %lu, %X\n", *pULong, (unsigned int) res );
	res = VarUI4FromDate( -69.33, pULong );
	printf( "VarUI4FromDate: -69.33, %lu, %X\n", *pULong, (unsigned int) res );
	res = VarUI4FromDate( -69.66, pULong );
	printf( "VarUI4FromDate: -69.66, %lu, %X\n", *pULong, (unsigned int) res );

	res = VarUI4FromBool( VARIANT_TRUE, pULong );
	printf( "VarUI4FromBool: VARIANT_TRUE, %lu, %X\n", *pULong, (unsigned int) res );
	res = VarUI4FromBool( VARIANT_FALSE, pULong );
	printf( "VarUI4FromBool: VARIANT_FALSE, %lu, %X\n", *pULong, (unsigned int) res );

	for( olePtrIndex = 0; olePtrIndex < nOlePtrs; olePtrIndex ++ )
	{
		res = VarUI4FromStr( pOleChar[olePtrIndex], 0, 0, pULong );
		printf( "VarUI4FromStr: %s, %lu, %X\n", WtoA(pOleChar[olePtrIndex]), *pULong, (unsigned int) res );
	}

	/* CHAR from ...
	 */
	printf( "\n\n======== Testing VarI1FromXXX ========\n");

	res = VarI1FromBool( VARIANT_TRUE, pByte );
	printf( "VarI1FromBool: VARIANT_TRUE, %d, %X\n", *pByte, (unsigned int) res );

	res = VarI1FromBool( VARIANT_TRUE, pChar );
	printf( "VarI1FromBool: VARIANT_TRUE, %d, %X\n", *pChar, (unsigned int) res );

	res = VarI1FromBool( VARIANT_FALSE, pChar );
	printf( "VarI1FromBool: VARIANT_FALSE, %d, %X\n", *pChar, (unsigned int) res );

	res = VarI1FromUI1( (unsigned char)32767, pChar );
	printf( "VarI1FromUI1: 32767, %d, %X\n", *pChar, (unsigned int) res );
	res = VarI1FromUI1( (unsigned char)65535, pChar );
	printf( "VarI1FromUI1: 65535, %d, %X\n", *pChar, (unsigned int) res );

	res = VarI1FromI4( 32767, pChar );
	printf( "VarI1FromI4: 32767, %d, %X\n", *pChar, (unsigned int) res );
	res = VarI1FromI4( 32768, pChar );
	printf( "VarI1FromI4: 32768, %d, %X\n", *pChar, (unsigned int) res );
	res = VarI1FromI4( -32768, pChar );
	printf( "VarI1FromI4: -32768, %d, %X\n", *pChar, (unsigned int) res );
	res = VarI1FromI4( -32769, pChar );
	printf( "VarI1FromI4: -32769, %d, %X\n", *pChar, (unsigned int) res );

	res = VarI1FromR8( 69.33, pChar );
	printf( "VarI1FromR8: 69.33, %d, %X\n", *pChar, (unsigned int) res );
	res = VarI1FromR8( 69.66, pChar );
	printf( "VarI1FromR8: 69.66, %d, %X\n", *pChar, (unsigned int) res );
	res = VarI1FromR8( -69.33, pChar );
	printf( "VarI1FromR8: -69.33, %d, %X\n", *pChar, (unsigned int) res );
	res = VarI1FromR8( -69.66, pChar );
	printf( "VarI1FromR8: -69.66, %d, %X\n", *pChar, (unsigned int) res );

	res = VarI1FromDate( -69.66, pChar );
	printf( "VarI1FromDate: -69.66, %d, %X\n", *pChar, (unsigned int) res );

	for( olePtrIndex = 0; olePtrIndex < nOlePtrs; olePtrIndex ++ )
	{
		res = VarI1FromStr( pOleChar[olePtrIndex], 0, 0, pChar );
		printf( "VarI1FromStr: %s, %d, %X\n", WtoA(pOleChar[olePtrIndex]), *pChar, (unsigned int) res );
	}

	/* short from ...
	 */
	printf( "\n\n======== Testing VarI2FromXXX ========\n");

	res = VarI2FromUI2( 32767, pShort );
	printf( "VarI2FromUI2: 32767, %d, %X\n", *pShort, (unsigned int) res );
	res = VarI2FromUI2( 65535, pShort );
	printf( "VarI2FromUI2: 65535, %d, %X\n", *pShort, (unsigned int) res );

	res = VarI2FromI4( 32767, pShort );
	printf( "VarI2FromI4: 32767, %d, %X\n", *pShort, (unsigned int) res );
	res = VarI2FromI4( 32768, pShort );
	printf( "VarI2FromI4: 32768, %d, %X\n", *pShort, (unsigned int) res );
	res = VarI2FromI4( -32768, pShort );
	printf( "VarI2FromI4: -32768, %d, %X\n", *pShort, (unsigned int) res );
	res = VarI2FromI4( -32769, pShort );
	printf( "VarI2FromI4: -32769, %d, %X\n", *pShort, (unsigned int) res );

	res = VarI2FromR8( 69.33, pShort );
	printf( "VarI2FromR8: 69.33, %d, %X\n", *pShort, (unsigned int) res );
	res = VarI2FromR8( 69.66, pShort );
	printf( "VarI2FromR8: 69.66, %d, %X\n", *pShort, (unsigned int) res );
	res = VarI2FromR8( -69.33, pShort );
	printf( "VarI2FromR8: -69.33, %d, %X\n", *pShort, (unsigned int) res );
	res = VarI2FromR8( -69.66, pShort );
	printf( "VarI2FromR8: -69.66, %d, %X\n", *pShort, (unsigned int) res );

	res = VarI2FromDate( -69.66, pShort );
	printf( "VarI2FromDate: -69.66, %d, %X\n", *pShort, (unsigned int) res );

	for( olePtrIndex = 0; olePtrIndex < nOlePtrs; olePtrIndex ++ )
	{
		res = VarI2FromStr( pOleChar[olePtrIndex], 0, 0, pShort );
		printf( "VarI2FromStr: %s, %d, %X\n", WtoA(pOleChar[olePtrIndex]), *pShort, (unsigned int) res );
	}
	
	/* long from ...
	 */
	printf( "\n\n======== Testing VarI4FromXXX ========\n");

	res = VarI4FromI2( 3, (long*)pInt );
	printf( "VarIntFromI2: 3, %d, %X\n", *pInt, (unsigned int) res );

	res = VarI4FromR8( 69.33, pLong );
	printf( "VarI4FromR8: 69.33, %ld, %X\n", *pLong, (unsigned int) res );
	res = VarI4FromR8( 69.66, pLong );
	printf( "VarI4FromR8: 69.66, %ld, %X\n", *pLong, (unsigned int) res );
	res = VarI4FromR8( -69.33, pLong );
	printf( "VarI4FromR8: -69.33, %ld, %X\n", *pLong, (unsigned int) res );
	res = VarI4FromR8( -69.66, pLong );
	printf( "VarI4FromR8: -69.66, %ld, %X\n", *pLong, (unsigned int) res );

	res = VarI4FromR8( 2147483647.0, pLong );
	printf( "VarI4FromR8: 2147483647.0, %ld, %X\n", *pLong, (unsigned int) res );
	res = VarI4FromR8( 2147483648.0, pLong );
	printf( "VarI4FromR8: 2147483648.0, %ld, %X\n", *pLong, (unsigned int) res );
	res = VarI4FromR8( -2147483647.0, pLong );
	printf( "VarI4FromR8: -2147483647.0, %ld, %X\n", *pLong, (unsigned int) res );
	res = VarI4FromR8( -2147483648.0, pLong );
	printf( "VarI4FromR8: -2147483648.0, %ld, %X\n", *pLong, (unsigned int) res );
	res = VarI4FromR8( -2147483649.0, pLong );
	printf( "VarI4FromR8: -2147483649.0, %ld, %X\n", *pLong, (unsigned int) res );

	res = VarI4FromDate( -2147483649.0, pLong );
	printf( "VarI4FromDate: -2147483649.0, %ld, %X\n", *pLong, (unsigned int) res );

	for( olePtrIndex = 0; olePtrIndex < nOlePtrs; olePtrIndex ++ )
	{
		res = VarI4FromStr( pOleChar[olePtrIndex], 0, 0, pLong );
		printf( "VarI4FromStr: %s, %ld, %X\n", WtoA(pOleChar[olePtrIndex]), *pLong, (unsigned int) res );
	}

	/* float from ...
	 */
	printf( "\n\n======== Testing VarR4FromXXX ========\n");

	res = VarR4FromI4( 16777216, pFloat );
	printf( "VarR4FromI4: 16777216, %f, %X\n", *pFloat, (unsigned int) res );
	res = VarR4FromI4( 16777217, pFloat );
	printf( "VarR4FromI4: 16777217, %f, %X\n", *pFloat, (unsigned int) res );
	res = VarR4FromI4( -16777216, pFloat );
	printf( "VarR4FromI4: -16777216, %f, %X\n", *pFloat, (unsigned int) res );
	res = VarR4FromI4( -16777217, pFloat );
	printf( "VarR4FromI4: -16777217, %f, %X\n", *pFloat, (unsigned int) res );

	res = VarR4FromR8( 16777216.0, pFloat );
	printf( "VarR4FromR8: 16777216.0, %f, %X\n", *pFloat, (unsigned int) res );
	res = VarR4FromR8( 16777217.0, pFloat );
	printf( "VarR4FromR8: 16777217.0, %f, %X\n", *pFloat, (unsigned int) res );
	res = VarR4FromR8( -16777216.0, pFloat );
	printf( "VarR4FromR8: -16777216.0, %f, %X\n", *pFloat, (unsigned int) res );
	res = VarR4FromR8( -16777217.0, pFloat );
	printf( "VarR4FromR8: -16777217.0, %f, %X\n", *pFloat, (unsigned int) res );
	
	res = VarR4FromR8( 16777218e31, pFloat );
	printf( "VarR4FromR8: 16777218e31, %f, %X\n", *pFloat, (unsigned int) res );
	res = VarR4FromR8( 16777218e32, pFloat );
	printf( "VarR4FromR8: 16777218e32, %f, %X\n", *pFloat, (unsigned int) res );
	
	res = VarR4FromDate( 16777218e31, pFloat );
	printf( "VarR4FromDate: 16777218e31, %f, %X\n", *pFloat, (unsigned int) res );

	for( olePtrIndex = 0; olePtrIndex < nOlePtrs; olePtrIndex ++ )
	{
		res = VarR4FromStr( pOleChar[olePtrIndex], 0, 0, pFloat );
		printf( "VarR4FromStr: %s, %f, %X\n", WtoA(pOleChar[olePtrIndex]), *pFloat, (unsigned int) res );
	}

	/* double from ...
	 */
	printf( "\n\n======== Testing VarR8FromXXX ========\n");

	res = VarR8FromDate( 900719925474099.0, pDouble );
	printf( "VarR8FromDate: 900719925474099.0, %f, %X\n", *pDouble, (unsigned int) res );

	for( olePtrIndex = 0; olePtrIndex < nOlePtrs; olePtrIndex ++ )
	{
		res = VarR8FromStr( pOleChar[olePtrIndex], 0, 0, pDouble );
		printf( "VarR8FromStr: %s, %f, %X\n", WtoA(pOleChar[olePtrIndex]), *pDouble, (unsigned int) res );
	}

	/* date from ...
	 */
	printf( "\n\n======== Testing VarDateFromXXX ========\n");

	res = VarDateFromI4( 2958465, pDouble );
	printf( "VarDateFromI4: 2958465, %f, %X\n", *pDouble, (unsigned int) res );
	res = VarDateFromI4( 2958466, pDouble );
	printf( "VarDateFromI4: 2958466, %f, %X\n", *pDouble, (unsigned int) res );
	res = VarDateFromI4( -657434, pDouble );
	printf( "VarDateFromI4: -657434, %f, %X\n", *pDouble, (unsigned int) res );
	res = VarDateFromI4( -657435, pDouble );
	printf( "VarDateFromI4: -657435, %f, %X\n", *pDouble, (unsigned int) res );

	res = VarDateFromR8( 2958465.9999, pDouble );
	printf( "VarDateFromR8: 2958465.9999, %f, %X\n", *pDouble, (unsigned int) res );
	res = VarDateFromR8( 2958466, pDouble );
	printf( "VarDateFromR8: 2958466, %f, %X\n", *pDouble, (unsigned int) res );
	res = VarDateFromR8( -657434.9999, pDouble );
	printf( "VarDateFromR8: -657434.9999, %f, %X\n", *pDouble, (unsigned int) res );
	res = VarDateFromR8( -657435, pDouble );
	printf( "VarDateFromR8: -657435, %f, %X\n", *pDouble, (unsigned int) res );


	res = VarDateFromR8( 0.0, pDouble );
	printf( "VarDateFromR8: 0.0, %f, %X\n", *pDouble, (unsigned int) res );
	res = VarDateFromR8( 1.0, pDouble );
	printf( "VarDateFromR8: 1.0, %f, %X\n", *pDouble, (unsigned int) res );
	res = VarDateFromR8( 2.25, pDouble );
	printf( "VarDateFromR8: 2.25, %f, %X\n", *pDouble, (unsigned int) res );
	res = VarDateFromR8( -2.0, pDouble );
	printf( "VarDateFromR8: -2.0, %f, %X\n", *pDouble, (unsigned int) res );

	/* Need some parsing function in Linux to emulate this...
	 * Still in progess.
	 */
	for( olePtrIndex = 0; olePtrIndex < nOlePtrs; olePtrIndex ++ )
	{
		res = VarDateFromStr( pOleChar[olePtrIndex], 0, 0, pDouble );
		printf( "VarDateFromStr: %s, %f, %X\n", WtoA(pOleChar[olePtrIndex]), *pDouble, (unsigned int) res );
	}
	
	/* bool from ...
	 */
	printf( "\n\n======== Testing VarBoolFromXXX ========\n");

	res = VarBoolFromI4( 0, pBool );
	printf( "VarBoolFromI4: 0, %d, %X\n", *pBool, (unsigned int) res );
	res = VarBoolFromI4( 1, pBool );
	printf( "VarBoolFromI4: 1, %d, %X\n", *pBool, (unsigned int) res );
	res = VarBoolFromI4( -1, pBool );
	printf( "VarBoolFromI4: -1, %d, %X\n", *pBool, (unsigned int) res );
	res = VarBoolFromI4( 2, pBool );
	printf( "VarBoolFromI4: 2, %d, %X\n", *pBool, (unsigned int) res );

	res = VarBoolFromUI1( ' ', pBool );
	printf( "VarBoolFromUI1: ' ', %d, %X\n", *pBool, (unsigned int) res );
	res = VarBoolFromUI1( '\0', pBool );
	printf( "VarBoolFromUI1: '\\0', %d, %X\n", *pBool, (unsigned int) res );
	res = VarBoolFromUI1( 0x0000, pBool );
	printf( "VarBoolFromUI1: 0x0000, %d, %X\n", *pBool, (unsigned int) res );
	res = VarBoolFromUI1( (unsigned char)0xFFF, pBool );
	printf( "VarBoolFromUI1: 0xFFF, %d, %X\n", *pBool, (unsigned int) res );
	res = VarBoolFromUI1( (unsigned char)0xFFFF, pBool );
	printf( "VarBoolFromUI1: 0xFFFF, %d, %X\n", *pBool, (unsigned int) res );
	
	res = VarBoolFromR8( 0.0, pBool );
	printf( "VarBoolFromR8: 0.0, %d, %X\n", *pBool, (unsigned int) res );
	res = VarBoolFromR8( 1.1, pBool );
	printf( "VarBoolFromR8: 1.1, %d, %X\n", *pBool, (unsigned int) res );
	res = VarBoolFromR8( 0.5, pBool );
	printf( "VarBoolFromR8: 0.5, %d, %X\n", *pBool, (unsigned int) res );
	res = VarBoolFromR8( 0.49, pBool );
	printf( "VarBoolFromR8: 0.49, %d, %X\n", *pBool, (unsigned int) res );
	res = VarBoolFromR8( 0.51, pBool );
	printf( "VarBoolFromR8: 0.51, %d, %X\n", *pBool, (unsigned int) res );
	res = VarBoolFromR8( -0.5, pBool );
	printf( "VarBoolFromR8: -0.5, %d, %X\n", *pBool, (unsigned int) res );
	res = VarBoolFromR8( -0.49, pBool );
	printf( "VarBoolFromR8: -0.49, %d, %X\n", *pBool, (unsigned int) res );
	res = VarBoolFromR8( -0.51, pBool );
	printf( "VarBoolFromR8: -0.51, %d, %X\n", *pBool, (unsigned int) res );

	
	for( olePtrIndex = 0; olePtrIndex < nOlePtrs; olePtrIndex ++ )
	{
		res = VarBoolFromStr( pOleChar[olePtrIndex], 0, 0, pBool );
		printf( "VarBoolFromStr: %s, %d, %X\n", WtoA(pOleChar[olePtrIndex]), *pBool, (unsigned int) res );
	}

	res = VarI1FromBool( VARIANT_TRUE, pByte );
	printf( "VarI1FromBool: VARIANT_TRUE, %d, %X\n", *pByte, (unsigned int) res );

	res = VarUI2FromI2( -1, &i );
	printf( "VarUI2FromI2: -1, %d, %X\n", i, (unsigned int) res );


	/* BSTR from ...
	 */
	printf( "\n\n======== Testing VarBSTRFromXXX ========\n");

	/* integers...
	 */
	res = VarBstrFromI1( -100, 0, 0, &bstr );
	printf( "VarBstrFromI1: -100, %s, %X\n", WtoA( bstr ), (unsigned int) res );

	res = VarBstrFromUI1( 0x5A, 0, 0, &bstr );
	printf( "VarBstrFromUI1: 0x5A, %s, %X\n", WtoA( bstr ), (unsigned int) res );

	res = VarBstrFromI4( 2958465, 0, 0, &bstr );
	printf( "VarBstrFromI4: 2958465, %s, %X\n", WtoA( bstr ), (unsigned int) res );

	/* reals...
	 */
	d=0;
	for( i=0; i<20; i++ )
	{
		/* add an integer to the real number
		 */
		d += ((i%9)+1) * pow( 10, i );
		res = VarBstrFromR8( d, 0, 0, &bstr );
		printf( "VarBstrFromR8: %f, %s, %X\n", d, WtoA( bstr ), (unsigned int) res );
		res = VarBstrFromR8( -d, 0, 0, &bstr );
		printf( "VarBstrFromR8: %f, %s, %X\n", -d, WtoA( bstr ), (unsigned int) res );
	}
	d=0;
	for( i=0; i<20; i++ )
	{
		/* add a decimal to the real number
		 */
		d += ((i%9)+1) * pow( 10, (i*-1) );
		res = VarBstrFromR8( d, 0, 0, &bstr );
		printf( "VarBstrFromR8: %f, %s, %X\n", d, WtoA( bstr ), (unsigned int) res );
		res = VarBstrFromR8( d-1, 0, 0, &bstr );
		printf( "VarBstrFromR8: %f, %s, %X\n", d-1, WtoA( bstr ), (unsigned int) res );
		res = VarBstrFromR8( -d, 0, 0, &bstr );
		printf( "VarBstrFromR8: %f, %s, %X\n", -d, WtoA( bstr ), (unsigned int) res );
	}

	d=0;
	for( i=0; i<20; i++ )
	{
		/* add an integer to the real number
		 */
		d += ((i%9)+1) * pow( 10, i );
		/* add a decimal to the real number
		 */
		d += ((i%9)+1) * pow( 10, (i*-1) );
		res = VarBstrFromR8( d, 0, 0, &bstr );
		printf( "VarBstrFromR8: %f, %s, %X\n", d, WtoA( bstr ), (unsigned int)res );
		res = VarBstrFromR8( -d, 0, 0, &bstr );
		printf( "VarBstrFromR8: %f, %s, %X\n", -d, WtoA( bstr ), (unsigned int) res );
	}



	d=0;
	for( i=0; i<10; i++ )
	{
		/* add an integer to the real number
		 */
		d += ((i%9)+1) * pow( 10, i );
		res = VarBstrFromR4( (float)d, 0, 0, &bstr );
		printf( "VarBstrFromR4: %f, %s, %X\n", d, WtoA( bstr ), (unsigned int) res );
		res = VarBstrFromR4( (float)-d, 0, 0, &bstr );
		printf( "VarBstrFromR4: %f, %s, %X\n", -d, WtoA( bstr ), (unsigned int) res );
	}
	d=0;
	for( i=0; i<10; i++ )
	{
		/* add a decimal to the real number
		 */
		d += ((i%9)+1) * pow( 10, (i*-1) );
		res = VarBstrFromR4( (float)d, 0, 0, &bstr );
		printf( "VarBstrFromR4: %f, %s, %X\n", d, WtoA( bstr ), (unsigned int) res );
		res = VarBstrFromR4( (float)d-1, 0, 0, &bstr );
		printf( "VarBstrFromR4: %f, %s, %X\n", d-1, WtoA( bstr ), (unsigned int) res );
		res = VarBstrFromR4( (float)-d, 0, 0, &bstr );
		printf( "VarBstrFromR4: %f, %s, %X\n", -d, WtoA( bstr ), (unsigned int) res );
	}

	d=0;
	for( i=0; i<10; i++ )
	{
		/* add an integer to the real number
		 */
		d += ((i%9)+1) * pow( 10, i );
		/* add a decimal to the real number
		 */
		d += ((i%9)+1) * pow( 10, (i*-1) );
		res = VarBstrFromR4( (float)d, 0, 0, &bstr );
		printf( "VarBstrFromR4: %f, %s, %X\n", d, WtoA( bstr ), (unsigned int) res );
		res = VarBstrFromR4( (float)-d, 0, 0, &bstr );
		printf( "VarBstrFromR4: %f, %s, %X\n", -d, WtoA( bstr ), (unsigned int) res );
	}

	res = VarBstrFromBool( 0x00, 0, 0, &bstr );
	printf( "VarBstrFromBool: 0x00, %s, %X\n", WtoA( bstr ), (unsigned int) res );
	res = VarBstrFromBool( 0xFF, 0, 0, &bstr );
	printf( "VarBstrFromBool: 0xFF, %s, %X\n", WtoA( bstr ), (unsigned int) res );

	res = VarBstrFromDate( 0.0, 0, 0, &bstr );
	printf( "VarBstrFromDate: 0.0, %s, %X\n", WtoA( bstr ), (unsigned int) res );
	res = VarBstrFromDate( 3.34, 0, 0, &bstr );
	printf( "VarBstrFromDate: 3.34, %s, %X\n", WtoA( bstr ), (unsigned int) res );
	res = VarBstrFromDate( 3339.34, 0, 0, &bstr );
	printf( "VarBstrFromDate: 3339.34, %s, %X\n", WtoA( bstr ), (unsigned int) res );
	res = VarBstrFromDate( 365.00, 0, 0, &bstr );
	printf( "VarBstrFromDate: 365.00, %s, %X\n", WtoA( bstr ), (unsigned int) res );
	res = VarBstrFromDate( 365.25, 0, 0, &bstr );
	printf( "VarBstrFromDate: 365.25, %s, %X\n", WtoA( bstr ), (unsigned int) res );
	res = VarBstrFromDate( 1461.0, 0, 0, &bstr );
	printf( "VarBstrFromDate: 1461.00, %s, %X\n", WtoA( bstr ), (unsigned int) res );
	res = VarBstrFromDate( 1461.5, 0, 0, &bstr );
	printf( "VarBstrFromDate: 1461.5, %s, %X\n", WtoA( bstr ), (unsigned int) res );
	

	res = VarBstrFromBool( 0x00, 0, 0, &bstr );
	printf( "VarBstrFromBool: 0x00, %s, %X\n", WtoA(bstr), (unsigned int) res );
	res = VarBstrFromBool( 0xFF, 0, 0, &bstr );
	printf( "VarBstrFromBool: 0xFF, %s, %X\n", WtoA(bstr), (unsigned int) res );

	res = VarBstrFromDate( 0.0, 0, 0, &bstr );
	printf( "VarBstrFromDate: 0.0, %s, %X\n", WtoA(bstr), (unsigned int) res );
	res = VarBstrFromDate( 3.34, 0, 0, &bstr );
	printf( "VarBstrFromDate: 3.34, %s, %X\n", WtoA(bstr), (unsigned int) res );

	/* Test variant API...
	 */
	printf( "\n\n======== Testing Hi-Level Variant API ========\n");

	bstr = SysAllocString( pOleChar[4] );

	res = VariantClear( &va );
	printf( "Result is: %x\n", (unsigned int)res );

	VariantInit( &va );
	VariantInit( &vb );
	VariantInit( &vc );
	VariantInit( &vd );
	VariantInit( &ve );

	va.vt = VT_BSTR;
	va.u.bstrVal = bstr;
	res = VariantClear( &va );
	printf( "VariantClear: %x\n", (unsigned int)res );
	printf( "VariantClear: %x\n", (unsigned int)res );
	SysFreeString( bstr );
	SysFreeString( bstr );

	res = VariantCopy( &vb, &va );
	printf( "VariantCopy: %x\n", (unsigned int)res );
	res = VariantClear( &vb );
	printf( "VariantClear: %x\n", (unsigned int)res );
	res = VariantClear( &va );
	printf( "VariantClear: %x\n", (unsigned int)res );


	va.vt = VT_R8;
	d = 4.123;
	va.u.dblVal = d;
	res = VariantCopy( &va, &va );
	printf( "VariantCopy %f -> %f: %x\n", V_R8(&va), V_R8(&va), (unsigned int)res );

	va.vt = VT_R8 | VT_BYREF;
	d = 31.123;
	va.u.pdblVal = &d;
	res = VariantCopyInd( &va, &va );
	printf( "VariantCopyInd %f: %x\n", V_R8(&va), (unsigned int)res );

	va.vt = VT_R8;
	d = 1.123;
	va.u.dblVal = d;
	res = VariantCopy( &vb, &va );
	printf( "VariantCopy %f -> %f: %x\n", V_R8(&va), V_R8(&vb), (unsigned int)res );

	va.vt = VT_R8 | VT_BYREF;
	d = 123.123;
	va.u.pdblVal = &d;
	res = VariantCopy( &vb, &va );
	printf( "VariantCopy %f -> %f: %x\n", *(V_R8REF(&va)), *(V_R8REF(&vb)), (unsigned int)res );

	va.vt = VT_R8 | VT_BYREF;
	d = 111.2;
	va.u.pdblVal = &d;
	res = VariantCopyInd( &vb, &va );
	printf( "VariantCopyInd %f -> %f: %x\n", *(V_R8REF(&va)), V_R8(&vb), (unsigned int)res );

	va.vt = VT_R8 | VT_BYREF;
	d = 1211.123453;
	va.u.pdblVal = &d;
	res = VariantChangeTypeEx( &va, &va, 0, 0, VT_I2 );
	printf( "VariantChangeTypeEx %d: %x\n", V_I2(&va), (unsigned int) res );

	va.vt = VT_INT;
	va.u.intVal = 4;
	res = VariantChangeTypeEx(&vb, &va, 0, 0, VT_BSTR );
	printf( "VariantChangeTypeEx %d -> %s: %x\n", V_INT(&va), WtoA(V_BSTR(&vb)), (unsigned int)res );

	va.vt = VT_DATE;
	va.u.date = 34465.332431;
	res = VariantChangeTypeEx(&vb, &va, 0, 0, VT_BSTR );
	printf( "VariantChangeTypeEx %f -> %s: %x\n", V_DATE(&va), WtoA(V_BSTR(&vb)), (unsigned int)res );

	bstr = pOleChar[4];
	va.vt = VT_BSTR;
	va.u.bstrVal = bstr;
	res = VariantChangeTypeEx(&vb, &va, 0, 0, VT_R8 );
	printf( "VariantChangeTypeEx %s -> %f: %x\n", WtoA(V_BSTR(&va)), V_R8(&vb), (unsigned int)res );


	vc.vt = VT_BSTR | VT_BYREF;
	vc.u.pbstrVal = &bstr;
	vb.vt = VT_VARIANT | VT_BYREF;
	vb.u.pvarVal = &vc;
	va.vt = VT_VARIANT | VT_BYREF;
	va.u.pvarVal = &vb;
	res = VariantCopyInd( &vd, &va );
	printf( "VariantCopyInd: %x\n", (unsigned int)res );

	/* test what happens when bad vartypes are passed in
	 */
	printf( "-------------- Testing different VARTYPES ----------------\n" );

	for( i=0; i<100; i++ )
	{
		/* Trying to use variants that are set to be BSTR but
		 * do not contain a valid pointer makes the program crash
		 * in Windows so we will skip those.  We do not need them
		 * anyways to illustrate the behavior.
		 */
		if( i ==  VT_BSTR )
			i = 77;

		va.vt = i;
		d = 4.123;
		va.u.dblVal = d;
		res = VariantCopyInd( &vb, &va );
		printf( "VariantCopyInd: %d -> %x\n", i, (unsigned int)res );

		va.vt = i | VT_BYREF;
		d = 4.123;
		va.u.pdblVal = &d;
		res = VariantCopyInd( &vb, &va );
		printf( "VariantCopyInd: %d -> %x\n", i, (unsigned int)res );

		va.vt = VT_R8;
		d = 4.123;
		va.u.dblVal = d;
		res = VariantChangeTypeEx( &vb, &va, 0, 0, i );
		printf( "VariantChangeTypeEx: %d -> %x\n", i, (unsigned int)res );

		va.vt = VT_R8;
		d = 4.123;
		va.u.dblVal = d;
		res = VariantChangeTypeEx( &vb, &va, 0, 0, i | VT_BYREF );
		printf( "VariantChangeTypeEx: VT_BYREF %d -> %x\n", i, (unsigned int)res );

		va.vt = 99;
		d = 4.123;
		va.u.dblVal = d;
		res = VariantClear( &va );
		printf( "VariantClear: %d -> %x\n", i, (unsigned int)res );

	}
	
	res = VariantClear( &va );
	printf( "VariantClear: %x\n", (unsigned int)res );
	res = VariantClear( &vb );
	printf( "VariantClear: %x\n", (unsigned int)res );
	res = VariantClear( &vc );
	printf( "VariantClear: %x\n", (unsigned int)res );
	res = VariantClear( &vd );
	printf( "VariantClear: %x\n", (unsigned int)res );
	res = VariantClear( &ve );
	printf( "VariantClear: %x\n", (unsigned int)res );


	/* There is alot of memory leaks but this is simply a test program.
	 */

	return 0;
}

