/**************************************************************
 *
 * Licensed to the Apache Software Foundation (ASF) under one
 * or more contributor license agreements.  See the NOTICE file
 * distributed with this work for additional information
 * regarding copyright ownership.  The ASF licenses this file
 * to you under the Apache License, Version 2.0 (the
 * "License"); you may not use this file except in compliance
 * with the License.  You may obtain a copy of the License at
 *
 *   http://www.apache.org/licenses/LICENSE-2.0
 *
 * Unless required by applicable law or agreed to in writing,
 * software distributed under the License is distributed on an
 * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
 * KIND, either express or implied.  See the License for the
 * specific language governing permissions and limitations
 * under the License.
 *
 *************************************************************/


#ifndef __com_sun_star_script_InterruptEngineEvent_idl__
#define __com_sun_star_script_InterruptEngineEvent_idl__

#ifndef __com_sun_star_lang_EventObject_idl__
#include <com/sun/star/lang/EventObject.idl>
#endif

#ifndef __com_sun_star_script_InterruptReason_idl__
#include <com/sun/star/script/InterruptReason.idl>
#endif


//=============================================================================

 module com {  module sun {  module star {  module script {

//=============================================================================
/** describes an interrupt which occurs in the scripting engine.
	@deprecated
 */
published struct InterruptEngineEvent: com::sun::star::lang::EventObject
{
	//-------------------------------------------------------------------------
	/** fully qualified name to address the module or function affected by the event that
		took place.

		<p>If the module or function can't be addressed by name (for example, in case
		that a runtime-generated eval-module is executed), this string is empty.</p>
	 */
	string Name;

	//-------------------------------------------------------------------------
	/** source code of the Module affected by the event that took place.

		<p>If the source can
		be accessed using the ModuleName, or if the source is unknown (executing compiled
		code), this string can be empty.</p>
	 */
	string SourceCode;

	//-------------------------------------------------------------------------
	/** contains the first line in the module's source code that is affected
		by the event that took place.



		<p>If "name" addresses a function, all line and column values
		are nevertheless given relative to the module's source. If
		source code is not available, this value addresses a binary
		position in the compiled code.  </p>

		@see XLibraryAccess::getModuleCode
		@see XLibraryAccess::getFunctionCode
	 */
	long StartLine;

	//-------------------------------------------------------------------------
	/** contains the first column in the "StartLine" that is affected by the
		event that took place.
	 */
	long StartColumn;

	//-------------------------------------------------------------------------
	/** contains the last line in the module's source code that is affected
		by the event that took place.
	 */
	long EndLine;

	//-------------------------------------------------------------------------
	/** contains the first column in the "EndLine" which is NOT affected by
		the event that took place.
	 */
	long EndColumn;

	//-------------------------------------------------------------------------
	/** error message.
		<p>Only valid if Reason is RuntimeError or CompileError.</p>
	 */
	string ErrorMessage;

	//-------------------------------------------------------------------------
	/** contains the interrupt reason.
	 */
	com::sun::star::script::InterruptReason Reason;

};

//=============================================================================

}; }; }; };

#endif
