Annotation of src/usr.bin/hexdump/conv.c, Revision 1.1
1.1 ! deraadt 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, with or without
! 6: * modification, are permitted provided that the following conditions
! 7: * are met:
! 8: * 1. Redistributions of source code must retain the above copyright
! 9: * notice, this list of conditions and the following disclaimer.
! 10: * 2. Redistributions in binary form must reproduce the above copyright
! 11: * notice, this list of conditions and the following disclaimer in the
! 12: * documentation and/or other materials provided with the distribution.
! 13: * 3. All advertising materials mentioning features or use of this software
! 14: * must display the following acknowledgement:
! 15: * This product includes software developed by the University of
! 16: * California, Berkeley and its contributors.
! 17: * 4. Neither the name of the University nor the names of its contributors
! 18: * may be used to endorse or promote products derived from this software
! 19: * without specific prior written permission.
! 20: *
! 21: * THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND
! 22: * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
! 23: * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
! 24: * ARE DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE
! 25: * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
! 26: * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
! 27: * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
! 28: * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
! 29: * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
! 30: * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
! 31: * SUCH DAMAGE.
! 32: */
! 33:
! 34: #ifndef lint
! 35: /*static char sccsid[] = "from: @(#)conv.c 5.4 (Berkeley) 6/1/90";*/
! 36: static char rcsid[] = "$Id: conv.c,v 1.2 1993/08/01 18:14:50 mycroft Exp $";
! 37: #endif /* not lint */
! 38:
! 39: #include <sys/types.h>
! 40: #include <ctype.h>
! 41: #include "hexdump.h"
! 42:
! 43: conv_c(pr, p)
! 44: PR *pr;
! 45: u_char *p;
! 46: {
! 47: extern int deprecated;
! 48: char buf[10], *str;
! 49:
! 50: switch(*p) {
! 51: case '\0':
! 52: str = "\\0";
! 53: goto strpr;
! 54: /* case '\a': */
! 55: case '\007':
! 56: if (deprecated) /* od didn't know about \a */
! 57: break;
! 58: str = "\\a";
! 59: goto strpr;
! 60: case '\b':
! 61: str = "\\b";
! 62: goto strpr;
! 63: case '\f':
! 64: str = "\\f";
! 65: goto strpr;
! 66: case '\n':
! 67: str = "\\n";
! 68: goto strpr;
! 69: case '\r':
! 70: str = "\\r";
! 71: goto strpr;
! 72: case '\t':
! 73: str = "\\t";
! 74: goto strpr;
! 75: case '\v':
! 76: if (deprecated)
! 77: break;
! 78: str = "\\v";
! 79: goto strpr;
! 80: default:
! 81: break;
! 82: }
! 83: if (isprint(*p)) {
! 84: *pr->cchar = 'c';
! 85: (void)printf(pr->fmt, *p);
! 86: } else {
! 87: (void)sprintf(str = buf, "%03o", (int)*p);
! 88: strpr: *pr->cchar = 's';
! 89: (void)printf(pr->fmt, str);
! 90: }
! 91: }
! 92:
! 93: conv_u(pr, p)
! 94: PR *pr;
! 95: u_char *p;
! 96: {
! 97: extern int deprecated;
! 98: static char *list[] = {
! 99: "nul", "soh", "stx", "etx", "eot", "enq", "ack", "bel",
! 100: "bs", "ht", "lf", "vt", "ff", "cr", "so", "si",
! 101: "dle", "dcl", "dc2", "dc3", "dc4", "nak", "syn", "etb",
! 102: "can", "em", "sub", "esc", "fs", "gs", "rs", "us",
! 103: };
! 104:
! 105: /* od used nl, not lf */
! 106: if (*p <= 0x1f) {
! 107: *pr->cchar = 's';
! 108: if (deprecated && *p == 0x0a)
! 109: (void)printf(pr->fmt, "nl");
! 110: else
! 111: (void)printf(pr->fmt, list[*p]);
! 112: } else if (*p == 0x7f) {
! 113: *pr->cchar = 's';
! 114: (void)printf(pr->fmt, "del");
! 115: } else if (deprecated && *p == 0x20) { /* od replace space with sp */
! 116: *pr->cchar = 's';
! 117: (void)printf(pr->fmt, " sp");
! 118: } else if (isprint(*p)) {
! 119: *pr->cchar = 'c';
! 120: (void)printf(pr->fmt, *p);
! 121: } else {
! 122: *pr->cchar = 'x';
! 123: (void)printf(pr->fmt, (int)*p);
! 124: }
! 125: }