65 lines
1.4 KiB
C++
65 lines
1.4 KiB
C++
//| Copyright: (C) 2020-2024 Kevin Larke <contact AT larke DOT org>
|
|
//| License: GNU GPL version 3.0 or above. See the accompanying LICENSE file.
|
|
#include <stdio.h>
|
|
#include <stdarg.h>
|
|
|
|
#include "rpt.h"
|
|
|
|
#define RPT_BUF_N 64
|
|
char RPT_BUF[ RPT_BUF_N ];
|
|
|
|
void vrpt( printCallback_t printCbFunc, const char* fmt, va_list vl )
|
|
{
|
|
if( printCbFunc != nullptr )
|
|
{
|
|
vsnprintf(RPT_BUF,RPT_BUF_N,fmt,vl);
|
|
RPT_BUF[RPT_BUF_N-1] = '\0';
|
|
printCbFunc(RPT_BUF);
|
|
}
|
|
}
|
|
|
|
void rpt( printCallback_t printCbFunc, const char* fmt, ... )
|
|
{
|
|
va_list vl;
|
|
va_start(vl,fmt);
|
|
vrpt(printCbFunc,fmt,vl);
|
|
va_end(vl);
|
|
}
|
|
|
|
|
|
void rptHex( printCallback_t printCbFunc, const void* buf, unsigned bufByteN, const char* label, bool asciiFl )
|
|
{
|
|
const unsigned char* data = static_cast<const unsigned char*>(buf);
|
|
const unsigned colN = 8;
|
|
unsigned ci = 0;
|
|
|
|
if( label != nullptr )
|
|
rpt(printCbFunc,"%s\n",label);
|
|
|
|
for(unsigned i=0; i<bufByteN; ++i)
|
|
{
|
|
rpt(printCbFunc,"%02x ", data[i] );
|
|
|
|
++ci;
|
|
if( ci == colN || i+1 == bufByteN )
|
|
{
|
|
unsigned n = ci==colN ? colN-1 : ci-1;
|
|
|
|
for(unsigned j=0; j<(colN-n)*3; ++j)
|
|
rpt(printCbFunc," ");
|
|
|
|
if( asciiFl )
|
|
{
|
|
for(unsigned j=i-n; j<=i; ++j)
|
|
if( 32<= data[j] && data[j] < 127 )
|
|
rpt(printCbFunc,"%c",data[j]);
|
|
else
|
|
rpt(printCbFunc,".");
|
|
}
|
|
|
|
rpt(printCbFunc,"\n");
|
|
ci = 0;
|
|
}
|
|
}
|
|
}
|