chiark / gitweb /
pattress-boxes-3-cover: Lid
[reprap-play.git] / knifeblock-knives-filter
index 6dfce6685edce8644c464d1bce02dc3b57cfb648..17cff7401bbd1f0cf8cdafa52a560c4b541a4b27 100755 (executable)
@@ -1,25 +1,36 @@
-#!/usr/bin/perl -wn
+#!/usr/bin/perl -w
 
 use strict;
+use POSIX;
 
 our %want;
 
-BEGIN {
-      my $want = shift @ARGV;
-      my ($part,$knife) = $want =~ m/^([ha])(\d)$/ or die;
+our $nknives = 3;
 
-      $want{ $knife+1 } = $part =~ m/[h]/;
-      $want{ $knife+4 } = $part =~ m/[ha]/;
-}
+our @part_order = qw(h b l);
 
-our $drop;
+my $want = shift @ARGV;
+my ($wknife,$wparts) = $want =~ m/^(\d)([a-z]+)$/ or die;
 
-if (m/^\S/) {
-    $drop = 
-       m/^2 / ||
-       (m/^3 \d+ \d+ \d+ (\d+) / && !$want{$1});
+sub want ($) {
+    my ($colournum) = @_;
+    my $knife = $nknives-1 - ($colournum-1) % $nknives;
+    return 0 unless $knife == $wknife;
+    my $part = $part_order[ floor(($colournum-1) / $nknives) ];
+    die "huh colour $colournum?" unless defined $part;
+    return 0 unless $part =~ m/[$wparts]/o;
+    print STDERR "$0: including colour $colournum ($knife $part)\n";
+    return 1;
 }
 
-next if $drop;
-
-print or die $!;
+our $drop;
+while (<>) {
+    if (m/^\S/) {
+       $drop = 
+           m/^2 5 / ||
+           (m/^(?:3 1|2 3) \d+ \d+ (\d+) / && !want($1));
+    }
+    next if $drop;
+
+    print or die $!;
+}