From: ian Date: Sun, 20 Mar 2005 21:27:12 +0000 (+0000) Subject: working on data2safety X-Git-Url: http://www.chiark.greenend.org.uk/ucgi/~ijackson/git?a=commitdiff_plain;h=8c5aa1e13f7fe871df58f08d6b32664a5f0a2280;p=trains.git working on data2safety --- diff --git a/layout/.cvsignore b/layout/.cvsignore index 510bade..50dd492 100644 --- a/layout/.cvsignore +++ b/layout/.cvsignore @@ -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 diff --git a/layout/Makefile b/layout/Makefile index b0d5b99..80ae7ed 100644 --- a/layout/Makefile +++ b/layout/Makefile @@ -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 index 0000000..a9ab5de --- /dev/null +++ b/layout/data2safety @@ -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 index 0000000..c3b35b7 --- /dev/null +++ b/layout/ours.wiring @@ -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 diff --git a/layout/redactgraph.c b/layout/redactgraph.c index dfb08f8..5c45efc 100644 --- a/layout/redactgraph.c +++ b/layout/redactgraph.c @@ -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; }