760b5b9244e7c536fe016cc5bbcce1e413846a03
[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("#include \"math.h\"");\r
55                 out.println();\r
56                 Vector<String> sourcefiles=new Vector<String>();\r
57                 for(int i=0; i<args.length-offset; i++)  {\r
58                     String inFilename = args[i+offset];\r
59                     String arrayname = inFilename.replaceAll("\\.", "_");\r
60                     sourcefiles.add(inFilename);\r
61                     out.println("#define " + arrayname.toUpperCase() + " " + i);\r
62                     System.out.println("Opening the gzip file.......................... :  opened");\r
63                     GZIPInputStream gzipInputStream = null;\r
64                     FileInputStream fileInputStream = null;\r
65                     gzipInputStream = new GZIPInputStream(new FileInputStream(inFilename));\r
66                     //OutputStream out = new FileOutputStream(outFilename);\r
67                     System.out.println("Trsansferring bytes from the compressed file to the output file........:  Transfer successful");\r
68                     \r
69                     out.println("unsigned char " + arrayname + "[] = {");\r
70 \r
71                     boolean printComma = false;\r
72                     boolean printReturn = false;\r
73                     byte[] buf = new byte[1024];  //size can be changed according to programmer's need.\r
74                     int len;\r
75                     while ((len = gzipInputStream.read(buf)) > 0) {\r
76                         //out.write(buf, 0, len);\r
77                         for(int j = 0; j < len; j++) {\r
78                             if('#' == buf[j]) {\r
79                                 // skip the comments\r
80                                 while(j<len && buf[j++] != '\n') {\r
81                                 }\r
82                             } else {\r
83                                 if(!printComma) {\r
84                                     printComma = true;\r
85                                 } else {\r
86                                     out.print(',');\r
87                                 }\r
88                                 if(printReturn) {\r
89                                     out.println();\r
90                                     printReturn = false;\r
91                                 }\r
92                                 if('\n' == buf[j]) {\r
93                                     out.print("\'\\n\'");\r
94                                     printReturn = true;\r
95                                 } else {\r
96                                     out.print(buf[j]);\r
97                                 }\r
98                             }\r
99                         }\r
100                     }\r
101                     out.println("};");\r
102                     out.println();\r
103                     gzipInputStream.close();\r
104                 }\r
105                 \r
106                 out.println();\r
107                 out.println("unsigned char * inputFileArrays[]= {");\r
108                 for(int i = 0; i < sourcefiles.size(); i++) {\r
109                     String arrayname = sourcefiles.elementAt(i).replaceAll("\\.", "_");\r
110                     \r
111                     if(i > 0) {\r
112                         out.println(',');\r
113                     }\r
114                     out.print("&"+arrayname+"[0]");\r
115                 }\r
116                 out.println();\r
117                 out.println("};");\r
118                 out.println();\r
119                 \r
120                 //Create the read functions\r
121                 out.println("int filename2fd(char * filename, int length) {");\r
122                 for(int i=0; i<sourcefiles.size(); i++)  {\r
123                     String inFilename = sourcefiles.elementAt(i);\r
124                     String arrayname = inFilename.replaceAll("\\.", "_");\r
125                     out.print("  char " + arrayname + "[] = {");\r
126                     for(int j = 0; j < inFilename.length(); j++) {\r
127                         if(j>0) {\r
128                             out.print(",");\r
129                         }\r
130                         out.print("'"+inFilename.charAt(j)+"'");\r
131                     }\r
132                     out.println("};");\r
133                     out.println("  if(length==" + inFilename.length() + ") {");\r
134                     out.println("    int i;");\r
135                     out.println("    for(i = 0; i < length; i++) {");\r
136                     out.println("      if(filename[i]!="+arrayname+"[i]) {");\r
137                     out.println("        break;");\r
138                     out.println("      }");\r
139                     out.println("    }");\r
140                     out.println("    if(i==length) {");\r
141                     out.println("      return "+arrayname.toUpperCase() + ";");\r
142                     out.println("    }");\r
143                     out.println("  }");\r
144                     out.println();\r
145                 }\r
146                 out.println("  return -1;");\r
147                 out.println("}");\r
148                 \r
149                 out.println();\r
150                 out.println("int nextInt(int fd, int * pos) {");\r
151                 out.println("    int i = 0;");\r
152                 out.println("    unsigned char * filearray = inputFileArrays[fd];");\r
153                 out.println("    while((filearray[*pos]==\' \')||(filearray[*pos]==\'\\n\')){");\r
154                 out.println("     *pos=*pos+1;");\r
155                 out.println("    }");\r
156                 out.println("    unsigned int value = 0;");\r
157                 out.println("    bool isNeg=false;");\r
158                 out.println("    unsigned int radix = 10;");\r
159                 out.println();\r
160                 out.println("    if (filearray[*pos]==\'-\') {");\r
161                 out.println("      isNeg=true;");\r
162                 out.println("      *pos=*pos+1;");\r
163                 out.println("    }");\r
164                 out.println("    bool cont=true;");\r
165                 out.println("    do {");\r
166                 out.println("      unsigned char b=filearray[*pos];");\r
167                 out.println("      unsigned int val;");\r
168                 out.println("      if (b>=\'0\'&&b<=\'9\')");\r
169                 out.println("        val=b-\'0\';");\r
170                 out.println("      else if (b>=\'a\'&&b<=\'z\')");\r
171                 out.println("        val=10+b-\'a\';");\r
172                 out.println("      else if (b>=\'A\'&&b<=\'Z\')");\r
173                 out.println("        val=10+b-\'A\';");\r
174                 out.println("      else {");\r
175                 out.println("        cont=false;");\r
176                 out.println("      }");\r
177                 out.println("      if (cont) {");\r
178                 out.println("        if (val>=radix)");\r
179                 out.println("          printf(\"Error in nextInt(): val >= radix\");");\r
180                 out.println("        value=value*radix+val;");\r
181                 out.println("        *pos=*pos+1;");\r
182                 out.println("      }");\r
183                 out.println("    }while(cont);");\r
184                 out.println("    if (isNeg)");\r
185                 out.println("     value=-value;");\r
186                 out.println();\r
187                 out.println("    return value;");\r
188                 out.println("  }");\r
189                 out.println();\r
190                 \r
191                 out.println("double nextDouble(int fd, int * pos) {");\r
192                 out.println("    int i = 0;");\r
193                 out.println("    unsigned char * filearray = inputFileArrays[fd];");\r
194                 out.println("    while((filearray[*pos]==\' \')||(filearray[*pos]==\'\\n\')){");\r
195                 out.println("     *pos=*pos+1;");\r
196                 out.println("    }");\r
197                 out.println("    double result=0.0;");\r
198                 out.println("    unsigned int value=0;");\r
199                 out.println("    unsigned int maxvalue=((unsigned int)(1<<32)-1)/10;");\r
200                 out.println("    bool isNeg=false;");\r
201                 out.println("    bool isDiv=false;");\r
202                 out.println("    unsigned int radix = 10;");\r
203                 out.println();\r
204                 out.println("    if (filearray[*pos]=='-') {");\r
205                 out.println("      isNeg=true;");\r
206                 out.println("      *pos=*pos+1;");\r
207                 out.println("    }");\r
208                 out.println("    bool cont=true;");\r
209                 out.println("    bool exp=false;");\r
210                 out.println("    bool decimal=false;");\r
211                 out.println("    bool compute=true;");\r
212                 out.println("    bool omit=false;");\r
213                 out.println("    unsigned int dcount=0;");\r
214                 out.println("    // compute the base");\r
215                 out.println("    do {");\r
216                 out.println("      unsigned char b=filearray[*pos];");\r
217                 out.println("      unsigned int val;");\r
218                 out.println("      if (b>='0'&&b<='9') {");\r
219                 out.println("        if (!omit) {");\r
220                 out.println("          val=b-'0';");\r
221                 out.println("          if(decimal) {");\r
222                 out.println("            dcount++;");\r
223                 out.println("          }");\r
224                 out.println("        }");\r
225                 out.println("      } else if (b=='.') {");\r
226                 out.println("        decimal=true;");\r
227                 out.println("        compute=false;");\r
228                 out.println("      } else if (b=='E'||b=='e') {");\r
229                 out.println("        exp=true;");\r
230                 out.println("        cont=false;");\r
231                 out.println("        *pos=*pos+1;");\r
232                 out.println("      } else {");\r
233                 out.println("        cont=false;");\r
234                 out.println("      }");\r
235                 out.println("      if (cont) {");\r
236                 out.println("        if (val>=radix)");\r
237                 out.println("          printf(\"Error in nextDouble(): val >= radix\");");\r
238                 out.println("        if(compute) {");\r
239                 out.println("          if(value<maxvalue) {");\r
240                 out.println("            value=value*radix+val;");\r
241                 out.println("          } else {");\r
242                 out.println("            omit=true;");\r
243                 out.println("            compute=false;");\r
244                 out.println("            dcount--;");\r
245                 out.println("          }");\r
246                 out.println("        } else if(!omit) {");\r
247                 out.println("          compute=true;");\r
248                 out.println("        }");\r
249                 out.println("        *pos=*pos+1;");\r
250                 out.println("      }");\r
251                 out.println("    }while(cont);");\r
252                 out.println("    if(exp) {");\r
253                 out.println("      // compute the power index");\r
254                 out.println("      cont=true;");\r
255                 out.println("      unsigned int n=0;");\r
256                 out.println("      if (filearray[*pos]=='-') {");\r
257                 out.println("        isDiv=true;");\r
258                 out.println("        *pos=*pos+1;");\r
259                 out.println("      } else if (filearray[*pos]=='+') {");\r
260                 out.println("        *pos=*pos+1;");\r
261                 out.println("      }");\r
262                 out.println("      do {");\r
263                 out.println("        unsigned char b=filearray[*pos];");\r
264                 out.println("        unsigned int val;");\r
265                 out.println("        if (b>='0'&&b<='9') {");\r
266                 out.println("          val=b-'0';");\r
267                 out.println("        } else {");\r
268                 out.println("          cont=false;");\r
269                 out.println("        }");\r
270                 out.println("        if (cont) {");\r
271                 out.println("          if (val>=radix)");\r
272                 out.println("            printf(\"Error in nextDouble(): val >= radix\");");\r
273                 out.println("          n=n*10+val;");\r
274                 out.println("          *pos=*pos+1;");\r
275                 out.println("        }");\r
276                 out.println("      }while(cont);");\r
277                 out.println("      if(isDiv) {");\r
278                 out.println("        result = (double)value/pow(radix, n+dcount);");\r
279                 out.println("      } else {");\r
280                 out.println("        if(n>dcount) {");\r
281                 out.println("          result = (double)value*pow(radix, n-dcount);");\r
282                 out.println("        } else if(n<dcount) {");\r
283                 out.println("          result = (double)value/pow(radix, dcount-n);");\r
284                 out.println("        } else {");\r
285                 out.println("          result = (double)value;");\r
286                 out.println("        }");\r
287                 out.println("      }");\r
288                 out.println("    } else {");\r
289                 out.println("      result = (double)value/pow(radix, dcount);");\r
290                 out.println("    }");\r
291                 out.println("    if (isNeg)");\r
292                 out.println("      result=-result;");\r
293                 out.println();\r
294                 out.println("return result;");\r
295                 out.println("  }");\r
296                 out.println();\r
297 \r
298                 System.out.println("The file and stream is ......closing.......... : closed");\r
299                 out.close();\r
300             }\r
301         }\r
302         catch(IOException e){\r
303             System.out.println("Exception has been thrown" + e);\r
304         }\r
305     }\r
306 }\r