Simple Trace Function

xiaoxiao2021-03-06  39

#include #include #include #include #include

#define __A2X (((CH) & 15) ((CH)> '9'? 9: 0)) # Define __x2a (n) ((N & 15) (N> 9? 55: 48 )) # define __print_xdigital __ (buffer, r, l) / do {/ r = (l >> 20) & 15; buffer [3] = __x2a (r); / r = (l >> 16) & 15; buffer [4] = __X2A (R); / R = (L >> 12) & 15; buffer [5] = __x2a (r); / r = (l >> 8) & 15; buffer [6] = __x2a ( r); / r = (L >> 4) & 15; buffer [7] = __x2a (r); / r = l & 15; buffer [8] = __x2a (r); /} while (0)

VoidxDumpf (file * outp, void * buffer, size_t length) {char * fmt = "(0x000000)"; char line [80], pmap [32]; int count, pos; register int index, var; register unsigned char * P = (unsigned char *) buffer;

MEMSET (PMAP, 0, SIZEOF (PMAP)); for (INDEX = 0; Index <256; index) pMap [INDEX >> 3] | = 1 << (INDEX & 7) ;

STRCPY (LINE, FMT); For (count = 0, POS = 0; Length; --Length, POS) {var = * p ; index = var >> 4; line [11 (POS << 1) POS] = __x2a (index); index = var & 15; line [12 (POS << 1) POS] = __x2a (index); line [60 pos] = (PMAP [Var >> 3] & (1 << (VAR & 7)))))))? Var: '.';

IF (POS == 15) {line [34] = '-'; __print_xdigital __ (line, index, count); fprintf (outp, "% s / n", line; strcpy (line, fmt); count = 16; POS = -1;}}} (pOS) {line [60 pOS] = '/ 0'; if (POS> 8) line [34] = '-'; __print_xdigital __ (line, index, count); FPRINTF (OUTP, "% s / n", line;}}

VoidxDump (Char * logfile, void * buffer, size_t length) {file * fp;

FP = fopen (logfile, "a "); if (fp) {xdumpf (FP, Buffer, Length); fclose (fp);}}

Voidtrace (Char * logfile, char * format, ...) {va_list args; char TB [32]; time_t _current_t; file * fp;

FP = fopen (logfile, "a "); if (fp! = 0) {va_start (args, format); time (& _ current_t); while (* format == '/ n') {FPUTC ('/ n', FP); Format ;} strftime (TB, SIZEOF (TB), "% m /% D% T", LOCALTIME (& _ Current_t)); FPRINTF (FP, "[% S]", TB); vfprintf (fp, format , args); VA_END (ARGS); fclose (fp);}}

转载请注明原文地址:https://www.9cbs.com/read-67379.html

New Post(0)