home *** CD-ROM | disk | FTP | other *** search
/ Tutto per Internet / Internet.iso / soft95 / Java / espints / espinst.exe / classes / espresso / ZipDir.class (.txt) < prev    next >
Encoding:
Java Class File  |  1996-02-28  |  2.9 KB  |  171 lines

  1. package espresso;
  2.  
  3. import java.io.File;
  4. import java.io.IOException;
  5. import java.io.RandomAccessFile;
  6.  
  7. class ZipDir extends GeneralFile {
  8.    String prefix;
  9.    int[] offsets;
  10.    String[] filenames;
  11.    // $FF: renamed from: r java.io.RandomAccessFile
  12.    RandomAccessFile field_0;
  13.    // $FF: renamed from: f java.io.File
  14.    File field_1;
  15.  
  16.    private void sort(int var1, int var2) {
  17.       int var3 = var1;
  18.       int var4 = var2;
  19.       String var5 = this.filenames[(var1 + var2) / 2];
  20.  
  21.       while(true) {
  22.          while(this.filenames[var3].compareTo(var5) >= 0) {
  23.             while(var5.compareTo(this.filenames[var4]) < 0) {
  24.                --var4;
  25.             }
  26.  
  27.             if (var3 <= var4) {
  28.                String var6 = this.filenames[var3];
  29.                this.filenames[var3] = this.filenames[var4];
  30.                this.filenames[var4] = var6;
  31.                int var7 = this.offsets[var3];
  32.                this.offsets[var3] = this.offsets[var4];
  33.                this.offsets[var4] = var7;
  34.                ++var3;
  35.                --var4;
  36.             }
  37.  
  38.             if (var3 > var4) {
  39.                if (var1 < var4) {
  40.                   this.sort(var1, var4);
  41.                }
  42.  
  43.                if (var3 < var2) {
  44.                   this.sort(var3, var2);
  45.                }
  46.  
  47.                return;
  48.             }
  49.          }
  50.  
  51.          ++var3;
  52.       }
  53.    }
  54.  
  55.    int readEntry(byte[] var1, int var2, int var3) throws IOException {
  56.       if (ZippedFile.get4LE(var1, var2) != 33639248) {
  57.          throw new IOException("bad dir entry");
  58.       } else if (ZippedFile.get2LE(var1, var2 + 10) != 0) {
  59.          throw new IOException("can't handle compressed zip files");
  60.       } else {
  61.          this.offsets[var3] = ZippedFile.get4LE(var1, var2 + 42);
  62.          this.filenames[var3] = (new String(var1, 0, var2 + 46, ZippedFile.get2LE(var1, var2 + 28))).replace('/', File.separatorChar).replace('\\', File.separatorChar);
  63.          return var2 + 46 + ZippedFile.get2LE(var1, var2 + 28) + ZippedFile.get2LE(var1, var2 + 30) + ZippedFile.get2LE(var1, var2 + 32);
  64.       }
  65.    }
  66.  
  67.    byte[] findDir(RandomAccessFile var1) throws IOException {
  68.       byte[] var2 = new byte[1024];
  69.       int var3 = var2.length;
  70.  
  71.       long var6;
  72.       for(long var4 = var1.length(); var4 >= (long)22; var4 = var6 + (long)21) {
  73.          if (var4 < (long)var3) {
  74.             var3 = (int)var4;
  75.          }
  76.  
  77.          var6 = var4 - (long)var3;
  78.          var1.seek(var6);
  79.          if (var1.read(var2, 0, var3) != var3) {
  80.             throw new IOException("read error");
  81.          }
  82.  
  83.          int var8;
  84.          for(var8 = var3 - 22; var8 >= 0 && (var2[var8] != 80 || var2[var8 + 1] != 75 || var2[var8 + 2] != 5 || var2[var8 + 3] != 6 || var6 + (long)var8 + (long)22 + (long)ZippedFile.get2LE(var2, var8 + 20) != var1.length()); --var8) {
  85.          }
  86.  
  87.          if (var8 >= 0) {
  88.             byte[] var9 = new byte[ZippedFile.get4LE(var2, var8 + 12) + 2];
  89.             var9[0] = var2[var8 + 10];
  90.             var9[1] = var2[var8 + 11];
  91.             var1.seek((long)ZippedFile.get4LE(var2, var8 + 16));
  92.             if (var1.read(var9, 2, var9.length - 2) != var9.length - 2) {
  93.                throw new IOException("read error");
  94.             }
  95.  
  96.             return var9;
  97.          }
  98.       }
  99.  
  100.       throw new IOException("bad zip file");
  101.    }
  102.  
  103.    int index(String var1) {
  104.       int var2 = 0;
  105.       int var3 = this.filenames.length - 1;
  106.  
  107.       while(var2 <= var3) {
  108.          int var4 = (var3 + var2) / 2;
  109.          int var5 = var1.compareTo(this.filenames[var4]);
  110.          if (var5 < 0) {
  111.             var3 = var4 - 1;
  112.          } else {
  113.             if (var5 <= 0) {
  114.                return var4;
  115.             }
  116.  
  117.             var2 = var4 + 1;
  118.          }
  119.       }
  120.  
  121.       return -1;
  122.    }
  123.  
  124.    GeneralFile open(String var1) {
  125.       return new ZippedFile(this, var1);
  126.    }
  127.  
  128.    String[] list() throws IOException {
  129.       return ZippedFile.list(this, "");
  130.    }
  131.  
  132.    byte[] read() throws IOException {
  133.       throw new IOException("can't read directory");
  134.    }
  135.  
  136.    boolean isDirectory() {
  137.       return this.field_0 != null;
  138.    }
  139.  
  140.    boolean exists() {
  141.       return this.field_0 != null;
  142.    }
  143.  
  144.    String getPath() {
  145.       return this.field_1.getPath();
  146.    }
  147.  
  148.    ZipDir(File var1) {
  149.       try {
  150.          this.field_1 = var1;
  151.          this.field_0 = new RandomAccessFile(var1, "r");
  152.          byte[] var2 = this.findDir(this.field_0);
  153.          int var3 = ZippedFile.get2LE(var2, 0);
  154.          this.filenames = new String[var3];
  155.          this.offsets = new int[var3];
  156.          if (var3 > 0) {
  157.             int var4 = 2;
  158.  
  159.             for(int var5 = 0; var5 < var3; ++var5) {
  160.                var4 = this.readEntry(var2, var4, var5);
  161.             }
  162.  
  163.             this.sort(0, var3 - 1);
  164.          }
  165.       } catch (IOException var7) {
  166.          this.field_0 = null;
  167.       }
  168.  
  169.    }
  170. }
  171.