package 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 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(); 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;i4)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 markExported; ArrayList markShifted; ArrayList markResolved; try{ FileOutputStream fileOutStream = new FileOutputStream(fileOut); BufferedOutputStream outputStream = new BufferedOutputStream(fileOutStream); markExported=new ArrayList(); markShifted=new ArrayList(); markResolved=new ArrayList(); int nextID=0; boolean repeat=true; while(repeat){ repeat=false; for(int i=0;i"); } // 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 "); 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(); } } */ }