1 
2 /* pngdebug.h - Debugging macros for libpng, also used in pngtest.c
3  *
4  * Last changed in libpng 1.6.8 [December 19, 2013]
5  * Copyright (c) 1998-2002,2004,2006-2013 Glenn Randers-Pehrson
6  * (Version 0.96 Copyright (c) 1996, 1997 Andreas Dilger)
7  * (Version 0.88 Copyright (c) 1995, 1996 Guy Eric Schalnat, Group 42, Inc.)
8  *
9  * This code is released under the libpng license.
10  * For conditions of distribution and use, see the disclaimer
11  * and license in png.h
12  */
13 
14 /* Define PNG_DEBUG at compile time for debugging information.  Higher
15  * numbers for PNG_DEBUG mean more debugging information.  This has
16  * only been added since version 0.95 so it is not implemented throughout
17  * libpng yet, but more support will be added as needed.
18  *
19  * png_debug[1-2]?(level, message ,arg{0-2})
20  *   Expands to a statement (either a simple expression or a compound
21  *   do..while(0) statement) that outputs a message with parameter
22  *   substitution if PNG_DEBUG is defined to 2 or more.  If PNG_DEBUG
23  *   is undefined, 0 or 1 every png_debug expands to a simple expression
24  *   (actually ((void)0)).
25  *
26  *   level: level of detail of message, starting at 0.  A level 'n'
27  *          message is preceded by 'n' 3-space indentations (not implemented
28  *          on Microsoft compilers unless PNG_DEBUG_FILE is also
29  *          defined, to allow debug DLL compilation with no standard IO).
30  *   message: a printf(3) style text string.  A trailing '\n' is added
31  *            to the message.
32  *   arg: 0 to 2 arguments for printf(3) style substitution in message.
33  */
34 #ifndef PNGDEBUG_H
35 #define PNGDEBUG_H
36 /* These settings control the formatting of messages in png.c and pngerror.c */
37 /* Moved to pngdebug.h at 1.5.0 */
38 #  ifndef PNG_LITERAL_SHARP
39 #    define PNG_LITERAL_SHARP 0x23
40 #  endif
41 #  ifndef PNG_LITERAL_LEFT_SQUARE_BRACKET
42 #    define PNG_LITERAL_LEFT_SQUARE_BRACKET 0x5b
43 #  endif
44 #  ifndef PNG_LITERAL_RIGHT_SQUARE_BRACKET
45 #    define PNG_LITERAL_RIGHT_SQUARE_BRACKET 0x5d
46 #  endif
47 #  ifndef PNG_STRING_NEWLINE
48 #    define PNG_STRING_NEWLINE "\n"
49 #  endif
50 
51 #ifdef PNG_DEBUG
52 #  if (PNG_DEBUG > 0)
53 #    if !defined(PNG_DEBUG_FILE) && defined(_MSC_VER)
54 #      include <crtdbg.h>
55 #      if (PNG_DEBUG > 1)
56 #        ifndef _DEBUG
57 #          define _DEBUG
58 #        endif
59 #        ifndef png_debug
60 #          define png_debug(l,m)  _RPT0(_CRT_WARN,m PNG_STRING_NEWLINE)
61 #        endif
62 #        ifndef png_debug1
63 #          define png_debug1(l,m,p1)  _RPT1(_CRT_WARN,m PNG_STRING_NEWLINE,p1)
64 #        endif
65 #        ifndef png_debug2
66 #          define png_debug2(l,m,p1,p2) \
67              _RPT2(_CRT_WARN,m PNG_STRING_NEWLINE,p1,p2)
68 #        endif
69 #      endif
70 #    else /* PNG_DEBUG_FILE || !_MSC_VER */
71 #      ifndef PNG_STDIO_SUPPORTED
72 #        include <stdio.h> /* not included yet */
73 #      endif
74 #      ifndef PNG_DEBUG_FILE
75 #        define PNG_DEBUG_FILE stderr
76 #      endif /* PNG_DEBUG_FILE */
77 
78 #      if (PNG_DEBUG > 1)
79 #        ifdef __STDC__
80 #          ifndef png_debug
81 #            define png_debug(l,m) \
82        do { \
83        int num_tabs=l; \
84        fprintf(PNG_DEBUG_FILE,"%s" m PNG_STRING_NEWLINE,(num_tabs==1 ? "   " : \
85          (num_tabs==2 ? "      " : (num_tabs>2 ? "         " : "")))); \
86        } while (0)
87 #          endif
88 #          ifndef png_debug1
89 #            define png_debug1(l,m,p1) \
90        do { \
91        int num_tabs=l; \
92        fprintf(PNG_DEBUG_FILE,"%s" m PNG_STRING_NEWLINE,(num_tabs==1 ? "   " : \
93          (num_tabs==2 ? "      " : (num_tabs>2 ? "         " : ""))),p1); \
94        } while (0)
95 #          endif
96 #          ifndef png_debug2
97 #            define png_debug2(l,m,p1,p2) \
98        do { \
99        int num_tabs=l; \
100        fprintf(PNG_DEBUG_FILE,"%s" m PNG_STRING_NEWLINE,(num_tabs==1 ? "   " : \
101          (num_tabs==2 ? "      " : (num_tabs>2 ? "         " : ""))),p1,p2);\
102        } while (0)
103 #          endif
104 #        else /* __STDC __ */
105 #          ifndef png_debug
106 #            define png_debug(l,m) \
107        do { \
108        int num_tabs=l; \
109        char format[256]; \
110        snprintf(format,256,"%s%s%s",(num_tabs==1 ? "\t" : \
111          (num_tabs==2 ? "\t\t":(num_tabs>2 ? "\t\t\t":""))), \
112          m,PNG_STRING_NEWLINE); \
113        fprintf(PNG_DEBUG_FILE,format); \
114        } while (0)
115 #          endif
116 #          ifndef png_debug1
117 #            define png_debug1(l,m,p1) \
118        do { \
119        int num_tabs=l; \
120        char format[256]; \
121        snprintf(format,256,"%s%s%s",(num_tabs==1 ? "\t" : \
122          (num_tabs==2 ? "\t\t":(num_tabs>2 ? "\t\t\t":""))), \
123          m,PNG_STRING_NEWLINE); \
124        fprintf(PNG_DEBUG_FILE,format,p1); \
125        } while (0)
126 #          endif
127 #          ifndef png_debug2
128 #            define png_debug2(l,m,p1,p2) \
129        do { \
130        int num_tabs=l; \
131        char format[256]; \
132        snprintf(format,256,"%s%s%s",(num_tabs==1 ? "\t" : \
133          (num_tabs==2 ? "\t\t":(num_tabs>2 ? "\t\t\t":""))), \
134          m,PNG_STRING_NEWLINE); \
135        fprintf(PNG_DEBUG_FILE,format,p1,p2); \
136        } while (0)
137 #          endif
138 #        endif /* __STDC __ */
139 #      endif /* (PNG_DEBUG > 1) */
140 
141 #    endif /* _MSC_VER */
142 #  endif /* (PNG_DEBUG > 0) */
143 #endif /* PNG_DEBUG */
144 #ifndef png_debug
145 #  define png_debug(l, m) ((void)0)
146 #endif
147 #ifndef png_debug1
148 #  define png_debug1(l, m, p1) ((void)0)
149 #endif
150 #ifndef png_debug2
151 #  define png_debug2(l, m, p1, p2) ((void)0)
152 #endif
153 #endif /* PNGDEBUG_H */
154