/*
 * 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 regtypelib

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;
    }
}
