/*
 * $Id: ase.idl,v 1.16 2007-01-25 14:14:56 bacon Exp $
 */

import "oaidl.idl";
import "ocidl.idl";
	
/* IAwk */
[
	object,
	uuid(05BC1C9F-7C4E-4F77-B186-2E0FD26C0641),
	dual,
	helpstring("ASE Awk Interface"),
	pointer_default(unique)
]
interface IAwk : IDispatch
{
	[id(1), helpstring("method Parse")] 
	HRESULT Parse([out, retval] int* ret);

	[id(2), helpstring("method Run")] 
	HRESULT Run([out, retval] int* ret);

	[id(3), helpstring("method AddBuiltinFunction")] 
	HRESULT AddBuiltinFunction([in] BSTR name, [in] int min_args, [in] int max_args, [out, retval] int* ret);

	[id(4), helpstring("method DeleteBuiltinFunction")] 
	HRESULT DeleteBuiltinFunction([in] BSTR name, [out, retval] int* ret);

	[propget, id(5), helpstring("property ErrorCode")] 
	HRESULT ErrorCode([out, retval] int *pVal);

	[propget, id(6), helpstring("property ErrorLine")] 
	HRESULT ErrorLine([out, retval] int *pVal);

	[propget, id(7), helpstring("property ErrorMessage")] 
	HRESULT ErrorMessage([out, retval] BSTR *pVal);

	[propget, id(8), helpstring("property ImplicitVariable")] 
	HRESULT ImplicitVariable([out, retval] BOOL *pVal);
	[propput, id(8), helpstring("property ImplicitVariable")] 
	HRESULT ImplicitVariable([in] BOOL newVal);

	[propget, id(9), helpstring("property ExplicitVariable")]
	HRESULT ExplicitVariable([out, retval] BOOL *pVal);
	[propput, id(9), helpstring("property ExplicitVariable")] 
	HRESULT ExplicitVariable([in] BOOL newVal);

	[propget, id(10), helpstring("property UniqueFunction")] 
	HRESULT UniqueFunction([out, retval] BOOL *pVal);
	[propput, id(10), helpstring("property UniqueFunction")]
	HRESULT UniqueFunction([in] BOOL newVal);

	[propget, id(11), helpstring("property VariableShading")] 
	HRESULT VariableShading([out, retval] BOOL *pVal);
	[propput, id(11), helpstring("property VariableShading")]
	HRESULT VariableShading([in] BOOL newVal);

	[propget, id(12), helpstring("property ShiftOperators")]
	HRESULT ShiftOperators([out, retval] BOOL *pVal);
	[propput, id(12), helpstring("property ShiftOperators")] 
	HRESULT ShiftOperators([in] BOOL newVal);

	[propget, id(13), helpstring("property IdivOperator")]
	HRESULT IdivOperator([out, retval] BOOL *pVal);
	[propput, id(13), helpstring("property IdivOperator")]
	HRESULT IdivOperator([in] BOOL newVal);

	[propget, id(14), helpstring("property ConcatString")]
	HRESULT ConcatString([out, retval] BOOL *pVal);
	[propput, id(14), helpstring("property ConcatString")]
	HRESULT ConcatString([in] BOOL newVal);

	[propget, id(15), helpstring("property SupportExtio")]
	HRESULT SupportExtio([out, retval] BOOL *pVal);
	[propput, id(15), helpstring("property SupportExtio")]
	HRESULT SupportExtio([in] BOOL newVal);

	[propget, id(16), helpstring("property SupportBlockless")]
	HRESULT SupportBlockless([out, retval] BOOL *pVal);
	[propput, id(16), helpstring("property SupportBlockless")]
	HRESULT SupportBlockless([in] BOOL newVal);

	[propget, id(17), helpstring("property StringBaseOne")]
	HRESULT StringBaseOne([out, retval] BOOL *pVal);
	[propput, id(17), helpstring("property StringBaseOne")]
	HRESULT StringBaseOne([in] BOOL newVal);

