makechart7.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 = ("Piano","Chromatic Percussion","Organ",
"Guitar","Bass","Strings/Orchestra",
"Ensemble","Brass","Lead","Pipe",
"Synth Lead","Synth Pipe","Synth SFX",
"Ethnic","Percussive","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;
print "<TABLE BORDER=\"1\"><CAPTION>Capital tone list</CAPTION>\n";
foreach (@ky) {
if ($cc0{$_} == 0 && $map{$_} == 1) {
if ($pc{$_} % 8 == 0 && $cc0{$_} == 0 && $map{$_} == 1) {
$v = $pc{$_} / 8;
if ($pc{$_} > 0) {
print "</TR>\n";
}
print "<TR>\n<TH ROWSPAN=\"2\"><FONT SIZE=\"-1\">$variation[$v]</FONT></TH>\n";
}
$pc = $pc{$_} + 1;
print "<TD><FONT SIZE=\"-1\"><A HREF=\"#$_\">$pc: $name{$_}</A></FONT></TD>\n";
if ($pc{$_} % 8 == 3 && $cc0{$_} == 0 && $map{$_} == 1) {
print "</TR>\n";
if ($pc{$_} < 127) {
print "<TR>\n";
}
}
}
}
print "</TABLE>\n<HR>\n";
$tablehead = "<TABLE BORDER=\"1\">\n
<TR>
<TH>CC0</TH><TH>88Pro map</TH>\n
<TH>88 map</TH>\n
<TH>55 map</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>\n<TH COLSPAN=\"5\" BGCOLOR=\"80F0F0\"><A NAME=\"$lastkey\">PC=%s %s</TH>\n</TR>\n<TR>\n%s</TR>\n",$pc-1,$lastname,$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_) {
if ($cc0 < 126) {
$tmpstr .= "</TR>\n<TR>\n";
$pcs++;
}
}
if ($cc0 < 126) {
if ($cc0 == 0) {
$s1 = "<STRONG>";
$s2 = "</STRONG>";
if ($map eq "Pro") {
$lastname = $name{$_};
$lastkey = $_;
}
} else {
$s1 = "";
$s2 = "";
}
if ($map == "Pro") {
$c = "<TD ALIGN=\"RIGHT\">$s1$cc0$s2</TD>\n";
} else {
$c = "";
}
$tmpstr .= "$c<TD>$s1$name{$_}$s2</TD>\n";
}
$pc_ = $pc;
$cc0_ = $cc0;
$map_ = $map;
}
printf "<TR><TH COLSPAN=\"5\" BGCOLOR=\"80F0F0\"><A NAME=\"$lastkey\">PC=%s %s</TH>\n</TR>\n<TR>\n%s</TR>\n",$pc-1,$lastname,$tmpstr;
print << "FOOTER";
</BODY>
</HTML>
FOOTER