srecord noeq Zip2Zip(File inZip, ZipOutputStream outZip) { IPred predicate; *(File *inZip, ZipOutputStream *outZip, IPred *predicate) {} run { temp ZipFile zipFile = new(inZip); for (e : enumerationToIterator(zipFile.entries())) { print("Copying " + e.getName()); ZipEntry e2 = new(e.getName()); e2.setSize(e.getSize()); outZip.putNextEntry(e2); temp var in = zipFile.getInputStream(e); copyFileContents(e.getName(), in, outZip); } } swappable void copyFileContents(S fileName, InputStream in, OutputStream out) { copyStream(in, out); } } svoid zip2zip(File inZip, ZipOutputStream outZip, IPred predicate) { zip2zip_withPredicate(inZip, outZip, predicate); }