#ifndef __STREAM_H #define __STREAM_H #ifdef __cplusplus extern "C" { #endif #include <os/com.h> enum { ioRaw, ioUnicode, ioAnsi }; enum { seekSet, seekCur, seekEnd }; typedef struct folderitem_t folderitem_t; struct folderitem_t { dword size; union { dword find_handle; IUnknown *item_handle; } u; const wchar_t* spec; wchar_t* name; size_t name_max; dword attributes; size_t length; }; #define ATTR_READ_ONLY 0x01 #define ATTR_HIDDEN 0x02 #define ATTR_SYSTEM 0x04 #define ATTR_VOLUME_ID 0x08 #define ATTR_DIRECTORY 0x10 #define ATTR_ARCHIVE 0x20 #define ATTR_DEVICE 0x1000 #define ATTR_LINK 0x2000 #undef INTERFACE #define INTERFACE IStream DECLARE_INTERFACE(IStream) { STDMETHOD(QueryInterface)(THIS_ REFIID iid, void ** ppvObject) PURE; STDMETHOD_(ULONG, AddRef)(THIS) PURE; STDMETHOD_(ULONG, Release)(THIS) PURE; STDMETHOD_(size_t, Read)(THIS_ void* buffer, size_t length) PURE; STDMETHOD_(size_t, Write)(THIS_ const void* buffer, size_t length) PURE; STDMETHOD(SetIoMode)(THIS_ dword mode) PURE; STDMETHOD(IsReady)(THIS) PURE; STDMETHOD(Stat)(THIS_ folderitem_t* buf) PURE; STDMETHOD(Seek)(THIS_ long offset, int origin) PURE; }; // {816B7D54-910A-4187-AEF6-F30EFEFE4AEE} DEFINE_GUID(IID_IStream, 0x816b7d54, 0x910a, 0x4187, 0xae, 0xf6, 0xf3, 0xe, 0xfe, 0xfe, 0x4a, 0xee); size_t IStream_Read(IStream* ptr, void* buf, size_t len); size_t IStream_Write(IStream* ptr, const void* buf, size_t len); HRESULT IStream_SetIoMode(IStream* ptr, dword mode); HRESULT IStream_IsReady(IStream* ptr); HRESULT IStream_Stat(IStream* ptr, folderitem_t* buf); HRESULT IStream_Seek(IStream* ptr, long offset, int origin); #ifdef __cplusplus } #endif #endif