chiark / gitweb /
dvt-simple2tally: copy from devotee tree (fc6a9d420d1f09ddad28e7b03b1ff1299e5ea58b)
authorIan Jackson <ijackson@chiark.greenend.org.uk>
Sun, 2 Feb 2014 16:18:11 +0000 (16:18 +0000)
committerIan Jackson <ijackson@chiark.greenend.org.uk>
Sun, 2 Feb 2014 16:18:11 +0000 (16:18 +0000)
dvt-simple2tally [new file with mode: 0644]

diff --git a/dvt-simple2tally b/dvt-simple2tally
new file mode 100644 (file)
index 0000000..26fd3f3
--- /dev/null
@@ -0,0 +1,169 @@
+#!/usr/bin/perl -w
+#
+# This program is free software; you can redistribute it and/or modify
+# it under the terms of the GNU General Public License as published by
+# the Free Software Foundation; either version 2 of the License, or
+# (at your option) any later version.
+#
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+# GNU General Public License for more details.
+#
+# You should have received a copy of the GNU General Public License
+# along with this program; if not, write to the Free Software
+# Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+# 
+
+use strict;
+
+require 5.005;
+use Carp qw(carp croak);
+use Fcntl ':flock';             # import LOCK_* constants
+use Getopt::Long;
+use Digest::MD5  qw(md5 md5_hex md5_base64);
+use DB_File;
+
+=head1 NAME
+
+dvt-simple2tally - create a tally sheet from manual input
+
+=cut
+
+=head1 SYNOPSIS
+
+dvt-simple2tally -c /path/to/config < input
+
+=cut
+
+=head1 DESCRIPTION
+
+Converts an input file in ad-hoc form to tally.txt
+
+=cut
+
+
+=head2 Internal Implementation
+
+This routine pays attention to configuration variables Tally_File,
+Option_*
+
+=cut
+
+sub badformat ($) {
+  my ($m) = @_;
+  die sprintf "bad format: stdin:%d: %s\n", STDIN->input_line_number, $m;
+}
+
+sub create_tally {
+  my %params   = @_;
+#  die "Internal Error!" unless defined $params{'Configuration'};
+#  my $confref = $params{'Configuration'}->get_config_ref();
+#  my $dvt = $params{'Configuration'};
+#  my %Config = %{ $confref };
+
+#  my $tallyfile   = $Config{'Tally_File'};
+
+#  my @valid_options =
+#      grep {m/^Option_[[:alnum:]]+$/ && $Config{$_}; } sort keys %Config;
+
+my @valid_options = qw(D U O V FD);
+  my %opt2ix;
+
+  foreach my $ix (0..$#valid_options) {
+    $opt2ix{$valid_options[$ix]} = $ix;
+  }
+
+  while (<STDIN>) {
+    s/^\s+//;
+    s/\s+$//;
+    next if m/^\#/;
+    next unless m/\S/;
+    badformat "missing voter name" unless s/^(\S+)\:\s*//;
+    my $voter = $1;
+    $_ = uc $_;
+    s/\t/ /g;
+    s/\,/ /g;
+    while (s{\(([^()]+)\)}{
+        my $x = $1; $x =~ s/[ =]+/=/g; $x;
+    }ge) { }
+    s/[ =]*=[ =*]/=/g;
+    s/\s+/ /g;
+    print "# normalised $_ ($voter)\n";
+
+    my @ranks = ('-',) x @valid_options;
+    my $rank = 1;
+    foreach (split /\s+/) {
+      foreach (split /=/) {
+       my $ix = $opt2ix{$_};
+       defined $ix or badformat "unknown option $_ ($voter)";
+       $ranks[$ix] = $rank;
+      }
+      $rank++;
+    }
+    print "V: ", (map {
+      $_      # fixme  base36
+    } @ranks), " ", $voter, "\n"
+        or die $!;
+  }
+}
+
+
+#use Devotee;
+sub main {
+#  my $optdesc = Devotee->Optdesc();
+#  GetOptions (%$optdesc);
+#  my $dvt = Devotee->new(%::ConfOpts);
+my $dvt= undef;
+#  $dvt->validate(%::ConfOpts) unless 
+#    defined $::ConfOpts{'Config File'} && -r $::ConfOpts{'Config File'};
+#  $dvt->lock_vote_dir();
+  &create_tally('Configuration' => $dvt);
+#  $dvt->unlock_vote_dir();
+}
+
+&main;
+
+exit 0;
+
+
+=cut
+
+=head1 BUGS
+
+None Known so far.
+
+=cut
+
+=head1 AUTHOR
+
+Ian Jackson <ijackson@chiark.greenend.org.uk>
+
+=head1 COPYRIGHT AND LICENSE
+
+This script is a part of the Devotee package, and is 
+
+Copyright (c) 2014 Ian Jackson <ijackson@chiark.greenend.org.uk>
+
+This program is free software; you can redistribute it and/or modify
+it under the terms of the GNU General Public License as published by
+the Free Software Foundation; either version 2 of the License, or
+(at your option) any later version.
+
+This program is distributed in the hope that it will be useful,
+but WITHOUT ANY WARRANTY; without even the implied warranty of
+MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+GNU General Public License for more details.
+
+You should have received a copy of the GNU General Public License
+along with this program; if not, write to the Free Software
+Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+
+=cut
+
+
+
+1;
+
+__END__
+