diff options
Diffstat (limited to 'baseline/source/huff_enc/huff_enc.c')
| -rw-r--r-- | baseline/source/huff_enc/huff_enc.c | 589 |
1 files changed, 0 insertions, 589 deletions
diff --git a/baseline/source/huff_enc/huff_enc.c b/baseline/source/huff_enc/huff_enc.c deleted file mode 100644 index 6a0b901..0000000 --- a/baseline/source/huff_enc/huff_enc.c +++ /dev/null | |||
| @@ -1,589 +0,0 @@ | |||
| 1 | /* | ||
| 2 | |||
| 3 | This program is part of the TACLeBench benchmark suite. | ||
| 4 | Version V 2.0 | ||
| 5 | |||
| 6 | Name: huff_enc | ||
| 7 | |||
| 8 | Author: David Bourgin (David.Bourgin@ufrima.imag.fr) | ||
| 9 | |||
| 10 | Function: Example of Huffman encoding | ||
| 11 | |||
| 12 | Source: ftp://turing.imag.fr/pub/compression/ (1994-09-22) | ||
| 13 | |||
| 14 | Original name: codhuff.c | ||
| 15 | |||
| 16 | Changes: I/O to char arrays instead of file i/o. | ||
| 17 | Dynamic memory allocation replaced by array. | ||
| 18 | Explicit sorting algorithm. | ||
| 19 | |||
| 20 | License: | ||
| 21 | |||
| 22 | The source code files (codrl1.c, dcodrl1.c, codrle2.c, dcodrle2.c, codrle3.c, | ||
| 23 | dcodrle3.c, codrle4.c, dcodrle4.c, codhuff.c, dcodhuff.c) are copyrighted. | ||
| 24 | They have been uploaded on ftp in turing.imag.fr (129.88.31.7):/pub/compression | ||
| 25 | on 22/5/94 and have been modified on 22/9/94. | ||
| 26 | (c) David Bourgin - 1994 | ||
| 27 | The source codes I provide have no buggs (!) but being that I make them | ||
| 28 | available for free I have some notes to make. They can change at any time | ||
| 29 | without notice. I assume no responsability or liability for any errors or | ||
| 30 | inaccurracies, make no warranty of any kind (express, implied or statutory) | ||
| 31 | with respect to this publication and expressly disclaim any and all warranties | ||
| 32 | of merchantability, fitness for particular purposes. Of course, if you have | ||
| 33 | some problems to use the information presented here, I will try to help you if | ||
| 34 | I can. | ||
| 35 | |||
| 36 | If you include the source codes in your application, here are the conditions: | ||
| 37 | - You have to put my name in the header of your source file (not in the | ||
| 38 | excutable program if you don't want) (this item is a must) | ||
| 39 | - I would like to see your resulting application, if possible (this item is not | ||
| 40 | a must, because some applications must remain secret) | ||
| 41 | - Whenever you gain money with your application, I would like to receive a very | ||
| 42 | little part in order to be encouraged to update my source codes and to develop | ||
| 43 | new schemes (this item is not a must) | ||
| 44 | |||
| 45 | */ | ||
| 46 | |||
| 47 | |||
| 48 | /* | ||
| 49 | Declaration of types | ||
| 50 | */ | ||
| 51 | |||
| 52 | |||
| 53 | #include "extra.h" | ||
| 54 | typedef struct huff_enc_s_tree { | ||
| 55 | unsigned int byte; /* A byte has to be coded as an unsigned integer to | ||
| 56 | allow a node to have a value over 255 */ | ||
| 57 | unsigned long int weight; | ||
| 58 | struct huff_enc_s_tree *left_ptr; | ||
| 59 | struct huff_enc_s_tree *right_ptr; | ||
| 60 | } huff_enc_t_tree; | ||
| 61 | |||
| 62 | typedef struct { | ||
| 63 | unsigned char bits[32]; | ||
| 64 | unsigned int bits_nb; | ||
| 65 | } huff_enc_t_bin_val; | ||
| 66 | |||
| 67 | |||
| 68 | /* | ||
| 69 | Forward declaration of functions | ||
| 70 | */ | ||
| 71 | |||
| 72 | void huff_enc_init( void ); | ||
| 73 | int huff_enc_return( void ); | ||
| 74 | void huff_enc_beginning_of_data(); | ||
| 75 | int huff_enc_end_of_data(); | ||
| 76 | int huff_enc_read_byte(); | ||
| 77 | void huff_enc_write_byte( char ch ); | ||
| 78 | void huff_enc_write_bin_val( huff_enc_t_bin_val bin_val ); | ||
| 79 | void huff_enc_fill_encoding( void ); | ||
| 80 | void huff_enc_write_header( huff_enc_t_bin_val codes_table[257] ); | ||
| 81 | int huff_enc_weighhuff_enc_t_tree_comp( const void *t1, const void *t2 ); | ||
| 82 | void huff_enc_swapi( char *ii, char *ij, unsigned long es ); | ||
| 83 | char *huff_enc_pivot( char *a, unsigned long n, unsigned long es ); | ||
| 84 | void huff_enc_qsort( char *a, unsigned long n, unsigned long es ); | ||
| 85 | huff_enc_t_tree *huff_enc_build_tree_encoding( huff_enc_t_tree heap[514] ); | ||
| 86 | void huff_enc_encode_codes_table( huff_enc_t_tree *tree, | ||
| 87 | huff_enc_t_bin_val codes_table[257], huff_enc_t_bin_val *code_val ); | ||
| 88 | void huff_enc_create_codes_table( huff_enc_t_tree *tree, | ||
| 89 | huff_enc_t_bin_val codes_table[257] ); | ||
| 90 | void huff_enc_main(); | ||
| 91 | //int main( void ); | ||
| 92 | |||
| 93 | |||
| 94 | /* | ||
| 95 | Declaration of global variables | ||
| 96 | */ | ||
| 97 | |||
| 98 | static int huff_enc_input_pos; | ||
| 99 | static int huff_enc_output_pos; | ||
| 100 | static unsigned char huff_enc_output[1024]; | ||
| 101 | static unsigned char huff_enc_byte_nb_to_write = 0; | ||
| 102 | static unsigned char huff_enc_val_to_write = 0; | ||
| 103 | |||
| 104 | |||
| 105 | /* | ||
| 106 | Initialization- and return-value-related functions | ||
| 107 | */ | ||
| 108 | |||
| 109 | #define huff_enc_plaintext_len 600 | ||
| 110 | static const char *huff_enc_plaintext = | ||
| 111 | "You are doubtless asking \"How can I reduce the data size without losing " | ||
| 112 | "some informations?\". It's easy to answer to this question. I'll only take " | ||
| 113 | "an example. I'm sure you have heard about the morse. This system established " | ||
| 114 | "in the 19th century use a scheme very close to the huffman one. In the morse " | ||
| 115 | "you encode the letters to transmit with two kinds of signs. If you encode " | ||
| 116 | "these two sign possibilities in one bit, the symbol 'e' is transmitted in a " | ||
| 117 | "single bit and the symbols 'y' and 'z' need four bits. Look at the symbols " | ||
| 118 | "in the text you are reading, you'll fast understand the compression ratio..."; | ||
| 119 | |||
| 120 | #define huff_enc_encoded_len 419 | ||
| 121 | static unsigned char huff_enc_encoded[huff_enc_encoded_len] = { | ||
| 122 | 128, 0, 0, 0, 80, 133, 32, 32, 128, 100, 4, 32, 63, 239, 255, 240, | ||
| 123 | 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, | ||
| 124 | 4, 7, 167, 21, 129, 232, 69, 120, 132, 217, 20, 162, 19, 164, 39, 133, | ||
| 125 | 252, 138, 105, 20, 194, 19, 129, 240, 172, 138, 248, 150, 11, 11, 240, 201, | ||
| 126 | 68, 64, 114, 53, 17, 42, 37, 195, 128, 212, 116, 194, 41, 98, 52, 51, | ||
| 127 | 12, 132, 112, 244, 3, 36, 33, 52, 39, 135, 164, 33, 62, 156, 87, 14, | ||
| 128 | 110, 22, 87, 50, 85, 198, 99, 142, 140, 194, 81, 78, 158, 84, 129, 254, | ||
| 129 | 129, 248, 110, 179, 159, 192, 145, 133, 184, 184, 28, 210, 96, 146, 73, 10, | ||
| 130 | 226, 21, 83, 152, 74, 13, 111, 132, 199, 202, 219, 241, 74, 193, 167, 105, | ||
| 131 | 222, 31, 147, 6, 55, 31, 129, 40, 232, 52, 153, 160, 148, 18, 36, 197, | ||
| 132 | 45, 216, 202, 86, 30, 31, 177, 90, 133, 138, 248, 23, 81, 195, 160, 100, | ||
| 133 | 215, 93, 50, 185, 225, 251, 23, 6, 230, 225, 229, 112, 71, 80, 96, 141, | ||
| 134 | 205, 176, 230, 85, 196, 9, 24, 93, 90, 121, 225, 76, 68, 152, 63, 25, | ||
| 135 | 107, 140, 101, 204, 214, 77, 26, 194, 96, 18, 48, 77, 210, 137, 1, 253, | ||
| 136 | 4, 230, 248, 56, 240, 224, 111, 163, 95, 10, 12, 223, 7, 234, 167, 129, | ||
| 137 | 40, 36, 96, 135, 125, 245, 250, 2, 198, 120, 127, 0, 145, 133, 213, 167, | ||
| 138 | 135, 149, 195, 67, 235, 108, 9, 24, 87, 17, 102, 152, 37, 4, 222, 131, | ||
| 139 | 188, 144, 73, 36, 128, 73, 20, 81, 152, 177, 133, 248, 28, 165, 131, 120, | ||
| 140 | 127, 240, 242, 184, 104, 125, 109, 129, 35, 30, 4, 145, 65, 202, 88, 9, | ||
| 141 | 138, 103, 44, 205, 100, 167, 24, 152, 11, 24, 51, 37, 66, 9, 24, 31, | ||
| 142 | 174, 202, 212, 49, 152, 18, 96, 155, 208, 119, 146, 45, 97, 48, 56, 28, | ||
| 143 | 194, 90, 224, 204, 144, 232, 176, 36, 96, 126, 187, 43, 83, 12, 121, 129, | ||
| 144 | 209, 96, 197, 35, 2, 54, 176, 249, 92, 208, 204, 145, 188, 41, 170, 180, | ||
| 145 | 71, 16, 36, 96, 126, 187, 43, 83, 19, 0, 145, 129, 100, 209, 15, 43, | ||
| 146 | 135, 55, 6, 238, 180, 194, 90, 17, 229, 115, 21, 168, 251, 140, 131, 162, | ||
| 147 | 217, 166, 93, 22, 4, 140, 31, 91, 166, 55, 25, 202, 192, 111, 20, 171, | ||
| 148 | 207, 39, 192, | ||
| 149 | }; | ||
| 150 | |||
| 151 | |||
| 152 | void huff_enc_init( void ) | ||
| 153 | { | ||
| 154 | huff_enc_input_pos = 0; | ||
| 155 | huff_enc_output_pos = 0; | ||
| 156 | huff_enc_byte_nb_to_write = 0; | ||
| 157 | huff_enc_val_to_write = 0; | ||
| 158 | } | ||
| 159 | |||
| 160 | |||
| 161 | int huff_enc_return( void ) | ||
| 162 | { | ||
| 163 | int i; | ||
| 164 | _Pragma( "loopbound min 1 max 419" ) | ||
| 165 | for ( i = 0; i < huff_enc_encoded_len; i++ ) { | ||
| 166 | if ( huff_enc_encoded[i] != huff_enc_output[i] ) return i + 1; | ||
| 167 | } | ||
| 168 | return 0; | ||
| 169 | } | ||
| 170 | |||
| 171 | |||
| 172 | /* | ||
| 173 | Input / output functions | ||
| 174 | */ | ||
| 175 | |||
| 176 | void huff_enc_beginning_of_data() | ||
| 177 | { | ||
| 178 | huff_enc_input_pos = 0; | ||
| 179 | } | ||
| 180 | |||
| 181 | |||
| 182 | int huff_enc_end_of_data() | ||
| 183 | { | ||
| 184 | return huff_enc_input_pos >= huff_enc_plaintext_len; | ||
| 185 | } | ||
| 186 | |||
| 187 | |||
| 188 | int huff_enc_read_byte() | ||
| 189 | { | ||
| 190 | return huff_enc_plaintext[huff_enc_input_pos++]; | ||
| 191 | } | ||
| 192 | |||
| 193 | |||
| 194 | void huff_enc_write_byte( char ch ) | ||
| 195 | { | ||
| 196 | huff_enc_output[huff_enc_output_pos++] = ch; | ||
| 197 | } | ||
| 198 | |||
| 199 | |||
| 200 | void huff_enc_write_bin_val( huff_enc_t_b | ||
