]> gitweb.factorcode.org Git - factor.git/blob - basis/windows/com/com.factor
windows: Add all shell32 function stubs. Add more com.
[factor.git] / basis / windows / com / com.factor
1 USING: alien alien.c-types alien.destructors windows.com.syntax
2 windows.ole32 windows.types continuations kernel alien.syntax
3 libc destructors accessors alien.data classes.struct windows.kernel32 ;
4 IN: windows.com
5
6 LIBRARY: ole32
7
8 COM-INTERFACE: IUnknown f {00000000-0000-0000-C000-000000000046}
9     HRESULT QueryInterface ( REFGUID iid, void** ppvObject )
10     ULONG AddRef ( )
11     ULONG Release ( ) ;
12
13 C-TYPE: IAdviseSink
14 C-TYPE: IEnumFORMATETC
15 C-TYPE: IEnumSTATDATA
16
17 COM-INTERFACE: IDataObject IUnknown {0000010E-0000-0000-C000-000000000046}
18     HRESULT GetData ( FORMATETC* pFormatetc, STGMEDIUM* pmedium )
19     HRESULT GetDataHere ( FORMATETC* pFormatetc, STGMEDIUM* pmedium )
20     HRESULT QueryGetData ( FORMATETC* pFormatetc )
21     HRESULT GetCanonicalFormatEtc ( FORMATETC* pFormatetcIn, FORMATETC* pFormatetcOut )
22     HRESULT SetData ( FORMATETC* pFormatetc, STGMEDIUM* pmedium, BOOL fRelease )
23     HRESULT EnumFormatEtc ( DWORD dwDirection, IEnumFORMATETC** ppenumFormatetc )
24     HRESULT DAdvise ( FORMATETC* pFormatetc, DWORD advf, IAdviseSink* pAdvSink, DWORD* pdwConnection )
25     HRESULT DUnadvise ( DWORD pdwConnection )
26     HRESULT EnumDAdvise ( IEnumSTATDATA** ppenumAdvise ) ;
27
28 COM-INTERFACE: IDropSource IUnknown {00000121-0000-0000-C000-000000000046}
29     HRESULT GiveFeedback ( DWORD dwEffect )
30     HRESULT QueryContinueDrag ( BOOL  fEscapePressed, DWORD grfKeyState ) ;
31
32 COM-INTERFACE: IDropTarget IUnknown {00000122-0000-0000-C000-000000000046}
33     HRESULT DragEnter ( IDataObject* pDataObject, DWORD grfKeyState, POINTL pt, DWORD* pdwEffect )
34     HRESULT DragOver ( DWORD grfKeyState, POINTL pt, DWORD* pdwEffect )
35     HRESULT DragLeave ( )
36     HRESULT Drop ( IDataObject* pDataObject, DWORD grfKeyState, POINTL pt, DWORD* pdwEffect ) ;
37
38 TYPEDEF: IDataObject* LPDATAOBJECT
39 TYPEDEF: IDropSource* LPDROPSOURCE
40
41 FUNCTION: HRESULT DoDragDrop (
42     LPDATAOBJECT pDataObj,
43     LPDROPSOURCE pDropSource,
44     DWORD        dwOKEffects,
45     LPDWORD     pdwEffect
46 )
47
48 COM-INTERFACE: ISequentialStream IUnknown {0C733A30-2A1C-11CE-ADE5-00AA0044773D}
49     HRESULT Read ( void* pv, ULONG cb, ULONG* pcbRead )
50     HRESULT Write ( void* pv, ULONG cb, ULONG* pcbWritten ) ;
51
52 STRUCT: STATSTG
53     { pwcsName LPOLESTR }
54     { type DWORD }
55     { cbSize ULARGE_INTEGER }
56     { mtime FILETIME }
57     { ctime FILETIME }
58     { atime FILETIME }
59     { grfMode DWORD }
60     { grfLocksSupported DWORD }
61     { clsid CLSID }
62     { grfStateBits DWORD }
63     { reserved DWORD } ;
64
65 CONSTANT: STGM_READ 0
66 CONSTANT: STGM_WRITE 1
67 CONSTANT: STGM_READWRITE 2
68
69 CONSTANT: STG_E_INVALIDFUNCTION 0x80030001
70
71 CONSTANT: STGTY_STORAGE   1
72 CONSTANT: STGTY_STREAM    2
73 CONSTANT: STGTY_LOCKBYTES 3
74 CONSTANT: STGTY_PROPERTY  4
75
76 CONSTANT: STREAM_SEEK_SET 0
77 CONSTANT: STREAM_SEEK_CUR 1
78 CONSTANT: STREAM_SEEK_END 2
79
80 CONSTANT: LOCK_WRITE     1
81 CONSTANT: LOCK_EXCLUSIVE 2
82 CONSTANT: LOCK_ONLYONCE  4
83
84 CONSTANT: GUID_NULL GUID: {00000000-0000-0000-0000-000000000000}
85
86 COM-INTERFACE: IStream ISequentialStream {0000000C-0000-0000-C000-000000000046}
87     HRESULT Seek ( LARGE_INTEGER dlibMove, DWORD dwOrigin, ULARGE_INTEGER* plibNewPosition )
88     HRESULT SetSize ( ULARGE_INTEGER* libNewSize )
89     HRESULT CopyTo ( IStream* pstm, ULARGE_INTEGER cb, ULARGE_INTEGER* pcbRead, ULARGE_INTEGER* pcbWritten )
90     HRESULT Commit ( DWORD grfCommitFlags )
91     HRESULT Revert ( )
92     HRESULT LockRegion ( ULARGE_INTEGER libOffset, ULARGE_INTEGER cb, DWORD dwLockType )
93     HRESULT UnlockRegion ( ULARGE_INTEGER libOffset, ULARGE_INTEGER cb, DWORD dwLockType )
94     HRESULT Stat ( STATSTG* pstatstg, DWORD grfStatFlag )
95     HRESULT Clone ( IStream** ppstm ) ;
96
97 FUNCTION: HRESULT RegisterDragDrop ( HWND hWnd, IDropTarget* pDropTarget )
98 FUNCTION: HRESULT RevokeDragDrop ( HWND hWnd )
99 FUNCTION: void ReleaseStgMedium ( LPSTGMEDIUM pmedium )
100
101 : com-query-interface ( interface iid -- interface' )
102     { void* }
103     [ IUnknown::QueryInterface check-ole32-error ]
104     with-out-parameters ;
105
106 : com-add-ref ( interface -- interface )
107      [ IUnknown::AddRef drop ] keep ; inline
108
109 ERROR: null-com-release ;
110 : com-release ( interface -- )
111     [ IUnknown::Release drop ] [ null-com-release ] if* ; inline
112
113 : with-com-interface ( interface quot -- )
114     over [ com-release ] curry [ ] cleanup ; inline
115
116 DESTRUCTOR: com-release