3 import java.util.Vector;
\r
4 import java.util.zip.GZIPInputStream;
\r
6 import java.io.FileWriter;
\r
7 import java.io.OutputStream;
\r
8 import java.io.FileOutputStream;
\r
9 import java.io.FileInputStream;
\r
10 import java.io.FileNotFoundException;
\r
11 import java.io.IOException;
\r
12 import java.io.PrintWriter;
\r
14 public class InputFileTranslator{
\r
15 public static String PREFIX="";
\r
17 public static void main(String args[]){
\r
19 //To Uncompress GZip File Contents we need to open the gzip file.....
\r
21 System.out.println("Please enter the valid file name");
\r
24 if (args[offset].equals("-dir")) {
\r
25 PREFIX=args[++offset]+"/";
\r
29 System.out.println("Opening the output file............. : opened");
\r
31 //Create the .h file
\r
32 String outFilename = PREFIX+"InputFileArrays.h";
\r
33 PrintWriter out = new PrintWriter(new FileWriter(new File(outFilename)));
\r
34 out.println("#ifndef INPUT_FILE_ARRAYS_H");
\r
35 out.println("#define INPUT_FILE_ARRAYS_H");
\r
37 out.println("#ifndef bool");
\r
38 out.println("typedef int bool;");
\r
39 out.println("#define true 1");
\r
40 out.println("#define false 0");
\r
41 out.println("#endif");
\r
43 out.println("int filename2fd(char * filename, int length);");
\r
44 out.println("int nextInt(int fd, int * pos);");
\r
45 out.println("double nextDouble(int fd, int * pos);");
\r
46 out.println("#endif");
\r
49 //Create the .c file that contains the big two-dimension array and
\r
51 outFilename = PREFIX+"InputFileArrays.c";
\r
52 out = new PrintWriter(new FileWriter(new File(outFilename)));
\r
53 out.println("#include \"InputFileArrays.h\"");
\r
55 Vector<String> sourcefiles=new Vector<String>();
\r
56 for(int i=0; i<args.length-offset; i++) {
\r
57 String inFilename = args[i+offset];
\r
58 String arrayname = inFilename.replaceAll("\\.", "_");
\r
59 sourcefiles.add(arrayname);
\r
60 out.println("#define " + arrayname.toUpperCase() + " " + i);
\r
61 System.out.println("Opening the gzip file.......................... : opened");
\r
62 GZIPInputStream gzipInputStream = null;
\r
63 FileInputStream fileInputStream = null;
\r
64 gzipInputStream = new GZIPInputStream(new FileInputStream(inFilename));
\r
65 //OutputStream out = new FileOutputStream(outFilename);
\r
66 System.out.println("Trsansferring bytes from the compressed file to the output file........: Transfer successful");
\r
68 out.println("unsigned char " + arrayname + "[] = {");
\r
70 boolean printComma = false;
\r
71 boolean printReturn = false;
\r
72 byte[] buf = new byte[1024]; //size can be changed according to programmer's need.
\r
74 while ((len = gzipInputStream.read(buf)) > 0) {
\r
75 //out.write(buf, 0, len);
\r
76 for(int j = 0; j < len; j++) {
\r
78 // skip the comments
\r
79 while(j<len && buf[j++] != '\n') {
\r
89 printReturn = false;
\r
91 if('\n' == buf[j]) {
\r
92 out.print("\'\\n\'");
\r
102 gzipInputStream.close();
\r
106 out.println("unsigned char * inputFileArrays[]= {");
\r
107 for(int i = 0; i < sourcefiles.size(); i++) {
\r
108 String arrayname = sourcefiles.elementAt(i);
\r
113 out.print("&"+arrayname+"[0]");
\r
119 //Create the read functions
\r
120 out.println("int filename2fd(char * filename, int length) {");
\r
121 for(int i=0; i<sourcefiles.size(); i++) {
\r
122 String inFilename = sourcefiles.elementAt(i);
\r
123 String arrayname = inFilename.replaceAll("\\.", "_");
\r
124 out.print(" char " + arrayname + "[] = {");
\r
125 for(int j = 0; j < inFilename.length(); j++) {
\r
129 out.print("'"+inFilename.charAt(j)+"'");
\r
132 out.println(" if(length==" + inFilename.length() + ") {");
\r
133 out.println(" int i;");
\r
134 out.println(" for(i = 0; i < length; i++) {");
\r
135 out.println(" if(filename[i]!="+arrayname+"[i]) {");
\r
136 out.println(" break;");
\r
139 out.println(" if(i==length) {");
\r
140 out.println(" return "+arrayname.toUpperCase() + ";");
\r
148 out.println("int nextInt(int fd, int * pos) {");
\r
149 out.println(" int i = 0;");
\r
150 out.println(" unsigned char * filearray = inputFileArrays[fd];");
\r
151 out.println(" while((filearray[*pos]==\' \')||(filearray[*pos]==\'\\n\')){");
\r
152 out.println(" *pos++;");
\r
154 out.println(" int value = 0;");
\r
155 out.println(" bool isNeg=false;");
\r
156 out.println(" int radix = 10;");
\r
158 out.println(" if (filearray[*pos]==\'-\') {");
\r
159 out.println(" isNeg=true;");
\r
160 out.println(" *pos++;");
\r
162 out.println(" bool cont=true;");
\r
163 out.println(" do {");
\r
164 out.println(" unsigned char b=filearray[*pos];");
\r
165 out.println(" int val;");
\r
166 out.println(" if (b>=\'0\'&&b<=\'9\')");
\r
167 out.println(" val=b-\'0\';");
\r
168 out.println(" else if (b>=\'a\'&&b<=\'z\')");
\r
169 out.println(" val=10+b-\'a\';");
\r
170 out.println(" else if (b>=\'A\'&&b<=\'Z\')");
\r
171 out.println(" val=10+b-\'A\';");
\r
172 out.println(" else {");
\r
173 out.println(" cont=false;");
\r
175 out.println(" if (cont) {");
\r
176 out.println(" if (val>=radix)");
\r
177 out.println(" printf(\"Error in nextInt(): val >= radix\");");
\r
178 out.println(" value=value*radix+val;");
\r
179 out.println(" *pos++;");
\r
181 out.println(" }while(cont);");
\r
182 out.println(" if (isNeg)");
\r
183 out.println(" value=-value;");
\r
185 out.println(" return value;");
\r
189 out.println("double nextDouble(int fd, int * pos) {");
\r
190 out.println(" int i = 0;");
\r
191 out.println(" unsigned char * filearray = inputFileArrays[fd];");
\r
192 out.println(" while((filearray[*pos]==\' \')||(filearray[*pos]==\'\\n\')){");
\r
193 out.println(" *pos++;");
\r
195 out.println(" double value = 0.0;");
\r
196 out.println("//TODO");
\r
197 out.println(" return value;");
\r
201 System.out.println("The file and stream is ......closing.......... : closed");
\r
205 catch(IOException e){
\r
206 System.out.println("Exception has been thrown" + e);
\r