chiark / gitweb /
working on data2safety
authorian <ian>
Sun, 20 Mar 2005 21:27:12 +0000 (21:27 +0000)
committerian <ian>
Sun, 20 Mar 2005 21:27:12 +0000 (21:27 +0000)
layout/.cvsignore
layout/Makefile
layout/data2safety [new file with mode: 0755]
layout/ours.wiring [new file with mode: 0644]
layout/redactgraph.c

index 510badea33e28bee55492f65287c59b656744391..50dd4921b65b5d25e3b27fe0c0f97689dc859a62 100644 (file)
@@ -19,3 +19,7 @@ ours.graph.c
 ours.redactgraph
 ours.raw.neato.ps
 ours.raw.neato
+ours.redacted.neato.ps
+ours.redacted.neato
+ours.redacted.forsafety
+ours.safety.c
index b0d5b996b480ebf18f30194c176ce4e78077174b..80ae7ed8a5928c6b87b03f880f503dc7e25b1a76 100644 (file)
@@ -23,6 +23,7 @@ CPROGS=               subseg2display compose-segenco
 default:       $(CPROGS) for-test-ui
 all:           default lpages layers extras
 for-test-ui:   ours.graph.c ours.redactgraph ours.raw.neato.ps \
+               ours.redacted.neato.ps ours.safety.c \
                ours.dgram-bot.segcmap subseg2display ui-plan-bot.ppm
 
 layers:                $(LAYERS)
@@ -43,6 +44,12 @@ LINK=                $(CC) $(CFLAGS) $(LDFLAGS) -o $@ $+ $(LIBS)
 NETPBM=                -lnetpbm
 # -lppm
 
+REDACT=                consistency movfeatsplitedges   \
+               consistency movfeatrmstubs      \
+               consistency movfeatsplitnodes   \
+               consistency trivpairnodes       \
+               consistency trivnullnodes
+
 subseg2display:        subseg2display.o
                $(LINK) $(NETPBM) -lpub -lm
 
@@ -53,7 +60,16 @@ compose-segenco: compose-segenco.o
                neato -Tps <$< $o
 
 %.raw.neato:   %.redactgraph
-               ./$< printforneato $o
+               ./$< consistency printforneato $o
+
+%.redacted.neato: %.redactgraph
+               ./$< $(REDACT) consistency printforneato $o
+
+%.redacted.forsafety: %.redactgraph
+               ./$< $(REDACT) consistency printforforsafety $o
+
+%.safety.c:    data2safety %.wiring %.redacted.forsafety
+               ./$^ $o
 
 %.redactgraph: %.graph.o redactgraph.o
                $(LINK)
@@ -127,3 +143,4 @@ clean:
 
 .PRECIOUS:     $(OPRINTS)
 .PRECIOUS:     %.segcmap %.segcmapreq %.segenco.ppm %.d4 %.neato
