Blob


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