Index: libmpc/branches/r2d/common/huffman.c
===================================================================
--- libmpc/branches/r2d/common/huffman.c	(revision 157)
+++ libmpc/branches/r2d/common/huffman.c	(revision 161)
@@ -194,9 +194,10 @@
  * @param num_symbols
  * @param print_type
- */
-void _Huffman_PrintCodes(huff_sym_t * sym, unsigned int num_symbols, int print_type)
+ * @param offset
+ */
+void _Huffman_PrintCodes(huff_sym_t * sym, unsigned int num_symbols, int print_type, int offset)
 {
 	unsigned int total_cnt = 0, total_size = 0, optim_size = 0;
-	int i;
+	int i, packs[4];
 
 	switch( print_type ) {
@@ -217,5 +218,26 @@
 			printf("{\n	");
 			for( i = num_symbols - 1; i >= 0; i--) {
-				printf("{0x%.8x, %u, %u}", sym[i].Code << (32 - sym[i].Bits), sym[i].Bits, sym[i].Symbol);
+				printf("{0x%.8x, %u, %i}", sym[i].Code << (32 - sym[i].Bits), sym[i].Bits, sym[i].Symbol - offset);
+				if (i != 0)
+					printf(", ");
+			}
+			printf("\n}\n");
+			break;
+		case 4:
+			qsort(sym, num_symbols, sizeof(huff_sym_t),
+				  (int (*)(const void *, const void *)) _Huffman_CompBits);
+			printf("{\n	");
+			for( i = num_symbols - 1; i >= 0; i--) {
+				int symbol =  sym[i].Symbol;
+				packs[3] = symbol / (offset * offset * offset);
+				packs[2] = (symbol - packs[3] * offset * offset * offset) / (offset * offset);
+				packs[1] = (symbol - (packs[3] * offset + packs[2]) * offset * offset) / offset;
+				packs[0] = symbol - ((packs[3] * offset + packs[2]) * offset + packs[1] * offset);
+				packs[0] -= offset >> 1;
+				packs[1] -= offset >> 1;
+				packs[2] -= offset >> 1;
+				packs[3] -= offset >> 1;
+				symbol = ((packs[3] & 15) << 12) | ((packs[2] & 15) << 8) | ((packs[1] & 15) << 4) | (packs[0] & 15);
+				printf("{0x%.8x, %u, %i}", sym[i].Code << (32 - sym[i].Bits), sym[i].Bits, symbol);
 				if (i != 0)
 					printf(", ");
@@ -234,5 +256,5 @@
 			for( i = 0; i < num_symbols; i++) {
 				int k = sym[i].Bits - 1;
-				printf("%-10u	%-10u	%-10u	", sym[i].Symbol, sym[i].Count, sym[i].Bits);
+				printf("%-10i	%-10u	%-10u	", sym[i].Symbol - offset, sym[i].Count, sym[i].Bits);
 				for (; k >= 0 ; k--)
 					printf("%u", (sym[i].Code >> k) & 1 );