	[propget, id(18), helpstring("property StripSpaces")]
	HRESULT StripSpaces([out, retval] BOOL *pVal);
	[propput, id(18), helpstring("property StripSpaces")]
	HRESULT StripSpaces([in] BOOL newVal);

	[propget, id(19), helpstring("property Nextofile")]
	HRESULT Nextofile([out, retval] BOOL *pVal);
	[propput, id(19), helpstring("property Nextofile")]
	HRESULT Nextofile([in] BOOL newVal);

	[propget, id(20), helpstring("property UseCrlf")]
	HRESULT UseCrlf([out, retval] BOOL *pVal);
	[propput, id(20), helpstring("property UseCrlf")]
	HRESULT UseCrlf([in] BOOL newVal);

	[propget, id(21), helpstring("property MaxDepthForBlockParse")]
	HRESULT MaxDepthForBlockParse([out, retval] int *pVal);
	[propput, id(21), helpstring("property MaxDepthForBlockParse")]
	HRESULT MaxDepthForBlockParse([in] int newVal);

	[propget, id(22), helpstring("property MaxDepthForBlockRun")]
	HRESULT MaxDepthForBlockRun([out, retval] int *pVal);
	[propput, id(22), helpstring("property MaxDepthForBlockRun")]
	HRESULT MaxDepthForBlockRun([in] int newVal);

	[propget, id(23), helpstring("property MaxDepthForExprParse")]
	HRESULT MaxDepthForExprParse([out, retval] int *pVal);
	[propput, id(23), helpstring("property MaxDepthForExprParse")]
	HRESULT MaxDepthForExprParse([in] int newVal);

	[propget, id(24), helpstring("property MaxDepthForExprRun")]
	HRESULT MaxDepthForExprRun([out, retval] int *pVal);
	[propput, id(24), helpstring("property MaxDepthForExprRun")]
	HRESULT MaxDepthForExprRun([in] int newVal);

	[propget, id(25), helpstring("property MaxDepthForRexBuild")]
	HRESULT MaxDepthForRexBuild([out, retval] int *pVal);
	[propput, id(25), helpstring("property MaxDepthForRexBuild")]
	HRESULT MaxDepthForRexBuild([in] int newVal);

	[propget, id(26), helpstring("property MaxDepthForRexMatch")]
	HRESULT MaxDepthForRexMatch([out, retval] int *pVal);
	[propput, id(26), helpstring("property MaxDepthForRexMatch")]
	HRESULT MaxDepthForRexMatch([in] int newVal);

	[propget, id(27), helpstring("property EntryPoint")]
	HRESULT EntryPoint([out, retval] BSTR *pVal);
	[propput, id(27), helpstring("property EntryPoint")]
	HRESULT EntryPoint([in] BSTR newVal);

	[propget, id(28), helpstring("property Debug")]
	HRESULT Debug([out, retval] BOOL *pVal);
	[propput, id(28), helpstring("property Debug")]
	HRESULT Debug([in] BOOL newVal);

	[propget, id(29), helpstring("property UseLongLong")]
	HRESULT UseLongLong([out, retval] BOOL *pVal);
	[propput, id(29), helpstring("property UseLongLong")]
	HRESULT UseLongLong([in] BOOL newVal);
};

