/**
 * This file has no copyright assigned and is placed in the Public Domain.
 * This file is part of the mingw-w64 runtime package.
 * No warranty is given; refer to the file DISCLAIMER.PD within this package.
 */

import "wtypes.idl";

cpp_quote("#include <pshpack1.h>")
cpp_quote("  typedef struct _SHITEMID {")
cpp_quote("    USHORT cb;")
cpp_quote("    BYTE abID[1 ];")
cpp_quote("  } SHITEMID;")
cpp_quote("")
cpp_quote("#include <poppack.h>")
cpp_quote("#if (defined(_X86_) && !defined(__x86_64))")
cpp_quote("#undef __unaligned")
cpp_quote("#define __unaligned")
cpp_quote("#endif")
cpp_quote("  typedef SHITEMID __unaligned *LPSHITEMID;")
cpp_quote("")
cpp_quote("  typedef const SHITEMID __unaligned *LPCSHITEMID;")
cpp_quote("")
cpp_quote("#include <pshpack1.h>")
cpp_quote("  typedef struct _ITEMIDLIST {")
cpp_quote("    SHITEMID mkid;")
cpp_quote("  } ITEMIDLIST;")
cpp_quote("")
cpp_quote("  typedef ITEMIDLIST ITEMIDLIST_RELATIVE;")
cpp_quote("  typedef ITEMIDLIST ITEMID_CHILD;")
cpp_quote("  typedef ITEMIDLIST ITEMIDLIST_ABSOLUTE;")
cpp_quote("#include <poppack.h>")
cpp_quote("")
cpp_quote("  typedef BYTE_BLOB *wirePIDL;")
cpp_quote("")
cpp_quote("  typedef ITEMIDLIST __unaligned *LPITEMIDLIST;")
cpp_quote("  typedef const ITEMIDLIST __unaligned *LPCITEMIDLIST;")
cpp_quote("")
cpp_quote("  typedef ITEMIDLIST_ABSOLUTE *PIDLIST_ABSOLUTE;")
cpp_quote("  typedef const ITEMIDLIST_ABSOLUTE *PCIDLIST_ABSOLUTE;")
cpp_quote("  typedef const ITEMIDLIST_ABSOLUTE __unaligned *PCUIDLIST_ABSOLUTE;")
cpp_quote("  typedef ITEMIDLIST_RELATIVE *PIDLIST_RELATIVE;")
cpp_quote("  typedef const ITEMIDLIST_RELATIVE *PCIDLIST_RELATIVE;")
cpp_quote("  typedef ITEMIDLIST_RELATIVE __unaligned *PUIDLIST_RELATIVE;")
cpp_quote("  typedef const ITEMIDLIST_RELATIVE __unaligned *PCUIDLIST_RELATIVE;")
cpp_quote("  typedef ITEMID_CHILD *PITEMID_CHILD;")
cpp_quote("  typedef const ITEMID_CHILD *PCITEMID_CHILD;")
cpp_quote("  typedef ITEMID_CHILD __unaligned *PUITEMID_CHILD;")
cpp_quote("  typedef const ITEMID_CHILD __unaligned *PCUITEMID_CHILD;")
cpp_quote("")
cpp_quote("  typedef const PCUITEMID_CHILD *PCUITEMID_CHILD_ARRAY;")
cpp_quote("  typedef const PCUIDLIST_RELATIVE *PCUIDLIST_RELATIVE_ARRAY;")
cpp_quote("  typedef const PCIDLIST_ABSOLUTE *PCIDLIST_ABSOLUTE_ARRAY;")
cpp_quote("  typedef const PCUIDLIST_ABSOLUTE *PCUIDLIST_ABSOLUTE_ARRAY;")
cpp_quote("")
cpp_quote("#ifdef WINBASE_DEFINED_MIDL")
cpp_quote("  typedef struct _WIN32_FIND_DATAA {")
cpp_quote("    DWORD bData[80 ];")
cpp_quote("  } WIN32_FIND_DATAA;")
cpp_quote("")
cpp_quote("  typedef struct _WIN32_FIND_DATAW {")
cpp_quote("    DWORD bData[148 ];")
cpp_quote("  } WIN32_FIND_DATAW;")
cpp_quote("#endif")
cpp_quote("")
cpp_quote("  typedef enum tagSTRRET_TYPE {")
cpp_quote("    STRRET_WSTR = 0,STRRET_OFFSET = 0x1,STRRET_CSTR = 0x2")
cpp_quote("  } STRRET_TYPE;")
cpp_quote("")
cpp_quote("#include <pshpack8.h>")
cpp_quote("  typedef struct _STRRET {")
cpp_quote("    UINT uType;")
cpp_quote("    __C89_NAMELESS union {")
cpp_quote("      LPWSTR pOleStr;")
cpp_quote("      UINT uOffset;")
cpp_quote("      char cStr[260 ];")
cpp_quote("    } DUMMYUNIONNAME;")
cpp_quote("  } STRRET;")
cpp_quote("")
cpp_quote("#include <poppack.h>")
cpp_quote("  typedef STRRET *LPSTRRET;")
cpp_quote("")
cpp_quote("#include <pshpack1.h>")
cpp_quote("  typedef struct _SHELLDETAILS {")
cpp_quote("    int fmt;")
cpp_quote("    int cxChar;")
cpp_quote("    STRRET str;")
cpp_quote("  } SHELLDETAILS;")
cpp_quote("")
cpp_quote("  typedef struct _SHELLDETAILS *LPSHELLDETAILS;")
cpp_quote("")
cpp_quote("#include <poppack.h>")
cpp_quote("")
cpp_quote("  typedef struct _COMDLG_FILTERSPEC {")
cpp_quote("    LPCWSTR pszName;")
cpp_quote("    LPCWSTR pszSpec;")
cpp_quote("  } COMDLG_FILTERSPEC;")

