!636
!modern

main {
  psvm {
    split(args[0]);
  }
  
  static long splitSize = 1024*1024; // 0 = auto
  static int n;
  
  static void split(String path) ctex {
    File file = new File(path);
    print("== Processing " + path);
    long destSize = splitSize != 0 ? splitSize : file.length()/2;
    ZipFile zipFile = new ZipFile(file);
    Enumeration entries = zipFile.entries();
    
    n = 1;
    String outPath = path + "." + n;
    print("Writing " + outPath);
    FileOutputStream fout = new FileOutputStream(outPath);
    ZipOutputStream zout = new ZipOutputStream(fout);
    long size = 0;
    while (entries.hasMoreElements()) {
      ZipEntry entry = (ZipEntry) entries.nextElement(); 
      System.out.println("File found: " + entry.getName());
      zout.putNextEntry(new ZipEntry(entry.getName()));
      
      InputStream fin = zipFile.getInputStream(entry);
      copyStream(fin, zout);
      fin.close();
      
      size += entry.getCompressedSize();
      if (size >= destSize) {
        size = 0;
        zout.close();
        fout.close();
        
        ++n;
        outPath = path + "." + n;
        print("Writing " + outPath);
        fout = new FileOutputStream(outPath);
        zout = new ZipOutputStream(fout);
      }
    }
    
    zout.close();
    fout.close();
    zipFile.close();
  }
}