1 1.19 dholland /* $NetBSD: hexdump.c,v 1.19 2016/03/04 02:54:38 dholland Exp $ */ 2 1.4 tls 3 1.1 cgd /* 4 1.6 mrg * Copyright (c) 1989, 1993 5 1.6 mrg * The Regents of the University of California. All rights reserved. 6 1.1 cgd * 7 1.1 cgd * Redistribution and use in source and binary forms, with or without 8 1.1 cgd * modification, are permitted provided that the following conditions 9 1.1 cgd * are met: 10 1.1 cgd * 1. Redistributions of source code must retain the above copyright 11 1.1 cgd * notice, this list of conditions and the following disclaimer. 12 1.1 cgd * 2. Redistributions in binary form must reproduce the above copyright 13 1.1 cgd * notice, this list of conditions and the following disclaimer in the 14 1.1 cgd * documentation and/or other materials provided with the distribution. 15 1.10 agc * 3. Neither the name of the University nor the names of its contributors 16 1.1 cgd * may be used to endorse or promote products derived from this software 17 1.1 cgd * without specific prior written permission. 18 1.1 cgd * 19 1.1 cgd * THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND 20 1.1 cgd * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE 21 1.1 cgd * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE 22 1.1 cgd * ARE DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE 23 1.1 cgd * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL 24 1.1 cgd * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS 25 1.1 cgd * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) 26 1.1 cgd * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT 27 1.1 cgd * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY 28 1.1 cgd * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF 29 1.1 cgd * SUCH DAMAGE. 30 1.1 cgd */ 31 1.1 cgd 32 1.12 lukem #if HAVE_NBTOOL_CONFIG_H 33 1.12 lukem #include "nbtool_config.h" 34 1.12 lukem #endif 35 1.12 lukem 36 1.7 lukem #include <sys/cdefs.h> 37 1.12 lukem #if !defined(lint) 38 1.14 lukem __COPYRIGHT("@(#) Copyright (c) 1989, 1993\ 39 1.14 lukem The Regents of the University of California. All rights reserved."); 40 1.5 mikel #if 0 41 1.6 mrg static char sccsid[] = "@(#)hexdump.c 8.1 (Berkeley) 6/6/93"; 42 1.5 mikel #else 43 1.19 dholland __RCSID("$NetBSD: hexdump.c,v 1.19 2016/03/04 02:54:38 dholland Exp $"); 44 1.5 mikel #endif 45 1.1 cgd #endif /* not lint */ 46 1.1 cgd 47 1.1 cgd #include <sys/types.h> 48 1.6 mrg 49 1.6 mrg #include <errno.h> 50 1.8 kleink #include <locale.h> 51 1.6 mrg #include <stdlib.h> 52 1.1 cgd #include <stdio.h> 53 1.3 jtc #include <string.h> 54 1.6 mrg 55 1.1 cgd #include "hexdump.h" 56 1.1 cgd 57 1.1 cgd FS *fshead; /* head of format strings */ 58 1.1 cgd int blocksize; /* data block size */ 59 1.1 cgd int exitval; /* final exit value */ 60 1.1 cgd int length = -1; /* max bytes to read */ 61 1.16 christos static int isod = 0; 62 1.7 lukem 63 1.5 mikel int 64 1.13 perry main(int argc, char *argv[]) 65 1.1 cgd { 66 1.7 lukem FS *tfs; 67 1.3 jtc char *p; 68 1.8 kleink 69 1.8 kleink setlocale(LC_ALL, ""); 70 1.1 cgd 71 1.17 mrg isod = 0; 72 1.17 mrg p = strrchr(argv[0], 'o'); 73 1.17 mrg if (p != NULL && strcmp(p, "od") == 0) 74 1.17 mrg isod = 1; 75 1.17 mrg 76 1.16 christos if (isod) 77 1.16 christos odsyntax(argc, &argv); 78 1.1 cgd else 79 1.16 christos hexsyntax(argc, &argv); 80 1.1 cgd 81 1.1 cgd /* figure out the data block size */ 82 1.1 cgd for (blocksize = 0, tfs = fshead; tfs; tfs = tfs->nextfs) { 83 1.1 cgd tfs->bcnt = size(tfs); 84 1.1 cgd if (blocksize < tfs->bcnt) 85 1.1 cgd blocksize = tfs->bcnt; 86 1.1 cgd } 87 1.1 cgd /* rewrite the rules, do syntax checking */ 88 1.1 cgd for (tfs = fshead; tfs; tfs = tfs->nextfs) 89 1.1 cgd rewrite(tfs); 90 1.1 cgd 91 1.19 dholland stashargv(argv); 92 1.1 cgd display(); 93 1.1 cgd exit(exitval); 94 1.1 cgd } 95 1.16 christos 96 1.16 christos void 97 1.16 christos usage(void) 98 1.16 christos { 99 1.16 christos const char *pname = getprogname(); 100 1.16 christos 101 1.18 wiz (void)fprintf(stderr, "usage: %s ", pname); 102 1.16 christos if (isod) 103 1.16 christos (void)fprintf(stderr, "[-aBbcDdeFfHhIiLlOovXx] [-A base] " 104 1.16 christos "[-j skip] [-N length] [-t type_string] [[+]offset[.][Bb]] " 105 1.16 christos "[file ...]\n"); 106 1.16 christos else 107 1.18 wiz (void)fprintf(stderr, "[-bCcdovx] [-e format_string] [-f format_file] " 108 1.16 christos "[-n length] [-s skip] [file ...]\n"); 109 1.16 christos exit(1); 110 1.16 christos } 111