//+-------------------------------------------------------------------------
//
//  Microsoft Windows
//
//  Copyright (C) Microsoft Corporation, 1998 - 1999
//
//  File:       direct.idl
//
//--------------------------------------------------------------------------

//  Direct.idl : IDL source for Direct.dll
// +++++++++++++++++++++++++++++++++++++
// This file will be processed by the MIDL tool to
// produce the type library (Direct.tlb) and marshalling code.
//
//++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++

	

#define C_ONLY 1


//
// from windef.h
#define	MAX_PATH	256

//
// from mmsystem.h 
//
#define MAXPNAMELEN 32					/* max product name length (including NULL) */
#define MAX_JOYSTICKOEMVXDNAME 260		/* max oem vxd name length (including NULL) */


//
//  Direct 3D Retain mode 
//

interface I_dxj_Direct3dRM2;
interface I_dxj_Direct3dRMArray;
interface I_dxj_Direct3dRMFrameArray;
interface I_dxj_Direct3dRMLightArray;
interface I_dxj_Direct3dRMPickArray;
interface I_dxj_Direct3dRMPick2Array;
interface I_dxj_Direct3dRMFaceArray;
interface I_dxj_Direct3dRMViewportArray;
interface I_dxj_Direct3dRMDeviceArray;
interface I_dxj_Direct3dRMVisualArray;		
interface I_dxj_Direct3dRMLight;
interface I_dxj_Direct3dRMVisual;
interface I_dxj_Direct3dRMViewport2;
interface I_dxj_Direct3dRMMeshBuilder2;
interface I_dxj_Direct3dRMFace;
interface I_dxj_Direct3dRMMaterial;
interface I_dxj_Direct3dRMMaterial2;
interface I_dxj_Direct3dRMMesh;	
interface I_dxj_Direct3dRMDevice2;	
interface I_dxj_Direct3dRMFrame2;	
interface I_dxj_Direct3dRMAnimationSet;
interface I_dxj_Direct3dRMWinDevice;
interface I_dxj_Direct3dRMAnimation;
interface I_dxj_Direct3dRMObject;
interface I_dxj_Direct3dRMWrap;
//interface I_dxj_Direct3dRMUserVisual;
interface I_dxj_Direct3dRMShadow;
interface I_dxj_Direct3dRMCallback;                  //reserved for DestroyObjectCallback
interface I_dxj_Direct3dRMDeviceUpdateCallback3;
//interface I_dxj_Direct3dRMUserVisualCallback;	
interface I_dxj_Direct3dRMLoadTextureCallback3;
interface I_dxj_Direct3dRMLoadCallback;	
interface I_dxj_Direct3dRMFrameMoveCallback2;
interface I_dxj_Direct3dRMEnumerateObjectsCallback;

//
//new RM interfaces	
//
interface I_dxj_Direct3dRMFrame3;
interface I_dxj_Direct3dRMMeshBuilder3;
interface I_dxj_Direct3dRMTexture3;
interface I_dxj_Direct3dRMDevice3;
interface I_dxj_Direct3dRMAnimationArray;
interface I_dxj_Direct3dRMAnimation2;
interface I_dxj_Direct3dRMProgressiveMesh;
interface I_dxj_Direct3dRMClippedVisual;
interface I_dxj_Direct3dRMObjectArray;
interface I_dxj_Direct3dRMInterpolator;
interface I_dxj_Direct3dRMMeshInterpolator;
interface I_dxj_Direct3dRMFrameInterpolator;
interface I_dxj_Direct3dRMMaterialInterpolator;
interface I_dxj_Direct3dRMTextureInterpolator;
interface I_dxj_Direct3dRMLightInterpolator;
interface I_dxj_Direct3dRMViewportInterpolator;

//
//  Direct Draw 
//
interface I_dxj_DirectDraw4;	
interface I_dxj_DirectDrawSurface4;
interface I_dxj_DirectDraw7;	
interface I_dxj_DirectDrawSurface7;
interface I_dxj_DirectDrawEnumSurfaces;
interface I_dxj_DirectDrawClipper;
interface I_dxj_DirectDrawPalette;			
interface I_dxj_DirectDrawColorControl;
interface I_dxj_DirectDrawGammaControl;
interface I_dxj_DirectDrawEnum;				
interface I_dxj_DirectDrawEnumModes;		
interface I_dxj_DirectDrawIdentifier;		
//interface I_dxj_DDEnumVideoPorts;
//interface I_dxj_DirectDrawVideoPort;
//interface I_dxj_DDVideoPortContainer;




//
//  Direct 3D Imediate mode 
//

//interface I_dxj_Direct3dViewport3;
//interface I_dxj_Direct3dMaterial3;
//interface I_dxj_Direct3dLight;	
//interface I_dxj_D3dValidateCallback;
interface I_dxj_Direct3d7;
interface I_dxj_Direct3dDevice7;
interface I_dxj_Direct3dVertexBuffer7;	
interface I_dxj_Direct3DEnumDevices;	
interface I_dxj_Direct3DEnumPixelFormats;

//
//  Direct Input
//
//	interface IdInputDevice;
interface I_dxj_DirectInput;
interface I_dxj_DirectInputDevice;
interface I_dxj_DirectInputDevice2;
interface I_dxj_DirectInputEffect;
interface I_dxj_DirectInputEnumEffects;
interface I_dxj_DIEnumDevices;
interface I_dxj_DIEnumDeviceObjects;
interface I_dxj_DIEnumCreatedEffectObjects;


//
// DirectSound
//

interface I_dxj_DirectSound;
interface I_dxj_DirectSoundBuffer;	
interface I_dxj_DirectSound3dBuffer;
interface I_dxj_DirectSound3dListener;
interface I_dxj_DirectSoundCapture;
interface I_dxj_DirectSoundCaptureBuffer;
interface I_dxj_DirectSoundNotify;
interface I_dxj_DSEnum;


//
// DirectPlay & DirectPlayLobby
//

interface I_dxj_DirectPlay4;
interface I_dxj_DPLConnection;
interface I_dxj_DPAddress;	
interface I_dxj_DirectPlayLobby3;	
interface I_dxj_DPEnumConnections;
interface I_dxj_DPEnumPlayers2;	
interface I_dxj_DPEnumAddress;
interface I_dxj_DPEnumSessions2;
interface I_dxj_DPEnumAddressTypes;
interface I_dxj_DPEnumLocalApplications;
interface I_dxj_DPEnumServiceProviders;
interface I_dxj_DirectPlaySessionData;
		  
//
// Direct Music

interface I_dxj_DirectMusicLoader;
interface I_dxj_DirectMusicSegment;			  
interface I_dxj_DirectMusicPerformance;
interface I_dxj_DirectMusicComposer;
interface I_dxj_DirectMusicBand;
interface I_dxj_DirectMusicStyle;
interface I_dxj_DirectMusicChordMap;
interface I_dxj_DirectMusicSegmentState;
interface I_dxj_DirectMusicCollection;


#include "ocidl.idl"

//
// Base types 
//
import "wtypes.idl";	

[
	
	 uuid(E1211242-8E94-11d1-8808-00C04FC2C602),
	 version(1.0),
         helpstring("DirectX 7 for Visual Basic Type Library"),
 	 helpfile ("directx.chm")
]

