OSDN Git Service

update Hacking_of_LHa
authorKoji Arai <jca02266@gmail.com>
Tue, 24 Jun 2008 14:03:31 +0000 (23:03 +0900)
committerKoji Arai <jca02266@gmail.com>
Tue, 24 Jun 2008 14:03:31 +0000 (23:03 +0900)
ChangeLog
Hacking_of_LHa

index c6e5f6d..d13cd85 100644 (file)
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,3 +1,7 @@
+2008-06-24  Koji Arai  <arai@users.sourceforge.jp>
+
+       * Hacking_of_LHa: updated.
+
 2008-05-14  Koji Arai  <arai@users.sourceforge.jp>
 
        * src/lhext.c (extract_one): The -t command should not affect extracting file attributes.
index 0489229..1295e4d 100644 (file)
@@ -3841,13 +3841,14 @@ buf |  32 | c1  | c2  | len |    off    |  ...
 
 ----------------------------------------------------------------------------
 
-output_mask    128   64    32                16    8     4     2     1
-        +-----+-----+-----+-----+-----+-----+-----+-----+-----+-----+-----+
-buf     |  32 | c1  | c2  | len |    off    |  c3 |  c4 |  c5 |  c6 |  c7 |
-        +-----+-----+-----+-----+-----+-----+-----+-----+-----+-----+-----+
-        cpos                                                             /
-                                                                        /
+output_mask  128  64   32             16   8              4    2    1
+        +----+----+----+----+----+----+----+----+----+----+----+----+----+
+buf     | 40 | c1 | c2 |len |   off   | c4 |len |   off   | c6 | c7 | c8 |
+        +----+----+----+----+----+----+----+----+----+----+----+----+----+
+        cpos                                                            /
+                                                                       /
                                                                output_pos
+   buf[cpos] = 32 + 8
 
 ----------------------------------------------------------------------------
 
@@ -3870,6 +3871,18 @@ buf     |  32 | c1  | c2  | len |    off    |  c3 |  c4 |  c5 |  c6 |  c7 |
 ¤·¤Æ¤â¥Ð¥Ã¥Õ¥¡¤ò¤Á¤ç¤Ã¤È¤À¤±ÌµÂ̤ˤ·¤Æ¤¤¤ë¤À¤±¤Ê¤Î¤ÇÂ礷¤¿¤³¤È¤Ï¤Ê¤¤¤Î
 ¤À¤í¤¦)
 
+# ¤É¤¦¤ä¤é¥Ð¥°¤Ç¤Ï¤Ê¤¤¤é¤·¤¤¡£3 * CHAR_BIT ¤È¤¤¤¦¤Î¤Ï¡¢1¥Ö¥í¥Ã¥¯¤¬
+# CHAR_BIT ¤Î¥¹¥í¥Ã¥È(8 ¤Ä¤Î¥¹¥í¥Ã¥È)¤ò»ý¤Á¡¢1 ¥Ö¥í¥Ã¥¯¤¬¤¹¤Ù¤Æ
+# <len,off> (3 bytes)¤Î¾ì¹ç¡¢ºÇÂç 3 bytes * 8 ¤È¤Ê¤ë¤³¤È¤ò¼¨¤·¤Æ¤¤¤ë¤è
+# ¤¦¤À¡£
+# CHAR_BIT ¤Ï¡¢buf[cpos] ¤Î¥Ó¥Ã¥È¿ô¤òɽ¤·¤Æ¤¤¤ë¡£
+#
+# ¼ÂºÝ¤Î¤È¤³¤í1¥Ö¥í¥Ã¥¯¤Ï¡¢buf[cpos]¤Î1 byte¤¬ÀèƬ¤ËɬÍפʤΤǺÇÂ祵¥¤¥º¤Ï
+#       3 * CHAR_BIT + 1
+# ¤È¤Ê¤ë¡£¤½¤¦¤¤¤¦°ÕÌ£¤Ç¤Ï¡¢
+#       if (output_pos > bufsiz - (3 * CHAR_BIT + 1)) {
+# ¤ÎÊý¤¬¤ï¤«¤ê¤ä¤¹¤¤¤è¤¦¤Ë»×¤¦¡£
+
 output_pos = 0 ¤È¤·¤Æ¤¤¤ë¤³¤È¤«¤é¤³¤Î»þÅÀ¤Î buf ¤ÎÃæ¿È¤¬¤¹¤Ù¤Æ 
 send_block() ¤Ç°µ½Ì¤µ¤ì¥Õ¥¡¥¤¥ë¤Ë½ÐÎϤµ¤ì¤ë¤À¤í¤¦¤³¤È¤¬ÁÛÁü¤Ç¤­¤ë¡£
 
