chiark / gitweb /
wip topbloke-merge-lists
[topbloke.git] / topbloke-merge-lists
index 42737e0e1199ef0db7bb6374eb7e8e4702d1bd84..c717c4f149ba108c3bb7dac8f966976e637b273c 100755 (executable)
@@ -5,7 +5,11 @@ use warnings;
 use IO::Handle;
 
 our %flag;
-our @order, @order_final_maybe;
+our (@order, @order_final_maybe);
+our $verbose=0;
+
+# we don't use Getopt::Long because we want to be quick to start up
+# and we're not really a very user-facing utility
 
 while (@ARGV && $ARGV[0] =~ m/^\-/) {
     $_ = shift @ARGV;
@@ -15,6 +19,8 @@ while (@ARGV && $ARGV[0] =~ m/^\-/) {
     } elsif (s/^-D//) {
        $flag{$_}{Result} = 1;
        push @order_final_maybe, $_;
+    } elsif (m/^-v$/) {
+       $verbose = 1;
     } elsif (m/^--$/) {
        last;
     } else {
@@ -37,9 +43,11 @@ foreach my $ix (qw(0 1 2)) {
 }
 
 foreach $_ (@order_final_maybe) {
-    push @order, $_ unless $flags{$_}{InOrder}++;
+    push @order, $_ unless $flag{$_}{InOrder}++;
 }
 
+my $current = $ARGV[0];
+
 open O, '>', "$current.tmp" or die "$current.tmp $!";
 
 foreach $_ (@order) {
@@ -47,13 +55,16 @@ foreach $_ (@order) {
     if (!defined $ff->{Result}) {
        my $s = '';
        foreach my $ix (qw(0 1 2)) {
-           $ff->{Input}[$ix] ||= 1;
+           $ff->{Input}[$ix] ||= 0;
            $s .= $ff->{Input}[$ix];
        }
+       if ($verbose) {
+           print STDERR "MERGE-LISTS $s $_\n" or die $!;
+       }
        $ff->{Result} =
            $s eq '000' ? '000' :
            $s eq '111' ? '111' :
-           $ff->{Input}[1];
+           !$ff->{Input}[1];
     }
     if ($ff->{Result}) {
        print O "$_\n" or die $!;