Subversion Repositories planix.SVN

Rev

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

#include <u.h>
#include <libc.h>
#include <ip.h>
#include <ctype.h>
#include "dat.h"
#include "protos.h"

static void
p_compile(Filter *)
{
}

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",
        p_compile,
        nil,
        p_seprint,
        nil,
        nil,
        nil,
        defaultframer,
};