packages feed

com-1.1: include/autoPrim.h

/*
 To free ourselves from a couple of needless compiler/
 header file dependencies, we provide a hand-written
 set of definitions for Automation related types
 and interfaces.
*/
#ifndef __AUTOPRIM_H__
#define __AUTOPRIM_H__

#include "comPrim.h"
#include "PointerSrc.h"

#if (defined(__CYGWIN32__) || defined(__MINGW32__)) && __W32API_MAJOR_VERSION == 1
typedef LONG DISPID;
#define DISPATCH_METHOD         0x1
#define DISPATCH_PROPERTYGET    0x2
#define DISPATCH_PROPERTYPUT    0x4
#define DISPATCH_PROPERTYPUTREF 0x8

#define	DISPID_VALUE	         (0)
#define	DISPID_UNKNOWN	        (-1)
#define	DISPID_PROPERTYPUT	(-3)
#define	DISPID_NEWENUM	        (-4)
#define	DISPID_EVALUATE	        (-5)
#define	DISPID_CONSTRUCTOR	(-6)
#define	DISPID_DESTRUCTOR	(-7)

typedef LONG SCODE;

enum VARENUM
    {	VT_EMPTY	= 0,
	VT_NULL	= 1,
	VT_I2	= 2,
	VT_I4	= 3,
	VT_R4	= 4,
	VT_R8	= 5,
	VT_CY	= 6,
	VT_DATE	= 7,
	VT_BSTR	= 8,
	VT_DISPATCH	= 9,
	VT_ERROR	= 10,
	VT_BOOL	= 11,
	VT_VARIANT	= 12,
	VT_UNKNOWN	= 13,
	VT_DECIMAL	= 14,
	VT_I1	= 16,
	VT_UI1	= 17,
	VT_UI2	= 18,
	VT_UI4	= 19,
	VT_I8	= 20,
	VT_UI8	= 21,
	VT_INT	= 22,
	VT_UINT	= 23,
	VT_VOID	= 24,
	VT_HRESULT	= 25,
	VT_PTR	= 26,
	VT_SAFEARRAY	= 27,
	VT_CARRAY	= 28,
	VT_USERDEFINED	= 29,
	VT_LPSTR	= 30,
	VT_LPWSTR	= 31,
	VT_FILETIME	= 64,
	VT_BLOB	= 65,
	VT_STREAM	= 66,
	VT_STORAGE	= 67,
	VT_STREAMED_OBJECT	= 68,
	VT_STORED_OBJECT	= 69,
	VT_BLOB_OBJECT	= 70,
	VT_CF	= 71,
	VT_CLSID	= 72,
	VT_BSTR_BLOB	= 0xfff,
	VT_VECTOR	= 0x1000,
	VT_ARRAY	= 0x2000,
	VT_BYREF	= 0x4000,
	VT_RESERVED	= 0x8000,
	VT_ILLEGAL	= 0xffff,
	VT_ILLEGALMASKED	= 0xfff,
	VT_TYPEMASK	= 0xfff
    };

typedef struct ITypeInfo ITypeInfo;

typedef struct tagEXCEPINFO 
{
  unsigned short wCode;
  unsigned short wReserved;
  BSTR bstrSource;
  BSTR bstrDescription;
  BSTR bstrHelpFile;
  unsigned long dwHelpContext;
  void* pvReserved;
  HRESULT (STDCALL *pfnDeferredFillIn) (struct tagEXCEPINFO*);
  SCODE scode;
} EXCEPINFO;

typedef unsigned short VARTYPE;
typedef short VARIANT_BOOL;
typedef VARIANT_BOOL _VARIANT_BOOL;
typedef double DATE;

#if 0
typedef unsigned long long ULONGLONG;
#endif

typedef struct tagCY {
    unsigned long Lo;
    long      Hi;
} CY;

typedef struct IDispatch IDispatch;

typedef struct tagDEC {
    USHORT wReserved;
    BYTE  scale;
    BYTE  sign;
    ULONG Hi32;
    unsigned long long Lo64;
} DECIMAL;

