xref: /386bsd/usr/src/usr.bin/hexdump/hexsyntax.c (revision a2142627)
1 /*-
2  * Copyright (c) 1990 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[] = "@(#)hexsyntax.c	5.2 (Berkeley) 5/8/90";
36 #endif /* not lint */
37 
38 #include <sys/types.h>
39 #include <stdio.h>
40 #include "hexdump.h"
41 
42 off_t skip;				/* bytes to skip */
43 
newsyntax(argc,argvp)44 newsyntax(argc, argvp)
45 	int argc;
46 	char ***argvp;
47 {
48 	extern enum _vflag vflag;
49 	extern FS *fshead;
50 	extern char *optarg;
51 	extern int length, optind;
52 	int ch;
53 	char *p, **argv;
54 
55 	argv = *argvp;
56 	while ((ch = getopt(argc, argv, "bcde:f:n:os:vx")) != EOF)
57 		switch (ch) {
58 		case 'b':
59 			add("\"%07.7_Ax\n\"");
60 			add("\"%07.7_ax \" 16/1 \"%03o \" \"\\n\"");
61 			break;
62 		case 'c':
63 			add("\"%07.7_Ax\n\"");
64 			add("\"%07.7_ax \" 16/1 \"%3_c \" \"\\n\"");
65 			break;
66 		case 'd':
67 			add("\"%07.7_Ax\n\"");
68 			add("\"%07.7_ax \" 8/2 \"  %05u \" \"\\n\"");
69 			break;
70 		case 'e':
71 			add(optarg);
72 			break;
73 		case 'f':
74 			addfile(optarg);
75 			break;
76 		case 'n':
77 			if ((length = atoi(optarg)) < 0) {
78 				(void)fprintf(stderr,
79 				    "hexdump: bad length value.\n");
80 				exit(1);
81 			}
82 			break;
83 		case 'o':
84 			add("\"%07.7_Ax\n\"");
85 			add("\"%07.7_ax \" 8/2 \" %06o \" \"\\n\"");
86 			break;
87 		case 's':
88 			if ((skip = strtol(optarg, &p, 0)) < 0) {
89 				(void)fprintf(stderr,
90 				    "hexdump: bad skip value.\n");
91 				exit(1);
92 			}
93 			switch(*p) {
94 			case 'b':
95 				skip *= 512;
96 				break;
97 			case 'k':
98 				skip *= 1024;
99 				break;
100 			case 'm':
101 				skip *= 1048576;
102 				break;
103 			}
104 			break;
105 		case 'v':
106 			vflag = ALL;
107 			break;
108 		case 'x':
109 			add("\"%07.7_Ax\n\"");
110 			add("\"%07.7_ax \" 8/2 \"   %04x \" \"\\n\"");
111 			break;
112 		case '?':
113 			usage();
114 			exit(1);
115 		}
116 
117 	if (!fshead) {
118 		add("\"%07.7_Ax\n\"");
119 		add("\"%07.7_ax \" 8/2 \"%04x \" \"\\n\"");
120 	}
121 
122 	*argvp += optind;
123 }
124 
usage()125 usage()
126 {
127 	(void)fprintf(stderr,
128 "hexdump: [-bcdovx] [-e fmt] [-f fmt_file] [-n length] [-s skip] [file ...]\n");
129 	exit(1);
130 }
131