/*
 * Copyright (C) 2012 Alistair Leslie-Hughes
 *
 * This library is free software; you can redistribute it and/or
 * modify it under the terms of the GNU Lesser General Public
 * License as published by the Free Software Foundation; either
 * version 2.1 of the License, or (at your option) any later version.
 *
 * This library is distributed in the hope that it will be useful,
 * but WITHOUT ANY WARRANTY; without even the implied warranty of
 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
 * Lesser General Public License for more details.
 *
 * You should have received a copy of the GNU Lesser General Public
 * License along with this library; if not, write to the Free Software
 * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA
 */

#pragma makedep header

import "unknwn.idl";
import "objidl.idl";
import "oaidl.idl";

cpp_quote("#ifdef WINE_NO_UNICODE_MACROS")
cpp_quote("#undef CopyFile")
cpp_quote("#undef DeleteFile")
cpp_quote("#undef MoveFile")
cpp_quote("#endif")
/* this is not defined in public headers */
cpp_quote("#define CTL_E_ENDOFFILE STD_CTL_SCODE(62)")
cpp_quote("#define CTL_E_KEY_ALREADY_EXISTS STD_CTL_SCODE(457)")
cpp_quote("#define CTL_E_ELEMENT_NOT_FOUND STD_CTL_SCODE(32811)")

