84 lines · 1.1 KB · C
RawDownload
#include <u.h>#include <libc.h>#include <ip.h>#include <ctype.h>#include "dat.h"#include "protos.h" static voidp_compile(Filter *){} static char tohex[16] = {	'0', '1', '2', '3', '4', '5', '6', '7', '8', '9',	'a', 'b', 'c', 'd', 'e', 'f'}; static intp_seprint(Msg *m){	int c, i, n, isstring;	uchar *ps = m->ps;	char *p = m->p;	char *e = m->e; 	n = m->pe - ps;	if(n > Nflag)		n = Nflag; 	isstring = 1;	for(i = 0; i < n; i++){		c = ps[i];		if(!isprint(c) && !isspace(c)){			isstring = 0;			break;		}	} 	if(isstring){		for(i = 0; i < n && p+1<e; i++){			c = ps[i];			switch(c){			case '\t':				*p++ = '\\';				*p++ = 't';				break;			case '\r':				*p++ = '\\';				*p++ = 'r';				break;			case '\n':				*p++ = '\\';				*p++ = 'n';				break;			default:				*p++ = c;			}		}	} else {		for(i = 0; i < n && p+1<e; i++){			c = ps[i];			*p++ = tohex[c>>4];			*p++ = tohex[c&0xf]; 		}	} 	m->pr = nil;	m->p = p;	m->ps = ps; 	return 0;} Proto dump ={	"dump",	p_compile,	nil,	p_seprint,	nil,	nil,	nil,	defaultframer,};