Changes for reading input files in MGC version
[IRC.git] / Robust / src / Util / InputFileTranslator.java
1 package Util;\r
2 \r
3 import java.util.Vector;\r
4 import java.util.zip.GZIPInputStream;\r
5 import java.io.File;\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
13 \r
14 public class InputFileTranslator{\r
15     public static String PREFIX="";\r
16     \r
17     public static void main(String args[]){\r
18         try{\r
19             //To Uncompress GZip File Contents we need to open the gzip file.....\r
20             if(args.length<=0){\r
21                 System.out.println("Please enter the valid file name");\r
22             }else{\r
23                 int offset = 0;\r
24                 if (args[offset].equals("-dir")) {\r
25                     PREFIX=args[++offset]+"/";\r
26                     offset++;\r
27                 }\r
28 \r
29                 System.out.println("Opening the output file............. : opened");\r
30                 \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
36                 out.println();\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
42                 out.println();\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
47                 out.close();\r
48                 \r
49                 //Create the .c file that contains the big two-dimension array and \r
50                 //read functions\r
51                 outFilename = PREFIX+"InputFileArrays.c";\r
52                 out = new PrintWriter(new FileWriter(new File(outFilename)));\r
53                 out.println("#include \"InputFileArrays.h\"");\r
54                 out.println();\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
67                     \r
68                     out.println("unsigned char " + arrayname + "[] = {");\r
69 \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
73                     int len;\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
77                             if('#' == buf[j]) {\r
78                                 // skip the comments\r
79                                 while(j<len && buf[j++] != '\n') {\r
80                                 }\r
81                             } else {\r
82                                 if(!printComma) {\r
83                                     printComma = true;\r
84                                 } else {\r
85                                     out.print(',');\r
86                                 }\r
87                                 if(printReturn) {\r
88                                     out.println();\r
89                                     printReturn = false;\r
90                                 }\r
91                                 if('\n' == buf[j]) {\r
92                                     out.print("\'\\n\'");\r
93                                     printReturn = true;\r
94                                 } else {\r
95                                     out.print(buf[j]);\r
96                                 }\r
97                             }\r
98                         }\r
99                     }\r
100                     out.println("};");\r
101                     out.println();\r
102                     gzipInputStream.close();\r
103                 }\r
104                 \r
105                 out.println();\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
109                     \r
110                     if(i > 0) {\r
111                         out.println(',');\r
112                     }\r
113                     out.print("&"+arrayname+"[0]");\r
114                 }\r
115                 out.println();\r
116                 out.println("};");\r
117                 out.println();\r
118                 \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
126                         if(j>0) {\r
127                             out.print(",");\r
128                         }\r
129                         out.print("'"+inFilename.charAt(j)+"'");\r
130                     }\r
131                     out.println("};");\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
137                     out.println("      }");\r
138                     out.println("    }");\r
139                     out.println("    if(i==length) {");\r
140                     out.println("      return "+arrayname.toUpperCase() + ";");\r
141                     out.println("    }");\r
142                     out.println("  }");\r
143                     out.println();\r
144                 }\r
145                 out.println("}");\r
146                 \r
147                 out.println();\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
153                 out.println("    }");\r
154                 out.println("    int value = 0;");\r
155                 out.println("    bool isNeg=false;");\r
156                 out.println("    int radix = 10;");\r
157                 out.println();\r
158                 out.println("    if (filearray[*pos]==\'-\') {");\r
159                 out.println("      isNeg=true;");\r
160                 out.println("      *pos++;");\r
161                 out.println("    }");\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
174                 out.println("        }");\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
180                 out.println("        }");\r
181                 out.println("    }while(cont);");\r
182                 out.println("    if (isNeg)");\r
183                 out.println("     value=-value;");\r
184                 out.println();\r
185                 out.println("    return value;");\r
186                 out.println("  }");\r
187                 out.println();\r
188                 \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
194                 out.println("    }");\r
195                 out.println("    double value = 0.0;");\r
196                 out.println("//TODO");\r
197                 out.println("    return value;");\r
198                 out.println("  }");\r
199                 out.println();\r
200 \r
201                 System.out.println("The file and stream is ......closing.......... : closed");\r
202                 out.close();\r
203             }\r
204         }\r
205         catch(IOException e){\r
206             System.out.println("Exception has been thrown" + e);\r
207         }\r
208     }\r
209 }\r