make_ndx now allows nearly all characters in atom and residue names, especially ...
[gromacs.git] / include / gmx_fatal.h
blob132ebae998c2b3e75c5ba43790b24393da4888f7
2 /*
3 *
4 * This source code is part of
5 *
6 * G R O M A C S
7 *
8 * GROningen MAchine for Chemical Simulations
9 *
10 * VERSION 3.2.0
11 * Written by David van der Spoel, Erik Lindahl, Berk Hess, and others.
12 * Copyright (c) 1991-2000, University of Groningen, The Netherlands.
13 * Copyright (c) 2001-2004, The GROMACS development team,
14 * check out http://www.gromacs.org for more information.
16 * This program is free software; you can redistribute it and/or
17 * modify it under the terms of the GNU General Public License
18 * as published by the Free Software Foundation; either version 2
19 * of the License, or (at your option) any later version.
21 * If you want to redistribute modifications, please consider that
22 * scientific software is very special. Version control is crucial -
23 * bugs must be traceable. We will be happy to consider code for
24 * inclusion in the official distribution, but derived work must not
25 * be called official GROMACS. Details are found in the README & COPYING
26 * files - if they are missing, get the official version at www.gromacs.org.
28 * To help us fund GROMACS development, we humbly ask that you cite
29 * the papers on the package - you can find them in the top README file.
31 * For more info, check our website at http://www.gromacs.org
33 * And Hey:
34 * Gromacs Runs On Most of All Computer Systems
37 #ifndef _fatal_h
38 #define _fatal_h
40 #ifdef HAVE_CONFIG_H
41 #include <config.h>
42 #endif
44 #include <stdio.h>
45 #include <stdarg.h>
46 #include <errno.h>
47 #include "typedefs.h"
49 #ifdef __cplusplus
50 extern "C" {
51 #endif
53 void
54 _where(const char *file,int line);
55 #define where() _where(__FILE__,__LINE__)
56 /* Prints filename and line to stdlog and only on amba memvail */
58 void
59 _set_fatal_tmp_file(const char *fn, const char *file, int line);
60 #define set_fatal_tmp_file(fn) _set_fatal_tmp_file(fn,__FILE__,__LINE__)
61 /* set filename to be removed when fatal_error is called */
63 void
64 _unset_fatal_tmp_file(const char *fn, const char *file, int line);
65 #define unset_fatal_tmp_file(fn) _unset_fatal_tmp_file(fn,__FILE__,__LINE__)
66 /* unsets filename to be removed */
68 void
69 gmx_fatal(int fatal_errno,const char *file,int line,const char *fmt,...);
70 #define FARGS 0,__FILE__,__LINE__
72 * Routine gmx_fatal prints
74 * "fatal error file %s line %s \n\t "
76 * followed by the string specified by fmt and supplied parameters. If
77 * errno is 0, only the message and arguments are printed. If errno is
78 * a legal system errno or -1, a perror like message is printed after the
79 * first message, if errno is -1, the last system errno will be used.
80 * The format of fmt is that like printf etc, only %d, %x, %c, %f, %g and %s
81 * are allowed as format specifiers.
83 * Tip of the week:
84 * call this function using the FARGS macro:
85 * gmx_fatal(FARGS,fmt,...)
88 extern void
89 gmx_fatal_collective(int f_errno,const char *file,int line,
90 t_commrec *cr,gmx_domdec_t *dd,
91 const char *fmt,...);
92 /* As gmx_fatal, but only the master process prints the error message.
93 * This should only be called one of the following two situations:
94 * 1) On all nodes in cr->mpi_comm_mysim, with cr!=NULL,dd==NULL.
95 * 2) On all nodes in dd->mpi_comm_all, with cr==NULL,dd!=NULL.
96 * This will call MPI_Finalize instead of MPI_Abort when possible,
97 * This is useful for handling errors in code that is executed identically
98 * for all processes.
101 void
102 gmx_fatal_set_log_file(FILE *fp);
103 /* Set the log file for printing error messages */
105 void
106 _invalid_case(const char *fn,int line);
107 #define invalid_case() _invalid_case(__FILE__,__LINE__)
108 /* Issue a warning stating 'Invalid case in switch' */
110 extern void _unexpected_eof(const char *fn,int line,const char *srcfn,int srcline);
111 #define unexpected_eof(fn,line) _unexpected_eof(fn,line,__FILE__,__LINE__)
114 * Functions can write to this file for debug info
115 * Before writing to it, it should be checked whether
116 * the file is not NULL:
117 * if (debug) fprintf(debug,"%s","Hallo");
119 extern FILE *debug;
120 extern bool gmx_debug_at;
122 void init_debug (const int dbglevel,const char *dbgfile);
124 extern bool bDebugMode(void);
125 /* Return TRUE when the program was started in debug mode */
127 #if (defined __sgi && defined USE_SGI_FPE)
128 extern void doexceptions(void);
129 /* Set exception handlers for debugging */
130 #endif
132 /* warn_str is allowed to be NULL.
134 extern void _range_check(int n,int n_min,int n_max,const char *warn_str,
135 const char *var,
136 const char *file,int line);
138 #define range_check_mesg(n,n_min,n_max,str) _range_check(n,n_min,n_max,str,#n,__FILE__,__LINE__)
139 /* Range check will terminate with an error message if not
140 * n E [ n_min, n_max >
141 * That is n_min is inclusive but not n_max.
144 #define range_check(n,n_min,n_max) _range_check(n,n_min,n_max,NULL,#n,__FILE__,__LINE__)
145 /* Range check will terminate with an error message if not
146 * n E [ n_min, n_max >
147 * That is n_min is inclusive but not n_max.
150 extern char *gmx_strerror(const char *key);
151 /* Return error message corresponding to the key.
152 * Maybe a multi-line message.
153 * The messages are stored in src/gmxlib/fatal.c
156 extern void _gmx_error(const char *key,const char *msg,const char *file,int line);
157 #define gmx_error(key,msg) _gmx_error(key,msg,__FILE__,__LINE__)
158 /* Error msg of type key is generated and the program is
159 * terminated unless and error handle is set (see below)
162 /* Some common error types */
163 #define gmx_bug(msg) gmx_error("bug",msg)
164 #define gmx_call(msg) gmx_error("call",msg)
165 #define gmx_comm(msg) gmx_error("comm",msg)
166 #define gmx_file(msg) gmx_error("file",msg)
167 #define gmx_cmd(msg) gmx_error("cmd",msg)
168 #define gmx_impl(msg) gmx_error("impl",msg)
169 #define gmx_incons(msg) gmx_error("incons",msg)
170 #define gmx_input(msg) gmx_error("input",msg)
171 #define gmx_mem(msg) gmx_error("mem",msg)
172 #define gmx_open(fn) gmx_error("open",fn)
174 void
175 set_gmx_error_handler(void (*func)(const char *msg));
176 /* An error function will be called that terminates the program
177 * with a fatal error, unless you override it with another function.
178 * i.e.:
179 * set_gmx_error_handler(my_func);
180 * where my_func is a function that takes a string as an argument.
181 * The string may be a multi-line string.
184 extern void gmx_warning(const char *fmt,...);
185 /* Print a warning message to stderr.
186 * The format of fmt is that like printf etc, only %d, %x, %c, %f, %g and %s
187 * are allowed as format specifiers.
188 * The message string should NOT start with "WARNING"
189 * and should NOT end with a newline.
192 #ifdef __cplusplus
194 #endif
196 #endif /* _fatal_h */