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