@@ -5035,6 +5048,64 @@ start[i] 
 ¤¹¤Ù¤Æ¤ò¥Æ¡¼¥Ö¥ë»²¾È¤Ç decode ¤¹¤ë¤³¤È¤Ï¤Ç¤­¤Ê¤¤¡£¤½¤³¤Ç¡¢Â­¤ê¤Ê¤¤Éôʬ
 ¤Ï¸å¤Î½èÍý¤ÇÌÚ¤òºî¤ë¤³¤È¤ÇÊä¤Ã¤Æ¤¤¤ë¤è¤¦¤À¡£
 
+bit ¿ô¤ò¸º¤é¤¹Íýͳ¤ò¹Í¤¨¤Æ¤ß¤ë¡£É½°ú¤­¤Î¹Í¤¨Êý¤Ï¡¢
+
+       /\               a: 0
+      a /\              b: 10
+        b c             c: 11
+
+¤È¤¤¤¦ Huffman ÌڤˤĤ¤¤Æ¡¢
+
+     00: c_table[00] = a
+     01: c_table[01] = a
+     10: c_table[10] = b
+     11: c_table[11] = c
+
+¤È¤¤¤¦¥Æ¡¼¥Ö¥ë¤òºîÀ®¤¹¤ë¤³¤È¤Ç Huffman Éä¹æ²½¤·¤¿¥Ó¥Ã¥ÈÎ󤫤éÉü¹æ¸ì¤ò
+ÆÀ¤ë¡£
+
+HuffmanÉä¹æ¤«¤éʸ»ú¤òÆÀ¤ëɬÍפ¬¤¢¤ë¤Î¤Ç¡¢c_table[]¤Î¥¤¥ó¥Ç¥Ã¥¯¥¹¤Ë¤Ï¡¢
+HuffmanÉä¹æ¤¬¼è¤ê¤¦¤ëºÇÂçÃͤò»ØÄê¤Ç¤­¤Ê¤±¤ì¤Ð¤Ê¤é¤Ê¤¤¡£16bit ¤ÎHuffman
+Éä¹æ¤ÎºÇÂçÃͤϠ65535 ¤Ç¤¢¤ë¤«¤é
+
+  unsigned short c_table[65535+1]; (unsigned short > NC-1)
+
+¤È¤Ê¤ë¡£¤ª¤½¤é¤¯É½¤Î bit ¿ô¤ò¸º¤é¤·¤Æ¤¤¤ë¤Î¤Ï¤³¤ÎÂ礭¤Ê¥Æ¡¼¥Ö¥ë¤òºî¤ê¤¿
+¤¯¤Ê¤¤¤«¤é¤Ç¤Ï¤Ê¤¤¤«¤È»×¤ï¤ì¤ë¡£c_table[] ¤ÎÍ×ÁÇ¿ô¤òºÇÄã¸ÂɬÍפʿô¤ËÍÞ
+¤¨¤è¤¦¤È¤¹¤ë¤È°Ê²¼¤Î¤è¤¦¤Ë¤Ê¤ë¤¬¡¢
+
+      0: c_table[ 0=0] = a
+     10: c_table[10=2] = b
+     11: c_table[11=3] = c
+
+¤³¤ÎÎã¤Î¾ì¹ç¡¢c_table[1] ¤¬¶õ¤Ç¤¢¤ë¤è¤¦¤Ê¥Æ¡¼¥Ö¥ë¤òºîÀ®¤·¤Ê¤±¤ì¤Ð¤Ê¤é¤Ê
+¤¤¡£¥Ï¥Ã¥·¥åɽ¤òºî¤ì¤Ð²Äǽ¤À¤¬¤½¤¦¤Ï¤»¤º¡¢c_table[] ¤ÎÍ×ÁÇ¿ô¤ò¸º¤é¤·¡¢
+ɽ°ú¤­¤Çɽ¤»¤Ê¤¤Éôʬ¤ÏÌÚ¤ÇÊä¤Ã¤Æ¤¤¤ë¤È¤¤¤¦¤³¤È¤À¡£
+
+¼ÂºÝ¤Î c_table[] ¤ÎÄêµÁ¤Ï¡¢
+
+  unsigned short c_table[4095+1];
+
+¤È¤Ê¤Ã¤Æ¤ª¤ê¡¢12 ¥Ó¥Ã¥È(2^12=4096)¤ÎHuffmanÉä¹æ¤Ë¤Ä¤¤¤Æɽ°ú¤­¤¬²Äǽ¤È¤Ê¤Ã
+¤Æ¤¤¤ë¡£¤½¤·¤Æ¡¢Ê£¹ç¸ì¤Ï¡¢0...NC ¤ÎÈϰϤǤ¢¤ë¤«¤é¡¢
+    c_table[¥Ó¥Ã¥ÈÎó] < NC
+¤Î¾ì¹ç¤Ï¡¢¤½¤Î¤Þ¤Þɽ°ú¤­¤Ç
+    c_table[¥Ó¥Ã¥ÈÎó] >= NC
+¤Î¾ì¹ç¤Ï¡¢ÌڤΥ롼¥È¥Î¡¼¥É¤ò¼¨¤·¡¢¤½¤ÎÃͤ«¤éÌÚ¤òé¤Ã¤ÆÉü¹æ¤Ç¤­¤ë¤è¤¦¤Ë
+¤Ê¤Ã¤Æ¤¤¤ë¡£¿Þ¼¨¤¹¤ë¤È
+
+       /\
+      a /\           ... ³¬ÁØ:1
+        b            ... ³¬ÁØ:2
+        :
+           /\
+          x  x       ... ³¬ÁØ:12
+
+¤³¤ì¤è¤ê¡¢²¼¤Î³¬ÁؤΠHuffman ÌڤˤĤ¤¤Æ left[], right[] ¤Çɽ¤·¤Æ¤¤¤ë¤è
+¤¦¤À¡£¤Ê¤ª¡¢³¬Áؤ¬¿¼¤¤ Huffman ÌڤȤϡ¢bit Ä¹¤¬Ä¹¤¤Éä¹æ¤Ç¤¢¤ê¡¢bit Ä¹¤¬
+Ť¤¤È¤¤¤¦¤³¤È¤Ï½Ð¸½ÉÑÅÙ¤¬Ä㤤¤Ï¤º¤Ç¤¢¤ë¤«¤é¡¢left[], right[] ¤ÇÌÚ¤òé
+¤ë²ó¿ô¤Ï¾¯¤Ê¤¤¤Ï¤º¤Ç¤¢¤ë¡£¤³¤ì¤ÏÍý¤Ë¤«¤Ê¤Ã¤Æ¤¤¤ë¡£
+
 ¤Á¤ç¤Ã¤Èµ¤Ê¬Åª¤Ë¥Î¤é¤Ê¤¤¤Î¤Ç¤Ï¤·¤ç¤ë¤¬¡¢¸å¤Î (E), (F) ¤ÏÌÚ¤òƱ»þ¤Ëºî¤Ã
 ¤Æ¤¤¤ë¤³¤È¤ò½ü¤±¤Ð¡¢maketree.c:make_code() ¤Î¸åȾÉôʬ¤ÈƱ¤¸¤À¤È¹Í¤¨¤Æ
 ¤¤¤¤¤À¤í¤¦¡£