diff options
| author | rjohnson <rjohnson> | 1998-03-26 14:45:59 (GMT) | 
|---|---|---|
| committer | rjohnson <rjohnson> | 1998-03-26 14:45:59 (GMT) | 
| commit | 2b5738da524e944cda39e24c0a87b745a43bd8c3 (patch) | |
| tree | 6e8c9473978f6dab66c601e911721a7bd9d70b1b /generic/panic.c | |
| parent | c6a259aeeca4814a97cf6694814c63e74e4e18fa (diff) | |
| download | tcl-2b5738da524e944cda39e24c0a87b745a43bd8c3.zip tcl-2b5738da524e944cda39e24c0a87b745a43bd8c3.tar.gz tcl-2b5738da524e944cda39e24c0a87b745a43bd8c3.tar.bz2 | |
Initial revision
Diffstat (limited to 'generic/panic.c')
| -rw-r--r-- | generic/panic.c | 96 | 
1 files changed, 96 insertions, 0 deletions
| diff --git a/generic/panic.c b/generic/panic.c new file mode 100644 index 0000000..420a157 --- /dev/null +++ b/generic/panic.c @@ -0,0 +1,96 @@ +/*  + * panic.c -- + * + *	Source code for the "panic" library procedure for Tcl; + *	individual applications will probably override this with + *	an application-specific panic procedure. + * + * Copyright (c) 1988-1993 The Regents of the University of California. + * Copyright (c) 1994 Sun Microsystems, Inc. + * + * See the file "license.terms" for information on usage and redistribution + * of this file, and for a DISCLAIMER OF ALL WARRANTIES. + * + * SCCS: @(#) panic.c 1.15 96/09/12 14:55:25 + */ + +#include <stdio.h> +#ifdef NO_STDLIB_H +#   include "../compat/stdlib.h" +#else +#   include <stdlib.h> +#endif + +#define panic panicDummy +#include "tcl.h" +#undef panic + +EXTERN void		panic _ANSI_ARGS_((char *format, char *arg1, +			    char *arg2, char *arg3, char *arg4, char *arg5, +			    char *arg6, char *arg7, char *arg8)); + +/* + * The panicProc variable contains a pointer to an application + * specific panic procedure. + */ + +void (*panicProc) _ANSI_ARGS_(TCL_VARARGS(char *,format)) = NULL; + +/* + *---------------------------------------------------------------------- + * + * Tcl_SetPanicProc -- + * + *	Replace the default panic behavior with the specified functiion. + * + * Results: + *	None. + * + * Side effects: + *	Sets the panicProc variable. + * + *---------------------------------------------------------------------- + */ + +void +Tcl_SetPanicProc(proc) +    void (*proc) _ANSI_ARGS_(TCL_VARARGS(char *,format)); +{ +    panicProc = proc; +} + +/* + *---------------------------------------------------------------------- + * + * panic -- + * + *	Print an error message and kill the process. + * + * Results: + *	None. + * + * Side effects: + *	The process dies, entering the debugger if possible. + * + *---------------------------------------------------------------------- + */ + +	/* VARARGS ARGSUSED */ +void +panic(format, arg1, arg2, arg3, arg4, arg5, arg6, arg7, arg8) +    char *format;		/* Format string, suitable for passing to +				 * fprintf. */ +    char *arg1, *arg2, *arg3;	/* Additional arguments (variable in number) +				 * to pass to fprintf. */ +    char *arg4, *arg5, *arg6, *arg7, *arg8; +{ +    if (panicProc != NULL) { +	(void) (*panicProc)(format, arg1, arg2, arg3, arg4, arg5, arg6, arg7, arg8); +    } else { +	(void) fprintf(stderr, format, arg1, arg2, arg3, arg4, arg5, arg6, +		arg7, arg8); +	(void) fprintf(stderr, "\n"); +	(void) fflush(stderr); +	abort(); +    } +} | 
