home *** CD-ROM | disk | FTP | other *** search
- package sun.awt.image;
-
- import java.awt.image.ImageConsumer;
- import java.awt.image.IndexColorModel;
- import java.io.BufferedInputStream;
- import java.io.IOException;
- import java.io.InputStream;
-
- public class XbmImageDecoder extends ImageDecoder {
- private static byte[] XbmColormap = new byte[]{-1, -1, -1, 0, 0, 0};
- private static int XbmHints = 30;
- PixelStore8 store;
-
- public XbmImageDecoder(InputStreamImageSource var1, InputStream var2) {
- super(var1, var2);
- if (!(super.input instanceof BufferedInputStream)) {
- super.input = new BufferedInputStream(super.input, 80);
- }
-
- }
-
- public synchronized boolean catchupConsumer(InputStreamImageSource var1, ImageConsumer var2) {
- return this.store == null || this.store.replay(var1, var2);
- }
-
- public synchronized void makeStore(int var1, int var2) {
- this.store = new PixelStore8(var1, var2);
- }
-
- private static void error(String var0) throws ImageFormatException {
- throw new ImageFormatException(var0);
- }
-
- public void produceImage() throws IOException, ImageFormatException {
- char[] var1 = new char[80];
- int var3 = 0;
- byte var4 = 0;
- int var5 = 0;
- int var6 = 0;
- int var7 = 0;
- int var8 = 0;
- boolean var9 = true;
- byte[] var10 = null;
- IndexColorModel var11 = null;
-
- int var2;
- while(!super.aborted && (var2 = super.input.read()) != -1) {
- if ((var2 < 97 || var2 > 122) && (var2 < 65 || var2 > 90) && (var2 < 48 || var2 > 57) && var2 != 35 && var2 != 95) {
- if (var3 > 0) {
- int var12 = var3;
- var3 = 0;
- if (var9) {
- if (var12 != 7 || var1[0] != '#' || var1[1] != 'd' || var1[2] != 'e' || var1[3] != 'f' || var1[4] != 'i' || var1[5] != 'n' || var1[6] != 'e') {
- error("Not an XBM file");
- }
-
- var9 = false;
- }
-
- if (var1[var12 - 1] == 'h') {
- var4 = 1;
- } else if (var1[var12 - 1] == 't' && var12 > 1 && var1[var12 - 2] == 'h') {
- var4 = 2;
- } else if (var12 > 2 && var4 < 0 && var1[0] == '0' && var1[1] == 'x') {
- int var19 = 0;
-
- for(int var20 = 2; var20 < var12; ++var20) {
- var2 = var1[var20];
- if (var2 >= 48 && var2 <= 57) {
- var2 -= 48;
- } else if (var2 >= 65 && var2 <= 90) {
- var2 = var2 - 65 + 10;
- } else if (var2 >= 97 && var2 <= 122) {
- var2 = var2 - 97 + 10;
- } else {
- var2 = 0;
- }
-
- var19 = var19 * 16 + var2;
- }
-
- for(int var15 = 1; var15 <= 128; var15 <<= 1) {
- if (var7 < var6) {
- if ((var19 & var15) != 0) {
- var10[var7] = 1;
- } else {
- var10[var7] = 0;
- }
- }
-
- ++var7;
- }
-
- if (var7 >= var6) {
- if (((ImageDecoder)this).setPixels(0, var8, var6, 1, var11, var10, 0, var6) <= 0) {
- return;
- }
-
- this.store.setPixels(0, var8, var6, 1, var10, 0, var6);
- var7 = 0;
- if (var8++ >= var5) {
- break;
- }
- }
- } else {
- int var13 = 0;
-
- for(int var14 = 0; var14 < var12; ++var14) {
- if ((var2 = var1[var14]) < 48 || var2 > 57) {
- var13 = -1;
- break;
- }
-
- var13 = var13 * 10 + var2 - 48;
- }
-
- if (var13 > 0 && var4 > 0) {
- if (var4 == 1) {
- var6 = var13;
- } else {
- var5 = var13;
- }
-
- if (var6 != 0 && var5 != 0) {
- var11 = new IndexColorModel(8, 2, XbmColormap, 0, false, 0);
- ((ImageDecoder)this).setDimensions(var6, var5);
- this.makeStore(var6, var5);
- ((ImageDecoder)this).setColorModel(var11);
- this.store.setColorModel(var11);
- ((ImageDecoder)this).setHints(XbmHints);
- this.store.setHints(XbmHints);
- ((ImageDecoder)this).headerComplete();
- var10 = new byte[var6];
- var4 = -1;
- } else {
- var4 = 0;
- }
- }
- }
- }
- } else if (var3 < 78) {
- var1[var3++] = (char)var2;
- }
- }
-
- super.input.close();
- this.store.imageComplete();
- if (this.store.getBitState() != 2) {
- super.source.setPixelStore(this, this.store);
- }
-
- ((ImageDecoder)this).imageComplete(3, true);
- }
- }
-