123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121 |
|
/*******************************************************************************
copyright: Copyright (c) 2007 Kris Bell. All rights reserved
license: BSD style: $(LICENSE)
version: Oct 2007: Initial release
author: Kris
Synchronized, formatted console output. Usage is:
---
Trace.formatln ("hello {}", "world");
---
Note that this has become merely a wrapper around Log.formatln(), so
please use that API instead
*******************************************************************************/
module tango.util.log.Trace;
public import tango.util.log.Config;
/*******************************************************************************
redirect to the Log module
*******************************************************************************/
public alias Log Trace;
/*******************************************************************************
*******************************************************************************/
debug (Trace)
{
void main()
{
Trace.formatln ("hello {}", "world");
Trace ("hello {}", "world");
}
}
/+
/**********************************************************************
Print a range of raw memory as a hex dump.
Characters in range 0x20..0x7E are printed, all others are
shown as dots.
----
000000: 47 49 46 38 39 61 10 00 10 00 80 00 00 48 5D 8C GIF89a.......H].
000010: FF FF FF 21 F9 04 01 00 00 01 00 2C 00 00 00 00 ...!.......,....
000020: 10 00 10 00 00 02 11 8C 8F A9 CB ED 0F A3 84 C0 ................
000030: D4 70 A7 DE BC FB 8F 14 00 3B .p.......;
----
**********************************************************************/
final void memory (void[] mem)
{
auto data = cast(ubyte[]) mem;
synchronized (mutex)
{
for( int row = 0; row < data.length; row += 16 )
{
// print relative offset
convert.convert (&sink, "{:X6}: ", row );
// print data bytes
for( int idx = 0; idx < 16 ; idx++ )
{
// print byte or stuffing spaces
if ( idx + row < data.length )
convert (&sink, "{:X2} ", data[ row + idx ] );
else
output.write (" ");
// after each 4 bytes group an extra space
if (( idx & 0x03 ) == 3 )
output.write (" ");
}
// ascii view
// all char 0x20..0x7e are OK for printing,
// other values are printed as a dot
ubyte[16] ascii = void;
int asciiIdx;
for ( asciiIdx = 0;
(asciiIdx<16) && (asciiIdx+row < data.length);
asciiIdx++ )
{
ubyte c = data[ row + asciiIdx ];
if ( c < 0x20 || c > 0x7E )
c = '.';
ascii[asciiIdx] = c;
}
output.write (ascii[ 0 .. asciiIdx ]);
output.write (Eol);
}
if (flushLines)
output.flush;
}
}
+/
|