add missing va_end() in bmp.c's write_packed()
[imager.git] / log.h
1 #ifndef _LOG_H_
2 #define _LOG_H_
3
4 #include <stdio.h>
5 #include <stdarg.h>
6 #include <time.h>
7 #include "imdatatypes.h"
8 /* 
9    input:  name of file to log too
10    input:  onoff, 0 means no logging
11    global: creates a global variable FILE* lg_file
12 */
13
14 int im_init_log(pIMCTX, const char *name, int onoff );
15 #define i_init_log(name, onoff) im_init_log(aIMCTX, name, onoff)
16 #ifndef IMAGER_NO_CONTEXT
17 void i_fatal ( int exitcode,const char *fmt, ... );
18 #endif
19 void im_fatal (pIMCTX, int exitcode,const char *fmt, ... );
20 void im_lhead ( pIMCTX, const char *file, int line  );
21 void i_lhead ( const char *file, int line  );
22 void i_loog(int level,const char *msg, ... ) I_FORMAT_ATTR(2,3);
23 void im_loog(pIMCTX, int level,const char *msg, ... ) I_FORMAT_ATTR(3,4);
24
25 /*
26 =item im_log((aIMCTX, level, format, ...))
27 =category Logging
28
29 This is the main entry point to logging. Note that the extra set of
30 parentheses are required due to limitations in C89 macros.
31
32 This will format a string with the current file and line number to the
33 log file if logging is enabled.
34
35 This must be called with a context object defined by one of the
36 C<dIMCTX> macros in scope.
37
38 This can also be called as C<mm_log((level, format, args))> in which
39 case the currently active context is used and any in scope context is
40 ignored.
41
42 =cut
43 */
44
45 #ifdef IMAGER_LOG
46 #ifndef IMAGER_NO_CONTEXT
47 #define mm_log(x) { i_lhead(__FILE__,__LINE__); i_loog x; } 
48 #endif
49 #define im_log(x) { im_lhead(aIMCTX, __FILE__,__LINE__); im_loog x; } 
50 #else
51 #define mm_log(x)
52 #define im_log(x)
53 #endif
54
55
56 #endif /* _LOG_H_ */