home *** CD-ROM | disk | FTP | other *** search
/ PC Online 1997 August / PCO0897.ISO / filesbbs / os2 / fp1os2.arj / OS2 / DATA / 49 / C / 0 / F_26836 / Convert.class (.txt) < prev    next >
Encoding:
Java Class File  |  1997-05-15  |  5.8 KB  |  246 lines

  1. import java.io.File;
  2. import java.io.FileNotFoundException;
  3. import java.io.IOException;
  4. import java.util.Properties;
  5. import java.util.Vector;
  6. import stardiv.classfile.ClassReader;
  7. import stardiv.conversion.converter;
  8.  
  9. class Convert {
  10.    private boolean bForce = false;
  11.    private boolean bDebug = false;
  12.    private boolean bInline = true;
  13.    private String sHxxOutput;
  14.    private String sCxxOutput;
  15.    private Properties props;
  16.    private String sFileSep;
  17.    private char cFileSep;
  18.    private String sPathSep;
  19.    private char cPathSep;
  20.    public Vector ToDo;
  21.    private Vector Dependencies;
  22.    private Vector Classes;
  23.    private converter aConverter;
  24.    private ClassReader aReader;
  25.  
  26.    public void start(String[] var1) throws IOException {
  27.       if (var1.length == 0) {
  28.          System.out.println("C++ Header Generator");
  29.          System.out.println();
  30.          System.out.println("Aufruf :");
  31.          System.out.println("java Conv1 class(es) [options]");
  32.          System.out.println();
  33.          System.out.println("Verfuegbare Optionen :");
  34.          System.out.println(" -debug         : Ausgabe auch auf Bildschirm");
  35.          System.out.println(" -force         : Erzwingt komplette Neuuebersetzung");
  36.          System.out.println(" -noInline      : kein Inline Code ");
  37.          System.out.println(" -outputhxx dir : Hxx - Dateien werden ins Directory dir geschrieben");
  38.          System.out.println(" -outputcxx dir : Cxx - Dateien werden ins Directory dir geschrieben");
  39.       } else if (var1[0].equals("depend")) {
  40.          if (var1.length != 2) {
  41.             System.err.println("Falsche Argumente");
  42.             System.exit(-1);
  43.          }
  44.  
  45.          this.getPaths();
  46.          this.Dependencies = new Vector();
  47.          this.gen_Dependencies(var1[1], 0);
  48.  
  49.          for(int var4 = 0; var4 < this.Dependencies.size(); ++var4) {
  50.             System.out.println(this.Dependencies.elementAt(var4));
  51.          }
  52.  
  53.       } else {
  54.          this.sHxxOutput = "";
  55.          this.sCxxOutput = "";
  56.          this.ToDo = new Vector();
  57.  
  58.          int var2;
  59.          for(var2 = 0; var2 < var1.length && !var1[var2].startsWith("-"); ++var2) {
  60.             this.ToDo.addElement(var1[var2]);
  61.          }
  62.  
  63.          for(int var3 = var2; var3 < var1.length; ++var3) {
  64.             if (var1[var3].equals("-debug")) {
  65.                this.bDebug = true;
  66.             } else if (var1[var3].equals("-force")) {
  67.                this.bForce = true;
  68.             } else if (var1[var3].equals("-noInline")) {
  69.                this.bInline = false;
  70.             } else if (var1[var3].equals("-outputhxx")) {
  71.                if (var3 == var1.length - 1) {
  72.                   System.err.println("Error : Name of the Header-directory is missing! ");
  73.                   System.exit(-1);
  74.                }
  75.  
  76.                this.sHxxOutput = var1[var3 + 1];
  77.                if (!(new File(this.sHxxOutput)).isDirectory()) {
  78.                   System.err.println(" directory does not exist !");
  79.                   System.exit(-1);
  80.                }
  81.  
  82.                ++var3;
  83.             } else if (var1[var3].equals("-outputcxx")) {
  84.                if (var3 == var1.length - 1) {
  85.                   System.err.println("Error : Name of the Source-directory is missing! ");
  86.                   System.exit(-1);
  87.                }
  88.  
  89.                this.sCxxOutput = var1[var3 + 1];
  90.                if (!(new File(this.sCxxOutput)).isDirectory()) {
  91.                   System.err.println(" directory does not exist !");
  92.                   System.exit(-1);
  93.                }
  94.  
  95.                ++var3;
  96.             } else {
  97.                System.err.println("Unknown argument !");
  98.             }
  99.          }
  100.  
  101.          this.getPaths();
  102.          this.startTrans();
  103.       }
  104.    }
  105.  
  106.    public void startTrans() throws IOException {
  107.       this.aConverter = new converter();
  108.       if (this.aConverter.start((String)this.ToDo.elementAt(0), this.bDebug, this.bInline, this.sHxxOutput, this.sCxxOutput) == -1) {
  109.          System.err.println(" Error ... exit program ");
  110.          System.exit(-1);
  111.       }
  112.  
  113.       this.ToDo.removeElementAt(0);
  114.       Vector var1 = this.aConverter.getReturns();
  115.  
  116.       for(int var2 = 0; var2 < var1.size(); ++var2) {
  117.          this.ToDo.addElement(var1.elementAt(var2));
  118.       }
  119.  
  120.       this.Classes = new Vector();
  121.  
  122.       while(this.ToDo.size() > 0) {
  123.          String var3 = (String)this.ToDo.firstElement();
  124.          this.rekursive_Trans(var3);
  125.          this.ToDo.removeElement(var3);
  126.          this.Classes.addElement(var3);
  127.       }
  128.  
  129.    }
  130.  
  131.    void rekursive_Trans(String var1) throws IOException {
  132.       new Vector();
  133.       long var3 = 0L;
  134.       long var5 = 0L;
  135.       long var7 = 0L;
  136.       String var10 = "";
  137.       String var11 = "";
  138.  
  139.       while(!var1.equals("java/lang/Object") && !this.Classes.contains(var1)) {
  140.          System.out.println("Translating ... " + var1);
  141.  
  142.          try {
  143.             this.aReader = ClassReader.getClassReader(var1);
  144.          } catch (FileNotFoundException var16) {
  145.             System.err.println("Datei : " + var1 + " nicht gefunden !");
  146.             System.exit(-1);
  147.          }
  148.  
  149.          var5 = this.aReader.lastModified();
  150.          String var12 = var1.replace('\\', '_');
  151.          var12 = var12.replace('/', '_');
  152.          String var9;
  153.          if (this.sHxxOutput.equals("")) {
  154.             var9 = var12 + ".hxx";
  155.             if (this.bInline) {
  156.                var10 = var12 + "_inline.h";
  157.             } else {
  158.                var11 = var12 + ".cxx";
  159.             }
  160.          } else {
  161.             var9 = this.sHxxOutput + this.sFileSep + var12 + ".hxx";
  162.             if (this.bInline) {
  163.                var10 = this.sHxxOutput + this.sFileSep + var12 + "_inline.h";
  164.             } else {
  165.                var10 = this.sCxxOutput + this.sFileSep + var12 + ".cxx";
  166.             }
  167.          }
  168.  
  169.          File var13 = new File(var9);
  170.          File var14;
  171.          if (this.bInline) {
  172.             var14 = new File(var10);
  173.          } else {
  174.             var14 = new File(var11);
  175.          }
  176.  
  177.          if (var13.exists()) {
  178.             var3 = var13.lastModified();
  179.          }
  180.  
  181.          if (var14.exists()) {
  182.             var7 = var14.lastModified();
  183.          }
  184.  
  185.          Vector var2;
  186.          if (var13.exists() && var3 > var5 && var14.exists() && var7 > var5 && !this.bForce) {
  187.             System.out.println("File for  " + var1 + " up to date !");
  188.             var2 = this.aReader.GetDependencies(true);
  189.          } else {
  190.             if (this.aConverter.start(var1, this.bDebug, this.bInline, this.sHxxOutput, this.sCxxOutput) == -1) {
  191.                System.out.println(" Fehler aufgetreten - Programm beendet ");
  192.                System.exit(-1);
  193.             }
  194.  
  195.             var2 = this.aConverter.getReturns();
  196.          }
  197.  
  198.          this.Classes.addElement(var1);
  199.          var1 = this.aReader.getSuperClassName();
  200.  
  201.          for(int var15 = 0; var15 < var2.size(); ++var15) {
  202.             if (!this.ToDo.contains(var2.elementAt(var15))) {
  203.                this.ToDo.addElement(var2.elementAt(var15));
  204.             }
  205.          }
  206.       }
  207.  
  208.    }
  209.  
  210.    void getPaths() {
  211.       this.props = new Properties(System.getProperties());
  212.       this.sFileSep = this.props.getProperty("file.separator");
  213.       this.cFileSep = this.sFileSep.charAt(0);
  214.       this.sPathSep = this.props.getProperty("path.separator");
  215.       this.cPathSep = this.sPathSep.charAt(0);
  216.    }
  217.  
  218.    public void gen_Dependencies(String var1, int var2) {
  219.       Vector var3 = null;
  220.       if (var1 != null) {
  221.          try {
  222.             ClassReader var4 = ClassReader.getClassReader(var1);
  223.             var3 = var4.GetDependencies(true);
  224.          } catch (Exception var7) {
  225.             System.err.println("Exception : " + var7);
  226.          }
  227.       }
  228.  
  229.       if (var3 != null) {
  230.          for(int var5 = 0; var5 < var3.size(); ++var5) {
  231.             for(int var6 = 0; var6 < var2; ++var6) {
  232.                System.out.print("\t");
  233.             }
  234.  
  235.             System.out.println(var3.elementAt(var5));
  236.             if (!this.Dependencies.contains(var3.elementAt(var5))) {
  237.                this.Dependencies.addElement(var3.elementAt(var5));
  238.             }
  239.  
  240.             this.gen_Dependencies(((String)var3.elementAt(var5)).replace('/', '\\') + ".class", var2 + 1);
  241.          }
  242.       }
  243.  
  244.    }
  245. }
  246.