typedef struct tagSAFEARRAY SAFEARRAY;

typedef struct tagVARIANT VARIANT;

struct tagVARIANT 
{
  union {
   struct __tagVARIANT {
    VARTYPE vt;
    WORD wReserved1;
    WORD wReserved2;
    WORD wReserved3;
    union {
      LONG           lVal;
      BYTE           bVal;
      SHORT          iVal;
      FLOAT          fltVal;
      double         dblVal;
      VARIANT_BOOL   boolVal;
      _VARIANT_BOOL  bool;
      SCODE          scode;
      CY             cyVal;
      DATE           date;
      BSTR           bstrVal;
      IUnknown*      punkVal;
      IDispatch*     pdispVal;
      SAFEARRAY*     parray;
      BYTE*          pbVal;
      SHORT*         piVal;
      LONG*          plVal;
      FLOAT*         pfltVal;
      double*        pdblVal;
      VARIANT_BOOL*  pboolVal;
      _VARIANT_BOOL* pbool;
      SCODE*      pscode;
      CY*         pcyVal;
      DATE*       pdate;
      BSTR*       pbstrVal;
      IUnknown**  ppunkVal;
      IDispatch** ppdispVal;
      SAFEARRAY** pparray;
      VARIANT*    pvarVal;
      PVOID       byref;
      CHAR        cVal;
      USHORT      uiVal;
      ULONG       ulVal;
      INT         intVal;
      UINT        uintVal;
      DECIMAL*    pdecVal;
      CHAR*       pcVal;
      USHORT*     puiVal;
      ULONG*      pulVal;
      INT*        pintVal;
      UINT*       puintVal;
      } n3;
   } n2;
   DECIMAL decVal;
  } n1;
};

typedef VARIANT VARIANTARG;


typedef struct tagDISPPARAMS 
{
  VARIANTARG*  rgvarg;
  DISPID*      rgdispidNamedArgs;
  unsigned int cArgs;
  unsigned int cNamedArgs;
} DISPPARAMS;

typedef struct IDispatchVtbl
    {
        HRESULT ( STDCALL  *QueryInterface )
	   		( IDispatch  * This
			, REFIID riid
			, void  **ppvObject
			);
        
        ULONG ( STDCALL  *AddRef )( IDispatch  * This );
        
        ULONG ( STDCALL  *Release )( IDispatch  * This );
        
        HRESULT ( STDCALL  *GetTypeInfoCount )
			( IDispatch  * This
			, UINT  *pctinfo
			);
        
        HRESULT ( STDCALL *GetTypeInfo )
	                ( IDispatch  *This
			, UINT iTInfo
			, LCID lcid
			,ITypeInfo  **ppTInfo
			);
        
        HRESULT ( STDCALL  *GetIDsOfNames )
	                ( IDispatch  *This
			, REFIID riid
			, LPOLESTR  *rgszNames
			, UINT cNames
			, LCID lcid
			, DISPID  *rgDispId
			);
        
        HRESULT ( STDCALL  *Invoke )
	                ( IDispatch  *This
			, DISPID dispIdMember
			, REFIID riid
			, LCID lcid
			, WORD wFlags
			, DISPPARAMS  *pDispParams
			, VARIANT  *pVarResult
			, EXCEPINFO  *pExcepInfo
			,UINT  *puArgErr
			);

    } IDispatchVtbl;

struct IDispatch { struct IDispatchVtbl *lpVtbl; };
#endif


#if !defined(IDispatch_GetIDsOfNames)
#define IDispatch_GetIDsOfNames(This,riid,rgszNames,cNames,lcid,rgDispId)	\
    (This)->lpVtbl -> GetIDsOfNames(This,riid,rgszNames,cNames,lcid,rgDispId)
#endif

