home *** CD-ROM | disk | FTP | other *** search
- import java.io.File;
- import java.io.FileNotFoundException;
- import java.io.IOException;
- import java.util.Properties;
- import java.util.Vector;
- import stardiv.classfile.ClassReader;
- import stardiv.conversion.converter;
-
- class Convert {
- private boolean bForce = false;
- private boolean bDebug = false;
- private boolean bInline = true;
- private String sHxxOutput;
- private String sCxxOutput;
- private Properties props;
- private String sFileSep;
- private char cFileSep;
- private String sPathSep;
- private char cPathSep;
- public Vector ToDo;
- private Vector Dependencies;
- private Vector Classes;
- private converter aConverter;
- private ClassReader aReader;
-
- public void start(String[] var1) throws IOException {
- if (var1.length == 0) {
- System.out.println("C++ Header Generator");
- System.out.println();
- System.out.println("Aufruf :");
- System.out.println("java Conv1 class(es) [options]");
- System.out.println();
- System.out.println("Verfuegbare Optionen :");
- System.out.println(" -debug : Ausgabe auch auf Bildschirm");
- System.out.println(" -force : Erzwingt komplette Neuuebersetzung");
- System.out.println(" -noInline : kein Inline Code ");
- System.out.println(" -outputhxx dir : Hxx - Dateien werden ins Directory dir geschrieben");
- System.out.println(" -outputcxx dir : Cxx - Dateien werden ins Directory dir geschrieben");
- } else if (var1[0].equals("depend")) {
- if (var1.length != 2) {
- System.err.println("Falsche Argumente");
- System.exit(-1);
- }
-
- this.getPaths();
- this.Dependencies = new Vector();
- this.gen_Dependencies(var1[1], 0);
-
- for(int var4 = 0; var4 < this.Dependencies.size(); ++var4) {
- System.out.println(this.Dependencies.elementAt(var4));
- }
-
- } else {
- this.sHxxOutput = "";
- this.sCxxOutput = "";
- this.ToDo = new Vector();
-
- int var2;
- for(var2 = 0; var2 < var1.length && !var1[var2].startsWith("-"); ++var2) {
- this.ToDo.addElement(var1[var2]);
- }
-
- for(int var3 = var2; var3 < var1.length; ++var3) {
- if (var1[var3].equals("-debug")) {
- this.bDebug = true;
- } else if (var1[var3].equals("-force")) {
- this.bForce = true;
- } else if (var1[var3].equals("-noInline")) {
- this.bInline = false;
- } else if (var1[var3].equals("-outputhxx")) {
- if (var3 == var1.length - 1) {
- System.err.println("Error : Name of the Header-directory is missing! ");
- System.exit(-1);
- }
-
- this.sHxxOutput = var1[var3 + 1];
- if (!(new File(this.sHxxOutput)).isDirectory()) {
- System.err.println(" directory does not exist !");
- System.exit(-1);
- }
-
- ++var3;
- } else if (var1[var3].equals("-outputcxx")) {
- if (var3 == var1.length - 1) {
- System.err.println("Error : Name of the Source-directory is missing! ");
- System.exit(-1);
- }
-
- this.sCxxOutput = var1[var3 + 1];
- if (!(new File(this.sCxxOutput)).isDirectory()) {
- System.err.println(" directory does not exist !");
- System.exit(-1);
- }
-
- ++var3;
- } else {
- System.err.println("Unknown argument !");
- }
- }
-
- this.getPaths();
- this.startTrans();
- }
- }
-
- public void startTrans() throws IOException {
- this.aConverter = new converter();
- if (this.aConverter.start((String)this.ToDo.elementAt(0), this.bDebug, this.bInline, this.sHxxOutput, this.sCxxOutput) == -1) {
- System.err.println(" Error ... exit program ");
- System.exit(-1);
- }
-
- this.ToDo.removeElementAt(0);
- Vector var1 = this.aConverter.getReturns();
-
- for(int var2 = 0; var2 < var1.size(); ++var2) {
- this.ToDo.addElement(var1.elementAt(var2));
- }
-
- this.Classes = new Vector();
-
- while(this.ToDo.size() > 0) {
- String var3 = (String)this.ToDo.firstElement();
- this.rekursive_Trans(var3);
- this.ToDo.removeElement(var3);
- this.Classes.addElement(var3);
- }
-
- }
-
- void rekursive_Trans(String var1) throws IOException {
- new Vector();
- long var3 = 0L;
- long var5 = 0L;
- long var7 = 0L;
- String var10 = "";
- String var11 = "";
-
- while(!var1.equals("java/lang/Object") && !this.Classes.contains(var1)) {
- System.out.println("Translating ... " + var1);
-
- try {
- this.aReader = ClassReader.getClassReader(var1);
- } catch (FileNotFoundException var16) {
- System.err.println("Datei : " + var1 + " nicht gefunden !");
- System.exit(-1);
- }
-
- var5 = this.aReader.lastModified();
- String var12 = var1.replace('\\', '_');
- var12 = var12.replace('/', '_');
- String var9;
- if (this.sHxxOutput.equals("")) {
- var9 = var12 + ".hxx";
- if (this.bInline) {
- var10 = var12 + "_inline.h";
- } else {
- var11 = var12 + ".cxx";
- }
- } else {
- var9 = this.sHxxOutput + this.sFileSep + var12 + ".hxx";
- if (this.bInline) {
- var10 = this.sHxxOutput + this.sFileSep + var12 + "_inline.h";
- } else {
- var10 = this.sCxxOutput + this.sFileSep + var12 + ".cxx";
- }
- }
-
- File var13 = new File(var9);
- File var14;
- if (this.bInline) {
- var14 = new File(var10);
- } else {
- var14 = new File(var11);
- }
-
- if (var13.exists()) {
- var3 = var13.lastModified();
- }
-
- if (var14.exists()) {
- var7 = var14.lastModified();
- }
-
- Vector var2;
- if (var13.exists() && var3 > var5 && var14.exists() && var7 > var5 && !this.bForce) {
- System.out.println("File for " + var1 + " up to date !");
- var2 = this.aReader.GetDependencies(true);
- } else {
- if (this.aConverter.start(var1, this.bDebug, this.bInline, this.sHxxOutput, this.sCxxOutput) == -1) {
- System.out.println(" Fehler aufgetreten - Programm beendet ");
- System.exit(-1);
- }
-
- var2 = this.aConverter.getReturns();
- }
-
- this.Classes.addElement(var1);
- var1 = this.aReader.getSuperClassName();
-
- for(int var15 = 0; var15 < var2.size(); ++var15) {
- if (!this.ToDo.contains(var2.elementAt(var15))) {
- this.ToDo.addElement(var2.elementAt(var15));
- }
- }
- }
-
- }
-
- void getPaths() {
- this.props = new Properties(System.getProperties());
- this.sFileSep = this.props.getProperty("file.separator");
- this.cFileSep = this.sFileSep.charAt(0);
- this.sPathSep = this.props.getProperty("path.separator");
- this.cPathSep = this.sPathSep.charAt(0);
- }
-
- public void gen_Dependencies(String var1, int var2) {
- Vector var3 = null;
- if (var1 != null) {
- try {
- ClassReader var4 = ClassReader.getClassReader(var1);
- var3 = var4.GetDependencies(true);
- } catch (Exception var7) {
- System.err.println("Exception : " + var7);
- }
- }
-
- if (var3 != null) {
- for(int var5 = 0; var5 < var3.size(); ++var5) {
- for(int var6 = 0; var6 < var2; ++var6) {
- System.out.print("\t");
- }
-
- System.out.println(var3.elementAt(var5));
- if (!this.Dependencies.contains(var3.elementAt(var5))) {
- this.Dependencies.addElement(var3.elementAt(var5));
- }
-
- this.gen_Dependencies(((String)var3.elementAt(var5)).replace('/', '\\') + ".class", var2 + 1);
- }
- }
-
- }
- }
-