home *** CD-ROM | disk | FTP | other *** search
/ PC Pro 1999 April / DPPCPRO0499.ISO / April / Notes / 50b2wic.exe / DATA1.CAB / NotesProgramFilesJavaSupport / rt.jar / sun / awt / image / XbmImageDecoder.class (.txt) < prev   
Encoding:
Java Class File  |  1998-04-23  |  3.2 KB  |  155 lines

  1. package sun.awt.image;
  2.  
  3. import java.awt.image.ImageConsumer;
  4. import java.awt.image.IndexColorModel;
  5. import java.io.BufferedInputStream;
  6. import java.io.IOException;
  7. import java.io.InputStream;
  8.  
  9. public class XbmImageDecoder extends ImageDecoder {
  10.    private static byte[] XbmColormap = new byte[]{-1, -1, -1, 0, 0, 0};
  11.    private static int XbmHints = 30;
  12.    PixelStore8 store;
  13.  
  14.    public XbmImageDecoder(InputStreamImageSource var1, InputStream var2) {
  15.       super(var1, var2);
  16.       if (!(super.input instanceof BufferedInputStream)) {
  17.          super.input = new BufferedInputStream(super.input, 80);
  18.       }
  19.  
  20.    }
  21.  
  22.    public synchronized boolean catchupConsumer(InputStreamImageSource var1, ImageConsumer var2) {
  23.       return this.store == null || this.store.replay(var1, var2);
  24.    }
  25.  
  26.    public synchronized void makeStore(int var1, int var2) {
  27.       this.store = new PixelStore8(var1, var2);
  28.    }
  29.  
  30.    private static void error(String var0) throws ImageFormatException {
  31.       throw new ImageFormatException(var0);
  32.    }
  33.  
  34.    public void produceImage() throws IOException, ImageFormatException {
  35.       char[] var1 = new char[80];
  36.       int var3 = 0;
  37.       byte var4 = 0;
  38.       int var5 = 0;
  39.       int var6 = 0;
  40.       int var7 = 0;
  41.       int var8 = 0;
  42.       boolean var9 = true;
  43.       byte[] var10 = null;
  44.       IndexColorModel var11 = null;
  45.  
  46.       int var2;
  47.       while(!super.aborted && (var2 = super.input.read()) != -1) {
  48.          if ((var2 < 97 || var2 > 122) && (var2 < 65 || var2 > 90) && (var2 < 48 || var2 > 57) && var2 != 35 && var2 != 95) {
  49.             if (var3 > 0) {
  50.                int var12 = var3;
  51.                var3 = 0;
  52.                if (var9) {
  53.                   if (var12 != 7 || var1[0] != '#' || var1[1] != 'd' || var1[2] != 'e' || var1[3] != 'f' || var1[4] != 'i' || var1[5] != 'n' || var1[6] != 'e') {
  54.                      error("Not an XBM file");
  55.                   }
  56.  
  57.                   var9 = false;
  58.                }
  59.  
  60.                if (var1[var12 - 1] == 'h') {
  61.                   var4 = 1;
  62.                } else if (var1[var12 - 1] == 't' && var12 > 1 && var1[var12 - 2] == 'h') {
  63.                   var4 = 2;
  64.                } else if (var12 > 2 && var4 < 0 && var1[0] == '0' && var1[1] == 'x') {
  65.                   int var19 = 0;
  66.  
  67.                   for(int var20 = 2; var20 < var12; ++var20) {
  68.                      var2 = var1[var20];
  69.                      if (var2 >= 48 && var2 <= 57) {
  70.                         var2 -= 48;
  71.                      } else if (var2 >= 65 && var2 <= 90) {
  72.                         var2 = var2 - 65 + 10;
  73.                      } else if (var2 >= 97 && var2 <= 122) {
  74.                         var2 = var2 - 97 + 10;
  75.                      } else {
  76.                         var2 = 0;
  77.                      }
  78.  
  79.                      var19 = var19 * 16 + var2;
  80.                   }
  81.  
  82.                   for(int var15 = 1; var15 <= 128; var15 <<= 1) {
  83.                      if (var7 < var6) {
  84.                         if ((var19 & var15) != 0) {
  85.                            var10[var7] = 1;
  86.                         } else {
  87.                            var10[var7] = 0;
  88.                         }
  89.                      }
  90.  
  91.                      ++var7;
  92.                   }
  93.  
  94.                   if (var7 >= var6) {
  95.                      if (((ImageDecoder)this).setPixels(0, var8, var6, 1, var11, var10, 0, var6) <= 0) {
  96.                         return;
  97.                      }
  98.  
  99.                      this.store.setPixels(0, var8, var6, 1, var10, 0, var6);
  100.                      var7 = 0;
  101.                      if (var8++ >= var5) {
  102.                         break;
  103.                      }
  104.                   }
  105.                } else {
  106.                   int var13 = 0;
  107.  
  108.                   for(int var14 = 0; var14 < var12; ++var14) {
  109.                      if ((var2 = var1[var14]) < 48 || var2 > 57) {
  110.                         var13 = -1;
  111.                         break;
  112.                      }
  113.  
  114.                      var13 = var13 * 10 + var2 - 48;
  115.                   }
  116.  
  117.                   if (var13 > 0 && var4 > 0) {
  118.                      if (var4 == 1) {
  119.                         var6 = var13;
  120.                      } else {
  121.                         var5 = var13;
  122.                      }
  123.  
  124.                      if (var6 != 0 && var5 != 0) {
  125.                         var11 = new IndexColorModel(8, 2, XbmColormap, 0, false, 0);
  126.                         ((ImageDecoder)this).setDimensions(var6, var5);
  127.                         this.makeStore(var6, var5);
  128.                         ((ImageDecoder)this).setColorModel(var11);
  129.                         this.store.setColorModel(var11);
  130.                         ((ImageDecoder)this).setHints(XbmHints);
  131.                         this.store.setHints(XbmHints);
  132.                         ((ImageDecoder)this).headerComplete();
  133.                         var10 = new byte[var6];
  134.                         var4 = -1;
  135.                      } else {
  136.                         var4 = 0;
  137.                      }
  138.                   }
  139.                }
  140.             }
  141.          } else if (var3 < 78) {
  142.             var1[var3++] = (char)var2;
  143.          }
  144.       }
  145.  
  146.       super.input.close();
  147.       this.store.imageComplete();
  148.       if (this.store.getBitState() != 2) {
  149.          super.source.setPixelStore(this, this.store);
  150.       }
  151.  
  152.       ((ImageDecoder)this).imageComplete(3, true);
  153.    }
  154. }
  155.