+if mode_name == 'rm' then
+ mode = :rm
+elsif mode_name == 'mv' then
+ mode = :mv
+end
+
+# Need this before referencing ExitCodes.
+require 'mailshears'
+
+# Since we removed both the executable name and the mode name (if it
+# existed) from ARGV, what remains should be the required arguments.
+# Figure out if we have the wrong number of arguments, and store the
+# associated error message in args_error_message if we do.
+args_error_message = nil
+if mode == :prune and ARGV.length() != 0 then
+ args_error_message = "ERROR: prune mode takes no additional arguments."
+elsif mode == :rm and ARGV.length() < 1 then
+ args_error_message = "ERROR: rm mode takes two or more user arguments."
+elsif mode == :mv and ARGV.length() != 2 then
+ args_error_message = "ERROR: mv mode takes exactly two user arguments."
+end
+
+# If we got the wrong number of arguments, we'll have some error
+# message. Report it and quit.
+if not args_error_message.nil? then
+ STDERR.puts args_error_message
+ puts "Usage: #{usage}"
+ Kernel.exit(ExitCodes::BAD_COMMAND_LINE)
+end
+
+
+cfg = Configuration.new()
+
+# Load each of the plugins that we'll need.
+cfg.plugins.each do |plugin_file|
+ require "#{mode_name}/plugins/#{plugin_file}"
+end
+
+# And the runners.
+require "#{mode_name}/#{mode_name}_runner"
+require "#{mode_name}/#{mode_name}_dummy_runner"
+
+def make_header(plugin_name)
+ # The header that we output before the list of domains/users.
+ # Just the path of this script, the current time, and the plugin name.
+ exe = File.basename($PROGRAM_NAME)
+ header = "#{exe}, "
+
+ current_time = Time.now()
+ if current_time.respond_to?(:iso8601)
+ # Somehow this method is missing on some machines.
+ header += current_time.iso8601.to_s
+ else
+ # Fall back to whatever this looks like.
+ header += current_time.to_s
+ end
+
+ header += ' (Plugin: ' + plugin_name + ")\n"
+ header += '-' * header.size # Underline the header.
+
+ return header