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

#include "ihost_dispid.h"

import "oaidl.idl";

[
    uuid(60254ca0-953b-11cf-8c96-00aa00b8708c),
    version(5.6),
]
library IHost
{
    importlib("stdole2.tlb");

    [
        odl,
        uuid(2cc5a9d1-b1e5-11d3-a286-00104bd35090),
        dual,
        oleautomation
    ]
    interface IArguments2 : IDispatch {
        [id(DISPID_VALUE)]
        HRESULT Item(
            [in] LONG Index,
            [out, retval] BSTR *out_Value);

        [id(IARGUMENTS2_COUNT_DISPID)]
        HRESULT Count([out, retval] LONG *out_Count);

        [id(IARGUMENTS2_LENGTH_DISPID), propget]
        HRESULT length([out, retval] LONG *out_Count);
    }

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

        [id(ITEXTSTREAM_COLUMN_DISPID), propget]
        HRESULT Column([out, retval] LONG *Column);

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

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

        [id(ITEXTSTREAM_READ_DISPID)]
        HRESULT Read(
            [in] LONG Characters,
            [out, retval] BSTR *Text);

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

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

        [id(ITEXTSTREAM_WRITE_DISPID)]
        HRESULT Write([in] BSTR Text);

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

        [id(ITEXTSTREAM_WRITEBLANKLINES_DISPID)]
        HRESULT WriteBlankLines([in] LONG Lines);

        [id(ITEXTSTREAM_SKIP_DISPID)]
        HRESULT Skip([in] LONG Characters);

        [id(ITEXTSTREAM_SKIPLINE_DISPID)]
        HRESULT SkipLine();

        [id(ITEXTSTREAM_CLOSE_DISPID)]
        HRESULT Close();
    }

    [
        odl,
        uuid(91afbd1b-5feb-43f5-b028-e2ca960617ec),
        dual,
        oleautomation
    ]
    interface IHost : IDispatch {
        [id(IHOST_NAME_DISPID), propget]
        HRESULT Name([out, retval] BSTR *out_Name);

        [id(IHOST_APPLICATION_DISPID), propget]
        HRESULT Application([out, retval] IDispatch **out_Dispatch);

        [id(IHOST_FULLNAME_DISPID), propget]
        HRESULT FullName([out, retval] BSTR *out_Path);

        [id(IHOST_PATH_DISPID), propget]
        HRESULT Path([out, retval] BSTR* out_Path);

        [id(IHOST_INTERACTIVE_DISPID), propget]
        HRESULT Interactive([out, retval] VARIANT_BOOL *out_Interactive);

        [id(IHOST_INTERACTIVE_DISPID), propput]
        HRESULT Interactive([in] VARIANT_BOOL out_Interactive);

        [id(IHOST_QUIT_DISPID)]
        HRESULT Quit([in, optional, defaultvalue(0)] int ExitCode);

        [id(IHOST_SCRIPTNAME_DISPID), propget]
        HRESULT ScriptName([out, retval] BSTR *out_ScriptName);

        [id(IHOST_SCRIPTFULLNAME_DISPID), propget]
        HRESULT ScriptFullName([out, retval] BSTR* out_ScriptFullName);

        [id(IHOST_ARGUMENTS_DISPID), propget]
        HRESULT Arguments([out, retval] IArguments2 **out_Arguments);

        [id(IHOST_VERSION_DISPID), propget]
        HRESULT Version([out, retval] BSTR *out_Version);

        [id(IHOST_BUILDVERSION_DISPID), propget]
        HRESULT BuildVersion([out, retval] int *out_Build);

        [id(IHOST_TIMEOUT_DISPID), propget]
        HRESULT Timeout([out, retval] LONG *out_Timeout);

        [id(IHOST_TIMEOUT_DISPID), propput]
        HRESULT Timeout([in] LONG out_Timeout);

        [id(IHOST_CREATEOBJECT_DISPID)]
        HRESULT CreateObject(
                [in] BSTR ProgID,
                [in, optional, defaultvalue("")] BSTR Prefix,
                [out, retval] IDispatch **out_Dispatch);

        [id(IHOST_ECHO_DISPID), vararg]
        HRESULT Echo([in] SAFEARRAY(VARIANT) pArgs);

        [id(IHOST_GETOBJECT_DISPID)]
        HRESULT GetObject(
            [in] BSTR Pathname,
            [in, optional, defaultvalue("")] BSTR ProgID,
            [in, optional, defaultvalue("")] BSTR Prefix,
            [out, retval] IDispatch **out_Dispatch);

        [id(IHOST_DISCONNECTOBJECT_DISPID)]
        HRESULT DisconnectObject([in] IDispatch *Object);

        [id(IHOST_SLEEP_DISPID)]
        HRESULT Sleep([in] LONG Time);

        [id(IHOST_CONNECTOBJECT_DISPID)]
        HRESULT ConnectObject(
            [in] IDispatch *Object,
            [in] BSTR Prefix);

        [id(IHOST_STDIN_DISPID), propget]
        HRESULT StdIn([out, retval] ITextStream **out_ppts);

        [id(IHOST_STDOUT_DISPID), propget]
        HRESULT StdOut([out, retval] ITextStream **ppts);

        [id(IHOST_STDERR_DISPID), propget]
        HRESULT StdErr([out, retval] ITextStream **ppts);
    }
}