home *** CD-ROM | disk | FTP | other *** search
Java Source | 2000-05-04 | 5.5 KB | 177 lines |
- //
- // Create.java
- //
- // This application demonstrates how to use the CabCreate class to create
- // cabinets
- //
- // (C) Copyright 1995 - 1999 Microsoft Corporation. All rights reserved.
- // All rights reserved
- //
- import com.ms.util.cab.CabCreator;
- import com.ms.util.cab.CabConstants;
-
-
- final class Create implements CabConstants
- {
- // the default compression mode
- static int compression_method = COMPRESSION_MSZIP;
- static int compression_window = 16;
-
- // recurse into subdirectories when given a directory name?
- static boolean recurse_into_subdirs = false;
-
- //
- // Entrypoint
- //
- public static void main(String args[])
- {
- if (args.length < 2)
- {
- displayHelp();
- }
- else
- {
- int cab_filename_arg;
-
- // if this returns -1, it means invalid arguments
- cab_filename_arg = parseArgs(args);
-
- if (cab_filename_arg != -1)
- {
- CabMaker creator;
-
- // Need a non-static class object to pass to the CabCreator class
- creator = new CabMaker(
- args[cab_filename_arg], // cabinet name
- args, // file list
- cab_filename_arg + 1, // where file list starts in args[]
- compression_method,
- compression_window,
- recurse_into_subdirs
- );
-
- creator.create();
- }
- }
- }
-
-
- //
- // Argument parsing
- //
- static int parseArgs(String args[])
- {
- int arg;
-
- for (arg = 0; arg < args.length; arg++)
- {
- // look for command-line switches
- if (args[arg].charAt(0) == '/' || args[arg].charAt(0) == '-')
- {
- if (args[arg].length() < 2)
- {
- System.out.println("Invalid arguments");
- return -1;
- }
-
- switch (args[arg].charAt(1))
- {
- default:
- {
- System.out.println("Unknown option "+args[arg]);
- return -1;
- }
-
- case 'h':
- case '?':
- {
- displayHelp();
- return -1;
- }
-
- case 'r':
- {
- recurse_into_subdirs = true;
- break;
- }
-
- case 'm':
- {
- String compression_mode_name;
-
- if (arg + 1 >= args.length)
- {
- System.out.println("-m option must be followed by compression method");
- return -1;
- }
-
- compression_mode_name = args[arg+1];
-
- if (compression_mode_name.equals("NONE"))
- {
- compression_method = COMPRESSION_NONE;
- compression_window = 0;
- }
- else if (compression_mode_name.equals("MSZIP"))
- {
- compression_method = COMPRESSION_MSZIP;
- compression_window = 16;
- }
- else if (compression_mode_name.startsWith("LZX"))
- {
- compression_method = COMPRESSION_LZX;
-
- // catch string out-of-bounds and integer conversion
- // exceptions
- try
- {
- compression_window = Integer.valueOf(compression_mode_name.substring(4)).intValue();
- }
- catch (Exception e)
- {
- System.out.println("LZX compression requires a window size parameter");
- return -1;
- }
-
- if (compression_window < 15 || compression_window > 21)
- {
- System.out.println("LZX compression window must be in 15..21 range");
- return -1;
- }
- }
- else
- {
- System.out.println("Unknown compression method "+compression_mode_name);
- return -1;
- }
-
- arg++;
- break;
- }
- }
- }
- else
- {
- break;
- }
- }
-
- return arg;
- }
-
-
- //
- // Command-line help
- //
- private static void displayHelp()
- {
- System.out.println("Cabinet creation utility");
- System.out.println();
- System.out.println("Usage: Create <options> <cabinet name> [<files>]");
- System.out.println();
- System.out.println("Options:");
- System.out.println(" /m <mode> Set compression mode [LZX:<15..21>|MSZIP|NONE]");
- System.out.println(" /r Recurse into subdirectories");
- }
- }
-