/* ASELib */
[
	uuid(F9C69806-16A1-4162-998A-876B33C470BF),
	version(1.0),
	helpstring("ASE 1.0 Type Library")
]
library ASELib
{
	importlib("stdole32.tlb");
	importlib("stdole2.tlb");

	[helpstring("AwkExtio tpe")]
	typedef [v1_enum] enum AwkExtioType
	{
		AWK_EXTIO_PIPE = 0,
		AWK_EXTIO_COPROC = 1,
		AWK_EXTIO_FILE = 2,
		AWK_EXTIO_CONSOLE = 3
	} AwkExtioType;

	[helpstring("AwkExtio mode")]
	typedef [v1_enum] enum AwkExtioMode
	{
		AWK_EXTIO_PIPE_READ = 0,
		AWK_EXTIO_PIPE_WRITE = 1,

		AWK_EXTIO_COPROC_READ = 0,
		AWK_EXTIO_COPROC_WRITE = 1,
		AWK_EXTIO_COPROC_RDWR = 2,

		AWK_EXTIO_FILE_READ = 0,
		AWK_EXTIO_FILE_WRITE = 1,
		AWK_EXTIO_FILE_APPEND = 2,

		AWK_EXTIO_CONSOLE_READ = 0,
		AWK_EXTIO_CONSOLE_WRITE = 1
	} AwkExtioMode;

	/* IBuffer */
	[
		object,
		uuid(AD5EA986-37E9-410E-A78E-21799104293A),
		dual,
		helpstring("IBuffer Interface"),
		pointer_default(unique)
	]
	interface IBuffer : IDispatch
	{
		[propget, id(1), helpstring("property Value")]
		HRESULT Value([out, retval] BSTR *pVal);

		[propput, id(1), helpstring("property Value")]
		HRESULT Value([in] BSTR newVal);
	};

	/* IAwkExtio */
	[
		object,
		uuid(BE0B91FF-9944-4DFC-A55B-1FE14E24AFEE),
		dual,
		helpstring("IAwkExtio Interface"),
		pointer_default(unique)
	]
	interface IAwkExtio : IDispatch
	{
		[propget, id(1), helpstring("property Name")]
		HRESULT Name([out, retval] BSTR *pVal);

		[propget, id(2), helpstring("property Type")]
		HRESULT Type([out, retval] int *pVal);

		[propget, id(3), helpstring("property Mode")]
		HRESULT Mode([out, retval] int *pVal);

		[propget, id(4), helpstring("property Handle")]
		HRESULT Handle([out, retval] VARIANT *pVal);
		[propput, id(4), helpstring("property Handle")]
		HRESULT Handle([in] VARIANT newVal);
	};

	/* IAwkEvents */
	[ 
		uuid(1351DC8F-10AD-4C40-A2FA-9A2E89C27AC8),
		helpstring("ASE Awk Events Interface")
	]
	dispinterface IAwkEvents
	{
	properties:
	methods:
		[id(1), helpstring("open the source code")]
		int OpenSource([in] int mode);

		[id(2), helpstring("close the source code")]
		int CloseSource([in] int mode);

		[id(3), helpstring("read the source code")]
		int ReadSource([in] IBuffer* buf);

		[id(4), helpstring("write the source code")]
		int WriteSource([in] IBuffer* buf);

		[id(5), helpstring("method OpenExtio")]
		int OpenExtio([in] IAwkExtio* extio);

		[id(6), helpstring("method CloseExtio")]
		int CloseExtio([in] IAwkExtio* extio);

		[id(7), helpstring("method ReadExtio")]
		int ReadExtio([in] IAwkExtio* extio, [in] IBuffer* buf);

		[id(8), helpstring("method WriteExtio")]
		int WriteExtio([in] IAwkExtio* extio, [in] IBuffer* buf);

		[id(9), helpstring("method FlushExtio")]
		int FlushExtio([in] IAwkExtio* extio);

		[id(10), helpstring("method NextExtio")]
		int NextExtio([in] IAwkExtio* extio);

		[id(11), helpstring("method HandleBuiltinFunction")]
		int HandleBuiltinFunction([in] BSTR name, [in] VARIANT argarray, [out, retval] VARIANT* ret);
	};

	/* Awk */
	[
		uuid(AD863B53-F5EC-45C3-8B1C-6AC678227DC8),
		helpstring("ASE Awk Class")
	]
	coclass Awk
	{
		[default] interface IAwk;
		[default,source] dispinterface IAwkEvents;
	};

	/* AwkExtio */
	[
		uuid(F52F065A-5FD4-4F4D-AFEA-F5E446B16383),
		helpstring("ASE AwkExtio Class")
	]
	coclass AwkExtio
	{
		[default] interface IAwkExtio;
	};

	/* Buffer */
	[
		uuid(866B79A7-7628-4808-8AE7-784BE2491C80),
		helpstring("ASE Buffer Class")
	]
	coclass Buffer
	{
		[default] interface IBuffer;
	};
};