OSDN Git Service

Merge branch 'master' of /home/arai/public_html/lha
authorKoji Arai <jca02266@gmail.com>
Sun, 3 Aug 2008 12:45:08 +0000 (21:45 +0900)
committerKoji Arai <jca02266@gmail.com>
Sun, 3 Aug 2008 12:45:08 +0000 (21:45 +0900)
Hacking_of_LHa

index f07bb52..d57c0f3 100644 (file)
@@ -3244,10 +3244,10 @@ len[] 
         p          2        g       1024
         o          4        f       2048
         n          8        e       4096
-        m         16        d       8129
+        m         16        d       8192
         l         32        c      16384
         k         64        b      32768
-        j        128        a      65535
+        j        128        a      65536
 
 ¤È¤³¤í¤Ç¡¢cum ¤ÎÃͤϲ¿¤Ê¤Î¤«¤È¤¤¤¦¤È¡¢
 
@@ -3576,6 +3576,10 @@ c_freq[] 
 ¤È¤¤¤¦´Ø·¸¤Î¤è¤¦¤À¡£¤É¤¦¤ä¤é c_code¡¢pt_code ¤È¤¤¤¦ 2 ¼ïÎà¤Î
 Huffman Éä¹æɽ¤ò»ÈÍѤ¹¤ë¤é¤·¤¤¡£
 
+# ¤¢¤È¤Ç¤ï¤«¤ë¤³¤È¤À¤¬¼ÂºÝ¤Ï3¼ïÎà¤ÎHuffmanÉä¹æɽ¤òºî¤Ã¤Æ¤ª¤ê
+# pt_code¤ÏÊÑ¿ô¤¬»È¤¤²ó¤·¤µ¤ì¤Æ¤¤¤ë¡£ÊÑ¿ô¤Î»ÈÍÑÎΰè¤ò¸º¤é¤·
+# ¤¿¤«¤Ã¤¿¤Î¤À¤í¤¦¡£
+
 ¤½¤Î¾¤ÎÊÑ¿ô¤Ë´Ø¤·¤Æ¤âͽÁÛ¤òΩ¤Æ¤¿¤¤½ê¤À¤¬¡¢¤â¤¦¤¯¤¸¤±¤¿¤Î¤Ç¡¢½èÍýÆâÍÆ
 ¤«¤é¹¶¤á¤ë¤³¤È¤Ë¤·¤¿¡£
 
@@ -4049,16 +4053,16 @@ root 
 
 p_freq[] ¤ò¸«¤Æ¤¤¤ë¤³¤È¤«¤éº£Å٤Ϡ<off> ¤Î¾ðÊó¤Î Huffman ÌÚ¤ò¹½ÃÛ¤·¤Æ
 ¤¤¤ë¤³¤È¤¬¤ï¤«¤ë¡£ÀèÄø¤ÈƱÍͤˡ¢<off> ¤ÎÃͤ¬¤¹¤Ù¤ÆƱ¤¸¾ì¹ç¤Ï¡¢else ¤Î
-¾ò·ï¤Ë¤Ê¤ê¡¢°Ê²¼¤Î½ÐÎϤ¬¹Ô¤ï¤ì¤ë¡£(np ¤ÎÃͤϡ¢-lh7- ¤Î¾ì¹ç¤Ç¡¢17 ¤À)
+¾ò·ï¤Ë¤Ê¤ê¡¢°Ê²¼¤Î½ÐÎϤ¬¹Ô¤ï¤ì¤ë¡£(pbit ¤ÎÃͤϡ¢-lh7- ¤Î¾ì¹ç¤Ç¡¢5 ¤À)
 
 ----------------------------------------------------------------------------
-              
-      np bit    np bit              method  np
+
+       pbit     pbit                method  pbit
    |---------|---------|            ----------
-   +----+----+---------+            -lh4-   14
-   |     0   |  root   |            -lh5-   14
-   +----+----+---------+            -lh6-   16
-                                    -lh7-   17
+   +----+----+---------+            -lh4-   4
+   |     0   |  root   |            -lh5-   4
+   +----+----+---------+            -lh6-   5
+                                    -lh7-   5
 
 ----------------------------------------------------------------------------
 
@@ -4111,7 +4115,7 @@ flags 
         } else
             encode_c(buf[pos++]);
 
