return defined boob_used($boardnum,$obj,$kind) ? 1 : 0;
}
-sub so_boob ($$$) {
- my ($kind,$mkused,$bo) = @_;
+sub so_boob ($$$;$) {
+ my ($kind,$mkused,$bo, $objnum_rr) = @_;
my ($type,$pi);
if (defined $bo) {
my ($board,$obj)= @$bo;
" board type $type")
unless defined $pi->[$obj];
$objnum= boob2objnum($board,$obj,$kind,$mkused);
+#print "so_boob >$objnum_rr|$$objnum_rr< = $objnum\n";
+ $$objnum_rr= $objnum;
$pin_used{$kind}[$objnum]= [ $board, $pi->[$obj], $obj ]
if $mkused;
- return sprintf("%#4x /* %d.%-2d*/", $objnum, $board, $obj);
+ return sprintf("%#5x /* %d.%-2d*/", $objnum, $board, $obj);
} else {
+#print "so_boob >$objnum_rr|$$objnum_rr< -\n";
return " 0 /*none*/ ";
}
}
-sub so_objboob ($$$) {
- my ($kind,$mkused,$obj) = @_;
- return so_boob($kind,$mkused, defined $obj ? $obj->{BoOb} : undef);
+sub so_objboob ($$$;$) {
+ my ($kind,$mkused,$obj, $objnum_rr) = @_;
+# return so_boob($kind,$mkused, defined $obj ? $obj->{BoOb} : undef );
+#print "so_objboob >$objnum_rr|$$objnum_rr<\n";
+ return so_boob($kind,$mkused,
+ defined $obj ? $obj->{BoOb} : undef
+ , $objnum_rr
+ );
}
sub mainread () {
}
o("const SegmentNum info_nsegments=NUM_SEGMENTS;\n");
o("const SegmentInfo info_segments[NUM_SEGMENTS]= {");
+ my (@sensemap,$segnum,$sensenum,$i,$j);
$delim= '';
+ $segnum= 0;
foreach $seg (@segs) {
$segr= $segs{$seg};
o("$delim\n");
"\"$seg\",", $segr->{Inv},
$segr->{FeatCount}, ($segr->{FeatCount} ? "mfi_$seg," : '0,'),
$segr->{Posns}, "spci_$seg,",
- so_objboob('sense',1, $segr),
+ so_objboob('sense',1, $segr, \$sensenum),
so_objboob('reverse',1, $segr->{Inv} ? $segr : undef));
$delim= ',';
+ o("/* sensmap[$sensenum]=$segnum */");
+ $sensemap[$sensenum]= $segnum++;
}
o("\n};\n");
o("const BoardObject info_maxreverse= $maxreverseobjnum;\n");
+ o("#define U -1\n");
+ o("const SegmentNumInMap info_segmentmap[]= {\n");
+ $i=0; $j=0;
+ foreach $seg (@sensemap) {
+ o(!$i ? ' ' :
+ (grep { $i == $_ } @sensesbase) ? ($j=0,"\n ") :
+ !(++$j % 30) ? ",\n " :
+ ",");
+ o($seg || 'U');
+ $i++;
+ }
+ o("\n};\n".
+ "const int info_segmentmaplen= ".scalar(@sensemap).";\n");
}
# writeasm_KIND()