152 lines
3.3 KiB
Java
152 lines
3.3 KiB
Java
|
/* Copyright (C) 1999 Cygnus Solutions
|
||
|
|
||
|
This file is part of libgcj.
|
||
|
|
||
|
This software is copyrighted work licensed under the terms of the
|
||
|
Libgcj License. Please consult the file "LIBGCJ_LICENSE" for
|
||
|
details. */
|
||
|
|
||
|
package gnu.gcj.convert;
|
||
|
import java.io.*;
|
||
|
|
||
|
public class Convert
|
||
|
{
|
||
|
static void error (String message)
|
||
|
{
|
||
|
System.err.print("convert: ");
|
||
|
System.err.println(message);
|
||
|
System.err.println("Usage: convert [--from srcEncoding] [--to dstEncoding]");
|
||
|
System.err.println(" [inputfile [outputfile]]");
|
||
|
System.exit(-1);
|
||
|
}
|
||
|
|
||
|
static void missing (String arg)
|
||
|
{
|
||
|
error("missing arg after `" + arg + "' option");
|
||
|
}
|
||
|
|
||
|
public static void main (String[] args)
|
||
|
{
|
||
|
String inName = "-";
|
||
|
String outName = "-";
|
||
|
String inEncodingName = null;
|
||
|
String outEncodingName = "JavaSrc";
|
||
|
int seenNames = 0;
|
||
|
boolean reverse = false;
|
||
|
|
||
|
for (int i = 0; i < args.length; i++)
|
||
|
{
|
||
|
String arg = args[i];
|
||
|
if (arg.length() == 0)
|
||
|
error("zero-length argument");
|
||
|
if (arg.charAt(0) == '-')
|
||
|
{
|
||
|
if (arg.equals("-encoding") || arg.equals("--encoding")
|
||
|
|| args.equals("-from") || arg.equals("--from"))
|
||
|
{
|
||
|
if (++i == args.length) missing(arg);
|
||
|
inEncodingName = args[i];
|
||
|
}
|
||
|
else if (arg.equals("-to") || arg.equals("--to"))
|
||
|
{
|
||
|
if (++i == args.length) missing(arg);
|
||
|
outEncodingName = args[i];
|
||
|
}
|
||
|
else if (arg.equals("-i"))
|
||
|
{
|
||
|
if (++i == args.length) missing(arg);
|
||
|
inName = args[i];
|
||
|
}
|
||
|
else if (arg.equals("-o"))
|
||
|
{
|
||
|
if (++i == args.length) missing(arg);
|
||
|
outName = args[i];
|
||
|
}
|
||
|
else if (arg.equals("-reverse") || arg.equals("--reverse"))
|
||
|
{
|
||
|
reverse = true;
|
||
|
}
|
||
|
else if (arg.equals("-"))
|
||
|
{
|
||
|
switch (seenNames)
|
||
|
{
|
||
|
case 0:
|
||
|
inName = "-";
|
||
|
seenNames++;
|
||
|
break;
|
||
|
case 1:
|
||
|
outName = "-";
|
||
|
seenNames++;
|
||
|
break;
|
||
|
default:
|
||
|
error("too many `-' arguments");
|
||
|
}
|
||
|
}
|
||
|
else
|
||
|
error("unrecognized argument `" + arg + "'");
|
||
|
}
|
||
|
else
|
||
|
{
|
||
|
switch (seenNames)
|
||
|
{
|
||
|
case 0:
|
||
|
inName = arg;
|
||
|
seenNames++;
|
||
|
break;
|
||
|
case 1:
|
||
|
outName = arg;
|
||
|
seenNames++;
|
||
|
break;
|
||
|
default:
|
||
|
error("too many filename arguments");
|
||
|
}
|
||
|
}
|
||
|
}
|
||
|
|
||
|
if (reverse)
|
||
|
{
|
||
|
String tmp = inEncodingName;
|
||
|
inEncodingName = outEncodingName;
|
||
|
outEncodingName = tmp;
|
||
|
}
|
||
|
|
||
|
try
|
||
|
{
|
||
|
BytesToUnicode inDecoder
|
||
|
= inEncodingName == null ? BytesToUnicode.getDefaultDecoder()
|
||
|
: BytesToUnicode.getDecoder(inEncodingName);
|
||
|
UnicodeToBytes outEncoder
|
||
|
= outEncodingName == null ? UnicodeToBytes.getDefaultEncoder()
|
||
|
: UnicodeToBytes.getEncoder(outEncodingName);
|
||
|
InputStream inStream = inName == "-" ? System.in
|
||
|
: new FileInputStream(inName);
|
||
|
OutputStream outStream;
|
||
|
if (outName == "-")
|
||
|
outStream = System.out;
|
||
|
else
|
||
|
outStream = new FileOutputStream(outName);
|
||
|
InputStreamReader in
|
||
|
= new InputStreamReader(inStream, inEncodingName);
|
||
|
OutputStreamWriter out
|
||
|
= new OutputStreamWriter(outStream, outEncodingName);
|
||
|
char[] buffer = new char[2048];
|
||
|
for (;;)
|
||
|
{
|
||
|
int count = in.read(buffer);
|
||
|
if (count < 0)
|
||
|
break;
|
||
|
out.write(buffer, 0, count);
|
||
|
}
|
||
|
|
||
|
in.close();
|
||
|
out.close();
|
||
|
}
|
||
|
catch (java.io.IOException ex)
|
||
|
{
|
||
|
System.err.print("convert exception: ");
|
||
|
System.err.println(ex);
|
||
|
System.exit(-1);
|
||
|
}
|
||
|
}
|
||
|
}
|