Methods Summary |
---|
private static java.lang.String | byte2oct(byte b)
int i=b&0xff;
int dig3=i%8;
int dig2=(i/8)%8;
int dig1=i/64;
return (""+dig1+""+dig2+""+dig3);
|
private static java.lang.String | fileName(java.lang.String name)
int i = name.lastIndexOf(File.separator);
return name.substring(i+1);
|
public static void | main(java.lang.String[] args)
int i, j;
// Parse the arguments.
names = new String[args.length+1];
images = new byte[args.length+1][];
for (i = 0, j = 0; i < args.length; i++) {
if (args[i].equals("-d")) {
if (i++ >= args.length) {
printUsage();
return;
}
destdir = args[i];
} else
names[j++] = args[i];
}
names[j] = null;
if (j == 0) {
printUsage();
return;
}
// Determines the package and library name.
i = names[0].lastIndexOf(".");
if (i == -1) {
pkgname = null;
arname = names[0];
} else {
pkgname = names[0].substring(0, i);
arname = names[0].substring(i + 1);
}
// Opens the destination file.
String filename = null;
try {
if (destdir == null)
filename = arname + ".java";
else
filename = destdir + File.separator + arname + ".java";
ds = new DataOutputStream(new FileOutputStream(filename));
} catch (IOException e) {
System.err.println("Cannot open file: " + filename + e);
}
if (j == 1) {
// No file is specified. Generate just the ImageLib interface.
writeInterface();
} else {
// Write the imagelib class.
writeClass();
}
|
static void | printUsage()
System.err.println("java ImageGen [-d <destdir>] <imagelib> image1 image2 ...");
|
static void | readImages()
FileInputStream fi;
int len, b,i;
for (i = 1; names[i] != null; i++) {
String imageFile=names[i];
try {
fi = new FileInputStream(imageFile);
len = fi.available();
images[i]=new byte[len];
fi.read(images[i]);
} catch (IOException e) {
System.err.println("Cannot open image file: " + imageFile);
}
}
|
static void | writeClass()
int i,j;
int accBytes=0;
String name;
try {
readImages();
ds.writeBytes("/* Generated by ImageGen.\n DO NOT EDIT.*/\n\n");
if (pkgname != null) {
ds.writeBytes("package ");
ds.writeBytes(pkgname);
ds.writeBytes(";\n\n");
}
ds.writeBytes("public abstract class ");
ds.writeBytes(arname);
ds.writeBytes(" {\n\n");
ds.writeBytes(" private static byte[] m(int from,int to){\n");
ds.writeBytes(" int i;\n");
ds.writeBytes(" byte[] b= new byte[to - from];\n");
ds.writeBytes(" for (i=0;i<b.length;i++)\n");
ds.writeBytes(" b[i] = (byte)(s.charAt(i+from)-1);\n");
ds.writeBytes(" return b;\n");
ds.writeBytes(" }\n");
ds.writeBytes(" private static String s = \n ");
for (i = 1; names[i] != null; i++) {
ds.writeBytes("\"");
int len= images[i].length;
for (j = 0; j < len; j++) {
ds.writeBytes( ("\\"+byte2oct((byte)(1+images[i][j]))) );
if ((j%16)==15) {
ds.writeBytes("\"+\n \"" );
}
}
ds.writeBytes("\"" );
if (names[i+1]!=null)
ds.writeBytes("+\n " );
}
ds.writeBytes(";\n\n");
ds.writeBytes(" public static byte[] getImage(String name) {\n");
for (i = 1; names[i] != null; i++) {
ds.writeBytes(" if (name.equals(\"" + fileName(names[i]) + "\"))\n" );
ds.writeBytes(" return m("+accBytes+"," + (accBytes += images[i].length) + ");\n");
}
ds.writeBytes(" return null;\n");
ds.writeBytes(" }\n\n");
ds.writeBytes("}\n"); //trailer
} catch (IOException e) {
}
|
static void | writeInterface()
try {
ds.writeBytes("/* Generated by ImageGen.\n DO NOT EDIT.*/\n\n");
if (pkgname != null) {
ds.writeBytes("package ");
ds.writeBytes(pkgname);
ds.writeBytes(";\n\n");
}
ds.writeBytes("public interface ImageLib {\n");
ds.writeBytes(" public byte[] getImage(String name);\n");
ds.writeBytes("}\n");
} catch (IOException e) {
}
|