+.PRECIOUS:     %.redactgraph %.redacted.forsafety
diff --git a/layout/data2safety b/layout/data2safety
new file mode 100755 (executable)
index 0000000..a9ab5de
--- /dev/null
@@ -0,0 +1,131 @@
+#!/usr/bin/perl -w
+
+use strict qw(vars);
+
+our (%segs);
+# $segs{$seg}{Inv}
+# $segs{$seg}{BoOb}
+# $segs{$seg}{Posns}
+# $segs{$seg}{FeatCount}              does not include Fixed
+# $segs{$seg}{Feats}{$pt}{Kind}       Point or Fixed
+# $segs{$seg}{Feats}{$pt}{Weight}     ) for Point only
+# $segs{$seg}{Feats}{$pt}{Posns}      ) for Point only
+# $segs{$seg}{Feats}{$pt}{BoOb}       ) for Point only
+# $segs{$seg}{Feats}{$pt}{Fixed}      position, for Fixed only
+
+our ($mode,$invertible);
+$mode= 'barf';
+
+sub line_barf () { die; }
+
+sub begin_points () { }
+sub line_points () {
+    my ($seg,$pt,@boob,$bodef);
+    m,^\s+(\w+)/([A-Za-z]+)\s+((\d+)\.\d+)\s+(\d*\.\d+)$, or die "$_ ?";
+    ($seg,$pt,$boob[0],$bodef,$boob[1])=($1,$2,$3,$4,$5);
+    $boob[1] =~ s/^\./$bodef./;
+    die "$_ ?" unless exists $segs{$seg};
+    die "$_ ?" if exists $segs{$seg}{Feats}{$pt};
+    $segs{$seg}{Feats}{$pt}= {
+       Kind => Point,
+       Weight => $segs{$seg}{Posns},
+       Posns => 2,
+       BoOb => [ @boob ]
+       };
+    $segs{$seg}{Posns} *= 2;
+    $segs{$seg}{FeatCount}++;
+}
+
+sub begin_fixed () { }
+sub line_fixed () {
+    my ($seg,$pt,$pos);
+    m,^\s+(\w+)/([A-Za-z]+)(\d+)$, or die "$_ ?";
+    ($seg,$pt,$pos)=($1,$2,$3);
+    die "$_ ?" unless exists $segs{$seg};
+    die "$_ ?" if exists $segs{$seg}{Feats}{$pt};
+    $segs{$seg}{Feats}{$pt}= {
+       Kind => Fixed,
+       Fixed => $pos
+       };
+}
+
+sub begin_segment () { }
+sub line_segment () {
+    my ($seg,$boob);
+    m/^\s+(\w+)\s+(\d+\.\d+)$/ or die "$_ ?";
+    ($seg,$boob)=($1,$2);
+    die "$_ ?" if exists $segs{$seg};
+    $segs{$seg}= {
+       BoOb => $boob,
+       Inv => $invertible,
+       Posns => 1,
+       Feats => { },
+       FeatCount => 0
+    };
+}
+
+sub begin_endwiring () {
+    my ($seg,$segv,$pt,$ptv, $delim);
+    for $seg (keys %segs) {
+       $segv= $segs{$seg};
+       next unless $segv->{FeatCount};
+       o("static const MovFeatInfo mfi_${seg}[]= {");
+       $delim='';
+       for $pt (keys %{ $segv->{Feats} }) {
+           $ptv= $segv->{Feats}{$pt};
+           next if exists $ptv->{Fixed};
+           o("$delim\n");
+           o("  { \"$seg/$pt\", $ptv->{Posns}, $ptv->{Weight} }");
+           $delim=',';
+       }
+       o("\n};\n");
+    }
+}
+
+#      o("static const SegPosCombInfo spci_${seg}[]= {");
+#      $delim='';
+#      for ($comb=0; $comb < $segv->{Posns}; $comb++) {
+#      }
+
+sub line_endwiring () {
+    my (@ns,$seg,$subspec,$dist);
+    m,^\s*segment\s+(\w+\.\d+)\s+(\w+\.\d+)\s+(\w+)((?:/\w+\*\d+)?)\s+([0-9.]+)$, or die "$_ ?";
+    ($ns[0],$ns[1],$seg,$subspec,$dist)=($1,$2,$3,$4,$5);
+    if (!exists $segs{$seg}) {
+       print STDERR "ditching unwired $seg$subspec\n";
+       return;
+    }
+}
+
+sub o ($) {
+    print STDOUT $_[0] or die $!;
+}
+
+sub so_oboob ($) {
+    my ($obj) = @_;
+    my ($boob);
+    $boob= $obj->{BoOb};
+    $boob =~ m/^([1-9]\d)*\.([1-9]\d*)$/ or die "$boob ?";
+    return sprintf "%d,%d",$1,$2;
+}
+
+sub mainread () {
+    o("/* autogenerated - do not edit */\n\n");
+    while (<>) {
+       next if m/^\#/;
+       chomp;
+       s/\s+$//;
+       next unless m/\S/;
+       last if m/^end$/;
+       if (m/^(invertible|vanilla|points|fixed|endwiring)$/) {
+           $mode= $1;
+           $invertible= ($mode eq 'invertible');
+           $mode= 'segment' if $mode =~ m/^(?:vanilla|invertible)$/;
+           &{"begin_$mode"};
+       } else {
+           &{"line_$mode"};
+       }
+    }
+}
+
+mainread();
diff --git a/layout/ours.wiring b/layout/ours.wiring
new file mode 100644 (file)
index 0000000..c3b35b7
--- /dev/null
@@ -0,0 +1,35 @@
+invertible
+#      segment board.invert&sense
+       X1      0.3
+       X2      1.0
+       X3      0.1
+       X4      1.1
+       X5      0.2
+       X6      1.2
+       X7      0.0
+       X8      1.3     
+       X9      1.4
+       X10     1.5
+
+vanilla
+#      segment board.sense
+       A1      3.11
+       A2      3.5
+       A3      3.12
+       A4      3.3
+       A5      3.18
+       A6      3.6
+
+points
+#      point   board.motor0    board.motor1
+       X7/P    0.0     .1
+       X8/P    3.0     .1
+       A6/P    3.2     .3
+       A5/P    0.2     .3
+
+fixed
+#      point
+       A6/J0
+       A5/J0
+
+endwiring
index dfb08f8f921b0f8c16c42f84fc9dab524a0cea7b..5c45efced5642b34f4e2a1a4eb64b58e12506428 100644 (file)
@@ -452,7 +452,7 @@ static int movfeat_isinnernode(Node *node) {
     trace(" not inner: no edges?!\n");
     return 0;
   }
-  trace(" inner %s ",segment->segname);
+  trace(" inner %s ",all_segment->segname);
   return 1;
 }