/*
 * Author:      William Chia-Wei Cheng (bill.cheng@acm.org)
 *
 * Copyright (C) 2001-2009, William Chia-Wei Cheng.
 *
 * This file may be distributed under the terms of the Q Public License
 * as defined by Trolltech AS of Norway and appearing in the file
 * LICENSE.QPL included in the packaging of this file.
 *
 * THIS FILE IS PROVIDED AS IS WITH NO WARRANTY OF ANY KIND, INCLUDING
 * THE WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR
 * PURPOSE.  IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL,
 * INDIRECT OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING
 * FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT,
 * NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION
 * WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
 *
 * @(#)$Header: /mm2/home/cvs/bc-src/tgif/exec.e,v 1.7 2009/01/09 22:25:30 william Exp $
 */

#ifndef _EXEC_E_
#define _EXEC_E_

#include "list.e"

extern int		execAnimating;
extern int		execAnimateRedraw;
extern int		execCurDepth;
extern int		replaceAttrFirstValueRedraw;
extern int		execNavigateBack;
extern int		userAbortExec;

extern struct AttrRec	* warpToAttr;

extern char		* cmdToExecAfterHyperJump;

extern struct StrRec	* topTmpStr;
extern struct StrRec	* botTmpStr;

typedef struct tagReplAttrValueCallbackInfo {
   struct ObjRec *obj_ptr; /* a top level object */
   struct AttrRec *attr_ptr;
   char *new_attr_value;
   void *pv_userdata;
} ReplAttrValueCallbackInfo;

typedef int (ReplAttrValueCallback)ARGS_DECL((ReplAttrValueCallbackInfo*));

#ifdef _INCLUDE_FROM_EXEC_C_
#undef extern
#define extern
#endif /*_INCLUDE_FROM_EXEC_C_*/

extern void	CleanTmpStr ARGS_DECL((void));
extern int	PrependToTmpStr ARGS_DECL((char*));
extern int	AppendToTmpStr ARGS_DECL((char*));
extern int	ExecuteCmdGetResult ARGS_DECL((char*, CVList*, int max_lines));
extern struct ObjRec	* FindObjWithName ARGS_DECL((struct ObjRec *BotObj,
			                             struct ObjRec *ObjPtr,
			                             char *ObjName,
			                             int InsideRootObj,
			                             int InsideThisObj,
			                             struct ObjRec **OwnerObj,
			                             struct ObjRec **TopOwner));

extern int	PipeReachedEOF ARGS_DECL((FILE*));
extern int	WaitForEvent ARGS_DECL((FILE*, int fp_is_pipe,
		                        int fp_is_named_pipe, int *pn_quit,
		                        int what_to_do_with_x_events,
		                        AbortCallbackFunc*, void*));
extern int	DoLaunch ARGS_DECL((struct AttrRec *, struct ObjRec *));
extern void	SetReplaceAttrValueCallback ARGS_DECL((ReplAttrValueCallback*,
		                                       void *pv_userdata));
extern int	ReplaceAttrFirstValue ARGS_DECL((struct ObjRec *,
		                                 struct AttrRec *, char *));
extern int	ReplaceAttrAllValues ARGS_DECL((struct ObjRec *,
		                                struct AttrRec *,
		                                struct StrRec **ppTopStr,
		                                struct StrRec **ppBotStr));
extern void	JustReadFileIntoAttr ARGS_DECL((FILE*, struct AttrRec *attr_ptr,
		                                struct ObjRec *attr_owner_obj));
extern int	DoExec ARGS_DECL((struct AttrRec *, struct ObjRec *));
extern void	ResetExec ARGS_DECL((int nStart));
extern void	ExecCmdsFromFile ARGS_DECL((char*));
extern void	ExecCmdsFromTmp ARGS_DECL((char *tmp_fname));
extern void	StartExecCmdsFromFile ARGS_DECL((void));
extern int	BeginExecCommandsFromBuffer ARGS_DECL((void));
extern int	ExecACommandFromBuffer ARGS_DECL((char *buf, int *pn_quit));
extern void	EndExecCommandsFromBuffer ARGS_DECL((void));
extern void	CleanUpExec ARGS_DECL((void));
extern void	InitExec ARGS_DECL((void));

#ifdef _INCLUDE_FROM_EXEC_C_
#undef extern
#ifndef _NO_RECURSIVE_EXTERN
#define extern extern
#endif /* ~_NO_RECURSIVE_EXTERN */
#endif /*_INCLUDE_FROM_EXEC_C_*/

#endif /*_EXEC_E_*/