-flags ¤¬¡¢127 ¤Ç¤¢¤ë¤È¤­ buf[pos] ¤Ï¡¢<len, off> ¤ò»Ø¤·¡¢
+flags ¤Î7¥Ó¥Ã¥ÈÌÜ(127)¤¬Î©¤Ã¤Æ¤¤¤ë¤È¤­ buf[pos] ¤Ï¡¢<len, off> ¤ò»Ø¤·¡¢
 
   encode_c(len + 256)
   encode_p(off)
@@ -4182,9 +4186,9 @@ off  |0000 0000 0100 0000|
 ----------------------------------------------------------------------------
 
 ¤³¤³¤Ç¡¢Ãͤò 6 bit ¤·¤«½ÐÎϤ·¤Ê¤¤(putbits() ¤Ç c-1 ¤òÅϤ·¤Æ¤¤¤ë)¤Î¤Ï¡¢
-7 bit Ìܤ¬ 1 ¤Ç¤¢¤ë¤³¤È¤¬¼«ÌÀ¤À¤«¤é¤Ç¤¢¤ë¡£¾ï¤Ë off != 0 ¤À¤«¤é¡¢½ñ¤­
-½Ð¤¹¾ðÊó¤ò 1 bit ºï¸º¤Ç¤­¤ë¤ï¤±¤À¡£¤·¤¿¤¬¤Ã¤Æ¡¢off=1 ¤Î¤È¤­¤Ï bit Ä¹¤¬ 
-1 ¤È¤¤¤¦¾ðÊó¤·¤«½ñ¤­½Ð¤µ¤Ê¤¤¡£
+7 bit Ìܤ¬ 1 ¤Ç¤¢¤ë¤³¤È¤¬¼«ÌÀ¤À¤«¤é¤Ç¤¢¤ë¡£ºÇ½é¤Ë¥Ó¥Ã¥ÈŤò½ÐÎϤ·¤Æ¤¤¤ë
+¤Î¤Ç¡¢ÃͤξðÊó¤Ï1 bit ºï¸º¤Ç¤­¤ë¤ï¤±¤À¡£¤·¤¿¤¬¤Ã¤Æ¡¢off=1 ¤Î¤È¤­¤Ï bit
+Ť¬ 1 ¤È¤¤¤¦¾ðÊó¤·¤«½ñ¤­½Ð¤µ¤Ê¤¤¡£
 
 ºÇ¸å¤Î (E) ¤ÏÉÑÅÙɽ¤ò¥¯¥ê¥¢¤·¤Æ¤¤¤ë¤À¤±¤À¡£
 
@@ -5048,7 +5052,7 @@ start[i] 
 ¤¹¤Ù¤Æ¤ò¥Æ¡¼¥Ö¥ë»²¾È¤Ç decode ¤¹¤ë¤³¤È¤Ï¤Ç¤­¤Ê¤¤¡£¤½¤³¤Ç¡¢Â­¤ê¤Ê¤¤Éôʬ
 ¤Ï¸å¤Î½èÍý¤ÇÌÚ¤òºî¤ë¤³¤È¤ÇÊä¤Ã¤Æ¤¤¤ë¤è¤¦¤À¡£
 
-bit ¿ô¤ò¸º¤é¤¹Íýͳ¤ò¹Í¤¨¤Æ¤ß¤ë¡£É½°ú¤­¤Î¹Í¤¨Êý¤Ï¡¢
+bit ¿ô¤ò¸º¤é¤¹Íýͳ¤ò¹Í¤¨¤Æ¤ß¤ë¡£¤Þ¤ºÉ½°ú¤­¤Î¹Í¤¨Êý¤Ï¡¢
 
        /\               a: 0
       a /\              b: 10
@@ -5111,24 +5115,255 @@ Huffman
                            :        >   left[]/right[]¤Çɽ¸½ (³¬ÁØ12¤¬root)
                      ... ³¬ÁØ:16  .'
 
