|
|
1.1 ! root 1: .TH HUFF 3 ! 2: .CT 2 data_man ! 3: .SH NAME ! 4: huff \(mi huffman codebook/tree generator ! 5: .SH SYNOPSIS ! 6: .nf ! 7: .B #include <huff.h> ! 8: .PP ! 9: .B NODE *huff(inrout) ! 10: .B int (*inrout)(); ! 11: .fi ! 12: .SH DESCRIPTION ! 13: .I Huff ! 14: generates a binary Huffman codebook. ! 15: It obtains a list of messages one at a time from an input routine, ! 16: .I inrout, ! 17: declared as ! 18: .IP ! 19: .EX ! 20: int inrout(str, p) ! 21: char ** str; ! 22: float *p; ! 23: .EE ! 24: .LP ! 25: .I Inrout ! 26: makes ! 27: .I *str ! 28: point to a null-terminated string identifying a message, ! 29: and places in ! 30: .I *p ! 31: the (arbitrarily normalized) frequency of the message. ! 32: .I Inrout ! 33: returns non-zero when data is returned and zero when there ! 34: is no more data. ! 35: .PP ! 36: .I Huff ! 37: returns a pointer to a root of type ! 38: .BR NODE : ! 39: .IP ! 40: .EX ! 41: typedef struct node { ! 42: char *datump; ! 43: struct node *to; ! 44: struct node *from; ! 45: struct node *ldad; ! 46: struct node *rdad; ! 47: struct node *kid; ! 48: float prob; ! 49: } NODE; ! 50: .EE ! 51: .LP ! 52: The root heads a linked list and the Huffman tree. ! 53: The doubly linked list, ! 54: connected via ! 55: .B from ! 56: and ! 57: .BR to , ! 58: is ordered as the codebook was generated. ! 59: The tree is connected ! 60: via ! 61: .BR kid , ! 62: .BR ldad , ! 63: and ! 64: .BR rdad , ! 65: with null pointers at the various ends. ! 66: The ! 67: .B kid ! 68: field points towards the root, ! 69: .B ldad ! 70: and ! 71: .B rdad ! 72: point away: ! 73: .B node->ldad->kid==node ! 74: and ! 75: .BR node->rdad->kid==node . ! 76: the ! 77: .B datump ! 78: field is null or points to a message identifier. ! 79: .PP ! 80: The codeword for a message may be read off from the ! 81: path from the root to the node containing the message identifier, ! 82: counting ! 83: .I ldad ! 84: branches as 0 and ! 85: .I rdad ! 86: branches as 1. ! 87: .SH "BUGS" ! 88: A code with only one message dumps core. ! 89:
This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.