docs: public static void main(String[] args) throws Exception {
          if (args.length == 0) {
              printUsage();
              return;
          }
  
          File inputDir = null;
          File outputDir = null;
          boolean verbose = false;
  
          int i;
          for (i=0; i<args.length; i++) {
              try {
                  if ("-src".equals(args[i])) {
                      inputDir = new File(args[++i]);
                  } else if ("-dst".equals(args[i])) {
                      outputDir = new File(args[++i]);
                  } else if ("-verbose".equals(args[i])) {
                      verbose = true;
                  } else if ("-?".equals(args[i])) {
                      printUsage();
                      return;
                  } else {
                      break;
                  }
              } catch (IndexOutOfBoundsException e) {
                  printUsage();
                  return;
              }
          }
  
          if (i >= args.length) {
              printUsage();
              return;
          }
  
          File[] sources = new File[args.length - i];
          for (int j=0; i<args.length; i++,j++) {
              sources[j] = inputDir == null ? new File(args[i]) : new File(inputDir, args[i]);
          }
  
          ZoneInfoLogger.set(verbose);
          ZoneInfoCompiler zic = new ZoneInfoCompiler();
          zic.compile(outputDir, sources);
      }