#ifndef	_ETM_H

#define	_ETM_H

/*
 * etm.h - Exception and Termination Manager header file
 */


/*
 * Values that can be passed to ETMSetSignalProc() to turn off signals
 * or restore to default action.  Pretty ugly.  Hope no one ever uses
 * them!  (Because depending on the compiler, it's possible these may
 * actually be the same...)
 */

# define	ETMSigDefault	(${ETMVOIDTYPE} (*)())0
# define	ETMSigIgnore	(${ETMVOIDTYPE} (*)())1


typedef	${ETMVOIDTYPE}	ETMProcRetType;
typedef	ETMProcRetType (*ETMProcPtr) ();


/*
 * These defines cause failure at link time if this header
 * file wasn't included in each source file using ETM functions.
 */

# define	ETMInit			_ETMInit
# define	ETMEnd			_ETMEnd
# define	ETMAddShutdownProc	_ETMAddShutdownProc
# define	ETMRemoveShutdownProc	_ETMRemoveShutdownProc
# define	ETMSetSignalProc	_ETMSetSignalProc
# define	ETMGetSignalProc	_ETMGetSignalProc
# define	ETMSetPrintProc		_ETMSetPrintProc
# define	ETMGetPrintProc		_ETMGetPrintProc
# define	ETMSetExitStatus	_ETMSetExitStatus
# define	ETMGetExitStatus	_ETMGetExitStatus
# define	ETMSetAbort		_ETMSetAbort
# define	ETMGetAbort		_ETMGetAbort
# define	ETMPanic		_ETMPanic
# define	ETMMsg			_ETMMsg


/* Public routines */

extern ETMProcRetType	ETMInit ();
extern ETMProcRetType	ETMEnd ();
extern ETMProcRetType	ETMAddShutdownProc ();
extern ETMProcRetType	ETMRemoveShutdownProc ();
extern ETMProcRetType	ETMSetSignalProc ();
extern ETMProcPtr	ETMGetSignalProc ();
extern ETMProcRetType	ETMSetPrintProc ();
extern ETMProcPtr	ETMGetPrintProc ();
extern ETMProcRetType	ETMSetExitStatus ();
extern int		ETMGetExitStatus ();
extern ETMProcRetType	ETMSetAbort ();
extern int		ETMGetAbort ();
#if __STDC__
extern ETMProcRetType	ETMPanic (char *fmt,...);
extern ETMProcRetType	ETMMsg (char *fmt,...);
#else
extern ETMProcRetType	ETMPanic ();
extern ETMProcRetType	ETMMsg ();
#endif

/* backward-compatibility defines */

# define	ETMShutdownRegister	ETMAddShutdownProc
# define	ETMShutdownDeregister	ETMRemoveShutdownProc
# define	ETMSignalRegister	ETMSetSignalProc
# define	ETMPrintRegister	ETMSetPrintProc
# define	ETMStatusRegister	ETMSetExitStatus

#endif	/* _ETM_H */