[
  uuid(420B2830-E718-11CF-893D-00A0C9054228),
  version(1.0)
]
library Scripting
{
    importlib("stdole2.tlb");

    interface IFolder;

    typedef enum CompareMethod
    {
        BinaryCompare,
        TextCompare,
        DatabaseCompare
    } CompareMethod;

    typedef enum IOMode
    {
        ForReading   = 1,
        ForWriting   = 2,
        ForAppending = 8
    } IOMode;

    typedef enum Tristate
    {
        TristateTrue       = -1,
        TristateFalse      =  0,
        TristateUseDefault = -2,
        TristateMixed      = -2
    } Tristate;

    typedef enum FileAttribute
    {
        Normal = 0,
        ReadOnly = 1,
        Hidden = 2,
        System = 4,
        Volume = 8,
        Directory = 16,
        Archive = 32,
        Alias = 1024,
        Compressed = 2048
    } FileAttribute;

    typedef enum SpecialFolderConst
    {
        WindowsFolder,
        SystemFolder,
        TemporaryFolder
    } SpecialFolderConst;

    typedef enum DriveTypeConst
    {
        UnknownType,
        Removable,
        Fixed,
        Remote,
        CDRom,
        RamDisk
    } DriveTypeConst;

    typedef enum StandardStreamTypes
    {
        StdIn,
        StdOut,
        StdErr
    } StandardStreamTypes;

    [
      odl,
      uuid(42C642C1-97E1-11CF-978F-00A02463E06F),
      hidden,
      dual,
      oleautomation
    ]
    interface IDictionary : IDispatch
    {
        [id(DISPID_VALUE), propputref]
        HRESULT Item([in] VARIANT* Key, [in] VARIANT* pRetItem);

        [id(DISPID_VALUE), propput]
        HRESULT Item([in] VARIANT* Key, [in] VARIANT* pRetItem);

        [id(DISPID_VALUE), propget]
        HRESULT Item([in] VARIANT* Key, [out, retval] VARIANT* pRetItem);

        [id(0x00000001)]
        HRESULT Add([in] VARIANT* Key, [in] VARIANT* Item);

        [id(0x00000002), propget]
        HRESULT Count([out, retval] long* pCount);

        [id(0x00000003)]
        HRESULT Exists([in] VARIANT* Key, [out, retval] VARIANT_BOOL* pExists);

        [id(0x00000004)]
        HRESULT Items([out, retval] VARIANT* pItemsArray);

        [id(0x00000005), propput]
        HRESULT Key([in] VARIANT* Key, [in] VARIANT* rhs);

        [id(0x00000006)]
        HRESULT Keys([out, retval] VARIANT* pKeysArray);

        [id(0x00000007)]
        HRESULT Remove([in] VARIANT* Key);

        [id(0x00000008)]
        HRESULT RemoveAll();

        [id(0x00000009), propput]
        HRESULT CompareMode([in] CompareMethod pcomp);

        [id(0x00000009), propget]
        HRESULT CompareMode([out, retval] CompareMethod* pcomp);

        [id(DISPID_NEWENUM), restricted]
        HRESULT _NewEnum([out, retval] IUnknown** ppunk);

        [id(0x0000000a), propget, hidden]
        HRESULT HashVal([in] VARIANT* Key, [out, retval] VARIANT* HashVal);
    }

    [
      odl,
      uuid(C7C3F5A0-88A3-11D0-ABCB-00A0C90FFFC0),
      hidden,
      dual,
      nonextensible,
      oleautomation
    ]
    interface IDrive : IDispatch
    {
        [id(DISPID_VALUE), propget]
        HRESULT Path([out, retval] BSTR* pbstrPath);

        [id(0x00002710), propget]
        HRESULT DriveLetter([out, retval] BSTR* pbstrLetter);

        [id(0x00002711), propget]
        HRESULT ShareName([out, retval] BSTR* pbstrShareName);

        [id(0x00002712), propget]
        HRESULT DriveType([out, retval] DriveTypeConst* pdt);

        [id(0x00002713), propget]
        HRESULT RootFolder([out, retval] IFolder** ppfolder);

        [id(0x00002715), propget]
        HRESULT AvailableSpace([out, retval] VARIANT* pvarAvail);

        [id(0x00002714), propget]
        HRESULT FreeSpace([out, retval] VARIANT* pvarFree);

        [id(0x00002716), propget]
        HRESULT TotalSize([out, retval] VARIANT* pvarTotal);

        [id(0x00002717), propget]
        HRESULT VolumeName([out, retval] BSTR* pbstrName);

        [id(0x00002717), propput]
        HRESULT VolumeName([in] BSTR pbstrName);

        [id(0x00002718), propget]
        HRESULT FileSystem([out, retval] BSTR* pbstrFileSystem);

        [id(0x00002719), propget]
        HRESULT SerialNumber([out, retval] long* pulSerialNumber);

        [id(0x0000271a), propget]
        HRESULT IsReady([out, retval] VARIANT_BOOL* pfReady);
    }

    [
      odl,
      uuid(C7C3F5A1-88A3-11D0-ABCB-00A0C90FFFC0),
      hidden,
      dual,
      nonextensible,
      oleautomation
    ]
    interface IDriveCollection : IDispatch {
        [id(DISPID_VALUE), propget]
        HRESULT Item([in] VARIANT Key, [out, retval] IDrive** ppdrive);

        [id(DISPID_NEWENUM), propget, restricted, hidden]
        HRESULT _NewEnum([out, retval] IUnknown** ppenum);

        [id(0x00000001), propget]
        HRESULT Count([out, retval] long* plCount);
    }

    [
      odl,
      uuid(53BAD8C1-E718-11CF-893D-00A0C9054228),
      hidden,
      dual,
      nonextensible,
      oleautomation
    ]
    interface ITextStream : IDispatch
    {
        [id(0x00002710), propget]
        HRESULT Line([out, retval] long* Line);

        [id(0xfffffdef), propget]
        HRESULT Column([out, retval] long* Column);

        [id(0x00002712), propget]
        HRESULT AtEndOfStream([out, retval] VARIANT_BOOL* EOS);

        [id(0x00002713), propget]
        HRESULT AtEndOfLine([out, retval] VARIANT_BOOL* EOL);

        [id(0x00002714)]
        HRESULT Read([in] long Characters, [out, retval] BSTR* Text);

        [id(0x00002715)]
        HRESULT ReadLine([out, retval] BSTR* Text);

        [id(0x00002716)]
        HRESULT ReadAll([out, retval] BSTR* Text);

        [id(0x00002717)]
        HRESULT Write([in] BSTR Text);

        [id(0x00002718)]
        HRESULT WriteLine([in, defaultvalue("")] BSTR Text);

        [id(0x00002719)]
        HRESULT WriteBlankLines([in] long Lines);

        [id(0x0000271a)]
        HRESULT Skip([in] long Characters);

        [id(0x0000271b)]
        HRESULT SkipLine();

        [id(0x0000271c)]
        HRESULT Close();
    }

    [
      odl,
      uuid(C7C3F5A4-88A3-11D0-ABCB-00A0C90FFFC0),
      hidden,
      dual,
      nonextensible,
      oleautomation
    ]
    interface IFile : IDispatch
    {
        [id(DISPID_VALUE), propget]
        HRESULT Path([out, retval] BSTR* pbstrPath);

        [id(0x000003e8), propget]
        HRESULT Name([out, retval] BSTR* pbstrName);

        [id(0x000003e8), propput]
        HRESULT Name([in] BSTR pbstrName);

        [id(0x000003ea), propget]
        HRESULT ShortPath([out, retval] BSTR* pbstrPath);

        [id(0x000003e9), propget]
        HRESULT ShortName([out, retval] BSTR* pbstrName);

        [id(0x000003ec), propget]
        HRESULT Drive([out, retval] IDrive** ppdrive);

        [id(0x000003ed), propget]
        HRESULT ParentFolder([out, retval] IFolder** ppfolder);

        [id(0x000003eb), propget]
        HRESULT Attributes([out, retval] FileAttribute* pfa);

        [id(0x000003eb), propput]
        HRESULT Attributes([in] FileAttribute pfa);

        [id(0x000003ee), propget]
        HRESULT DateCreated([out, retval] DATE* pdate);

        [id(0x000003ef), propget]
        HRESULT DateLastModified([out, retval] DATE* pdate);

        [id(0x000003f0), propget]
        HRESULT DateLastAccessed([out, retval] DATE* pdate);

        [id(0x000003f1), propget]
        HRESULT Size([out, retval] VARIANT* pvarSize);

        [id(0x000003f2), propget]
        HRESULT Type([out, retval] BSTR* pbstrType);

        [id(0x000004b0)]
        HRESULT Delete([in, defaultvalue(0)] VARIANT_BOOL Force);

        [id(0x000004b2)]
        HRESULT Copy([in] BSTR Destination, [in, defaultvalue(-1)] VARIANT_BOOL OverWriteFiles);

        [id(0x000004b4)]
        HRESULT Move([in] BSTR Destination);

        [id(0x0000044c)]
        HRESULT OpenAsTextStream([in, defaultvalue(1)] IOMode IOMode,
                        [in, defaultvalue(0)] Tristate Format, [out, retval] ITextStream** ppts);
    }

    [
      odl,
      uuid(0AB5A3D0-E5B6-11D0-ABF5-00A0C90FFFC0),
      hidden,
      dual,
      nonextensible,
      oleautomation
    ]
    interface IFileSystem : IDispatch
    {
        [id(0x0000271a), propget]
        HRESULT Drives([out, retval] IDriveCollection** ppdrives);

        [id(0x00002710)]
        HRESULT BuildPath([in] BSTR Path, [in] BSTR Name, [out, retval] BSTR* pbstrResult);

        [id(0x00002714)]
        HRESULT GetDriveName([in] BSTR Path, [out, retval] BSTR* pbstrResult);

        [id(0x00002715)]
        HRESULT GetParentFolderName([in] BSTR Path, [out, retval] BSTR* pbstrResult);

        [id(0x00002716)]
        HRESULT GetFileName([in] BSTR Path, [out, retval] BSTR* pbstrResult);

        [id(0x00002717)]
        HRESULT GetBaseName([in] BSTR Path, [out, retval] BSTR* pbstrResult);

        [id(0x00002718)]
        HRESULT GetExtensionName([in] BSTR Path, [out, retval] BSTR* pbstrResult);

        [id(0x00002712)]
        HRESULT GetAbsolutePathName([in] BSTR Path, [out, retval] BSTR* pbstrResult);

        [id(0x00002713)]
        HRESULT GetTempName([out, retval] BSTR* pbstrResult);

        [id(0x0000271f)]
        HRESULT DriveExists([in] BSTR DriveSpec, [out, retval] VARIANT_BOOL* pfExists);

        [id(0x00002720)]
        HRESULT FileExists([in] BSTR FileSpec, [out, retval] VARIANT_BOOL* pfExists);

        [id(0x00002721)]
        HRESULT FolderExists([in] BSTR FolderSpec, [out, retval] VARIANT_BOOL* pfExists);

        [id(0x0000271b)]
        HRESULT GetDrive([in] BSTR DriveSpec, [out, retval] IDrive** ppdrive);

        [id(0x0000271c)]
        HRESULT GetFile([in] BSTR FilePath, [out, retval] IFile** ppfile);

        [id(0x0000271d)]
        HRESULT GetFolder([in] BSTR FolderPath, [out, retval] IFolder** ppfolder);

        [id(0x0000271e)]
        HRESULT GetSpecialFolder([in] SpecialFolderConst SpecialFolder, [out, retval] IFolder** ppfolder);

        [id(0x000004b0)]
        HRESULT DeleteFile([in] BSTR FileSpec, [in, defaultvalue(0)] VARIANT_BOOL Force);

        [id(0x000004b1)]
        HRESULT DeleteFolder([in] BSTR FolderSpec, [in, defaultvalue(0)] VARIANT_BOOL Force);

        [id(0x000004b4), helpstring("Move a file"), helpcontext(0x00214bab)]
        HRESULT MoveFile([in] BSTR Source, [in] BSTR Destination);

        [id(0x000004b5)]
        HRESULT MoveFolder([in] BSTR Source, [in] BSTR Destination);

        [id(0x000004b2)]
        HRESULT CopyFile([in] BSTR Source, [in] BSTR Destination,
                         [in, defaultvalue(-1)] VARIANT_BOOL OverWriteFiles);

        [id(0x000004b3)]
        HRESULT CopyFolder([in] BSTR Source, [in] BSTR Destination,
                           [in, defaultvalue(-1)] VARIANT_BOOL OverWriteFiles);

        [id(0x00000460)]
        HRESULT CreateFolder([in] BSTR Path, [out, retval] IFolder** ppfolder);

        [id(0x0000044d)]
        HRESULT CreateTextFile([in] BSTR FileName, [in, defaultvalue(-1)] VARIANT_BOOL Overwrite,
                        [in, defaultvalue(0)] VARIANT_BOOL Unicode, [out, retval] ITextStream** ppts);

        [id(0x0000044c)]
        HRESULT OpenTextFile([in] BSTR FileName, [in, defaultvalue(1)] IOMode IOMode,
                        [in, defaultvalue(0)] VARIANT_BOOL Create,
                        [in, defaultvalue(0)] Tristate Format,
                        [out, retval] ITextStream** ppts);
    }

    [
      odl,
      uuid(C7C3F5A5-88A3-11D0-ABCB-00A0C90FFFC0),
      hidden,
      dual,
      nonextensible,
      oleautomation
    ]
    interface IFileCollection : IDispatch
    {
        [id(DISPID_VALUE), propget]
        HRESULT Item([in] VARIANT Key, [out, retval] IFile** ppfile);

        [id(DISPID_NEWENUM), propget, restricted, hidden]
        HRESULT _NewEnum([out, retval] IUnknown** ppenum);

        [id(0x00000001), propget]
        HRESULT Count([out, retval] long* plCount);
    }

    [
      odl,
      uuid(C7C3F5A3-88A3-11D0-ABCB-00A0C90FFFC0),
      hidden,
      dual,
      nonextensible,
      oleautomation
    ]
    interface IFolderCollection : IDispatch
    {
        [id(0x00000002)]
        HRESULT Add([in] BSTR Name, [out, retval] IFolder** ppfolder);

        [id(DISPID_VALUE), propget]
        HRESULT Item([in] VARIANT Key, [out, retval] IFolder** ppfolder);

        [id(DISPID_NEWENUM), propget, restricted, hidden]
        HRESULT _NewEnum([out, retval] IUnknown** ppenum);

        [id(0x00000001), propget]
        HRESULT Count([out, retval] long* plCount);
    }

    [
      odl,
      uuid(C7C3F5A2-88A3-11D0-ABCB-00A0C90FFFC0),
      hidden,
      dual,
      nonextensible,
      oleautomation
    ]
    interface IFolder : IDispatch
    {
        [id(DISPID_VALUE), propget]
        HRESULT Path([out, retval] BSTR* pbstrPath);

        [id(0x000003e8), propget]
        HRESULT Name([out, retval] BSTR* pbstrName);

        [id(0x000003e8), propput]
        HRESULT Name([in] BSTR pbstrName);

        [id(0x000003ea), propget]
        HRESULT ShortPath([out, retval] BSTR* pbstrPath);

        [id(0x000003e9), propget]
        HRESULT ShortName([out, retval] BSTR* pbstrName);

        [id(0x000003ec), propget]
        HRESULT Drive([out, retval] IDrive** ppdrive);

        [id(0x000003ed), propget]
        HRESULT ParentFolder([out, retval] IFolder** ppfolder);

        [id(0x000003eb), propget]
        HRESULT Attributes([out, retval] FileAttribute* pfa);

        [id(0x000003eb), propput]
        HRESULT Attributes([in] FileAttribute pfa);

        [id(0x000003ee), propget]
        HRESULT DateCreated([out, retval] DATE* pdate);

        [id(0x000003ef), propget]
        HRESULT DateLastModified([out, retval] DATE* pdate);

        [id(0x000003f0), propget]
        HRESULT DateLastAccessed([out, retval] DATE* pdate);

        [id(0x000003f2), propget]
        HRESULT Type([out, retval] BSTR* pbstrType);

        [id(0x000004b1)]
        HRESULT Delete([in, defaultvalue(0)] VARIANT_BOOL Force);

        [id(0x000004b3)]
        HRESULT Copy([in] BSTR Destination, [in, defaultvalue(-1)] VARIANT_BOOL OverWriteFiles);

        [id(0x000004b5)]
        HRESULT Move([in] BSTR Destination);

        [id(0x00002710), propget]
        HRESULT IsRootFolder([out, retval] VARIANT_BOOL* pfRootFolder);

        [id(0x000003f1), propget]
        HRESULT Size([out, retval] VARIANT* pvarSize);

        [id(0x00002711), propget]
        HRESULT SubFolders([out, retval] IFolderCollection** ppfolders);

        [id(0x00002712), propget]
        HRESULT Files([out, retval] IFileCollection** ppfiles);

        [id(0x0000044d)]
        HRESULT CreateTextFile([in] BSTR FileName, [in, defaultvalue(-1)] VARIANT_BOOL Overwrite,
                        [in, defaultvalue(0)] VARIANT_BOOL Unicode, [out, retval] ITextStream** ppts);
    }

    [
      odl,
      uuid(2A0B9D10-4B87-11D3-A97A-00104B365C9F),
      dual,
      nonextensible,
      oleautomation
    ]
    interface IFileSystem3 : IFileSystem
    {
        [id(0x00004e20)]
        HRESULT GetStandardStream([in] StandardStreamTypes StandardStreamType,
                        [in, defaultvalue(0)] VARIANT_BOOL Unicode, [out, retval] ITextStream** ppts);

        [id(0x00004e2a)]
        HRESULT GetFileVersion([in] BSTR FileName, [out, retval] BSTR* FileVersion);
    }

    [
      odl,
      uuid(AADC65F6-CFF1-11D1-B747-00C04FC2B085),
      dual,
      oleautomation
    ]
    interface IScriptEncoder : IDispatch
    {
        [id(DISPID_VALUE)]
        HRESULT EncodeScriptFile([in] BSTR szExt, [in] BSTR bstrStreamIn, [in] long cFlags,
                        [in] BSTR bstrDefaultLang, [out, retval] BSTR* pbstrStreamOut);
    }

    [
      uuid(EE09B103-97E0-11CF-978F-00A02463E06F),
      version(1.0),
      helpstring("Scripting.Dictionary"),
      threading(apartment),
      progid("Scripting.Dictionary")
    ]
    coclass Dictionary
    {
        [default] interface IDictionary;
    }

    [
      uuid(0D43FE01-F093-11CF-8940-00A0C9054228),
      version(1.0),
      helpstring("FileSystem Object"),
      threading(both),
      progid("Scripting.FileSystemObject")
    ]
    coclass FileSystemObject
    {
        [default] interface IFileSystem3;
    }

    [
      uuid(C7C3F5B1-88A3-11D0-ABCB-00A0C90FFFC0),
      noncreatable,
      version(1.0)
    ]
    coclass Drive
    {
        [default] interface IDrive;
    }

    [
      uuid(C7C3F5B2-88A3-11D0-ABCB-00A0C90FFFC0),
      noncreatable,
      version(1.0)
    ]
    coclass Drives
    {
        [default] interface IDriveCollection;
    }

    [
      uuid(C7C3F5B3-88A3-11D0-ABCB-00A0C90FFFC0),
      noncreatable,
      version(1.0)
    ]
    coclass Folder
    {
        [default] interface IFolder;
    }

    [
      uuid(C7C3F5B4-88A3-11D0-ABCB-00A0C90FFFC0),
      noncreatable,
      version(1.0)
    ]
    coclass Folders
    {
        [default] interface IFolderCollection;
    }

    [
      uuid(C7C3F5B5-88A3-11D0-ABCB-00A0C90FFFC0),
      noncreatable,
      version(1.0)
    ]
    coclass File
    {
        [default] interface IFile;
    }

    [
      uuid(C7C3F5B6-88A3-11D0-ABCB-00A0C90FFFC0),
      noncreatable,
      version(1.0)
    ]
    coclass Files
    {
        [default] interface IFileCollection;
    }

    [
      uuid(0BB02EC0-EF49-11CF-8940-00A0C9054228),
      noncreatable,
      version(1.0)
    ]
    coclass TextStream
    {
        [default] interface ITextStream;
    }

    [
      uuid(32DA2B15-CFED-11D1-B747-00C04FC2B085),
      version(1.0),
      helpstring("Script Encoder Object"),
      threading(apartment),
      progid("Scripting.Encoder")
    ]
    coclass Encoder
    {
        [default] interface IScriptEncoder;
    }
}
