19a747e4fSDavid du Colombier #include <u.h> 29a747e4fSDavid du Colombier #include <libc.h> 39a747e4fSDavid du Colombier #include <ip.h> 49a747e4fSDavid du Colombier #include <ctype.h> 59a747e4fSDavid du Colombier #include "dat.h" 69a747e4fSDavid du Colombier #include "protos.h" 79a747e4fSDavid du Colombier 89a747e4fSDavid du Colombier static void 99a747e4fSDavid du Colombier p_compile(Filter *) 109a747e4fSDavid du Colombier { 119a747e4fSDavid du Colombier } 129a747e4fSDavid du Colombier 139a747e4fSDavid du Colombier static int 149a747e4fSDavid du Colombier p_filter(Filter *, Msg *) 159a747e4fSDavid du Colombier { 169a747e4fSDavid du Colombier return 0; 179a747e4fSDavid du Colombier } 189a747e4fSDavid du Colombier 199a747e4fSDavid du Colombier static char tohex[16] = { 209a747e4fSDavid du Colombier '0', '1', '2', '3', '4', '5', '6', '7', '8', '9', 219a747e4fSDavid du Colombier 'a', 'b', 'c', 'd', 'e', 'f' 229a747e4fSDavid du Colombier }; 239a747e4fSDavid du Colombier 249a747e4fSDavid du Colombier static int 259a747e4fSDavid du Colombier p_seprint(Msg *m) 269a747e4fSDavid du Colombier { 279a747e4fSDavid du Colombier int c, i, n, isstring; 289a747e4fSDavid du Colombier uchar *ps = m->ps; 299a747e4fSDavid du Colombier char *p = m->p; 309a747e4fSDavid du Colombier char *e = m->e; 319a747e4fSDavid du Colombier 329a747e4fSDavid du Colombier n = m->pe - ps; 339a747e4fSDavid du Colombier if(n > Nflag) 349a747e4fSDavid du Colombier n = Nflag; 359a747e4fSDavid du Colombier 369a747e4fSDavid du Colombier isstring = 1; 379a747e4fSDavid du Colombier for(i = 0; i < n; i++){ 389a747e4fSDavid du Colombier c = ps[i]; 399a747e4fSDavid du Colombier if(!isprint(c) && !isspace(c)){ 409a747e4fSDavid du Colombier isstring = 0; 419a747e4fSDavid du Colombier break; 429a747e4fSDavid du Colombier } 439a747e4fSDavid du Colombier } 449a747e4fSDavid du Colombier 459a747e4fSDavid du Colombier if(isstring){ 469a747e4fSDavid du Colombier for(i = 0; i < n && p+1<e; i++){ 479a747e4fSDavid du Colombier c = ps[i]; 489a747e4fSDavid du Colombier switch(c){ 499a747e4fSDavid du Colombier case '\t': 509a747e4fSDavid du Colombier *p++ = '\\'; 519a747e4fSDavid du Colombier *p++ = 't'; 529a747e4fSDavid du Colombier break; 539a747e4fSDavid du Colombier case '\r': 549a747e4fSDavid du Colombier *p++ = '\\'; 559a747e4fSDavid du Colombier *p++ = 'r'; 569a747e4fSDavid du Colombier break; 579a747e4fSDavid du Colombier case '\n': 589a747e4fSDavid du Colombier *p++ = '\\'; 599a747e4fSDavid du Colombier *p++ = 'n'; 609a747e4fSDavid du Colombier break; 619a747e4fSDavid du Colombier default: 629a747e4fSDavid du Colombier *p++ = c; 639a747e4fSDavid du Colombier } 649a747e4fSDavid du Colombier } 659a747e4fSDavid du Colombier } else { 669a747e4fSDavid du Colombier for(i = 0; i < n && p+1<e; i++){ 679a747e4fSDavid du Colombier c = ps[i]; 689a747e4fSDavid du Colombier *p++ = tohex[c>>4]; 699a747e4fSDavid du Colombier *p++ = tohex[c&0xf]; 709a747e4fSDavid du Colombier } 719a747e4fSDavid du Colombier } 729a747e4fSDavid du Colombier 739a747e4fSDavid du Colombier m->pr = nil; 749a747e4fSDavid du Colombier m->p = p; 759a747e4fSDavid du Colombier m->ps = ps; 769a747e4fSDavid du Colombier 779a747e4fSDavid du Colombier return 0; 789a747e4fSDavid du Colombier } 799a747e4fSDavid du Colombier 809a747e4fSDavid du Colombier Proto dump = 819a747e4fSDavid du Colombier { 829a747e4fSDavid du Colombier "dump", 839a747e4fSDavid du Colombier p_compile, 849a747e4fSDavid du Colombier p_filter, 859a747e4fSDavid du Colombier p_seprint, 86*3ff48bf5SDavid du Colombier nil, 87*3ff48bf5SDavid du Colombier nil, 88*3ff48bf5SDavid du Colombier defaultframer, 899a747e4fSDavid du Colombier }; 90