-    ³¬ÁØ 1 ¡Á 11 (1¡Á11bit)¤ÎHuffmanÌڤˤĤ¤¤Æ¤Ï¡¢É½°ú¤­¤ÇÉü¹æ
-    ³¬ÁØ 12 ¤¬ <  NC ¤Î¾ì¹ç¤Ï¡¢¤½¤Î¤Þ¤Þɽ°ú¤­¤ÇÉü¹æ
-    ³¬ÁØ 12 ¤¬ >= NC ¤Î¾ì¹ç¤Ï¡¢Àá¤ò¼¨¤·¡¢left[³¬ÁØ12¤ÎÃÍ],right[³¬ÁØ12¤ÎÃÍ]¤¬
-    ¤½¤Î²¼¤ÎÀá¤ò»Ø¤¹¡£
+    ³¬ÁØ 1 ¡Á 12 (1¡Á12bit)¤ÎHuffmanÌڤˤĤ¤¤Æ¤Ï¡¢É½°ú¤­¤ÇÉü¹æ
+    ³¬ÁØ 13 °Ê¾å¤ÎHuffmanÉä¹æ¤Ë¤Ä¤¤¤Æ¤Ï¡¢ÀèƬ 12 bit¤òɽ°ú¤­¤·¡¢¤½¤ÎÃÍ
+    ¤ÏNC ¤è¤êÂ礭¤¤ÃͤȤʤ롣
+
+    É½°ú¤­¤·¤¿·ë²Ì¤¬ >= NC ¤Î¾ì¹ç¡¢¤½¤ÎÃͤÏÀá¤ò¼¨¤·¡¢left[ɽ°ú¤­¤ÎÃÍ],
+    right[ɽ°ú¤­¤ÎÃÍ]¤¬¤½¤Î²¼¤ÎÀá¤ò»Ø¤¹¡£
 ----------------------------------------------------------------------------
 
 ³¬ÁØ12¤è¤ê²¼(13 °Ê¾å¤Î bit ¿ô¤Î Huffman Éä¹æ)¤Î Huffman ÌڤˤĤ¤¤Æ
 left[], right[] ¤Çɽ¤·¤Æ¤¤¤ë¤è¤¦¤À¡£¤³¤ÎÌڤΥΡ¼¥É¤ÎÃͤϠNC °Ê¾å¤Î¿ôÃÍ
-¤òÏ¢ÈÖ¤«²¿¤«¤Ç³ä¤êÅö¤Æ¤Æ¤¤¤ë¤Î¤Ç¤Ï¤Ê¤¤¤À¤í¤¦¤«¡©¤³¤ì¤Ë¤Ä¤¤¤Æ¤Ï¤³¤ì°Ê¹ß
-¤Ç³Îǧ¤¹¤ë¡£
+¤òÏ¢È֤dzä¤êÅö¤Æ¤Æ¤¤¤ë¤è¤¦¤À(¤³¤ì¤Ë¤Ä¤¤¤Æ¤Ï¸å½Ò¤¹¤ë)¡£
 
 ¤Ê¤ª¡¢³¬Áؤ¬¿¼¤¤ Huffman ÌڤȤϡ¢bit Ä¹¤¬Ä¹¤¤Éä¹æ¤Ç¤¢¤ê¡¢bit Ä¹¤¬Ä¹¤¤¤È
 ¤¤¤¦¤³¤È¤Ï½Ð¸½ÉÑÅÙ¤¬Ä㤤¤Ï¤º¤Ç¤¢¤ë¤«¤é¡¢left[], right[] ¤ÇÌÚ¤òé¤ë²ó¿ô
 ¤Ï¾¯¤Ê¤¤¤Ï¤º¤Ç¤¢¤ë¡£¤³¤ì¤ÏÍý¤Ë¤«¤Ê¤Ã¤Æ¤¤¤ë¡£
 
