protected void handleTOCEntry() throws IOException {
			if (tocEntryLen == 0) {
				if (tocEntryOffset >= BASE_ENTRY_LENGTH) {
					if (getU16(0x00) != 0x4b50 || getU16(0x02) != 0x0201)
						return;
					tocEntryLen = BASE_ENTRY_LENGTH
						+ getFileNameLength() + getU16(0x1e) + getU16(0x20);
					if (tocEntryLen > tocEntry.length)
						throw new IOException("ZIP entry too long!");
				}
			}
			else if (tocEntryOffset >= tocEntryLen) {
				String fileName = getFileName();
				if (executables.contains(fileName)) {
					int fileMode = 0100755;
					tocEntry[0x28] = (byte)(fileMode & 0xff);
					tocEntry[0x29] = (byte)((fileMode >> 8) & 0xff);
					// say that we're Unix-compatible
					tocEntry[0x05] = 0x03;
				}
				out.write(tocEntry, 0, tocEntryLen);
				tocEntryOffset -= tocEntryLen;
				if (tocEntryOffset > 0)
					throw new IOException("Unaligned TOC entry!");
				tocEntryLen = 0;
			}
		}