home *** CD-ROM | disk | FTP | other *** search
/ Symantec Visual Cafe for Java 2.5 / symantec-visual-cafe-2.5-database-dev-edition.iso / VPage / Java.bin / CLASSES.ZIP / sun / tools / native2ascii / Main.class (.txt)
Encoding:
Java Class File  |  1997-07-08  |  5.0 KB  |  228 lines

  1. package sun.tools.native2ascii;
  2.  
  3. import java.io.BufferedInputStream;
  4. import java.io.BufferedOutputStream;
  5. import java.io.DataInputStream;
  6. import java.io.File;
  7. import java.io.FileInputStream;
  8. import java.io.FileOutputStream;
  9. import java.io.IOException;
  10. import java.io.InputStream;
  11. import java.io.OutputStream;
  12. import java.util.Vector;
  13. import sun.io.ByteToCharConverter;
  14. import sun.io.CharToByteConverter;
  15.  
  16. public class Main {
  17.    String inputFileName = "input file";
  18.    String outputFileName = "output file";
  19.    File tempFile;
  20.    boolean reverse = false;
  21.  
  22.    public synchronized boolean convert(String[] var1) {
  23.       Vector var2 = new Vector(2);
  24.       String var3 = null;
  25.  
  26.       for(int var4 = 0; var4 < var1.length; ++var4) {
  27.          if (var1[var4].equals("-encoding")) {
  28.             if (var4 + 1 >= var1.length) {
  29.                this.error("-encoding requires argument");
  30.                this.usage();
  31.                return false;
  32.             }
  33.  
  34.             ++var4;
  35.             var3 = var1[var4];
  36.          } else if (var1[var4].equals("-reverse")) {
  37.             this.reverse = true;
  38.          } else {
  39.             if (var2.size() > 1) {
  40.                this.usage();
  41.                return false;
  42.             }
  43.  
  44.             var2.addElement(var1[var4]);
  45.          }
  46.       }
  47.  
  48.       try {
  49.          InputStream var5 = var2.size() == 0 ? System.in : this.makeInputStream((String)var2.elementAt(0));
  50.          Object var6 = var2.size() == 2 ? this.makeOutputStream((String)var2.elementAt(1)) : System.out;
  51.          DataInputStream var7 = new DataInputStream(var5);
  52.          String var11 = System.getProperty("line.separator");
  53.          if (this.reverse) {
  54.             CharToByteConverter var12;
  55.             if (var3 != null) {
  56.                var12 = CharToByteConverter.getConverter(var3);
  57.             } else {
  58.                var12 = CharToByteConverter.getDefault();
  59.             }
  60.  
  61.             var12.setSubstitutionMode(false);
  62.             char[] var9 = new char[256];
  63.             byte[] var10 = new byte[512];
  64.  
  65.             String var8;
  66.             while((var8 = var7.readLine()) != null) {
  67.                if (var8.length() > var9.length) {
  68.                   var9 = new char[var8.length()];
  69.                   var10 = new byte[var8.length() * 2];
  70.                }
  71.  
  72.                int var13 = 0;
  73.  
  74.                int var14;
  75.                for(var14 = 0; var13 < var8.length(); ++var14) {
  76.                   int var15;
  77.                   if ((var15 = var8.charAt(var13)) == 92 && var8.length() > var13 + 1 && var8.charAt(var13 + 1) == 'u') {
  78.                      int var16 = var13;
  79.  
  80.                      for(var13 += 2; var8.length() > var13 && var8.charAt(var13) == 'u'; ++var13) {
  81.                      }
  82.  
  83.                      if (var8.length() >= var13 + 4) {
  84.                         var15 = Integer.parseInt(var8.substring(var13, var13 + 4), 16);
  85.                         if (var12.canConvert((char)var15)) {
  86.                            var13 += 3;
  87.                         } else {
  88.                            var13 = var16;
  89.                            var15 = var8.charAt(var16);
  90.                         }
  91.                      }
  92.                   }
  93.  
  94.                   var9[var14] = (char)var15;
  95.                   ++var13;
  96.                }
  97.  
  98.                int var31 = var12.convert(var9, 0, var14, var10, 0, var10.length);
  99.  
  100.                for(int var26 = 0; var26 < var31; ++var26) {
  101.                   ((OutputStream)var6).write(var10[var26]);
  102.                }
  103.  
  104.                for(int var27 = 0; var27 < var11.length(); ++var27) {
  105.                   ((OutputStream)var6).write(var11.charAt(var27));
  106.                }
  107.             }
  108.          } else {
  109.             ByteToCharConverter var25;
  110.             if (var3 != null) {
  111.                var25 = ByteToCharConverter.getConverter(var3);
  112.             } else {
  113.                var25 = ByteToCharConverter.getDefault();
  114.             }
  115.  
  116.             char[] var23 = new char[256];
  117.             byte[] var24 = new byte[256];
  118.  
  119.             String var22;
  120.             while((var22 = var7.readLine()) != null) {
  121.                if (var22.length() > var24.length) {
  122.                   var24 = new byte[var22.length()];
  123.                   var23 = new char[var22.length()];
  124.                }
  125.  
  126.                for(int var28 = 0; var28 < var22.length(); ++var28) {
  127.                   var24[var28] = (byte)var22.charAt(var28);
  128.                }
  129.  
  130.                int var29 = var25.convert(var24, 0, var22.length(), var23, 0, var23.length);
  131.  
  132.                for(int var30 = 0; var30 < var29; ++var30) {
  133.                   if (var23[var30] <= 127) {
  134.                      ((OutputStream)var6).write(var23[var30]);
  135.                   } else {
  136.                      ((OutputStream)var6).write(92);
  137.                      ((OutputStream)var6).write(117);
  138.                      String var32 = Integer.toHexString(var23[var30]);
  139.                      StringBuffer var17 = new StringBuffer(var32);
  140.                      var17.reverse();
  141.                      int var18 = 4 - var17.length();
  142.  
  143.                      for(int var19 = 0; var19 < var18; ++var19) {
  144.                         var17.append('0');
  145.                      }
  146.  
  147.                      for(int var20 = 0; var20 < 4; ++var20) {
  148.                         ((OutputStream)var6).write(var17.charAt(3 - var20));
  149.                      }
  150.                   }
  151.                }
  152.  
  153.                for(int var33 = 0; var33 < var11.length(); ++var33) {
  154.                   ((OutputStream)var6).write(var11.charAt(var33));
  155.                }
  156.             }
  157.          }
  158.  
  159.          ((OutputStream)var6).close();
  160.          if (this.tempFile != null) {
  161.             this.tempFile.renameTo(new File(this.outputFileName));
  162.          }
  163.  
  164.          return true;
  165.       } catch (Exception var21) {
  166.          this.error(((Throwable)var21).toString());
  167.          return false;
  168.       }
  169.    }
  170.  
  171.    private void error(String var1) {
  172.       System.out.println(var1);
  173.    }
  174.  
  175.    private void usage() {
  176.       System.out.println("Usage: native2ascii [-reverse] [-encoding encoding] [inputfile [outputfile]]");
  177.    }
  178.  
  179.    private InputStream makeInputStream(String var1) throws Exception {
  180.       File var3 = new File(var1);
  181.       if (!var3.canRead()) {
  182.          throw new Exception(var3.getName() + " can not be read.");
  183.       } else {
  184.          BufferedInputStream var2;
  185.          try {
  186.             var2 = new BufferedInputStream(new FileInputStream(var3));
  187.          } catch (IOException var4) {
  188.             throw new Exception(var3.getName() + " can not be read.");
  189.          }
  190.  
  191.          this.inputFileName = var3.getAbsolutePath();
  192.          return var2;
  193.       }
  194.    }
  195.  
  196.    private OutputStream makeOutputStream(String var1) throws Exception {
  197.       File var3 = new File(var1);
  198.       this.outputFileName = var3.getAbsolutePath();
  199.       if (this.inputFileName.equals(this.outputFileName)) {
  200.          int var4 = 0;
  201.  
  202.          while(true) {
  203.             var3 = new File("_N2A" + var4 + ".TMP");
  204.             if (!var3.exists()) {
  205.                this.tempFile = var3;
  206.                break;
  207.             }
  208.  
  209.             ++var4;
  210.          }
  211.       } else {
  212.          var3 = new File(var1);
  213.       }
  214.  
  215.       try {
  216.          BufferedOutputStream var2 = new BufferedOutputStream(new FileOutputStream(var3));
  217.          return var2;
  218.       } catch (IOException var5) {
  219.          throw new Exception(var3.getName() + " can not be write.");
  220.       }
  221.    }
  222.  
  223.    public static void main(String[] var0) {
  224.       Main var1 = new Main();
  225.       System.exit(var1.convert(var0) ? 0 : 1);
  226.    }
  227. }
  228.