rendered paste bodypackage at.ac.tuwien.media.atmel.parser;import java.io.*;import java.util.*;import java.util.logging.*;public class ConvertPD { private class Pair{ public int x; public int y; public Pair(int x,int y){ this.x=x; this.y=y; } } private ObjectConf objConf; private Logger log; private ArrayList<PDObject> objectList; public ConvertPD(String config) { objConf = new ObjectConf(); log = Logger.getLogger("convpd.PDConverter"); readConfig(config); } public void writeCHeader(String fileOut) { try{ FileWriter outputFileWriter = new FileWriter(fileOut); BufferedWriter outputStream = new BufferedWriter(outputFileWriter); outputStream.write(objConf.getStrC()); outputStream.close(); }catch(IOException e) { log.warning(e.getMessage()); e.printStackTrace(); } } public void generatePDS(String dir) { objConf.generateAllPDS( dir); } private void readConfig(String fileIn) { String inLine = null; int version=0; int subversion=0; try{ FileReader inputFileReader = new FileReader(fileIn); BufferedReader inputStream = new BufferedReader(inputFileReader); log.info("config file: "+fileIn+" opened."); while ((inLine = inputStream.readLine()) != null) { if(inLine.startsWith("ATMEL_VERSION")){ version=Integer.parseInt((inLine.split(" "))[1]); log.info("Version: "+version); } else if(inLine.startsWith("ATMEL_SUBVERSION")){ version=Integer.parseInt((inLine.split(" "))[1]); log.info("Subversion: "+subversion); } else if(!inLine.startsWith("#"))objConf.addEntry(inLine); } objConf.setVersion(version,subversion); inputStream.close(); log.info("config file closed"); }catch(IOException e) { log.warning(e.getMessage()); e.printStackTrace(); } } public void importPD(String fileIn){ objectList=new ArrayList<PDObject>(); String inLine = null; try{ FileReader inputFileReader = new FileReader(fileIn); BufferedReader inputStream = new BufferedReader(inputFileReader); log.info("input file: "+fileIn+" opened."); int c=0; while ((inLine = inputStream.readLine()) != null) { String[] split=inLine.split(" "); if(inLine.startsWith("#X text")) { objectList.add(new PDObject(c,0,"*dummy*","00")); log.info("Dummy Object !!!!!! "+c+" (text) added." ); c++; } if(inLine.startsWith("#X obj")) { int lastWrd=-1; int objPos=4; if(split[objPos].endsWith(";")){ split[objPos]=split[objPos].substring(0,split[objPos].length()-1); lastWrd=objPos-4; } PDObject tempObj = new PDObject(c,objConf.getInCount(split[objPos]),split[objPos],objConf.getBytecode(split[objPos])); for(int i=0;i<split.length;i++) { if(split[i].endsWith(";")) { split[i]=split[i].substring(0,split[i].length()-1); lastWrd=i-4; } if(i>4)tempObj.addParam(split[i]); } if(lastWrd<0)throw new Exception("Corrupt PD File. (obj)"); if(objConf.getParamCount(split[objPos])!=lastWrd) throw new Exception("Parameter count mismatch for: "+split[objPos]); objectList.add(tempObj); log.info("Object "+c+": "+split[objPos]+" added." ); c++; } if(inLine.startsWith("#X connect")){ if(split[5].endsWith(";")) split[5]=split[5].substring(0,split[5].length()-1); else throw new Exception("Corrupt PD File. (connect)"); int out_id=Integer.parseInt(split[2]); int out_pos=Integer.parseInt(split[3]); int in_id=Integer.parseInt(split[4]); int in_pos=Integer.parseInt(split[5]); log.info("Connecting output "+out_pos+" of "+out_id+". "+objectList.get(out_id).getName()+" to input "+in_pos+" of "+in_id+". "+objectList.get(in_id).getName()+"."); objectList.get(in_id).addInput(in_pos,objectList.get(out_id),out_pos); } } inputStream.close(); log.info("input file closed"); }catch(IOException e) { log.warning(e.getMessage()); e.printStackTrace(); }catch(Exception e) { log.warning(e.getMessage()); e.printStackTrace(); } } public void writeROM(String fileOut) { String stringRom = new String("\n"); ArrayList<Integer> markExported; ArrayList<Pair> markShifted; ArrayList<Integer> markResolved; try{ FileOutputStream fileOutStream = new FileOutputStream(fileOut); BufferedOutputStream outputStream = new BufferedOutputStream(fileOutStream); markExported=new ArrayList<Integer>(); markShifted=new ArrayList<Pair>(); markResolved=new ArrayList<Integer>(); int nextID=0; boolean repeat=true; while(repeat){ repeat=false; for(int i=0;i<objectList.size();i++) { PDObject temp=objectList.get(i); // if this object has not been added yet// System.out.println("try:"+temp.getName()+","+temp.inObjects.length); if(!markExported.contains(i)&&!temp.getName().equals("*dummy*")) { boolean resolved=true; for(int j=0;j<temp.inObjects.length;j++) { if(!markResolved.contains(objectList.get(i).inObjects[j][0].getID()))resolved=false; } if(resolved){ for(int j=0;j<objectList.size();j++) for(int k=0;k<objectList.get(j).inObjects.length;k++) { boolean rename=true; for(int l=0;l<markShifted.size();l++) if(markShifted.get(l).x==j&&markShifted.get(l).y==k)rename=false; if(rename) if(objectList.get(j).inObjects[k][0].getID()==temp.getID()){ log.config("renaming "+temp.getID()+" to "+nextID+" for pair: "+j+","+k); objectList.get(j).inObjects[k][0].setID(nextID); markShifted.add(new Pair(j,k)); } } temp.setID(nextID); repeat=true;// System.out.println("export:"+temp.getName()); outputStream.write(temp.getID()); outputStream.write(Integer.parseInt(temp.bytecode,16)); stringRom+=(temp.getID()+" = "+temp.getName()+" "); for(int k=0;k<temp.params.size();k++) { int c=Integer.parseInt(temp.params.get(k),10); outputStream.write(c); stringRom+=(" ["+c+"] "); } for(int j=0;j<temp.inObjects.length;j++) { //outputStream.write(253); //outputStream.write(temp.inObjects[j][0].getID()); outputStream.write(objectList.get(i).inObjects[j][0].getID()); outputStream.write(temp.outputSelect[j]); stringRom+=(" "+temp.inObjects[j][0].getID()+" <"+temp.outputSelect[j]+">"); }// markExported.add(temp.getID()); markExported.add(i); markResolved.add(nextID); try{ nextID+=objConf.getOutCount(temp.getName());// if(objConf.getOutCount(temp.getName())==0)nextID++; }catch(Exception ex){ log.warning("ERROR"); } stringRom+=("\n"); } } }} outputStream.write(255); outputStream.close(); log.finest(stringRom); }catch(IOException e) { log.warning(e.getMessage()); e.printStackTrace(); } } /* private void exportFile_dep(String fileOut) { try{ FileWriter outputFileWriter = new FileWriter(fileOut); BufferedWriter outputStream = new BufferedWriter(outputFileWriter); for(int i=0;i<objectList.size();i++) { if(objectList.get(i).getName().equals("out")){ objectList.get(i).Dump(); objectList.get(i).export(outputStream); } } outputStream.write(255); outputStream.close(); }catch(IOException e) { log.warning(e.getMessage()); e.printStackTrace(); } } public static void oldmain (String[] args) { if(args.length!=5) { log.info("usage: java ConvertPD <input_file> <output_file> <config_file> <c_header_file> <pd_obj_dir>"); log.info("starting gui"); return; } String inputFileName = args[0]; String outputFileName = args[1]; String configFileName = args[2]; String CHeaderFileName = args[3]; String PDObjectsDir = args[4]; try{ readConfig(configFileName); writeConfig(CHeaderFileName); importFile(inputFileName); exportFile(outputFileName); generatePDS(PDObjectsDir); }catch(Exception e) { log.warning(e.getMessage()); e.printStackTrace(); } }*/ }