Follow @Openwall on Twitter for new release announcements and other news
[<prev] [next>] [<thread-prev] [day] [month] [year] [list]
Message-ID: <CAO6moYs+FKhTX9SEtyLwPceXvXe4ZupH8ML6eR0fZ2fRd75-jQ@mail.gmail.com>
Date: Sat, 24 Jan 2026 00:40:00 +1100
From: Xan Phung <xan.phung@...il.com>
To: musl@...ts.openwall.com
Subject: Re: [PATCH v2] wctype: reduce size of iswalpha & iswpunct by 47%

The commit message in my V2 patch refers to a new gen_ctype tool.
This tool is attached.  It is a direct replacement for gen_ctype in
musl-chartable-tools.
The new tool reads the same Unicode text data files as the old gen_ctype
tool.


On Sat, 24 Jan 2026 at 00:21, Xan Phung <xan.phung@...il.com> wrote:

> Currently iswalpha and iswpunct have total text data size of over 8kb.
> A more efficient encoding has reduced the total size to 4.2kb, a 47%
> reduction.
>
> This encoding also features a speed improvement, with lookups for
> approx 220 of the 256 BMP code blocks done with just a single memory
> load.
>
> The remaining Unicode blocks are niche uses, and are accessed with
> three memory loads.  Compared to the old musl encoding (which used a
> two level table) the topmost level remains much the same, providing
> offsets into code block units (256 codepoint granularity). The second
> level data uses fixed sizes, of one 32 bit word per codepage (where
> each 2 bit pair in word identifies a block of 16 codepoints as all 0,
> all 1, or mixed). The third level is a variable length series of
> extension bytes, indexed by the popcount of set high bits within the
> second level's 32 bit word. Popcount is used as not all 16 codepoint
> blocks need an extension byte. This popcount is calculated with
> nearly same latency as a 32 bit multiply (so it is comparable with
> the indexing speed of accessing a 2D array of non power of 2 size),
> but has the advantage of greater compactness for sparse data.
>
> Results have been tested against first 0x20000 codepoints, and match
> that returned by the pre-existing musl implementation.
>
> A new char table tool to replace the existing gen_ctype is provided
> separately. The new tool has similar command line use:
>
>   gen_ctype [a|p]  -- generates iswalpha & iswpunct table.h files
>   gen_ctype [A|P]  -- generates iswalpha & iswpunct dict.h files
>
> Signed-off-by: Xan Phung <xan.phung@...il.com>
> ---
>  src/ctype/alpha.h          | 172 -----------------------------
>  src/ctype/iswalpha.c       |  62 +++++++++--
>  src/ctype/iswalpha_dict.h  |  15 +++
>  src/ctype/iswalpha_table.h | 217 +++++++++++++++++++++++++++++++++++++
>  src/ctype/iswpunct.c       |  60 ++++++++--
>  src/ctype/iswpunct_dict.h  |  19 ++++
>  src/ctype/iswpunct_table.h | 211 ++++++++++++++++++++++++++++++++++++
>  src/ctype/punct.h          | 141 ------------------------
>  8 files changed, 568 insertions(+), 329 deletions(-)
>  delete mode 100644 src/ctype/alpha.h
>  create mode 100644 src/ctype/iswalpha_dict.h
>  create mode 100644 src/ctype/iswalpha_table.h
>  create mode 100644 src/ctype/iswpunct_dict.h
>  create mode 100644 src/ctype/iswpunct_table.h
>  delete mode 100644 src/ctype/punct.h
>
> diff --git a/src/ctype/alpha.h b/src/ctype/alpha.h
> deleted file mode 100644
> index 4167f38..0000000
> --- a/src/ctype/alpha.h
> +++ /dev/null
> @@ -1,172 +0,0 @@
>
> -18,17,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,17,34,35,36,17,37,38,39,40,
>
> -41,42,43,44,17,45,46,47,16,16,48,16,16,16,16,16,16,16,49,50,51,16,52,53,16,16,
>
> -17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,54,
>
> -17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,
>
> -17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,
>
> -17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,
>
> -17,17,17,55,17,17,17,17,56,17,57,58,59,60,61,62,17,17,17,17,17,17,17,17,17,17,
>
> -17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,
>
> -17,17,17,17,17,17,17,63,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,
> -16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,17,64,65,17,66,67,
>
> -68,69,70,71,72,73,74,17,75,76,77,78,79,80,81,16,82,83,84,85,86,87,88,89,90,91,
>
> -92,93,16,94,95,96,16,17,17,17,97,98,99,16,16,16,16,16,16,16,16,16,16,17,17,17,
>
> -17,100,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,17,17,101,16,16,16,16,16,
>
> -16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,
>
> -16,16,17,17,102,103,16,16,104,105,17,17,17,17,17,17,17,17,17,17,17,17,17,17,
>
> -17,17,17,17,17,17,17,17,17,106,17,17,107,16,16,16,16,16,16,16,16,16,16,16,16,
>
> -16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,17,
>
> -108,109,16,16,16,16,16,16,16,16,16,110,16,16,16,16,16,16,16,16,16,16,16,16,16,
>
> -16,16,16,16,16,16,16,16,16,16,111,112,113,114,16,16,16,16,16,16,16,16,115,116,
>
> -117,16,16,16,16,16,118,119,16,16,16,16,120,16,16,121,16,16,16,16,16,16,16,16,
> -16,16,16,16,16,
>
> -16,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,255,255,
>
> -255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,
>
> -255,255,255,255,255,255,255,255,255,255,255,0,0,0,0,0,0,0,0,254,255,255,7,254,
>
> -255,255,7,0,0,0,0,0,4,32,4,255,255,127,255,255,255,127,255,255,255,255,255,
>
> -255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,
>
> -255,195,255,3,0,31,80,0,0,0,0,0,0,0,0,0,0,32,0,0,0,0,0,223,188,64,215,255,255,
>
> -251,255,255,255,255,255,255,255,255,255,191,255,255,255,255,255,255,255,255,
>
> -255,255,255,255,255,255,255,255,255,3,252,255,255,255,255,255,255,255,255,255,
>
> -255,255,255,255,255,255,255,255,255,255,255,254,255,255,255,127,2,255,255,255,
>
> -255,255,1,0,0,0,0,255,191,182,0,255,255,255,135,7,0,0,0,255,7,255,255,255,255,
>
> -255,255,255,254,255,195,255,255,255,255,255,255,255,255,255,255,255,255,239,
> -31,254,225,255,
>
> -159,0,0,255,255,255,255,255,255,0,224,255,255,255,255,255,255,255,255,255,255,
>
> -255,255,3,0,255,255,255,255,255,7,48,4,255,255,255,252,255,31,0,0,255,255,255,
>
> -1,255,7,0,0,0,0,0,0,255,255,223,63,0,0,240,255,248,3,255,255,255,255,255,255,
>
> -255,255,255,239,255,223,225,255,207,255,254,255,239,159,249,255,255,253,197,
>
> -227,159,89,128,176,207,255,3,16,238,135,249,255,255,253,109,195,135,25,2,94,
>
> -192,255,63,0,238,191,251,255,255,253,237,227,191,27,1,0,207,255,0,30,238,159,
>
> -249,255,255,253,237,227,159,25,192,176,207,255,2,0,236,199,61,214,24,199,255,
>
> -195,199,29,129,0,192,255,0,0,239,223,253,255,255,253,255,227,223,29,96,7,207,
>
> -255,0,0,239,223,253,255,255,253,239,227,223,29,96,64,207,255,6,0,239,223,253,
>
> -255,255,255,255,231,223,93,240,128,207,255,0,252,236,255,127,252,255,255,251,
>
> -47,127,128,95,255,192,255,12,0,254,255,255,255,255,127,255,7,63,32,255,3,0,0,
> -0,0,214,247,255,255,175,255,255,59,95,32,255,243,0,0,0,
>
> -0,1,0,0,0,255,3,0,0,255,254,255,255,255,31,254,255,3,255,255,254,255,255,255,
>
> -31,0,0,0,0,0,0,0,0,255,255,255,255,255,255,127,249,255,3,255,255,255,255,255,
>
> -255,255,255,255,63,255,255,255,255,191,32,255,255,255,255,255,247,255,255,255,
>
> -255,255,255,255,255,255,61,127,61,255,255,255,255,255,61,255,255,255,255,61,
>
> -127,61,255,127,255,255,255,255,255,255,255,61,255,255,255,255,255,255,255,255,
>
> -7,0,0,0,0,255,255,0,0,255,255,255,255,255,255,255,255,255,255,63,63,254,255,
>
> -255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,
>
> -255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,
>
> -255,255,255,255,255,159,255,255,254,255,255,7,255,255,255,255,255,255,255,255,
>
> -255,199,255,1,255,223,15,0,255,255,15,0,255,255,15,0,255,223,13,0,255,255,255,
>
> -255,255,255,207,255,255,1,128,16,255,3,0,0,0,0,255,3,255,255,255,255,255,255,
>
> -255,255,255,255,255,1,255,255,255,255,255,7,255,255,255,255,255,255,255,255,
> -63,
>
> -0,255,255,255,127,255,15,255,1,192,255,255,255,255,63,31,0,255,255,255,255,
>
> -255,15,255,255,255,3,255,3,0,0,0,0,255,255,255,15,255,255,255,255,255,255,255,
>
> -127,254,255,31,0,255,3,255,3,128,0,0,0,0,0,0,0,0,0,0,0,255,255,255,255,255,
>
> -255,239,255,239,15,255,3,0,0,0,0,255,255,255,255,255,243,255,255,255,255,255,
>
> -255,191,255,3,0,255,255,255,255,255,255,127,0,255,227,255,255,255,255,255,63,
>
> -255,1,255,255,255,255,255,231,0,0,0,0,0,222,111,4,255,255,255,255,255,255,255,
>
> -255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,0,0,0,0,
>
> -128,255,31,0,255,255,63,63,255,255,255,255,63,63,255,170,255,255,255,63,255,
>
> -255,255,255,255,255,223,95,220,31,207,15,255,31,220,31,0,0,0,0,0,0,0,0,0,0,0,
>
> -0,0,0,2,128,0,0,255,31,0,0,0,0,0,0,0,0,0,0,0,0,132,252,47,62,80,189,255,243,
> -224,67,0,0,255,255,255,255,255,1,0,0,0,0,0,0,0,0,0,0,0,0,0,
>
> -0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,192,255,255,255,255,255,255,3,0,
>
> -0,255,255,255,255,255,127,255,255,255,255,255,127,255,255,255,255,255,255,255,
>
> -255,255,255,255,255,255,255,255,255,31,120,12,0,255,255,255,255,191,32,255,
>
> -255,255,255,255,255,255,128,0,0,255,255,127,0,127,127,127,127,127,127,127,127,
>
> -255,255,255,255,0,0,0,0,0,128,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
>
> -0,0,224,0,0,0,254,3,62,31,254,255,255,255,255,255,255,255,255,255,127,224,254,
>
> -255,255,255,255,255,255,255,255,255,255,247,224,255,255,255,255,255,254,255,
>
> -255,255,255,255,255,255,255,255,255,127,0,0,255,255,255,7,0,0,0,0,0,0,255,255,
>
> -255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,
>
> -255,255,255,63,0,0,0,0,0,0,0,0,0,255,255,255,255,255,255,255,255,255,255,255,
>
> -255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,0,
>
> -0,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,31,0,0,
>
> -0,0,0,0,0,0,255,255,255,255,255,63,255,31,255,255,255,15,0,0,255,255,255,255,
>
> -255,127,240,143,255,255,255,255,255,255,255,255,255,255,255,255,255,255,0,0,0,
>
> -0,128,255,252,255,255,255,255,255,255,255,255,255,255,255,255,249,255,255,255,
>
> -255,255,255,124,0,0,0,0,0,128,255,191,255,255,255,255,0,0,0,255,255,255,255,
>
> -255,255,15,0,255,255,255,255,255,255,255,255,47,0,255,3,0,0,252,232,255,255,
>
> -255,255,255,7,255,255,255,255,7,0,255,255,255,31,255,255,255,255,255,255,247,
>
> -255,0,128,255,3,255,255,255,127,255,255,255,255,255,255,127,0,255,63,255,3,
>
> -255,255,127,252,255,255,255,255,255,255,255,127,5,0,0,56,255,255,60,0,126,126,
>
> -126,0,127,127,255,255,255,255,255,247,255,0,255,255,255,255,255,255,255,255,
>
> -255,255,255,255,255,255,255,7,255,3,255,255,255,255,255,255,255,255,255,255,
>
> -255,255,255,255,255,255,255,255,255,255,15,0,255,255,127,248,255,255,255,255,
> -255,
>
> -15,255,255,255,255,255,255,255,255,255,255,255,255,255,63,255,255,255,255,255,
>
> -255,255,255,255,255,255,255,255,3,0,0,0,0,127,0,248,224,255,253,127,95,219,
>
> -255,255,255,255,255,255,255,255,255,255,255,255,255,3,0,0,0,248,255,255,255,
>
> -255,255,255,255,255,255,255,255,255,63,0,0,255,255,255,255,255,255,255,255,
>
> -252,255,255,255,255,255,255,0,0,0,0,0,255,15,0,0,0,0,0,0,0,0,0,0,0,0,0,0,223,
>
> -255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,31,0,0,255,3,
>
> -254,255,255,7,254,255,255,7,192,255,255,255,255,255,255,255,255,255,255,127,
>
> -252,252,252,28,0,0,0,0,255,239,255,255,127,255,255,183,255,63,255,63,0,0,0,0,
>
> -255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,7,0,0,0,0,0,0,0,0,
>
> -255,255,255,255,255,255,31,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
> -0,0,0,0,0,0,0,0,255,255,255,31,255,255,255,255,255,255,1,0,0,0,0,
>
> -0,255,255,255,255,0,224,255,255,255,7,255,255,255,255,255,7,255,255,255,63,
>
> -255,255,255,255,15,255,62,0,0,0,0,0,255,255,255,255,255,255,255,255,255,255,
>
> -255,255,255,255,255,255,255,255,255,63,255,3,255,255,255,255,15,255,255,255,
>
> -255,15,255,255,255,255,255,0,255,255,255,255,255,255,15,0,0,0,0,0,0,0,0,0,0,0,
>
> -0,0,0,0,0,0,0,0,255,255,255,255,255,255,127,0,255,255,63,0,255,0,0,0,0,0,0,0,
>
> -0,0,0,0,0,0,0,0,0,0,0,0,63,253,255,255,255,255,191,145,255,255,63,0,255,255,
>
> -127,0,255,255,255,127,0,0,0,0,0,0,0,0,255,255,55,0,255,255,63,0,255,255,255,3,
>
> -0,0,0,0,0,0,0,0,255,255,255,255,255,255,255,192,0,0,0,0,0,0,0,0,111,240,239,
>
> -254,255,255,63,0,0,0,0,0,255,255,255,31,255,255,255,31,0,0,0,0,255,254,255,
>
> -255,31,0,0,0,255,255,255,255,255,255,63,0,255,255,63,0,255,255,7,0,255,255,3,
> -0,0,0,0,0,0,0,0,0,0,0,0,
>
> -0,255,255,255,255,255,255,255,255,255,1,0,0,0,0,0,0,255,255,255,255,255,255,7,
>
> -0,255,255,255,255,255,255,7,0,255,255,255,255,255,0,255,3,0,0,0,0,0,0,0,0,0,0,
>
> -0,0,0,0,0,0,0,0,0,0,0,0,0,0,255,255,255,31,128,0,255,255,63,0,0,0,0,0,0,0,0,0,
>
> -0,0,0,0,0,0,0,0,0,0,255,255,127,0,255,255,255,255,255,255,255,255,63,0,0,0,
>
> -192,255,0,0,252,255,255,255,255,255,255,1,0,0,255,255,255,1,255,3,255,255,255,
>
> -255,255,255,199,255,112,0,255,255,255,255,71,0,255,255,255,255,255,255,255,
>
> -255,30,0,255,23,0,0,0,0,255,255,251,255,255,255,159,64,0,0,0,0,0,0,0,0,127,
>
> -189,255,191,255,1,255,255,255,255,255,255,255,1,255,3,239,159,249,255,255,253,
>
> -237,227,159,25,129,224,15,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,255,255,255,
>
> -255,255,255,255,255,187,7,255,131,0,0,0,0,255,255,255,255,255,255,255,255,179,
> -0,255,3,0,0,0,
>
> -0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,255,255,255,255,255,255,63,127,0,0,0,63,0,0,
>
> -0,0,255,255,255,255,255,255,255,127,17,0,255,3,0,0,0,0,255,255,255,255,255,
>
> -255,63,1,255,3,0,0,0,0,0,0,255,255,255,231,255,7,255,3,0,0,0,0,0,0,0,0,0,0,0,
>
> -0,0,0,0,0,0,0,0,0,0,0,0,0,255,255,255,255,255,255,255,1,0,0,0,0,0,0,0,0,0,0,0,
>
> -0,255,255,255,255,255,255,255,255,255,3,0,128,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
>
> -0,0,0,0,255,252,255,255,255,255,255,252,26,0,0,0,255,255,255,255,255,255,231,
>
> -127,0,0,255,255,255,255,255,255,255,255,255,32,0,0,0,0,255,255,255,255,255,
>
> -255,255,1,255,253,255,255,255,255,127,127,1,0,255,3,0,0,252,255,255,255,252,
>
> -255,255,254,127,0,0,0,0,0,0,0,0,0,127,251,255,255,255,255,127,180,203,0,255,3,
> -191,253,255,255,255,127,123,1,255,3,0,0,0,0,0,0,0,0,0,
>
> -0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,255,255,127,0,255,
>
> -255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,3,0,0,
>
> -0,0,0,0,0,0,0,0,0,0,255,255,255,255,255,255,255,255,255,255,255,255,255,127,0,
>
> -0,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,
>
> -255,255,255,255,255,15,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,255,255,
>
> -255,255,255,127,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,255,255,
>
> -255,255,255,255,255,255,127,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,255,
>
> -255,255,255,255,255,255,1,255,255,255,127,255,3,0,0,0,0,0,0,0,0,0,0,0,0,255,
>
> -255,255,63,0,0,255,255,255,255,255,255,0,0,15,0,255,3,248,255,255,224,255,255,
> -0,0,0,0,0,0,0,0,0,0,0,0,0,
>
> -0,0,0,0,0,0,0,0,0,255,255,255,255,255,255,255,255,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
>
> -0,0,255,255,255,255,255,255,255,255,255,135,255,255,255,255,255,255,255,128,
>
> -255,255,0,0,0,0,0,0,0,0,11,0,0,0,255,255,255,255,255,255,255,255,255,255,255,
>
> -255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,
>
> -255,0,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,
>
> -255,255,255,255,255,255,255,255,255,255,255,255,7,0,255,255,255,127,0,0,0,0,0,
>
> -0,7,0,240,0,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,
>
> -255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,
>
> -255,255,255,255,255,255,255,255,255,255,255,255,255,255,15,255,255,255,255,
>
> -255,255,255,255,255,255,255,255,255,7,255,31,255,1,255,67,0,0,0,0,0,0,0,0,0,0,
>
> -0,0,255,255,255,255,255,255,255,255,255,255,223,255,255,255,255,255,255,255,
> -255,223,100,222,255,235,239,255,255,255,255,255,255,
>
> -255,191,231,223,223,255,255,255,123,95,252,253,255,255,255,255,255,255,255,
>
> -255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,
>
> -255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,63,255,255,255,
>
> -253,255,255,247,255,255,255,247,255,255,223,255,255,255,223,255,255,127,255,
>
> -255,255,127,255,255,255,253,255,255,255,253,255,255,247,207,255,255,255,255,
>
> -255,255,127,255,255,249,219,7,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
>
> -0,0,255,255,255,255,255,31,128,63,255,67,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
>
> -0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,255,255,255,255,255,
>
> -15,255,3,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,
>
> -255,255,255,255,255,255,255,31,0,0,0,0,0,0,0,255,255,255,255,255,255,255,255,
> -143,8,255,3,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
>
> -0,239,255,255,255,150,254,247,10,132,234,150,170,150,247,247,94,255,251,255,
>
> -15,238,251,255,15,0,0,0,0,0,0,0,0,0,0,0,0,0,0,255,255,255,3,255,255,255,3,255,
> -255,255,3,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
> diff --git a/src/ctype/iswalpha.c b/src/ctype/iswalpha.c
> index 1c5485d..d92c2e3 100644
> --- a/src/ctype/iswalpha.c
> +++ b/src/ctype/iswalpha.c
> @@ -1,16 +1,60 @@
>  #include <wctype.h>
> +#include <endian.h>
>
> -static const unsigned char table[] = {
> -#include "alpha.h"
> +#define BYTE(x,y) ((x) >> (y^(__BYTE_ORDER == __BIG_ENDIAN ? 0:24)) & 255)
> +#define BYTES(x)  BYTE(x,24),BYTE(x,16),BYTE(x,8),BYTE(x,0)
> +#define PAGE_SH   8
> +#define PAGE_MAX  (1u << PAGE_SH)
> +#define PAGES     (0x20000 / PAGE_MAX)
> +#define PAGEH     (0x1000/8 + PAGES)   /* Direct map 0x1000 codepts */
> +
> +const static union {
> +       unsigned char b[PAGEH + 184*4];
> +       unsigned int  w[PAGEH/4 + 184];
> +} table = {{
> +#include "iswalpha_table.h"
> +}};
> +
> +const static unsigned short dict[87] = {
> +#include "iswalpha_dict.h"
>  };
>
> -int iswalpha(wint_t wc)
> -{
> -       if (wc<0x20000U)
> -               return (table[table[wc>>8]*32+((wc&255)>>3)]>>(wc&7))&1;
> -       if (wc<0x2fffeU)
> -               return 1;
> -       return 0;
> +int iswalpha(wint_t wc) {
> +       unsigned direct, page, bmap, shfr, lane, base, rev;
> +       unsigned target, huff, type, popc, fast;
> +       signed char ext;
> +       if ((unsigned)wc >= 0x20000)
> +               return (unsigned)wc < 0x2fffe;
> +
> +       /* Direct path used in 220 of the 256 BMP code pages */
> +       direct = wc < (PAGEH-PAGES)*8;
> +       page = (wc >> PAGE_SH);
> +       bmap = (wc >> 3) + PAGES;
> +       base = table.b[direct ? bmap:page];
> +       if (base <= direct*256 + 1)
> +               return base >> (wc & -direct & 7) & 1;
> +
> +       /* 2nd & 3rd level arrays: final level idx=popc^rev_direction */
> +       target = wc & (PAGE_MAX-1);
> +       shfr = (target & 15);
> +       lane = (target >> 4);
> +       huff = table.w[base += PAGEH/4 - 2];     /* base 0/1 reserved */
> +       type = (huff >> (2 * lane)) & 3;
> +       popc = (huff << (31 - 2 * lane));
> +       popc = (popc & 0x11111111) + ((popc & 0x44444444) >> 2);
> +       popc = (popc * 0x11111111) >> 28;
> +       base+= (rev = -(page & 1)) + 1;
> +       ext  = (table.b + base*4)[(int)(popc^rev)];
> +
> +       /* Dictionary lookup is only 1% of codepoints */
> +       fast = (type != 2 | ext & 1);
> +       if (fast) {
> +               shfr = (shfr + 5) & -(type >= 2);
> +               shfr = (shfr - (6 & -(type == 2)) + type);
> +               return (ext << 8 | 0xfe) >> shfr & 1;
> +       } else {
> +               return dict[ext >> 1 & 0x7f] >> shfr & 1;
> +       }
>  }
>
>  int __iswalpha_l(wint_t c, locale_t l)
> diff --git a/src/ctype/iswalpha_dict.h b/src/ctype/iswalpha_dict.h
> new file mode 100644
> index 0000000..ba3f1e0
> --- /dev/null
> +++ b/src/ctype/iswalpha_dict.h
> @@ -0,0 +1,15 @@
> +/* success: all odd pages matched to even < 0x1e2 */
> +/* success: all odd pages matched to even < 0x1e8 */
> +/* success: all odd pages matched to even < 0x1ee */
> +/* wctype: dictionary 87 entries */
> +63871,8383,15743,32573,65341,65407,16191,40959,
> +4224,32767,128,4079,56832,1135,43775,24543,
> +8156,4047,32770,64644,15919,48464,17376,30751,
> +33023,32639,32768,224,1022,7998,57471,36848,
> +59644,64639,14336,32382,63615,57592,24447,64764,
> +7420,47103,57344,65295,64831,37311,61551,65263,
> +16543,48511,49151,40943,58349,6559,57473,1979,
> +33791,179,32575,16128,319,32743,64383,46207,
> +203,64959,379,34815,240,17407,56932,59327,
> +57311,31743,64607,65343,53239,2011,16256,2191,
> +65174,2807,60036,43670,63382,24311,64494,
> diff --git a/src/ctype/iswalpha_table.h b/src/ctype/iswalpha_table.h
> new file mode 100644
> index 0000000..3018209
> --- /dev/null
> +++ b/src/ctype/iswalpha_table.h
> @@ -0,0 +1,217 @@
> +/* success: all odd pages matched to even < 0x1e2 */
> +/* success: all odd pages matched to even < 0x1e8 */
> +/* success: all odd pages matched to even < 0x1ee */
> +/* wctype: table 512 x 256 codepoints */
> +  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,
> +  2,  1,  6,  5, 12,  1, 16, 11, 21, 30, 25, 40, 31, 43,  1, 36,
> + 37, 58,  0,  0, 41,  0,  0,  0,  0,  0,  0,  0, 44, 15, 47,  0,
> + 51, 24,  0,  0,  1,  1,  1,  1,  1,  1,  1,  1,  1,  1,  1,  1,
> +  1,  1,  1,  1,  1,  1,  1,  1,  1,  1,  1,  1,  1, 54,  1,  1,
> +  1,  1,  1,  1,  1,  1,  1,  1,  1,  1,  1,  1,  1,  1,  1,  1,
> +  1,  1,  1,  1,  1,  1,  1,  1,  1,  1,  1,  1,  1,  1,  1,  1,
> +  1,  1,  1,  1,  1,  1,  1,  1,  1,  1,  1,  1,  1,  1,  1,  1,
> +  1,  1,  1,  1,  1,  1,  1,  1,  1,  1,  1,  1,  1,  1,  1,  1,
> +  1,  1,  1,  1,  1,  1,  1,  1,  1,  1,  1,  1,  1,  1,  1, 46,
> +  1,  1,  1,  1, 55,  1, 59, 94, 63, 20, 68, 50,  1,  1,  1,  1,
> +  1,  1,  1,  1,  1,  1,  1,  1,  1,  1,  1,  1,  1,  1,  1,  1,
> +  1,  1,  1,  1,  1,  1,  1,  1,  1,  1,  1,  1,  1,  1,  1,  1,
> +  1,  1,  1,  1,  1,  1,  1,121,  0,  0,  0,  0,  0,  0,  0,  0,
> +  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,
> +  0,  0,  0,  0,  0,  0,  0,  0,  0,  1, 73,136,  1, 62, 76,100,
> + 79,103, 83, 67, 86, 75,  1,139, 90,142, 95, 72,101, 78,  0, 89,
> +104,108,109,146,113, 82,118,150,122,153,125,  0,128,117,133,  0,
> +  1,  1,  1,112,137,124,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,
> +  1,  1,  1,  1,140,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,
> +  0,  0,  0,  0,  1,  1,143,  0,  0,  0,  0,  0,  0,  0,  0,  0,
> +  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,
> +  0,  0,  0,  0,  0,  0,  0,  0,  1,  1,147,132,  0,  0,151,156,
> +  1,  1,  1,  1,  1,  1,  1,  1,  1,  1,  1,  1,  1,  1,  1,  1,
> +  1,  1,  1,  1,  1,  1,  1,127,  1,  1,154,  0,  0,  0,  0,  0,
> +  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,
> +  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,
> +  1,159,157,  0,  0,  0,  0,  0,  0,  0,  0,  0,160,  0,  0,  0,
> +  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,
> +  0,  0,  0,  0,165,176,169,164,  0,  0,  0,  0,  0,  0,  0,  0,
> +173,168,177,  0,  0,  0,  0,  0,179, 85,  0,  0,  0,  0,181,  0,
> +  0,172,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,
> +  0,  0,  0,  0,  0,  0,  0,  0,254,255,255,  7,254,255,255,  7,
> +  0,  0,  0,  0,  0,  4, 32,  4,255,255,127,255,255,255,127,255,
> +255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,
> +255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,
> +255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,
> +255,255,255,255,255,255,255,255,195,255,  3,  0, 31, 80,  0,  0,
> +  0,  0,  0,  0,  0,  0,  0,  0, 32,  0,  0,  0,  0,  0,223,188,
> + 64,215,255,255,251,255,255,255,255,255,255,255,255,255,191,255,
> +255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,
> +  3,252,255,255,255,255,255,255,255,255,255,255,255,255,255,255,
> +255,255,255,255,255,255,254,255,255,255,127,  2,255,255,255,255,
> +255,  1,  0,  0,  0,  0,255,191,182,  0,255,255,255,135,  7,  0,
> +  0,  0,255,  7,255,255,255,255,255,255,255,254,255,195,255,255,
> +255,255,255,255,255,255,255,255,255,255,239, 31,254,225,255,159,
> +  0,  0,255,255,255,255,255,255,  0,224,255,255,255,255,255,255,
> +255,255,255,255,255,255,  3,  0,255,255,255,255,255,  7, 48,  4,
> +255,255,255,252,255, 31,  0,  0,255,255,255,  1,255,  7,  0,  0,
> +  0,  0,  0,  0,255,255,223, 63,  0,  0,240,255,248,  3,255,255,
> +255,255,255,255,255,255,255,239,255,223,225,255,207,255,254,255,
> +239,159,249,255,255,253,197,227,159, 89,128,176,207,255,  3, 16,
> +238,135,249,255,255,253,109,195,135, 25,  2, 94,192,255, 63,  0,
> +238,191,251,255,255,253,237,227,191, 27,  1,  0,207,255,  0, 30,
> +238,159,249,255,255,253,237,227,159, 25,192,176,207,255,  2,  0,
> +236,199, 61,214, 24,199,255,195,199, 29,129,  0,192,255,  0,  0,
> +239,223,253,255,255,253,255,227,223, 29, 96,  7,207,255,  0,  0,
> +239,223,253,255,255,253,239,227,223, 29, 96, 64,207,255,  6,  0,
> +239,223,253,255,255,255,255,231,223, 93,240,128,207,255,  0,252,
> +236,255,127,252,255,255,251, 47,127,128, 95,255,192,255, 12,  0,
> +254,255,255,255,255,127,255,  7, 63, 32,255,  3,  0,  0,  0,  0,
> +214,247,255,255,175,255,255, 59, 95, 32,255,243,  0,  0,  0,  0,
> +  1,  0,  0,  0,255,  3,  0,  0,255,254,255,255,255, 31,254,255,
> +  3,255,255,254,255,255,255, 31,  0,  0,  0,  0,  0,  0,  0,  0,
> +
> +/* wctype: pages U+01000,01300 [words -1-2] */
> +BYTES(0x96595695),0,7,127,2,239,12,15,8,BYTES(0x95510959),
> +
> +/* wctype: pages U+01200,01700 [words 3-8] */
> +BYTES(0x5a965a55),123,4,123,6,8,10,7,16,3,207,13,191,
> +15,15,15,191,BYTES(0x2ad5edde),
> +
> +/* wctype: pages U+01400,02d00 [words 9-12] */
> +BYTES(0x55555557),254,50,50,50,50,127,48,2,BYTES(0x5aad2565),
> +
> +/* wctype: pages U+01600,0a900 [words 13-17] */
> +BYTES(0xa55b6555),14,254,15,143,3,18,7,52,247,63,7,15,
> +BYTES(0x9ad59d65),
> +
> +/* wctype: pages U+01800,03100 [words 18-21] */
> +BYTES(0xd5659558),7,3,15,63,15,18,254,224,BYTES(0x409255d7),
> +
> +/* wctype: pages U+01a00,01900 [words 22-27] */
> +BYTES(0x002af959),31,18,254,31,7,7,20,7,7,31,31,127,
> +192,3,31,18,BYTES(0x0a65e7a9),
> +
> +/* wctype: pages U+01c00,01f00 [words 28-33] */
> +BYTES(0xa09696d5),127,199,127,3,207,24,26,32,63,34,32,30,
> +127,28,12,12,BYTES(0xaa959a59),
> +
> +/* wctype: pages U+02000,01b00 [words 34-37] */
> +BYTES(0x00088000),36,63,3,191,231,7,22,239,BYTES(0xf5650ad5),
> +
> +/* wctype: pages U+02400,01d00 [words 38-40] */
> +BYTES(0x25c00000),192,7,31,128,BYTES(0xf0555555),
> +
> +/* wctype: pages U+02c00,09f00 [words 41-43] */
> +BYTES(0xe5555965),18,18,46,12,BYTES(0x15555555),
> +
> +/* wctype: pages U+02e00,0ab00 [words 44-47] */
> +BYTES(0x00000020),52,7,15,1,239,50,126,70,BYTES(0xa555696e),
> +
> +/* wctype: pages U+03000,04d00 [words 48-51] */
> +BYTES(0x957957a2),54,56,58,254,60,254,239,63,BYTES(0x00d55555),
> +
> +/* wctype: pages U+0a400,02100 [words 52-55] */
> +BYTES(0x94025555),63,127,3,44,231,42,40,38,BYTES(0x000252aa),
> +
> +/* wctype: pages U+0a600,0fd00 [words 56-59] */
> +BYTES(0x1555a526),63,31,18,62,31,1,252,127,BYTES(0x825d5495),
> +
> +/* wctype: pages U+0a800,10300 [words 60-64] */
> +BYTES(0x8b55d527),191,1,15,47,7,64,62,86,127,15,15,84,
> +BYTES(0x0e599665),
> +
> +/* wctype: pages U+0aa00,10b00 [words 65-69] */
> +BYTES(0xdb959ad5),127,127,7,66,18,5,68,60,3,7,63,63,
> +BYTES(0x000dddd5),
> +
> +/* wctype: pages U+0fa00,10500 [words 70-72] */
> +BYTES(0x09556555),127,7,15,1,BYTES(0x00003565),
> +
> +/* wctype: pages U+0fe00,10d00 [words 73-75] */
> +BYTES(0x9555c000),223,63,7,1,BYTES(0x000000a5),
> +
> +/* wctype: pages U+10000,11500 [words 76-79] */
> +BYTES(0x95550aa6),223,10,82,127,127,15,118,116,BYTES(0x08950000),
> +
> +/* wctype: pages U+10200,1e900 [words 80-82] */
> +BYTES(0x0d590000),63,1,7,158,BYTES(0x00000a55),
> +
> +/* wctype: pages U+10400,10f00 [words 83-86] */
> +BYTES(0x99695555),127,7,86,31,127,63,20,63,BYTES(0xd0000369),
> +
> +/* wctype: pages U+10800,0a700 [words 87-91] */
> +BYTES(0xd009dd96),88,90,63,127,18,55,0,128,124,243,252,128,
> +BYTES(0xc356557c),
> +
> +/* wctype: pages U+10a00,0ff00 [words 92-97] */
> +BYTES(0x360990da),92,94,63,63,63,253,31,80,78,18,192,15,
> +254,15,254,7,BYTES(0x0a957bb8),
> +
> +/* wctype: pages U+10c00,10100 [words 98-100] */
> +BYTES(0xd5d50255),3,7,7,31,BYTES(0x0000d500),
> +
> +/* wctype: pages U+11000,11100 [words 101-105] */
> +BYTES(0xa4973355),63,192,252,3,3,7,0,47,30,71,112,199,
> +BYTES(0x0b55d7d5),
> +
> +/* wctype: pages U+11200,12300 [words 106-109] */
> +BYTES(0xa56a009d),251,96,98,100,3,3,7,7,BYTES(0x00095555),
> +
> +/* wctype: pages U+11400,11d00 [words 110-114] */
> +BYTES(0x0a550a55),110,112,114,7,7,132,18,130,7,128,126,124,
> +BYTES(0x002a6a96),
> +
> +/* wctype: pages U+11600,0d700 [words 115-118] */
> +BYTES(0x02950b95),18,17,7,120,7,31,72,15,BYTES(0x96755555),
> +
> +/* wctype: pages U+11800,12500 [words 119-121] */
> +BYTES(0xa5500095),3,7,52,15,BYTES(0x00000355),
> +
> +/* wctype: pages U+11a00,18700 [words 122-124] */
> +BYTES(0x95095495),122,65,3,1,BYTES(0x95555555),
> +
> +/* wctype: pages U+11c00,16b00 [words 125-129] */
> +BYTES(0x00edcb96),251,50,1,7,252,252,253,127,193,248,7,15,
> +BYTES(0x0001bb15),
> +
> +/* wctype: pages U+11e00,0fb00 [words 130-133] */
> +BYTES(0xd0000000),127,248,3,219,76,251,74,127,BYTES(0x5cd557ab),
> +
> +/* wctype: pages U+12400,10700 [words 134-136] */
> +BYTES(0x55552555),18,1,63,127,BYTES(0x00002dd5),
> +
> +/* wctype: pages U+13400,10900 [words 137-139] */
> +BYTES(0x00000025),18,129,7,63,BYTES(0x0095009d),
> +
> +/* wctype: pages U+14600,11300 [words 140-143] */
> +BYTES(0x00000355),127,15,108,106,104,251,249,102,BYTES(0x00003aae),
> +
> +/* wctype: pages U+16a00,11700 [words 144-147] */
> +BYTES(0x24002995),3,18,7,127,0,7,15,207,BYTES(0x000000a9),
> +
> +/* wctype: pages U+16e00,11900 [words 148-150] */
> +BYTES(0x00005500),0,26,249,249,BYTES(0x39600000),
> +
> +/* wctype: pages U+18a00,16f00 [words 151-153] */
> +BYTES(0xd5555555),7,11,48,134,BYTES(0x30065655),
> +
> +/* wctype: pages U+1b200,1b100 [words 154-156] */
> +BYTES(0x95555555),31,136,7,18,BYTES(0x55556c09),
> +
> +/* wctype: pages U+1bc00,1d700 [words 157-161] */
> +BYTES(0x000aa555),15,63,3,138,0,152,251,251,18,18,223,223,
> +BYTES(0x566666dd),
> +
> +/* wctype: pages U+1d400,1e100 [words 162-165] */
> +BYTES(0x57a95d55),223,191,140,215,239,138,156,63,BYTES(0x000002a5),
> +
> +/* wctype: pages U+1d600,1f100 [words 166-169] */
> +BYTES(0x9b655555),150,253,239,239,0,7,7,7,BYTES(0x00026640),
> +
> +/* wctype: pages U+1e000,1d500 [words 170-173] */
> +BYTES(0x0000002a),10,243,154,253,148,146,144,142,BYTES(0x55555e9a),
> +
> +/* wctype: pages U+1e200,1e800 [words 174-176] */
> +BYTES(0xa5000000),31,7,0,0,
> +/* wctype: pages U+1e800,1ee00 [words 176-178] */
> +BYTES(0x03555555),31,0,0,0,
> +/* wctype: pages U+1ee00,1ee00 [words 178-183] */
> +BYTES(0x00aaaaa7),239,160,162,164,166,168,170,247,31,172,31,0,
> +0,0,0,0,
> \ No newline at end of file
> diff --git a/src/ctype/iswpunct.c b/src/ctype/iswpunct.c
> index f0b9ea0..cff793b 100644
> --- a/src/ctype/iswpunct.c
> +++ b/src/ctype/iswpunct.c
> @@ -1,14 +1,60 @@
>  #include <wctype.h>
> +#include <endian.h>
>
> -static const unsigned char table[] = {
> -#include "punct.h"
> +#define BYTE(x,y) ((x) >> (y^(__BYTE_ORDER == __BIG_ENDIAN ? 0:24)) & 255)
> +#define BYTES(x)  BYTE(x,24),BYTE(x,16),BYTE(x,8),BYTE(x,0)
> +#define PAGE_SH   8
> +#define PAGE_MAX  (1u << PAGE_SH)
> +#define PAGES     (0x20000 / PAGE_MAX)
> +#define PAGEH     (0x800/8 + PAGES)   /* Direct map 0x800 codepts */
> +
> +const static union {
> +       unsigned char b[PAGEH + 196*4];
> +       unsigned int  w[PAGEH/4 + 196];
> +} table = {{
> +#include "iswpunct_table.h"
> +}};
> +
> +const static unsigned short dict[74] = {
> +#include "iswpunct_dict.h"
>  };
>
> -int iswpunct(wint_t wc)
> -{
> -       if (wc<0x20000U)
> -               return (table[table[wc>>8]*32+((wc&255)>>3)]>>(wc&7))&1;
> -       return 0;
> +int iswpunct(wint_t wc) {
> +       unsigned direct, page, bmap, shfr, lane, base, rev;
> +       unsigned target, huff, type, popc, fast;
> +       signed char ext;
> +       if ((unsigned)wc >= 0x20000)
> +               return 0;
> +
> +       /* Direct path used in 212 of the 256 BMP code pages */
> +       direct = wc < (PAGEH-PAGES)*8;
> +       page = (wc >> PAGE_SH);
> +       bmap = (wc >> 3) + PAGES;
> +       base = table.b[direct ? bmap:page];
> +       if (base <= direct*256 + 1)
> +               return base >> (wc & -direct & 7) & 1;
> +
> +       /* 2nd & 3rd level arrays: final level idx=popc^rev_direction */
> +       target = wc & (PAGE_MAX-1);
> +       shfr = (target & 15);
> +       lane = (target >> 4);
> +       huff = table.w[base += PAGEH/4 - 2];     /* base 0/1 reserved */
> +       type = (huff >> (2 * lane)) & 3;
> +       popc = (huff << (31 - 2 * lane));
> +       popc = (popc & 0x11111111) + ((popc & 0x44444444) >> 2);
> +       popc = (popc * 0x11111111) >> 28;
> +       base+= (rev = -(page & 1)) + 1;
> +       ext  = (table.b + base*4)[(int)(popc^rev)];
> +
> +       /* Dictionary lookup is only 1% of codepoints */
> +       fast = (type != 2 | (ext & 1) == 0);
> +       if (fast) {
> +               shfr = (shfr + 6) & -(type >= 2);
> +               shfr = (shfr - (8 & -(type == 2)) + (type^1));
> +               return (ext << 8 | 0x01) >> shfr & 1;
> +       } else {
> +               return dict[ext >> 1 & 0x7f] >> shfr & 1;
> +       }
>  }
>
>  int __iswpunct_l(wint_t c, locale_t l)
> diff --git a/src/ctype/iswpunct_dict.h b/src/ctype/iswpunct_dict.h
> new file mode 100644
> index 0000000..41da56d
> --- /dev/null
> +++ b/src/ctype/iswpunct_dict.h
> @@ -0,0 +1,19 @@
> +/* success: all odd pages matched to even < 0x1e8 */
> +/* success: all odd pages matched to even < 0x1ec */
> +/* success: all odd pages matched to even < 0x1ee */
> +/* success: all odd pages matched to even < 0x1f0 */
> +/* success: all odd pages matched to even < 0x1f2 */
> +/* success: all odd pages matched to even < 0x1f6 */
> +/* success: all odd pages matched to even < 0x1f8 */
> +/* success: all odd pages matched to even < 0x1fa */
> +/* wctype: dictionary 74 entries */
> +32767,19968,64519,28668,57347,253,2047,40960,
> +32512,1023,32768,57280,252,57343,1664,8191,
> +24576,12159,40928,16255,61452,63616,255,8703,
> +912,64480,64767,32753,891,49616,17071,48159,
> +65343,34784,65027,32769,64511,4095,65310,64513,
> +57537,28687,240,49168,5891,32776,16383,896,
> +3967,32639,36800,34560,511,63584,16320,8195,
> +16353,16224,8128,63556,26624,192,32792,128,
> +384,32771,45056,65151,1904,61439,64635,51175,
> +59391,1807,
> diff --git a/src/ctype/iswpunct_table.h b/src/ctype/iswpunct_table.h
> new file mode 100644
> index 0000000..8631fe2
> --- /dev/null
> +++ b/src/ctype/iswpunct_table.h
> @@ -0,0 +1,211 @@
> +  0,  0,  0,  0,  0,  0,  0,  0,  2, 25,  7, 48, 12,  6, 17, 11,
> + 21,  0,  0, 28, 26,  0, 29, 16, 32, 34, 35, 39, 40, 20,  0, 60,
> + 44, 56,  1,  1, 49,  1,  1,  1,  1,  1,  1, 64, 53,117, 57, 70,
> + 61,120, 65,  1,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,
> +  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0, 31,  0,  0,
> +  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,
> +  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,
> +  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,
> +  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,
> +  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,
> +  0,  0,  0,  0, 68,  0, 71, 43, 75,124, 79, 78,  0,  0,  0,  0,
> +  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,
> +  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,
> +  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,
> + 83,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,
> +  0,  0,  0,  0,  0,  0,  0,  0, 87,  0,  0, 67,  0, 82, 90,133,
> +  0, 86, 94, 89,  0,163,  0,  0, 98, 52,102,167,107,  0,111, 74,
> +114, 97,118, 93,121,128,125,137,129,170,134,  0,138,141,142,173,
> +  0,  0,  0,  0,145,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,
> +  0,  0,  0,  0,148,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,
> +  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,
> +  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,
> +  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,151,106,  0,  0,154,176,
> +  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,
> +  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,
> +  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,
> +  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,
> +  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,157,  0,  0,  0,
> +  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,
> +161,144,164,147,  0,  0,168,110,  1,  1,171,  0,  0,  0,  0,  0,
> +  0,150,174,  0,  0,  0,  0,  0,177,153,  0,  0,179,156,181,  0,
> +183,160,186,  1,  1,  1,189,113,191,101,194,  0,  0,  0,  0,  0,
> +  0,  0,  0,  0,254,255,  0,252,  1,  0,  0,248,  1,  0,  0,120,
> +  0,  0,  0,  0,255,251,223,251,  0,  0,128,  0,  0,  0,128,  0,
> +  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,
> +  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,
> +  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,
> +  0,  0,  0,  0,  0,  0,  0,  0, 60,  0,252,255,224,175,255,255,
> +255,255,255,255,255,255,255,255,223,255,255,255,255,255, 32, 64,
> +176,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0, 64,  0,
> +  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,
> +252,  3,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,
> +  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,252,  0,  0,  0,  0,
> +  0,230,254,255,255,255,  0, 64, 73,  0,  0,  0,  0,  0, 24,  0,
> +255,255,  0,216,  0,  0,  0,  0,  0,  0,  0,  1,  0, 60,  0,  0,
> +  0,  0,  0,  0,  0,  0,  0,  0,  0,  0, 16,224,  1, 30,  0, 96,
> +255,191,  0,  0,  0,  0,  0,  0,255,  7,  0,  0,  0,  0,  0,  0,
> +  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,248,207,227,
> +
> +/* wctype: pages U+00800,00d00 [words -1-3] */
> +BYTES(0x2c0008a8),6,64,1,3,8,5,16,8,19,17,15,48,
> +BYTES(0xc2008a80),
> +
> +/* wctype: pages U+00a00,00f00 [words 4-8] */
> +BYTES(0x8280c280),32,64,64,32,64,9,13,27,128,25,248,254,
> +BYTES(0x0a820067),
> +
> +/* wctype: pages U+00c00,01700 [words 9-13] */
> +BYTES(0x0283c203),16,64,128,16,32,64,19,35,252,48,112,16,
> +BYTES(0x8ac000cc),
> +
> +/* wctype: pages U+00e00,01d00 [words 14-17] */
> +BYTES(0x02800aa0),21,21,23,24,8,62,51,127,BYTES(0xb5000000),
> +
> +/* wctype: pages U+01000,00900 [words 18-22] */
> +BYTES(0x80080280),29,248,128,16,7,64,32,1,48,30,64,32,
> +BYTES(0x8280fe80),
> +
> +/* wctype: pages U+01400,01300 [words 23-25] */
> +BYTES(0x00000003),1,19,31,192,BYTES(0x00089800),
> +
> +/* wctype: pages U+01600,04d00 [words 26-28] */
> +BYTES(0x200b2000),33,1,48,112,BYTES(0x55000000),
> +
> +/* wctype: pages U+01800,01900 [words 29-31] */
> +BYTES(0x00000002),1,136,49,28,BYTES(0x58000380),
> +
> +/* wctype: pages U+01a00,01b00 [words 32-36] */
> +BYTES(0x00a0b008),128,1,37,39,1,41,64,24,31,248,16,16,
> +BYTES(0xb0209bc0),
> +
> +/* wctype: pages U+01c00,0a700 [words 37-40] */
> +BYTES(0xa6008080),43,128,45,47,49,12,3,127,BYTES(0x0002003d),
> +
> +/* wctype: pages U+02000,00b00 [words 41-45] */
> +BYTES(0xd452b966),43,53,1,223,55,1,1,13,64,11,64,32,
> +BYTES(0x82008280),
> +
> +/* wctype: pages U+02400,10900 [words 46-49] */
> +BYTES(0x60d55235),127,13,63,248,252,96,21,101,BYTES(0x5d800088),
> +
> +/* wctype: pages U+02c00,02100 [words 50-53] */
> +BYTES(0xa0000000),67,69,28,63,24,61,59,57,BYTES(0x555606aa),
> +
> +/* wctype: pages U+02e00,01f00 [words 54-57] */
> +BYTES(0xd5590165),1,73,15,33,192,192,9,15,BYTES(0xaa800000),
> +
> +/* wctype: pages U+03000,02b00 [words 58-61] */
> +BYTES(0x803800a6),77,79,81,60,1,16,65,207,BYTES(0x5559d555),
> +
> +/* wctype: pages U+03200,0fb00 [words 62-64] */
> +BYTES(0x55555559),1,3,252,4,BYTES(0x03c00020),
> +
> +/* wctype: pages U+0a400,02f00 [words 65-67] */
> +BYTES(0x83540000),127,128,75,63,BYTES(0x8d555555),
> +
> +/* wctype: pages U+0a600,10f00 [words 68-71] */
> +BYTES(0x8000a002),192,21,83,45,19,192,127,192,BYTES(0x00000b38),
> +
> +/* wctype: pages U+0a800,0ab00 [words 72-75] */
> +BYTES(0x920080a3),64,30,19,85,87,89,112,16,BYTES(0x20000800),
> +
> +/* wctype: pages U+0aa00,0fd00 [words 76-79] */
> +BYTES(0xcb808800),224,95,21,2,128,67,96,128,BYTES(0x80000080),
> +
> +/* wctype: pages U+0e000,10100 [words 80-83] */
> +BYTES(0x00000003),1,93,1,75,1,224,143,135,BYTES(0x943ac0d7),
> +
> +/* wctype: pages U+0f800,10300 [words 84-86] */
> +BYTES(0x80000000),21,1,21,15,BYTES(0x0c080030),
> +
> +/* wctype: pages U+0fe00,11300 [words 87-90] */
> +BYTES(0x80002d59),19,247,97,21,31,117,64,48,BYTES(0x0000e280),
> +
> +/* wctype: pages U+10200,11100 [words 91-94] */
> +BYTES(0x90000000),75,31,254,208,113,56,15,24,BYTES(0xfa00c3c0),
> +
> +/* wctype: pages U+10800,1f900 [words 95-98] */
> +BYTES(0x8030cc00),128,128,128,240,145,143,141,139,BYTES(0x56659556),
> +
> +/* wctype: pages U+10a00,16b00 [words 99-103] */
> +BYTES(0xe2088a80),103,105,105,192,192,2,107,127,0,3,240,48,
> +BYTES(0x00003b40),
> +
> +/* wctype: pages U+10c00,1d700 [words 104-107] */
> +BYTES(0x80000000),248,8,4,4,21,21,32,32,BYTES(0x032222cc),
> +
> +/* wctype: pages U+10e00,1f700 [words 108-110] */
> +BYTES(0x00009000),1,75,105,15,BYTES(0x2955d555),
> +
> +/* wctype: pages U+11000,02d00 [words 111-114] */
> +BYTES(0x0283be00),109,252,63,21,3,252,111,71,BYTES(0x00008000),
> +
> +/* wctype: pages U+11200,03100 [words 115-117] */
> +BYTES(0x20200080),115,4,12,15,BYTES(0x35040000),
> +
> +/* wctype: pages U+11400,0a900 [words 118-121] */
> +BYTES(0x03000a00),119,121,76,128,93,8,91,240,BYTES(0x0ac00820),
> +
> +/* wctype: pages U+11600,11500 [words 122-125] */
> +BYTES(0x00802380),21,14,31,123,0,0,45,21,BYTES(0x09800000),
> +
> +/* wctype: pages U+11800,0ff00 [words 126-130] */
> +BYTES(0xe0000080),28,248,7,96,99,63,240,1,240,1,248,254,
> +BYTES(0xa0003bbb),
> +
> +/* wctype: pages U+11a00,11700 [words 131-134] */
> +BYTES(0x00380280),125,45,190,7,0,0,248,16,BYTES(0x000000a0),
> +
> +/* wctype: pages U+11c00,11d00 [words 135-138] */
> +BYTES(0x0000eb80),21,62,248,31,3,0,127,52,BYTES(0x00080300),
> +
> +/* wctype: pages U+11e00,1d100 [words 139-141] */
> +BYTES(0x80000000),129,0,105,135,BYTES(0x25555565),
> +
> +/* wctype: pages U+12400,1d300 [words 142-144] */
> +BYTES(0x0000c000),31,0,105,127,BYTES(0x00009d55),
> +
> +/* wctype: pages U+13400,1e100 [words 145-147] */
> +BYTES(0x00000080),105,0,21,127,BYTES(0x000002c0),
> +
> +/* wctype: pages U+16a00,1e900 [words 148-150] */
> +BYTES(0xc0002000),128,63,128,137,BYTES(0x00000a00),
> +
> +/* wctype: pages U+16e00,1ed00 [words 151-153] */
> +BYTES(0x00090000),13,0,93,254,BYTES(0x00000097),
> +
> +/* wctype: pages U+1bc00,1f100 [words 154-157] */
> +BYTES(0x00380000),133,15,192,31,248,56,248,31,BYTES(0x70262216),
> +
> +/* wctype: pages U+1d000,10500 [words 158-160] */
> +BYTES(0xd5555555),63,0,0,21,BYTES(0x00002000),
> +
> +/* wctype: pages U+1d200,10b00 [words 161-164] */
> +BYTES(0xd0000355),63,15,0,252,60,254,254,252,BYTES(0x00288880),
> +
> +/* wctype: pages U+1d600,11900 [words 165-167] */
> +BYTES(0x8b000000),2,16,16,5,BYTES(0x30000000),
> +
> +/* wctype: pages U+1da00,11f00 [words 168-170] */
> +BYTES(0x003a5555),75,240,254,131,BYTES(0x95000000),
> +
> +/* wctype: pages U+1e200,16f00 [words 171-173] */
> +BYTES(0xa0000000),224,21,0,4,BYTES(0x30000000),
> +
> +/* wctype: pages U+1e800,1ec00 [words 174-176] */
> +BYTES(0x0f000000),128,127,0,0,
> +/* wctype: pages U+1ec00,1ee00 [words 176-178] */
> +BYTES(0x00d5c000),254,31,0,0,
> +/* wctype: pages U+1ee00,1f000 [words 178-180] */
> +BYTES(0xc0000000),3,0,0,0,
> +/* wctype: pages U+1f000,1f200 [words 180-183] */
> +BYTES(0xdfed5565),75,15,1,254,254,254,63,0,
> +/* wctype: pages U+1f200,1f600 [words 183-186] */
> +BYTES(0x00003e97),7,75,105,3,63,0,0,0,
> +/* wctype: pages U+1f600,1f800 [words 186-188] */
> +BYTES(0xad555555),63,31,13,0,
> +/* wctype: pages U+1f800,1fa00 [words 188-191] */
> +BYTES(0x00265a56),75,45,19,45,93,0,0,0,
> +/* wctype: pages U+1fa00,1fa00 [words 191-195] */
> +BYTES(0x000fad55),15,93,147,7,63,0,0,0,0,0,0,0,
> diff --git a/src/ctype/punct.h b/src/ctype/punct.h
> deleted file mode 100644
> index 6792947..0000000
> --- a/src/ctype/punct.h
> +++ /dev/null
> @@ -1,141 +0,0 @@
>
> -18,16,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,16,16,34,35,16,36,37,38,39,
>
> -40,41,42,43,16,44,45,46,17,17,47,17,17,17,17,17,17,48,49,50,51,52,53,54,55,17,
>
> -16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,56,
>
> -16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,
>
> -16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,
>
> -16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,
>
> -16,16,16,16,16,16,16,16,57,16,58,59,60,61,62,63,16,16,16,16,16,16,16,16,16,16,
>
> -16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,
>
> -16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,64,16,16,16,16,16,16,16,16,16,
> -16,16,16,16,16,16,16,16,16,16,16,16,16,16,65,16,16,66,16,67,68,
>
> -69,16,70,71,72,16,73,16,16,74,75,76,77,78,16,79,80,81,82,83,84,85,86,87,88,89,
>
> -90,91,16,92,93,94,95,16,16,16,16,96,16,16,16,16,16,16,16,16,16,16,16,16,16,16,
>
> -16,97,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,
>
> -16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,
>
> -16,16,16,98,99,16,16,100,101,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,
>
> -16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,
>
> -16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,
>
> -16,16,16,16,16,16,16,16,102,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,
>
> -16,16,16,103,104,105,106,16,16,107,108,17,17,109,16,16,16,16,16,16,110,111,16,
>
> -16,16,16,16,112,113,16,16,114,115,116,16,117,118,119,17,17,17,120,121,122,123,
> -124,16,16,16,16,
>
> -16,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,255,255,
>
> -255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,
>
> -255,255,255,255,255,255,255,255,255,255,255,0,0,0,0,254,255,0,252,1,0,0,248,1,
>
> -0,0,120,0,0,0,0,255,251,223,251,0,0,128,0,0,0,128,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
>
> -0,0,0,0,0,0,0,0,0,0,0,60,0,252,255,224,175,255,255,255,255,255,255,255,255,
>
> -255,255,223,255,255,255,255,255,32,64,176,0,0,0,0,0,0,0,0,0,0,0,0,0,64,0,0,0,
>
> -0,0,0,0,0,0,0,0,0,0,0,0,0,0,252,3,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
>
> -0,0,0,252,0,0,0,0,0,230,254,255,255,255,0,64,73,0,0,0,0,0,24,0,255,255,0,216,
> -0,0,0,0,0,0,0,1,0,60,0,0,0,0,0,0,0,0,0,0,0,0,16,224,1,30,0,
>
> -96,255,191,0,0,0,0,0,0,255,7,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,248,207,
>
> -227,0,0,0,3,0,32,255,127,0,0,0,78,0,0,0,0,0,0,0,0,0,0,0,0,0,0,8,0,7,252,0,0,0,
>
> -0,0,0,0,0,0,16,0,32,30,0,48,0,1,0,0,0,0,0,0,0,0,16,0,32,0,0,0,0,252,111,0,0,0,
>
> -0,0,0,0,16,0,32,0,0,0,0,64,0,0,0,0,0,0,0,0,16,0,32,0,0,0,0,3,224,0,0,0,0,0,0,
>
> -0,16,0,32,0,0,0,0,253,0,0,0,0,0,0,0,0,0,0,32,0,0,0,0,255,7,16,0,0,0,0,0,0,0,0,
>
> -32,0,0,0,0,128,255,16,0,0,0,0,0,0,16,0,32,0,0,0,0,0,0,0,0,0,0,0,0,0,24,0,160,
>
> -0,127,0,0,255,3,0,0,0,0,0,0,0,0,0,4,0,0,0,0,16,0,0,0,0,0,0,128,0,128,192,223,
> -0,12,0,0,0,0,0,0,0,0,0,0,0,4,0,31,0,0,0,0,0,
>
> -0,254,255,255,255,0,252,255,255,0,0,0,0,0,0,0,0,252,0,0,0,0,0,0,192,255,223,
>
> -255,7,0,0,0,0,0,0,0,0,0,0,128,6,0,252,0,0,0,0,0,0,0,0,0,192,0,0,0,0,0,0,0,0,0,
>
> -0,0,8,0,0,0,0,0,0,0,0,0,0,0,224,255,255,255,31,0,0,255,3,0,0,0,0,0,0,0,0,0,0,
>
> -0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
>
> -0,0,0,0,0,0,0,0,96,0,0,1,0,0,24,0,0,0,0,0,0,0,0,0,56,0,0,0,0,16,0,0,0,112,0,0,
>
> -0,0,0,0,0,0,0,0,0,0,0,0,0,48,0,0,254,127,47,0,0,255,3,255,127,0,0,0,0,0,0,0,0,
>
> -0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,14,49,0,0,0,0,0,0,0,
> -0,0,0,0,0,0,0,0,0,0,0,196,255,255,255,
>
> -255,0,0,0,192,0,0,0,0,0,0,0,0,1,0,224,159,0,0,0,0,127,63,255,127,0,0,0,0,0,0,
>
> -0,0,0,0,0,0,0,0,16,0,16,0,0,252,255,255,255,31,0,0,0,0,0,12,0,0,0,0,0,0,64,0,
>
> -12,240,0,0,0,0,0,0,128,248,0,0,0,0,0,0,0,192,0,0,0,0,0,0,0,0,255,0,255,255,
>
> -255,33,144,3,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,255,255,255,255,
>
> -127,0,224,251,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,160,3,224,0,224,0,
>
> -224,0,96,128,248,255,255,255,252,255,255,255,255,255,127,223,255,241,127,255,
>
> -127,0,0,255,255,255,255,0,0,255,255,255,255,1,0,123,3,208,193,175,66,0,12,31,
>
> -188,255,255,0,0,0,0,0,14,255,255,255,255,255,255,255,255,255,255,255,255,255,
>
> -255,255,255,255,255,127,0,0,0,255,7,0,0,255,255,255,255,255,255,255,255,255,
> -255,63,0,0,0,0,0,0,252,255,
>
> -255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,207,255,255,255,
>
> -63,255,255,255,255,255,255,255,255,255,255,255,255,255,0,0,0,0,0,0,0,0,0,0,0,
>
> -0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,224,135,3,254,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,
>
> -128,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,255,255,255,255,255,127,255,255,255,255,0,
>
> -0,0,0,0,0,255,255,255,251,255,255,255,255,255,255,255,255,255,255,15,0,255,
>
> -255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,
>
> -255,255,255,255,255,255,63,0,0,0,255,15,30,255,255,255,1,252,193,224,0,0,0,0,
>
> -0,0,0,0,0,0,0,30,1,0,0,0,0,0,0,0,0,0,0,8,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
>
> -255,255,0,0,0,0,255,255,255,255,15,0,0,0,255,255,255,127,255,255,255,255,255,
>
> -255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,
> -255,255,255,
>
> -255,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,255,255,255,255,255,255,
>
> -255,255,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,255,255,255,255,255,255,127,0,0,0,
>
> -0,0,0,192,0,224,0,0,0,0,0,0,0,0,0,0,0,128,15,112,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
>
> -255,0,255,255,127,0,3,0,0,0,0,0,0,0,0,0,0,0,0,6,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
>
> -64,0,0,0,0,15,255,3,0,0,0,0,0,0,240,0,0,0,0,0,0,0,0,0,16,192,0,0,255,255,3,23,
>
> -0,0,0,0,0,248,0,0,0,0,8,128,0,0,0,0,0,0,0,0,0,0,8,0,255,63,0,192,0,0,0,0,0,0,
>
> -0,0,0,0,0,0,0,0,0,240,0,0,128,3,0,0,0,0,0,0,0,128,2,0,0,192,0,0,67,0,0,0,0,0,
> -0,0,0,0,0,0,0,8,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,56,0,
>
> -0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
>
> -0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,128,0,0,0,0,0,2,0,0,0,0,0,0,
>
> -0,0,0,0,0,0,0,0,0,0,252,255,3,0,0,0,0,0,0,0,0,0,0,0,0,0,0,192,0,0,0,0,0,0,0,0,
>
> -0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,48,255,255,255,3,255,255,255,255,255,255,247,
>
> -255,127,15,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,128,254,255,0,252,1,0,0,248,1,0,
>
> -0,248,63,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,127,127,0,48,135,255,255,255,255,255,
>
> -143,255,0,0,0,0,0,0,224,255,255,127,255,15,1,0,0,0,0,0,255,255,255,255,255,63,
> -0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,255,255,255,
>
> -15,0,0,0,0,15,0,0,0,0,0,0,0,0,0,0,0,0,0,0,128,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,
>
> -0,0,0,0,0,0,0,0,0,128,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
>
> -128,255,0,0,128,255,0,0,0,0,128,255,0,0,0,0,0,0,0,0,0,248,0,0,192,143,0,0,0,
>
> -128,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,48,255,255,252,255,255,255,255,255,0,0,0,0,
>
> -0,0,0,135,255,1,255,1,0,0,0,224,0,0,0,224,0,0,0,0,0,1,0,0,96,248,127,0,0,0,0,
>
> -0,0,0,0,254,0,0,0,255,0,0,0,255,0,0,0,30,0,254,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
>
> -0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,252,0,0,0,0,0,0,0,0,0,0,0,
> -0,255,255,255,127,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
>
> -0,0,0,0,224,127,0,0,0,192,255,255,3,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
>
> -0,0,0,0,0,0,0,192,63,252,255,63,0,0,128,3,0,0,0,0,0,0,254,3,32,0,0,0,0,0,0,0,
>
> -0,0,0,0,0,24,0,15,0,0,0,0,0,56,0,0,0,0,0,0,0,0,0,225,63,0,232,254,255,31,0,0,
>
> -0,0,0,0,0,96,63,0,0,0,0,0,0,0,0,0,0,0,0,0,2,0,0,0,0,0,0,0,6,0,0,0,0,0,0,0,0,0,
>
> -24,0,32,0,0,192,31,31,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,68,
>
> -248,0,104,0,0,0,0,0,0,0,0,0,0,0,0,76,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
>
> -0,0,0,0,0,0,0,0,0,0,128,255,255,255,0,0,0,0,0,0,0,0,0,0,0,0,128,14,0,0,0,255,
> -31,0,0,0,0,0,0,0,0,192,0,0,0,0,0,0,0,0,
>
> -0,0,0,0,0,0,8,0,252,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
>
> -0,0,14,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,252,7,0,0,0,0,0,0,0,0,0,0,0,
>
> -0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,5,0,0,0,0,0,0,0,0,0,24,128,255,0,0,0,0,0,
>
> -0,0,0,0,0,223,7,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,128,62,0,0,252,255,31,3,0,
>
> -0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,52,0,0,0,0,0,0,0,0,0,128,0,0,
>
> -0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
>
> -0,0,128,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,255,255,255,255,255,
> -255,3,
>
> -128,0,0,0,0,0,0,0,0,0,0,0,0,0,0,31,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
>
> -0,0,255,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
>
> -0,0,0,192,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,63,0,0,0,0,0,0,0,255,255,48,0,0,248,
>
> -3,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,255,
>
> -255,255,7,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
>
> -0,0,0,0,0,0,4,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,176,15,0,0,0,0,0,0,
>
> -0,0,0,0,0,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,
> -255,255,255,255,255,255,255,255,255,255,255,255,255,63,
>
> -0,255,255,255,255,127,254,255,255,255,255,255,255,255,255,255,255,255,255,255,
>
> -255,255,255,255,255,255,255,255,255,255,1,0,0,255,255,255,255,255,255,255,255,
>
> -63,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,255,255,15,0,255,255,255,255,255,255,
>
> -255,255,255,255,127,0,255,255,255,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
>
> -0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,2,0,0,8,0,0,0,8,0,0,32,0,0,0,32,0,0,128,
>
> -0,0,0,128,0,0,0,2,0,0,0,2,0,0,8,0,0,0,0,0,0,0,255,255,255,255,255,255,255,255,
>
> -255,255,255,255,255,255,255,255,255,15,0,248,254,255,0,0,0,0,0,0,0,0,0,0,0,0,
>
> -0,0,0,0,127,0,0,128,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
> -0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,240,0,
>
> -128,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,128,255,127,0,0,0,0,0,0,0,
>
> -0,0,0,0,0,0,112,7,0,192,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
>
> -0,0,0,0,0,0,0,254,255,255,255,255,255,255,255,31,0,0,0,0,0,0,0,0,0,254,255,
>
> -255,255,255,255,255,63,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
>
> -0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,3,0,255,255,255,255,255,
>
> -15,255,255,255,255,255,255,255,255,255,255,255,255,15,0,255,127,254,255,254,
>
> -255,254,255,255,255,63,0,255,31,255,255,255,255,0,0,0,252,0,0,0,28,0,0,0,252,
>
> -255,255,255,31,0,0,0,0,0,0,192,255,255,255,7,0,255,255,255,255,255,15,255,1,3,
> -0,63,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
>
> -0,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,
>
> -255,255,255,255,255,255,255,63,0,255,31,255,7,255,255,255,255,255,255,255,255,
>
> -255,255,255,255,255,255,15,0,255,255,255,255,255,255,255,255,255,255,255,1,
>
> -255,15,0,0,255,15,255,255,255,255,255,255,255,0,255,3,255,255,255,255,255,0,
>
> -255,255,255,63,0,0,0,0,0,0,0,0,0,0,255,239,255,255,255,255,255,255,255,255,
>
> -255,255,255,255,123,252,255,255,255,255,231,199,255,255,255,231,255,255,255,
>
> -255,255,255,255,255,255,255,255,255,255,255,255,255,15,0,255,63,15,7,7,0,63,0,
> -0,0,0,0,0,0,0,0,0,0,0,0,
> --
> 2.51.2
>
>

Content of type "text/html" skipped

View attachment "gen_ctype.c" of type "text/x-csrc" (9734 bytes)

Powered by blists - more mailing lists

Confused about mailing lists and their use? Read about mailing lists on Wikipedia and check out these guidelines on proper formatting of your messages.