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 */ -------------------------------------------------------------------------------