-¤Á¤ç¤Ã¤Èµ¤Ê¬Åª¤Ë¥Î¤é¤Ê¤¤¤Î¤Ç¤Ï¤·¤ç¤ë¤¬¡¢¸å¤Î (E), (F) ¤ÏÌÚ¤òƱ»þ¤Ëºî¤Ã
-¤Æ¤¤¤ë¤³¤È¤ò½ü¤±¤Ð¡¢maketree.c:make_code() ¤Î¸åȾÉôʬ¤ÈƱ¤¸¤À¤È¹Í¤¨¤Æ
-¤¤¤¤¤À¤í¤¦¡£
+³¤­¤ò¸«¤Æ¤¤¤³¤¦¡¢(E) ¤Î½èÍý
+
+    /* (E) */
+    /* initialize */
+    j = start[tablebits + 1] >> m;
+    k = 1 << tablebits;
+    if (j != 0)
+        for (i = j; i < k; i++)
+            table[i] = 0;
+
+¼¡¤Ë (F) ¤Î½èÍý¡£²¼µ­¤ÎÄ̤ê (F.1), (F.2) ¤ÈºÙʬ²½¤·¤Æ¤ß¤¿¡£
+
+    /* (F) */
+    /* create table and tree */
+    for (j = 0; j < nchar; j++) {
+        k = bitlen[j];
+        if (k == 0)
+            continue;
+        /* (F.1) */
+        l = start[k] + weight[k];
+        if (k <= tablebits) {
+            /* code in table */
+            for (i = start[k]; i < l; i++)
+                table[i] = j;
+        }
+
+        /* (F.2) */
+        else {
+            /* code not in table */
+            p = &table[(i = start[k]) >> m];
+            i <<= tablebits;
+            n = k - tablebits;
+            /* make tree (n length) */
+            while (--n >= 0) {
+                if (*p == 0) {
+                    right[avail] = left[avail] = 0;
+                    *p = avail++;
+                }
+                if (i & 0x8000)
+                    p = &right[*p];
+                else
+                    p = &left[*p];
+                i <<= 1;
+            }
+            *p = j;
+        }
+        start[k] = l;
+    }
+
+¤³¤ÎÉôʬ¤Ï°ì»þÊÑ¿ô¤ÎÎ̤¬Â¿¤¤¡¢i,j,k,l,m,n,p ¤Þ¤Ç»È¤ï¤ì¤Æ¤¤¤ë¡£
+(¤·¤«¤â¡¢Á°¤Î½èÍý¤Þ¤Ç¤ÈÊÑ¿ô¤ÎÍÑÅÓ¤¬°ã¤Ã¤Æ¤¿¤ê¤¹¤ë¤Î¤Ç¡¢Ê£»¨¤Ë¤Ê¤Ã¤Æ¤¤¤ë)
+°ìö¡¢°Ê²¼¤ËÀ°Íý¤·¤Æ¤ß¤¿¡£
+
+    i: Huffman Éä¹æ
+    j: Éü¹æʸ»ú
+    k: j ¤ÎHuffman code¤Ç¤Î¥Ó¥Ã¥ÈĹ
+    l: ¥Ó¥Ã¥ÈĹ k ¤ËÂФ¹¤ëHuffman Éä¹æ¤Î½ªÃÍ (start[k] <= Huffman(k) < l)
+    m: Huffman Éä¹æɽ¤òshift¤¹¤ë¥Ó¥Ã¥È¿ô
+    n: ??
+    p: ??
+
+n, p ¤Ë¤Ä¤¤¤Æ¤Ï¤Ò¤È¤á¤Ç¤Ï¤ï¤«¤é¤Ê¤«¤Ã¤¿¡£
+
+¤³¤ì¤òƧ¤Þ¤¨¤Æ½èÍýÆâÍƤò¸«¤Æ¤ß¤è¤¦¡£¤Þ¤º¡¢(F)Á´ÂΤˤĤ¤¤Æ
+
+    /* (F) */
+    /* create table and tree */
+    for (j = 0; j < nchar; j++) {
+        k = bitlen[j];
+        if (k == 0)
+            continue;
+        /* (F.1) */
+        /* (F.2) */
+
+        start[k] = l;
+    }
+
+Éü¹æʸ»ú j = 0 ... nchar ¤ò¥ë¡¼¥×¤·¤Æ¤¤¤ë(j ¤¬Ê£¹çʸ»ú¤Ç¤¢¤ë¤³¤È¤Ï¡¢
+bitlen[] ¤Îź¤¨»ú¤Ç¤¢¤ë¤³¤È¤«¤é¤ï¤«¤ë)¡£
+
+¤½¤·¤Æ¡¢k = bitlen[j] ¤¬ 0 ¤Ç¤¢¤ì¤Ð¡¢(Huffman Éä¹æ²½¤µ¤ì¤Æ¤¤¤Ê¤±¤ì¤Ð)¤½
+¤Îʸ»ú¤Ï¥¹¥­¥Ã¥×¤·¤Æ¤¤¤ë¡£¤³¤³¤Ï¡¢Îɤ¤¤À¤í¤¦¡£
+
+(F.1), (F.2) ¤Ï¡¢HuffmanÉä¹æ²½¤µ¤ì¤Æ¤¤¤ëʸ»ú j ¤Ë¤Ä¤¤¤Æ
+¤Î½èÍý¤È¤Ê¤ë¡£(ºÇ¸å¤Îstart[k] = l ¤Ï¸å²ó¤·)
+
+½èÍý¤ÎÌÜŪ¤«¤éÂ绨ÇĤË
+
+    (F.1) k <= tablebits ¤Î¾ì¹ç¡¢É½°ú¤­²Äǽ¤ÊÈϰϤʤΤǡ¢
+    table[i] ¤ËÉü¹æʸ»ú¤ò¥»¥Ã¥È¡£
+
+    (F.2) k > tablebits ¤Î¾ì¹ç¡¢É½°ú¤­ÉÔ²Äǽ¤ÊÈϰϤʤΤǡ¢
+    left[],right[]¤ËÉü¹æʸ»ú¤ò¥»¥Ã¥È¡£
+
+¤È¤¤¤Ã¤¿½èÍý¤ò¤·¤Æ¤¤¤ë¤³¤È¤¬Í½ÁۤǤ­¤ë¡£¤Ç¤Ï¡¢(F.1) ¤ò¸«¤Æ¤ß¤ë¡£
+
+        /* (F.1) */
+        l = start[k] + weight[k];
+        if (k <= tablebits) {
+            /* code in table */
+            for (i = start[k]; i < l; i++)
+                table[i] = j;
+        }
+
+¥Ó¥Ã¥ÈĹ k <= tablebits ¤Î¾ì¹ç¡¢¥Ó¥Ã¥ÈĹ k ¤¬¼è¤ê¤¦¤ëÈϰϤÎHuffmanÉä¹æ
+¤Ë¤Ä¤¤¤Æ¡¢Ê¸»ú j ¤ò³ä¤êÅö¤Æ¤Æ¤¤¤ë¡£
+¥Ó¥Ã¥ÈĹ k ¤¬¼è¤ê¤¦¤ëÈϰϤΠHuffman Éä¹æ¤È¤Ï
+
+    start[k] <= HuffmanÉä¹æ i < l
+
+¤Ç¤¢¤ë¡£Îã¤Ç¼¨¤¹¤È(´ÊÊز½¤Î¤¿¤á¤Ë¡¢ºÇÂç¤ÎHuffmanÉä¹æŤò2¤È¤¹¤ë)
+
+       /\               a: 0
+      a /\              b: 10
+        b c             c: 11
+
+ʸ»úa¤Ï¡¢1¥Ó¥Ã¥È¤Ç¡¢00...10 ¤ÎÈÏ°Ï
+ʸ»úb¤Ï¡¢2¥Ó¥Ã¥È¤Ç¡¢10...11 ¤ÎÈÏ°Ï
+ʸ»úc¤Ï¡¢2¥Ó¥Ã¥È¤Ç¡¢11
+
+¤È¤Ê¤ë¡£¤³¤³¤Ç¡¢Ê¸»ú c ¤Ë¤Ä¤¤¤Æ¤Ï¤³¤Î¥ë¡¼¥×¤Ç¤Ï¥Æ¡¼¥Ö¥ë¤ËÃͤ¬¥»¥Ã¥È¤µ¤ì
+¤Ê¤¤¤è¤¦¤Ë¸«¤¨¤ë¡£¼ÂºÝ¤Ï(F) ¤Î¥ë¡¼¥×¤ÎËöÈø¤Ë½Ð¤Æ¤­¤¿
+
+        start[k] = l;
+
+¤Ë¤è¤Ã¤Æ¡¢¥Ó¥Ã¥ÈĹ k ¤ËÂФ¹¤ë½é´üÃÍ start[k] ¤¬Êѹ¹¤µ¤ì¤ë¤¿¤á¡¢¤½¤Î¿´ÇÛ
+¤Ï¤Ê¤¤¤è¤¦¤À¡£
+
+¼¡¤Ë¡¢(F.2)
+
+        /* (F.2) */
+        else {
+            /* code not in table */
+            p = &table[(i = start[k]) >> m];
+            i <<= tablebits;
+            n = k - tablebits;
+            /* make tree (n length) */
+            while (--n >= 0) {
+                if (*p == 0) {
+                    right[avail] = left[avail] = 0;
+                    *p = avail++;
+                }
+                if (i & 0x8000)
+                    p = &right[*p];
+                else
+                    p = &left[*p];
+                i <<= 1;
+            }
+            *p = j;
+        }
+
+¤Þ¤º¡¢
+
+    p = &table[(i = start[k]) >> m];
+
+¤ÎÉôʬ¤Ï¡¢
+
+    i = start[k];
+    p = &table[i >> m]
+
+¤Ç¤¢¤ê¡¢i ¤Ï Huffman Éä¹æ¤Î½é´üÃÍ
+
+p ¤Ï¡¢HuffmanÉä¹æ i ¤Î table ¾å¤Î°ÌÃÖ¤ò»Ø¤¹¡£¸å¤Ç¡¢*p ¤Ë¤ÏÌڤΥ롼¥È°ÌÃÖ
+¤òµ­Ï¿¤¹¤ë¤³¤È¤¬Í½ÁÛ¤µ¤ì¤ë¡£
+
+¼¡¤Ë¡¢
+
+    i <<= tablebits;
+
+i ¤ò tablebits ¤Çshift¤¹¤ë¤³¤È¤Ç¡¢Huffman Éä¹æ i ¤Ï
+ºÇ¾å°Ì¤Îtablebits ¤ò½ü¤¤¤¿»Ä¤ê¤Î¥Ó¥Ã¥ÈÉôʬ¤Ë¤Ê¤ë¡£
+
+                               k
+               tablebits
+              |-----------|----|
+              +-----------+----+
+    i         |           |    |
+              +-----------+----+
+                          |----|
+                           ¥³¥³
+¼¡¤Ë
+
+    n = k - tablebits;
+
+n ¤Ï¡¢½ñ¤­´¹¤¨¤¿ i ¤Î¥Ó¥Ã¥ÈŤò¼¨¤¹¡£ÌڤˤϿ¼¤µ n ¤Î³¬Áؤ¬ºîÀ®¤µ¤ì¤ë¤Î¤À¤í¤¦¡£
+
+            /* make tree (n length) */
+            while (--n >= 0) {
+                /* (F.2.1) */
+                if (*p == 0) {
+                    right[avail] = left[avail] = 0;
+                    *p = avail++;
+                }
+                /* (F.2.2) */
+                if (i & 0x8000)
+                    p = &right[*p];
+                else
+                    p = &left[*p];
+                i <<= 1;
+            }
+            /* (F.2.3) */
+            *p = j;
+
+(F.2.1) *p ¤¬ 0 ¤Ç¤¢¤ì¤Ð¡¢*p ¤Ë avail ¤È¤·¤Æ¡¢¿·¤¿¤Êº¬¤ò³ä¤êÅö¤Æ¤½¤Î±¦
+¤Èº¸¤Î»Ò¤Ï0¤Ç½é´ü²½¤·¤Æ¤ª¤¯¡£
+
+(F.2.2) Huffman Éä¹æ(¤Îtablebits°Ê¹ß¤Î¥Ó¥Ã¥È) i ¤Ë¤Ä¤¤¤Æ
+ºÇ¾å°Ì¥Ó¥Ã¥È¤¬Î©¤Ã¤Æ¤¤¤ì¤Ð±¦¤Î»Ò right¡¢¥Ó¥Ã¥È¤¬Î©¤Ã¤Æ¤¤¤Ê¤±¤ì¤Ð
+º¸¤Î»Ò¤òºîÀ®¤¹¤ë¡£(¤³¤³¤Ç¤Ï¡¢p ¤ò³ä¤êÅö¤Æľ¤·¤Æ¤¤¤ë¤À¤±¤Ç¤¢¤ë)¡£
+
+(F.2.3)
+*p ¤Ë¤Ï¡¢avail++ ¤¬½ç¤Ë³ä¤êÅö¤Æ¤é¤ì avail ¤Î½é´üÃͤϠnchar ¤Ê¤Î¤Ç¡¢
+*p >= nchar (c_table[] ¤Ê¤é NC)¤Ç¤¢¤ë¡£
+¤³¤Î while ¥ë¡¼¥×¤òÈ´¤±¤¿¸å¤Ë
+    *p = j;
+¤¬ÀßÄꤵ¤ì¡¢ÌÚ¤ÎÍդˤϡ¢*p < nchar ¤Ç¤¢¤ëÃͤ¬ÀßÄꤵ¤ì¤Æ¤¤¤ë¡£
+(¤½¤·¤Æ¤³¤ì¤¬µá¤á¤ëÉü¹æʸ»ú¤Ç¤¢¤ë¡£)
+
+(F.2.1) ¤Ç¡¢if (*p == 0) ¤È¤·¤Æ¤¤¤ëÍýͳ¤Ï¡¢
+
+        .
+        \
+         .  <- p
+        /
+
+¤È p ¤¬´û¤Ë³ä¤êÅö¤Æ¤é¤ì¤Æ¤ª¤ê¡¢¤½¤ÎÀá¤Ë
+
+        .
+        \
+         .  <- p
+        / \
+
+¤È±¦¤Î»Ò¤¬Äɲ䵤ì¤ë¾ì¹ç¤òÁÛÄꤷ¤Æ¤¤¤ë¡£
 
 # Local Variables:
 # mode : indented-text