/*
 * Copyright 2011 Jacek Caban for CodeWeavers
 *
 * 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
 */

import "oaidl.idl";
cpp_quote("#undef ExpandEnvironmentStrings")

[
    helpstring("Windows Script Host Object Model"),
    uuid(f935dc20-1cf0-11d0-adb9-00c04fd58a0b),
    version(1.0)
]
library IWshRuntimeLibrary
{
    importlib("stdole2.tlb");

    typedef enum {
        WshRunning  = 0,
        WshFinished,
        WshFailed
    } WshExecStatus;

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

    typedef enum {
        Normal     = 0x000,
        ReadOnly   = 0x001,
        Hidden     = 0x002,
        System     = 0x004,
        Volume     = 0x008,
        Directory  = 0x010,
        Archive    = 0x020,
        Alias      = 0x400,
        Compressed = 0x800
    } FileAttribute;

    typedef enum {
        ForReading   = 0x1,
        ForWriting   = 0x2,
        ForAppending = 0x8
    } IOMode;

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

    interface IFolder;
    interface IFolderCollection;

    [
        uuid(53bad8c1-e718-11cf-893d-00a0c9054228),
        odl,
        hidden,
        dual,
        nonextensible,
        oleautomation
    ]
    interface ITextStream : IDispatch {
        [id(0x2710), propget]
        HRESULT Line([out, retval] long* Line);

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

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

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

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

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

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

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

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

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

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

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

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

    [
        uuid(c7c3f5a0-88a3-11d0-abcb-00a0c90fffc0),
        odl,
        hidden,
        dual,
        nonextensible,
        oleautomation
    ]
    interface IDrive : IDispatch {
        [id(DISPID_VALUE), propget]
        HRESULT Path([out, retval] BSTR* path);

        [id(0x2710), propget]
        HRESULT DriveLetter([out, retval] BSTR* letter);

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

        [id(0x2712), propget]
        HRESULT DriveType([out, retval] DriveTypeConst* type);

        [id(0x2713), propget]
        HRESULT RootFolder([out, retval] IFolder** folder);

        [id(0x2715), propget]
        HRESULT AvailableSpace([out, retval] VARIANT* Avail);

        [id(0x2714), propget]
        HRESULT FreeSpace([out, retval] VARIANT* pFree);

        [id(0x2716), propget]
        HRESULT TotalSize([out, retval] VARIANT* Total);

        [id(0x2717), propget]
        HRESULT VolumeName([out, retval] BSTR* Name);

        [id(0x2717), propput]
        HRESULT VolumeName([in] BSTR Name);

        [id(0x2718), propget]
        HRESULT FileSystem([out, retval] BSTR* pFileSystem);

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

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

    [
        uuid(c7c3f5a4-88a3-11d0-abcb-00a0c90fffc0),
        odl,
        hidden,
        dual,
        nonextensible,
        oleautomation
    ]
    interface IFile : IDispatch {
        [id(DISPID_VALUE), propget]
        HRESULT Path([out, retval] BSTR* path);

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

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

        [id(0x03ea), propget]
        HRESULT ShortPath([out, retval] BSTR* path);

        [id(0x03e9), propget]
        HRESULT ShortName([out, retval] BSTR* Name);

        [id(0x03ec), propget]
        HRESULT Drive([out, retval] IDrive** drive);

        [id(0x03ed), propget]
        HRESULT ParentFolder([out, retval] IFolder** folder);

        [id(0x03eb), propget]
        HRESULT Attributes([out, retval] FileAttribute* attr);

        [id(0x03eb), propput]
        HRESULT Attributes([in] FileAttribute attr);

        [id(0x03ee), propget]
        HRESULT DateCreated([out, retval] DATE* date);

        [id(0x03ef), propget]
        HRESULT DateLastModified([out, retval] DATE* date);

        [id(0x03f0), propget]
        HRESULT DateLastAccessed([out, retval] DATE* date);

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

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

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

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

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

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

    [
        uuid(c7c3f5a5-88a3-11d0-abcb-00a0c90fffc0),
        odl,
        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(1), propget]
        HRESULT Count([out, retval] long* count);
    };

    [
        uuid(c7c3f5a2-88a3-11d0-abcb-00a0c90fffc0),
        odl,
        hidden,
        dual,
        nonextensible,
        oleautomation
    ]
    interface IFolder : IDispatch {
        [id(DISPID_VALUE), propget]
        HRESULT Path([out, retval] BSTR* path);

        [id(0x03e8), propget]
        HRESULT Name([out, retval] BSTR* name);

        [id(0x03e8), propput]
        HRESULT Name([in] BSTR name);

        [id(0x03ea), propget]
        HRESULT ShortPath([out, retval] BSTR* path);

        [id(0x03e9), propget]
        HRESULT ShortName([out, retval] BSTR* name);

        [id(0x03ec), propget]
        HRESULT Drive([out, retval] IDrive** drive);

        [id(0x03ed), propget]
        HRESULT ParentFolder([out, retval] IFolder** folder);

        [id(0x03eb), propget]
        HRESULT Attributes([out, retval] FileAttribute* attr);

        [id(0x03eb), propput]
        HRESULT Attributes([in] FileAttribute attr);

        [id(0x03ee), propget]
        HRESULT DateCreated([out, retval] DATE* date);

        [id(0x03ef), propget]
        HRESULT DateLastModified([out, retval] DATE* date);

        [id(0x03f0), propget]
        HRESULT DateLastAccessed([out, retval] DATE* date);

        [id(0x03f2), propget]
        HRESULT Type([out, retval] BSTR* type);

        [id(0x04b1)]
        HRESULT Delete([in, optional, defaultvalue(0)] VARIANT_BOOL force);

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

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

        [id(0x2710), propget]
        HRESULT IsRootFolder([out, retval] VARIANT_BOOL* root);

        [id(0x03f1), propget]
        HRESULT Size([out, retval] VARIANT* size);

        [id(0x2711), propget]
        HRESULT SubFolders([out, retval] IFolderCollection** folders);

        [id(0x2712), propget]
        HRESULT Files([out, retval] IFileCollection** files);

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

    [
        uuid(c7c3f5a3-88a3-11d0-abcb-00a0c90fffc0),
        odl,
        hidden,
        dual,
        nonextensible,
        oleautomation
    ]
    interface IFolderCollection : IDispatch {
        [id(2)]
        HRESULT Add(
                    [in] BSTR Name,
                    [out, retval] IFolder** folder);

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

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

        [id(1), propget]
        HRESULT Count([out, retval] long* count);
    };

    [
        uuid(f935dc27-1cf0-11d0-adb9-00c04fd58a0b),
        odl,
        dual,
        oleautomation
    ]
    interface IWshCollection : IDispatch {
        [id(DISPID_VALUE)]
        HRESULT Item(
                [in] VARIANT *Index,
                [out, retval] VARIANT *out_Value);

        [id(1)]
        HRESULT Count([out, retval] long *out_Count);

        [id(2), propget]
        HRESULT length([out, retval] long *out_Count);

        [id(DISPID_NEWENUM)]
        HRESULT _NewEnum([out, retval] IUnknown *out_Enum);
    }

    [
        uuid(f935dc29-1cf0-11d0-adb9-00c04fd58a0b),
        odl,
        dual,
        oleautomation
    ]
    interface IWshEnvironment : IDispatch {
        [id(DISPID_VALUE), propget]
        HRESULT Item(
                [in] BSTR Name,
                [out, retval] BSTR *out_Value);

        [id(DISPID_VALUE), propput]
        HRESULT Item(
                [in] BSTR Name,
                [in] BSTR out_Value);

        [id(1)]
        HRESULT Count([out, retval] long *out_Count);

        [id(2), propget]
        HRESULT length([out, retval] long *out_Count);

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

        [id(0x03e9)]
        HRESULT Remove([in] BSTR Name);
    }

    [
        uuid(08fed190-be19-11d3-a28b-00104bd35090),
        odl,
        dual,
        oleautomation
    ]
    interface IWshExec : IDispatch {
        [id(0x0001), propget]
        HRESULT Status([out, retval] WshExecStatus* Status);

        [id(0x0003), propget]
        HRESULT StdIn([out, retval] ITextStream** stream);

        [id(0x0004), propget]
        HRESULT StdOut([out, retval] ITextStream** stream);

        [id(0x0005), propget]
        HRESULT StdErr([out, retval] ITextStream** stream);

        [id(0x0006), propget]
        HRESULT ProcessID([out, retval] long* pid);

        [id(0x0007), propget]
        HRESULT ExitCode([out, retval] long* ExitCode);

        [id(0x0008)]
        HRESULT Terminate();
    };

    [
        uuid(f935dc23-1cf0-11d0-adb9-00c04fd58a0b),
        odl,
        dual,
        oleautomation
    ]
    interface IWshShortcut : IDispatch {
        [id(DISPID_VALUE), propget]
        HRESULT FullName([out, retval] BSTR* name);

        [id(0x03e8), propget]
        HRESULT Arguments([out, retval] BSTR* Arguments);

        [id(0x03e8), propput]
        HRESULT Arguments([in] BSTR Arguments);

        [id(0x03e9), propget]
        HRESULT Description([out, retval] BSTR* Description);

        [id(0x03e9), propput]
        HRESULT Description([in] BSTR Description);

        [id(0x03ea), propget]
        HRESULT Hotkey([out, retval] BSTR* HotKey);

        [id(0x03ea), propput]
        HRESULT Hotkey([in] BSTR HotKey);

        [id(0x03eb), propget]
        HRESULT IconLocation([out, retval] BSTR* IconPath);

        [id(0x03eb), propput]
        HRESULT IconLocation([in] BSTR IconPath);

        [id(0x03ec), propput]
        HRESULT RelativePath([in] BSTR rhs);

        [id(0x03ed), propget]
        HRESULT TargetPath([out, retval] BSTR* Path);

        [id(0x03ed), propput]
        HRESULT TargetPath([in] BSTR Path);

        [id(0x03ee), propget]
        HRESULT WindowStyle([out, retval] int* ShowCmd);

        [id(0x03ee), propput]
        HRESULT WindowStyle([in] int ShowCmd);

        [id(0x03ef), propget]
        HRESULT WorkingDirectory([out, retval] BSTR* WorkingDirectory);

        [id(0x03ef), propput]
        HRESULT WorkingDirectory([in] BSTR WorkingDirectory);

        [id(0x07d0), hidden]
        HRESULT Load([in] BSTR PathLink);

        [id(0x07d1)]
        HRESULT Save();
    };

    [
        uuid(f935dc21-1cf0-11d0-adb9-00c04fd58a0b),
        odl,
        dual,
        oleautomation,
        hidden
    ]
    interface IWshShell : IDispatch {
        [id(0x0064), propget]
        HRESULT SpecialFolders([out, retval] IWshCollection** out_Folders);

        [id(0x00c8), propget]
        HRESULT Environment(
            [in, optional] VARIANT* Type,
            [out, retval] IWshEnvironment** out_Env);

        [id(0x03e8)]
        HRESULT Run(
            [in] BSTR Command,
            [in, optional] VARIANT* WindowStyle,
            [in, optional] VARIANT* WaitOnReturn,
            [out, retval] int* out_ExitCode);

        [id(0x03e9)]
        HRESULT Popup(
            [in] BSTR Text,
            [in, optional] VARIANT* SecondsToWait,
            [in, optional] VARIANT* Title,
            [in, optional] VARIANT* Type,
            [out, retval] int* out_Button);

        [id(0x03ea)]
        HRESULT CreateShortcut(
            [in] BSTR PathLink,
            [out, retval] IDispatch** out_Shortcut);

        [id(0x03ee)]
        HRESULT ExpandEnvironmentStrings(
            [in] BSTR Src,
            [out, retval] BSTR* out_Dst);

        [id(0x07d0)]
        HRESULT RegRead(
            [in] BSTR Name,
            [out, retval] VARIANT* out_Value);

        [id(0x07d1)]
        HRESULT RegWrite(
            [in] BSTR Name,
            [in] VARIANT* Value,
            [in, optional] VARIANT* Type);

        [id(0x07d2)]
        HRESULT RegDelete([in] BSTR Name);
    };

    [
      uuid(24be5a30-edfe-11d2-b933-00104b365c9f),
      odl,
      dual,
      oleautomation,
      hidden
    ]
    interface IWshShell2 : IWshShell {
        [id(0x0bb8)]
        HRESULT LogEvent(
            [in] VARIANT* Type,
            [in] BSTR Message,
            [in, optional, defaultvalue("")] BSTR Target,
            [out, retval] VARIANT_BOOL* out_Success);

        [id(0x0bc2)]
        HRESULT AppActivate(
            [in] VARIANT* App,
            [in, optional] VARIANT* Wait,
            [out, retval] VARIANT_BOOL* out_Success);

        [id(0x0bc3)]
        HRESULT SendKeys(
            [in] BSTR Keys,
            [in, optional] VARIANT* Wait);
    };

    [
        uuid(41904400-be18-11d3-a28b-00104bd35090),
        odl,
        dual,
        oleautomation
    ]
    interface IWshShell3 : IWshShell2 {
        [id(0x0bc4)]
        HRESULT Exec(
            [in] BSTR Command,
            [out, retval] IWshExec** out_Exec);

        [id(0x0bc5), propget]
        HRESULT CurrentDirectory([out, retval] BSTR* out_Directory);

        [id(0x0bc5), propput]
        HRESULT CurrentDirectory([in] BSTR out_Directory);
    };

    [
        uuid(24be5a31-edfe-11d2-b933-00104b365c9f),
        odl,
        dual,
        oleautomation
    ]
    interface IWshNetwork2 : IDispatch {
        [id(0x60020000), propget]
        HRESULT UserDomain([out, retval] BSTR *out_UserDomain);
    }

    [
        helpstring("Windows Script Host Shell Object"),
        uuid(f935dc22-1cf0-11d0-adb9-00c04fd58a0b),
        threading(apartment),
        progid("WScript.Shell.1"),
        vi_progid("WScript.Shell")
    ]
    coclass IWshShell_Class {
        [default] interface IWshShell3;
    }

    [
        helpstring("Windows Script Host Shell Object"),
        uuid(72c24dd5-d70a-438b-8a42-98424b88afb8),
        threading(apartment),
        progid("WScript.Shell.1"),
        vi_progid("WScript.Shell")
    ]
    coclass WshShell {
        [default] interface IWshShell3;
    }

    [
        helpstring("Windows Script Host Network Object"),
        uuid(f935dc26-1cf0-11d0-adb9-00c04fd58a0b),
        threading(apartment),
        progid("WScript.Network.1"),
        vi_progid("WScript.Network")
    ]
    coclass IWshNetwork_Class {
        [default] interface IWshNetwork2;
    }

    [
        helpstring("Windows Script Host Network Object"),
        uuid(093ff999-1ea0-4079-9525-9614c3504b74),
        threading(apartment),
        progid("WScript.Network.1"),
        vi_progid("WScript.Network")
    ]
    coclass WshNetwork {
        [default] interface IWshNetwork2;
    }
}
