ecere/gui/Window: Fixed lock-up closing code editor while Finding in Files on Unix
[sdk] / extras / include / dpl.c
1 // dpl.c
2 // Functions:
3 //    _dplf  - Debug Print Line Format
4 //    _dpclf - Debug Print Channel Line Format
5 // Usage:
6 //    #define _DPL_ON
7 //    #include <dpl.c>
8 //    _dplf(int indent, const char * format, ...);
9 //    _dpclf(const char ** channelNames, int channel, int indent, const char * format, ...);
10
11 #include <stdarg.h>
12 #include <stdio.h>
13 #include <stdbool.h>
14
15 #define MAX_F_STRING 1025
16
17 // Debug Print Line Format (_dplf)
18 #ifdef _DPL_ON
19 #define _dplf(...) __dplf(__FILE__, __LINE__, ##__VA_ARGS__)
20 #else
21 #define _dplf(...)
22 #endif
23 void __dplf(const char * file, int line, int indent, const char * format, ...)
24 {
25    int c;
26    char string[MAX_F_STRING];
27    va_list args;
28    va_start(args, format);
29    vsnprintf(string, sizeof(string), format, args);
30    string[sizeof(string)-1] = '\0';
31    printf("%s:% 5d: ", file, line);
32    for(c = 0; c<indent; c++)
33       printf(" ");
34    printf("%s\n", string);
35    va_end(args);
36 }
37
38 // Debug Print Channel Line Format (_dpclf)
39 #ifdef _DPL_ON
40 #define _dpclf(...) __dpclf(__FILE__, __LINE__, ##__VA_ARGS__)
41 #else
42 #define _dpclf(...)
43 #endif
44 void __dpclf(const char * file, int line, const char ** channels, int channel, int indent, const char * format, ...)
45 {
46    bool chan = channel && channels && channels[channel];
47    if(chan || !channels)
48    {
49       int c;
50       char string[MAX_F_STRING];
51       va_list args;
52       va_start(args, format);
53       vsnprintf(string, sizeof(string), format, args);
54       string[sizeof(string)-1] = '\0';
55       printf("%s:% 5d: %s%s", file, line, chan ? channels[channel] : "", chan && channels[channel][0] ? ": " : "");
56       for(c = 0; c<indent; c++)
57          printf(" ");
58       printf("%s\n", string);
59       va_end(args);
60    }
61 }