library DxVBLib
{


#ifndef C_ONLY
    #define USERARG IDispatch	
	#define RMCLONEOBJECT I_dxj_Direct3dRMObject

    #include "directvbconst.idl"

	typedef long			Handle;
	typedef long			HWnd;
      typedef float           d3dval;
	typedef long			d3dcolor ;
	typedef long			d3dMaterialHandle;	
      typedef long            d3dMatrixHandle;
	typedef long			d3dTextureHandle; 
	typedef long			d3drmGroupIndex;
	typedef long			Dpid;			
      typedef unsigned char   Byte;
	typedef long			HRSrc;	
	


	#define I_dxj_DPEnumPlayers2	I_dxj_DPEnumPlayers
	#define I_dxj_DPEnumSessions2	I_dxj_DPEnumSessions
	#define I_dxj_DDEnumModes2		I_dxj_DDEnumModes
	#define I_dxj_DDEnumSurfaces2	I_dxj_DDEnumSurfaces


#else

      #define USERARG IUnknown
	#define RMCLONEOBJECT IUnknown

	typedef unsigned char	Byte;
	typedef long			Handle;
	typedef long			HWnd;
	typedef float			d3dvalue;
	typedef long			d3dcolor ;
	typedef long			HRSrc;
	typedef long			Dpid;			

	typedef long			d3dMatrixHandle;
	typedef long			d3dTextureHandle;
	

	typedef long			d3dColorModel;	
	typedef long			d3dLightType;
	typedef long			d3dMaterialHandle;
   	typedef long            d3drmSaveFlags; 
	typedef long			d3dPrimitiveType;
	typedef long			d3dFVFFlags;
	typedef long			d3dVertexType;
	typedef long			d3dLightStateType;
	typedef long			d3dRenderStateType;
	typedef long			d3dRenderStateSingle;
	typedef long			d3dTransformStateType;

	typedef long			d3drmCombineType;
	typedef long			d3drmColorModel;
	typedef long			d3drmLightType;	
	typedef long			d3drmFogMode;
	typedef long			d3drmProjectionType;	
	typedef long			d3drmGroupIndex;
   	typedef long            d3drmMappingFlags;

	
	//ENUMERATORS
	typedef long			d3drmRenderQuality;
	typedef long			d3drmTextureQuality;
	typedef long			d3drmAnimationOptions;
	typedef long			d3drmWrapType;		
	typedef long			d3drmColorSource;		
	typedef long			d3drmMaterialMode;	
	typedef long			d3drmSortMode;		
	typedef long			d3drmFrameConstraint;	
	typedef long			d3drmZbufferMode;
	typedef long			d3drmXofFormat;		
   	typedef long             d3drmLoadFlags;
	//typedef long			d3drmUserVisualReason;
	

	//FLAGS
	#define dxBool						long
	#define	dplConnectionFlags			long
	#define	dpGroupFlags				long
	#define dpPlayerFlags				long
	#define dpEnumConnectionFlags		long
	#define dpEnumGroupFlags			long
	#define dpEnumPlayerFlags			long
	#define dpEnumSessionFlags			long
	#define dpCapsFlags					long
	#define dpGetFlags					long
	#define dpGetCapsFlags				long
	#define dpOpenFlags					long
	#define dpMessageQueueFlags			long
	#define dpReceiveFlags				long
	#define dpSendFlags					long
	#define dpSetFlags					long
	#define dplMsg						long
	#define dplWait						long
	#define dpSessionFlags				long
	#define d3ddpFlags					long
	#define d3dNextFlags				long
	#define d3dClearFlags				long
	#define d3dTransformFlags			long
	#define d3dTextureStageStateType    long
	#define d3dTextureStageSingle		long
	#define d3dProcessVerticesFlags		long
	#define d3dStateBlockType			long
	#define ddLockFlags					long
	#define d3dVopFlags					long
	#define ddpCapsFlags				long
	#define dpConnectFlags				long
	#define ddpCapsFlags				long
	#define ddedmFlags					long
	#define ddsclFlags					long
	#define ddBltFlags					long
	#define ddBltFastFlags				long
	#define ddFlipFlags					long
	#define ddOverZFlags				long
	#define ddOverFlags					long
	#define ddEnumOverFlags				long
	#define ddEnumOverlayZFlags			long
	#define ddGbsFlags					long
	#define ddGfsFlags					long
	#define ddCKeyFlags					long
	#define ddSgrFlags					long
	#define ddEnumSurfacesFlags			long
	#define ddBitDepthFlags				long
	#define ddsdmFlags					long
	#define ddWaitVBFlags				long
	#define ddDeviceIDFlags				long
	
	#define	d3dDevInfoId				long
	#define d3dVertexComponent			long	
	#define d3dTAFlags					long
	#define d3dVTXPCapsFlags			long

	#define	d3drmViewportClearFlags		long
	#define d3drmLoadFlags				long
	#define d3drmCreateDeviceFlags		long
	#define d3drmHandedness				long
	#define d3drmCallbackOrderFlags 	long
	#define d3drmFogMethod				long
	#define d3drmFogMode				long
	#define d3drmTravesalFlags			long
	#define d3drmZBufferMode			long	
	#define d3drmRayPickFlags			long
	#define d3drmAddFacesFlags			long
	#define d3drmAddMeshbuilderFlags	long
	#define d3drmAddTrianglesVt			long
	#define d3drmAddMeshBuilderFlags	long
	#define d3drmGenerateNormalsFlags	long
	#define d3drmParentingFlags			long
	#define d3drmFptfFlags				long
	#define d3drmRenderModeFlags		long
	#define d3drmWireFrameFlags			long
	#define d3drmTextureChangedFlags	long
	#define d3drmTextureCacheFlags		long
	#define d3drmTraversalFlags			long
	#define d3drmInterpolationFlags		long
	#define d3drmShadowFlags			long
		
	#define dssclFlags					long
	#define dsSpeakerFlags				long
	#define dsbStatusFlags				long
	#define dsbPlayFlags				long
	#define dsbLockFlags				long
	#define ds3dApplyFlags				long
	#define ds3dModeFlags				long
	#define dscbStatusFlags				long
	#define dscbStartFlags				long
	#define dscbLockFlags				long
	
	#define diEnumDevicesFlags			long
	#define diDeviceType				long
	#define diDftFlags					long
	#define diDgddFlags					long
	#define diPhFlags					long
	#define diSclFlags					long
	#define diDataFormatFlags			long
    #define diCommonDataFormats			long
	#define diDeviceObjInstanceFlags	long
	#define disddFlags					long

	#define DIEFTFLAGS 					long
	#define DIEFTFLAGS 					long
	#define DIGFFSFLAGS 				long
	#define DISFFCFLAGS 				long
	#define DIEPFLAGS 					long
	#define DIEFFFLAGS 					long
	
	
#endif

//- clone is a keyword in Java so we need to rename it to cloneObject
//	consider renaming the C entry point
#ifdef C_ONLY
	#include "directxstruct.idl"
	#define cloneObject clone
#else
    #include "directvbstruct.idl"
#endif 



#ifdef JAVA_ONLY
	#define AVERT float
	#define AD3DRECT long
	#define AD3DLIGHTDATA long
	#define APAL Byte
	#define ATYPE Byte
	#define ABYTE Byte
	#define ALONG long

#else
	#define AVERT void
	#define ATYPE void
	#define ABYTE void
	#define ALONG void

	#define AD3DRECT D3DRECT_CDESC
	#define AD3DLIGHTDATA D3DLIGHTDATA_CDESC
	#define APAL PALETTEENTRY_CDESC

#endif



///////////////////////////////////////////////////////////////////////////
// 
// DirectPlay and DirectPlayLobby Interfaces 
// 
///////////////////////////////////////////////////////////////////////////

	[
		object,
		uuid(9F76FF05-8E92-11d1-8808-00C04FC2C602),
		helpstring("I_dxj_DPAddress Interface"),
		pointer_default(unique),
		local,
		helpcontext(300200)
	]
	interface I_dxj_DPAddress : IUnknown	
	{
		import "oaidl.idl";

		[hidden]	[helpcontext(300201)]		HRESULT setAddress([in] long pAddress,[in] long length);
		[hidden]	[helpcontext(300202)]		HRESULT getAddress([out] long *pAddress,[out] long * length);
	};



	[
		object,
		uuid(9F76FF06-8E92-11d1-8808-00C04FC2C602),
		helpstring("I_dxj_DPLConnection Interface"),
		pointer_default(unique),
		local,
		helpcontext(300400)

	]
	interface I_dxj_DPLConnection : IUnknown	
	{
		import "oaidl.idl";

		[hidden]		HRESULT getConnectionStruct([out] long *connect);
		[hidden]		HRESULT setConnectionStruct([in] long connect);
		[helpcontext(300401)] 	HRESULT setFlags([in] dplConnectionFlags flags);
		[helpcontext(300402)]	HRESULT getFlags([out,retval] dplConnectionFlags *ret);
		[helpcontext(300403)] 	HRESULT setSessionDesc([in] I_dxj_DirectPlaySessionData *sessionDesc);
		[helpcontext(300404)] 	HRESULT getSessionDesc([out,retval]  I_dxj_DirectPlaySessionData **sessionDesc);
		[helpcontext(300405)]  HRESULT setGuidSP([in] BSTR guid);
		[helpcontext(300406)]	HRESULT getGuidSP([out,retval] BSTR *guid);
		[helpcontext(300407)]	HRESULT setAddress([in] I_dxj_DPAddress *address);
		[helpcontext(300408)]	HRESULT getAddress([out,retval] I_dxj_DPAddress **address);
		[helpcontext(300409)]	HRESULT setPlayerShortName([in] BSTR name);
		[helpcontext(300410)]	HRESULT getPlayerShortName([out,retval] BSTR *name);
		[helpcontext(300411)]	HRESULT setPlayerLongName([in] BSTR name);
		[helpcontext(300412)]	HRESULT getPlayerLongName([out,retval] BSTR *name);
	};


	[
		object,
		uuid(9F76FF0A-8E92-11d1-8808-00C04FC2C602),
		helpstring("I_dxj_DPEnumConnections Interface"),
		pointer_default(unique),
		local,
		helpcontext(300600)
	]
	interface I_dxj_DPEnumConnections : IUnknown
	{
		import "oaidl.idl";
		[helpcontext(300601)]		HRESULT getAddress([in] long index, [out,retval] I_dxj_DPAddress **retV);
		[helpcontext(300602)]		HRESULT getFlags([in] long index, [out,retval] long *retV);
		[helpcontext(300603)]		HRESULT getGuid([in] long index, [out,retval] BSTR *retV);
		[helpcontext(300604)]		HRESULT getName([in] long index, [out,retval] BSTR *retV);
		[helpcontext(300605)]		HRESULT getCount([out,retval]long *count);
	};



	[
		object,
		uuid(9F76FF0B-8E92-11d1-8808-00C04FC2C602),
		helpstring("I_dxj_DPEnumPlayers2 Interface"),
		pointer_default(unique),
		local,
		helpcontext(300800)
	]
	interface I_dxj_DPEnumPlayers2 : IUnknown
	{
		import "oaidl.idl";
		[helpcontext(300801)]		HRESULT getCount([out,retval]long *count);
		[helpcontext(300802)]		HRESULT getFlags([in] long index, [out,retval]long *count);
		[helpcontext(300803)]		HRESULT getType([in] long index, [out,retval]long *count);
		[helpcontext(300804)]		HRESULT getDPID([in] long index, [out,retval]long *count);
		[helpcontext(300805)]		HRESULT getShortName([in] long index, [out,retval] BSTR *retV);
		[helpcontext(300806)]		HRESULT getLongName([in] long index, [out,retval] BSTR *retV);

	};

	[
		object,
		uuid(9F76FF0C-8E92-11d1-8808-00C04FC2C602),
		helpstring("I_dxj_DPEnumSessions2 Interface"),
		pointer_default(unique),
		local,
		helpcontext(301000)
	]
	interface I_dxj_DPEnumSessions2 : IUnknown
	{
		import "oaidl.idl";
		[helpcontext(301001)]		HRESULT getItem( [in]long index, [out,retval] I_dxj_DirectPlaySessionData **retval);
                [helpcontext(301002)]           HRESULT getCount([out,retval]long *count);
	};



	[
		object,
		uuid(9F76FF0D-8E92-11d1-8808-00C04FC2C602),
		helpstring("I_dxj_DPEnumServiceProviders Interface"),
		pointer_default(unique),
		hidden,
		local,
		helpcontext(301200)
	]
	interface I_dxj_DPEnumServiceProviders : IUnknown 
	{
		import "oaidl.idl";
		[helpcontext(301201)]		HRESULT getCount([out,retval]long *count);
		[helpcontext(301202)]		HRESULT getName([in] long index,[out,retval] BSTR *ret);
		[helpcontext(301203)]		HRESULT getGuid([in] long index,[out,retval] BSTR *ret);
		[helpcontext(301204)]		HRESULT getVersion([in] long index,[in] long *majorVersion,[in,out] long *minorVersion);
	};

	[
		object,
		uuid(9F76FF0E-8E92-11d1-8808-00C04FC2C602),
		helpstring("I_dxj_DPEnumLocalApplications Interface"),
		pointer_default(unique),
		local,
		helpcontext(301400)
	]
	interface I_dxj_DPEnumLocalApplications : IUnknown 
	{
		import "oaidl.idl";
 		[helpcontext(301401)]		HRESULT getCount([out,retval]long *count);
		[helpcontext(301402)]		HRESULT getName([in] long index,[out,retval] BSTR *ret);
		[helpcontext(301403)]		HRESULT getGuid([in] long index,[out,retval] BSTR *ret);
	};

	[
		object,
		uuid(9F76FF11-8E92-11d1-8808-00C04FC2C602),
		helpstring("I_dxj_DirectPlayMessage Interface"),
		pointer_default(unique),
		local,
		helpcontext(301600)
	]
	interface I_dxj_DirectPlayMessage : IUnknown	
	{
		import "oaidl.idl";

		[helpcontext(301601)]		HRESULT writeGuid([in] BSTR val);
		[helpcontext(301602)]		HRESULT readGuid([out,retval] BSTR *val);

		[helpcontext(301603)]		HRESULT writeString([in] BSTR val);
		[helpcontext(301604)]		HRESULT readString([out,retval] BSTR *val);
		
		[helpcontext(301605)]		HRESULT writeLong([in] long val);
		[helpcontext(301606)]		HRESULT readLong([out,retval] long *val);

		[helpcontext(301607)]		HRESULT writeShort([in] short val);
		[helpcontext(301608)]		HRESULT readShort([out,retval] short *val);

		[helpcontext(301609)]		HRESULT writeSingle([in] float val);
		[helpcontext(301610)]		HRESULT readSingle([out,retval] float *val);

		[helpcontext(301611)]		HRESULT writeDouble([in] double val);
		[helpcontext(301612)]		HRESULT readDouble([out,retval] double *val);

		[helpcontext(301613)]		HRESULT writeByte([in] Byte val);
		[helpcontext(301614)]		HRESULT readByte([out,retval] Byte *val);

		[helpcontext(301615)]		HRESULT moveToTop();
		[helpcontext(301616)]		HRESULT clear();
		[helpcontext(301617)]		HRESULT getMessageSize([out,retval] long *ret);
		[helpcontext(301618)]		HRESULT getMessageData([in,out] void *userDefinedType);		
		[helpcontext(301619)]		HRESULT setMessageData([in] void *userDefinedType,[in] long size);		

		[hidden]					HRESULT getPointer([out,retval] long *ret);

		//new methods need to be put in master help id list
		[helpcontext(301620)]			HRESULT readSysMsgConnection([out,retval] I_dxj_DPLConnection **ret);
		[helpcontext(301621), hidden]			HRESULT readSysMsgSessionDesc([out,retval] I_dxj_DirectPlaySessionData **ret);
		[helpcontext(301622), hidden]			HRESULT readSysMsgData([out,retval] BSTR *ret);
		[helpcontext(301623)]			HRESULT readSysChatString([out,retval] BSTR *ret);
		[helpcontext(301624)]			HRESULT moveToSecureMessage	();
	};


	[
		object,
		uuid(9F76FF12-8E92-11d1-8808-00C04FC2C602),
		helpstring("I_dxj_DirectPlaySessionData Interface"),
		pointer_default(unique),
		local,
		helpcontext(301800)
	]
	interface I_dxj_DirectPlaySessionData : IUnknown	
	{
		import "oaidl.idl";
		[helpcontext(301801)]		HRESULT setGuidInstance([in] BSTR guid);
		[helpcontext(301802)]		HRESULT getGuidInstance([out,retval] BSTR *guid);
		[helpcontext(301803)]		HRESULT setGuidApplication([in] BSTR guid);
		[helpcontext(301804)]		HRESULT getGuidApplication([out,retval] BSTR *guid);
		[helpcontext(301805)]		HRESULT setMaxPlayers([in] long val);
		[helpcontext(301806)]		HRESULT getMaxPlayers([out,retval] long *val);
		[hidden,helpcontext(301807)] HRESULT setCurrentPlayers([in] long val);
		[helpcontext(301808)]		HRESULT getCurrentPlayers([out,retval] long *val);
		[helpcontext(301809)]		HRESULT setSessionName([in] BSTR val);
		[helpcontext(301810)]		HRESULT getSessionName([out,retval] BSTR *val);
		[helpcontext(301811)]		HRESULT setSessionPassword([in] BSTR val);
		[helpcontext(301812)]		HRESULT getSessionPassword([out,retval] BSTR *val);
		[helpcontext(301813)]		HRESULT setUser1([in] long val);
		[helpcontext(301814)]		HRESULT getUser1([out,retval] long *val);
		[helpcontext(301815)]		HRESULT setUser2([in] long val);
		[helpcontext(301816)]		HRESULT getUser2([out,retval] long *val);
		[helpcontext(301817)]		HRESULT setUser3([in] long val);
		[helpcontext(301818)]		HRESULT getUser3([out,retval] long *val);
		[helpcontext(301819)]		HRESULT setUser4([in] long val);
		[helpcontext(301820)]		HRESULT getUser4([out,retval] long *val);		
		
		[helpcontext(301821)]		HRESULT setFlags([in] dpSessionFlags val);
		[helpcontext(301822)]		HRESULT getFlags([out,retval] long *val);		
		[hidden,helpcontext(301823)] HRESULT getData([out] void *val);

	};




	[
		object,
		uuid(9F76FF0F-8E92-11d1-8808-00C04FC2C602),
		helpstring("IDirectPlay4 Interface"),
		pointer_default(unique),
		local,
		helpcontext(302000)
	]
	interface I_dxj_DirectPlay4 : IUnknown	
	{
		import "oaidl.idl";

		[hidden]		HRESULT InternalSetObject([in] IUnknown *lpdd);
		[hidden]		HRESULT InternalGetObject([out, retval] IUnknown **lpdd);

		//
		// *** I_dxj_DirectPlay4 methods ***
		//
		[helpcontext(302001)]		HRESULT addGroupToGroup([in] long ParentGroupId, [in] long GroupId);
		[helpcontext(302002)]		HRESULT addPlayerToGroup([in] long groupId, [in] long playerId);
		[helpcontext(302003)]		HRESULT cancelMessage([in] long msgid);				//FLAGS ALWAYS 0
		[helpcontext(302004)]		HRESULT cancelPriority([in] long minPrority ,[in] long maxPriority); //FLAGS ALWAYS 0
		[helpcontext(302005)]		HRESULT close();		
		
		[helpcontext(302006)]		HRESULT createGroup([in] BSTR friendlyName, [in] BSTR formalName, [in] dpGroupFlags flags,
							[out,retval] long *v1);
		[helpcontext(302007)]		HRESULT createGroupInGroup([in] long parentid,[in] BSTR friendlyName, [in] BSTR formalName,
							[in] dpGroupFlags flags, [out,retval] long *v1);
													
		[helpcontext(302008)]		HRESULT createPlayer([in] BSTR friendlyName, [in] BSTR formalName,
							[in] long receiveEvent,	[in] dpPlayerFlags flags,
							[out,retval] long *v1);
		[helpcontext(302009)]		HRESULT deleteGroupFromGroup([in] long groupParentId, [in] long groupId);
		[helpcontext(302010)]		HRESULT deletePlayerFromGroup([in] long groupId, [in] long playerId);
		[helpcontext(302011)]		HRESULT destroyGroup([in] long groupId);
		[helpcontext(302012)]		HRESULT destroyPlayer([in] long playerId);
		[helpcontext(302013)]		HRESULT getDPEnumConnections([in] BSTR guid,[in] dpEnumConnectionFlags flags, [out,retval] I_dxj_DPEnumConnections **retVal);
		[helpcontext(302014)]		HRESULT getDPEnumGroupPlayers([in] long groupId, [in] BSTR sessionGuid, [in] dpEnumPlayerFlags flags, [out,retval] I_dxj_DPEnumPlayers2 **retVal);
		[helpcontext(302015)]		HRESULT getDPEnumGroups( [in] BSTR sessionGuid, [in] dpEnumGroupFlags flags, [out,retval] I_dxj_DPEnumPlayers2 **retVal);
		[helpcontext(302016)]		HRESULT getDPEnumGroupsInGroup( [in] long groupId,[in] BSTR sessionGuid, [in] dpEnumGroupFlags flags, [out,retval] I_dxj_DPEnumPlayers2 **retVal);
		[helpcontext(302017)]		HRESULT getDPEnumPlayers( [in] BSTR sessionGuid, [in] dpEnumPlayerFlags flags, [out,retval] I_dxj_DPEnumPlayers2 **retVal);

		[helpcontext(302018)]		HRESULT getDPEnumSessions([in] I_dxj_DirectPlaySessionData *sessionDesc, [in] long timeOut, [in] dpEnumSessionFlags flags, [out,retval] I_dxj_DPEnumSessions2 **retVal);
		
		[helpcontext(302019)]		HRESULT getCaps([in,out] DPCAPS_CDESC *caps, [in] dpGetCapsFlags flags);



		[helpcontext(302020)]		HRESULT getGroupData([in] long groupId,[in] dpGetFlags flags,[out,retval] BSTR *ret);

		[helpcontext(302021)]		HRESULT getGroupFlags([in] long groupId,	[out,retval]  dpGroupFlags * flags);

		[helpcontext(302022)]		HRESULT getGroupLongName([in] long groupId, [out,retval] BSTR *name);
		[helpcontext(302023)]		HRESULT getGroupShortName([in] long groupId, [out,retval] BSTR *name);
		[helpcontext(302024)]		HRESULT getGroupParent([in] long groupId,[out,retval] long* ret);

		[helpcontext(302025)]		HRESULT getGroupOwner([in] long groupId, [out,retval] long * ret);

		[helpcontext(302026)]		HRESULT getMessageCount([in] long playerId, [out,retval] long *count);
		[helpcontext(302027)]		HRESULT getMessageQueue([in] long from, [in] long to, [in] dpMessageQueueFlags flags, [in,out] long *nMessage,[in,out] long *nBytes);
		[helpcontext(302028)]		HRESULT getPlayerAccountId([in] long playerid,[out,retval] BSTR *acctid);		
		[helpcontext(302029)]		HRESULT getPlayerAddress([in] long playerId, [out,retval] I_dxj_DPAddress **ret);
		[helpcontext(302030)]		HRESULT getPlayerCaps([in] long playerId, [out] DPCAPS_CDESC *caps, [in] dpGetCapsFlags flags);
		[helpcontext(302031)]		HRESULT getPlayerData([in] long playerId, [in] dpGetFlags flags, [out,retval] BSTR *ret);
		[helpcontext(302032)]		HRESULT getPlayerFlags([in] long playerid,[out,retval] dpPlayerFlags *retflags);


		// docdoc GetPlayerName replaced by two below.
		[helpcontext(302033)]		HRESULT getPlayerFormalName([in] long playerId, [out,retval] BSTR *name);
		[helpcontext(302034)]		HRESULT getPlayerFriendlyName([in] long playerId, [out,retval] BSTR *name);

		[helpcontext(302035)]		HRESULT getSessionDesc([in,out] I_dxj_DirectPlaySessionData **sessionDesc);
				
		[helpcontext(302036)]		HRESULT initializeConnection([in] I_dxj_DPAddress *address);  //flags not used

		[helpcontext(302037)]		HRESULT open([in,out] I_dxj_DirectPlaySessionData *sessionDesc,
							[in] dpOpenFlags flags); //flags must be zero

		
		[helpcontext(302038)]		HRESULT receive([in, out] long* fromPlayerId, [in, out] long* toPlayerId, 
							[in] dpReceiveFlags flags, [out,retval] I_dxj_DirectPlayMessage **ret);
		[hidden,helpcontext(302039)]	HRESULT receiveSize([in, out] long* fromPlayerId, [in, out] long* toPlayerId,
							[in] dpReceiveFlags flags, [out,retval] int* dataSize);

		[helpcontext(302040)]		HRESULT secureOpen(
							[in] I_dxj_DirectPlaySessionData *sessiondesc,
							[in] dpOpenFlags flags,
							[in] DPSECURITYDESC_CDESC *security,
							[in] DPCREDENTIALS_CDESC  *credentials);

		[helpcontext(302041)]		HRESULT send([in] long fromPlayerId, [in] long toPlayerId,  
							[in] dpSendFlags flags, [in] I_dxj_DirectPlayMessage *msg);
		[helpcontext(302042)]		HRESULT sendChatMessage([in] long fromPlayerId, [in] long toPlayerId,  
							[in] dpSendFlags flags, [in] BSTR message);
		[helpcontext(302043)]		HRESULT sendEx([in] long fromPlayerId, [in] long toPlayerId,  
							[in] dpSendFlags flags, [in] I_dxj_DirectPlayMessage *msg, [in] long priority, 
							[in] long timeout, [in] long context,[out,retval] long *messageid);

		[helpcontext(302044)]		HRESULT createMessage([out,retval] I_dxj_DirectPlayMessage **msg);

		[helpcontext(302045)]		HRESULT setGroupConnectionSettings([in] long id,[in] I_dxj_DPLConnection *connection); //flags must be zero
		
		[helpcontext(302046)]		HRESULT setGroupData([in] long groupId, [in] BSTR data, [in] dpSetFlags flags);
		[helpcontext(302047)]		HRESULT setGroupName([in] long groupId, [in] BSTR friendlyName, 
							[in] BSTR formalName, [in] dpSetFlags flags); 

		[helpcontext(302048)]		HRESULT setGroupOwner([in] long groupId, [in] long ownerId);

		[helpcontext(302049)]		HRESULT setPlayerData([in] long playerId, [in] BSTR data, [in] dpSetFlags flags);

		[helpcontext(302050)]		HRESULT setPlayerName([in] long playerId, [in] BSTR friendlyName, [in] BSTR formalName, [in] dpSetFlags flags); 

		[helpcontext(302051)]		HRESULT setSessionDesc([in] I_dxj_DirectPlaySessionData *sessionDesc); //flags not used
		
		[helpcontext(302052)]		HRESULT startSession([in] long id); //flags not used

		[helpcontext(302053)]		HRESULT createSessionData([out,retval] I_dxj_DirectPlaySessionData **sessionDesc);
	};



	[
		object,
		uuid(9F76FF10-8E92-11d1-8808-00C04FC2C602),
		helpstring("I_dxj_DirectPlayLobby3 Interface"),
		pointer_default(unique),
		local,
		helpcontext(302200)
	]
	interface I_dxj_DirectPlayLobby3 : IUnknown	
	{
		import "oaidl.idl";

		[hidden]		HRESULT InternalSetObject([in] IUnknown *lpdd);
		[hidden]		HRESULT InternalGetObject([out, retval] IUnknown **lpdd);

		[helpcontext(302201)]		HRESULT connect([in] dpConnectFlags flags, [out,retval] I_dxj_DirectPlay4 **directPlay);


		[helpcontext(302202)]		HRESULT getDPEnumLocalApplications( [out,retval] I_dxj_DPEnumLocalApplications **retVal); //flags are zero


		[helpcontext(302203)]		HRESULT getConnectionSettings([in] long applicationId, 
							[out,retval] I_dxj_DPLConnection **connection); 


		[helpcontext(302204)]		HRESULT receiveLobbyMessage([in] long applicationId,
									[in,out] long *messageFlags,
									[out,retval] I_dxj_DirectPlayMessage **data);
		[hidden,helpcontext(302205)]		HRESULT receiveLobbyMessageSize([in] long applicationId,
									[in,out] long *messageFlags,
									[out,retval] long *dataSize);

		//TODO CONSIDER CHANGING THIS!!!
		[helpcontext(302206)]		HRESULT runApplication( 
							[in] I_dxj_DPLConnection *connection,
							[in] long receiveEvent,
							[out,retval] long * applicationId);

		[helpcontext(302207)]		HRESULT sendLobbyMessage([in] dplMsg flags,
								[in] long applicationId,
								[in] I_dxj_DirectPlayMessage *msg);
								

		[helpcontext(302208)]		HRESULT setConnectionSettings([in] long applicationId, 
									  [in] I_dxj_DPLConnection *connection);

		[helpcontext(302209)]		HRESULT setLobbyMessageEvent([in] long applicationId, [in] long receiveEvent);
		[helpcontext(302210)]		HRESULT registerApplication( [in] DPAPPLICATIONDESC2_CDESC *ApplicationInfo); 
		[helpcontext(302211)]		HRESULT unregisterApplication( [in] BSTR guidApplication); 
		[helpcontext(302212)]		HRESULT waitForConnectionSettings([in] dplWait flags);
		[helpcontext(302213)]		HRESULT createMessage([out,retval] I_dxj_DirectPlayMessage **msg);
		[helpcontext(302214)]		HRESULT createConnectionData([out,retval] I_dxj_DPLConnection **connection);

		[helpcontext(302215)]		HRESULT createINetAddress([in] BSTR addr,[in] int port,[out,retval] I_dxj_DPAddress **ret);
		[helpcontext(302216)]		HRESULT createComPortAddress([in] long port,[in] long baudRate, [in] long stopBits, [in] long parity, [in] long flowcontrol,[out,retval] I_dxj_DPAddress **ret);
		[helpcontext(302217)]		HRESULT createLobbyProviderAddress([in] BSTR guid,[out,retval] I_dxj_DPAddress **ret);
		[helpcontext(302218)]		HRESULT createServiceProviderAddress([in] BSTR guid,[out,retval] I_dxj_DPAddress **ret);
		[helpcontext(302219)]		HRESULT createModemAddress([in] BSTR modem, [in] BSTR phone, [out,retval] I_dxj_DPAddress **ret);
		[helpcontext(302220)]		HRESULT createIPXAddress([out,retval] I_dxj_DPAddress **ret);
		[helpcontext(302221),hidden]		HRESULT createCustomAddress([in] long size, [in] void *data,[out,retval] I_dxj_DPAddress **ret);
		
		[helpcontext(302222)]		HRESULT getModemName([in] long index,[out,retval] BSTR *name);
		[helpcontext(302223)]		HRESULT getModemCount([out,retval] long *count);
	};
	

///////////////////////////////////////////////////////////////////////////
//
// RM INTERFACE CALLBACKS
//
///////////////////////////////////////////////////////////////////////////


	[	object,
		uuid(BBD5AD04-8E91-11d1-8808-00C04FC2C602),	// Direct44
		helpstring("I_dxj_Direct3dRMEnumerateObjectsCallback Interface"),
		pointer_default(unique),
		helpcontext(302400)
	]	
	interface I_dxj_Direct3dRMEnumerateObjectsCallback : IUnknown
	{
		import "oaidl.idl";

		[helpcontext(302401)]		HRESULT callbackRMEnumerateObjects([in] I_dxj_Direct3dRMObject *object, [in] USERARG *userArgument);
	};
	
	
	[	object,
		uuid(BBD5AD03-8E91-11d1-8808-00C04FC2C602),  //Direct54
		helpstring("I_dxj_Direct3dRMCallback Interface"),
		pointer_default(unique),
		helpcontext(302600)
	]
	interface I_dxj_Direct3dRMCallback : IUnknown
	{
		import "oaidl.idl";

		// This function is called after the object has been destroyed,
		// so this function cannot be called with the object as argument.
		[helpcontext(302601)]		HRESULT callbackRMDestroyObject([in] USERARG *args);
	};

	/*
	[	object,
		uuid(BBD5AD06-8E91-11d1-8808-00C04FC2C602),	
		helpstring("I_dxj_Direct3dRMUserVisualCallback Interface"),
		pointer_default(unique),
		helpcontext(302800)
	]	
	interface I_dxj_Direct3dRMUserVisualCallback : IUnknown
	{
		import "oaidl.idl";

		[helpcontext(302801)]		HRESULT callbackRMUserVisual([in] I_dxj_Direct3dRMUserVisual *uv,
				  [in] USERARG *userArgument, [in] d3drmUserVisualReason r,
							[in] I_dxj_Direct3dRMDevice3 *d, [in] I_dxj_Direct3dRMViewport2 *v, [out,retval] dxBool *retv);
	};
	*/
	
	///////////////////////////////////////////////////////////////////////////
	[	object,
		uuid(BBD5AD0A-8E91-11d1-8808-00C04FC2C602),
		helpstring("I_dxj_Direct3dRMLoadCallback Interface"),			
		pointer_default(unique),
		helpcontext(303000)
	]	
	interface I_dxj_Direct3dRMLoadCallback : IUnknown
	{
		import "oaidl.idl";		
		[helpcontext(303001)]		HRESULT callbackRMLoad([in] I_dxj_Direct3dRMObject **Obj, [in] BSTR guid, [in] USERARG *userArgument);
	};

	


	///////////////////////////////////////////////////////////////////////////
	[	object,
		uuid(BBD5AD16-8E91-11d1-8808-00C04FC2C602),
		helpstring("I_dxj_Direct3dRMLoadTextureCallback3 Interface"),
		pointer_default(unique),
		helpcontext(303200)
	]	
	interface I_dxj_Direct3dRMLoadTextureCallback3 : IUnknown
	{
		import "oaidl.idl";

		[helpcontext(303201)]		HRESULT callbackRMLoadTexture([in] BSTR textureName, [in] USERARG *userArgument,
				[out, retval] I_dxj_Direct3dRMTexture3 **retv);
	};


///////////////////////////////////////////////////////////////////////////
// 
// Direct3DIM
// 
///////////////////////////////////////////////////////////////////////////



	[
		object,		
		uuid(9F76FDD5-8E92-11d1-8808-00C04FC2C602),
		helpstring("I_dxj_Direct3d7 Interface"),
		pointer_default(unique),
		local,
		helpcontext(303400)
	]
	interface I_dxj_Direct3d7 : IUnknown
	{
		import "oaidl.idl";
		[hidden]		HRESULT InternalSetObject([in] IUnknown *lpdd);
		[hidden]		HRESULT InternalGetObject([out, retval] IUnknown **lpdd);		


		[helpcontext(303401)]		HRESULT createDevice([in] BSTR  guid, I_dxj_DirectDrawSurface7 *surf, [out, retval] I_dxj_Direct3dDevice7 **ret);						
		[helpcontext(303402)]		HRESULT createVertexBuffer([in] D3DVERTEXBUFFERDESC_CDESC *desc,[in] d3ddpFlags flags,[out,retval] I_dxj_Direct3dVertexBuffer7 **f);
		[helpcontext(303403)]		HRESULT evictManagedTextures();		
		[helpcontext(303404)]		HRESULT getDevicesEnum([out,retval] I_dxj_Direct3DEnumDevices **retv);						
		[helpcontext(303405)]		HRESULT getDirectDraw([out,retval] I_dxj_DirectDraw7 **retv);		
		[helpcontext(303406)]		HRESULT getEnumZBufferFormats([in] BSTR guid, [out,retval] I_dxj_Direct3DEnumPixelFormats **retv);		
		

	};

	[
		object,
		local,
		uuid(9F76FDD7-8E92-11d1-8808-00C04FC2C602),	
		helpstring("I_dxj_Direct3dDevice7 Interface"),
		pointer_default(unique),
		helpcontext(303600)
	]
	interface I_dxj_Direct3dDevice7 : IUnknown
	{
		import "oaidl.idl";
		[hidden]		HRESULT InternalSetObject([in] IUnknown *lpdd);
		[hidden]		HRESULT InternalGetObject([out, retval] IUnknown **lpdd);

		[helpcontext(303601)]		HRESULT applyStateBlock([in] long blockHandle);

		[helpcontext(303602)]		HRESULT beginScene();		
		[helpcontext(303603)]		HRESULT beginStateBlock();
		[helpcontext(303604)]		HRESULT captureStateBlock([in] long blockHandle);
		[helpcontext(303605)]		HRESULT clear([in] long count, [in] SAFEARRAY(D3DRECT_CDESC) *recs, [in] d3dClearFlags flags, [in] long color,[in] float z,[in] long stencil);
		[helpcontext(303606)]		HRESULT computeSphereVisibility(D3DVECTOR_CDESC *center,float *radius ,[out,retval] long *returnVal);
		[helpcontext(303607)]		HRESULT deleteStateBlock([in] long blockHandle);

		[helpcontext(303608)]		HRESULT drawIndexedPrimitive(
				[in] d3dPrimitiveType  d3dpt,[in] d3dFVFFlags d3dfvf, 
				[in] AVERT *vertices,[in] long VertexCount,
				[in] SAFEARRAY(short) *indices, [in] long IndicesCount,
				[in] d3ddpFlags flags);
	
		[helpcontext(303609)]		HRESULT drawIndexedPrimitiveVB([in] d3dPrimitiveType  d3dpt,
				[in] I_dxj_Direct3DVertexBuffer7 *vertexBuffer, 
				[in] long startVertex,
				[in] long numVertices,
				[in] SAFEARRAY(short) *indexArray,
				[in] long indexcount,
				[in] d3ddpFlags flags);
		
		[helpcontext(303610)]		HRESULT drawPrimitive(
			[in] d3dPrimitiveType  d3dpt,[in] d3dFVFFlags d3dfvf, 
			[in] AVERT *vertices, [in] long VertexCount,
			[in] d3ddpFlags flags);

		[helpcontext(303611)]		HRESULT drawPrimitiveVB([in] d3dPrimitiveType  d3dpt,
				[in] I_dxj_Direct3DVertexBuffer7 *vertexBuffer, 	
				[in] long startVertex,
				[in] long numVertices,
				[in] d3ddpFlags flags);				
		//[helpcontext(303612)]		HRESULT duplicateStateBlock([in] long hndl,[out,retval] long * ret);
		[helpcontext(303613)]		HRESULT endScene();
		[helpcontext(303614)]		HRESULT endStateBlock([in] long *blockHandle);
		
		[helpcontext(303615)]		HRESULT getCaps( [in,out] D3DDEVICEDESC7_CDESC *desc);
		[helpcontext(303616)]		HRESULT getClipStatus( [in,out] D3DCLIPSTATUS_CDESC *clipStatus);
		[helpcontext(303617)]		HRESULT getDirect3D( [out, retval] I_dxj_Direct3d7 **dev);    	
		[helpcontext(303618)]		HRESULT getLight([in] long LightIndex, [in,out] D3DLIGHT7_CDESC *Light);
		[helpcontext(303619)]		HRESULT getLightEnable([in] long LightIndex, [out,retval] VARIANT_BOOL *b);
		[helpcontext(303620)]		HRESULT getMaterial([in,out] D3DMATERIAL7_CDESC *Material);
		[helpcontext(303621)]		HRESULT getRenderState([in]d3dRenderStateType state ,[out,retval] long *renderstate);		
		[helpcontext(303622)]		HRESULT getRenderTarget([out,retval] I_dxj_DirectDrawSurface7 **ppval);		

		[helpcontext(303623)]		HRESULT getTexture([in] long stage,[out,retval] I_dxj_DirectDrawSurface7 **retv);
		[helpcontext(303624)]		HRESULT getTextureFormatsEnum([out,retval] I_dxj_Direct3DEnumPixelFormats **retval);
        [helpcontext(303625)]		HRESULT getTextureStageState([in]long stage,[in] d3dTextureStageStateType state,[out,retval] long *val);
		[helpcontext(303626)]		HRESULT getTransform([in] d3dTransformStateType transformType,[in,out] D3DMATRIX_CDESC *matrix);
		[helpcontext(303627)]		HRESULT getViewport([in,out] D3DVIEWPORT7_CDESC *viewport);
		[helpcontext(303628)]		HRESULT lightEnable([in] long LightIndex, [in] VARIANT_BOOL bEnable);
		[helpcontext(303629)]		HRESULT load([in] I_dxj_DirectDrawSurface7 *DestTex,[in] long xDest, [in] long yDest,[in] I_dxj_DirectDrawSurface7 *SrcTex, [in] RECT_CDESC *rcSrcRect,[in] long flags);
		[helpcontext(303630)]		HRESULT multiplyTransform([in] d3dTransformStateType dstTransfromStateType,[in,out] D3DMATRIX_CDESC *matrix);		
		//[helpcontext(303631)]		HRESULT overlayStateBlock([in] long blockHandle);
		[helpcontext(303632)]		HRESULT preLoad([in] I_dxj_DirectDrawSurface7 *texture );
		
		[helpcontext(303633)]		HRESULT setClipStatus( [in] D3DCLIPSTATUS_CDESC *clipStatus);		
		[helpcontext(303634)]		HRESULT setLight([in] long LightIndex, [in] D3DLIGHT7_CDESC *Light);		
		[helpcontext(303635)]		HRESULT setMaterial([in] D3DMATERIAL7_CDESC *mat);
		[helpcontext(303636)]		HRESULT setRenderState([in]d3dRenderStateType state,[in] long renderstate);		
		[helpcontext(303637)]		HRESULT setRenderTarget([in] I_dxj_DirectDrawSurface7 *surface);		
		[helpcontext(303638)]		HRESULT setTexture([in] long stage,[in] I_dxj_DirectDrawSurface7 *texture);
        [helpcontext(303639)]		HRESULT setTextureStageState([in]long stage,[in] d3dTextureStageStateType state,[in] long value);
		[helpcontext(303640)]		HRESULT setTransform([in] d3dTransformStateType transformType,[in] D3DMATRIX_CDESC *matrix);		
		[helpcontext(303641)]		HRESULT setViewport([in] D3DVIEWPORT7_CDESC *viewport);
		[helpcontext(303642)]		HRESULT validateDevice([out,retval] long *passes);
		
		
		[helpcontext(303643)]		HRESULT setTextureStageStateSingle([in]long stage,[in] d3dTextureStageSingle state,[in] float value);		
		[helpcontext(303644)]		HRESULT getTextureStageStateSingle([in]long stage,[in] d3dTextureStageSingle state,[out,retval] float *val);
		[helpcontext(303645)]		HRESULT getInfo([in] d3dDevInfoId lDevInfoID,[in,out] void * DevInfoType,[in] long lSize);
		[helpcontext(303646)]		HRESULT setRenderStateSingle([in]d3dRenderStateSingle state,[in] float val);		
		[helpcontext(303647)]		HRESULT getRenderStateSingle([in]d3dRenderStateSingle state ,[out,retval] float *val);		
		[helpcontext(303648)]		HRESULT getDeviceGuid([out,retval] BSTR *ret);

		//check help
		[helpcontext(303649)]		HRESULT createStateBlock([in]	d3dStateBlockType d3dsbType, [out,retval] long *blockHandle);
		[helpcontext(303650)]		HRESULT setClipPlane([in] long Index, [in] float A, [in] float B ,[in] float C, [in] float D);
		[helpcontext(303651)]		HRESULT getClipPlane([in] long Index, [in,out] float *A, [in,out] float *B ,[in,out] float *C, [in,out] float *D);

	};




	[
		object,
		uuid(9F76FDDA-8E92-11d1-8808-00C04FC2C602),
		helpstring("I_dxj_Direct3dVertexBuffer7 Interface"),
		pointer_default(unique),
		local,
		helpcontext(303800)
	]
	interface I_dxj_Direct3dVertexBuffer7 : IUnknown	
	{
		import "oaidl.idl";

		[hidden]		HRESULT InternalSetObject([in] IUnknown *lpdd);
		[hidden]		HRESULT InternalGetObject([out, retval] IUnknown **lpdd);

		[helpcontext(303801)]		HRESULT getVertexBufferDesc([in,out] D3DVERTEXBUFFERDESC_CDESC *desc);
		[helpcontext(303802)]		HRESULT getVertices([in] long startIndex, [in] long count,[in] void *verts);
		[helpcontext(303803)]		HRESULT lock([in] ddLockFlags flags);
		[helpcontext(303804)]		HRESULT optimize([in] I_dxj_Direct3dDevice7 *dev);	//flags not used		
		[helpcontext(303805)]		HRESULT processVertices([in] d3dVopFlags vertexOp,
								[in] long destIndex,
								[in] long count,
								[in] I_dxj_Direct3dVertexBuffer7 *srcBuffer,
								[in] long srcIndex,
								[in] I_dxj_Direct3dDevice7 *dev,
								[in] d3dProcessVerticesFlags flags); //has flags set to zero
		[helpcontext(303806)]		HRESULT setVertices([in] long startIndex, [in] long count,[in] void *verts);
		[helpcontext(303807)]		HRESULT unlock();		
		[hidden]				HRESULT setVertexSize([in] long vertexSizeInBytes);
		
	};


	[
		object,		
		uuid(9F76FDD6-8E92-11d1-8808-00C04FC2C602),
		helpstring("I_dxj_D3DEnumPixelFormats Interface"),
		pointer_default(unique),
		local,
		helpcontext(304000)
	]
	interface I_dxj_Direct3DEnumPixelFormats : IUnknown{
		[helpcontext(304001)]		HRESULT getItem([in] long index, [in,out] DDPIXELFORMAT_CDESC *pixelFormat);
		[helpcontext(304002)]		HRESULT getCount([out,retval] long *count);

	};

	[
		object,
		uuid(9F76FDD3-8E92-11d1-8808-00C04FC2C602),
		helpstring("I_dxj_Direct3DEnumDevices Interface"),
		pointer_default(unique),
		local,
		helpcontext(304200)
	]
	interface I_dxj_Direct3DEnumDevices : IUnknown
	{
			import "oaidl.idl";
			[helpcontext(304201)]		HRESULT getGuid([in] long index,[out,retval] BSTR *guid);
			[helpcontext(304202)]		HRESULT getDescription([in] long index,[out,retval] BSTR *guid);
			[helpcontext(304203)]		HRESULT getName([in] long index,[out,retval] BSTR *guid);
			[helpcontext(304204)]		HRESULT getDesc([in] long index, [in,out] D3DDEVICEDESC7_CDESC *hwDesc);			
			[helpcontext(304205)]		HRESULT getCount([out,retval]long *count);		
	};



///////////////////////////////////////////////////////////////////////////
// 
// Direct Draw Interfaces 
// 
///////////////////////////////////////////////////////////////////////////
	[
		object,
		uuid(9F76FDC9-8E92-11d1-8808-00C04FC2C602),
		helpstring("I_dxj_DirectDrawPalette Interface"),
		pointer_default(unique),
		local,
		helpcontext(304400)
	]
	interface I_dxj_DirectDrawPalette : IUnknown	
	{
		import "oaidl.idl";
		[hidden]		HRESULT InternalSetObject([in] IUnknown *lpddp);
		[hidden]		HRESULT InternalGetObject([out, retval] IUnknown **lpddp);


		[helpcontext(304401)]		HRESULT getCaps( [out, retval] ddpCapsFlags *caps);
		[helpcontext(304402)]		HRESULT getEntries([in] long start, [in] long count, [in,out] SAFEARRAY(APAL) *val);
		[helpcontext(304403)]		HRESULT setEntries([in] long start, [in] long count, [in]  SAFEARRAY(APAL) *val);

		[hidden]		HRESULT setEntriesHalftone([in] long start, [in] long count);
		[hidden]		HRESULT setEntriesSystemPalette([in] long start, [in] long count);
	};

 	[
		object,
		uuid(9F76FDCA-8E92-11d1-8808-00C04FC2C602),
		helpstring("I_dxj_DirectDrawClipper Interface"),
		pointer_default(unique),
		local,
		helpcontext(304600)
	]
	interface I_dxj_DirectDrawClipper : IUnknown	
	{
		import "oaidl.idl";	
		[hidden]		HRESULT InternalSetObject([in] IUnknown *lpddc);
		[hidden]		HRESULT InternalGetObject([out, retval] IUnknown **lpddc);

		[helpcontext(304601)]		HRESULT getClipListSize( [out, retval]  int *count);
		[helpcontext(304602)]		HRESULT getClipList([in,out] SAFEARRAY(RECT_CDESC) *rects );
		[helpcontext(304603)]		HRESULT setClipList( [in] long count, [in] SAFEARRAY(RECT_CDESC) *rects );

		[helpcontext(304604)]		HRESULT getHWnd([out, retval] HWnd *hdl);
		[helpcontext(304605)]		HRESULT setHWnd( [in] HWnd hdl);
	
		
		[helpcontext(304606)]		HRESULT isClipListChanged( [out, retval] int *status);
		
		
	};

	


	[
		object,
		uuid(9F76FDE0-8E92-11d1-8808-00C04FC2C602),
		helpstring("I_dxj_DirectDrawColorControl Interface"),
		pointer_default(unique),
		local,
		helpcontext(304800)
	]
	interface I_dxj_DirectDrawColorControl : IUnknown
	{
			import "oaidl.idl";
		[hidden]		HRESULT InternalSetObject([in] IUnknown *lpdds);
		[hidden]		HRESULT InternalGetObject([out, retval] IUnknown **lpdds);
		[helpcontext(304801)]		HRESULT getColorControls([in,out]DDCOLORCONTROL_CDESC *colorControl);
		[helpcontext(304802)]		HRESULT setColorControls([in]DDCOLORCONTROL_CDESC *colorControl);
	};


	[
		object,
		uuid(9F76FDE1-8E92-11d1-8808-00C04FC2C602),
		helpstring("I_dxj_DirectDrawEnum Interface"),
		pointer_default(unique),
		local,
		helpcontext(305000)
	]
	interface I_dxj_DirectDrawEnum : IUnknown
	{
		import "oaidl.idl";
		[helpcontext(305001)]		HRESULT getGuid([in] long index,[out,retval] BSTR *guid);
		[helpcontext(305002)]		HRESULT getDescription([in] long index,[out,retval] BSTR *ret);
		[helpcontext(305003)]		HRESULT getName([in] long index,[out,retval] BSTR *ret);
		[helpcontext(305004)]		HRESULT getMonitorHandle([in] long index,[out,retval] long *ret);
        	[helpcontext(305005)]		HRESULT getCount([out,retval]long *count);		
	};

	


	[
		object,
		uuid(9F76FFFF-8E92-11d1-8808-00C04FC2C602),
		helpstring("I_dxj_DirectDrawEnumModes Interface"),
		pointer_default(unique),
		local,
		helpcontext(305200)
	]
	interface I_dxj_DirectDrawEnumModes : IUnknown
	{
		import "oaidl.idl";
		[helpcontext(305201)]		HRESULT getItem( [in]long index, [in,out] DDSURFACEDESC2_CDESC *info);
        	[helpcontext(305202)]		HRESULT getCount([out,retval]long *count);		
	};



	[
		object,
		uuid(9F76FDE6-8E92-11d1-8808-00C04FC2C602),
		helpstring("I_dxj_DirectDrawEnumSurfaces	 Interface"),
		pointer_default(unique),
		local,
		helpcontext(305400)

	]
	interface I_dxj_DirectDrawEnumSurfaces : IUnknown
	{
		import "oaidl.idl";
		[helpcontext(305401)]		HRESULT getItem( [in]long index, [out,retval] I_dxj_DirectDrawSurface7 **retVal);
        	[helpcontext(305402)]		HRESULT getCount([out,retval]long *count);		
	};



	[
		object,
		uuid(9F76FDE7-8E92-11d1-8808-00C04FC2C602),
		helpstring("IDirectDraw7 Interface"),
		pointer_default(unique),
		local,
		helpcontext(305600)
	]
	interface I_dxj_DirectDraw7 : IUnknown	
	{
		import "oaidl.idl";
		[hidden]		HRESULT InternalSetObject([in] IUnknown *lpdd);
		[hidden]		HRESULT InternalGetObject([out, retval] IUnknown **lpdd);

		
	   	[helpcontext(305601)]		HRESULT createClipper([in] long flags, [out, retval] I_dxj_DirectDrawClipper **val);
		[helpcontext(305602)]		HRESULT createPalette([in] ddpCapsFlags flags, [in] SAFEARRAY(APAL) *pe, [out, retval] I_dxj_DirectDrawPalette **val);
		[helpcontext(305603)]		HRESULT createSurface([in] DDSURFACEDESC2_CDESC *dd, [out, retval] I_dxj_DirectDrawSurface7 **retv);
		[helpcontext(305604)]		HRESULT createSurfaceFromFile([in] BSTR file, [in,out] DDSURFACEDESC2_CDESC *dd, [out, retval] I_dxj_DirectDrawSurface7 **retv);
		[helpcontext(305605)]		HRESULT createSurfaceFromResource([in] BSTR file, [in] BSTR resName, [in,out] DDSURFACEDESC2_CDESC *ddsd, [out, retval] I_dxj_DirectDrawSurface7 **retv);					
		[helpcontext(305606)]		HRESULT duplicateSurface([in] I_dxj_DirectDrawSurface7 *ddIn,[out, retval] I_dxj_DirectDrawSurface7 **ddOut);		
		[helpcontext(305607)]		HRESULT flipToGDISurface();		
		[helpcontext(305608)]		HRESULT getAvailableTotalMem([in] DDSCAPS2_CDESC *ddsCaps, [out, retval] long *m);
		[helpcontext(305609)]		HRESULT getCaps([in,out] DDCAPS_CDESC *hwCaps,  [in,out] DDCAPS_CDESC *helCaps);
		[helpcontext(305610)]		HRESULT getDirect3D([out, retval] I_dxj_Direct3d7 **retv);  		
		[helpcontext(305611)]		HRESULT getDisplayMode( [in,out] DDSURFACEDESC2_CDESC *surface);
		[helpcontext(305612)]		HRESULT getDisplayModesEnum([in] ddedmFlags flags,[in] DDSURFACEDESC2_CDESC *ddsd,[out,retval] I_dxj_DirectDrawEnumModes **retval);
		[helpcontext(305613)]		HRESULT getFourCCCodes( [in,out] SAFEARRAY(long) *ccCodes);
		[helpcontext(305614)]		HRESULT getFreeMem( [in] DDSCAPS2_CDESC *ddsCaps, [out, retval] long *m);
		[helpcontext(305615)]		HRESULT getGDISurface( [out, retval] I_dxj_DirectDrawSurface7 **s);
		[helpcontext(305616)]		HRESULT getMonitorFrequency([out, retval] long *freq);
		[helpcontext(305617)]		HRESULT getNumFourCCCodes([out, retval] long *nCodes);
		[helpcontext(305618)]		HRESULT getScanLine([in,out] long *lines, [out, retval] long *status);		
		[helpcontext(305619)]		HRESULT getSurfaceFromDC([in] long hdc,[out,retval] I_dxj_DirectDrawSurface7 **retv);
		[helpcontext(305620)]		HRESULT getSurfacesEnum([in] ddEnumSurfacesFlags flags, [in] DDSURFACEDESC2_CDESC *desc, [out,retval] I_dxj_DirectDrawEnumSurfaces **ret);				
		[helpcontext(305621)]		HRESULT getVerticalBlankStatus([out, retval] long *status);
		[helpcontext(305622)]		HRESULT loadPaletteFromBitmap([in] BSTR bName, [out, retval] I_dxj_DirectDrawPalette **retv);
		[helpcontext(305623)]		HRESULT restoreAllSurfaces();		
		[helpcontext(305624)]		HRESULT restoreDisplayMode();
		[helpcontext(305625)]		HRESULT setCooperativeLevel([in] HWnd hdl, [in] ddsclFlags flags);
		[helpcontext(305626)]		HRESULT setDisplayMode([in] long w, [in] long h, [in] long bpp, [in] long ref,[in] ddsdmFlags mode);
		[helpcontext(305627)]		HRESULT testCooperativeLevel([out,retval] long *status);
		[helpcontext(305628)]		HRESULT waitForVerticalBlank([in] ddWaitVBFlags flags, [in] long handle, [out, retval] long *status);

		[helpcontext(305629)]		HRESULT getDeviceIdentifier([in] ddDeviceIDFlags flags,[out,retval] I_dxj_DirectDrawIdentifier **ret);		
	};

	[
		object,
		uuid(9F76FDE8-8E92-11d1-8808-00C04FC2C602),
		helpstring("I_dxj_DirectDrawSurface7 Interface"),
		pointer_default(unique),
		local,
		helpcontext(305800)
	]
	interface I_dxj_DirectDrawSurface7 : IUnknown	
	{
		import "oaidl.idl";
		[hidden]		HRESULT InternalSetObject([in] IUnknown *lpdds);
		[hidden]		HRESULT InternalGetObject([out, retval] IUnknown **lpdds);				
				
		[helpcontext(305801)]		HRESULT addAttachedSurface( [in] I_dxj_DirectDrawSurface7 *ddS);				
	    [helpcontext(305802)]		HRESULT blt( [in] RECT_CDESC *destRect, [in] I_dxj_DirectDrawSurface7 *ddS, [in] RECT_CDESC *srcRect, [in] ddBltFlags flags, [out, retval] long *status);
		[helpcontext(305803)]		HRESULT bltColorFill( [in] RECT_CDESC *destRect, [in] long fillvalue, [out, retval] long *status );
		[helpcontext(305804)]		HRESULT bltFast( [in] long dx, [in] long dy, [in] I_dxj_DirectDrawSurface7 *dds, [in] RECT_CDESC *srcRect, [in] ddBltFastFlags trans, [out, retval] long *status);		
		[helpcontext(305805)]		HRESULT bltFx( [in] RECT_CDESC *destRect, [in] I_dxj_DirectDrawSurface7 *ddS, [in] RECT_CDESC *srcRect, [in] ddBltFlags flags, [in] DDBLTFX_CDESC *bltfx, [out, retval] long *status );
		[helpcontext(305806)]		HRESULT bltToDC([in] long hdc, [in] RECT_CDESC *srcRect, [in] RECT_CDESC *destRect);	
		[helpcontext(305807)]		HRESULT changeUniquenessValue();		
		[helpcontext(305808)]		HRESULT deleteAttachedSurface( [in] I_dxj_DirectDrawSurface7 *dds) ;
		[helpcontext(305809)]		HRESULT drawBox([in] long x1, [in] long y1, [in] long x2, [in] long y2);
		[helpcontext(305810)]		HRESULT drawCircle([in] long x1, [in] long y1, [in] long r);
		[helpcontext(305811)]		HRESULT drawEllipse([in] long x1, [in] long y1, [in] long x2, [in] long y2);		
		[helpcontext(305812)]		HRESULT drawLine([in] long x1, [in] long y1, [in] long x2, [in] long y2);		
		[helpcontext(305813)]		HRESULT drawRoundedBox([in] long x1, [in] long y1, [in] long x2, [in] long y2,[in] long rw, [in] long rh);		
		[helpcontext(305814)]		HRESULT drawText([in] long x, [in] long y,  [in] BSTR text, [in] VARIANT_BOOL b);
		[helpcontext(305815)]		HRESULT flip( [in] I_dxj_DirectDrawSurface7 *dds, [in] ddFlipFlags flags);		
		[helpcontext(305816)]		HRESULT getAttachedSurface( [in] DDSCaps2 *caps, [out, retval] I_dxj_DirectDrawSurface7 **dds);
		[helpcontext(305817)]		HRESULT getAttachedSurfaceEnum([out,retval] I_dxj_DirectDrawEnumSurfaces **retval);
		[helpcontext(305818)]		HRESULT getBltStatus([in] ddGbsFlags flags, [out, retval] long *status);
		[helpcontext(305819)]		HRESULT getCaps( [in,out] DDSCAPS2_CDESC  *caps);
		[helpcontext(305820)]		HRESULT getClipper( [out, retval] I_dxj_DirectDrawClipper **val);
		[helpcontext(305821)]		HRESULT getColorKey( [in] long flags, [in,out] DDCOLORKEY_CDESC *val);
		[helpcontext(305822)]		HRESULT getDC( [out, retval] long *hdc);
		[helpcontext(305823)]		HRESULT getDirectDraw( [out, retval] I_dxj_DirectDraw7 **val);			
		[helpcontext(305824)]		HRESULT getDirectDrawColorControl([out,retval] I_dxj_DirectDrawColorControl **retv);
		[helpcontext(305825)]		HRESULT getDirectDrawGammaControl([out,retval] I_dxj_DirectDrawGammaControl **retv);
		[helpcontext(305826)]		HRESULT getDrawStyle([out,retval] long *drawStyle);		
		[helpcontext(305827)]		HRESULT getDrawWidth([out,retval] long *drawWidth);		
		[helpcontext(305828)]		HRESULT getFillColor([out,retval] long *color);		
		[helpcontext(305829)]		HRESULT getFillStyle([out,retval] long *fillStyle);		
		[helpcontext(305830)]		HRESULT getFlipStatus( [in] ddGfsFlags flags, [out, retval] long *status);		
		[helpcontext(305831)]		HRESULT getFontTransparency([out,retval] VARIANT_BOOL *b);		
		[helpcontext(305832)]		HRESULT getForeColor([out,retval] long *color);						
		[helpcontext(305833)]		HRESULT getLockedPixel([in] int x, [in] int y, [out,retval] long *col);
		//[helpcontext(305834)]		HRESULT getLockedSurfaceBits([in,out] ABYTE *memory);		
		[helpcontext(305835)]		HRESULT getPalette( [out, retval] I_dxj_DirectDrawPalette **val);
		[helpcontext(305836)]		HRESULT getPixelFormat( [in,out] DDPIXELFORMAT_CDESC *pf);		
		[helpcontext(305837)]		HRESULT getSurfaceDesc([in,out] DDSURFACEDESC2_CDESC *surface);
		[helpcontext(305838)]		HRESULT getUniquenessValue([out,retval] long *retVal);
		[helpcontext(305839)]		HRESULT isLost([out, retval] long *status);
        [helpcontext(305840)]		HRESULT lock( [in] RECT_CDESC *r, [in] DDSURFACEDESC2_CDESC *desc, [in] ddLockFlags flags, [in] Handle hnd);
		[helpcontext(305841)]		HRESULT releaseDC([in] long hdc);		
		[helpcontext(305842)]		HRESULT restore();
		[helpcontext(305843)]		HRESULT setClipper( [in] I_dxj_DirectDrawClipper *val) ;
		[helpcontext(305844)]		HRESULT setColorKey( [in] ddCKeyFlags flags, [in] DDCOLORKEY_CDESC *val);
		[helpcontext(305845)]		HRESULT setDrawStyle([in] long drawStyle);
		[helpcontext(305846)]		HRESULT setDrawWidth([in] long drawWidth);
		[helpcontext(305847)]		HRESULT setFillColor([in] long color);
		[helpcontext(305848)]		HRESULT setFillStyle([in] long fillStyle);
		[helpcontext(305849)]		HRESULT setFont([in] IFont *font);		
		[helpcontext(305850)]		HRESULT setFontTransparency([in] VARIANT_BOOL b);
		[helpcontext(305851)]		HRESULT setForeColor([in] long color);
		[helpcontext(305852)]		HRESULT setLockedPixel([in] int x, [in] int y, [in] long col);		
		//[helpcontext(305853)]		HRESULT setLockedSurfaceBits([in,out] ABYTE *memory);
		[helpcontext(305854)]		HRESULT setPalette([in] I_dxj_DirectDrawPalette *ddp);		
        [helpcontext(305855)]		HRESULT unlock( [in] RECT_CDESC *r);		
		[helpcontext(305856)]		HRESULT setPriority([in] long Priority);
		[helpcontext(305857)]		HRESULT getPriority([out,retval] long *Priority);
		[helpcontext(305858)]		HRESULT getLOD([out,retval] long *lod);
		[helpcontext(305859)]		HRESULT setLOD([in] long lod);
		[helpcontext(305860)]		HRESULT getLockedArray([in] SAFEARRAY(byte) *array);		
		[helpcontext(305868)]		HRESULT setFontBackColor([in] long color);
		[helpcontext(305869)]		HRESULT getFontBackColor([out,retval] long *color);
		[helpcontext(305870)]		HRESULT updateOverlay( [in] RECT_CDESC *rect, [in] I_dxj_DirectDrawSurface7 *dds, [in] RECT_CDESC *rectD, [in] ddOverFlags flags);		
		[helpcontext(305871)]		HRESULT updateOverlayZOrder( [in] ddOverZFlags flags, [in] I_dxj_DirectDrawSurface7 *dds);
		[helpcontext(305872)]		HRESULT getOverlayPosition(  [in,out] long *x, [in,out] long *y);
		[helpcontext(305873)]		HRESULT setOverlayPosition( [in] long x, [in] long y);
		[helpcontext(305874)]		HRESULT getOverlayZOrdersEnum([in] ddEnumOverlayZFlags flags,[out,retval] I_dxj_DirectDrawEnumSurfaces **retval);				
		[helpcontext(305875)]		HRESULT updateOverlayFx([in] RECT_CDESC *rect, [in] I_dxj_DirectDrawSurface7 *dds, [in] RECT_CDESC *rectD, [in] ddOverFlags flags, [in,out] DDOVERLAYFX_CDESC *ddoverfx);	
		
		/*
		//CONSIDER USING A STRING
		[helpcontext(305868)]		HRESULT freePrivateData([in] BSTR guid);
		[helpcontext(305869)]		HRESULT getPrivateData([in] BSTR guid,[in,out] SAFEARRAY(long)* data);
		[helpcontext(305870)]		HRESULT getPrivateDataSize([in] BSTR guid,[out,retval] long *size);
		[helpcontext(305871)]		HRESULT setPrivateData([in] BSTR guid, [in] SAFEARRAY(long) *data);
		*/

	};



	[
		object,
		uuid(9F76FDE9-8E92-11d1-8808-00C04FC2C602),
		helpstring("I_dxj_DirectDrawGammaControl Interface"),
		pointer_default(unique),
		local	,
		helpcontext(306000)
	]
	interface I_dxj_DirectDrawGammaControl : IUnknown
	{
			import "oaidl.idl";
		[hidden]		HRESULT InternalSetObject([in] IUnknown *lpdds);
		[hidden]		HRESULT InternalGetObject([out, retval] IUnknown **lpdds);
		[helpcontext(306001)]		HRESULT getGammaRamp([in] ddSgrFlags flags,[in,out]	DDGAMMARAMP_CDESC *gammaRamp);
		[helpcontext(306002)]		HRESULT setGammaRamp([in] ddSgrFlags flags,[in]		DDGAMMARAMP_CDESC *gammaRamp);		
	};





///////////////////////////////////////////////////////////////////////////
// 
//              Direct 3D Retain Mode Interfaces 
// 
///////////////////////////////////////////////////////////////////////////
	[
		object,
		uuid(9F76FE0E-8E92-11d1-8808-00C04FC2C602),
		helpstring("I_dxj_Direct3dRMObject Interface"),
		pointer_default(unique),
		local,
		helpcontext(306200)
	]
	interface I_dxj_Direct3dRMObject : IUnknown	
	{
		import "oaidl.idl";

		[hidden]		HRESULT InternalSetObject([in] IUnknown *lpdd);
		[hidden]		HRESULT InternalGetObject([out, retval] IUnknown **lpdd);

		[helpcontext(306201)]		HRESULT addDestroyCallback([in] I_dxj_Direct3dRMCallback *fn, [in] USERARG *arg);
		[helpcontext(306202)]		HRESULT deleteDestroyCallback([in] I_dxj_Direct3dRMCallback *fn, [in] USERARG *args);
		[helpcontext(306203)]		HRESULT cloneObject([out,retval] RMCLONEOBJECT **retv);
		[helpcontext(306204)]		HRESULT setAppData( [in] long data);
		[helpcontext(306205)]		HRESULT getAppData( [out, retval] long *data);
		[helpcontext(306206)]		HRESULT setName ([in] BSTR name);
		[helpcontext(306207)]		HRESULT getName([out,retval] BSTR *name);		//LPSTR
		[helpcontext(306208)]		HRESULT getClassName([out,retval] BSTR *name);	//LPSTR

	};

	///////////////////////////////////////////////////////////////////////////
	[
		object,
		uuid(9F76FE0F-8E92-11d1-8808-00C04FC2C602),
		helpstring("Direct3dRMVisual Interface"),
		pointer_default(unique),
		local,
		helpcontext(306400)
	]
	interface I_dxj_Direct3dRMVisual : IUnknown	
	{
		import "oaidl.idl";

		[hidden]		HRESULT InternalSetObject([in] IUnknown *lpdd);
		[hidden]		HRESULT InternalGetObject([out, retval] IUnknown **lpdd);

		//
		/*** d3drmObjects ***/
		//


		[helpcontext(306201)]		HRESULT addDestroyCallback([in] I_dxj_Direct3dRMCallback *fn, [in] USERARG *arg);
		[helpcontext(306202)]		HRESULT deleteDestroyCallback([in] I_dxj_Direct3dRMCallback *fn, [in] USERARG *args);
		[helpcontext(306203)]		HRESULT cloneObject([out,retval] RMCLONEOBJECT **retv);
		[helpcontext(306204)]		HRESULT setAppData( [in] long data);
		[helpcontext(306205)]		HRESULT getAppData( [out, retval] long *data);
		[helpcontext(306206)]		HRESULT setName ([in] BSTR name);
		[helpcontext(306207)]		HRESULT getName([out,retval] BSTR *name);		//LPSTR
		[helpcontext(306208)]		HRESULT getClassName([out,retval] BSTR *name);	//LPSTR


	};



	///////////////////////////////////////////////////////////////////////////
	[
		object,
		uuid(9F76FE32-8E92-11d1-8808-00C04FC2C602),
		helpstring("I_dxj_Direct3dRMFace2 Interface"),
		pointer_default(unique),
		local,
		helpcontext(306600)
	]
	interface I_dxj_Direct3dRMFace2 : IUnknown	
	{
		import "oaidl.idl";

		[hidden]		HRESULT InternalSetObject([in] IUnknown *lpdd);
		[hidden]		HRESULT InternalGetObject([out, retval] IUnknown **lpdd);


		[helpcontext(306201)]		HRESULT addDestroyCallback([in] I_dxj_Direct3dRMCallback *fn, [in] USERARG *arg);
		[helpcontext(306202)]		HRESULT deleteDestroyCallback([in] I_dxj_Direct3dRMCallback *fn, [in] USERARG *args);
		[helpcontext(306203)]		HRESULT cloneObject([out,retval] RMCLONEOBJECT **retv);
		[helpcontext(306204)]		HRESULT setAppData( [in] long data);
		[helpcontext(306205)]		HRESULT getAppData( [out, retval] long *data);
		[helpcontext(306206)]		HRESULT setName ([in] BSTR name);
		[helpcontext(306207)]		HRESULT getName([out,retval] BSTR *name);		//LPSTR
		[helpcontext(306208)]		HRESULT getClassName([out,retval] BSTR *name);	//LPSTR


		//
		// IDirect3DRMFace methods - docdoc: based on d3drmObject
		//
		[helpcontext(306609)]		HRESULT addVertex([in] float x, [in] float y, [in] float z);
		[helpcontext(306610)]		HRESULT addVertexAndNormalIndexed([in] long vertexIndex, [in] long normalIndex);
		[helpcontext(306611)]		HRESULT getColor([out, retval] d3dcolor *retv);
		[helpcontext(306612)]		HRESULT getMaterial([out, retval] I_dxj_Direct3dRMMaterial2 **retv);
		[helpcontext(306613)]		HRESULT getNormal([in,out] D3DVECTOR_CDESC *val);
		[helpcontext(306614)]		HRESULT getTexture([out, retval] I_dxj_Direct3dRMTexture3 **ref);
		[helpcontext(306615)]		HRESULT getTextureCoordinateIndex([in] long which, [out, retval] int *retv);
		[helpcontext(306616)]		HRESULT getTextureCoordinates([in] long vertex, [in,out] float *u,[in,out] float *v);
		[helpcontext(306617)]		HRESULT getVertex([in] long idx, [in,out] D3DVECTOR_CDESC *vert,[in,out] D3DVECTOR_CDESC *norm);		
		[helpcontext(306618)]		HRESULT getVertexCount([out, retval] int *retv);
		[helpcontext(306619)]		HRESULT getVertexIndex([in] long which, [out, retval] int *retv);
		[helpcontext(306620)]		HRESULT getVertices([in] long vertexCount, [in,out] SAFEARRAY(D3DVECTOR_CDESC) *coord,[in,out] SAFEARRAY(D3DVECTOR_CDESC) *normals);				
		[hidden]		HRESULT getVerticesJava([in] long vertex_cnt, [in,out] float *coord,[in,out] float *normals);		
		[helpcontext(306621)]		HRESULT setColor([in] d3dcolor c);
		[helpcontext(306622)]		HRESULT setColorRGB([in] float r, [in] float g, [in] float b);		
		[helpcontext(306623)]		HRESULT setMaterial([in] I_dxj_Direct3dRMMaterial2 *ref);
		[helpcontext(306624)]		HRESULT setTexture([in] I_dxj_Direct3dRMTexture3 *ref);
		[helpcontext(306625)]		HRESULT setTextureCoordinates([in] long vertex, [in] float u,[in] float v);
		[helpcontext(306626)]		HRESULT setTextureTopology([in] dxBool wrap_u, [in] dxBool wrap_v); 		
		[helpcontext(306627)]		HRESULT getTextureTopology([in,out] dxBool *wrap_u, [in,out] dxBool *wrap_v); 		
	};


	///////////////////////////////////////////////////////////////////////////
	[
		object,
		uuid(9F76FE03-8E92-11d1-8808-00C04FC2C602),
		helpstring("I_dxj_Direct3dRMLight Interface"),
		pointer_default(unique),
		local,
		helpcontext(306800)
	]
	interface I_dxj_Direct3dRMLight : IUnknown	
	{
		import "oaidl.idl";

		[hidden]		HRESULT InternalSetObject([in] IUnknown *lpdd);
		[hidden]		HRESULT InternalGetObject([out, retval] IUnknown **lpdd);

		[helpcontext(306201)]		HRESULT addDestroyCallback([in] I_dxj_Direct3dRMCallback *fn, [in] USERARG *arg);
		[helpcontext(306202)]		HRESULT deleteDestroyCallback([in] I_dxj_Direct3dRMCallback *fn, [in] USERARG *args);
		[helpcontext(306203)]		HRESULT cloneObject([out,retval] RMCLONEOBJECT **retv);
		[helpcontext(306204)]		HRESULT setAppData( [in] long data);
		[helpcontext(306205)]		HRESULT getAppData( [out, retval] long *data);
		[helpcontext(306206)]		HRESULT setName ([in] BSTR name);
		[helpcontext(306207)]		HRESULT getName([out,retval] BSTR *name);		//LPSTR
		[helpcontext(306208)]		HRESULT getClassName([out,retval] BSTR *name);	//LPSTR


		//
		// IDirect3DRMLight methods - docdoc: based on id3drmObject!
		//
		[helpcontext(306809)]		HRESULT setType([in] d3drmLightType t);
		[helpcontext(306810)]		HRESULT setColor([in] d3dcolor c);
		[helpcontext(306811)]		HRESULT setColorRGB([in] float r, [in] float g, [in] float b);
		[helpcontext(306812)]		HRESULT setRange([in] float rng);
		[helpcontext(306813)]		HRESULT setUmbra([in] float u);
		[helpcontext(306814)]		HRESULT setPenumbra([in] float p);
		[helpcontext(306815)]		HRESULT setConstantAttenuation([in] float atn);
		[helpcontext(306816)]		HRESULT setLinearAttenuation([in] float atn);
		[helpcontext(306817)]		HRESULT setQuadraticAttenuation([in] float atn);
		[helpcontext(306818)]		HRESULT getRange([out, retval] float *retv);
		[helpcontext(306819)]		HRESULT getUmbra([out, retval] float *retv);
		[helpcontext(306820)]		HRESULT getPenumbra([out, retval] float *retv);
		[helpcontext(306821)]		HRESULT getConstantAttenuation([out, retval] float *retv);
		[helpcontext(306822)]		HRESULT getLinearAttenuation([out, retval] float *retv);
		[helpcontext(306823)]		HRESULT getQuadraticAttenuation([out, retval] float *retv);
		[helpcontext(306824)]		HRESULT getColor( [out, retval] d3dcolor *value);
		[helpcontext(306825)]		HRESULT getType([out, retval] d3drmLightType *retv);
		[helpcontext(306826)]		HRESULT setEnableFrame([in] I_dxj_Direct3dRMFrame3 *f);
		[helpcontext(306827)]		HRESULT getEnableFrame([out, retval] I_dxj_Direct3dRMFrame3 **retv);
	};



	///////////////////////////////////////////////////////////////////////////
	[
		object,
		uuid(9F76FE06-8E92-11d1-8808-00C04FC2C602),
		helpstring("I_dxj_Direct3dRMMesh Interface"),
		pointer_default(unique),
		local,
		helpcontext(307000)
	]
	interface I_dxj_Direct3dRMMesh : IUnknown	
	{
		import "oaidl.idl";

		[hidden]		HRESULT InternalSetObject([in] IUnknown *lpdd);
		[hidden]		HRESULT InternalGetObject([out, retval] IUnknown **lpdd);


		[helpcontext(306201)]		HRESULT addDestroyCallback([in] I_dxj_Direct3dRMCallback *fn, [in] USERARG *arg);
		[helpcontext(306202)]		HRESULT deleteDestroyCallback([in] I_dxj_Direct3dRMCallback *fn, [in] USERARG *args);
		[helpcontext(306203)]		HRESULT cloneObject([out,retval] RMCLONEOBJECT **retv);
		[helpcontext(306204)]		HRESULT setAppData( [in] long data);
		[helpcontext(306205)]		HRESULT getAppData( [out, retval] long *data);
		[helpcontext(306206)]		HRESULT setName ([in] BSTR name);
		[helpcontext(306207)]		HRESULT getName([out,retval] BSTR *name);		//LPSTR
		[helpcontext(306208)]		HRESULT getClassName([out,retval] BSTR *name);	//LPSTR

		/*
		 * IDirect3DRMMesh methods
		 */


	
		//#pragma message ("consider if you want to pass down count to API that fill SAFEARRAYS")
	
		[helpcontext(307009)]		HRESULT setGroupColor([in] d3drmGroupIndex id, [in] d3dcolor val);
		[helpcontext(307010)]		HRESULT setGroupColorRGB([in] d3drmGroupIndex id, [in] float r,[in] float g, [in] float b);
	    [helpcontext(307011)]		HRESULT setGroupMapping([in] d3drmGroupIndex id, [in] d3drmMappingFlags value);
		[helpcontext(307012)]		HRESULT setGroupQuality([in] d3drmGroupIndex id, [in] d3drmRenderQuality value);
		[helpcontext(307013)]		HRESULT setGroupMaterial([in] d3drmGroupIndex id, [in] I_dxj_Direct3dRMMaterial2 *val);
		[helpcontext(307014)]		HRESULT setGroupTexture([in] d3drmGroupIndex id, [in] I_dxj_Direct3dRMTexture3 *val);
		[helpcontext(307015)]		HRESULT getGroupCount([out, retval] long *retv);
		[helpcontext(307016)]		HRESULT getGroupColor(   [in] d3drmGroupIndex id, [out, retval] d3dcolor *retv);
      	[helpcontext(307017)]		HRESULT getGroupMapping( [in] d3drmGroupIndex id, [out, retval] d3drmMappingFlags *retv);
		[helpcontext(307018)]		HRESULT getGroupQuality( [in] d3drmGroupIndex id, [out, retval] d3drmRenderQuality *retv);
		[helpcontext(307019)]		HRESULT getGroupMaterial([in] d3drmGroupIndex id, [out, retval] I_dxj_Direct3dRMMaterial2 **retv);
		[helpcontext(307020)]		HRESULT getGroupTexture( [in] d3drmGroupIndex id, [out, retval] I_dxj_Direct3dRMTexture3 **retv);		

		[helpcontext(307021)]		HRESULT scaleMesh([in] float sx, [in] float sy, [in] float sz);

		[helpcontext(307022)]		HRESULT translate([in] float tx, [in] float ty, [in] float tz);		
		[helpcontext(307023)]		HRESULT getBox([in] D3DRMBOX_CDESC *vector);	
		[helpcontext(307024)]		HRESULT getSizes( [in]d3drmGroupIndex id, [out]long *cnt1,[out]long *cnt2,[out] long *cnt3,[out] long *cnt4);

		//docdoc: this function takes an array of vertices, well there is a bit of a problem 
		//        with that in java so the alternative has been to remove SetVertices()
		//		  and created two functions one SetVertice, which only set one vertice
		//		  and SetVerticesAsFloats, which takes in an array of floats as vertices 
		[helpcontext(307025)]		HRESULT setVertex([in] d3drmGroupIndex id, [in] long idx, [in] D3DRMVERTEX_CDESC *values);
		[helpcontext(307026)]		HRESULT getVertex([in] d3drmGroupIndex id, [in] long idx, [in,out] D3DRMVERTEX_CDESC *ret);
		[helpcontext(307027)]		HRESULT getVertexCount([in] d3drmGroupIndex id, [out, retval] long *cnt);


		[helpcontext(307028)]		HRESULT addGroup([in] long vertexCount, [in] long faceCount, [in] long verticesPerFace,
							[in] SAFEARRAY(long) *fdata, [out,retval] d3drmGroupIndex *retId);
		[helpcontext(307029)]		HRESULT getGroupData([in] d3drmGroupIndex id, [in,out] SAFEARRAY(long) *psa);		
		[helpcontext(307030)]		HRESULT getGroupDataSize([in] d3drmGroupIndex id, [out,retval] long *retVal);
		[helpcontext(307031)]		HRESULT setVertices([in] d3drmGroupIndex id, [in] long idx, [in] long count, [in] SAFEARRAY(D3DRMVERTEX_CDESC) *vertexArray);
		[helpcontext(307032)]		HRESULT getVertices([in] d3drmGroupIndex id, [in] long idx,long count, [in,out] SAFEARRAY(D3DRMVERTEX_CDESC) *vertexArray);
		
		[hidden]		HRESULT addGroupJava([in] long vcnt, [in] long fcnt, [in] long vPerFace,
						[in,out] long *fdata, [out,retval] d3drmGroupIndex *retId);
		[hidden]		HRESULT getGroupDataJava([in] d3drmGroupIndex id, [in] long size,[in,out] long *fData);
		[hidden]		HRESULT setVerticesJava([in] d3drmGroupIndex id, [in] long idx, [in] long cnt, [in,out] float *vertexArray);
		[hidden]		HRESULT getVerticesJava([in] d3drmGroupIndex id, [in] long idx,long cnt, [in,out] float *vertexArray);


	};


		
	///////////////////////////////////////////////////////////////////////////
	[
		object,
		uuid(9F76FE08-8E92-11d1-8808-00C04FC2C602),
		helpstring("I_dxj_Direct3dRMWrap Interface"),
		pointer_default(unique),
		local,
		helpcontext(307200)
	]
	interface I_dxj_Direct3dRMWrap : IUnknown	
	{
		import "oaidl.idl";

		[hidden]		HRESULT InternalSetObject([in] IUnknown *lpdd);
		[hidden]		HRESULT InternalGetObject([out, retval] IUnknown **lpdd);

		
		[helpcontext(306201)]		HRESULT addDestroyCallback([in] I_dxj_Direct3dRMCallback *fn, [in] USERARG *arg);
		[helpcontext(306202)]		HRESULT deleteDestroyCallback([in] I_dxj_Direct3dRMCallback *fn, [in] USERARG *args);
		[helpcontext(306203)]		HRESULT cloneObject([out,retval] RMCLONEOBJECT **retv);
		[helpcontext(306204)]		HRESULT setAppData( [in] long data);
		[helpcontext(306205)]		HRESULT getAppData( [out, retval] long *data);
		[helpcontext(306206)]		HRESULT setName ([in] BSTR name);
		[helpcontext(306207)]		HRESULT getName([out,retval] BSTR *name);		//LPSTR
		[helpcontext(306208)]		HRESULT getClassName([out,retval] BSTR *name);	//LPSTR


		[helpcontext(307209)]		HRESULT apply([in] I_dxj_Direct3dRMObject *visual);
		[helpcontext(307210)]		HRESULT applyRelative([in] I_dxj_Direct3dRMFrame3 *f, [in] I_dxj_Direct3dRMObject *visual);
	};

	
	///////////////////////////////////////////////////////////////////////////
	/*
	[
		object,
		uuid(9F76FE0C-8E92-11d1-8808-00C04FC2C602),
		helpstring("I_dxj_Direct3dRMUserVisual Interface"),
		pointer_default(unique),
		local,
		hidden,
		helpcontext(307400)
	]
	interface I_dxj_Direct3dRMUserVisual : IUnknown	
	{
		import "oaidl.idl";

		[hidden]		HRESULT InternalSetObject([in] IUnknown *lpdd);
		[hidden]		HRESULT InternalGetObject([out, retval] IUnknown **lpdd);


		[helpcontext(306201)]		HRESULT addDestroyCallback([in] I_dxj_Direct3dRMCallback *fn, [in] USERARG *arg);
		[helpcontext(306202)]		HRESULT deleteDestroyCallback([in] I_dxj_Direct3dRMCallback *fn, [in] USERARG *args);
		[helpcontext(306203)]		HRESULT cloneObject([out,retval] RMCLONEOBJECT **retv);
		[helpcontext(306204)]		HRESULT setAppData( [in] long data);
		[helpcontext(306205)]		HRESULT getAppData( [out, retval] long *data);
		[helpcontext(306206)]		HRESULT setName ([in] BSTR name);
		[helpcontext(306207)]		HRESULT getName([out,retval] BSTR *name);		//LPSTR
		[helpcontext(306208)]		HRESULT getClassName([out,retval] BSTR *name);	//LPSTR

		
	};
	*/

	///////////////////////////////////////////////////////////////////////////
	[
		object,
		uuid(9F76FE11-8E92-11d1-8808-00C04FC2C602),
		helpstring("I_dxj_Direct3dRMObjectArray Interface"),			// Direct51
		pointer_default(unique),
		local,
		helpcontext(307600)
	]
	interface I_dxj_Direct3dRMObjectArray : IUnknown
	{
		import "oaidl.idl";

		[hidden]		HRESULT InternalSetObject([in] IUnknown *lpdd);
		[hidden]		HRESULT InternalGetObject([out, retval] IUnknown **lpdd);

		[helpcontext(307601)]		HRESULT getSize( [out, retval] long *retv);
		[helpcontext(307602)]		HRESULT getElement([in] long index, [out,retval] I_dxj_Direct3dRMObject **retv);
	};

	///////////////////////////////////////////////////////////////////////////
	[
		object,
		uuid(9F76FE12-8E92-11d1-8808-00C04FC2C602),
		helpstring("I_dxj_Direct3dRMDeviceArray Interface"),
		pointer_default(unique),
		local,
		helpcontext(307800)
	]
	interface I_dxj_Direct3dRMDeviceArray : IUnknown	
	{
		import "oaidl.idl";

		[hidden]		HRESULT InternalSetObject([in] IUnknown *lpdd);
		[hidden]		HRESULT InternalGetObject([out, retval] IUnknown **lpdd);
		[helpcontext(307801)]		HRESULT getSize( [out, retval] long *retv);
		[helpcontext(307802)]		HRESULT getElement([in] long index, [out, retval] I_dxj_Direct3dRMDevice3 **lplpD3DRMDevice);
	};

	///////////////////////////////////////////////////////////////////////////
	[
		object,
		uuid(9F76FE13-8E92-11d1-8808-00C04FC2C602),
		helpstring("IDirect3dRMViewportArray Interface"),
		pointer_default(unique),
		local,
		helpcontext(308000)
	]
	interface I_dxj_Direct3dRMViewportArray : IUnknown	
	{
		import "oaidl.idl";

		[hidden]		HRESULT InternalSetObject([in] IUnknown *lpdd);
		[hidden]		HRESULT InternalGetObject([out, retval] IUnknown **lpdd);
		[helpcontext(308001)]		HRESULT getSize( [out, retval] long *retv);
		[helpcontext(308002)]		HRESULT getElement([in] long index, [out, retval] I_dxj_Direct3dRMViewport2 **lplpD3DRMViewport);
	};

	///////////////////////////////////////////////////////////////////////////
	[
		object,
		uuid(9F76FE14-8E92-11d1-8808-00C04FC2C602),
		helpstring("I_dxj_Direct3dRMFrameArray Interface"),
		pointer_default(unique),
		local,
		helpcontext(308200)
	]
	interface I_dxj_Direct3dRMFrameArray : IUnknown	
	{
		import "oaidl.idl";

		[hidden]		HRESULT InternalSetObject([in] IUnknown *lpdd);
		[hidden]		HRESULT InternalGetObject([out, retval] IUnknown **lpdd);
		[helpcontext(308201)]		HRESULT getSize( [out, retval] long *retv);
		[helpcontext(308202)]		HRESULT getElement([in] long index, [out, retval] I_dxj_Direct3dRMFrame3 **ppFrame);
	};

	///////////////////////////////////////////////////////////////////////////
	[
		object,
		uuid(9F76FE15-8E92-11d1-8808-00C04FC2C602),
		helpstring("I_dxj_Direct3dRMVisualArray Interface"),
		pointer_default(unique),
		local,
		helpcontext(308400)
	]
	interface I_dxj_Direct3dRMVisualArray : IUnknown	
	{
		import "oaidl.idl";
		[hidden]		HRESULT InternalSetObject([in] IUnknown *lpdd);
		[hidden]		HRESULT InternalGetObject([out, retval] IUnknown **lpdd);
		[helpcontext(308401)]		HRESULT getSize( [out, retval] long *retv);
		[helpcontext(308402)]		HRESULT getElement( [in] long index, [out, retval] I_dxj_Direct3dRMVisual **retv);
		
	};

	///////////////////////////////////////////////////////////////////////////
	[
		object,
		uuid(9F76FE16-8E92-11d1-8808-00C04FC2C602),
		helpstring("IDirect3dRMLightArray Interface"),
		pointer_default(unique),
		local,
		helpcontext(308600)
	]
	interface I_dxj_Direct3dRMLightArray : IUnknown	
	{
		import "oaidl.idl";

		[hidden]		HRESULT InternalSetObject([in] IUnknown *lpdd);
		[hidden]		HRESULT InternalGetObject([out, retval] IUnknown **lpdd);
		[helpcontext(308601)]		HRESULT getSize( [out, retval] long *retv);
		[helpcontext(308602)]		HRESULT getElement( [in] long index, [out, retval] I_dxj_Direct3dRMLight **retv);		
	};

	///////////////////////////////////////////////////////////////////////////
	[
		object,
		uuid(9F76FE17-8E92-11d1-8808-00C04FC2C602),
		helpstring("I_dxj_Direct3dRMPickArray Interface"),
		pointer_default(unique),
		local,
		helpcontext(308800)
	]
	interface I_dxj_Direct3dRMPickArray : IUnknown	
	{
		import "oaidl.idl";

		[hidden]		HRESULT InternalSetObject([in] IUnknown *lpdd);
		[hidden]		HRESULT InternalGetObject([out, retval] IUnknown **lpdd);
		[helpcontext(308801)]		HRESULT getSize( [out, retval] long *retv);

		[helpcontext(308802)]		HRESULT getPickVisual([in] long index, [in] D3DRMPICKDESC_CDESC *pickDesc,
										[out,retval] I_dxj_Direct3dRMVisual **visual);

		[helpcontext(308803)]		HRESULT getPickFrame([in] long index, [in] D3DRMPICKDESC_CDESC *pickDesc,
 								  [out, retval] I_dxj_Direct3dRMFrameArray **frameArray);		
	};



	///////////////////////////////////////////////////////////////////////////
	[
		object,
		uuid(9F76FE18-8E92-11d1-8808-00C04FC2C602),
		helpstring("I_dxj_Direct3dRMFaceArray Interface"),
		pointer_default(unique),
		local,
		helpcontext(309000)
	]
	interface I_dxj_Direct3dRMFaceArray : IUnknown	
	{
		import "oaidl.idl";

		[hidden]		HRESULT InternalSetObject([in] IUnknown *lpdd);
		[hidden]		HRESULT InternalGetObject([out, retval] IUnknown **lpdd);
		[helpcontext(309001)]		HRESULT getSize( [out, retval] long *retv);
		[helpcontext(309002)]		HRESULT getElement([in] long index, [out, retval] I_dxj_Direct3dRMFace2 **retv);
	};

	///////////////////////////////////////////////////////////////////////////

	[
		object,
		uuid(9F76FE19-8E92-11d1-8808-00C04FC2C602),
		helpstring("I_dxj_Direct3dRMPick2Array Interface"),
		pointer_default(unique),
		local,
		helpcontext(309200)
	]
	interface I_dxj_Direct3dRMPick2Array : IUnknown	
	{
		import "oaidl.idl";

		[hidden]		HRESULT InternalSetObject([in] IUnknown *lpdd);
		[hidden]		HRESULT InternalGetObject([out, retval] IUnknown **lpdd);

		[helpcontext(309201)]		HRESULT getSize( [out, retval] long *retv);

		[helpcontext(309202)]		HRESULT getPickVisual([in] long index, [in] D3DRMPICKDESC2_CDESC *pickDesc,
										[out,retval] I_dxj_Direct3dRMVisual **visual);

		[helpcontext(309203)]		HRESULT getPickFrame([in] long index, [in] D3DRMPICKDESC2_CDESC *pickDesc,
 								  [out, retval] I_dxj_Direct3dRMFrameArray **frameArray);
	};







	[	object,
		uuid(9F76FE33-8E92-11d1-8808-00C04FC2C602),
		helpstring("I_dxj_Direct3dRMFrameMoveCallback3"),
		pointer_default(unique),
		helpcontext(309400)
	]	interface I_dxj_Direct3dRMFrameMoveCallback3 : IUnknown
	{
		import "oaidl.idl";

		[helpcontext(309401)]		HRESULT callbackRMFrameMove([in] I_dxj_Direct3dRMFrame3 *f,
								[in] USERARG *arg, [in] float delta);
	};

	
	[	object,
		uuid(9F76FE34-8E92-11d1-8808-00C04FC2C602),	// Direct45
		helpstring("I_dxj_Direct3dRMDeviceUpdateCallback3 Interface"),
		pointer_default(unique),
		helpcontext(309600)

	]	
	interface I_dxj_Direct3dRMDeviceUpdateCallback3 : IUnknown
	{
		import "oaidl.idl";

		//TODO update callback wont work in VB with structures
		// User supplied callback
		[helpcontext(309601)]		HRESULT callbackRMUpdate([in] I_dxj_Direct3dRMDevice3 *f,
				[in] USERARG *arg, [in] int n, [in] D3DRECT_CDESC *Update);
	};
	

	[	object,
		uuid(9F76FE35-8E92-11d1-8808-00C04FC2C602),
		helpstring("I_dxj_Direct3dRMAnimationArray"),
		pointer_default(unique),
                local,
		helpcontext(309800)
	]	
	interface I_dxj_Direct3dRMAnimationArray : IUnknown
	{
		import "oaidl.idl";
		[helpcontext(309801)]		HRESULT getSize([out,retval] long *ret);
		[helpcontext(309802)]		HRESULT getElement([in] long index,[out,retval] I_dxj_Direct3dRMAnimation2 **anim);		
	};


	[
		object,
		uuid(9F76FE36-8E92-11d1-8808-00C04FC2C602),
		helpstring("I_dxj_Direct3dRMShadow2 Interface"),
		pointer_default(unique),
		local,
		helpcontext(310000)

	]
	interface I_dxj_Direct3dRMShadow2 : IUnknown	
	{
		import "oaidl.idl";

		[hidden]		HRESULT InternalSetObject([in] IUnknown *lpdd);
		[hidden]		HRESULT InternalGetObject([out, retval] IUnknown **lpdd);

		[helpcontext(306201)]		HRESULT addDestroyCallback([in] I_dxj_Direct3dRMCallback *fn, [in] USERARG *arg);
		[helpcontext(306202)]		HRESULT deleteDestroyCallback([in] I_dxj_Direct3dRMCallback *fn, [in] USERARG *args);
		[helpcontext(306203)]		HRESULT cloneObject([out,retval] RMCLONEOBJECT **retv);
		[helpcontext(306204)]		HRESULT setAppData( [in] long data);
		[helpcontext(306205)]		HRESULT getAppData( [out, retval] long *data);
		[helpcontext(306206)]		HRESULT setName ([in] BSTR name);
		[helpcontext(306207)]		HRESULT getName([out,retval] BSTR *name);		//LPSTR
		[helpcontext(306208)]		HRESULT getClassName([out,retval] BSTR *name);	//LPSTR

		[helpcontext(310009)]		HRESULT setOptions([in] d3drmShadowFlags flags);



	};

	[
		object,
		uuid(9F76FE20-8E92-11d1-8808-00C04FC2C602),
		helpstring("I_dxj_Direct3dRMViewport2 Interface"),
		pointer_default(unique),
		local,
		helpcontext(310200)
	]
	interface I_dxj_Direct3dRMViewport2 : IUnknown	
	{
		import "oaidl.idl";
		[hidden]		HRESULT InternalSetObject([in] IUnknown *lpdd);
		[hidden]		HRESULT InternalGetObject([out, retval] IUnknown **lpdd);
		//
		/*** d3drmObjects ***/
		//
		[helpcontext(306201)]		HRESULT addDestroyCallback([in] I_dxj_Direct3dRMCallback *fn, [in] USERARG *arg);
		[helpcontext(306202)]		HRESULT deleteDestroyCallback([in] I_dxj_Direct3dRMCallback *fn, [in] USERARG *args);
		[helpcontext(306203)]		HRESULT cloneObject([out,retval] RMCLONEOBJECT **retv);
		[helpcontext(306204)]		HRESULT setAppData( [in] long data);
		[helpcontext(306205)]		HRESULT getAppData( [out, retval] long *data);
		[helpcontext(306206)]		HRESULT setName ([in] BSTR name);
		[helpcontext(306207)]		HRESULT getName([out,retval] BSTR *name);		//LPSTR
		[helpcontext(306208)]		HRESULT getClassName([out,retval] BSTR *name);	//LPSTR
		//
		// _dxj_Direct3dRMViewport
		//		
		[helpcontext(310209)]		HRESULT clear([in] d3drmViewportClearFlags flags);
		[helpcontext(310210)]		HRESULT render([in] I_dxj_Direct3dRMFrame3 *rootFrame);
		[helpcontext(310211)]		HRESULT getCamera([out, retval] I_dxj_Direct3dRMFrame3 **val);
		[helpcontext(310212)]		HRESULT getDevice([out, retval] I_dxj_Direct3dRMDevice3 **val);

		[helpcontext(310213)]		HRESULT setFront( [in] float v);
		[helpcontext(310214)]		HRESULT setBack( [in] float v);
		[helpcontext(310215)]		HRESULT setField( [in] float v);
		[helpcontext(310216)]		HRESULT setUniformScaling( [in] dxBool flag);  //BOOL
		[helpcontext(310217)]		HRESULT setCamera( [in] I_dxj_Direct3dRMFrame3 *f);
		[helpcontext(310218)]		HRESULT setProjection([in] d3drmProjectionType val);
		[helpcontext(310219)]		HRESULT transform([out] D3DRMVECTOR4D_CDESC *d, [in] D3DVECTOR_CDESC *s);
		[helpcontext(310220)]		HRESULT inverseTransform([out] D3DVECTOR_CDESC *d, [in] D3DRMVECTOR4D_CDESC *s);

		[helpcontext(310221)]		HRESULT configure([in] long x, [in] long y, [in] long width, [in] long height);
		[helpcontext(310222)]		HRESULT forceUpdate([in] long x1, [in] long y1, [in] long x2, [in] long y2);
		[helpcontext(310223)]		HRESULT setPlane([in] float left, [in] float right,	[in] float bottom, [in] float top);
		[helpcontext(310224)]		HRESULT getPlane([in,out] float *l, [in,out] float *r, [in,out] float *b, [in,out] float *t);
		[helpcontext(310225)]		HRESULT pick([in] long x, [in] long y, [out, retval] I_dxj_Direct3dRMPickArray **retv);
		[helpcontext(310226)]		HRESULT getUniformScaling([out, retval] dxBool *retv); //BOOL
		[helpcontext(310227)]		HRESULT getX([out, retval] long *retv);
		[helpcontext(310228)]		HRESULT getY([out, retval] long *retv);
		[helpcontext(310229)]		HRESULT getHeight([out, retval] long *w);
		[helpcontext(310230)]		HRESULT getWidth([out, retval] long *w);
		[helpcontext(310231)]		HRESULT getField([out, retval] float *retv);
		[helpcontext(310232)]		HRESULT getBack([out, retval] float *retv);
		[helpcontext(310233)]		HRESULT getFront([out, retval] float *retv);
		[helpcontext(310234)]		HRESULT getProjection([out, retval]  d3drmProjectionType *retv);
	};

	///////////////////////////////////////////////////////////////////////////
	[
		object,
		uuid(9F76FE21-8E92-11d1-8808-00C04FC2C602),
		helpstring("I_dxj_Direct3dRMMaterial2 Interface"),
		pointer_default(unique),
		helpcontext(310400)

	]
	interface I_dxj_Direct3dRMMaterial2 : IUnknown	
	{
		import "oaidl.idl";

		[hidden]		HRESULT InternalSetObject([in] IUnknown *lpdd);
		[hidden]		HRESULT InternalGetObject([out, retval] IUnknown **lpdd);

		[helpcontext(306201)]		HRESULT addDestroyCallback([in] I_dxj_Direct3dRMCallback *fn, [in] USERARG *arg);
		[helpcontext(306202)]		HRESULT deleteDestroyCallback([in] I_dxj_Direct3dRMCallback *fn, [in] USERARG *args);
		[helpcontext(306203)]		HRESULT cloneObject([out,retval] RMCLONEOBJECT **retv);
		[helpcontext(306204)]		HRESULT setAppData( [in] long data);
		[helpcontext(306205)]		HRESULT getAppData( [out, retval] long *data);
		[helpcontext(306206)]		HRESULT setName ([in] BSTR name);
		[helpcontext(306207)]		HRESULT getName([out,retval] BSTR *name);		//LPSTR
		[helpcontext(306208)]		HRESULT getClassName([out,retval] BSTR *name);	//LPSTR
		/*
		* IDirect3DRMMaterial methods
		*/
		[helpcontext(310409)]		HRESULT setPower([in] float power);
		[helpcontext(310410)]		HRESULT setSpecular([in] float r, [in] float g, [in] float b);
		[helpcontext(310411)]		HRESULT setEmissive([in] float r, [in] float g, [in] float b);
		[helpcontext(310412)]		HRESULT setAmbient([in] float r, [in] float g, [in] float b);
		[helpcontext(310413)]		HRESULT getPower([out, retval] float *power);
		[helpcontext(310414)]		HRESULT getSpecular([out] float *r, [out] float *g, [out] float *b);
		[helpcontext(310415)]		HRESULT getEmissive([out] float *r, [out] float *g, [out] float *b);
		[helpcontext(310416)]		HRESULT getAmbient([out] float *r, [out] float *g, [out] float *b);
	};

	///////////////////////////////////////////////////////////////////////////
	[
		object,
		uuid(9F76FE22-8E92-11d1-8808-00C04FC2C602),
		helpstring("I_dxj_Direct3dRMAnimation2 Interface"),
		pointer_default(unique),
		local,
		helpcontext(310600)

	]
	interface I_dxj_Direct3dRMAnimation2 : IUnknown 
	{
		import "oaidl.idl";

		[hidden]		HRESULT InternalSetObject([in] IUnknown *lpdd);
	 	[hidden]		HRESULT InternalGetObject([out, retval] IUnknown **lpdd);

		[helpcontext(306201)]		HRESULT addDestroyCallback([in] I_dxj_Direct3dRMCallback *fn, [in] USERARG *arg);
		[helpcontext(306202)]		HRESULT deleteDestroyCallback([in] I_dxj_Direct3dRMCallback *fn, [in] USERARG *args);
		[helpcontext(306203)]		HRESULT cloneObject([out,retval] RMCLONEOBJECT **retv);
		[helpcontext(306204)]		HRESULT setAppData( [in] long data);
		[helpcontext(306205)]		HRESULT getAppData( [out, retval] long *data);
		[helpcontext(306206)]		HRESULT setName ([in] BSTR name);
		[helpcontext(306207)]		HRESULT getName([out,retval] BSTR *name);		//LPSTR
		[helpcontext(306208)]		HRESULT getClassName([out,retval] BSTR *name);	//LPSTR
		/*
		* IDirect3DRMAnimation2 methods
		*/
		[helpcontext(310609)]		HRESULT setOptions([in] d3drmAnimationOptions flags);
		[helpcontext(310610)]		HRESULT addRotateKey([in] float time, [in] D3DRMQUATERNION_CDESC *q);
		[helpcontext(310611)]		HRESULT addPositionKey([in] float time, [in] float x, [in] float y,	[in] float z);
		[helpcontext(310612)]		HRESULT addScaleKey([in] float time, [in] float x, [in] float y, [in] float z);
		[helpcontext(310613)]		HRESULT deleteKey([in] float time);
		[helpcontext(310614)]		HRESULT setFrame([in] I_dxj_Direct3dRMFrame3 *frame);
		[helpcontext(310615)]		HRESULT getFrame([out,retval] I_dxj_Direct3dRMFrame3 **frame);		
		[helpcontext(310616)]		HRESULT setTime([in] float time);
		[helpcontext(310617)]		HRESULT getOptions([out, retval] d3drmAnimationOptions *options);
		[helpcontext(310618)]		HRESULT addKey([in] D3DRMANIMATIONKEY_CDESC *key);
		[helpcontext(310619)]		HRESULT deleteKeyById([in] long id);
		[helpcontext(310620)]		HRESULT getKeys([in] float timeMin,[in] float timeMax ,[in,out] SAFEARRAY(D3DRMANIMATIONKEY_CDESC) *keyArray);
		[helpcontext(310621)]		HRESULT getKeysCount([in] float timeMin,[in] float timeMax, [out,retval] long *count);
		[helpcontext(310622)]		HRESULT modifyKey([in] D3DRMANIMATIONKEY_CDESC *key);
	};

	[
		object,
		uuid(9F76FE23-8E92-11d1-8808-00C04FC2C602),
		helpstring("I_dxj_Direct3dRMAnimationSet2 Interface"),
		pointer_default(unique),
		local,
		helpcontext(310800)

	]
	interface I_dxj_Direct3dRMAnimationSet2 : IUnknown	
	{
		import "oaidl.idl";

		[hidden]		HRESULT InternalSetObject([in] IUnknown *lpdd);
		[hidden]		HRESULT InternalGetObject([out, retval] IUnknown **lpdd);

		[helpcontext(306201)]		HRESULT addDestroyCallback([in] I_dxj_Direct3dRMCallback *fn, [in] USERARG *arg);
		[helpcontext(306202)]		HRESULT deleteDestroyCallback([in] I_dxj_Direct3dRMCallback *fn, [in] USERARG *args);
		[helpcontext(306203)]		HRESULT cloneObject([out,retval] RMCLONEOBJECT **retv);
		[helpcontext(306204)]		HRESULT setAppData( [in] long data);
		[helpcontext(306205)]		HRESULT getAppData( [out, retval] long *data);
		[helpcontext(306206)]		HRESULT setName ([in] BSTR name);
		[helpcontext(306207)]		HRESULT getName([out,retval] BSTR *name);		//LPSTR
		[helpcontext(306208)]		HRESULT getClassName([out,retval] BSTR *name);	//LPSTR

		//
		// IDirect3DRMAnimationSet methods
		//
		[helpcontext(310809)]		HRESULT addAnimation([in] I_dxj_Direct3dRMAnimation2 *aid);
		[helpcontext(310810)]		HRESULT deleteAnimation([in] I_dxj_Direct3dRMAnimation2 *aid);

		[helpcontext(310811)]		HRESULT getAnimations([out,retval] I_dxj_Direct3dRMAnimationArray **ret);

		[helpcontext(310812)]		HRESULT loadFromFile( [in] BSTR filename, [in] VARIANT id,
						[in] d3drmLoadFlags flags, [in] I_dxj_Direct3dRMLoadTextureCallback3 * loadTextureImplementation,
						[in] USERARG *userArgument, [in] I_dxj_Direct3dRMFrame3 *parentFrame);

		
		[helpcontext(310813)]		HRESULT setTime([in] float time);
	};

	[
		object,
		uuid(9F76FE24-8E92-11d1-8808-00C04FC2C602),
		helpstring("I_dxj_Direct3dRM3 Interface"),
		pointer_default(unique),
		local,
		helpcontext(311000)

	]
	interface I_dxj_Direct3dRM3 : IUnknown	
	{
		[hidden]		HRESULT InternalSetObject([in] IUnknown *lpdd);
		[hidden]		HRESULT InternalGetObject([out, retval] IUnknown **lpdd);

		[helpcontext(311001)]		HRESULT createDeviceFromClipper([in]I_dxj_DirectDrawClipper *lpDDClipper,[in]BSTR guid,[in]int width,[in]int height,[out,retval]I_dxj_Direct3dRMDevice3 **retv);
		[helpcontext(311002)]		HRESULT createFrame([in]I_dxj_Direct3dRMFrame3 *parent,[out,retval]I_dxj_Direct3dRMFrame3 **retv);
		[helpcontext(311003)]		HRESULT createLightRGB ([in]d3drmLightType lt,[in]float vred,[in]float vgreen,[in]float vblue,[out,retval]I_dxj_Direct3dRMLight **retv);
		[helpcontext(311004)]		HRESULT createLight([in]d3drmLightType lt,[in]long color,[out,retval]I_dxj_Direct3dRMLight **retv);    
		[helpcontext(311005)]		HRESULT createMeshBuilder([out,retval]I_dxj_Direct3dRMMeshBuilder3 **retv);
		[helpcontext(311006)]		HRESULT createMaterial([in]float d, [out,retval]I_dxj_Direct3dRMMaterial2 **val);
		[helpcontext(311007)]		HRESULT loadTexture([in]BSTR name, [out,retval]I_dxj_Direct3dRMTexture3 **retval);
		[helpcontext(311008)]		HRESULT createViewport([in]I_dxj_Direct3dRMDevice3 *dev,[in] I_dxj_Direct3dRMFrame3 *fr,[in]long x,[in]long y,[in]long w,[in]long h,[out,retval]I_dxj_Direct3dRMViewport2 **retval);
		[helpcontext(311009)]		HRESULT setDefaultTextureColors( [in]long numTextureColors);
		[helpcontext(311010)]		HRESULT setDefaultTextureShades( [in]long numTextureShades);		
		[helpcontext(311011)]		HRESULT createAnimationSet([out,retval]I_dxj_Direct3dRMAnimationSet2 **retval) ;
		[helpcontext(311012)]		HRESULT createMesh([out,retval]I_dxj_Direct3dRMMesh **retv);
		[helpcontext(311013)]		HRESULT createFace([out,retval]I_dxj_Direct3dRMFace2 **retv);
		[helpcontext(311014)]		HRESULT createAnimation([out,retval]I_dxj_Direct3dRMAnimation2 **retv);
		[helpcontext(311015)]		HRESULT tick([in]float tic);				
		[helpcontext(311016)]		HRESULT createDeviceFromSurface( [in]BSTR g, [in]I_dxj_DirectDraw4 *dd, [in]I_dxj_DirectDrawSurface4 *dds,[in] d3drmCreateDeviceFlags flags,[out,retval]  I_dxj_Direct3dRMDevice3 **retval);
		[helpcontext(311017)]		HRESULT createTextureFromSurface([in] I_dxj_DirectDrawSurface4 *dds,[out,retval] I_dxj_Direct3dRMTexture3 **retv);

		[helpcontext(311018)]		HRESULT createWrap( [in]d3drmWrapType t, [in]I_dxj_Direct3dRMFrame3 *f,
			[in] float ox,[in] float oy, 
			[in]float oz, [in]float dx, [in] float dy,  [in]float dz,
			[in]float ux, [in]float uy, [in] float uz, [in]float ou,  
			[in]float ov, [in]float su,  [in] float sv,[out,retval]I_dxj_Direct3dRMWrap **retv);

		[helpcontext(311019)]		HRESULT getSearchPath([out,retval]BSTR *name);
		[helpcontext(311020)]		HRESULT getDevices([out,retval] I_dxj_Direct3dRMDeviceArray **retval);

		[helpcontext(311021)]		HRESULT getNamedObject([in]BSTR name,[out,retval]I_dxj_Direct3dRMObject **retval);
		[helpcontext(311022)]		HRESULT setSearchPath([in] BSTR name);
		[helpcontext(311023)]		HRESULT addSearchPath([in] BSTR name);
			
		[helpcontext(311024)]		HRESULT enumerateObjects([in]I_dxj_Direct3dRMEnumerateObjectsCallback *enumerateObjectsImplementation,[in] USERARG *userArgument); 

		[helpcontext(311025)]		HRESULT loadFromFile([in]BSTR filename, [in]VARIANT id, 
                        [in] SAFEARRAY(BSTR) *guidArray, [in]long count,[in] d3drmLoadFlags options,[in] I_dxj_Direct3dRMLoadCallback *loadCallbackImplementation, 
						[in]USERARG *loadArgument, [in]I_dxj_Direct3dRMLoadTextureCallback3 *loadTextureImplementation, [in]USERARG *loadTextureArgument,[in] I_dxj_Direct3dRMFrame3 *parentFrame);

		[helpcontext(311026)]		HRESULT createShadow([in] I_dxj_Direct3dRMVisual *visual, 
				[in]			I_dxj_Direct3dRMLight *light,
				[in]			float px, [in]float py,[in]float pz, 
				[in]			float nx, [in]float ny,[in]float nz,
				[out,retval]	I_dxj_Direct3dRMShadow2 **retv);

		[helpcontext(311027)]		HRESULT createProgressiveMesh([out,retval]I_dxj_Direct3dRMProgressiveMesh **retv);
		[helpcontext(311028)]		HRESULT createClippedVisual([in] I_dxj_Direct3dRMVisual *vis,[out,retval] I_dxj_Direct3dRMClippedVisual **ret);

		[helpcontext(311029)]		HRESULT getOptions([out,retval] d3drmHandedness *options);
		[helpcontext(311030)]		HRESULT setOptions([in] d3drmHandedness options);
        
        [helpcontext(311031)]		HRESULT createInterpolatorMesh([out,retval] I_dxj_Direct3dRMMeshInterpolator **ret);
        [helpcontext(311032)]		HRESULT createInterpolatorTexture([out,retval] I_dxj_Direct3dRMTextureInterpolator **ret);
        [helpcontext(311033)]		HRESULT createInterpolatorMaterial([out,retval] I_dxj_Direct3dRMMaterialInterpolator **ret);
        [helpcontext(311034)]		HRESULT createInterpolatorFrame([out,retval] I_dxj_Direct3dRMFrameInterpolator **ret)       ;
        [helpcontext(311035)]		HRESULT createInterpolatorViewport([out,retval] I_dxj_Direct3dRMViewportInterpolator **ret) ;
        [helpcontext(311036)]		HRESULT createInterpolatorLight([out,retval] I_dxj_Direct3dRMLightInterpolator **ret)       ;

	};
	[
		object,
		uuid(9F76FE25-8E92-11d1-8808-00C04FC2C602),
		helpstring("I_dxj_Direct3dRMFrame3 Interface"),
		pointer_default(unique),
		local,
		helpcontext(311200)
 	]
	interface I_dxj_Direct3dRMFrame3 : IUnknown	
	{
		import "oaidl.idl";

		[hidden]		HRESULT InternalSetObject([in] IUnknown *lpdd);
		[hidden]		HRESULT InternalGetObject([out, retval] IUnknown **lpdd);

		[helpcontext(306201)]		HRESULT addDestroyCallback([in] I_dxj_Direct3dRMCallback *fn, [in] USERARG *arg);
		[helpcontext(306202)]		HRESULT deleteDestroyCallback([in] I_dxj_Direct3dRMCallback *fn, [in] USERARG *args);
		[helpcontext(306203)]		HRESULT cloneObject([out,retval] RMCLONEOBJECT **retv);
		[helpcontext(306204)]		HRESULT setAppData( [in] long data);
		[helpcontext(306205)]		HRESULT getAppData( [out, retval] long *data);
		[helpcontext(306206)]		HRESULT setName ([in] BSTR name);
		[helpcontext(306207)]		HRESULT getName([out,retval] BSTR *name);		//LPSTR
		[helpcontext(306208)]		HRESULT getClassName([out,retval] BSTR *name);	//LPSTR

		//
		// _dxj_Direct3dRMFrame
		//
		[helpcontext(311209)]		HRESULT addVisual( [in] I_dxj_Direct3dRMVisual *v );		
		[helpcontext(311210)]		HRESULT deleteVisual( [in] I_dxj_Direct3dRMVisual *v );
		
		[helpcontext(311211)]		HRESULT addLight( [in] I_dxj_Direct3dRMLight *val);
		[helpcontext(311212)]		HRESULT deleteLight([in] I_dxj_Direct3dRMLight *l);



		[helpcontext(311213)]		HRESULT addChild([in] I_dxj_Direct3dRMFrame3 *child);
		[helpcontext(311214)]		HRESULT deleteChild([in] I_dxj_Direct3dRMFrame3 *c);

		//CONSIDER GETING TRANSFORM IN A D3DMATRIX STRUCT INSTEAD
		[helpcontext(311215)]		HRESULT getTransform([in] I_dxj_Direct3DRMFrame3 *referenceFrame,[in,out] SAFEARRAY(float) *val);
		[helpcontext(311216)]		HRESULT addTransform([in] d3drmCombineType t, [in] SAFEARRAY(float) *val);

		[helpcontext(311217)]		HRESULT addTranslation([in] d3drmCombineType t, [in] float x, [in] float y, [in] float z);
		[helpcontext(311218)]		HRESULT addScale([in] d3drmCombineType combineType, [in] float sx, [in] float sy,[in] float sz);
		[helpcontext(311219)]		HRESULT addRotation([in] d3drmCombineType combineType, [in] float x,
							[in] float y,[in] float z, [in] float theta);

		[helpcontext(311220)]		HRESULT addMoveCallback( [in] I_dxj_Direct3dRMFrameMoveCallback3 *frameMoveImplementation, [in] USERARG *userArgument, [in] d3drmCallbackOrderFlags flags);
		[helpcontext(311221)]		HRESULT deleteMoveCallback([in] I_dxj_Direct3dRMFrameMoveCallback3 *frameMoveImplementation, [in] USERARG *userArgument);

		[helpcontext(311222)]		HRESULT transform([in,out] D3DVECTOR_CDESC *d, [in] D3DVECTOR_CDESC *s);
		[helpcontext(311223)]		HRESULT transformVectors([in]I_dxj_Direct3dRMFrame3 *reference,[in] long num, [in,out] SAFEARRAY(D3DVECTOR_CDESC) *DstVectors,[in,out] SAFEARRAY(D3DVECTOR_CDESC) *SrcVectors);

		[helpcontext(311224)]		HRESULT inverseTransform([in,out] D3DVECTOR_CDESC *d, [in] D3DVECTOR_CDESC *s);
		[helpcontext(311225)]		HRESULT inverseTransformVectors([in]I_dxj_Direct3dRMFrame3 *reference,[in] long num, [in,out] SAFEARRAY(D3DVECTOR_CDESC) *DstVectors,[in,out] SAFEARRAY(D3DVECTOR_CDESC) *SrcVectors);




		[helpcontext(311226)]		HRESULT getAxes([in,out]D3DVECTOR_CDESC *dir,[in,out]D3DVECTOR_CDESC *up);
		[helpcontext(311227)]		HRESULT getBox([in,out]D3DRMBOX_CDESC *box);
		[helpcontext(311228)]		HRESULT getBoxEnable([out,retval] dxBool *b);

		[helpcontext(311229)]		HRESULT getChildren([out, retval] I_dxj_Direct3dRMFrameArray **children);

		[helpcontext(311230)]		HRESULT getColor([out, retval] d3dcolor *retv);

		[helpcontext(311231)]		HRESULT getHierarchyBox([in,out]D3DRMBOX_CDESC *box);
		[helpcontext(311232)]		HRESULT getInheritAxes([out,retval] dxBool *b);		

		[helpcontext(311233)]		HRESULT getLights( [out, retval] I_dxj_Direct3dRMLightArray **lights);
		[helpcontext(311234)]		HRESULT getMaterial(I_dxj_Direct3dRMMaterial2 **ret);
		[helpcontext(311235)]		HRESULT getMaterialMode([out, retval] d3drmMaterialMode *retv);
		[helpcontext(311236)]		HRESULT getOrientation( [in] I_dxj_Direct3dRMFrame3 *ref, [in,out] D3DVECTOR_CDESC *dir,[in,out] D3DVECTOR_CDESC *up);
		[helpcontext(311237)]		HRESULT getMaterialOverride([in,out] D3DRMMATERIALOVERRIDE_CDESC *override);
		[helpcontext(311238)]		HRESULT getMaterialOverrideTexture([out,retval] I_dxj_Direct3dRMTexture3 **ret);		

		[helpcontext(311239)]		HRESULT getParent( [out, retval] I_dxj_Direct3dRMFrame3 **retv);

		[helpcontext(311240)]		HRESULT getPosition([in] I_dxj_Direct3dRMFrame3 *ref, [in,out] D3DVECTOR_CDESC *position);
		[helpcontext(311241)]		HRESULT getRotation([in] I_dxj_Direct3dRMFrame3 *ref,[in,out] D3DVECTOR_CDESC *axis,[out] float *theta);

		[helpcontext(311242)]		HRESULT getScene([out, retval] I_dxj_Direct3dRMFrame3 **retv);

		[helpcontext(311243)]		HRESULT getSceneBackground([out, retval] d3dcolor *retv);
		[helpcontext(311244)]		HRESULT getSceneBackgroundDepth([out, retval] I_dxj_DirectDrawSurface7 **retv);
		[helpcontext(311245)]		HRESULT getSceneFogColor([out, retval] d3dcolor *retv);
		[helpcontext(311246)]		HRESULT getSceneFogEnable([out, retval] dxBool *benable); 
		[helpcontext(311247)]		HRESULT getSceneFogMode([out, retval] d3drmFogMode *retv);
		[helpcontext(311248)]		HRESULT getSceneFogMethod([out, retval] d3drmFogMethod *method);
		[helpcontext(311249)]		HRESULT getSceneFogParams([in,out] float *start, [in,out] float *end, [in,out] float *density);
	
								
		[helpcontext(311250)]		HRESULT getSortMode([out, retval] d3drmSortMode *retv);
		[helpcontext(311251)]		HRESULT getTexture([out,retval] I_dxj_Direct3dRMTexture3 **ref);

		[helpcontext(311252)]		HRESULT getVelocity([in] I_dxj_Direct3dRMFrame3 *ref, [in,out] D3DVECTOR_CDESC *vel,
															  	[in] dxBool includeRotationalVelocity);

		[helpcontext(311253)]		HRESULT getVisuals([out, retval] I_dxj_Direct3dRMVisualArray **visuals);																
		[helpcontext(311254)]		HRESULT getVisual([in] long index, [out, retval] I_dxj_Direct3dRMVisual **visualArray);
		[helpcontext(311255)]		HRESULT getVisualCount([out, retval] long *vis);

		
		[helpcontext(311256)]		HRESULT getTraversalOptions([out,retval] d3drmTraversalFlags *ret);
		[helpcontext(311257)]		HRESULT getZBufferMode([out,retval] d3drmZBufferMode *ret);

		//CONSIDER what of loading from resources
		[helpcontext(311258)]		HRESULT loadFromFile([in] BSTR filename, [in] VARIANT id,
							[in] d3drmLoadFlags flags, [in] I_dxj_Direct3dRMLoadTextureCallback3 *loadTextureImplementation,
							[in] USERARG *userArgument);

		[helpcontext(311259)]		HRESULT lookAt([in] I_dxj_Direct3dRMFrame3 *tgt, [in] I_dxj_Direct3dRMFrame3 *reference, [in] d3drmFrameConstraint contraint);
		[helpcontext(311260)]		HRESULT move( [in] float delta);
	
		[helpcontext(311261)]		HRESULT rayPick([in]I_dxj_Direct3dRMFrame3 *refer,[in]D3DRMRAY_CDESC *ray,[in]d3drmRayPickFlags flags,[out,retval]I_dxj_Direct3dRMPick2Array **retv);
       	[helpcontext(311262)]		HRESULT save([in]BSTR name,[in] d3drmXofFormat format, [in] d3drmSaveFlags flags);
		[helpcontext(311263)]		HRESULT setAxes([in]float dx,[in]float dy,[in]float dz,[in]float ux,[in]float uy,[in]float uz);
		[helpcontext(311264)]		HRESULT setBox([in]D3DRMBOX_CDESC *box);
		[helpcontext(311265)]		HRESULT setBoxEnable([in] dxBool boxEnable);
		[helpcontext(311266)]		HRESULT setColor([in] d3dcolor c);
		[helpcontext(311267)]		HRESULT setColorRGB([in] float r, [in] float g, [in] float b);
		
		[helpcontext(311268)]		HRESULT setInheritAxes([in]dxBool inheritFromParent);
		
		[helpcontext(311269)]		HRESULT setMaterial([in] I_dxj_Direct3dRMMaterial2 *mat);
		[helpcontext(311270)]		HRESULT setMaterialMode([in] d3drmMaterialMode val);		
		[helpcontext(311271)]		HRESULT setMaterialOverride([in,out] D3DRMMATERIALOVERRIDE_CDESC *override);
		[helpcontext(311272)]		HRESULT setMaterialOverrideTexture([in] I_dxj_Direct3dRMTexture3 *tex);

		[helpcontext(311273)]		HRESULT setOrientation( [in] I_dxj_Direct3dRMFrame3 *reference, [in] float dx,
								  [in] float dy, [in] float dz, [in] float ux,
									[in] float uy, [in] float uz);

		[helpcontext(311274)]		HRESULT setPosition( [in] I_dxj_Direct3dRMFrame3 *reference, [in] float x,
													[in] float y, [in] float z);
		[helpcontext(311275)]		HRESULT setQuaternion([in]I_dxj_Direct3dRMFrame3 *reference,D3DRMQUATERNION_CDESC *quat);

		[helpcontext(311276)]		HRESULT setRotation( [in] I_dxj_Direct3dRMFrame3 *reference, [in] float x,
							[in] float y, [in] float z, [in] float theta);

		[helpcontext(311277)]		HRESULT setSceneBackground([in] d3dcolor c);		
		[helpcontext(311278)]		HRESULT setSceneBackgroundDepth([in] I_dxj_DirectDrawSurface7 *s);
		[helpcontext(311279)]		HRESULT setSceneBackgroundImage([in] I_dxj_Direct3dRMTexture3 *i);
		[helpcontext(311280)]		HRESULT setSceneBackgroundRGB([in] float r, [in] float g, [in] float b);
		[helpcontext(311281)]		HRESULT setSceneFogColor([in] d3dcolor c);
		[helpcontext(311282)]		HRESULT setSceneFogEnable([in] dxBool benable);  
		[helpcontext(311283)]		HRESULT setSceneFogMethod([in] d3drmFogMethod method);  
		[helpcontext(311284)]		HRESULT setSceneFogMode([in] d3drmFogMode c);
		[helpcontext(311285)]		HRESULT setSceneFogParams([in] float start, [in] float end, [in] float density);
		[helpcontext(311286)]		HRESULT setSortMode([in] d3drmSortMode val);
		[helpcontext(311287)]		HRESULT setTexture([in] I_dxj_Direct3dRMTexture3 *t);

		[helpcontext(311288)]		HRESULT setTraversalOptions([in] d3drmTraversalFlags flags);

		[helpcontext(311289)]		HRESULT setVelocity( [in] I_dxj_Direct3dRMFrame3 *reference, [in] float x,
							[in] float y, [in] float z, [in] dxBool with_rotation);

		[helpcontext(311290)]		HRESULT setZbufferMode([in] d3drmZbufferMode val);
		
	};


	///////////////////////////////////////////////////////////////////////////
	[
		object,
		uuid(9F76FE26-8E92-11d1-8808-00C04FC2C602),
		helpstring("I_Dxj_Direct3dRMMeshBuilder3 Interface"),
		pointer_default(unique),
		local,
		helpcontext(311400)
	]
	interface I_dxj_Direct3dRMMeshBuilder3 : IUnknown	
	{
		import "oaidl.idl";

		[hidden]		HRESULT InternalSetObject([in] IUnknown *lpdd);
		[hidden]		HRESULT InternalGetObject([out, retval] IUnknown **lpdd);
		
		[helpcontext(306201)]		HRESULT addDestroyCallback([in] I_dxj_Direct3dRMCallback *fn, [in] USERARG *arg);
		[helpcontext(306202)]		HRESULT deleteDestroyCallback([in] I_dxj_Direct3dRMCallback *fn, [in] USERARG *args);
		[helpcontext(306203)]		HRESULT cloneObject([out,retval] RMCLONEOBJECT **retv);
		[helpcontext(306204)]		HRESULT setAppData( [in] long data);
		[helpcontext(306205)]		HRESULT getAppData( [out, retval] long *data);
		[helpcontext(306206)]		HRESULT setName ([in] BSTR name);
		[helpcontext(306207)]		HRESULT getName([out,retval] BSTR *name);		//LPSTR
		[helpcontext(306208)]		HRESULT getClassName([out,retval] BSTR *name);	//LPSTR
		
	    /*
		 * IDirect3DRMMeshBuilder methods
		*/
		[helpcontext(311409)]		HRESULT addFace([in] I_dxj_Direct3dRMFace2 *f);
		[helpcontext(311410)]		HRESULT addFaces([in] long vc, [in] SAFEARRAY(D3DVECTOR_CDESC) *verexArray,
						 [in] long nc, [in] SAFEARRAY(D3DVECTOR_CDESC) *normalArray,
						 [in] SAFEARRAY(long) *data, 
						 [out, retval] I_dxj_Direct3dRMFaceArray **array );

		[helpcontext(311411)]		HRESULT addFacesIndexed([in] d3drmAddFacesFlags flags, [in] SAFEARRAY(long) *indexArray,[out,retval] long *newFaceIndex);

		[helpcontext(311412)]		HRESULT addFrame([in] I_dxj_Direct3dRMFrame3 *frame);
		[helpcontext(311413)]		HRESULT addMesh([in] I_dxj_Direct3dRMMesh *mesh);
		[helpcontext(311414)]		HRESULT addMeshBuilder([in] I_dxj_Direct3dRMMeshBuilder3 *meshbuilder, d3drmAddMeshbuilderFlags flags);				
		[helpcontext(311415)]		HRESULT addNormal([in] float x, [in] float y,[in] float z, [out, retval] int *index);
		[helpcontext(311416)]		HRESULT addTriangles([in] d3drmAddTrianglesVt format,[in] long vertexcount,[in] void *data);		
		[helpcontext(311417)]		HRESULT addVertex([in] float x, [in] float y,[in] float z, [out, retval] int *index);
		
		[helpcontext(311418)]		HRESULT createFace([out, retval] I_dxj_Direct3dRMFace2 **retv);		
		[helpcontext(311419)]		HRESULT createMesh( [out,retval] I_dxj_Direct3dRMMesh **retv);
		[helpcontext(311420)]		HRESULT createSubMesh( [out,retval] I_dxj_Direct3dRMMeshBuilder3 **retv);
		
		[helpcontext(311421)]		HRESULT deleteFace([in] I_dxj_Direct3dRMFace2 *face);
  	    	[hidden]				HRESULT deleteNormals([in] long id, [in] long count);
		[helpcontext(311422)]		HRESULT deleteSubMesh([in] I_dxj_Direct3dRMMeshBuilder3 *mesh);
		[hidden]				HRESULT deleteVertices([in] long id, [in] long count);
		[helpcontext(311423)]		HRESULT empty();
		[helpcontext(311424)]		HRESULT enableMesh([in] d3drmAddMeshBuilderFlags flags);
		[helpcontext(311425)]		HRESULT generateNormals(float angle,d3drmGenerateNormalsFlags flags);

		[helpcontext(311426)]		HRESULT getBox( [in,out] D3DRMBOX_CDESC *retv);		
		[helpcontext(311427)]		HRESULT getColorSource( [out, retval] d3drmColorSource *data);
		[helpcontext(311428)]		HRESULT getEnable([out,retval] d3drmAddMeshBuilderFlags *flags);
		[helpcontext(311429)]		HRESULT getFace([in] long id,[out, retval] I_dxj_Direct3dRMFace2 **retv);		
		[helpcontext(311430)]		HRESULT getFaceCount([out, retval] int *retv);
		[helpcontext(311431)]		HRESULT getFaces([out, retval] I_dxj_Direct3dRMFaceArray **retv);				
		
		[helpcontext(311432)]		HRESULT getGeometry( [in,out] SAFEARRAY(D3DVECTOR_CDESC) *verexArray,
						  [in,out] SAFEARRAY(D3DVECTOR_CDESC) *normalArray,
						 [in,out] SAFEARRAY(long) *faceData);
		
		[helpcontext(311433)]		HRESULT getNormal([in] long index, [in,out] D3DVECTOR_CDESC *desc);
		[helpcontext(311434)]		HRESULT getNormalCount([out, retval] long *normalCount);

		[helpcontext(311435)]		HRESULT getParentMesh([in] d3drmParentingFlags flags, [out,retval] I_dxj_Direct3dRMMeshBuilder3 **vis);
		[helpcontext(311436)]		HRESULT getPerspective([out,retval] long *retv); //BOOL
		[helpcontext(311437)]		HRESULT getQuality([out,retval] d3drmRenderQuality *retv);

		[helpcontext(311438)]		HRESULT getSubMeshes([in] long count,[in,out] SAFEARRAY(I_dxj_Direct3dRMMeshBuilder3) *arrayOfMeshBuilders);
		[helpcontext(311439)]		HRESULT getSubMeshCount([out,retval] long *count);

		[helpcontext(311440)]		HRESULT getTextureCoordinates([in] long idx,[in,out] float *u,[in,out] float *v);
		
		[helpcontext(311441)]		HRESULT getVertex([in] long id, [in,out] D3DVECTOR_CDESC *vec);

		[helpcontext(311442)]		HRESULT getVertexColor([in] long index, [out, retval] d3dcolor *retv);				
		[helpcontext(311443)]		HRESULT getVertexCount([out, retval] int *retv);		
		
		[helpcontext(311444)]		HRESULT getFaceDataSize([out, retval] long *faceCount);						
		
		[helpcontext(311445)]		HRESULT loadFromFile( [in] BSTR filename, [in] VARIANT id, [in] d3drmLoadFlags flags, [in] I_dxj_Direct3dRMLoadTextureCallback3 *loadTextureImplementation, [in] USERARG *userArgument);

		[helpcontext(311446)]		HRESULT optimize();

        [helpcontext(311447)]		HRESULT save([in] BSTR fname, [in] d3drmXofFormat xFormat, [in] d3drmSaveFlags save);

		[helpcontext(311448)]		HRESULT scaleMesh( [in] float sx, [in] float sy, [in] float sz);

		[helpcontext(311449)]		HRESULT setColor([in] d3dcolor col);
		[helpcontext(311450)]		HRESULT setColorRGB( [in] float red, [in] float green, [in] float blue);
		[helpcontext(311451)]		HRESULT setColorSource([in] d3drmColorSource val);
		[helpcontext(311452)]		HRESULT setMaterial([in] I_dxj_Direct3dRMMaterial2 *mat);
		[helpcontext(311453)]		HRESULT setNormal([in] long idx,[in] float x,[in] float y,[in] float z);
		
		[helpcontext(311454)]		HRESULT setPerspective([in] dxBool perspectiveEnabled);  //BOOL
		[helpcontext(311455)]		HRESULT setQuality( [in] d3drmRenderQuality q);
		[helpcontext(311456)]		HRESULT setTexture( [in] I_dxj_Direct3dRMTexture3 *tex);
		[helpcontext(311457)]		HRESULT setTextureCoordinates([in] long idx, [in] float u, [in] float v);
		[helpcontext(311458)]		HRESULT setTextureTopology([in] dxBool wrap_u, [in] dxBool wrap_v);  //BOOL
		[helpcontext(311459)]		HRESULT setVertex([in] long idx,[in] float x,[in] float y,[in] float z);
		[helpcontext(311460)]		HRESULT setVertexColor([in] long idx, [in] d3dcolor c);
		[helpcontext(311461)]		HRESULT setVertexColorRGB( [in] long idx, [in] float r, [in] float g, [in] float b);				
		[helpcontext(311462)]		HRESULT translate([in] float tx, [in] float ty, [in] float tz);
		
		//getVertices left unimplemented
		//set vertices not implmented
		//set normals not implemented

		
		[hidden]		HRESULT addFacesJava([in] long vc, [in] float *ver,
						 [in] long nc, [in] float *norm, [in] long *data, [out, retval] I_dxj_Direct3dRMFaceArray **array );
		

	};

	[
		object,
		uuid(9F76FE27-8E92-11d1-8808-00C04FC2C602),
		helpstring("I_dxj_Direct3dRMDevice3 Interface"),
		pointer_default(unique),
		local,
		helpcontext(311600)
	]
	interface I_dxj_Direct3dRMDevice3 : IUnknown	
	{
		import "oaidl.idl";

		[hidden]		HRESULT InternalSetObject([in] IUnknown *lpdd);
		[hidden]		HRESULT InternalGetObject([out, retval] IUnknown **lpdd);
		
		//
		// d3drmObjects
		//
		
		[helpcontext(306201)]		HRESULT addDestroyCallback([in] I_dxj_Direct3dRMCallback *fn, [in] USERARG *arg);
		[helpcontext(306202)]		HRESULT deleteDestroyCallback([in] I_dxj_Direct3dRMCallback *fn, [in] USERARG *args);
		[helpcontext(306203)]		HRESULT cloneObject([out,retval] RMCLONEOBJECT **retv);
		[helpcontext(306204)]		HRESULT setAppData( [in] long data);
		[helpcontext(306205)]		HRESULT getAppData( [out, retval] long *data);
		[helpcontext(306206)]		HRESULT setName ([in] BSTR name);
		[helpcontext(306207)]		HRESULT getName([out,retval] BSTR *name);		//LPSTR
		[helpcontext(306208)]		HRESULT getClassName([out,retval] BSTR *name);	//LPSTR
		
		
		[helpcontext(311609)]		HRESULT addUpdateCallback([in] I_dxj_Direct3dRMDeviceUpdateCallback3 *updateCallbackImplementation, [in] USERARG *userArgument);
		[helpcontext(311610)]		HRESULT deleteUpdateCallback([in] I_dxj_Direct3dRMDeviceUpdateCallback3 *updateCallbackImplementation, [in]  USERARG *userArgument);		
		[helpcontext(311611)]		HRESULT findPreferredTextureFormat([in] ddBitDepthFlags bitDepth,[in] d3drmFptfFlags flags, [in,out] DDPIXELFORMAT_CDESC *ddpf);
		[helpcontext(311612)]		HRESULT getBufferCount([out, retval] long *retv);
		[helpcontext(311613)]		HRESULT getColorModel( [out, retval] d3dColorModel *retv);
		[helpcontext(311614)]		HRESULT getDither([out, retval] dxBool *ditherEnabled);		
		[helpcontext(311615)]		HRESULT getHeight([out, retval] int *w);
		[helpcontext(311616)]		HRESULT getQuality([out, retval] d3drmRenderQuality *retv);
		[helpcontext(311617)]		HRESULT getRenderMode([out, retval] d3drmRenderModeFlags *retv);
		[helpcontext(311618)]		HRESULT getShades([out, retval] long *numShades);
		[helpcontext(311619)]		HRESULT getTextureQuality( [out, retval] d3drmTextureQuality *retv);
		[helpcontext(311620)]		HRESULT getTrianglesDrawn([out, retval] long *retv); //no params internally
		[helpcontext(311621)]		HRESULT getViewports([out,retval] I_dxj_Direct3dRMViewportArray **views);
		[helpcontext(311622)]		HRESULT getWireframeOptions([out, retval] d3drmWireFrameFlags *retv); //no params internally
		[helpcontext(311623)]		HRESULT getWidth([out, retval] int *w);		
		[helpcontext(311624)]		HRESULT setBufferCount([in] long count);		
		[helpcontext(311625)]		HRESULT setDither([in] dxBool ditherEnabled);		
		[helpcontext(311626)]		HRESULT setQuality( [in] d3drmRenderQuality q);
		[helpcontext(311627)]		HRESULT setRenderMode([in] d3drmRenderModeFlags flags);
		[helpcontext(311628)]		HRESULT setShades( [in] int numShades);
		[helpcontext(311629)]		HRESULT setTextureQuality( [in] d3drmTextureQuality d);
		[helpcontext(311630)]		HRESULT update();		
		// Respond to a WM_ACTIVATE message.
		[helpcontext(311631)]		HRESULT handleActivate([in] long wparam) ;	
		[helpcontext(311632)]		HRESULT handlePaint([in] long hdc) ;

		

	};




	[
		object,
		uuid(9F76FE28-8E92-11d1-8808-00C04FC2C602),
		helpstring("I_dxj_Direct3dRMTexture3 Interface"),
		pointer_default(unique),
		local,
		helpcontext(311800)
	]
	interface I_dxj_Direct3dRMTexture3 : IUnknown	
	{
		import "oaidl.idl";

		[hidden]		HRESULT InternalSetObject([in] IUnknown *lpdd);
		[hidden]		HRESULT InternalGetObject([out, retval] IUnknown **lpdd);

		//
		// d3drmObject methods
		//
		[helpcontext(306201)]		HRESULT addDestroyCallback([in] I_dxj_Direct3dRMCallback *fn, [in] USERARG *arg);
		[helpcontext(306202)]		HRESULT deleteDestroyCallback([in] I_dxj_Direct3dRMCallback *fn, [in] USERARG *args);
		[helpcontext(306203)]		HRESULT cloneObject([out,retval] RMCLONEOBJECT **retv);
		[helpcontext(306204)]		HRESULT setAppData( [in] long data);
		[helpcontext(306205)]		HRESULT getAppData( [out, retval] long *data);
		[helpcontext(306206)]		HRESULT setName ([in] BSTR name);
		[helpcontext(306207)]		HRESULT getName([out,retval] BSTR *name);		//LPSTR
		[helpcontext(306208)]		HRESULT getClassName([out,retval] BSTR *name);	//LPSTR

		//
		// IDirect3DRMTexture3 methods
		//
		[helpcontext(311809)]		HRESULT changed([in] d3drmTextureChangedFlags flags, [in] long nRects,[in] SAFEARRAY(RECT_CDESC) *rects); //BOOL values
		[helpcontext(311810)]		HRESULT generateMIPMap();
		[helpcontext(311811)]		HRESULT getCacheFlags([out,retval] d3drmTextureCacheFlags *ret);
		[helpcontext(311812)]		HRESULT getCacheImportance([out,retval] long *ret);
		[helpcontext(311813)]		HRESULT getColors([out, retval] long *c);
		[helpcontext(311814)]		HRESULT getDecalOrigin([out] long *x, [out] long *y);		
		[helpcontext(311815)]		HRESULT getDecalScale([out, retval] dxBool *considerScale);
		[helpcontext(311816)]		HRESULT getDecalSize([out] float *w, [out] float *h);
		[helpcontext(311817)]		HRESULT getDecalTransparency([out, retval] dxBool *enabled); //BOOL
		[helpcontext(311818)]		HRESULT getDecalTransparentColor([out, retval] d3dcolor *tc);				
		[helpcontext(311819)]		HRESULT getShades([out, retval] long *shades);		
		[helpcontext(311820)]		HRESULT getSurface( [in] long flags,[out, retval] I_dxj_DirectDrawSurface4 **surface);
		[helpcontext(311821)]		HRESULT setCacheOptions([in] long importance, [in] d3drmTextureCacheFlags flags);				
		[helpcontext(311822)]		HRESULT setColors([in] long numColors);
		[helpcontext(311823)]		HRESULT setDecalOrigin([in] long x, [in] long y);						
		[helpcontext(311824)]		HRESULT setDecalScale([in] dxBool considerScale);
		[helpcontext(311825)]		HRESULT setDecalSize([in] float width, [in] float height);
		[helpcontext(311826)]		HRESULT setDecalTransparency([in] dxBool transparencyEnabled);  //BOOL
		[helpcontext(311827)]		HRESULT setDecalTransparentColor([in] d3dcolor tcolor);		
		[helpcontext(311828)]		HRESULT setShades([in] long numShades);

		//note setDownSample callback and setValidation callback not supported
				
	};



	[
		object,
		uuid(9F76FE30-8E92-11d1-8808-00C04FC2C602),
		helpstring("I_dxj_Direct3dRMClippedVisual Interface"),
		pointer_default(unique),
		local,
		helpcontext(312000)
	]
	interface I_dxj_Direct3dRMClippedVisual : IUnknown	
	{
		[hidden]		HRESULT InternalSetObject([in] IUnknown *lpdd);
		[hidden]		HRESULT InternalGetObject([out, retval] IUnknown **lpdd);

		//
		// d3drmObject methods
		//
		[helpcontext(306201)]		HRESULT addDestroyCallback([in] I_dxj_Direct3dRMCallback *fn, [in] USERARG *arg);
		[helpcontext(306202)]		HRESULT deleteDestroyCallback([in] I_dxj_Direct3dRMCallback *fn, [in] USERARG *args);
		[helpcontext(306203)]		HRESULT cloneObject([out,retval] RMCLONEOBJECT **retv);
		[helpcontext(306204)]		HRESULT setAppData( [in] long data);
		[helpcontext(306205)]		HRESULT getAppData( [out, retval] long *data);
		[helpcontext(306206)]		HRESULT setName ([in] BSTR name);
		[helpcontext(306207)]		HRESULT getName([out,retval] BSTR *name);		//LPSTR
		[helpcontext(306208)]		HRESULT getClassName([out,retval] BSTR *name);	//LPSTR

		[helpcontext(312009)]		HRESULT addPlane([in] I_dxj_Direct3dRMFrame3 *ref, [in,out] D3DVECTOR_CDESC *point, [in,out] D3DVECTOR_CDESC *normal, [out,retval] long *ret);
		[helpcontext(312010)]		HRESULT deletePlane([in] long id);
		[helpcontext(312011)]		HRESULT getPlane([in] long id,[in] I_dxj_Direct3dRMFrame3 *ref, [in,out] D3DVECTOR_CDESC *point, [in,out] D3DVECTOR_CDESC *normal);
		[helpcontext(312012)]		HRESULT getPlaneIds([in] long count, [in,out] SAFEARRAY(long) *arrayOfIds);
		[helpcontext(312013)]		HRESULT getPlaneIdsCount([out,retval] long *count);		
		[helpcontext(312014)]		HRESULT setPlane([in] long id,[in] I_dxj_Direct3dRMFrame3 *ref, [in,out] D3DVECTOR_CDESC *point, [in,out] D3DVECTOR_CDESC *normal);
	};
    

	[
		object,
		uuid(9F76FE31-8E92-11d1-8808-00C04FC2C602),
		helpstring("I_dxj_Direct3dRMProgressiveMesh Interface"),
		pointer_default(unique),
		local,
		helpcontext(312200)

	]
	interface I_dxj_Direct3dRMProgressiveMesh : IUnknown	
	{
		[hidden]		HRESULT InternalSetObject([in] IUnknown *lpdd);
		[hidden]		HRESULT InternalGetObject([out, retval] IUnknown **lpdd);

		//
		// d3drmObject methods
		//
		[helpcontext(306201)]		HRESULT addDestroyCallback([in] I_dxj_Direct3dRMCallback *fn, [in] USERARG *arg);
		[helpcontext(306202)]		HRESULT deleteDestroyCallback([in] I_dxj_Direct3dRMCallback *fn, [in] USERARG *args);
		[helpcontext(306203)]		HRESULT cloneObject([out,retval] RMCLONEOBJECT **retv);
		[helpcontext(306204)]		HRESULT setAppData( [in] long data);
		[helpcontext(306205)]		HRESULT getAppData( [out, retval] long *data);
		[helpcontext(306206)]		HRESULT setName ([in] BSTR name);
		[helpcontext(306207)]		HRESULT getName([out,retval] BSTR *name);		//LPSTR
		[helpcontext(306208)]		HRESULT getClassName([out,retval] BSTR *name);	//LPSTR

		[helpcontext(312209)]		HRESULT loadFromFile([in] BSTR sFile, [in] VARIANT id,[in] d3drmLoadFlags options, [in] I_dxj_Direct3dRMLoadTextureCallback3 *loadTextureImplementation,[in] USERARG *userArgument);
		[helpcontext(312210)]		HRESULT getLoadStatus([in,out] D3DRMPMESHLOADSTATUS_CDESC *loadStatus);
		[helpcontext(312211)]		HRESULT setMinRenderDetail([in] float val);
		[helpcontext(312212)]		HRESULT abort();
		[helpcontext(312213)]		HRESULT getFaceDetail([out,retval] long *count);
		[helpcontext(312214)]		HRESULT getVertexDetail([out,retval] long *count);
		[helpcontext(312215)]		HRESULT setFaceDetail([in] long count);
		[helpcontext(312216)]		HRESULT setVertexDetail([in] long count);
		[helpcontext(312217)]		HRESULT getFaceDetailRange([in,out] long *min,[in,out] long *max);
		[helpcontext(312218)]		HRESULT getVertexDetailRange([in,out] long *min,[in,out] long *max);
		[helpcontext(312219)]		HRESULT getDetail([out,retval] float *detail);
		[helpcontext(312220)]		HRESULT setDetail([in] float detail);
		[helpcontext(312221)]		HRESULT registerEvents([in] long hEvent,[in] long flags,[in] long reserved);
		[helpcontext(312222)]		HRESULT createMesh([out,retval] I_dxj_Direct3dRMMesh **mesh);
		[helpcontext(312223)]		HRESULT duplicate([out,retval] I_dxj_Direct3dRMProgressiveMesh **mesh);
		[helpcontext(312224)]		HRESULT getBox([in,out] D3DRMBOX_CDESC *box);
		[helpcontext(312225)]		HRESULT setQuality(d3drmRenderQuality quality);
		[helpcontext(312226)]		HRESULT getQuality([out,retval] d3drmRenderQuality *quality);
	};
    


///////////////////////////////////////////////////////////////////////////
// 
// Direct Sound Interfaces 
// 
///////////////////////////////////////////////////////////////////////////
	[
		object,
		uuid(9F76FB00-8E92-11d1-8808-00C04FC2C602),
		helpstring("I_dxj_DirectSound Interface"),
		pointer_default(unique),
		local,
		helpcontext(312400)
	]
	interface I_dxj_DirectSound : IUnknown	
	{
		import "oaidl.idl";

		[hidden]		HRESULT InternalSetObject([in] IUnknown *lpdd);
		[hidden]		HRESULT InternalGetObject([out, retval] IUnknown **lpdd);
		//
		//*** IDirectSound methods ***
		//
		[helpcontext(312401)]		HRESULT createSoundBuffer([in] DSBUFFERDESC_CDESC *bufferDesc,
								[in] WAVEFORMATEX_CDESC *format,
								[out, retval] I_dxj_DirectSoundBuffer **soundBuffer);

		[helpcontext(312402)]		HRESULT createSoundBufferFromFile([in] BSTR fileName, [in,out] DSBUFFERDESC_CDESC *bufferDesc,
								[out] WAVEFORMATEX_CDESC *format,
								[out, retval] I_dxj_DirectSoundBuffer **soundBuffer);

		[helpcontext(312403)]		HRESULT createSoundBufferFromResource([in] BSTR dll, [in] BSTR resourceName, [in,out] DSBUFFERDESC_CDESC *bufferDesc,
								[out] WAVEFORMATEX_CDESC *format,
								[out, retval] I_dxj_DirectSoundBuffer **soundBuffer);

		[helpcontext(312404)]		HRESULT getCaps([in,out] DSCAPS_CDESC *caps);
		[helpcontext(312405)]		HRESULT duplicateSoundBuffer([in] I_dxj_DirectSoundBuffer *original, 
									[out, retval] I_dxj_DirectSoundBuffer **duplicate);
		
		[helpcontext(312406)]		HRESULT setCooperativeLevel([in] HWnd hwnd, [in] dssclFlags level);		
		[helpcontext(312407)]		HRESULT getSpeakerConfig([out,retval] dsSpeakerFlags *speakerConfig);
		[helpcontext(312408)]		HRESULT setSpeakerConfig([in] dsSpeakerFlags speakerConfig);
	};

	///////////////////////////////////////////////////////////////////////////
	[
		object,
		uuid(9F76FB01-8E92-11d1-8808-00C04FC2C602),
		helpstring("I_dxj_DirectSoundBuffer Interface"),
		pointer_default(unique),
		local,
		helpcontext(312600)
	]
	interface I_dxj_DirectSoundBuffer : IUnknown	
	{
		import "oaidl.idl";

		[hidden]		HRESULT InternalSetObject([in] IUnknown *lpdd);
		[hidden]		HRESULT InternalGetObject([out, retval] IUnknown **lpdd);
		//
		/*** IDirectSoundBuffer methods ***/
		//
		[helpcontext(312601)]		HRESULT getDirectSound3dListener([out, retval] I_dxj_DirectSound3dListener **lpdsl);
		[helpcontext(312602)]		HRESULT getDirectSound3dBuffer([out, retval] I_dxj_DirectSound3dBuffer **lpdsb);
		[helpcontext(312603)]		HRESULT getCaps([in,out] DSBCAPS_CDESC *caps);
		[helpcontext(312604)]		HRESULT getCurrentPosition([out] DSCURSORS_CDESC *cursors);
		
		
		[helpcontext(312605)]		HRESULT getFormat([in,out] WAVEFORMATEX_CDESC *format);
		[helpcontext(312606)]		HRESULT getVolume([out,retval] long *volume);
		[helpcontext(312607)]		HRESULT getPan([out,retval] long *pan);
		[helpcontext(312608)]		HRESULT getFrequency([out,retval] long *frequency);
		[helpcontext(312609)]		HRESULT getStatus([out,retval] dsbStatusFlags *status);
		[hidden]		HRESULT initialize([in] I_dxj_DirectSound *directSound, 
							[in,out] DSBUFFERDESC_CDESC *bufferDesc, [in,out] byte *wbuf);


		[helpcontext(312610)]		HRESULT writeBuffer([in] long start, [in] long size, [in] ABYTE *buffer, [in] dsbLockFlags flags);
		[helpcontext(312611)]		HRESULT readBuffer([in] long start, [in] long size, [in] ABYTE *buffer, [in] dsbLockFlags flags);
		[helpcontext(312612)]		HRESULT play([in] dsbPlayFlags flags);
		[helpcontext(312613)]		HRESULT setCurrentPosition([in] long newPosition);
		[helpcontext(312614)]		HRESULT setFormat([in] WAVEFORMATEX_CDESC *format);
		[helpcontext(312615)]		HRESULT setVolume([in] long volume);
		[helpcontext(312616)]		HRESULT setPan([in] long pan);
		[helpcontext(312617)]		HRESULT setFrequency([in] long frequency);
		[helpcontext(312618)]		HRESULT stop();
		[helpcontext(312619)]		HRESULT restore();
		[helpcontext(312620)]		HRESULT setNotificationPositions(long nElements, SAFEARRAY(DSBPOSITIONNOTIFY_CDESC) *psa); 
		[helpcontext(312621)]		HRESULT saveToFile([in] BSTR filename);
		
	};


	///////////////////////////////////////////////////////////////////////////
	// I_dxj_DirectSound3dListener
	[
		object,
		uuid(9F76FB02-8E92-11d1-8808-00C04FC2C602),		
		helpstring("I_dxj_DirectSound3dListener Interface"),
		pointer_default(unique),
		local,
		helpcontext(312800)
	]
	interface I_dxj_DirectSound3dListener: IUnknown	
	{
		import "oaidl.idl";

		[hidden]		HRESULT InternalSetObject([in] IUnknown *lpdd);
		[hidden]		HRESULT InternalGetObject([out, retval] IUnknown **lpdd);

		//
		/*** IDirectSound3D methods ***/
		//
		[helpcontext(312801)]		HRESULT getAllParameters( [in,out] DS3DLISTENER_CDESC *listener );
		[helpcontext(312802)]		HRESULT getDistanceFactor( [out,retval] float *distanceFactor );
		[helpcontext(312803)]		HRESULT getDopplerFactor( [out,retval] float *dopplerFactor );
		[helpcontext(312804)]		HRESULT getOrientation( [in,out] D3DVECTOR_CDESC *orientFront, [in,out] D3DVECTOR_CDESC *orientTop );
		[helpcontext(312805)]		HRESULT getPosition( [out] D3DVECTOR_CDESC *position );
		[helpcontext(312806)]		HRESULT getRolloffFactor( [out,retval] float* rolloffFactor );
		[helpcontext(312807)]		HRESULT getVelocity( [out,retval] D3DVECTOR_CDESC *velocity );
		[helpcontext(312808)]		HRESULT setAllParameters( [in] DS3DLISTENER_CDESC *listener, [in] ds3dApplyFlags  applyFlag);
		[helpcontext(312809)]		HRESULT setDistanceFactor( [in] float distanceFactor, [in] ds3dApplyFlags applyFlag);
		[helpcontext(312810)]		HRESULT setDopplerFactor( [in] float dopplerFactor, [in] ds3dApplyFlags applyFlag);
		[helpcontext(312811)]		HRESULT setOrientation( [in] float xFront, [in] float yFront, [in] float zFront, 
								[in] float xTop, [in] float yTop, [in] float zTop, 
								[in] ds3dApplyFlags applyFlag);
		[helpcontext(312812)]		HRESULT setPosition( [in] float x , [in] float y, [in] float z, [in] ds3dApplyFlags applyFlag);
		[helpcontext(312813)]		HRESULT setRolloffFactor( [in] float rolloffFactor, [in] ds3dApplyFlags applyFlag);
		[helpcontext(312814)]		HRESULT setVelocity( [in] float x, [in] float y, [in] float z, [in] ds3dApplyFlags applyFlag);
		[helpcontext(312815)]		HRESULT commitDeferredSettings();
		[helpcontext(312816)]		HRESULT getDirectSoundBuffer([out,retval] I_dxj_DirectSoundBuffer **retVal);
	};

	///////////////////////////////////////////////////////////////////////////
	// IDirectSound3DBuffer
	[
		object,
		uuid(9F76FB03-8E92-11d1-8808-00C04FC2C602),		
		helpstring("I_dxj_DirectSound3DBuffer Interface"),
		pointer_default(unique),
		local,
		helpcontext(313000)
	]
	interface I_dxj_DirectSound3dBuffer : IUnknown	
	{
		import "oaidl.idl";

		[hidden]		HRESULT InternalSetObject([in] IUnknown *lpdd);
		[hidden]		HRESULT InternalGetObject([out, retval] IUnknown **lpdd);

		//
		/*** IDirectSoundBuffer3D methods ***/
		//
		[helpcontext(313001)]		HRESULT getDirectSound3dListener([out,retval] I_dxj_DirectSound3dListener **retVal);
		[helpcontext(313002)]		HRESULT getDirectSoundBuffer([out,retval] I_dxj_DirectSoundBuffer **retVal);
		[helpcontext(313003)]		HRESULT getAllParameters( [in,out] DS3DBUFFER_CDESC *buffer );
		[helpcontext(313004)]		HRESULT getConeAngles( [in,out]  long *inCone, [in,out]  long *outCone );
		[helpcontext(313005)]		HRESULT getConeOrientation( [in,out] D3DVECTOR_CDESC* orientation );
		[helpcontext(313006)]		HRESULT getConeOutsideVolume( [out,retval] long * coneOutsideVolume );
		[helpcontext(313007)]		HRESULT getMaxDistance( [out,retval] float* maxDistance );
		[helpcontext(313008)]		HRESULT getMinDistance( [out,retval] float* minDistance );
		[helpcontext(313009)]		HRESULT getMode( [out,retval]  ds3dModeFlags *mode );
		[helpcontext(313010)]		HRESULT getPosition( [in,out] D3DVECTOR_CDESC* position );
		[helpcontext(313011)]		HRESULT getVelocity( [in,out] D3DVECTOR_CDESC* velocity );
		[helpcontext(313012)]		HRESULT setAllParameters( [in] DS3DBUFFER_CDESC *buffer,[in] ds3dApplyFlags applyFlag);
		[helpcontext(313013)]		HRESULT setConeAngles( [in] long inCone, [in] long outCone, [in] ds3dApplyFlags applyFlag);
		[helpcontext(313014)]		HRESULT setConeOrientation( [in] float x , [in] float y, [in] float z, [in] ds3dApplyFlags applyFlag);
		[helpcontext(313015)]		HRESULT setConeOutsideVolume( [in] long coneOutsideVolume,[in] ds3dApplyFlags applyFlag);
		[helpcontext(313016)]		HRESULT setMaxDistance( [in] float maxDistance,[in]  ds3dApplyFlags applyFlag);
		[helpcontext(313017)]		HRESULT setMinDistance( [in] float minDistance,[in]  ds3dApplyFlags applyFlag);
		[helpcontext(313018)]		HRESULT setMode( [in]  ds3dModeFlags mode,[in]  ds3dApplyFlags applyFlag);
		[helpcontext(313019)]		HRESULT setPosition( [in] float x , [in] float y, [in] float z, [in] ds3dApplyFlags applyFlag);
		[helpcontext(313020)]		HRESULT setVelocity( [in] float x , [in] float y, [in] float z, [in] ds3dApplyFlags applyFlag);		
	};

	[
		object,
		uuid(9F76FB04-8E92-11d1-8808-00C04FC2C602),	
		helpstring("I_dxj_DirectSoundCapture Interface"),
		pointer_default(unique),
		local,
		helpcontext(313200)
	]
	interface I_dxj_DirectSoundCapture : IUnknown	
	{
		import "oaidl.idl";
		[hidden]		HRESULT InternalSetObject([in] IUnknown *lpdd);
		[hidden]		HRESULT InternalGetObject([out, retval] IUnknown **lpdd);

		[helpcontext(313201)]		HRESULT createCaptureBuffer([in]DSCBUFFERDESC_CDESC *bufferDesc,[out,retval] I_dxj_DirectSoundCaptureBuffer **ret);
		[helpcontext(313202)]		HRESULT getCaps([in,out]DSCCAPS_CDESC *caps);
	
	};
	

	[
		object,
		uuid(9F76FB05-8E92-11d1-8808-00C04FC2C602),	
		helpstring("I_dxj_DirectSoundCaptureBuffer Interface"),
		pointer_default(unique),
		helpcontext(313400)

	]
	interface I_dxj_DirectSoundCaptureBuffer : IUnknown	
	{
		import "oaidl.idl";
		[hidden]		HRESULT InternalSetObject([in] IUnknown *lpdd);
		[hidden]		HRESULT InternalGetObject([out, retval] IUnknown **lpdd);

		[helpcontext(313401)]		HRESULT getCaps([in,out]DSCBCAPS_CDESC *caps);		
		[helpcontext(313402)]		HRESULT getCurrentPosition([in,out] DSCURSORS_CDESC *cursors);
		[helpcontext(313403)]		HRESULT getFormat([in,out] WAVEFORMATEX_CDESC *waveformat);
		[helpcontext(313404)]		HRESULT getStatus([out,retval] dscbStatusFlags * status);
		[hidden]				HRESULT initialize([in]I_dxj_DirectSoundCaptureBuffer *captureBuffer,[in]DSCBUFFERDESC_CDESC *bufferDesc);
		[helpcontext(313405)]		HRESULT start([in] dscbStartFlags flags);
		[helpcontext(313406)]		HRESULT stop();
		[helpcontext(313407)]		HRESULT writeBuffer([in] long start, [in] long size, [in] ALONG *buffer, [in] dscbLockFlags flags);
		[helpcontext(313408)]		HRESULT readBuffer([in] long start, [in] long size, [in] ALONG *buffer, [in] dscbLockFlags flags);
		[helpcontext(313409)]		HRESULT setNotificationPositions(long nElements, SAFEARRAY(DSBPOSITIONNOTIFY_CDESC) *psa); 

	};

	[
		object,
		uuid(9F76FB07-8E92-11d1-8808-00C04FC2C602),	
		helpstring("I_dxj_DSEnum Interface"),
		pointer_default(unique),
		local,
		helpcontext(313600)
	]
	interface I_dxj_DSEnum : IUnknown
	{
		import "oaidl.idl";
		[helpcontext(313601)]		HRESULT getGuid([in] long index,[out,retval] BSTR *guid);
		[helpcontext(313602)]		HRESULT getDescription([in] long index,[out,retval] BSTR *guid);
		[helpcontext(313603)]		HRESULT getName([in] long index,[out,retval] BSTR *guid);
        	[helpcontext(313604)]		HRESULT getCount([out,retval]long *count);		
	};

///////////////////////////////////////////////////////////////////////////
// 
// Direct Input Interfaces 
// 
///////////////////////////////////////////////////////////////////////////
	[
		object,
		uuid(9F76FA02-8E92-11d1-8808-00C04FC2C602),
		helpstring("I_dxj_DirectInput Interface"),
		pointer_default(unique),
		local,
		helpcontext(313800)
	]
	interface I_dxj_DirectInput : IUnknown	
	{
		import "oaidl.idl";        
		[hidden]		HRESULT InternalSetObject([in] IUnknown *lpdd);
		[hidden]		HRESULT InternalGetObject([out, retval] IUnknown **lpdd);

        [helpcontext(313801)]		HRESULT createDevice([in] BSTR guid, [out,retval] I_dxj_DirectInputDevice **dev);        
	  [helpcontext(313802)]		HRESULT getDIEnumDevices([in] diDeviceType deviceType, [in] diEnumDevicesFlags flags, [out,retval] I_dxj_DIEnumDevices **retVal);
        [helpcontext(313803)]		HRESULT getDeviceStatus([in] BSTR guid, [out,retval] VARIANT_BOOL *status);
        [helpcontext(313804)]		HRESULT runControlPanel([in] long hwndOwner);                
	};

	[
		object,
		uuid(9F76FA04-8E92-11d1-8808-00C04FC2C602),
        	helpstring("I_dxj_DirectInputDeviceInstance Interface"),
		pointer_default(unique),
		local,
		helpcontext(314000)
	]
	interface I_dxj_DirectInputDeviceInstance : IUnknown
	{
		[helpcontext(314001)]		HRESULT getGuidInstance([out,retval] BSTR *ret);
		[helpcontext(314002)]		HRESULT getGuidProduct([out,retval] BSTR *ret);
		[helpcontext(314003)]		HRESULT getProductName([out,retval] BSTR *ret);
		[helpcontext(314004)]		HRESULT getInstanceName([out,retval] BSTR *ret);
		[helpcontext(314005)]		HRESULT getGuidFFDriver([out,retval] BSTR *ret);
		[helpcontext(314006)]		HRESULT getUsagePage([out,retval] short *ret);
		[helpcontext(314007)]		HRESULT getUsage([out,retval] short *ret);
		[helpcontext(314008)]		HRESULT getDevType([out,retval] long *ret);

	};



	[
		object,
		uuid(9F76FA05-8E92-11d1-8808-00C04FC2C602),
	      helpstring("I_dxj_DirectInputDeviceObjectInstance Interface"),
		pointer_default(unique),
		local,
		helpcontext(314200)
	]
	interface I_dxj_DirectInputDeviceObjectInstance : IUnknown
	{
		[helpcontext(314201)]		HRESULT getGuidType([out,retval] BSTR *ret);
		[helpcontext(314202)]		HRESULT getOfs([out,retval] long *ret);
		[helpcontext(314203)]		HRESULT getType([out,retval] long *ret);
		[helpcontext(314204)]		HRESULT getFlags([out,retval] diDeviceObjInstanceFlags *ret);
		[helpcontext(314205)]		HRESULT getName([out,retval] BSTR *ret);
		[helpcontext(314206)]		HRESULT getCollectionNumber([out,retval] short *ret);
		[helpcontext(314207)]		HRESULT getDesignatorIndex([out,retval] short *ret);
		[helpcontext(314208)]		HRESULT getUsagePage([out,retval] short *ret);
		[helpcontext(314209)]		HRESULT getUsage([out,retval] short *ret);
		[helpcontext(314210)]		HRESULT getDimension([out,retval] long *ret);
		[helpcontext(314211)]		HRESULT getExponent([out,retval] short *ret);
		
	};

	[
		object,
		uuid(9F76FA03-8E92-11d1-8808-00C04FC2C602),
	      helpstring("I_dxj_DirectInputDevice Interface"),
		pointer_default(unique),
		local,
		helpcontext(314400)
	]
    interface I_dxj_DirectInputDevice : IUnknown 
	{
		import "oaidl.idl";
		[hidden]		HRESULT InternalSetObject([in] IUnknown *lpdd);
		[hidden]		HRESULT InternalGetObject([out, retval] IUnknown **lpdd);

        [helpcontext(314401)]		HRESULT acquire();
	    [helpcontext(314402)]		HRESULT getDeviceObjectsEnum([in] diDftFlags flags,[out,retval] I_dxj_DIEnumDeviceObjects **ppret);
        [helpcontext(314403)]		HRESULT getCapabilities([in,out] DIDEVCAPS_CDESC *caps);
	    [helpcontext(314404)]		HRESULT getDeviceData( [in,out] SAFEARRAY(DIDEVICEOBJECTDATA_CDESC) *deviceObjectDataArray,[in] diDgddFlags flags,[out,retval] long *c);		
	    [helpcontext(314405)]		HRESULT getDeviceInfo([out,retval] I_dxj_DirectInputDeviceInstance **deviceInstance);
        [helpcontext(314406)]		HRESULT getDeviceStateKeyboard ([in,out] DIKEYBOARDSTATE_CDESC *state);
        [helpcontext(314407)]		HRESULT getDeviceStateMouse    ([in,out] DIMOUSESTATE_CDESC *state);
        [helpcontext(314408)]		HRESULT getDeviceStateJoystick  ([in,out] DIJOYSTATE_CDESC *state);
        [helpcontext(314409)]		HRESULT getDeviceStateJoystick2 ([in,out] DIJOYSTATE2_CDESC *state);        		
	    [helpcontext(314410)]		HRESULT getDeviceState([in] long cb, [in] void* state);
        [helpcontext(314411)]		HRESULT getObjectInfo( [in] long obj, [in] diPhFlags how, [out,retval] I_dxj_DirectInputDeviceObjectInstance **ret);
        [helpcontext(314412)]		HRESULT getProperty([in] BSTR guid,[out] void *propertyInfo);
        [helpcontext(314413)]		HRESULT runControlPanel([in] long hwnd);
        [helpcontext(314414)]		HRESULT setCooperativeLevel([in] long hwnd, [in] diSclFlags flags);
	    [helpcontext(314415)]		HRESULT setCommonDataFormat([in] diCommonDataFormats format);
        [helpcontext(314416)]		HRESULT setDataFormat([in] DIDATAFORMAT_CDESC *format,SAFEARRAY(DIOBJECTDATAFORMAT_CDESC) * formatArray);
        [helpcontext(314417)]		HRESULT setEventNotification([in] long hEvent);
        [helpcontext(314418)]		HRESULT setProperty([in] BSTR guid,[in] void *propertyInfo);
        [helpcontext(314419)]		HRESULT unacquire();
	    [helpcontext(314420)]		HRESULT poll();



	    [helpcontext(314421)]		HRESULT createEffect(
			[in] BSTR effectGuid,			
			[in] DIEFFECT_CDESC *effectinfo,
			[out,retval] I_dxj_DirectInputEffect **ret);
	
	  [helpcontext(314422)]		HRESULT createCustomEffect(			
			[in] DIEFFECT_CDESC *effectinfo,
			[in] long channels,
			[in] long samplePeriod,
			[in] long nSamples,
			[in] SAFEARRAY(long) *sampledata,
			[out,retval] I_dxj_DirectInputEffect **ret);

		


	   [helpcontext(314423)]		HRESULT sendDeviceData([in] long count,[in] SAFEARRAY(DIDEVICEOBJECTDATA_CDESC) *data, [in] disddFlags flags, [out,retval] long *retcount);
	   [helpcontext(314424)]		HRESULT sendForceFeedbackCommand([in] DISFFCFLAGS flags);
	   [helpcontext(314425)]		HRESULT getForceFeedbackState([out,retval] DIGFFSFLAGS *state);
	   [helpcontext(314426)]		HRESULT getEffectsEnum([in] DIEFTFLAGS effType,[out,retval] I_dxj_DirectInputEnumEffects **ret);

	};

	[
		object,
		uuid(BCAA7DA9-F7EF-11d2-93FD-00C04FC2C602),		
	      helpstring("I_dxj_DirectInputEffect Interface"),
		pointer_default(unique),
		local,
		helpcontext(314600)
	]
	interface I_dxj_DirectInputEffect : IUnknown 
	{
		import "oaidl.idl";
		[hidden]		HRESULT InternalSetObject([in] IUnknown *lpdd);
		[hidden]		HRESULT InternalGetObject([out, retval] IUnknown **lpdd);

		[helpcontext(314601)]		HRESULT download();
		[helpcontext(314602)]		HRESULT getEffectGuid([out,retval] BSTR *guid);
		[helpcontext(314603)]		HRESULT getEffectStatus([out,retval] long *ret);
		[helpcontext(314604)]		HRESULT start([in] long iterations, [in] long flags);
		[helpcontext(314605)]		HRESULT stop();
		[helpcontext(314606)]		HRESULT unload();
		[helpcontext(314607)]		HRESULT setParameters([in] DIEFFECT_CDESC *effectinfo,[in] DIEPFLAGS flags);
		[helpcontext(314608)]		HRESULT getParameters([in,out] DIEFFECT_CDESC *effectinfo);
	};

	[
		object,
		uuid(BCAA7DAA-F7EF-11d2-93FD-00C04FC2C602),		
        	helpstring("I_dxj_DirectInputEnumEffects Interface"),
		pointer_default(unique),
		local,
		helpcontext(314800)
	]
	interface I_dxj_DirectInputEnumEffects : IUnknown 
	{
		import "oaidl.idl";
		[helpcontext(314801)]		HRESULT getCount([out,retval] long *ret);
		[helpcontext(314802)]		HRESULT getEffectGuid([in] long i,[out,retval] BSTR *ret);
		[helpcontext(314803)]		HRESULT getType([in] long i,[out,retval] DIEFTFLAGS *ret);
		[helpcontext(314804)]		HRESULT getStaticParams([in] long i,[out,retval] DIEPFLAGS *ret);
		[helpcontext(314805)]		HRESULT getDynamicParams([in] long i,[out,retval] DIEPFLAGS *ret);
		[helpcontext(314806)]		HRESULT getName([in] long i, [out,retval] BSTR *ret);
	};		



	[
		object,
		uuid(9F76FA08-8E92-11d1-8808-00C04FC2C602),		
		helpstring("I_dxj_DIEnumDeviceObjects Interface"),
		pointer_default(unique),
		local,
		helpcontext(315000)
	]
	interface I_dxj_DIEnumDeviceObjects : IUnknown
	{
			import "oaidl.idl";
			[helpcontext(315001)]		HRESULT getItem( [in]long index, [out,retval] I_dxj_DirectInputDeviceObjectInstance **info);
			[helpcontext(315002)]		HRESULT getCount([out,retval]long *count);		
	};
	

	[
		object,
		uuid(9F76FA09-8E92-11d1-8808-00C04FC2C602),		
		helpstring("I_dxj_DIEnumDevices Interface"),
		pointer_default(unique),
		local,
		helpcontext(315200)
	]

	interface I_dxj_DIEnumDevices : IUnknown
	{
			import "oaidl.idl";
			[helpcontext(315201)]		HRESULT getItem( [in]long index, [out,retval] I_dxj_DirectInputDeviceInstance **info);
			[helpcontext(315202)]		HRESULT getCount([out,retval]long *count);		
	};

	
///////////////////////////////////////////////////////////////////////////
// 
// Direct3DRM Interpolator Interfaces
// 
///////////////////////////////////////////////////////////////////////////
	

	[
		object,
		uuid(9F76FE29-8E92-11d1-8808-00C04FC2C602),
		helpstring("I_dxj_Direct3dRMInterpolator Interface"),
		pointer_default(unique),
		local,
		hidden,
		helpcontext(315400)
	]
	interface I_dxj_Direct3dRMInterpolator : IUnknown	
	{
 		[hidden]		HRESULT InternalSetObject([in] IUnknown *lpdd);
		[hidden]		HRESULT InternalGetObject([out, retval] IUnknown **lpdd);

		[helpcontext(315401)]		HRESULT attachObject([in] I_dxj_Direct3dRMObject *rmObject);
		[helpcontext(315402)]		HRESULT detachObject([in] I_dxj_Direct3dRMObject *rmObject);
		[helpcontext(315403)]		HRESULT getAttachedObjects([out,retval] I_dxj_Direct3dRMObjectArray **rmArray);
		[helpcontext(315404)]		HRESULT setIndex([in] float val);
		[helpcontext(315405)]		HRESULT getIndex([out,retval] float *val);
		[helpcontext(315406)]		HRESULT interpolate([in] float val, [in] I_dxj_Direct3dRMObject *rmobject, [in] d3drmInterpolationFlags options);

        
	};

	[
		object,
		uuid(5F4637E1-62AC-11d2-90B1-00C04FC2C602),
		helpstring("I_dxj_Direct3dRMViewportInterpolator Interface"),
		pointer_default(unique),
		local,
		//hidden,
		helpcontext(315600)
	]
	interface I_dxj_Direct3dRMViewportInterpolator : IUnknown	
	{
  		[hidden]		HRESULT InternalSetObject([in] IUnknown *lpdd);
		[hidden]		HRESULT InternalGetObject([out, retval] IUnknown **lpdd);

		[helpcontext(315601)]		HRESULT attachObject([in] I_dxj_Direct3dRMObject *rmObject);
		[helpcontext(315602)]		HRESULT detachObject([in] I_dxj_Direct3dRMObject *rmObject);
		[helpcontext(315603)]		HRESULT getAttachedObjects([out,retval] I_dxj_Direct3dRMObjectArray **rmArray);
		[helpcontext(315604)]		HRESULT setIndex([in] float val);
		[helpcontext(315605)]		HRESULT getIndex([out,retval] float *val);
		[helpcontext(315606)]		HRESULT interpolate([in] float val, [in] I_dxj_Direct3dRMObject *rmobject, [in] d3drmInterpolationFlags options);
     
		[helpcontext(315607)]		HRESULT setFront([in] float val);	   
		[helpcontext(315608)]		HRESULT setBack([in] float val);
		[helpcontext(315609)]		HRESULT setField([in] float val);
		[helpcontext(315610)]		HRESULT setPlane([in] float left, [in] float right,	[in] float bottom, [in] float top);
	};

	

	[
		object,
		uuid(5F4637E2-62AC-11d2-90B1-00C04FC2C602),
		helpstring("I_dxj_Direct3dRMFrameInterpolator Interface"),
		pointer_default(unique),
		local,
		//hidden,
		helpcontext(315800)

	]
	interface I_dxj_Direct3dRMFrameInterpolator : IUnknown	
	{

  		[hidden]		HRESULT InternalSetObject([in] IUnknown *lpdd);
		[hidden]		HRESULT InternalGetObject([out, retval] IUnknown **lpdd);
		[helpcontext(315801)]		HRESULT attachObject([in] I_dxj_Direct3dRMObject *rmObject);
		[helpcontext(315802)]		HRESULT detachObject([in] I_dxj_Direct3dRMObject *rmObject);
		[helpcontext(315803)]		HRESULT getAttachedObjects([out,retval] I_dxj_Direct3dRMObjectArray **rmArray);
		[helpcontext(315804)]		HRESULT setIndex([in] float val);
		[helpcontext(315805)]		HRESULT getIndex([out,retval] float *val);
		[helpcontext(315806)]		HRESULT interpolate([in] float val, [in] I_dxj_Direct3dRMObject *rmobject, [in] d3drmInterpolationFlags options);

		[helpcontext(315807)]		HRESULT setPosition( [in] I_dxj_Direct3dRMFrame3 *reference, [in] float x,
													[in] float y, [in] float z);
		[helpcontext(315808)]		HRESULT setQuaternion([in]I_dxj_Direct3dRMFrame3 *reference,D3DRMQUATERNION_CDESC *quat);

		[helpcontext(315809)]		HRESULT setRotation( [in] I_dxj_Direct3dRMFrame3 *reference, [in] float x,
							[in] float y, [in] float z, [in] float theta);

		[helpcontext(315810)]		HRESULT setVelocity( [in] I_dxj_Direct3dRMFrame3 *reference, [in] float x,
							[in] float y, [in] float z, [in] dxBool with_rotation);


		[helpcontext(315811)]		HRESULT setOrientation( [in] I_dxj_Direct3dRMFrame3 *reference, [in] float dx,
								  [in] float dy, [in] float dz, [in] float ux,
									[in] float uy, [in] float uz);
     
		[helpcontext(315812)]		HRESULT setSceneBackground([in] d3dcolor c);		
		[helpcontext(315813)]		HRESULT setSceneFogColor([in] d3dcolor c);
		[helpcontext(315814)]		HRESULT setSceneBackgroundRGB([in] float r, [in] float g, [in] float b);
		[helpcontext(315815)]		HRESULT setSceneFogParams([in] float start, [in] float end, [in] float density);

		[helpcontext(315816)]		HRESULT setColor([in] d3dcolor c);
		[helpcontext(315817)]		HRESULT setColorRGB([in] float r, [in] float g, [in] float b);		

	};


	[
		object,
		uuid(5F4637E3-62AC-11d2-90B1-00C04FC2C602),
		helpstring("I_dxj_Direct3dRMeshInterpolator Interface"),
		pointer_default(unique),
		local,
	//	hidden,
		helpcontext(316000)
	]
	interface I_dxj_Direct3dRMMeshInterpolator : IUnknown	
	{

  		[hidden]		HRESULT InternalSetObject([in] IUnknown *lpdd);
		[hidden]		HRESULT InternalGetObject([out, retval] IUnknown **lpdd);
		[helpcontext(316001)]		HRESULT attachObject([in] I_dxj_Direct3dRMObject *rmObject);
		[helpcontext(316002)]		HRESULT detachObject([in] I_dxj_Direct3dRMObject *rmObject);
		[helpcontext(316003)]		HRESULT getAttachedObjects([out,retval] I_dxj_Direct3dRMObjectArray **rmArray);
		[helpcontext(316004)]		HRESULT setIndex([in] float val);
		[helpcontext(316005)]		HRESULT getIndex([out,retval] float *val);
		[helpcontext(316006)]		HRESULT interpolate([in] float val, [in] I_dxj_Direct3dRMObject *rmobject, [in] d3drmInterpolationFlags options);


		[helpcontext(316007)]		HRESULT translate([in] float tx, [in] float ty, [in] float tz);		
		[helpcontext(316008)]		HRESULT setVertices([in] d3drmGroupIndex id, [in] long idx, [in] long count, [in] SAFEARRAY(D3DRMVERTEX_CDESC) *vertexArray);
		[helpcontext(316009)]		HRESULT setGroupColor([in] d3drmGroupIndex id, [in] d3dcolor val);
		[helpcontext(316010)]		HRESULT setGroupColorRGB([in] d3drmGroupIndex id, [in] float r,[in] float g, [in] float b);
	};



	[
		object,
		uuid(5F4637E4-62AC-11d2-90B1-00C04FC2C602),
		helpstring("I_dxj_Direct3dRMLightInterpolator Interface"),
		pointer_default(unique),
		local,
		//hidden,
		helpcontext(316200)

	]
	interface I_dxj_Direct3dRMLightInterpolator : IUnknown	
	{

  		[hidden]		HRESULT InternalSetObject([in] IUnknown *lpdd);
		[hidden]		HRESULT InternalGetObject([out, retval] IUnknown **lpdd);
		[helpcontext(316201)]		HRESULT attachObject([in] I_dxj_Direct3dRMObject *rmObject);
		[helpcontext(316202)]		HRESULT detachObject([in] I_dxj_Direct3dRMObject *rmObject);
		[helpcontext(316203)]		HRESULT getAttachedObjects([out,retval] I_dxj_Direct3dRMObjectArray **rmArray);
		[helpcontext(316204)]		HRESULT setIndex([in] float val);
		[helpcontext(316205)]		HRESULT getIndex([out,retval] float *val);
		[helpcontext(316206)]		HRESULT interpolate([in] float val, [in] I_dxj_Direct3dRMObject *rmobject, [in] d3drmInterpolationFlags options);


		//
		// IDirect3DRMLight methods - docdoc: based on id3drmObject!
		//
		
		[helpcontext(316207)]		HRESULT setColor([in] d3dcolor c);
		[helpcontext(316208)]		HRESULT setColorRGB([in] float r, [in] float g, [in] float b);
		[helpcontext(316209)]		HRESULT setRange([in] float rng);
		[helpcontext(316210)]		HRESULT setUmbra([in] float u);
		[helpcontext(316211)]		HRESULT setPenumbra([in] float p);
		[helpcontext(316212)]		HRESULT setConstantAttenuation([in] float atn);
		[helpcontext(316213)]		HRESULT setLinearAttenuation([in] float atn);
		[helpcontext(316214)]		HRESULT setQuadraticAttenuation([in] float atn);
	};



	[
		object,
		uuid(5F4637E5-62AC-11d2-90B1-00C04FC2C602),
		helpstring("I_dxj_Direct3dRMTextureInterpolator Interface"),
		pointer_default(unique),
		local,
		//hidden,
		helpcontext(316400)
	]
	interface I_dxj_Direct3dRMTextureInterpolator : IUnknown	
	{

  		[hidden]		HRESULT InternalSetObject([in] IUnknown *lpdd);
		[hidden]		HRESULT InternalGetObject([out, retval] IUnknown **lpdd);
		[helpcontext(316401)]		HRESULT attachObject([in] I_dxj_Direct3dRMObject *rmObject);
		[helpcontext(316402)]		HRESULT detachObject([in] I_dxj_Direct3dRMObject *rmObject);
		[helpcontext(316403)]		HRESULT getAttachedObjects([out,retval] I_dxj_Direct3dRMObjectArray **rmArray);
		[helpcontext(316404)]		HRESULT setIndex([in] float val);
		[helpcontext(316405)]		HRESULT getIndex([out,retval] float *val);
		[helpcontext(316406)]		HRESULT interpolate([in] float val, [in] I_dxj_Direct3dRMObject *rmobject, [in] d3drmInterpolationFlags options);

		[helpcontext(316407)]		HRESULT setDecalOrigin([in] long x, [in] long y);
		[helpcontext(316408)]		HRESULT setDecalSize([in] float width, [in] float height);
		[helpcontext(316409)]		HRESULT setDecalTransparentColor([in] d3dcolor tcolor);
		
	};


	[
		object,
		uuid(5F4637E6-62AC-11d2-90B1-00C04FC2C602),
		helpstring("I_dxj_Direct3dRMMaterialInterpolator Interface"),
		pointer_default(unique),
		local,
		//hidden,
		helpcontext(316600)
	]
	interface I_dxj_Direct3dRMMaterialInterpolator : IUnknown	
	{

  		[hidden]		HRESULT InternalSetObject([in] IUnknown *lpdd);
		[hidden]		HRESULT InternalGetObject([out, retval] IUnknown **lpdd);
		[helpcontext(316601)]		HRESULT attachObject([in] I_dxj_Direct3dRMObject *rmObject);
		[helpcontext(316602)]		HRESULT detachObject([in] I_dxj_Direct3dRMObject *rmObject);
		[helpcontext(316603)]		HRESULT getAttachedObjects([out,retval] I_dxj_Direct3dRMObjectArray **rmArray);
		[helpcontext(316604)]		HRESULT setIndex([in] float val);
		[helpcontext(316605)]		HRESULT getIndex([out,retval] float *val);
		[helpcontext(316606)]		HRESULT interpolate([in] float val, [in] I_dxj_Direct3dRMObject *rmobject, [in] d3drmInterpolationFlags options);

		[helpcontext(316607)]		HRESULT setPower([in] float power);
		[helpcontext(316608)]		HRESULT setSpecular([in] float red, [in] float green, [in] float blue);
		[helpcontext(316609)]		HRESULT setEmissive([in] float red, [in] float green, [in] float blue);
		
	};

///////////////////////////////////////////////////////////////////////////
// 
// DirectMusic
// 
///////////////////////////////////////////////////////////////////////////

	#define MUSIC_TIME long
	#define REFERENCE_TIME long

	[
		object,
		uuid(FAFA35A0-8B72-11d2-90B2-00C04FC2C602),	
		helpstring("I_dxj_DirectMusicLoader Interface"),
		pointer_default(unique),
		local,
		helpcontext(316800)
	]
	interface I_dxj_DirectMusicLoader : IUnknown	
	{
  		[hidden]		HRESULT InternalSetObject([in] IUnknown *lpdd);
		[hidden]		HRESULT InternalGetObject([out, retval] IUnknown **lpdd);

		// in place of GetObject we can have a function for each type -
		// load from Resource 
		[helpcontext(316801)]		HRESULT loadSegment([in]BSTR filename, [out,retval] I_dxj_DirectMusicSegment **ret);
		[helpcontext(316802)]		HRESULT loadStyle([in]BSTR filename, [out,retval] I_dxj_DirectMusicStyle **ret);
		[helpcontext(316803)]		HRESULT loadBand([in]BSTR filename, [out,retval] I_dxj_DirectMusicBand **ret);
		[helpcontext(316804)]		HRESULT loadCollection([in]BSTR filename, [out,retval] I_dxj_DirectMusicCollection **ret);

		[helpcontext(316805)]		HRESULT loadSegmentFromResource([in]BSTR moduleName,[in]BSTR resourceName, [out,retval] I_dxj_DirectMusicSegment **ret);
		[helpcontext(316806)]		HRESULT loadStyleFromResource([in]BSTR moduleName,[in]BSTR resourceName, [out,retval] I_dxj_DirectMusicStyle **ret);
		[helpcontext(316807)]		HRESULT loadBandFromResource([in]BSTR moduleName,[in] BSTR resourceName, [out,retval] I_dxj_DirectMusicBand **ret);
		[helpcontext(316808)]		HRESULT loadCollectionFromResource([in]BSTR moduleName,[in]BSTR resourceName, [out,retval] I_dxj_DirectMusicCollection **ret);

		[helpcontext(316809)]		HRESULT setSearchDirectory([in] BSTR dir);

		[helpcontext(316810)]		HRESULT loadChordMap([in]BSTR filename, [out,retval] I_dxj_DirectMusicChordMap **ret);
		[helpcontext(316811)]		HRESULT loadChordMapFromResource([in]BSTR moduleName,[in]BSTR resourceName, [out,retval] I_dxj_DirectMusicChordMap **ret);
				
	};

	[
		object,
		uuid(FAFA35A1-8B72-11d2-90B2-00C04FC2C602),	
		helpstring("I_dxj_DirectMusicSegment Interface"),
		pointer_default(unique),
		local,
		helpcontext(317000)
	]
	interface I_dxj_DirectMusicSegment : IUnknown	
	{
	
		[hidden]		HRESULT InternalSetObject([in] IUnknown *lpdd);
		[hidden]		HRESULT InternalGetObject([out, retval] IUnknown **lpdd);

		
		/* I_dxj_DirectMusicSegment */
		[helpcontext(317001)]		HRESULT clone  ([in] MUSIC_TIME mtStart, [in]   MUSIC_TIME mtEnd,   [out,retval]    I_dxj_DirectMusicSegment** ppSegment);
		[helpcontext(317002)]		HRESULT setStartPoint            ([in] MUSIC_TIME mtStart) ;
		[helpcontext(317003)]		HRESULT getStartPoint            ([out,retval]  MUSIC_TIME* pmtStart);
		[helpcontext(317004)]		HRESULT setLoopPoints            ([in]  MUSIC_TIME mtStart,    [in]   MUSIC_TIME mtEnd);
		[helpcontext(317005)]		HRESULT getLoopPointStart        ([out,retval] MUSIC_TIME* pmtStart);
		[helpcontext(317006)]		HRESULT getLoopPointEnd          ([out,retval] MUSIC_TIME* pmtEnd);
		[helpcontext(317007)]		HRESULT getLength                ([out,retval] MUSIC_TIME* pmtLength);
		[helpcontext(317008)]		HRESULT setLength                ([in] MUSIC_TIME mtLength);
		[helpcontext(317009)]		HRESULT getRepeats               ([out,retval] long* lRepeats);
		[helpcontext(317010)]		HRESULT setRepeats               ([in] long  lRepeats) ;


		//track params
	
		[helpcontext(317011)]		HRESULT download( [in] I_dxj_DirectMusicPerformance *performance);
		[helpcontext(317012)]		HRESULT unload(  [in] I_dxj_DirectMusicPerformance *performance);
		[helpcontext(317013)]		HRESULT setAutoDownloadEnable ( [in] VARIANT_BOOL b);		
		[helpcontext(317014)]		HRESULT setTempoEnable (  [in] VARIANT_BOOL b);
		[helpcontext(317015)]		HRESULT setTimeSigEnable (  [in] VARIANT_BOOL b);
		[helpcontext(317016)]		HRESULT setStandardMidiFile( );
  	    	[helpcontext(317017)]		HRESULT connectToCollection (  [in] I_dxj_DirectMusicCollection *c);
		
	};


	[
		object,
		uuid(FAFA35A2-8B72-11d2-90B2-00C04FC2C602),	
		helpstring("I_dxj_DirectMusicComposer Interface"),
		pointer_default(unique),
		local,
		helpcontext(317200)
	]
	interface I_dxj_DirectMusicComposer : IUnknown	
	{
		[hidden]		HRESULT InternalSetObject([in] IUnknown *lpdd);
		[hidden]		HRESULT InternalGetObject([out, retval] IUnknown **lpdd);


		
		[helpcontext(317201)]		HRESULT autoTransition ([in] I_dxj_DirectMusicPerformance* performance, 
                                             [in] I_dxj_DirectMusicSegment* toSeg, 
                                             [in] long lCommand, 
                                             [in] long lFlags, 
											 [in] I_dxj_DirectMusicChordMap *chordmap,
                                             [out,retval] I_dxj_DirectMusicSegment** ppTransSeg);
		[helpcontext(317202)]		HRESULT composeSegmentFromTemplate   ([in]  I_dxj_DirectMusicStyle* style,
											 [in]  I_dxj_DirectMusicSegment* templateSeg, 
                                             [in]  short activity, 
											 [in] I_dxj_DirectMusicChordMap *chordmap,
                                             [out,retval] I_dxj_DirectMusicSegment** SectionSeg);

		[helpcontext(317203)]		HRESULT composeSegmentFromShape   ( [in]  I_dxj_DirectMusicStyle* style,
                                             [in]  short numberOfMeasures, 
											 [in]  short shape, 
											 [in]  short activity, 
											 [in] VARIANT_BOOL bIntro,
											 [in] VARIANT_BOOL bEnd,
											 [in] I_dxj_DirectMusicChordMap *chordmap,
                                             [out,retval] I_dxj_DirectMusicSegment** SectionSeg);

		[helpcontext(317204)]		HRESULT composeTransition   ([in] I_dxj_DirectMusicSegment* fromSeg, 
                                              [in] I_dxj_DirectMusicSegment* toSeg, 
                                              [in] MUSIC_TIME mtTime, 
                                              [in] long lCommand, 
                                              [in] long lFlags, 
											  [in] I_dxj_DirectMusicChordMap *chordmap,
                                              [out,retval]     I_dxj_DirectMusicSegment** SectionSeg);
 
		[helpcontext(317205)]		HRESULT composeTemplateFromShape ([in] short numMeasures, 
                                             [in] short shape, 
                                              [in] VARIANT_BOOL bIntro, 
                                              [in] VARIANT_BOOL bEnd, 
                                               [in] short endLength, 
                                               [out,retval]    I_dxj_DirectMusicSegment** TempSeg);

		[helpcontext(317206)]		HRESULT changeChordMap([in] I_dxj_DirectMusicSegment* segment,[in] VARIANT_BOOL trackScale, [in] I_dxj_DirectMusicChordMap* ChordMap);

	};
 



	[
		object,
		uuid(FAFA35A3-8B72-11d2-90B2-00C04FC2C602),	
		helpstring("I_dxj_DirectMusicBand Interface"),
		pointer_default(unique),
		local,
		helpcontext(317400)
	]
	interface I_dxj_DirectMusicBand : IUnknown	
	{
		[hidden]		HRESULT InternalSetObject([in] IUnknown *lpdd);
		[hidden]		HRESULT InternalGetObject([out, retval] IUnknown **lpdd);

		[helpcontext(317401)]		HRESULT createSegment([out,retval] I_dxj_DirectMusicSegment **ret);
		[helpcontext(317402)]		HRESULT download([in] I_dxj_DirectMusicPerformance *performance);
		[helpcontext(317403)]		HRESULT unload([in] I_dxj_DirectMusicPerformance *performance);
	};



	[
		object,
		uuid(FAFA35A4-8B72-11d2-90B2-00C04FC2C602),	
		helpstring("I_dxj_DirectMusicStyle Interface"),
		pointer_default(unique),
		local,
		helpcontext(317600)
	]
	interface I_dxj_DirectMusicStyle : IUnknown	
	{
		[hidden]		HRESULT InternalSetObject([in] IUnknown *lpdd);
		[hidden]		HRESULT InternalGetObject([out, retval] IUnknown **lpdd);

		[helpcontext(317601)]		HRESULT getBandName([in] long index,[out,retval] BSTR *name);
		[helpcontext(317602)]		HRESULT getBandCount([out,retval] long *count);
		[helpcontext(317603)]		HRESULT getBand([in] BSTR name,[out,retval] I_dxj_DirectMusicBand **ret);
		[helpcontext(317604)]		HRESULT getDefaultBand([out,retval] I_dxj_DirectMusicBand **ret);
		
		[helpcontext(317605)]		HRESULT getMotifName([in] long index,[out,retval] BSTR *name);
		[helpcontext(317606)]		HRESULT getMotifCount([out,retval] long *count);
		[helpcontext(317607)]		HRESULT getMotif([in] BSTR name,[out,retval] I_dxj_DirectMusicSegment **ret);		
		[helpcontext(317608)]		HRESULT getTimeSignature( [in,out] DMUS_TIMESIGNATURE_CDESC* pTimeSig); 
		[helpcontext(317609)]		HRESULT getTempo([out,retval] double *pTempo); 

	};


	[
		object,
		uuid(FAFA35A5-8B72-11d2-90B2-00C04FC2C602),	
		helpstring("I_dxj_DirectMusicChordMap Interface"),
		pointer_default(unique),
		local,
		helpcontext(317800)
	]
	interface I_dxj_DirectMusicChordMap : IUnknown	
	{
		[hidden]		HRESULT InternalSetObject([in] IUnknown *lpdd);
		[hidden]		HRESULT InternalGetObject([out, retval] IUnknown **lpdd);

	
		[hidden]		HRESULT getScale([out,retval] long *scale);

	};

	[
		object,
		uuid(FAFA35A6-8B72-11d2-90B2-00C04FC2C602),	
		helpstring("I_dxj_DirectMusicSegmentState Interface"),
		pointer_default(unique),
		local,
		helpcontext(318000)
	]
	interface I_dxj_DirectMusicSegmentState : IUnknown	
	{
	
		[hidden]		HRESULT InternalSetObject([in] IUnknown *lpdd);
		[hidden]		HRESULT InternalGetObject([out, retval] IUnknown **lpdd);

		[helpcontext(318001)]		HRESULT getRepeats([out,retval] long *repeats);
		[helpcontext(318002)]		HRESULT getSeek([out,retval] MUSIC_TIME *seek);
		[helpcontext(318003)]		HRESULT getStartPoint([out,retval] MUSIC_TIME *seek);
		[helpcontext(318004)]		HRESULT getStartTime([out,retval] MUSIC_TIME *seek);
		[helpcontext(318005)]		HRESULT getSegment([out,retval] I_dxj_DirectMusicSegment  **segment);
	};



	[
		object,
		uuid(FAFA35A7-8B72-11d2-90B2-00C04FC2C602),	
		helpstring("I_dxj_DirectMusicPerformance Interface"),
		pointer_default(unique),
		local,
		helpcontext(318200)
	]
	interface I_dxj_DirectMusicPerformance : IUnknown	
	{
		[hidden]		HRESULT InternalSetObject([in] IUnknown *lpdd);
		[hidden]		HRESULT InternalGetObject([out, retval] IUnknown **lpdd);


		[helpcontext(318201)]		HRESULT init                ([in] I_dxj_DirectSound *DirectSound, [in] long hWnd) ;
		[helpcontext(318202)]		HRESULT closeDown			();
		
		[helpcontext(318203)]		HRESULT playSegment        ([in] I_dxj_DirectMusicSegment* segment, 									 
                                     	[in] long lFlags, 
                                     	[in] long startTime,
									 [out,retval] I_dxj_DirectMusicSegmentState** segmentState);
		[helpcontext(318204)]		HRESULT stop                ([in] I_dxj_DirectMusicSegment* segment, 
									 [in] I_dxj_DirectMusicSegmentState *segmentState,                                  
                                     	[in] MUSIC_TIME mtTime, 
                                     	[in] long lFlags) ;
		[helpcontext(318205)]		HRESULT getSegmentState		([in] MUSIC_TIME mtTime, [out,retval] I_dxj_DirectMusicSegmentState **ret);
		[helpcontext(318206)]		HRESULT invalidate			([in] MUSIC_TIME mtTime, [in] long flags);
		[helpcontext(318207)]		HRESULT isPlaying           ([in] I_dxj_DirectMusicSegment* segment, [in] I_dxj_DirectMusicSegmentState* segmentState,[out,retval] VARIANT_BOOL *b);
		
		[helpcontext(318208)]		HRESULT addNotificationType ([in] CONST_DMUS_NOTIFICATION_TYPE type);
		[helpcontext(318209)]		HRESULT removeNotificationType ([in] CONST_DMUS_NOTIFICATION_TYPE type);
		[helpcontext(318210)]		HRESULT setNotificationHandle([in] long hnd);
		[helpcontext(318211)]		HRESULT getNotificationPMSG  ([in,out] DMUS_NOTIFICATION_PMSG_CDESC *message,[out,retval] VARIANT_BOOL *success);
		  
			
		[helpcontext(318212)]		HRESULT musicToClockTime ([in] MUSIC_TIME mtTime,[out,retval] REFERENCE_TIME *ctTime);
		[helpcontext(318213)]		HRESULT clockToMusicTime ([in] REFERENCE_TIME ctTime,[out,retval] MUSIC_TIME *mtTime);
		[helpcontext(318214)]		HRESULT getMusicTime       ([out,retval]   MUSIC_TIME* ret);
		[helpcontext(318215)]		HRESULT getClockTime   ([out,retval]   REFERENCE_TIME* ret);
		[helpcontext(318216)]		HRESULT getPrepareTime      ([out,retval] long *lMilliSeconds);
		[helpcontext(318217)]		HRESULT getBumperLength      ([out,retval] long *lMilliSeconds);
		[helpcontext(318218)]		HRESULT getLatencyTime      ([out,retval] REFERENCE_TIME *ctTime);
		[helpcontext(318219)]		HRESULT getQueueTime		([out,retval] REFERENCE_TIME *ctTime);
		[helpcontext(318220)]		HRESULT getResolvedTime		([in] REFERENCE_TIME ctTime, [in] long flags, [out,retval] REFERENCE_TIME *ret);
		[helpcontext(318221)]		HRESULT setPrepareTime      ([in] long  lMilliSeconds);
		[helpcontext(318222)]		HRESULT setBumperLength      ([in] long lMilliSeconds) ;		
		[helpcontext(318223)]		HRESULT adjustTime			([in] long tAmount);
	
		


		//global params
		[helpcontext(318224)]		HRESULT setMasterAutoDownload     ([in] VARIANT_BOOL b);
		[helpcontext(318225)]		HRESULT getMasterAutoDownload      ([out,retval] VARIANT_BOOL *b);
		[helpcontext(318226)]		HRESULT setMasterTempo 	    ([in] float tempo);
		[helpcontext(318227)]		HRESULT getMasterTempo      ([out,retval] float *tempo);
		[helpcontext(318228)]		HRESULT setMasterVolume     ([in] long vol);
		[helpcontext(318229)]		HRESULT getMasterVolume      ([out,retval] long *v);
		[helpcontext(318230)]		HRESULT setMasterGrooveLevel ([in] short level);
		[helpcontext(318231)]		HRESULT getMasterGrooveLevel ([out,retval] short *level);

		[helpcontext(318232)]		HRESULT Reset([in] long resetflags );
		[helpcontext(318233)]		HRESULT getStyle([in] MUSIC_TIME mtTime,[in,out] MUSIC_TIME *mtUntil,[out,retval] I_dxj_DirectMusicStyle **ret);
		[helpcontext(318234)]		HRESULT getChordMap([in] MUSIC_TIME mtTime,[in,out] MUSIC_TIME *mtUntil,[out,retval] I_dxj_DirectMusicChordMap **ret);		
		[helpcontext(318235)]		HRESULT getCommand([in] MUSIC_TIME mtTime,[in,out] MUSIC_TIME *mtUntil,[out,retval] Byte *command) ;
		[helpcontext(318236)]		HRESULT getGrooveLevel([in] MUSIC_TIME mtTime,[in,out] MUSIC_TIME *mtUntil,[out,retval] Byte *level) ;
		[helpcontext(318237)]		HRESULT getTempo([in] MUSIC_TIME mtTime,[in,out] MUSIC_TIME *mtUntil,[out,retval] double *tempo) ;
		[helpcontext(318238)]		HRESULT getTimeSig([in] MUSIC_TIME mtTime,[in,out] MUSIC_TIME *mtUntil,[in,out] DMUS_TIMESIGNATURE_CDESC *timeSig) ;

		[helpcontext(318239)]		HRESULT sendNotePMSG([in] MUSIC_TIME lTime,
											[in] long flags,
											[in] long channel,
											[in] DMUS_NOTE_PMSG_CDESC *msg);

		
		[helpcontext(318240)]		HRESULT sendCurvePMSG([in] MUSIC_TIME lTime,
											[in] long flags,
											[in] long channel,
											[in] DMUS_CURVE_PMSG_CDESC *msg);
									

		[helpcontext(318241)]		HRESULT sendMIDIPMSG([in] MUSIC_TIME lTime,
											[in] long flags,
											[in] long channel,
											[in] Byte status,
											[in] Byte byte1,
											[in] Byte byte2);

		[helpcontext(318242)]		HRESULT sendPatchPMSG([in] MUSIC_TIME lTime,
									 		[in] long flags,
											[in] long channel,
											[in] Byte instrument,
											[in] Byte byte1,
											[in] Byte byte2);
		[helpcontext(318243)]		HRESULT sendTempoPMSG([in] MUSIC_TIME lTime,
											[in] long flags,
									//		[in] long channel,
											[in] double tempo);

		[helpcontext(318244)]		HRESULT sendTransposePMSG([in] MUSIC_TIME lTime,
											[in] long flags,
											[in] long channel,
											[in] short transpose);

		[helpcontext(318245)]		HRESULT sendTimeSigPMSG([in] MUSIC_TIME lTime,
											[in] long flags,
											[in] DMUS_TIMESIGNATURE_CDESC *timesig);

		[helpcontext(318246)]		HRESULT getPortName([in] long index,[out,retval] BSTR *name);
		[helpcontext(318247)]		HRESULT getPortCount([out,retval] long *c);
		[helpcontext(318248)]		HRESULT getPortCaps([in] long index,[in,out] DMUS_PORTCAPS_CDESC  *caps);
		[helpcontext(318249)]		HRESULT setPort([in] long index,[in] long numGroups);

	};

	
	[
		object,
		uuid(FAFA35A8-8B72-11d2-90B2-00C04FC2C602),	
		helpstring("I_dxj_DirectMusicCollection Interface"),
		pointer_default(unique),
		local,
		helpcontext(318400)
	]
	interface I_dxj_DirectMusicCollection : IUnknown	
	{
		[hidden]		HRESULT InternalSetObject([in] IUnknown *lpdd);
		[hidden]		HRESULT InternalGetObject([out, retval] IUnknown **lpdd);

	};

///////////////////////////////////////////////////////////////////////////
// 
// Other
// 
///////////////////////////////////////////////////////////////////////////


	[
		object,
		uuid(FAFA35B0-8B72-11d2-90B2-00C04FC2C602),	
		helpstring("I_dxj_DirectXEvent Interface"),
		pointer_default(unique),
		oleautomation,
		helpcontext(318600)
	]
	interface I_dxj_DirectXEvent : IUnknown	
	{
		[helpcontext(318601)]		HRESULT DXCallback([in] long eventid);
	};

#if FALSE
	[
		object,
		uuid(FAFA35B1-8B72-11d2-90B2-00C04FC2C602),	
		helpstring("I_dxj_WebObject Interface"),
		pointer_default(unique),
		oleautomation,
		hidden,
		helpcontext(318800)
	]	
	interface I_dxj_DirectWeb : IUnknown
	{

		[helpcontext(318801)]		HRESULT LoadPage([in]BSTR page,[in]int w, [in]int h);
		[helpcontext(318802)]		HRESULT DrawToDC([in]long hdc,[in]int w, [in]int h);
		[helpcontext(318803)]		HRESULT GetReadyState([out,retval]BSTR *ret);
		[helpcontext(318804)]		HRESULT GetHeight([in]int *height);
		[helpcontext(318805)]		HRESULT GetWidth([in]int *width);
		[helpcontext(318806)]		HRESULT Click([in] int x, [in] int y);

	
	};
#endif


	[
		object,
	      uuid(FAFA3599-8B72-11d2-90B2-00C04FC2C602), 
		helpstring("DirectX7 root object functions"),
		pointer_default(unique),
		helpcontext(319000)

	]
	interface I_dxj_DirectX7 : IUnknown	
	{
		import "oaidl.idl";
		
		[helpcontext(319001)]		HRESULT direct3dRMCreate([out,retval] I_dxj_Direct3dRM3 **ret);		
		[helpcontext(319002)]		HRESULT directDrawCreate([in] BSTR guid, [out,retval] I_dxj_DirectDraw7 **ret);		
		[helpcontext(319003)]		HRESULT getDDEnum([out,retval] I_dxj_DirectDrawEnum **ret);
		[helpcontext(319004)]		HRESULT directSoundCreate([in] BSTR guid, [out,retval] I_dxj_DirectSound **ret);
		[helpcontext(319005)]		HRESULT directSoundCaptureCreate([in] BSTR guid, [out,retval] I_dxj_DirectSoundCapture **ret);
		[helpcontext(319006)]		HRESULT getDSEnum([out,retval] I_dxj_DSEnum **retVal);
		[helpcontext(319007)]		HRESULT getDSCaptureEnum([out,retval] I_dxj_DSEnum **retVal);		
        	[helpcontext(319008)]		HRESULT directInputCreate([out,retval]I_dxj_DirectInput **ret);
		[helpcontext(319009)]		HRESULT directPlayCreate([in] BSTR guid, [out,retval] I_dxj_DirectPlay4 **ret);
		[helpcontext(319010)]		HRESULT directPlayLobbyCreate([out,retval] I_dxj_DirectPlayLobby3 **ret);
		[hidden]		HRESULT getDPEnum([out,retval]I_dxj_DPEnumServiceProviders **retval);
	
		[helpcontext(319011)]		HRESULT colorGetAlpha([in] long color,[out,retval] float *ret);
		[helpcontext(319012)]		HRESULT colorGetBlue([in] long color,[out,retval] float *ret);
		[helpcontext(319013)]		HRESULT colorGetGreen([in] long color,[out,retval] float *ret);
		[helpcontext(319014)]		HRESULT colorGetRed([in] long color,[out,retval] float *ret);
		[helpcontext(319015)]		HRESULT createColorRGB([in] float r,[in] float g,[in] float b,[out,retval]long *color);
		[helpcontext(319016)]		HRESULT createColorRGBA([in] float r,[in] float g,[in] float b,[in] float a,[out,retval]long *color);
		[helpcontext(319017)]		HRESULT matrixFromQuaternion([out] D3dMatrix *matrix, [in]  D3DRMQUATERNION_CDESC *quat);
		[helpcontext(319018)]		HRESULT quaternionRotation([out]   D3DRMQUATERNION_CDESC *quat,[in]D3DVECTOR_CDESC *axis, [in]float theta);
		[helpcontext(319019)]		HRESULT quaternionMultiply([out]   D3DRMQUATERNION_CDESC *quat,[in]   D3DRMQUATERNION_CDESC *quatA,[in]   D3DRMQUATERNION_CDESC *quatB);
		[helpcontext(319020)]		HRESULT quaternionSlerp([out]   D3DRMQUATERNION_CDESC *quat,[in]   D3DRMQUATERNION_CDESC *quatA,[in]   D3DRMQUATERNION_CDESC *quatB, [in] float alpha);
		[helpcontext(319021)]		HRESULT vectorAdd([out] D3DVECTOR_CDESC *v,[in]D3DVECTOR_CDESC *vA,[in]D3DVECTOR_CDESC *vB);
		[helpcontext(319022)]		HRESULT vectorCrossProduct([out] D3DVECTOR_CDESC *v,[in]D3DVECTOR_CDESC *vA,[in]D3DVECTOR_CDESC *vB);
		[helpcontext(319023)]		HRESULT vectorDotProduct([in]D3DVECTOR_CDESC *vA,[in]D3DVECTOR_CDESC *vB,[out,retval] float *ret);
		[helpcontext(319024)]		HRESULT vectorModulus([in]D3DVECTOR_CDESC *vA,[out,retval] float *ret);
		[helpcontext(319025)]		HRESULT vectorNormalize([in,out] D3DVECTOR_CDESC *v);
		[helpcontext(319026)]		HRESULT vectorRandom([in,out] D3DVECTOR_CDESC *v);
		[helpcontext(319027)]		HRESULT vectorReflect([out] D3DVECTOR_CDESC *vDest,[in]D3DVECTOR_CDESC *vRay,[in]D3DVECTOR_CDESC *vNormal);
		[helpcontext(319028)]		HRESULT vectorRotate([out] D3DVECTOR_CDESC *vDest,[in]D3DVECTOR_CDESC *vA,[in]D3DVECTOR_CDESC *vAxis,[in] float theta);
		[helpcontext(319029)]		HRESULT vectorScale([out] D3DVECTOR_CDESC *vDest,[in]D3DVECTOR_CDESC *vA,[in] float factor);
		[helpcontext(319030)]		HRESULT vectorSubtract([out] D3DVECTOR_CDESC *v,[in]D3DVECTOR_CDESC *vA,[in]D3DVECTOR_CDESC *vB);
		[helpcontext(319031)]		HRESULT vectorCopy([in,out] D3DVECTOR_CDESC *vDest, [in] D3DVECTOR_CDESC *vSrc);
		
		[helpcontext(319032)]		HRESULT rotateXMatrix([in,out] D3DMATRIX_CDESC *mDest,[in] float radians);
		[helpcontext(319033)]		HRESULT rotateYMatrix([in,out] D3DMATRIX_CDESC *mDest,[in] float radians);
		[helpcontext(319034)]		HRESULT rotateZMatrix([in,out] D3DMATRIX_CDESC *mDest,[in] float radians);
		[helpcontext(319035)]		HRESULT viewMatrix([in,out] D3DMATRIX_CDESC *mDest,[in] D3DVECTOR_CDESC *vFrom, [in] D3DVECTOR_CDESC *vTo, [in] D3DVECTOR_CDESC *vUp, [in] float roll);
		[helpcontext(319036)]		HRESULT matrixMultiply([in,out]D3DMATRIX_CDESC *mDest,[in] D3DMATRIX_CDESC *mA,[in] D3DMATRIX_CDESC *mB);
		[helpcontext(319037)]		HRESULT projectionMatrix([in,out]D3DMATRIX_CDESC *mDest,[in] float nearPlane, [in] float farplane, [in] float fov);
		[helpcontext(319038)]		HRESULT copyMatrix([in,out]D3DMATRIX_CDESC *mDest,[in] D3DMATRIX_CDESC * mSrc);
		[helpcontext(319039)]		HRESULT identityMatrix([in,out]D3DMATRIX_CDESC *mDest);
		[helpcontext(319040)]		HRESULT zeroMatrix([in,out]D3DMATRIX_CDESC *mDest);
		
 		[helpcontext(319041)]		HRESULT tickCount([out,retval] long *retv);
		[helpcontext(319042)]		HRESULT systemBpp([out, retval] long *retv);  

		[helpcontext(319043)]		HRESULT directMusicLoaderCreate([out,retval] I_dxj_DirectMusicLoader **ret);
		[helpcontext(319044)]		HRESULT directMusicComposerCreate([out,retval] I_dxj_DirectMusicComposer **ret);
		[helpcontext(319045)]		HRESULT directMusicPerformanceCreate([out,retval] I_dxj_DirectMusicPerformance **ret);

		[helpcontext(319046)]		HRESULT getWindowRect([in] long hwnd, [in,out] RECT_CDESC *r);
		[helpcontext(319047)]		HRESULT createEvent([in] I_dxj_DirectXEvent *event,[out,retval] long *h);
		[helpcontext(319048)]		HRESULT setEvent([in] long eventId);
		[helpcontext(319049)]		HRESULT destroyEvent([in] long eventId);
		[helpcontext(319050)]		HRESULT createD3DVertex([in]float x, [in]float y, [in]float z, [in]float nx, [in]float ny, [in]float nz, [in]float tu, [in]float tv, [in,out] D3dVertex *v);
		[helpcontext(319051)]		HRESULT createD3DLVertex([in]float x, [in]float y, [in]float z,[in] long color, [in] long specular, [in] float tu, [in] float tv, [in,out] D3dLVertex *v);
		[helpcontext(319052)]		HRESULT createD3DTLVertex([in]float sx,[in] float sy,[in] float sz, [in]float rhw, [in]long color, [in]long  specular, [in]float tu, [in]float tv,  [in,out] D3dTLVertex *v);
		[helpcontext(319053)]		HRESULT directDraw4Create([in] BSTR guid,[out,retval] I_dxj_DirectDraw4 **ret);
		
		//needs to be added to master help ids
		[helpcontext(319054)]		HRESULT createNewGuid([out,retval] BSTR *retGuid);
	};



	///////////////////////////////////////////////////////////////////////////
	
	[
		object,
		uuid(BCAA7DA2-F7EF-11d2-93FD-00C04FC2C602),		
		helpstring("IDirectDraw4 Interface"),
		pointer_default(unique),
		local,
		helpcontext(305600)
	]
	interface I_dxj_DirectDraw4 : IUnknown	
	{
		import "oaidl.idl";
		[hidden]		HRESULT InternalSetObject([in] IUnknown *lpdd);
		[hidden]		HRESULT InternalGetObject([out, retval] IUnknown **lpdd);

		
     	[helpcontext(305601)]		HRESULT createClipper([in] long flags, [out, retval] I_dxj_DirectDrawClipper **val);
		[helpcontext(305602)]		HRESULT createPalette([in] ddpCapsFlags flags, [in] SAFEARRAY(APAL) *pe, [out, retval] I_dxj_DirectDrawPalette **val);
		[helpcontext(305603)]		HRESULT createSurface([in] DDSURFACEDESC2_CDESC *dd, [out, retval] I_dxj_DirectDrawSurface4 **retv);
		[helpcontext(305604)]		HRESULT createSurfaceFromFile([in] BSTR file, [in,out] DDSURFACEDESC2_CDESC *dd, [out, retval] I_dxj_DirectDrawSurface4 **retv);
		[helpcontext(305605)]		HRESULT createSurfaceFromResource([in] BSTR file, [in] BSTR resName, [in,out] DDSURFACEDESC2_CDESC *ddsd, [out, retval] I_dxj_DirectDrawSurface4 **retv);					
		[helpcontext(305606)]		HRESULT duplicateSurface([in] I_dxj_DirectDrawSurface4 *ddIn,[out, retval] I_dxj_DirectDrawSurface4 **ddOut);		
		[helpcontext(305607)]		HRESULT flipToGDISurface();		
		[helpcontext(305608)]		HRESULT getAvailableTotalMem([in] DDSCAPS2_CDESC *ddsCaps, [out, retval] long *m);
		[helpcontext(305609)]		HRESULT getCaps([in,out] DDCAPS_CDESC *hwCaps,  [in,out] DDCAPS_CDESC *helCaps);
		[helpcontext(305611)]		HRESULT getDisplayMode( [in,out] DDSURFACEDESC2_CDESC *surface);
		[helpcontext(305612)]		HRESULT getDisplayModesEnum([in] ddedmFlags flags,[in] DDSURFACEDESC2_CDESC *ddsd,[out,retval] I_dxj_DirectDrawEnumModes **retval);
		[helpcontext(305613)]		HRESULT getFourCCCodes( [in,out] SAFEARRAY(long) *ccCodes);
		[helpcontext(305614)]		HRESULT getFreeMem( [in] DDSCAPS2_CDESC *ddsCaps, [out, retval] long *m);
		[helpcontext(305615)]		HRESULT getGDISurface( [out, retval] I_dxj_DirectDrawSurface4 **s);
		[helpcontext(305616)]		HRESULT getMonitorFrequency([out, retval] long *freq);
		[helpcontext(305617)]		HRESULT getNumFourCCCodes([out, retval] long *nCodes);
		[helpcontext(305618)]		HRESULT getScanLine([in,out] long *lines, [out, retval] long *status);		
		[helpcontext(305619)]		HRESULT getSurfaceFromDC([in] long hdc,[out,retval] I_dxj_DirectDrawSurface4 **retv);
		[helpcontext(305621)]		HRESULT getVerticalBlankStatus([out, retval] long *status);
		[helpcontext(305622)]		HRESULT loadPaletteFromBitmap([in] BSTR bName, [out, retval] I_dxj_DirectDrawPalette **retv);
		[helpcontext(305623)]		HRESULT restoreAllSurfaces();		
		[helpcontext(305624)]		HRESULT restoreDisplayMode();
		[helpcontext(305625)]		HRESULT setCooperativeLevel([in] HWnd hdl, [in] ddsclFlags flags);
		[helpcontext(305626)]		HRESULT setDisplayMode([in] long w, [in] long h, [in] long bpp, [in] long ref,[in] ddsdmFlags mode);
		[helpcontext(305627)]		HRESULT testCooperativeLevel([out,retval] long *status);
		[helpcontext(305628)]		HRESULT waitForVerticalBlank([in] ddWaitVBFlags flags, [in] long handle, [out, retval] long *status);


	};


	[ 
		object,
		uuid(BCAA7DA3-F7EF-11d2-93FD-00C04FC2C602),		
		helpstring("I_dxj_DirectDrawSurface4 Interface"),
		pointer_default(unique),
		local,
		helpcontext(305800)
	]
	interface I_dxj_DirectDrawSurface4 : IUnknown	
	{
		import "oaidl.idl";
		[hidden]		HRESULT InternalSetObject([in] IUnknown *lpdds);
		[hidden]		HRESULT InternalGetObject([out, retval] IUnknown **lpdds);				
				
		[helpcontext(305801)]		HRESULT addAttachedSurface( [in] I_dxj_DirectDrawSurface4 *ddS);				
	    [helpcontext(305802)]		HRESULT blt( [in] RECT_CDESC *destRect, [in] I_dxj_DirectDrawSurface4 *ddS, [in] RECT_CDESC *srcRect, [in] ddBltFlags flags, [out, retval] long *status);
		[helpcontext(305803)]		HRESULT bltColorFill( [in] RECT_CDESC *destRect, [in] long fillvalue, [out, retval] long *status );
		[helpcontext(305804)]		HRESULT bltFast( [in] long dx, [in] long dy, [in] I_dxj_DirectDrawSurface4 *dds, [in] RECT_CDESC *srcRect, [in] ddBltFastFlags trans, [out, retval] long *status);		
		[helpcontext(305805)]		HRESULT bltFx( [in] RECT_CDESC *destRect, [in] I_dxj_DirectDrawSurface4 *ddS, [in] RECT_CDESC *srcRect, [in] ddBltFlags flags, [in] DDBLTFX_CDESC *bltfx, [out, retval] long *status );
		[helpcontext(305806)]		HRESULT bltToDC([in] long hdc, [in] RECT_CDESC *srcRect, [in] RECT_CDESC *destRect);	
		[helpcontext(305807)]		HRESULT changeUniquenessValue();		
		[helpcontext(305808)]		HRESULT deleteAttachedSurface( [in] I_dxj_DirectDrawSurface4 *dds) ;
		[helpcontext(305809)]		HRESULT drawBox([in] long x1, [in] long y1, [in] long x2, [in] long y2);
		[helpcontext(305810)]		HRESULT drawCircle([in] long x1, [in] long y1, [in] long r);
		[helpcontext(305811)]		HRESULT drawEllipse([in] long x1, [in] long y1, [in] long x2, [in] long y2);		
		[helpcontext(305812)]		HRESULT drawLine([in] long x1, [in] long y1, [in] long x2, [in] long y2);		
		[helpcontext(305813)]		HRESULT drawRoundedBox([in] long x1, [in] long y1, [in] long x2, [in] long y2,[in] long rw, [in] long rh);		
		[helpcontext(305814)]		HRESULT drawText([in] long x, [in] long y,  [in] BSTR text, [in] VARIANT_BOOL b);
		[helpcontext(305815)]		HRESULT flip( [in] I_dxj_DirectDrawSurface4 *dds, [in] ddFlipFlags flags);		
		[helpcontext(305816)]		HRESULT getAttachedSurface( [in] DDSCaps2 *caps, [out, retval] I_dxj_DirectDrawSurface4 **dds);
		[helpcontext(305818)]		HRESULT getBltStatus([in] ddGbsFlags flags, [out, retval] long *status);
		[helpcontext(305819)]		HRESULT getCaps( [in,out] DDSCAPS2_CDESC  *caps);
		[helpcontext(305820)]		HRESULT getClipper( [out, retval] I_dxj_DirectDrawClipper **val);
		[helpcontext(305821)]		HRESULT getColorKey( [in] long flags, [in,out] DDCOLORKEY_CDESC *val);
		[helpcontext(305822)]		HRESULT getDC( [out, retval] long *hdc);
		[helpcontext(305823)]		HRESULT getDirectDraw( [out, retval] I_dxj_DirectDraw4 **val);			
		[helpcontext(305826)]		HRESULT	getDrawStyle([out,retval] long *drawStyle);		
		[helpcontext(305827)]		HRESULT	getDrawWidth([out,retval] long *drawWidth);		
		[helpcontext(305828)]		HRESULT getFillColor([out,retval] long *color);		
		[helpcontext(305829)]		HRESULT getFillStyle([out,retval] long *fillStyle);		
		[helpcontext(305830)]		HRESULT getFlipStatus( [in] ddGfsFlags flags, [out, retval] long *status);		
		[helpcontext(305831)]		HRESULT getFontTransparency([out,retval] VARIANT_BOOL *b);		
		[helpcontext(305832)]		HRESULT getForeColor([out,retval] long *color);						
		[helpcontext(305833)]		HRESULT getLockedPixel([in] int x, [in] int y, [out,retval] long *col);
		[helpcontext(305835)]		HRESULT getPalette( [out, retval] I_dxj_DirectDrawPalette **val);
		[helpcontext(305836)]		HRESULT getPixelFormat( [in,out] DDPIXELFORMAT_CDESC *pf);		
		[helpcontext(305837)]		HRESULT getSurfaceDesc([in,out] DDSURFACEDESC2_CDESC *surface);		
		[helpcontext(305838)]		HRESULT getUniquenessValue([out,retval] long *retVal);
		[helpcontext(305839)]		HRESULT	isLost([out, retval] long *status);
        [helpcontext(305840)]		HRESULT lock( [in] RECT_CDESC *r, [in] DDSURFACEDESC2_CDESC *desc, [in] ddLockFlags flags, [in] Handle hnd);
		[helpcontext(305841)]		HRESULT releaseDC([in] long hdc);		
		[helpcontext(305842)]		HRESULT	restore();
		[helpcontext(305843)]		HRESULT setClipper( [in] I_dxj_DirectDrawClipper *val) ;
		[helpcontext(305844)]		HRESULT setColorKey( [in] ddCKeyFlags flags, [in] DDCOLORKEY_CDESC *val);
		[helpcontext(305845)]		HRESULT	setDrawStyle([in] long drawStyle);
		[helpcontext(305846)]		HRESULT	setDrawWidth([in] long drawWidth);
		[helpcontext(305847)]		HRESULT setFillColor([in] long color);
		[helpcontext(305848)]		HRESULT setFillStyle([in] long fillStyle);
		[helpcontext(305849)]		HRESULT setFont([in] IFont *font);		
		[helpcontext(305850)]		HRESULT setFontTransparency([in] VARIANT_BOOL b);
		[helpcontext(305851)]		HRESULT setForeColor([in] long color);
		[helpcontext(305852)]		HRESULT setLockedPixel([in] int x, [in] int y, [in] long col);				
		[helpcontext(305854)]		HRESULT setPalette([in] I_dxj_DirectDrawPalette *ddp);		
       	[helpcontext(305855)]		HRESULT unlock( [in] RECT_CDESC *r);			
		[helpcontext(305860)]		HRESULT getLockedArray([in] SAFEARRAY(byte) *array);
	
		[helpcontext(305868)]		HRESULT setFontBackColor([in] long color);
		[helpcontext(305869)]		HRESULT getFontBackColor([out,retval] long *color);


	};



	[
		object,
		uuid(BCAA7DA4-F7EF-11d2-93FD-00C04FC2C602),		
		helpstring("I_dxj_DirectDrawIdentifier Interface"),
		pointer_default(unique),
		local,
		helpcontext(319600)
	]
	interface  I_dxj_DirectDrawIdentifier : IUnknown
	{
		import "oaidl.idl";
		[helpcontext(319601)]		HRESULT getDriver([out,retval] BSTR *ret);
		[helpcontext(319602)]		HRESULT getDescription([out,retval] BSTR *ret);
		[helpcontext(319603)]		HRESULT getDriverVersion([out,retval] long *ret);
		[helpcontext(319604)]		HRESULT getDriverSubVersion([out,retval] long *ret);
		[helpcontext(319605)]		HRESULT getVendorId([out,retval] long *ret);
		[helpcontext(319606)]		HRESULT getDeviceId([out,retval] long *ret);
		[helpcontext(319607)]		HRESULT getSubSysId([out,retval] long *ret);
		[helpcontext(319608)]		HRESULT getRevision([out,retval] long *ret);
		[helpcontext(319609)]		HRESULT getDeviceIndentifier([out,retval] BSTR *ret);
		[helpcontext(319610)]		HRESULT getWHQLLevel([out,retval] long *ret);

	};





		
	///////////////////////////////////////////////////////////////////////////
	importlib("stdole2.tlb");


	
	[
		uuid(E1211353-8E94-11d1-8808-00C04FC2C602),
 		helpstring("DirectX7"),
		helpcontext(319800)
	]
	  coclass _dxj_DirectX7 { [default] interface I_dxj_DirectX7; };
	




};

