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

#pragma makedep header

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, 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, defaultvalue(0)] VARIANT_BOOL Force);

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

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

        [id(0x044c)]
        HRESULT OpenAsTextStream(
                    [in, defaultvalue(1)] IOMode IOMode,
                    [in, 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, defaultvalue(0)] VARIANT_BOOL force);

        [id(0x04b3)]
        HRESULT Copy(
                    [in] BSTR Destination,
                    [in, 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, defaultvalue(-1)] VARIANT_BOOL Overwrite,
                    [in, 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 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] DWORD *pid);

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

        [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] DWORD* 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, 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;
    }
}
