3 import java.util.Hashtable;
\r
4 import java.util.Vector;
\r
5 import java.util.zip.GZIPInputStream;
\r
7 import java.io.FileWriter;
\r
8 import java.io.FileInputStream;
\r
9 import java.io.IOException;
\r
10 import java.io.PrintWriter;
\r
12 public class InputFileTranslator{
\r
13 public static String PREFIX="";
\r
15 public static void main(String args[]){
\r
17 //To Uncompress GZip File Contents we need to open the gzip file.....
\r
19 System.out.println("Please enter the valid file name");
\r
22 if (args[offset].equals("-dir")) {
\r
23 PREFIX=args[++offset]+"/";
\r
26 boolean isCompressed = true;
\r
28 System.out.println("Opening the output file............. : opened");
\r
30 //Create the .h file
\r
31 String outFilename = PREFIX+"InputFileArrays.h";
\r
32 PrintWriter out = new PrintWriter(new FileWriter(new File(outFilename)));
\r
33 out.println("#ifndef INPUT_FILE_ARRAYS_H");
\r
34 out.println("#define INPUT_FILE_ARRAYS_H");
\r
36 out.println("#ifndef bool");
\r
37 out.println("typedef int bool;");
\r
38 out.println("#define true 1");
\r
39 out.println("#define false 0");
\r
40 out.println("#endif");
\r
42 out.println("int filename2fd(char * filename, int length);");
\r
43 out.println("int nextInt(int fd, int * pos, int * isHighbits);");
\r
44 out.println("double nextDouble(int fd, int * pos, int * isHighbits);");
\r
45 out.println("#endif");
\r
48 //Create the .c file that contains the big two-dimension array and
\r
50 outFilename = PREFIX+"InputFileArrays.c";
\r
51 out = new PrintWriter(new FileWriter(new File(outFilename)));
\r
52 out.println("#include \"InputFileArrays.h\"");
\r
53 out.println("#include \"math.h\"");
\r
55 Vector<String> sourcefiles=new Vector<String>();
\r
56 Vector<Boolean> compressVec = new Vector<Boolean>();
\r
57 Hashtable<Byte, Integer> encodemapping = new Hashtable<Byte, Integer>();
\r
58 Vector<Byte> encodeVec = new Vector<Byte>();
\r
60 int returncount = 10;
\r
61 for(int i=0; i<args.length-offset; i++) {
\r
63 encodemapping.clear();
\r
66 encodemapping.put((byte)0, 0);
\r
67 encodeVec.add((byte)0);
\r
69 String inFilename = args[i+offset];
\r
70 String arrayname = inFilename.replaceAll("\\.", "_");
\r
71 sourcefiles.add(inFilename);
\r
72 out.println("#define " + arrayname.toUpperCase() + " " + i);
\r
73 System.out.println("Opening the gzip file.......................... : opened");
\r
74 GZIPInputStream gzipInputStream = null;
\r
75 FileInputStream fileInputStream = null;
\r
76 gzipInputStream = new GZIPInputStream(new FileInputStream(inFilename));
\r
77 //OutputStream out = new FileOutputStream(outFilename);
\r
78 System.out.println("Trsansferring bytes from the compressed file to the output file........: Transfer successful");
\r
80 out.println("unsigned char " + arrayname + "[] = {");
\r
82 boolean printComma = false;
\r
83 boolean printReturn = false;
\r
84 byte[] buf = new byte[1024]; //size can be changed according to programmer's need.
\r
86 int writenum = isCompressed?2:1;
\r
87 compressVec.add(isCompressed?true:false);
\r
88 int bitmask = 0x00FF;
\r
89 while ((len = gzipInputStream.read(buf)) > 0) {
\r
90 //out.write(buf, 0, len);
\r
91 for(int j = 0; j < len; ) {
\r
92 // read out 2 bytes at a time
\r
93 byte[] towrite = new byte[writenum];
\r
94 for(int k = 0; k<writenum&&j<len; k++) {
\r
96 // skip the comments
\r
97 while(j<len && buf[j++] != '\n') {
\r
100 towrite[k] = buf[j];
\r
104 int writevalue = towrite[0];
\r
106 // compress two value into one for compressed version
\r
107 if(!encodemapping.containsKey(towrite[0])) {
\r
108 encodemapping.put(towrite[0], encodenum++);
\r
109 encodeVec.add(towrite[0]);
\r
111 writevalue = encodemapping.get(towrite[0]);
\r
112 if(!encodemapping.containsKey(towrite[1])) {
\r
113 encodemapping.put(towrite[1], encodenum++);
\r
114 encodeVec.add(towrite[1]);
\r
116 if(encodeVec.size()>=16) {
\r
117 System.err.println("Error! The compressed file has more than 16 types of characters! It can not be compressed!");
\r
120 writevalue = ((writevalue<<4)|encodemapping.get(towrite[1]))&bitmask;
\r
129 printReturn = false;
\r
131 if(!isCompressed && ('\n' == buf[j])) {
\r
132 out.print("\'\\n\'");
\r
133 printReturn = true;
\r
135 out.print(writevalue);
\r
138 if(returncount==0) {
\r
148 gzipInputStream.close();
\r
150 // print out the decoding array
\r
151 String decodename = arrayname.concat("_decodeTbl");
\r
152 out.println("unsigned char " + decodename + "[] = {");
\r
153 printComma = false;
\r
154 for(int j = 0; j < encodeVec.size(); j++) {
\r
155 byte b = encodeVec.elementAt(j).byteValue();
\r
162 out.print("\'\\n\'");
\r
163 printReturn = true;
\r
174 out.println("unsigned char * inputFileArrays[]= {");
\r
175 for(int i = 0; i < sourcefiles.size(); i++) {
\r
176 String arrayname = sourcefiles.elementAt(i).replaceAll("\\.", "_");
\r
181 out.print("&"+arrayname+"[0]");
\r
187 out.println("unsigned char * inputFileArrays_decodeTbl[]= {");
\r
188 for(int i = 0; i < sourcefiles.size(); i++) {
\r
189 String arrayname = sourcefiles.elementAt(i).replaceAll("\\.", "_");
\r
194 if(compressVec.elementAt(i).booleanValue()) {
\r
195 out.print("&"+arrayname.concat("_decodeTbl")+"[0]");
\r
204 //Create the read functions
\r
205 out.println("int filename2fd(char * filename, int length) {");
\r
206 for(int i=0; i<sourcefiles.size(); i++) {
\r
207 String inFilename = sourcefiles.elementAt(i);
\r
208 String arrayname = inFilename.replaceAll("\\.", "_");
\r
209 out.print(" char " + arrayname + "[] = {");
\r
210 for(int j = 0; j < inFilename.length(); j++) {
\r
214 out.print("'"+inFilename.charAt(j)+"'");
\r
217 out.println(" if(length==" + inFilename.length() + ") {");
\r
218 out.println(" int i;");
\r
219 out.println(" for(i = 0; i < length; i++) {");
\r
220 out.println(" if(filename[i]!="+arrayname+"[i]) {");
\r
221 out.println(" break;");
\r
224 out.println(" if(i==length) {");
\r
225 out.println(" return "+arrayname.toUpperCase() + ";");
\r
230 out.println(" return -1;");
\r
234 out.println("unsigned char nextValue='\\0';");
\r
235 out.println("bool holdVal=false;");
\r
238 out.println("void initVal() {");
\r
239 out.println(" nextValue='\\0';");
\r
240 out.println(" holdVal=false;");
\r
244 out.println("unsigned char peek(unsigned char * filearray, int * pos, int * isHighbits, bool isCompressed) {");
\r
245 out.println(" if(!isCompressed) {");
\r
246 out.println(" return filearray[*pos];");
\r
247 out.println(" } else {");
\r
248 out.println(" unsigned char value=0;");
\r
249 out.println(" if(!holdVal) {");
\r
250 out.println(" nextValue=filearray[*pos];");
\r
252 out.println(" if(1==*isHighbits) {");
\r
253 out.println(" value=((nextValue&0x00F0)>>4)&0x000F;");
\r
254 out.println(" holdVal=true;");
\r
255 out.println(" *isHighbits=0;");
\r
256 out.println(" } else {");
\r
257 out.println(" value=nextValue&0x000F;");
\r
258 out.println(" holdVal=false;");
\r
259 out.println(" *isHighbits=1;");
\r
261 out.println(" return value;");
\r
266 out.println("void next(int * pos, bool isCompressed) {");
\r
267 out.println(" if(!isCompressed||!holdVal) {");
\r
268 out.println(" *pos = *pos+1;");
\r
273 out.println("int nextInt(int fd, int * pos, int * isHighbits) {");
\r
274 out.println(" int i = 0;");
\r
275 out.println(" unsigned char * filearray = inputFileArrays[fd];");
\r
276 out.println(" bool isCompressed = false;");
\r
277 out.println(" if(inputFileArrays_decodeTbl[fd]!=0) {");
\r
278 out.println(" isCompressed = true;");
\r
280 out.println(" initVal();");
\r
282 out.println(" unsigned char b='\\0';");
\r
283 out.println(" while(true) {");
\r
284 out.println(" b=peek(filearray, pos, isHighbits, isCompressed); ");
\r
285 out.println(" if((b==' ')||(b=='\\n')){");
\r
286 out.println(" next(pos, isCompressed);");
\r
287 out.println(" } else {");
\r
288 out.println(" break;");
\r
292 out.println(" unsigned int value = 0;");
\r
293 out.println(" bool isNeg=false;");
\r
294 out.println(" unsigned int radix = 10;");
\r
296 out.println(" if (b=='-') {");
\r
297 out.println(" isNeg=true;");
\r
298 out.println(" next(pos, isCompressed);");
\r
299 out.println(" b=peek(filearray, pos, isHighbits, isCompressed);");
\r
301 out.println(" bool cont=true;");
\r
302 out.println(" do {");
\r
303 out.println(" unsigned int val;");
\r
304 out.println(" if (b>='0'&&b<='9')");
\r
305 out.println(" val=b-'0';");
\r
306 out.println(" else if (b>='a'&&b<='z')");
\r
307 out.println(" val=10+b-'a';");
\r
308 out.println(" else if (b>='A'&&b<='Z')");
\r
309 out.println(" val=10+b-'A';");
\r
310 out.println(" else {");
\r
311 out.println(" cont=false;");
\r
313 out.println(" if (cont) {");
\r
314 out.println(" if (val>=radix)");
\r
315 out.println(" printf(\"Error in nextInt(): val >= radix\");");
\r
316 out.println(" value=value*radix+val;");
\r
317 out.println(" next(pos, isCompressed);");
\r
318 out.println(" b=peek(filearray, pos, isHighbits, isCompressed);");
\r
320 out.println(" }while(cont);");
\r
321 out.println(" if (isNeg)");
\r
322 out.println(" value=-value;");
\r
324 out.println(" return value;");
\r
328 out.println("double nextDouble(int fd, int * pos, int * isHighbits) {");
\r
329 out.println(" int i = 0;");
\r
330 out.println(" unsigned char * filearray = inputFileArrays[fd];");
\r
331 out.println(" bool isCompressed = false;");
\r
332 out.println(" if(inputFileArrays_decodeTbl[fd]!=0) {");
\r
333 out.println(" isCompressed = true;");
\r
335 out.println(" initVal();");
\r
337 out.println(" unsigned char b='\\0';");
\r
338 out.println(" while(true) {");
\r
339 out.println(" b=peek(filearray, pos, isHighbits, isCompressed); ");
\r
340 out.println(" if((b==' ')||(b=='\\n')){");
\r
341 out.println(" next(pos, isCompressed);");
\r
342 out.println(" } else {");
\r
343 out.println(" break;");
\r
347 out.println(" double result=0.0;");
\r
348 out.println(" unsigned int value=0;");
\r
349 out.println(" unsigned int maxvalue=((unsigned int)(1<<32)-1)/10;");
\r
350 out.println(" bool isNeg=false;");
\r
351 out.println(" bool isDiv=false;");
\r
352 out.println(" unsigned int radix = 10;");
\r
354 out.println(" if (b=='-') {");
\r
355 out.println(" isNeg=true;");
\r
356 out.println(" next(pos, isCompressed);");
\r
357 out.println(" b=peek(filearray, pos, isHighbits, isCompressed); ");
\r
359 out.println(" bool cont=true;");
\r
360 out.println(" bool exp=false;");
\r
361 out.println(" bool decimal=false;");
\r
362 out.println(" bool compute=true;");
\r
363 out.println(" bool omit=false;");
\r
364 out.println(" unsigned int dcount=0;");
\r
365 out.println(" // compute the base");
\r
366 out.println(" do {");
\r
367 out.println(" unsigned int val;");
\r
368 out.println(" if (b>='0'&&b<='9') {");
\r
369 out.println(" if (!omit) {");
\r
370 out.println(" val=b-'0';");
\r
371 out.println(" if(decimal) {");
\r
372 out.println(" dcount++;");
\r
375 out.println(" } else if (b=='.') {");
\r
376 out.println(" decimal=true;");
\r
377 out.println(" compute=false;");
\r
378 out.println(" } else if (b=='E'||b=='e') {");
\r
379 out.println(" exp=true;");
\r
380 out.println(" cont=false;");
\r
381 out.println(" next(pos, isCompressed);");
\r
382 out.println(" } else {");
\r
383 out.println(" cont=false;");
\r
385 out.println(" if (cont) {");
\r
386 out.println(" if (val>=radix)");
\r
387 out.println(" printf(\"Error in nextDouble(): val >= radix\");");
\r
388 out.println(" if(compute) {");
\r
389 out.println(" if(value<maxvalue) {");
\r
390 out.println(" value=value*radix+val;");
\r
391 out.println(" } else {");
\r
392 out.println(" omit=true;");
\r
393 out.println(" compute=false;");
\r
394 out.println(" dcount--;");
\r
396 out.println(" } else if(!omit) {");
\r
397 out.println(" compute=true;");
\r
399 out.println(" next(pos, isCompressed);");
\r
400 out.println(" b=peek(filearray, pos, isHighbits, isCompressed); ");
\r
402 out.println(" }while(cont);");
\r
403 out.println(" if(exp) {");
\r
404 out.println(" // compute the power index");
\r
405 out.println(" cont=true;");
\r
406 out.println(" unsigned int n=0;");
\r
407 out.println(" b=peek(filearray, pos, isHighbits, isCompressed); ");
\r
408 out.println(" if (b=='-') {");
\r
409 out.println(" isDiv=true;");
\r
410 out.println(" next(pos, isCompressed);");
\r
411 out.println(" } else if (b=='+') {");
\r
412 out.println(" next(pos, isCompressed);");
\r
413 out.println(" b=peek(filearray, pos, isHighbits, isCompressed); ");
\r
415 out.println(" do {");
\r
416 out.println(" unsigned int val;");
\r
417 out.println(" if (b>='0'&&b<='9') {");
\r
418 out.println(" val=b-'0';");
\r
419 out.println(" } else {");
\r
420 out.println(" cont=false;");
\r
422 out.println(" if (cont) {");
\r
423 out.println(" if (val>=radix)");
\r
424 out.println(" printf(\"Error in nextDouble(): val >= radix\");");
\r
425 out.println(" n=n*10+val;");
\r
426 out.println(" next(pos, isCompressed);");
\r
427 out.println(" b=peek(filearray, pos, isHighbits, isCompressed); ");
\r
429 out.println(" }while(cont);");
\r
430 out.println(" if(isDiv) {");
\r
431 out.println(" result = (double)value/pow(radix, n+dcount);");
\r
432 out.println(" } else {");
\r
433 out.println(" if(n>dcount) {");
\r
434 out.println(" result = (double)value*pow(radix, n-dcount);");
\r
435 out.println(" } else if(n<dcount) {");
\r
436 out.println(" result = (double)value/pow(radix, dcount-n);");
\r
437 out.println(" } else {");
\r
438 out.println(" result = (double)value;");
\r
441 out.println(" } else {");
\r
442 out.println(" result = (double)value/pow(radix, dcount);");
\r
444 out.println(" if (isNeg)");
\r
445 out.println(" result=-result;");
\r
447 out.println("return result;");
\r
451 System.out.println("The file and stream is ......closing.......... : closed");
\r
455 catch(IOException e){
\r
456 System.out.println("Exception has been thrown" + e);
\r