home *** CD-ROM | disk | FTP | other *** search
- From: gtoal@tharr.UUCP (Graham Toal)
- Newsgroups: alt.sources,alt.sources.d
- Subject: bugfix for char '0' in dynhuff.{c,p}
- Message-ID: <956@tharr.UUCP>
- Date: 6 Sep 90 10:48:46 GMT
-
- Archive-name: dynhuff.bug
-
- A few days back I posted a huffman-coding program here; I've since
- been playing with it to try modifying the algorithm for delta
- compression; while I was doing that I discovered that it only worked
- correctly for 1..255; 0 went wrong. Here's a filthy fix -- I've
- extended the alphabet by 1, and every time I store what should be a
- zero, I store 256 instead. It's a 1-1 mapping, so reverses OK.
-
- The same hack works with both Pascal and C versions.
-
- (Sorry about the diff - must get a real one sometime...)
-
- Diff files 'huff.c' and 'huff2.c'
- ------------------------------------------------------- top level declarations
- change c.huff, line 29 to 29
- #define n 256
- to
- #define n 257 /* 0 doesn't work, so cheat :-) (change 256 to 257) */
- ------------------------------------------------------ EncodeAndTransmit(int j)
- after c.huff line 108:
- add c.huff2 line 109:
- if (j == 0) j = 256; /* 0 -> 256 */
- -------------------------------------------------------- ReceiveAndDecode(void)
- change c.huff, line 161 to 161
- return(alpha[q]);
- to c.huff2, line 163 to 164
- i = alpha[q]; if (i == 256) i = 0; /* 256 -> 0 */
- return(i);
- ----------------------------------------------------------------- Update(int k)
- after c.huff line 290:
- /* Set q to the node whose weight should increase */
- add c.huff2 line 294:
- if (k == 0) k = 256; /* 0 -> 256 */
- -------------------------------------------------------------------------------
-