URI: 
       tdump.c - plan9port - [fork] Plan 9 from user space
  HTML git clone git://src.adamsgaard.dk/plan9port
   DIR Log
   DIR Files
   DIR Refs
   DIR README
   DIR LICENSE
       ---
       tdump.c (1033B)
       ---
            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 char tohex[16] = {
            9         '0', '1', '2', '3', '4', '5', '6', '7', '8', '9',
           10         'a', 'b', 'c', 'd', 'e', 'f'
           11 };
           12 
           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;
           20 
           21         n = m->pe - ps;
           22         if(n > Nflag)
           23                 n = Nflag;
           24 
           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         }
           33 
           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         }
           61 
           62         m->pr = nil;
           63         m->p = p;
           64         m->ps = ps;
           65 
           66         return 0;
           67 }
           68 
           69 Proto dump =
           70 {
           71         "dump",
           72         nil,
           73         nil,
           74         p_seprint,
           75         nil,
           76         nil,
           77         nil,
           78         defaultframer
           79 };