aboutsummaryrefslogtreecommitdiff
path: root/engines/sci/scicore/huffmake.pl
diff options
context:
space:
mode:
Diffstat (limited to 'engines/sci/scicore/huffmake.pl')
-rw-r--r--engines/sci/scicore/huffmake.pl181
1 files changed, 0 insertions, 181 deletions
diff --git a/engines/sci/scicore/huffmake.pl b/engines/sci/scicore/huffmake.pl
deleted file mode 100644
index eb3ed0b653..0000000000
--- a/engines/sci/scicore/huffmake.pl
+++ /dev/null
@@ -1,181 +0,0 @@
-# ScummVM - Graphic Adventure Engine
-#
-# ScummVM is the legal property of its developers, whose names
-# are too numerous to list here. Please refer to the COPYRIGHT
-# file distributed with this source distribution.
-#
-# This program is free software; you can redistribute it and/or
-# modify it under the terms of the GNU General Public License
-# as published by the Free Software Foundation; either version 2
-# of the License, or (at your option) any later version.
-#
-# This program is distributed in the hope that it will be useful,
-# but WITHOUT ANY WARRANTY; without even the implied warranty of
-# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
-# GNU General Public License for more details.
-#
-# You should have received a copy of the GNU General Public License
-# along with this program; if not, write to the Free Software
-# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
-#
-# $URL$
-# $Id$
-#
-
-#! /usr/bin/perl
-
-# Uncomment the following line to debug
-# $DEBUG=1;
-@codes;
-
-$leaf_value = 0;
-while (<>) {
- chop;
- @tokens = split //;
-
- if ($_ eq "-") {
- calc_values();
- print stderr "$leaf_value tokens processed; result is a huffman tree.\n";
- exit(0);
- }
-
- $codes_len[$leaf_value] = scalar @tokens;
-
- for ($i = 0; $i < scalar @tokens; $i++) {
- $codes[$leaf_value][$i] = $tokens[$i];
- }
-
- $leaf_value++;
-}
-
-$nodes_counter = 0;
-@unlinked;
-
-sub branch_node {
- $left = shift;
- $right = shift;
- print ("\tBRANCH_NODE(", $nodes_counter || "0" , ", $left, $right)\n");
- $nodes_counter++;
-}
-
-sub leaf_node {
- $value = shift;
- print ("\tLEAF_NODE (", $nodes_counter || "0" ,", ", $value || "0" , ")\n");
- $nodes_counter++;
-}
-
-sub intval {
- my $nr = shift;
- my $retval = sub_intval(0, $codes_len[$nr], $nr);
- return $retval >> 1;
-}
-
-sub sub_intval {
- my $lv = shift;
- my $maxlv = shift;
- my $nr = shift;
-
- if ($maxlv >= 0) {
- my $v = $codes[$nr][$maxlv];
- my $retval = sub_intval($lv + 1, $maxlv-1, $nr) << 1;
-
- if ($v == "1") {
- $retval |= 1;
- }
- return $retval || 0;
- } else {
- return 0;
- }
-}
-
-sub calc_values() {
-
- $depth = 1;
- my $startdepth = 100000;
-
- for ($i; $i < scalar @codes; $i++) {
- if ($codes_len[$i] > $depth) {
- $depth = $codes_len[$i];
- }
-
- if ($codes_len[$i] < $startdepth) {
- $startdepth = $codes_len[$i];
- }
- }
-
- branch_node(1, 2);
-
- $level = 1;
- $unlinked[0] = 1;
- $unlinked[1] = 2;
- $linkctr = 3;
-
- for (; $level <= $depth; $level++) {
- my $entries = 1 << $level;
-
- for ($j = 0; $j < ($entries << 1); $j++) {
- $new_unlinked[$j] = -1;
- }
-
- for ($i = 0; $i < $entries; $i++) {
- if ($unlinked[$i] > -1) {
- $match = -1;
-
- if ($DEBUG) {
- print " Finding len=$level val=$i: ";
- }
- for ($j = 0; ($match == -1) && $j < $leaf_value; $j++) {
- if (($codes_len[$j] == $level)
- && (intval($j) == $i)) {
- $match = $j;
- } else {
- if ($DEBUG) {
- print "($j:$codes_len[$j],",intval($j),") ";
- }
- }
- }
- if ($DEBUG) {
- print "\n";
- }
-
- if ($match == -1) {
- die "Expected $unlinked[$i], but counted $nodes_counter in $i at level $level" unless ($unlinked[$i] == $nodes_counter);
- my $lnr = $linkctr++;
- my $rnr = $linkctr++;
- $new_unlinked[$i << 1] = $lnr;
- $new_unlinked[1+($i << 1)] = $rnr;
- branch_node($lnr, $rnr);
- } else {
- leaf_node($match);
- $new_unlinked[$i << 1] = -1;
- $new_unlinked[1+($i << 1)] = -1;
- }
-
- }
- }
-
- if ($DEBUG) {
- print "level $level: Copying ", ($entries << 1), "\n";
- }
- for ($j = 0; $j < ($entries << 1); $j++) {
- $unlinked[$j] = $new_unlinked[$j];
- if ($DEBUG) {
- print $unlinked[$j], " ";
- }
- }
- if ($DEBUG) {
- print "\n";
- }
- }
-
- my $ok = 1;
- for ($j = 0; $j < ($entries << 1); $j++) {
- if ($unlinked[$j] != -1) {
- $ok = 0;
- }
- }
-
- print "#warning \"Tree is not a huffman tree!\"\n" unless $ok;
-}
-
-