+=head1 OPTIONS
+
+=over
+
+=item B<--debug, -d>
+
+Debug verbosity. (Default 0)
+
+=item B<--help, -h>
+
+Display brief useage information.
+
+=item B<--man, -m>
+
+Display this manual.
+
+=back
+
+=head1 EXAMPLES
+
+
+=cut
+
+
+use vars qw($DEBUG);
+
+# XXX parse config file
+
+my %options = (debug => 0,
+ help => 0,
+ man => 0,
+ age => 60*60*24*7,
+ unbans => 4,
+ bans => 'bans.txt',
+ remove => 'bans_to_remove.txt',
+ keep => 'bans_to_keep.txt',
+ pattern => 1,
+ user => 1,
+ wide => 1,
+ );
+
+GetOptions(\%options,'age|a=i','unbans|u=i','bans|b=s','remove|r=s',
+ 'pattern|p!','keep|k=s','debug|d+','help|h|?','man|m',
+ 'user|specific-user|s!','wide|wide-bans|w!',
+ );
+
+pod2usage() if $options{help};
+pod2usage({verbose=>2}) if $options{man};
+
+$DEBUG = $options{debug};
+
+my $bans_fh = new IO::File $options{bans}, 'r' or die "Unable to open file $options{bans} for reading: $!";;
+
+my $bans_r_fh = new IO::File $options{remove}, 'w' or
+ die "Unable to open file $options{remove} for writing: $!";
+
+my $bans_k_fh = new IO::File $options{keep}, 'w' or
+ die "Unable to open file $options{keep} for writing: $!";