home *** CD-ROM | disk | FTP | other *** search
- package espresso;
-
- import java.io.File;
- import java.io.IOException;
- import java.io.RandomAccessFile;
-
- class ZipDir extends GeneralFile {
- String prefix;
- int[] offsets;
- String[] filenames;
- // $FF: renamed from: r java.io.RandomAccessFile
- RandomAccessFile field_0;
- // $FF: renamed from: f java.io.File
- File field_1;
-
- private void sort(int var1, int var2) {
- int var3 = var1;
- int var4 = var2;
- String var5 = this.filenames[(var1 + var2) / 2];
-
- while(true) {
- while(this.filenames[var3].compareTo(var5) >= 0) {
- while(var5.compareTo(this.filenames[var4]) < 0) {
- --var4;
- }
-
- if (var3 <= var4) {
- String var6 = this.filenames[var3];
- this.filenames[var3] = this.filenames[var4];
- this.filenames[var4] = var6;
- int var7 = this.offsets[var3];
- this.offsets[var3] = this.offsets[var4];
- this.offsets[var4] = var7;
- ++var3;
- --var4;
- }
-
- if (var3 > var4) {
- if (var1 < var4) {
- this.sort(var1, var4);
- }
-
- if (var3 < var2) {
- this.sort(var3, var2);
- }
-
- return;
- }
- }
-
- ++var3;
- }
- }
-
- int readEntry(byte[] var1, int var2, int var3) throws IOException {
- if (ZippedFile.get4LE(var1, var2) != 33639248) {
- throw new IOException("bad dir entry");
- } else if (ZippedFile.get2LE(var1, var2 + 10) != 0) {
- throw new IOException("can't handle compressed zip files");
- } else {
- this.offsets[var3] = ZippedFile.get4LE(var1, var2 + 42);
- this.filenames[var3] = (new String(var1, 0, var2 + 46, ZippedFile.get2LE(var1, var2 + 28))).replace('/', File.separatorChar).replace('\\', File.separatorChar);
- return var2 + 46 + ZippedFile.get2LE(var1, var2 + 28) + ZippedFile.get2LE(var1, var2 + 30) + ZippedFile.get2LE(var1, var2 + 32);
- }
- }
-
- byte[] findDir(RandomAccessFile var1) throws IOException {
- byte[] var2 = new byte[1024];
- int var3 = var2.length;
-
- long var6;
- for(long var4 = var1.length(); var4 >= (long)22; var4 = var6 + (long)21) {
- if (var4 < (long)var3) {
- var3 = (int)var4;
- }
-
- var6 = var4 - (long)var3;
- var1.seek(var6);
- if (var1.read(var2, 0, var3) != var3) {
- throw new IOException("read error");
- }
-
- int var8;
- 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) {
- }
-
- if (var8 >= 0) {
- byte[] var9 = new byte[ZippedFile.get4LE(var2, var8 + 12) + 2];
- var9[0] = var2[var8 + 10];
- var9[1] = var2[var8 + 11];
- var1.seek((long)ZippedFile.get4LE(var2, var8 + 16));
- if (var1.read(var9, 2, var9.length - 2) != var9.length - 2) {
- throw new IOException("read error");
- }
-
- return var9;
- }
- }
-
- throw new IOException("bad zip file");
- }
-
- int index(String var1) {
- int var2 = 0;
- int var3 = this.filenames.length - 1;
-
- while(var2 <= var3) {
- int var4 = (var3 + var2) / 2;
- int var5 = var1.compareTo(this.filenames[var4]);
- if (var5 < 0) {
- var3 = var4 - 1;
- } else {
- if (var5 <= 0) {
- return var4;
- }
-
- var2 = var4 + 1;
- }
- }
-
- return -1;
- }
-
- GeneralFile open(String var1) {
- return new ZippedFile(this, var1);
- }
-
- String[] list() throws IOException {
- return ZippedFile.list(this, "");
- }
-
- byte[] read() throws IOException {
- throw new IOException("can't read directory");
- }
-
- boolean isDirectory() {
- return this.field_0 != null;
- }
-
- boolean exists() {
- return this.field_0 != null;
- }
-
- String getPath() {
- return this.field_1.getPath();
- }
-
- ZipDir(File var1) {
- try {
- this.field_1 = var1;
- this.field_0 = new RandomAccessFile(var1, "r");
- byte[] var2 = this.findDir(this.field_0);
- int var3 = ZippedFile.get2LE(var2, 0);
- this.filenames = new String[var3];
- this.offsets = new int[var3];
- if (var3 > 0) {
- int var4 = 2;
-
- for(int var5 = 0; var5 < var3; ++var5) {
- var4 = this.readEntry(var2, var4, var5);
- }
-
- this.sort(0, var3 - 1);
- }
- } catch (IOException var7) {
- this.field_0 = null;
- }
-
- }
- }
-