1: /* 2: * Copyright (c) 1989 The Regents of the University of California. 3: * All rights reserved. 4: * 5: * Redistribution and use in source and binary forms are permitted 6: * provided that: (1) source distributions retain this entire copyright 7: * notice and comment, and (2) distributions including binaries display 8: * the following acknowledgement: ``This product includes software 9: * developed by the University of California, Berkeley and its contributors'' 10: * in the documentation or other materials provided with the distribution 11: * and in all advertising materials mentioning features or use of this 12: * software. Neither the name of the University nor the names of its 13: * contributors may be used to endorse or promote products derived 14: * from this software without specific prior written permission. 15: * THIS SOFTWARE IS PROVIDED ``AS IS'' AND WITHOUT ANY EXPRESS OR 16: * IMPLIED WARRANTIES, INCLUDING, WITHOUT LIMITATION, THE IMPLIED 17: * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. 18: */ 19: 20: #ifndef lint 21: static char sccsid[] = "@(#)conv.c 5.4 (Berkeley) 6/1/90"; 22: #endif /* not lint */ 23: 24: #include <sys/types.h> 25: #include <ctype.h> 26: #include "hexdump.h" 27: 28: conv_c(pr, p) 29: PR *pr; 30: u_char *p; 31: { 32: extern int deprecated; 33: char buf[10], *str; 34: 35: switch(*p) { 36: case '\0': 37: str = "\\0"; 38: goto strpr; 39: /* case '\a': */ 40: case '\007': 41: if (deprecated) /* od didn't know about \a */ 42: break; 43: str = "\\a"; 44: goto strpr; 45: case '\b': 46: str = "\\b"; 47: goto strpr; 48: case '\f': 49: str = "\\f"; 50: goto strpr; 51: case '\n': 52: str = "\\n"; 53: goto strpr; 54: case '\r': 55: str = "\\r"; 56: goto strpr; 57: case '\t': 58: str = "\\t"; 59: goto strpr; 60: case '\v': 61: if (deprecated) 62: break; 63: str = "\\v"; 64: goto strpr; 65: default: 66: break; 67: } 68: if (isprint(*p)) { 69: *pr->cchar = 'c'; 70: (void)printf(pr->fmt, *p); 71: } else { 72: (void)sprintf(str = buf, "%03o", (int)*p); 73: strpr: *pr->cchar = 's'; 74: (void)printf(pr->fmt, str); 75: } 76: } 77: 78: conv_u(pr, p) 79: PR *pr; 80: u_char *p; 81: { 82: extern int deprecated; 83: static char *list[] = { 84: "nul", "soh", "stx", "etx", "eot", "enq", "ack", "bel", 85: "bs", "ht", "lf", "vt", "ff", "cr", "so", "si", 86: "dle", "dcl", "dc2", "dc3", "dc4", "nak", "syn", "etb", 87: "can", "em", "sub", "esc", "fs", "gs", "rs", "us", 88: }; 89: 90: /* od used nl, not lf */ 91: if (*p <= 0x1f) { 92: *pr->cchar = 's'; 93: if (deprecated && *p == 0x0a) 94: (void)printf(pr->fmt, "nl"); 95: else 96: (void)printf(pr->fmt, list[*p]); 97: } else if (*p == 0x7f) { 98: *pr->cchar = 's'; 99: (void)printf(pr->fmt, "del"); 100: } else if (deprecated && *p == 0x20) { /* od replace space with sp */ 101: *pr->cchar = 's'; 102: (void)printf(pr->fmt, " sp"); 103: } else if (isprint(*p)) { 104: *pr->cchar = 'c'; 105: (void)printf(pr->fmt, *p); 106: } else { 107: *pr->cchar = 'x'; 108: (void)printf(pr->fmt, (int)*p); 109: } 110: }