our $psu_sleeperlw= 15;
our $psu_raillw= 1.0;
our $psu_thinlw= 1.0;
-our $psu_subseglw= 15.0;
+our %psu_subseglw;
+$psu_subseglw{'e'}= 25.0;
+$psu_subseglw{'m'}= 15.0;
our $lmu_marklw= 4;
our $lmu_marktpt= 11;
o("% segments @segments\n");
}
+sub segment_state_save () {
+ return [ $segused_incurrent, $segused_currentpt,
+ $segmentpart_counter, @segments ];
+}
+sub segment_state_restore ($) {
+ my ($r) = @_;
+ ($segused_incurrent, $segused_currentpt,
+ $segmentpart_counter, @segments) = @$r;
+}
+
sub segment_used_begin ($) {
$segused_incurrent= 0;
$segused_currentpt= $_[0];
print DEBUG "ps $p0 $p1 $lenperp ($ppu)\n";
$draw= current_draw();
if ($draw =~ m/G/) {
- my ($pt,$going,$red,$csegbare,$movfeat,$movstroke,$used_last);
- $going=0;
- o("% segments @segments\n");
- o(" $psu_subseglw setlinewidth\n");
- $param=$p0;
- $pt= &$calcfn;
- segment_used_begin($pt);
- for (;;) {
- $movstroke= " stroke\n";
- $csegbare= $segments[0];
- $csegbare =~ s/^\-//;
- if ($subsegcmapreq) {
- if (!exists $subsegcmap{$csegbare}) {
- print "$csegbare\n" or die $!;
- $subsegcmap{$csegbare}++;
- }
- } else {
- $movfeat= $csegbare =~ s,(/\D+)(\d+)$,$1, ? $2 : 'f';
- if ($subsegmovfeatpos ne $movfeat) {
- $movstroke= "% no-stroke\n";
+ my ($pt,$going,$red,$csegbare,$movfeat,$movstroke);
+ my ($used_last,$me,$segsave);
+ $segsave= segment_state_save();
+ foreach $me (qw(e m)) {
+ segment_state_restore($segsave);
+ $going=0;
+ o("% segments @segments\n");
+ $param=$p0;
+ $pt= &$calcfn;
+ segment_used_begin($pt);
+ for (;;) {
+ $movstroke= " cmapreq-stroke\n";
+ $csegbare= $segments[0];
+ $csegbare =~ s/^\-//;
+ if ($subsegcmapreq) {
+ if (!exists $subsegcmap{$csegbare}) {
+ print "$csegbare\n" or die $!;
+ $subsegcmap{$csegbare}++;
+ }
+ } else {
+ $movfeat= $csegbare =~ s,(/\D+)(\d+)$,$1, ? $2 : 'f';
+ die "unknown subsegment colour for $csegbare\n"
+ unless exists $subsegcmap{$csegbare};
+ $red= $pt->{A} / (2*$pi);
+ $red *= $subsegcmapangscale;
+ $red += $subsegcmapangscale*2;
+ $red += $subsegcmapangscale/2 if $segments[0] =~ m/^\-/;
+ $red %= $subsegcmapangscale;
+ $red += $subsegcmapangscale if $me eq 'e';
+ $red= sprintf("%f", $red / 255.0);
+ $movstroke=
+ (" $red $subsegcmap{$csegbare} setrgbcolor\n".
+ " $psu_subseglw{$me} setlinewidth stroke\n");
+ if ($subsegmovfeatpos ne $movfeat ||
+ ($me eq 'e' && $csegbare =~ m,^/,)) {
+ $movstroke= "% no-stroke\n";
+ }
}
- die "unknown subsegment colour for $csegbare\n"
- unless exists $subsegcmap{$csegbare};
- $red= $pt->{A} / (2*$pi);
- $red *= $subsegcmapangscale;
- $red += $subsegcmapangscale*2;
- $red += $subsegcmapangscale/2 if $segments[0] =~ m/^\-/;
- $red %= $subsegcmapangscale;
- $red /= 255.0;
- $red= sprintf("%f", $red);
- o(" $red $subsegcmap{$csegbare} setrgbcolor\n");
- }
- o_path_begin();
- parametric__o_pt($pt);
+ o_path_begin();
+ parametric__o_pt($pt);
- $param += $ppu;
- last if $param>=$p1;
+ $param += $ppu;
+ last if $param>=$p1;
+ $pt= &$calcfn;
+ segment_used_middle($psu_ulen,$pt);
+ parametric__o_pt($pt);
+ o($movstroke);
+ }
+ $used_last= $p1-($param-$ppu);
+ $param=$p1;
$pt= &$calcfn;
- segment_used_middle($psu_ulen,$pt);
+ segment_used_end($used_last * $lenperp, $pt);
parametric__o_pt($pt);
o($movstroke);
}
- $used_last= $p1-($param-$ppu);
- $param=$p1;
- $pt= &$calcfn;
- segment_used_end($used_last * $lenperp, $pt);
- parametric__o_pt($pt);
- o($movstroke);
}
if ($draw =~ m/C/) {
my ($pt);
use strict qw(vars);
use POSIX;
+use IO::Handle;
#---------- general ----------
#---------- word-reading (for pbm) ----------
-our ($txtrdbuf);
+our $txtrdbuf= '';
sub w () {
- $txtrdbuf='' if !defined $txtrdbuf;
for (;;) {
if ($txtrdbuf =~ s/^\s*(\S+)\s?//) {
#print STDERR "w>$1<\n";
#---------- read segcmap ----------
our (%datum_numbits,%datum_basebit);
-# $datum_numbits{Movfeatpos} etc.
+# $datum_numbits{Segname} etc.
our (@segnum_name,%movfeats,%movfeat_prefix,%movfeat_configbits);
# $segnum_name[$segnum]= $segname;
# $movfeat_prefix{$xpmname}
# $movfeat_configbits{$xpmname}
-xpmdata_setup("background",'',0,0);
+xpmdata_setup('background','',1,0);
for (;;) {
$!=0; defined($_=<>) or die $!;
$datum_basebit{$1}= $3;
} elsif (m/^S ([0-9A-Z]+) (0x[0-9a-f]+)$/) {
seteq(\$segnum_name[hex $2], $1, "segnum $2");
- xpmdata_setup("off","_$1",1,1);
+ xpmdata_setup("bitmap","m_$1",1,1);
xpmdata_setup("on","_$1",1,1);
+ xpmdata_setup("bitmap","e_$1",1,1);
} elsif (m/^F ([0-9A-Z]+) (0x[0-9a-f]+) ([A-Z]+) (0x[0-9a-f]+) (\d+)$/) {
- my ($xpmname,$bitno);
+ my ($xpmname,$bitno,$namerhs);
seteq(\$segnum_name[hex $2], $1, "segnum $2 F $3");
push @{ $movfeats{$1} }, $3;
$xpmname= $1.'_'.$3;
$movfeat_prefix{$xpmname}= hex $4;
$movfeat_configbits{$xpmname}= $5;
- xpmdata_setup("off","_$xpmname",1,1);
+ xpmdata_setup("on","u_$xpmname",1,1);
+ xpmdata_setup("bitmap","m_$xpmname",1,1);
for ($bitno=0; $bitno<$movfeat_configbits{$xpmname}; $bitno++) {
- xpmdata_setup("on","_${xpmname}_${bitno}",1,1);
+ $namerhs= "${xpmname}_${bitno}";
+ xpmdata_setup("on","_$namerhs",1,1);
+ xpmdata_setup("bitmap","e_$namerhs",1,1);
}
}
}
sub xpm_sizes () {
my ($rr,$xp,$xy);
+print STDERR "xpm_sizes\n";
foreach $rr (values %xpmdata) {
foreach $xp (values %$rr) {
foreach $xy (qw(X Y)) {
-#print STDERR "xpms>$xpmname|$xy<\n";
if ($xp->{Partial}) {
$xp->{$xy}{Min}= $sz{$xy}-1;
$xp->{$xy}{Max}= 0;
}
}
-w() eq 'P6' or die;
-($sz{X},$sz{Y})=wns(1,32767,2);
-wn(1,65535)==255 or die;
-
-die if length $txtrdbuf;
-
-xpm_sizes();
-
#---------- read input pixels ----------
our(%p,$pp);
# $p{X}
# $p{Y}
+# $p{Movpos}
sub xpmdata_pixel ($$$) {
my ($style,$namerhs,$pcharstr)=@_;
- my ($xp,$pk,$xy);
+ my ($xp,$pk,$xy,$was);
+#printf STDERR "%s %s %s \`%s'", $pp, $style, $namerhs, $pcharstr;
$xp= $xpmdata{$style}{$namerhs};
- defined $xp or die "$pp $style $namerhs ?";
+ defined $xp or die "$pp: $style $namerhs ?";
foreach $xy (qw(X Y)) {
$xp->{$xy}{Min}= $p{$xy} if $p{$xy} < $xp->{$xy}{Min};
$xp->{$xy}{Max}= $p{$xy} if $p{$xy} > $xp->{$xy}{Max};
}
-die "$pp ?" if $xp->{X}{Max} >= 642;
- die "$pp ?" if defined $xp->{Pixels}{$p{Y}}{$p{X}};
+ $was= $xp->{Pixels}{$p{Y}}{$p{X}};
+ if (defined($was) && $was gt $pcharstr) {
+#print STDERR " already \`$was'\n";
+ return;
+ }
+# die "$pp $style $namerhs \`$pcharstr',\`$xp->{Pixels}{$p{Y}}{$p{X}}' ?"
+#
$xp->{Pixels}{$p{Y}}{$p{X}}= $pcharstr;
+#print STDERR " set\n";
}
sub in_pixel () {
- my ($pbytes);
+ my ($pbytes, $namerhs);
$!=0; read(ARGV, $pbytes, 3) == 3 or die $!;
- if ($pbytes eq "\xff\xff\xff") {
- xpmdata_pixel('background','','-');
- return;
- }
- my ($movfeat,%t,$xpmname,$segname,$datum,$k,$angstr,$bitno);
- $pp= "$p{X} $p{Y}";
+ return if $pbytes eq "\xff\xff\xff";
+ my ($movfeat,%t,$xpmname,$segname,$datum,$k,$angstr,$bitno,$me);
+ $pp= "$ARGV $p{X} $p{Y}";
$datum= unpack 'V', $pbytes."\0";
foreach $k (keys %datum_numbits) {
$t{$k}= ($datum >> $datum_basebit{$k}) &
((1 << $datum_numbits{$k}) - 1);
}
-#printf STDERR "%s 0x%08lx 0x%x\n",$pp,$datum,$t{Segnum};
- if ($t{Edge}) {
- xpmdata_pixel('background','','+');
- return;
- } elsif (!$t{Segnum}) {
- xpmdata_pixel('background','',':');
+#printf(STDERR "%s 0x%08lx 0x%x 0x%x %d\n",$pp,$datum,
+# $t{Segnum},$t{Movfeatpos},$t{Edge});
+ if (!$t{Segnum}) {
+ xpmdata_pixel('background','','=')
+ unless $t{Edge};
return;
} else {
- xpmdata_pixel('background','','!');
+ xpmdata_pixel('background','','!')
+ unless $t{Edge};
}
$segname= $segnum_name[$t{Segnum}];
- defined $segname or die "$pp $t{Segnum}";
+ defined $segname or die "$pp $t{Segnum} $datum";
$pp.= " $segname";
$angstr= ang2pixchars($t{Angle});
-
+
if (!$t{Movfeatpos}) {
$xpmname= $segname;
- xpmdata_pixel("on","_$xpmname", $angstr);
+ xpmdata_pixel("on","_$xpmname", $angstr)
+ unless $t{Edge};
+ xpmdata_pixel("bitmap", "e_${xpmname}", '*')
+ if $t{Edge};
+ xpmdata_pixel("bitmap", "m_${segname}", '*');
} else {
- my ($found);
+ my ($found, $yes);
$found= undef;
foreach $movfeat (@{ $movfeats{$segname} }) {
$xpmname= $segname.'_'.$movfeat;
die "$pp $t{Movfeatpos}"
unless defined $found;
$xpmname= $segname.'_'.$found;
+ xpmdata_pixel("on", "u_${xpmname}",
+ (($p{X} + $p{Y}) % 2) ? $angstr : '-');
+ xpmdata_pixel("bitmap", "m_${xpmname}", '*');
for ($bitno=0; $bitno < $movfeat_configbits{$xpmname}; $bitno++) {
- xpmdata_pixel("on","_${xpmname}_${bitno}",
- ((1<<$bitno) & $t{Movfeatpos}) ? $angstr : '-');
+ $namerhs= "${xpmname}_${bitno}";
+ $yes= $p{Movpos} == $bitno;
+ xpmdata_pixel("on","_$namerhs", $yes ? $angstr : '-')
+ unless $t{Edge};
+ xpmdata_pixel("bitmap","e_$namerhs", $yes ? '*' : ' ')
+ if $t{Edge};
}
}
- xpmdata_pixel("off","_$xpmname", '*');
}
-for ($p{Y}=0; $p{Y}<$sz{Y}; $p{Y}++) {
- printf STDERR "%d\r",$p{Y};
- for ($p{X}=0; $p{X}<$sz{X}; $p{X}++) {
- in_pixel();
+#---------- read input pixmaps
+
+sub read_pixmap_header () {
+ my (@szn,$osz);
+ @szn= wns(1,32767,2);
+ if (exists $sz{X}) {
+ $osz= "$sz{X} $sz{Y}";
+ "@szn" eq "$osz" or die "$osz @szn ?";
+ } else {
+ ($sz{X},$sz{Y})= @szn;
+ xpm_sizes();
+ }
+ wn(1,65535)==255 or die;
+}
+
+for (;;) {
+ die "$txtrdbuf ?" if length $txtrdbuf;
+ $txtrdbuf= <>;
+ if (!defined $txtrdbuf) {
+ die $! unless ARGV->eof;
+ last;
+ }
+ w() eq 'P6' or die;
+ read_pixmap_header();
+ $ARGV =~ m/.*\.p([0-9a-f]+)\b/ or die "$ARGV ?";
+ $p{Movpos}= $1 eq 'f' ? '' : hex($1);
+ for ($p{Y}=0; $p{Y}<$sz{Y}; $p{Y}++) {
+ printf STDERR "%s %d\r",$ARGV,$p{Y}
+ unless $p{Y} % 100;
+ for ($p{X}=0; $p{X}<$sz{X}; $p{X}++) {
+ in_pixel();
+ }
}
}
-die if read ARGV,$_,1;
#---------- colourmaps ----------
sub xpm_cmap ($$) {
my ($style,$cmapname) = @_;
- die if exists $cmap{$cmapname};
+ die "$cmapname ?" if exists $cmap{$cmapname};
push @{ $stylecmaps{$style} }, $cmapname;
$cmap{$cmapname}= { };
}
sub xpm_cmap_entry ($$$) {
my ($cmapname,$pixchars,$rhs) = @_;
- die unless exists $cmap{$cmapname};
- die if exists $cmap{$cmapname}{$pixchars};
+ die "$cmapname ?" unless exists $cmap{$cmapname};
+ die "$cmapname $pixchars ?" if exists $cmap{$cmapname}{$pixchars};
$cmap{$cmapname}{$pixchars}= $rhs;
}
}
sub cmaps_define () {
- my ($inv,$ondet);
+ my ($style,$inv,$ondet);
+ my (@background, @off, @otherposn);
+ @background= qw(100 100 100);
+ @off= qw(0 0 0);
+ @otherposn= qw(50 50 50);
+
xpm_cmap("background","background");
- xpm_cmap_rgbpermil('',qw(off 0 0 0));
- xpm_cmap_rgbpermil("background",qw(- 100 100 100
- + 999 0 990
- : 75 75 75
- ! 999 0 980));
- xpm_cmap("off","off");
- xpm_cmap_fixedbitmap("off",'*');
-
+ xpm_cmap_rgbpermil('', 'off',@off);
+ xpm_cmap_rgbpermil("background",
+ ' ', @background,
+ qw(! 999 0 980
+ = 75 75 75));
+ xpm_cmap("bitmap","bitmap");
+ xpm_cmap_fixedbitmap("bitmap",'*');
+
foreach $inv (('','i')) {
foreach $ondet (qw(on det)) {
xpm_cmap("on","${inv}${ondet}");
xpm_cmap_rgbpermil("${inv}${ondet}",
- ' ', qw(999 0 970),
- qw(- 50 50 50));
+ ' ', @background,
+ '-', @otherposn);
}
xpm_cmap_angular("${inv}on", !!$inv, 600, qw(0 0 0));
xpm_cmap_angular("${inv}det",!!$inv, 330, qw(1000 1000 1000));
foreach $style (sort keys %xpmdata) {
foreach $namerhs (sort keys %{ $xpmdata{$style} }) {
$xp= $xpmdata{$style}{$namerhs};
-die "$pp ?" if $xp->{X}{Max} >= 642;
$header_data= "";
foreach $xy (qw(X Y)) {
$xp->{$xy}{Max}= $xp->{$xy}{Min} if
$header_data .= " ";
}
for ($p{Y}=$xp->{Y}{Min}; $p{Y}<=$xp->{Y}{Max}; $p{Y}++) {
- printf "static const char d%04d_%s%s[]= \"",
+ printf "static const char d%04d_%s_%s[]= \"",
$p{Y}, $style, $namerhs or die $!;
$row= $xp->{Pixels}{$p{Y}};
$pp= "$style $namerhs $p{X} $p{Y}";
-die "$pp ?" if $xp->{X}{Max} >= 642;
for ($p{X}=$xp->{X}{Min}; $p{X}<=$xp->{X}{Max}; $p{X}++) {
$pixel= $row->{$p{X}};
if (!defined $pixel) {
- die "$pp" if !$xp->{Holey};
+ die "$pp ?" if !$xp->{Holey};
$pixel= ' ';
}
print $pixel or die $!;
}
print "\";\n" or die $!;
}
+#printf STDERR "style >$style<\n";
foreach $cmapname (sort @{ $stylecmaps{$style} }) {
$cmap_data= $cmap{$cmapname}{''};
- printf("static const char *p_%s%s[]= {\n".
+ printf("static const char *p_%s_%s[]= {\n".
" \"%s%d 1\",\n",
$cmapname, $namerhs,
$header_data, scalar(@$cmap_data))
or die $!;
map { printf " %s,\n", $_ or die $!; } @$cmap_data;
for ($y=$xp->{Y}{Min}; $y<=$xp->{Y}{Max}; $y++) {
- printf " d%04d_%s%s,\n", $y, $style, $namerhs
+ printf " d%04d_%s_%s,\n", $y, $style, $namerhs
or die $!;
}
print(" 0\n".
}
}
+sub ppdr ($$$) {
+ my ($style,$cmap,$namerhs) = @_;
+ my ($xpmd);
+ $xpmd= $xpmdata{$style}{$namerhs};
+defined $xpmd or die "$style $cmap $namerhs ?";
+ return sprintf("{ %d,%d, p_%s_%s }",
+ $xpmd->{X}{Min}, $xpmd->{Y}{Min},
+ $cmap, $namerhs);
+}
+
+sub ppdiondet ($) {
+ my ($dname) = @_;
+ return ("{ { ".ppdr('on',"on",$dname).", ".ppdr('on',"det",$dname)." },".
+ " { ".ppdr('on',"ion",$dname).", ".ppdr('on',"idet",$dname).
+ " } }");
+}
+
+our (@oodnames, %ood);
+# $ood{$oodname}{Data}= $data_so_far
+# $ood{$oodname}{ArrayDelim}= "\n" or ",\n" but for oodas only
+
+sub oods ($$) {
+ my ($oodname, $data) = @_;
+ die "$oodname {{$data}} ?" if exists $ood{$oodname};
+ $ood{$oodname}{Data}= $data;
+ push @oodnames, $oodname;
+}
+
+sub ooda0 ($$) {
+ my ($oodname, $begin) = @_;
+ die "$oodname {{$begin}} ?" if exists $ood{$oodname};
+ $ood{$oodname}{Data}= $begin;
+ $ood{$oodname}{Data} .= "[]= {";
+ $ood{$oodname}{ArrayDelim}= "\n";
+ push @oodnames, $oodname;
+}
+
+sub ooda1 ($$) {
+ my ($oodname, $entry) = @_;
+ die "$oodname {{$entry}} ?" unless defined $ood{$oodname}{ArrayDelim};
+ $ood{$oodname}{Data} .= $ood{$oodname}{ArrayDelim};
+ $ood{$oodname}{Data} .= " ".$entry;
+ $ood{$oodname}{ArrayDelim}= ",\n";
+}
+
+sub ood_output_all () {
+ my ($oodname, $ood);
+ foreach $oodname (reverse @oodnames) {
+ $ood= $ood{$oodname};
+ print $ood->{Data} or die $!;
+ if (defined $ood->{ArrayDelim}) {
+ print "\n};\n" or die $!;
+ }
+ }
+}
+
sub plandata_output_all () {
my ($i, @segnames, $segname);
- my (@movfeats, $movfeat, $dname, $xpmname, $n_posns, $code, $posn, $mfd);
- my ($n_movfeats, $xpmd);
+ my (@movfeats, $movfeat, $dname, $xpmname, $n_posns, $code, $posn);
+ my ($n_movfeats, $style, $xpmd, $pedge, $me, $noppdr);
+
for ($i=1; $i<@segnum_name; $i++) {
- next unless defined $segnum_name[$i];
- push @segnames, $segnum_name[$i];
+ $segname= $segnum_name[$i];
+ next unless defined $segname;
+ push @segnames, $segname;
}
- for $segname (@segnames) {
- if (!exists $movfeats{$segname}) {
- @movfeats= ();
- } else {
- @movfeats= @{ $movfeats{$segname} };
- }
+
+ oods('ui_plan_data',
+ "const PlanData ui_plan_data= {\n".
+ " $sz{X}, $sz{Y},\n".
+ " p_background_,\n".
+ " ".scalar(@segnames).", segments\n".
+ "};\n");
+
+ ooda0('segments',
+ "static const PlanSegmentData segments");
+
+ foreach $segname (@segnames) {
+ @movfeats=
+ exists $movfeats{$segname} ? @{ $movfeats{$segname} } : ();
unshift @movfeats, '';
- $mfd= '';
+
+ ooda0("mf_$segname",
+ "static const PlanSegmovfeatData mf_$segname");
+
+ ooda1("segments",
+ "{ \"$segname\", ".scalar(@movfeats).", mf_$segname }");
+
foreach $movfeat (@movfeats) {
if (!length $movfeat) {
$xpmname= $segname;
$n_posns= $movfeat_configbits{$xpmname};
$code= "\"$movfeat\"";
}
- printf("static const PlanPixmapOnData pon_%s[]= {\n",
- $xpmname)
- or die $!;
+#print STDERR ">$segname|$movfeat<\n";
+ $noppdr= "{-1,-1,0}";
+ ooda1("mf_$segname",
+ "{ $code, ".ppdr('bitmap',"bitmap","m_$xpmname").", ".
+ ($n_posns > 1 ? ppdiondet("u_$xpmname") :
+ "{ { $noppdr, $noppdr }, { $noppdr, $noppdr } }").
+ ", $n_posns, posns_$xpmname }");
+
+ ooda0("posns_$xpmname",
+ "static const PlanPixmapOnData posns_$xpmname");
+
for ($posn=0; $posn < $n_posns; $posn++) {
if ($movfeat eq '') {
$dname= $segname;
+ $pedge= 'edge';
} else {
$dname= sprintf "%s_%s_%d", $segname, $movfeat, $posn;
+ $pedge= 'pedge';
}
- printf(" { { { p_on_$dname, p_det_$dname },".
- " { p_ion_$dname, p_idet_$dname } } },\n")
- or die $!;
+ ooda1("posns_$xpmname",
+ "{ ".ppdr('bitmap',"bitmap","e_$dname").",".
+ " ".ppdiondet("_$dname")." }");
}
- printf("};\n")
- or die $!;
- $xpmd= $xpmdata{'off'}{"_$xpmname"};
- $mfd .= sprintf(" { %s, %d,%d, p_off_%s, %d, pon_%s },\n",
- $code,
- $xpmd->{X}{Min}, $xpmd->{Y}{Min},
- $xpmname, $n_posns, $xpmname);
- }
- printf("static const PlanSegmovfeatData mf_%s[]= {\n".
- "%s".
- "};\n",
- $segname, $mfd)
- or die $!;
- }
- printf("static const PlanSegmentData segments[]= {\n")
- or die $!;
- for $segname (@segnames) {
- if (exists $movfeats{$segname}) {
- $n_movfeats= scalar(@{ $movfeats{$segname} })+1;
- } else {
- $n_movfeats= 1;
}
- printf(" { \"%s\", %d, mf_%s },\n",
- $segname,
- $n_movfeats,
- $segname)
- or die $!;
}
- printf("};\n")
- or die $!;
- printf("const PlanData ui_plan_data= {\n".
- " $sz{X}, $sz{Y},\n".
- " p_background,\n".
- " %d, segments\n".
- "};\n",
- scalar(@segnames))
- or die $!;
}
print "#include \"plan-data-format.h\"\n" or die $!;
cmapdata_output_all();
xpmdata_output_all();
plandata_output_all();
+ood_output_all();