chiark / gitweb /
use symbolic segment numbers
authorian <ian>
Sun, 13 Apr 2008 17:40:10 +0000 (17:40 +0000)
committerian <ian>
Sun, 13 Apr 2008 17:40:10 +0000 (17:40 +0000)
layout/data2safety

index a9a18766e9da003d4d08923046c32fb224552b68..afbdd9787e2ce351ebac55695aaf47d8b86a97c2 100755 (executable)
@@ -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".