#if !defined(IDispatch_Invoke)
#define IDispatch_Invoke(This,dispIdMember,riid,lcid,wFlags,pDispParams,pVarResult,pExcepInfo,puArgErr)	\
    (This)->lpVtbl -> Invoke(This,dispIdMember,riid,lcid,wFlags,pDispParams,pVarResult,pExcepInfo,puArgErr)
#endif

#if __W32API_MAJOR_VERSION == 1
extern void STDCALL VariantInit(VARIANTARG* pvarg);
extern HRESULT STDCALL VariantClear(VARIANTARG* pvarg);
extern HRESULT STDCALL VariantCopy(VARIANTARG* pvArgDest, VARIANTARG* pvArgSrc);
extern HRESULT STDCALL VariantChangeType( VARIANTARG* pvargDest
				, VARIANTARG* pvarSrc
				, unsigned short wFlags
				, VARTYPE vt
				);
#endif

extern int dispErrorUNKNOWNNAME(HRESULT hr);
extern int dispErrorEXCEPTION(HRESULT hr);
extern HRESULT readVarVariant( VARIANT* v, VARIANT* x );
extern int readVariantTag( VARIANT* v );
extern void writeVarVariant( VARIANT* x, VARIANT* v);
extern HRESULT readVarCurrency( VARIANT* v, int* hi, int* lo );
extern void writeVarCurrency( int hi, unsigned int lo, VARIANT* v );
extern HRESULT readVarWord64( VARIANT* v, unsigned int* hi, unsigned int* lo );
extern void writeVarWord64( unsigned int hi, unsigned int lo, VARIANT* v );
extern HRESULT readVarNull( VARIANT* v );
extern void writeVarNull( VARIANT* v );
extern void writeVarEmpty( VARIANT* v );
extern void writeVarOptional( VARIANT* v );
extern void writeVarSAFEARRAY ( VARIANT* v, SAFEARRAY* sa, VARTYPE vt);
extern HRESULT readVarSAFEARRAY  ( VARIANT* v, SAFEARRAY** sa, VARTYPE vt);

#define READWRITEPROTO(htype,ctype) \
extern void writeVar##htype( ctype x, VARIANT* v); \
extern HRESULT readVar##htype( VARIANT* v, ctype* p)

#define READWRITETEMPPROTO(htype,ctype) \
extern void writeVar##htype( ctype x, VARIANT* v); \
extern HRESULT readVar##htype( VARIANT* v, ctype* p, VARIANT** w)

READWRITEPROTO(Short,int);
READWRITEPROTO(Int,int);
READWRITEPROTO(Word,unsigned int);
READWRITEPROTO(Float,float);
READWRITEPROTO(Double, double);
READWRITEPROTO(Date, double);
READWRITETEMPPROTO(String, BSTR);
READWRITETEMPPROTO(Dispatch, IDispatch*);
READWRITEPROTO(Bool, BOOL);
READWRITETEMPPROTO(Unknown, IUnknown*);
READWRITEPROTO(Byte, unsigned char);
READWRITEPROTO(Error, int);

extern void freeVariants( int count, VARIANT* p );
extern HRESULT 
dispatchGetMemberID( IDispatch* obj, BSTR name, LCID lcid, DISPID* dispid );
extern char* getExcepInfoMessage( EXCEPINFO* info );
extern void freeExcepInfo( EXCEPINFO* info );
extern HRESULT 
dispatchInvoke( IDispatch* obj, DISPID dispid, LCID lcid,
                BOOL isfunction, unsigned flags,
                int cargs, int cargsout,
                VARIANT* args, VARIANT* argsout,
                EXCEPINFO** info );

extern
HRESULT
STDCALL
SafeArrayDestroy
 	( /*[in]*/SAFEARRAY* psa 
	);

extern HRESULT primCopyVARIANT  ( VARIANT* p1, VARIANT* p2 );
extern HRESULT primVARIANTClear ( VARIANT* p1 );

extern HRESULT primClockToDate (/*[in]*/int ct, /*[out]*/double* pT);

#endif /* __AUTOPRIM_H__ */