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

    [
        uuid(08fed191-be19-11d3-a28b-00104bd35090),
        threading(apartment)
    ]
    coclass WshExec {
        [default] interface IWshExec;
    }
}