typedef GUID KNOWNFOLDERID;

cpp_quote("#if 0")
    typedef KNOWNFOLDERID *REFKNOWNFOLDERID;
cpp_quote("#elif defined(__cplusplus)")
cpp_quote("#define REFKNOWNFOLDERID const KNOWNFOLDERID&")
cpp_quote("#else")
cpp_quote("#define REFKNOWNFOLDERID const KNOWNFOLDERID *")
cpp_quote("#endif")

typedef GUID FOLDERTYPEID;

cpp_quote("#if 0")
    typedef FOLDERTYPEID *REFFOLDERTYPEID;
cpp_quote("#elif defined(__cplusplus)")
cpp_quote("#define REFFOLDERTYPEID const FOLDERTYPEID&")
cpp_quote("#else")
cpp_quote("#define REFFOLDERTYPEID const FOLDERTYPEID*")
cpp_quote("#endif")

typedef [v1_enum] enum tagSHCOLSTATE {
    SHCOLSTATE_TYPE_STR = 0x1,
    SHCOLSTATE_TYPE_INT = 0x2,
    SHCOLSTATE_TYPE_DATE = 0x3,
    SHCOLSTATE_TYPEMASK = 0xf,
    SHCOLSTATE_ONBYDEFAULT = 0x10,
    SHCOLSTATE_SLOW = 0x20,
    SHCOLSTATE_EXTENDED = 0x40,
    SHCOLSTATE_SECONDARYUI = 0x80,
    SHCOLSTATE_HIDDEN = 0x100,
    SHCOLSTATE_PREFER_VARCMP = 0x200
} SHCOLSTATE;

typedef DWORD SHCOLSTATEF;

typedef PROPERTYKEY SHCOLUMNID;
typedef const SHCOLUMNID *LPCSHCOLUMNID;

cpp_quote("  extern RPC_IF_HANDLE __MIDL_itf_shtypes_0000_v0_0_c_ifspec;")
cpp_quote("  extern RPC_IF_HANDLE __MIDL_itf_shtypes_0000_v0_0_s_ifspec;")
