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
54 out.println("#include \"math.h\"");
\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
69 out.println("unsigned char " + arrayname + "[] = {");
\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
75 while ((len = gzipInputStream.read(buf)) > 0) {
\r
76 //out.write(buf, 0, len);
\r
77 for(int j = 0; j < len; j++) {
\r
79 // skip the comments
\r
80 while(j<len && buf[j++] != '\n') {
\r
90 printReturn = false;
\r
92 if('\n' == buf[j]) {
\r
93 out.print("\'\\n\'");
\r
103 gzipInputStream.close();
\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
114 out.print("&"+arrayname+"[0]");
\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
130 out.print("'"+inFilename.charAt(j)+"'");
\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
140 out.println(" if(i==length) {");
\r
141 out.println(" return "+arrayname.toUpperCase() + ";");
\r
146 out.println(" return -1;");
\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
156 out.println(" unsigned int value = 0;");
\r
157 out.println(" bool isNeg=false;");
\r
158 out.println(" unsigned int radix = 10;");
\r
160 out.println(" if (filearray[*pos]==\'-\') {");
\r
161 out.println(" isNeg=true;");
\r
162 out.println(" *pos=*pos+1;");
\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
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
183 out.println(" }while(cont);");
\r
184 out.println(" if (isNeg)");
\r
185 out.println(" value=-value;");
\r
187 out.println(" return value;");
\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
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
204 out.println(" if (filearray[*pos]=='-') {");
\r
205 out.println(" isNeg=true;");
\r
206 out.println(" *pos=*pos+1;");
\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
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
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
246 out.println(" } else if(!omit) {");
\r
247 out.println(" compute=true;");
\r
249 out.println(" *pos=*pos+1;");
\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
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
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
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
288 out.println(" } else {");
\r
289 out.println(" result = (double)value/pow(radix, dcount);");
\r
291 out.println(" if (isNeg)");
\r
292 out.println(" result=-result;");
\r
294 out.println("return result;");
\r
298 System.out.println("The file and stream is ......closing.......... : closed");
\r
302 catch(IOException e){
\r
303 System.out.println("Exception has been thrown" + e);
\r