79 lines
1 KiB
C
Executable file
79 lines
1 KiB
C
Executable file
#include <u.h>
|
|
#include <libc.h>
|
|
#include <ip.h>
|
|
#include <ctype.h>
|
|
#include "dat.h"
|
|
#include "protos.h"
|
|
|
|
static char tohex[16] = {
|
|
'0', '1', '2', '3', '4', '5', '6', '7', '8', '9',
|
|
'a', 'b', 'c', 'd', 'e', 'f'
|
|
};
|
|
|
|
static int
|
|
p_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",
|
|
nil,
|
|
nil,
|
|
p_seprint,
|
|
nil,
|
|
nil,
|
|
nil,
|
|
defaultframer
|
|
};
|