home *** CD-ROM | disk | FTP | other *** search
- package sun.tools.native2ascii;
-
- import java.io.BufferedInputStream;
- import java.io.BufferedOutputStream;
- import java.io.DataInputStream;
- import java.io.File;
- import java.io.FileInputStream;
- import java.io.FileOutputStream;
- import java.io.IOException;
- import java.io.InputStream;
- import java.io.OutputStream;
- import java.util.Vector;
- import sun.io.ByteToCharConverter;
- import sun.io.CharToByteConverter;
-
- public class Main {
- String inputFileName = "input file";
- String outputFileName = "output file";
- File tempFile;
- boolean reverse = false;
-
- public synchronized boolean convert(String[] var1) {
- Vector var2 = new Vector(2);
- String var3 = null;
-
- for(int var4 = 0; var4 < var1.length; ++var4) {
- if (var1[var4].equals("-encoding")) {
- if (var4 + 1 >= var1.length) {
- this.error("-encoding requires argument");
- this.usage();
- return false;
- }
-
- ++var4;
- var3 = var1[var4];
- } else if (var1[var4].equals("-reverse")) {
- this.reverse = true;
- } else {
- if (var2.size() > 1) {
- this.usage();
- return false;
- }
-
- var2.addElement(var1[var4]);
- }
- }
-
- try {
- InputStream var5 = var2.size() == 0 ? System.in : this.makeInputStream((String)var2.elementAt(0));
- Object var6 = var2.size() == 2 ? this.makeOutputStream((String)var2.elementAt(1)) : System.out;
- DataInputStream var7 = new DataInputStream(var5);
- String var11 = System.getProperty("line.separator");
- if (this.reverse) {
- CharToByteConverter var12;
- if (var3 != null) {
- var12 = CharToByteConverter.getConverter(var3);
- } else {
- var12 = CharToByteConverter.getDefault();
- }
-
- var12.setSubstitutionMode(false);
- char[] var9 = new char[256];
- byte[] var10 = new byte[512];
-
- String var8;
- while((var8 = var7.readLine()) != null) {
- if (var8.length() > var9.length) {
- var9 = new char[var8.length()];
- var10 = new byte[var8.length() * 2];
- }
-
- int var13 = 0;
-
- int var14;
- for(var14 = 0; var13 < var8.length(); ++var14) {
- int var15;
- if ((var15 = var8.charAt(var13)) == 92 && var8.length() > var13 + 1 && var8.charAt(var13 + 1) == 'u') {
- int var16 = var13;
-
- for(var13 += 2; var8.length() > var13 && var8.charAt(var13) == 'u'; ++var13) {
- }
-
- if (var8.length() >= var13 + 4) {
- var15 = Integer.parseInt(var8.substring(var13, var13 + 4), 16);
- if (var12.canConvert((char)var15)) {
- var13 += 3;
- } else {
- var13 = var16;
- var15 = var8.charAt(var16);
- }
- }
- }
-
- var9[var14] = (char)var15;
- ++var13;
- }
-
- int var31 = var12.convert(var9, 0, var14, var10, 0, var10.length);
-
- for(int var26 = 0; var26 < var31; ++var26) {
- ((OutputStream)var6).write(var10[var26]);
- }
-
- for(int var27 = 0; var27 < var11.length(); ++var27) {
- ((OutputStream)var6).write(var11.charAt(var27));
- }
- }
- } else {
- ByteToCharConverter var25;
- if (var3 != null) {
- var25 = ByteToCharConverter.getConverter(var3);
- } else {
- var25 = ByteToCharConverter.getDefault();
- }
-
- char[] var23 = new char[256];
- byte[] var24 = new byte[256];
-
- String var22;
- while((var22 = var7.readLine()) != null) {
- if (var22.length() > var24.length) {
- var24 = new byte[var22.length()];
- var23 = new char[var22.length()];
- }
-
- for(int var28 = 0; var28 < var22.length(); ++var28) {
- var24[var28] = (byte)var22.charAt(var28);
- }
-
- int var29 = var25.convert(var24, 0, var22.length(), var23, 0, var23.length);
-
- for(int var30 = 0; var30 < var29; ++var30) {
- if (var23[var30] <= 127) {
- ((OutputStream)var6).write(var23[var30]);
- } else {
- ((OutputStream)var6).write(92);
- ((OutputStream)var6).write(117);
- String var32 = Integer.toHexString(var23[var30]);
- StringBuffer var17 = new StringBuffer(var32);
- var17.reverse();
- int var18 = 4 - var17.length();
-
- for(int var19 = 0; var19 < var18; ++var19) {
- var17.append('0');
- }
-
- for(int var20 = 0; var20 < 4; ++var20) {
- ((OutputStream)var6).write(var17.charAt(3 - var20));
- }
- }
- }
-
- for(int var33 = 0; var33 < var11.length(); ++var33) {
- ((OutputStream)var6).write(var11.charAt(var33));
- }
- }
- }
-
- ((OutputStream)var6).close();
- if (this.tempFile != null) {
- this.tempFile.renameTo(new File(this.outputFileName));
- }
-
- return true;
- } catch (Exception var21) {
- this.error(((Throwable)var21).toString());
- return false;
- }
- }
-
- private void error(String var1) {
- System.out.println(var1);
- }
-
- private void usage() {
- System.out.println("Usage: native2ascii [-reverse] [-encoding encoding] [inputfile [outputfile]]");
- }
-
- private InputStream makeInputStream(String var1) throws Exception {
- File var3 = new File(var1);
- if (!var3.canRead()) {
- throw new Exception(var3.getName() + " can not be read.");
- } else {
- BufferedInputStream var2;
- try {
- var2 = new BufferedInputStream(new FileInputStream(var3));
- } catch (IOException var4) {
- throw new Exception(var3.getName() + " can not be read.");
- }
-
- this.inputFileName = var3.getAbsolutePath();
- return var2;
- }
- }
-
- private OutputStream makeOutputStream(String var1) throws Exception {
- File var3 = new File(var1);
- this.outputFileName = var3.getAbsolutePath();
- if (this.inputFileName.equals(this.outputFileName)) {
- int var4 = 0;
-
- while(true) {
- var3 = new File("_N2A" + var4 + ".TMP");
- if (!var3.exists()) {
- this.tempFile = var3;
- break;
- }
-
- ++var4;
- }
- } else {
- var3 = new File(var1);
- }
-
- try {
- BufferedOutputStream var2 = new BufferedOutputStream(new FileOutputStream(var3));
- return var2;
- } catch (IOException var5) {
- throw new Exception(var3.getName() + " can not be write.");
- }
- }
-
- public static void main(String[] var0) {
- Main var1 = new Main();
- System.exit(var1.convert(var0) ? 0 : 1);
- }
- }
-