#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   (void (*)())0
# define        ETMSigIgnore    (void (*)())1


typedef void    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 */