1 #include "sys.h"
2 #include <errno.h>
3 #include <libcwd/debug.h>
4 #ifdef LIBCWD_USE_STRSTREAM
5 #include <strstream>
6 #else
7 #include <sstream>
8 #endif
9 
10 libcwd::debug_ct local_debug_object;
11 #define MyDout(cntrl, data) LibcwDout(LIBCWD_DEBUGCHANNELS, local_debug_object, cntrl, data)
12 
13 #ifdef THREADTEST
14 pthread_mutex_t buf_mutex = PTHREAD_MUTEX_INITIALIZER;
15 #endif
16 
17 MAIN_FUNCTION
18 { PREFIX_CODE
19 #ifdef LIBCWD_USE_STRSTREAM
20   std::ostrstream buf;
21 #elif !CWDEBUG_ALLOC
22   std::ostringstream buf;
23 #else
24 #if __GNUC__ < 3
25   ::std::basic_stringstream<char, string_char_traits<char>, ::libcwd::_private_::userspace_allocator> buf;
26 #else
27   ::std::basic_stringstream<char, ::std::char_traits<char>, ::libcwd::_private_::userspace_allocator> buf;
28 #endif
29 #endif
30 
31   Debug( check_configuration() );
32   Debug( local_debug_object.on() );
33   Debug( libcw_do.on() );
34   Debug( dc::notice.on() );
35 
36   Debug( libcw_do.margin().assign("MARGIN", 6) );
37   Debug( libcw_do.marker().assign("MARKER", 6) );
38   Debug( libcw_do.set_indent(3) );
39   Debug( local_debug_object.margin().assign("MARGIN", 6) );
40   Debug( local_debug_object.marker().assign("MARKER", 6) );
41   Debug( local_debug_object.set_indent(3) );
42 
43   Dout(dc::notice|nonewline_cf, "x");
44   Dout(dc::notice|nonewline_cf, "y");
45   Dout(dc::notice, "z<newline>");
46 
47   Dout(dc::notice, "<no flags>");
48   Dout(dc::notice|noprefix_cf, "noprefix_cf");
49   Dout(dc::notice|nolabel_cf, "nolabel_cf");
50   Dout(dc::notice|blank_margin_cf, "blank_margin_cf");
51   Dout(dc::notice|blank_label_cf, "blank_label_cf");
52   Dout(dc::notice|blank_marker_cf, "blank_marker_cf");
53 
54   Dout(dc::notice|noprefix_cf|nonewline_cf, "a");
55   Dout(dc::notice|nolabel_cf|nonewline_cf, "b");
56   Dout(dc::notice|blank_margin_cf|nonewline_cf, "c");
57   Dout(dc::notice|blank_label_cf|nonewline_cf, "d");
58   Dout(dc::notice|blank_marker_cf|nonewline_cf, "e");
59   Dout(dc::notice, "f");
60 
61   Dout(dc::notice|nolabel_cf|noprefix_cf, "nolabel_cf|noprefix_cf");
62   Dout(dc::notice|blank_margin_cf|noprefix_cf, "blank_margin_cf|noprefix_cf");
63   Dout(dc::notice|blank_label_cf|noprefix_cf, "blank_label_cf|noprefix_cf");
64   Dout(dc::notice|blank_marker_cf|noprefix_cf, "blank_marker_cf|noprefix_cf");
65 
66   Dout(dc::notice|blank_margin_cf|nolabel_cf, "blank_margin_cf|nolabel_cf");
67   Dout(dc::notice|blank_label_cf|nolabel_cf, "blank_label_cf|nolabel_cf");
68   Dout(dc::notice|blank_marker_cf|nolabel_cf, "blank_marker_cf|nolabel_cf");
69 
70   Dout(dc::notice|blank_label_cf|blank_margin_cf, "blank_label_cf|blank_margin_cf");
71   Dout(dc::notice|blank_marker_cf|blank_margin_cf, "blank_marker_cf|blank_margin_cf");
72 
73   Dout(dc::notice|blank_marker_cf|blank_label_cf, "blank_marker_cf|blank_label_cf");
74 
75   errno = EAGAIN;
76   Dout(dc::notice|error_cf, "error_cf");
77 
78   Debug( local_debug_object.set_ostream(&buf COMMA_THREADED(&buf_mutex)) );
79   MyDout(dc::notice, "This is written to buf");
80   MyDout(dc::notice|cerr_cf, "cerr_cf");
81 #if __GNUC__ == 2 && __GNUC_MINOR__ < 97
82   buf.rdbuf()->pubseekoff(0, std::ios::end);
83 #else
84   buf.rdbuf()->pubseekoff(0, std::ios_base::end);
85 #endif
86 
87   EXIT(0);
88 }
89