1 package com.csss.opensource.jhexdump;
2
3 import java.io.*;
4 import com.csss.opensource.util.*;
5
6 /***
7 * This class is responsible for providing the command line implementation
8 * of JHexDump.
9 *
10 * <p>When executed while using one of the provided scripts, the command
11 * line syntax is:
12 * <p>JHexDump.sh/.bat [-noascii] [-noposid] [-help] <filename>
13 *
14 * @author Lee Walton - <a href="http://www.jzone.co.uk/">The jZone</a>
15 * @version 1.1
16 */
17 public class JHexDumpCmdLine extends JHexDump {
18
19 /***
20 * Filename to process
21 */
22 private String filename;
23
24 /***
25 * The entry point into the application.
26 * <p>
27 * Instantiates a new JHexDumpCmdLine instance, and calls the execute() method.
28 *
29 * @param args Array of command line arguments
30 */
31 public static void main(String[] args) {
32 JHexDumpCmdLine app = new JHexDumpCmdLine();
33 app.execute(args);
34 }
35
36 /***
37 * Protected constructor to inhibit the instantiation of this class.
38 */
39 protected JHexDumpCmdLine() {}
40
41 /***
42 * Gets the filename to process.
43 *
44 * @return String
45 */
46 protected String getFilename() {
47 return filename;
48 }
49
50 /***
51 * Sets the filename to process.
52 *
53 * @param filename
54 */
55 protected void setFilename(String filename) {
56 this.filename = filename;
57 }
58
59 /***
60 * Dumps the specified file to stdout.
61 * <p>
62 * Parses the command line arguments, opens the file specified,
63 * and writes the output to System.out using JHexDumpReader.
64 *
65 * @param args Array of command line arguments
66 */
67 protected void execute(String[] args) {
68 System.out.println("JHexDump "+Version.VERSION+" "+Version.COPYRIGHT);
69 System.out.println();
70 System.out.println("This program is free software; you can redistribute it and/or");
71 System.out.println("modify it under the terms of the GNU General Public License");
72 System.out.println("as published by the Free Software Foundation; either version 2");
73 System.out.println("of the License, or (at your option) any later version.");
74 System.out.println();
75 System.out.println("This program is distributed in the hope that it will be useful,");
76 System.out.println("but WITHOUT ANY WARRANTY; without even the implied warranty of");
77 System.out.println("MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the");
78 System.out.println("GNU General Public License for more details.");
79 System.out.println();
80 System.out.println("You should have received a copy of the GNU General Public License");
81 System.out.println("along with this program; if not, write to the Free Software");
82 System.out.println("Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.");
83 System.out.println();
84
85 if (parseCommandLine(args)) {
86
87 if (StringUtil.isEmpty(getFilename())) {
88 System.out.println("No filename specified!");
89 System.out.println();
90 return;
91 }
92
93 if (! new File(getFilename()).isFile()) {
94 System.out.println("The file "+getFilename()+" does not exist.");
95 return;
96 }
97
98 System.out.println("Filename : "+getFilename());
99 System.out.println("Size : "+(new File(getFilename())).length());
100 System.out.println();
101
102 InputStream instream = null;
103 try {
104 instream = new FileInputStream(getFilename());
105
106 JHexDumpReader reader = new JHexDumpReader(instream,getBytesPerRow(),isNoAscii(),isNoPosInd());
107
108 while(true) {
109 StringBuffer output = new StringBuffer();
110 int read = reader.readLine(output);
111 if (read < 1) break;
112 System.out.println(output.toString());
113 }
114
115 } catch (Exception ex) {
116 ex.printStackTrace();
117 } finally {
118 if (instream != null) {
119 try {
120 instream.close();
121 } catch (IOException ioex) {}
122 }
123 }
124 }
125 }
126
127 /***
128 * Displays the command line help
129 */
130 protected void displayHelp() {
131 System.out.println();
132 System.out.println("Arguments: [-noascii] [-noposind] [-help] <filename>");
133 System.out.println();
134 }
135
136 /***
137 * Parses the command line arguments.
138 * <p>
139 * The accepted arguments are:<p>
140 * -help : Display help message<p>
141 * -noascii : Supress the display of the ASCII representation<p>
142 * -noposind : Supress the display of the file position indicator
143 *
144 * @param args array of command line arguments
145 */
146 protected boolean parseCommandLine(String[] args) {
147
148 for (int i = 0; i < args.length; i++) {
149 String arg = args[i];
150 if (arg.startsWith("-help")) {
151 displayHelp();
152 return false;
153 }
154 if (arg.startsWith("-noascii")) {
155 setNoAscii(true);
156 }
157 if (arg.startsWith("-noposind")) {
158 setNoPosInd(true);
159 }
160 }
161
162 if (args.length > 0) {
163 String filename = args[args.length-1];
164 setFilename(filename.trim());
165 }
166
167 return true;
168 }
169 }