From: ian Date: Sun, 13 Apr 2008 17:40:10 +0000 (+0000) Subject: use symbolic segment numbers X-Git-Url: http://www.chiark.greenend.org.uk/ucgi/~ijackson/git?a=commitdiff_plain;h=f4418c610153466baadc8fc3006cc2f615a495f6;p=trains.git use symbolic segment numbers --- diff --git a/layout/data2safety b/layout/data2safety index a9a1876..afbdd97 100755 --- a/layout/data2safety +++ b/layout/data2safety @@ -418,6 +418,10 @@ sub nummap ($) { return $p; } +sub so_segnum ($) { + return sprintf "s%s", $_[0]; +} + sub writeout () { my (@segs,$segn,$seg,$segr,$pt,$ptv, $delim); my ($comb,$pi,$feat,$featr,$end,$boob); @@ -433,6 +437,15 @@ sub writeout () { "#define NUM_SEGMENTS %s\n\n". "#include \"layout-data.h\"\n\n", scalar @segs); + + my ($segnum); + $segnum= 0; + foreach $seg (@segs) { + o(sprintf "#define s%-4s %4d\n", $seg, $segnum); + $segnum++; + } + o("\n"); + foreach $seg (@segs) { $segr= $segs{$seg}; @@ -462,11 +475,10 @@ sub writeout () { if (defined $nodeotherside) { $otherseg= $nodeotherside->{Seg}; $otherbackrelus= $nodeotherside->{End} ^ $end ^ 1; - o(sprintf "/*%4s.%d %-5s*/ %d,%3d", + o(sprintf "/*%4s.%d*/ %d,%4s", $node,$side, - ($otherbackrelus?'-':' ').$otherseg, $otherbackrelus, - $segs{$otherseg}{Num}); + so_segnum($otherseg)); } else { o(sprintf "/*%5s.%d*/ 0,NOTA(Segment)", $node,$side); @@ -538,15 +550,15 @@ sub writeout () { } @$inter; } + my (@sensemap,$sensenum,$i); o("const SegmentNum info_nsegments=NUM_SEGMENTS;\n"); o("const SegmentInfo info_segments[NUM_SEGMENTS]= {"); - my (@sensemap,$segnum,$sensenum,$i); $delim= ''; $segnum= 0; foreach $seg (@segs) { $segr= $segs{$seg}; o("$delim\n"); - o(sprintf " { %-6s%d,%2d,%-8s%d,%-9s%-6s,%-7s", + o(sprintf " { %-7s%d,%2d,%-9s%d,%-10s%-6s,%-7s", "\"$seg\",",$segr->{Inv}, $segr->{FeatCount}, ($segr->{FeatCount} ? "mfi_$seg," : '0,'), $segr->{Posns}, "spci_$seg,", @@ -554,14 +566,15 @@ sub writeout () { so_objboob('reverse',1, $segr->{Inv} ? $segr : undef).','); $ourinter= $segr->{Inter}; if (defined $ourinter->{Seg}) { - o(sprintf "%2d/*%s*/,0%o", $segs{$ourinter->{Seg}}{Num}, - $ourinter->{Seg}, $ourinter->{Map}); + o(sprintf "%5s,0%o", so_segnum($ourinter->{Seg}), + $ourinter->{Map}); } else { o(" -1"); } o(" }"); $delim= ','; - $sensemap[$sensenum]= $segnum++; + $sensemap[$sensenum]= $seg; + $segnum++; } o("\n};\n"); o("const BoardObject info_maxreverse= $maxreverseobjnum;\n"); @@ -572,7 +585,7 @@ sub writeout () { o(!$i ? ' ' : !($i % 12) ? ",\n " : ","); - o(defined($seg) ? sprintf("%4d",$seg) : ' u'); + o(defined($seg) ? sprintf("%4s",so_segnum($seg)) : ' u'); $i++; } o("\n};\n".