xdump.c File Reference

Print Hex Dump: Implementation More...

#include "..\includes.h"

Macros

#define INC_XDUMP
 
#define EOS   '\0'
 

Functions

void xd_config_output (void *output)
 
void outline (char *dat, int16_t len)
 
void xd (void *mem, uint32_t bufl, int16_t dochar, uint32_t address, size_t size)
 

Variables

static int16_t bytesperline = 16
 
static int16_t doublechar = 0
 
static int16_t dflen = 2
 
static uint32_t fileaddr
 
static char lineecho [32]
 
static tpOutputFunc _out_stream =NULL
 

Detailed Description

                          _         _             _
                       __| |    ___(_) ____ _ __ | |_
                      / _` |   / __| |/ _` | '_ \| __|
                     | (_| | _ \__ \ | (_| | | | | |_
                      \__,_|(_) ___/_|\__, |_| |_|\__|
                     Signalprocessing |___/ Technology
Author
D.SignT GmbH & Co. KG, Claus Hermbusche
Version
2.91
Date
2019-04-17

Macro Definition Documentation

#define INC_XDUMP

include hex dump module: xdump.h

#define EOS   '\0'

Function Documentation

void xd_config_output ( void *  output)
109 {
110  _out_stream = (tpOutputFunc)(uint32_t)output;
111 }
#define tpOutputFunc
Definition: net.h:907
unsigned int uint32_t
Definition: stdint.h:47
static tpOutputFunc _out_stream
Definition: xdump.c:96
void outline ( char *  dat,
int16_t  len 
)
125 {
126  /***************************************************************************
127  locals
128  ***************************************************************************/
129  char oline[132];
130  char outedit[80];
131  int16_t i;
132  char oc[2];
133  int16_t shortfall;
134  char b;
135 
136  /***************************************************************************
137  start line with address
138  ***************************************************************************/
139  sprintf (oline, " %08"PRIx32, fileaddr);
140  strcat (oline, ":");
141 
142  /***************************************************************************
143  hex dump
144  ***************************************************************************/
145  for (i = 0; i < len; i++)
146  {
147  sprintf (outedit, "%02X", (unsigned char)dat[i]);
148  strcat (oline, (i == (bytesperline / 2)) ? " " : " ");
149  strcat (oline, outedit);
150  }
151 
152  /***************************************************************************
153  ascii output
154  ***************************************************************************/
155  if (doublechar)
156  {
157  /***********************************************************************
158  add blanks if necessary
159  ***********************************************************************/
160  shortfall = ((bytesperline - len) * (dflen + 1)) + (len <= (bytesperline / 2) ? 1 : 0);
161 
162  while (shortfall-- > 0)
163  {
164  strcat (oline, " ");
165  }
166  oc[1] = EOS;
167 
168  /***********************************************************************
169  add hex - ASCII separator
170  ***********************************************************************/
171  strcat (oline, " | ");
172 
173  /***********************************************************************
174  copy ASCII chars
175  ***********************************************************************/
176  for (i = 0; i < len; i++)
177  {
178  b = dat[i];
179 
180  /*******************************************************************
181  Map non-printing characters to "." according to the
182  definitions for ISO 8859/1 Latin-1.
183  *******************************************************************/
184  // if ( (b == '\%') || (b < ' ') || ((b > '~') && (b < 145)) || ((b > 146) && (b < 160)) )
185  if ( !isprint(b))
186  {
187  b = '.';
188  }
189  oc[0] = b;
190  strcat (oline, (const char *)oc);
191  }
192  }
193 
194  /***************************************************************************
195  add CR LF
196  ***************************************************************************/
197  strcat (oline, CRLF);
198 
199  /***************************************************************************
200  print line
201  ***************************************************************************/
202  if (_out_stream) _out_stream(oline);
203 }
static int16_t dflen
Definition: xdump.c:92
static uint32_t fileaddr
Definition: xdump.c:93
short int16_t
Definition: stdint.h:44
#define CRLF
Definition: cprintf.h:214
static int16_t bytesperline
Definition: xdump.c:92
static tpOutputFunc _out_stream
Definition: xdump.c:96
#define EOS
Definition: xdump.c:85
static int16_t doublechar
Definition: xdump.c:92
void xd ( void *  mem,
uint32_t  bufl,
int16_t  dochar,
uint32_t  address,
size_t  size 
)

function xd (void *mem, unsigned int bufl, short dochar) Dump a buffer.

Parameter mem - Address of buffer to dump. bufl - Buffer length in bytes. dochar - If nonzero, show ASCII/ISO characters as well as hexadecimal. address - address-offset size - size of buffer element Returns - Calls -

219 {
220  /***************************************************************************
221  locals
222  ***************************************************************************/
223  int16_t bp;
224  uint32_t len = bufl;
225  char b;
226 #if (UCHAR_MAX==USHRT_MAX)
227  char *buf = (char *) mem;
228  uint16_t *buf16 = (uint16_t *) mem;
229  uint32_t *buf32 = (uint32_t *) mem;
230  uint32_t temp;
231 #else
232  char *buf = (char *) mem;
233  len = bufl * size;
234 #endif
235  bp = 0;
236  doublechar = dochar; /* do ASCII output */
237 
238  if ( fileaddr != address )
239  {
240  if (_out_stream) _out_stream("\r\n");
241 
242  fileaddr = address; /* for printing purpose only */
243  }
244 
245  while (len-- > UINT32_C(0))
246  {
247 #if (UCHAR_MAX==USHRT_MAX)
248  switch ( size )
249  {
250  case (size_t)1:
251 #endif
252  b = *buf++;
253  if (bp >= bytesperline)
254  {
255  outline (lineecho, bp);
256  bp = 0;
258  }
259  lineecho[bp++] = b;
260 #if (UCHAR_MAX==USHRT_MAX)
261  break;
262 
263  case (size_t)2:
264  b = (char)*buf16 & 0xff;
265  lineecho[bp++] = b;
266  b = (char)(*buf16++>>8) & 0xff;
267  lineecho[bp++] = b;
268  if (bp >= bytesperline)
269  {
270  outline (lineecho, bp);
271  bp = 0;
273  }
274  break;
275 
276  case (size_t)4:
277  temp = *buf32++;
278  b = (char)(temp & 0xff);
279  lineecho[bp++] = b;
280  temp>>=8;
281  b = (char)(temp & 0xff);
282  lineecho[bp++] = b;
283  temp>>=8;
284  b = (char)(temp & 0xff);
285  lineecho[bp++] = b;
286  temp>>=8;
287  b = (char)(temp & 0xff);
288  lineecho[bp++] = b;
289  if (bp >= bytesperline)
290  {
291  outline (lineecho, bp);
292  bp = 0;
294  }
295  break;
296 
297  default :
298  len = UINT32_C(1); // error
299  break;
300 
301  } // switch
302 #endif
303  }
304 
305  /***************************************************************************
306  data left to print?
307  ***************************************************************************/
308  if (bp > 0)
309  {
310  outline (lineecho, bp);
311  }
312 
313  /***************************************************************************
314  add CRLF
315  ***************************************************************************/
316  // if (_out_stream) _out_stream(CRLF);
317 }
static uint32_t fileaddr
Definition: xdump.c:93
short int16_t
Definition: stdint.h:44
unsigned short uint16_t
Definition: stdint.h:45
#define UINT32_C(value)
Definition: stdint.h:210
void outline(char *dat, int16_t len)
Definition: xdump.c:124
static int16_t bytesperline
Definition: xdump.c:92
unsigned int uint32_t
Definition: stdint.h:47
static tpOutputFunc _out_stream
Definition: xdump.c:96
static char lineecho[32]
Definition: xdump.c:94
static int16_t doublechar
Definition: xdump.c:92

Variable Documentation

int16_t bytesperline = 16
static
int16_t doublechar = 0
static
int16_t dflen = 2
static
uint32_t fileaddr
static
char lineecho[32]
static
tpOutputFunc _out_stream =NULL
static