makechart4.pl.txt
binmode STDIN;
print << "HEADER";
<HTML>
<HEAD><TITLE>SC-88 Pro tone names list</TITLE></HEAD>
<BODY>
<H3>SC-88 Pro tone names list</H3>
HEADER
@model = ("","Pro","88","55");
@variation = ("ピアノ","クロマチック・パーカッション","オルガン",
"ギター","ベース","ストリングス/オーケストラ",
"アンサンブル","ブラス","リード","パイプ",
"シンセSFX","エスニックなど","パーカッシブ","SFX" );
undef $/;
$buf = <>;
$pmax = length($buf);
for ($p = 0; $p < $pmax; $p += 16) {
($cc0_,$map_,$pc_,$name_) = unpack("CCCxA12",substr($buf,$p,16));
if ($map_ == 3) {
$map_ = 1;
} elsif ($map_ == 1) {
$map_ = 3;
}
$k_ = substr("00".$pc_, -3, 3) .
substr("00".$cc0_, -3, 3) .
substr("00".$map_, -3, 3);
$pc{$k_} = $pc_;
$cc0{$k_} = $cc0_;
$map{$k_} = $map_;
$name{$k_} = $name_;
push(@ky, $k_);
}
@ky = sort {$a <=> $b} @ky;
$tablehead = "<TABLE BORDER=\"1\">\n
<TR><TH>PC</TH><TH>CC0</TH><TH>map</TH><TH>name</TH>\n
<TH>CC0</TH><TH>map</TH><TH>name</TH>\n
<TH>CC0</TH><TH>map</TH><TH>name</TH></TR>\n";
$tmpstr = "";
$pcs = 1;
print "<H4>$variation[0]</H4>\n$tablehead";
foreach (@ky) {
$pc = $pc{$_} + 1;
$cc0 = $cc0{$_};
$map = $model[$map{$_}];
if ($pc != $pc_) {
if ($pc != 1) {
printf "<TR><TH ROWSPAN=\"%d\">%s</TH>%s</TR>\n",$pcs,$pc-1,$tmpstr;
$tmpstr = "";
$pcs = 1;
if (($pc - 1) % 8 == 0) {
print "</TABLE>\n";
printf "<HR>\n<H4>%s</H4>\n$tablehead",$variation[($pc-1)/8];
}
}
} elsif ($cc0 != $cc0_) {
$tmpstr .= "</TR>\n<TR>";
$pcs++;
}
if ($cc0 == 0) {
$tmpstr .= "<TD><B>$cc0</B></TD><TD><B>$map</B></TD><TD><B>$name{$_}</B></TD>\n";
} else {
$tmpstr .= "<TD>$cc0</TD><TD>$map</TD><TD>$name{$_}</TD>\n";
}
$pc_ = $pc;
$cc0_ = $cc0;
$map_ = $map;
}
print "<TR><TH ROWSPAN=\"$pcs\">$pc</TH>$tmpstr</TR>\n</TABLE>\n";
print << "FOOTER";
</BODY>
</HTML>
FOOTER