Subversion Repositories planix.SVN

Rev

Rev 2 | Details | Compare with Previous | Last modification | View Log | RSS feed

Rev Author Line No. Line
2 - 1
#include <u.h>
2
#include <libc.h>
3
#include <ip.h>
4
#include <ctype.h>
5
#include "dat.h"
6
#include "protos.h"
7
 
8
static void
9
p_compile(Filter *)
10
{
11
}
12
 
13
static char tohex[16] = {
14
	'0', '1', '2', '3', '4', '5', '6', '7', '8', '9',
15
	'a', 'b', 'c', 'd', 'e', 'f'
16
};
17
 
18
static int
19
p_seprint(Msg *m)
20
{
21
	int c, i, n, isstring;
22
	uchar *ps = m->ps;
23
	char *p = m->p;
24
	char *e = m->e;
25
 
26
	n = m->pe - ps;
27
	if(n > Nflag)
28
		n = Nflag;
29
 
30
	isstring = 1;
31
	for(i = 0; i < n; i++){
32
		c = ps[i];
33
		if(!isprint(c) && !isspace(c)){
34
			isstring = 0;
35
			break;
36
		}
37
	}
38
 
39
	if(isstring){
40
		for(i = 0; i < n && p+1<e; i++){
41
			c = ps[i];
42
			switch(c){
43
			case '\t':
44
				*p++ = '\\';
45
				*p++ = 't';
46
				break;
47
			case '\r':
48
				*p++ = '\\';
49
				*p++ = 'r';
50
				break;
51
			case '\n':
52
				*p++ = '\\';
53
				*p++ = 'n';
54
				break;
55
			default:
56
				*p++ = c;
57
			}
58
		}
59
	} else {
60
		for(i = 0; i < n && p+1<e; i++){
61
			c = ps[i];
62
			*p++ = tohex[c>>4];
63
			*p++ = tohex[c&0xf]; 
64
		}
65
	}
66
 
67
	m->pr = nil;
68
	m->p = p;
69
	m->ps = ps;
70
 
71
	return 0;
72
}
73
 
74
Proto dump =
75
{
76
	"dump",
77
	p_compile,
78
	nil,
79
	p_seprint,
80
	nil,
81
	nil,
82
	nil,
83
	defaultframer,
84
};