extern void compress(FILE* input_stream, FILE* output_stream) { FREQTAB* frequency_table; HTREE* huffman_tree; CODETAB* code_table; /*Häufigkeitstabelle erstellen*/ frequency_table = create_freqtab(input_stream); #ifdef DEBUG_HUFFMAN /*Häufigkeitstabelle auf Bildschirm ausgeben*/ freqtab_print(frequency_table); fflush(stdout); #endif /*Inputstream zurücksetzen*/ rewind(input_stream); /*Huffmanbaum erstellen*/ huffman_tree = create_htree_from_freqtab(frequency_table); #ifdef DEBUG_HUFFMAN /*Huffmanbaum auf Bildschirm ausgeben*/ htree_print(huffman_tree); fflush(stdout); #endif /*Codebuch erstellen*/ code_table = create_codetab(huffman_tree); #ifdef DEBUG_HUFFMAN /*Codebuch auf Bildschirm ausgeben*/ codetab_print(code_table); fflush(stdout); #endif /*Codebuch an den Anfang der Datei schreiben*/ write_codetab(output_stream, code_table); /*Inhalt komprimieren*/ encode_content(input_stream, output_stream, code_table, freqtab_get_content_length(frequency_table)); /*Resourcen wieder freigeben*/ delete_freqtab(&frequency_table); delete_htree(&huffman_tree); delete_codetab(&code_table); return; }
static void encode_bean (GString *g, gpointer bean) { if (DESCR(bean) == &descr_struct_CHUNKS) return encode_chunk (g, bean); if (DESCR(bean) == &descr_struct_CONTENTS) return encode_content (g, bean); if (DESCR(bean) == &descr_struct_CONTENTS_HEADERS) return encode_header (g, bean); if (DESCR(bean) == &descr_struct_ALIASES) return encode_alias (g, bean); if (DESCR(bean) == &descr_struct_PROPERTIES) return encode_property (g, bean); g_assert_not_reached (); }