"Fossies" - the Fresh Open Source Software Archive

Member "xorriso-1.5.4/libisofs/hfsplus_decompose_test.c" (30 Jan 2021, 42145 Bytes) of package /linux/misc/xorriso-1.5.4.pl02.tar.gz:


As a special service "Fossies" has tried to format the requested source page into HTML format using (guessed) C and C++ source code syntax highlighting (style: standard) with prefixed line numbers and code folding option. Alternatively you can here view or download the uninterpreted source code file. For more information about "hfsplus_decompose_test.c" see the Fossies "Dox" file reference documentation.

    1 /*
    2 cc -g -o demo/decompose libisofs/hfsplus_decompose_test.c
    3 */
    4 #include <stdint.h>
    5 #include <string.h>
    6 #include <stdio.h>
    7 
    8 
    9 #ifdef HAVE_CONFIG_H
   10 #include "../config.h"
   11 #endif
   12 
   13 #include "hfsplus.h"
   14 
   15 /* ====== Copy of original class pages : hfsplus_decompose_pages_old ======= */
   16 
   17 /*
   18   Cased on tn1150 (HFS+ format specification)
   19 */
   20 
   21 
   22 static const uint16_t page00[256][HFSPLUS_MAX_DECOMPOSE_LEN + 1] = {
   23   [0xc0] = { 0x0041, 0x0300, 0x0000 },
   24   [0xc1] = { 0x0041, 0x0301, 0x0000 },
   25   [0xc2] = { 0x0041, 0x0302, 0x0000 },
   26   [0xc3] = { 0x0041, 0x0303, 0x0000 },
   27   [0xc4] = { 0x0041, 0x0308, 0x0000 },
   28   [0xc5] = { 0x0041, 0x030A, 0x0000 },
   29   [0xc7] = { 0x0043, 0x0327, 0x0000 },
   30   [0xc8] = { 0x0045, 0x0300, 0x0000 },
   31   [0xc9] = { 0x0045, 0x0301, 0x0000 },
   32   [0xca] = { 0x0045, 0x0302, 0x0000 },
   33   [0xcb] = { 0x0045, 0x0308, 0x0000 },
   34   [0xcc] = { 0x0049, 0x0300, 0x0000 },
   35   [0xcd] = { 0x0049, 0x0301, 0x0000 },
   36   [0xce] = { 0x0049, 0x0302, 0x0000 },
   37   [0xcf] = { 0x0049, 0x0308, 0x0000 },
   38   [0xd1] = { 0x004E, 0x0303, 0x0000 },
   39   [0xd2] = { 0x004F, 0x0300, 0x0000 },
   40   [0xd3] = { 0x004F, 0x0301, 0x0000 },
   41   [0xd4] = { 0x004F, 0x0302, 0x0000 },
   42   [0xd5] = { 0x004F, 0x0303, 0x0000 },
   43   [0xd6] = { 0x004F, 0x0308, 0x0000 },
   44   [0xd9] = { 0x0055, 0x0300, 0x0000 },
   45   [0xda] = { 0x0055, 0x0301, 0x0000 },
   46   [0xdb] = { 0x0055, 0x0302, 0x0000 },
   47   [0xdc] = { 0x0055, 0x0308, 0x0000 },
   48   [0xdd] = { 0x0059, 0x0301, 0x0000 },
   49   [0xe0] = { 0x0061, 0x0300, 0x0000 },
   50   [0xe1] = { 0x0061, 0x0301, 0x0000 },
   51   [0xe2] = { 0x0061, 0x0302, 0x0000 },
   52   [0xe3] = { 0x0061, 0x0303, 0x0000 },
   53   [0xe4] = { 0x0061, 0x0308, 0x0000 },
   54   [0xe5] = { 0x0061, 0x030A, 0x0000 },
   55   [0xe7] = { 0x0063, 0x0327, 0x0000 },
   56   [0xe8] = { 0x0065, 0x0300, 0x0000 },
   57   [0xe9] = { 0x0065, 0x0301, 0x0000 },
   58   [0xea] = { 0x0065, 0x0302, 0x0000 },
   59   [0xeb] = { 0x0065, 0x0308, 0x0000 },
   60   [0xec] = { 0x0069, 0x0300, 0x0000 },
   61   [0xed] = { 0x0069, 0x0301, 0x0000 },
   62   [0xee] = { 0x0069, 0x0302, 0x0000 },
   63   [0xef] = { 0x0069, 0x0308, 0x0000 },
   64   [0xf1] = { 0x006E, 0x0303, 0x0000 },
   65   [0xf2] = { 0x006F, 0x0300, 0x0000 },
   66   [0xf3] = { 0x006F, 0x0301, 0x0000 },
   67   [0xf4] = { 0x006F, 0x0302, 0x0000 },
   68   [0xf5] = { 0x006F, 0x0303, 0x0000 },
   69   [0xf6] = { 0x006F, 0x0308, 0x0000 },
   70   [0xf9] = { 0x0075, 0x0300, 0x0000 },
   71   [0xfa] = { 0x0075, 0x0301, 0x0000 },
   72   [0xfb] = { 0x0075, 0x0302, 0x0000 },
   73   [0xfc] = { 0x0075, 0x0308, 0x0000 },
   74   [0xfd] = { 0x0079, 0x0301, 0x0000 },
   75   [0xff] = { 0x0079, 0x0308, 0x0000 },
   76 };
   77 
   78 static const uint16_t page01[256][HFSPLUS_MAX_DECOMPOSE_LEN + 1] = {
   79   [0x00] = { 0x0041, 0x0304, 0x0000 },
   80   [0x01] = { 0x0061, 0x0304, 0x0000 },
   81   [0x02] = { 0x0041, 0x0306, 0x0000 },
   82   [0x03] = { 0x0061, 0x0306, 0x0000 },
   83   [0x04] = { 0x0041, 0x0328, 0x0000 },
   84   [0x05] = { 0x0061, 0x0328, 0x0000 },
   85   [0x06] = { 0x0043, 0x0301, 0x0000 },
   86   [0x07] = { 0x0063, 0x0301, 0x0000 },
   87   [0x08] = { 0x0043, 0x0302, 0x0000 },
   88   [0x09] = { 0x0063, 0x0302, 0x0000 },
   89   [0x0a] = { 0x0043, 0x0307, 0x0000 },
   90   [0x0b] = { 0x0063, 0x0307, 0x0000 },
   91   [0x0c] = { 0x0043, 0x030C, 0x0000 },
   92   [0x0d] = { 0x0063, 0x030C, 0x0000 },
   93   [0x0e] = { 0x0044, 0x030C, 0x0000 },
   94   [0x0f] = { 0x0064, 0x030C, 0x0000 },
   95   [0x12] = { 0x0045, 0x0304, 0x0000 },
   96   [0x13] = { 0x0065, 0x0304, 0x0000 },
   97   [0x14] = { 0x0045, 0x0306, 0x0000 },
   98   [0x15] = { 0x0065, 0x0306, 0x0000 },
   99   [0x16] = { 0x0045, 0x0307, 0x0000 },
  100   [0x17] = { 0x0065, 0x0307, 0x0000 },
  101   [0x18] = { 0x0045, 0x0328, 0x0000 },
  102   [0x19] = { 0x0065, 0x0328, 0x0000 },
  103   [0x1a] = { 0x0045, 0x030C, 0x0000 },
  104   [0x1b] = { 0x0065, 0x030C, 0x0000 },
  105   [0x1c] = { 0x0047, 0x0302, 0x0000 },
  106   [0x1d] = { 0x0067, 0x0302, 0x0000 },
  107   [0x1e] = { 0x0047, 0x0306, 0x0000 },
  108   [0x1f] = { 0x0067, 0x0306, 0x0000 },
  109   [0x20] = { 0x0047, 0x0307, 0x0000 },
  110   [0x21] = { 0x0067, 0x0307, 0x0000 },
  111   [0x22] = { 0x0047, 0x0327, 0x0000 },
  112   [0x23] = { 0x0067, 0x0327, 0x0000 },
  113   [0x24] = { 0x0048, 0x0302, 0x0000 },
  114   [0x25] = { 0x0068, 0x0302, 0x0000 },
  115   [0x28] = { 0x0049, 0x0303, 0x0000 },
  116   [0x29] = { 0x0069, 0x0303, 0x0000 },
  117   [0x2a] = { 0x0049, 0x0304, 0x0000 },
  118   [0x2b] = { 0x0069, 0x0304, 0x0000 },
  119   [0x2c] = { 0x0049, 0x0306, 0x0000 },
  120   [0x2d] = { 0x0069, 0x0306, 0x0000 },
  121   [0x2e] = { 0x0049, 0x0328, 0x0000 },
  122   [0x2f] = { 0x0069, 0x0328, 0x0000 },
  123   [0x30] = { 0x0049, 0x0307, 0x0000 },
  124   [0x34] = { 0x004A, 0x0302, 0x0000 },
  125   [0x35] = { 0x006A, 0x0302, 0x0000 },
  126   [0x36] = { 0x004B, 0x0327, 0x0000 },
  127   [0x37] = { 0x006B, 0x0327, 0x0000 },
  128   [0x39] = { 0x004C, 0x0301, 0x0000 },
  129   [0x3a] = { 0x006C, 0x0301, 0x0000 },
  130   [0x3b] = { 0x004C, 0x0327, 0x0000 },
  131   [0x3c] = { 0x006C, 0x0327, 0x0000 },
  132   [0x3d] = { 0x004C, 0x030C, 0x0000 },
  133   [0x3e] = { 0x006C, 0x030C, 0x0000 },
  134   [0x43] = { 0x004E, 0x0301, 0x0000 },
  135   [0x44] = { 0x006E, 0x0301, 0x0000 },
  136   [0x45] = { 0x004E, 0x0327, 0x0000 },
  137   [0x46] = { 0x006E, 0x0327, 0x0000 },
  138   [0x47] = { 0x004E, 0x030C, 0x0000 },
  139   [0x48] = { 0x006E, 0x030C, 0x0000 },
  140   [0x4c] = { 0x004F, 0x0304, 0x0000 },
  141   [0x4d] = { 0x006F, 0x0304, 0x0000 },
  142   [0x4e] = { 0x004F, 0x0306, 0x0000 },
  143   [0x4f] = { 0x006F, 0x0306, 0x0000 },
  144   [0x50] = { 0x004F, 0x030B, 0x0000 },
  145   [0x51] = { 0x006F, 0x030B, 0x0000 },
  146   [0x54] = { 0x0052, 0x0301, 0x0000 },
  147   [0x55] = { 0x0072, 0x0301, 0x0000 },
  148   [0x56] = { 0x0052, 0x0327, 0x0000 },
  149   [0x57] = { 0x0072, 0x0327, 0x0000 },
  150   [0x58] = { 0x0052, 0x030C, 0x0000 },
  151   [0x59] = { 0x0072, 0x030C, 0x0000 },
  152   [0x5a] = { 0x0053, 0x0301, 0x0000 },
  153   [0x5b] = { 0x0073, 0x0301, 0x0000 },
  154   [0x5c] = { 0x0053, 0x0302, 0x0000 },
  155   [0x5d] = { 0x0073, 0x0302, 0x0000 },
  156   [0x5e] = { 0x0053, 0x0327, 0x0000 },
  157   [0x5f] = { 0x0073, 0x0327, 0x0000 },
  158   [0x60] = { 0x0053, 0x030C, 0x0000 },
  159   [0x61] = { 0x0073, 0x030C, 0x0000 },
  160   [0x62] = { 0x0054, 0x0327, 0x0000 },
  161   [0x63] = { 0x0074, 0x0327, 0x0000 },
  162   [0x64] = { 0x0054, 0x030C, 0x0000 },
  163   [0x65] = { 0x0074, 0x030C, 0x0000 },
  164   [0x68] = { 0x0055, 0x0303, 0x0000 },
  165   [0x69] = { 0x0075, 0x0303, 0x0000 },
  166   [0x6a] = { 0x0055, 0x0304, 0x0000 },
  167   [0x6b] = { 0x0075, 0x0304, 0x0000 },
  168   [0x6c] = { 0x0055, 0x0306, 0x0000 },
  169   [0x6d] = { 0x0075, 0x0306, 0x0000 },
  170   [0x6e] = { 0x0055, 0x030A, 0x0000 },
  171   [0x6f] = { 0x0075, 0x030A, 0x0000 },
  172   [0x70] = { 0x0055, 0x030B, 0x0000 },
  173   [0x71] = { 0x0075, 0x030B, 0x0000 },
  174   [0x72] = { 0x0055, 0x0328, 0x0000 },
  175   [0x73] = { 0x0075, 0x0328, 0x0000 },
  176   [0x74] = { 0x0057, 0x0302, 0x0000 },
  177   [0x75] = { 0x0077, 0x0302, 0x0000 },
  178   [0x76] = { 0x0059, 0x0302, 0x0000 },
  179   [0x77] = { 0x0079, 0x0302, 0x0000 },
  180   [0x78] = { 0x0059, 0x0308, 0x0000 },
  181   [0x79] = { 0x005A, 0x0301, 0x0000 },
  182   [0x7a] = { 0x007A, 0x0301, 0x0000 },
  183   [0x7b] = { 0x005A, 0x0307, 0x0000 },
  184   [0x7c] = { 0x007A, 0x0307, 0x0000 },
  185   [0x7d] = { 0x005A, 0x030C, 0x0000 },
  186   [0x7e] = { 0x007A, 0x030C, 0x0000 },
  187   [0xa0] = { 0x004F, 0x031B, 0x0000 },
  188   [0xa1] = { 0x006F, 0x031B, 0x0000 },
  189   [0xaf] = { 0x0055, 0x031B, 0x0000 },
  190   [0xb0] = { 0x0075, 0x031B, 0x0000 },
  191   [0xcd] = { 0x0041, 0x030C, 0x0000 },
  192   [0xce] = { 0x0061, 0x030C, 0x0000 },
  193   [0xcf] = { 0x0049, 0x030C, 0x0000 },
  194   [0xd0] = { 0x0069, 0x030C, 0x0000 },
  195   [0xd1] = { 0x004F, 0x030C, 0x0000 },
  196   [0xd2] = { 0x006F, 0x030C, 0x0000 },
  197   [0xd3] = { 0x0055, 0x030C, 0x0000 },
  198   [0xd4] = { 0x0075, 0x030C, 0x0000 },
  199   [0xd5] = { 0x0055, 0x0308, 0x0304, 0x0000 },
  200   [0xd6] = { 0x0075, 0x0308, 0x0304, 0x0000 },
  201   [0xd7] = { 0x0055, 0x0308, 0x0301, 0x0000 },
  202   [0xd8] = { 0x0075, 0x0308, 0x0301, 0x0000 },
  203   [0xd9] = { 0x0055, 0x0308, 0x030C, 0x0000 },
  204   [0xda] = { 0x0075, 0x0308, 0x030C, 0x0000 },
  205   [0xdb] = { 0x0055, 0x0308, 0x0300, 0x0000 },
  206   [0xdc] = { 0x0075, 0x0308, 0x0300, 0x0000 },
  207   [0xde] = { 0x0041, 0x0308, 0x0304, 0x0000 },
  208   [0xdf] = { 0x0061, 0x0308, 0x0304, 0x0000 },
  209   [0xe0] = { 0x0041, 0x0307, 0x0304, 0x0000 },
  210   [0xe1] = { 0x0061, 0x0307, 0x0304, 0x0000 },
  211   [0xe2] = { 0x00C6, 0x0304, 0x0000 },
  212   [0xe3] = { 0x00E6, 0x0304, 0x0000 },
  213   [0xe6] = { 0x0047, 0x030C, 0x0000 },
  214   [0xe7] = { 0x0067, 0x030C, 0x0000 },
  215   [0xe8] = { 0x004B, 0x030C, 0x0000 },
  216   [0xe9] = { 0x006B, 0x030C, 0x0000 },
  217   [0xea] = { 0x004F, 0x0328, 0x0000 },
  218   [0xeb] = { 0x006F, 0x0328, 0x0000 },
  219   [0xec] = { 0x004F, 0x0328, 0x0304, 0x0000 },
  220   [0xed] = { 0x006F, 0x0328, 0x0304, 0x0000 },
  221   [0xee] = { 0x01B7, 0x030C, 0x0000 },
  222   [0xef] = { 0x0292, 0x030C, 0x0000 },
  223   [0xf0] = { 0x006A, 0x030C, 0x0000 },
  224   [0xf4] = { 0x0047, 0x0301, 0x0000 },
  225   [0xf5] = { 0x0067, 0x0301, 0x0000 },
  226   [0xfa] = { 0x0041, 0x030A, 0x0301, 0x0000 },
  227   [0xfb] = { 0x0061, 0x030A, 0x0301, 0x0000 },
  228   [0xfc] = { 0x00C6, 0x0301, 0x0000 },
  229   [0xfd] = { 0x00E6, 0x0301, 0x0000 },
  230   [0xfe] = { 0x00D8, 0x0301, 0x0000 },
  231   [0xff] = { 0x00F8, 0x0301, 0x0000 },
  232 };
  233 
  234 static const uint16_t page02[256][HFSPLUS_MAX_DECOMPOSE_LEN + 1] = {
  235   [0x00] = { 0x0041, 0x030F, 0x0000 },
  236   [0x01] = { 0x0061, 0x030F, 0x0000 },
  237   [0x02] = { 0x0041, 0x0311, 0x0000 },
  238   [0x03] = { 0x0061, 0x0311, 0x0000 },
  239   [0x04] = { 0x0045, 0x030F, 0x0000 },
  240   [0x05] = { 0x0065, 0x030F, 0x0000 },
  241   [0x06] = { 0x0045, 0x0311, 0x0000 },
  242   [0x07] = { 0x0065, 0x0311, 0x0000 },
  243   [0x08] = { 0x0049, 0x030F, 0x0000 },
  244   [0x09] = { 0x0069, 0x030F, 0x0000 },
  245   [0x0a] = { 0x0049, 0x0311, 0x0000 },
  246   [0x0b] = { 0x0069, 0x0311, 0x0000 },
  247   [0x0c] = { 0x004F, 0x030F, 0x0000 },
  248   [0x0d] = { 0x006F, 0x030F, 0x0000 },
  249   [0x0e] = { 0x004F, 0x0311, 0x0000 },
  250   [0x0f] = { 0x006F, 0x0311, 0x0000 },
  251   [0x10] = { 0x0052, 0x030F, 0x0000 },
  252   [0x11] = { 0x0072, 0x030F, 0x0000 },
  253   [0x12] = { 0x0052, 0x0311, 0x0000 },
  254   [0x13] = { 0x0072, 0x0311, 0x0000 },
  255   [0x14] = { 0x0055, 0x030F, 0x0000 },
  256   [0x15] = { 0x0075, 0x030F, 0x0000 },
  257   [0x16] = { 0x0055, 0x0311, 0x0000 },
  258   [0x17] = { 0x0075, 0x0311, 0x0000 },
  259 };
  260 
  261 static const uint16_t page03[256][HFSPLUS_MAX_DECOMPOSE_LEN + 1] = {
  262   [0x10] = { 0x0306, 0x0307, 0x0000 },
  263   [0x40] = { 0x0300, 0x0000 },
  264   [0x41] = { 0x0301, 0x0000 },
  265   [0x43] = { 0x0313, 0x0000 },
  266   [0x44] = { 0x0308, 0x030D, 0x0000 },
  267   [0x74] = { 0x02B9, 0x0000 },
  268   [0x7e] = { 0x003B, 0x0000 },
  269   [0x85] = { 0x00A8, 0x030D, 0x0000 },
  270   [0x86] = { 0x0391, 0x030D, 0x0000 },
  271   [0x87] = { 0x00B7, 0x0000 },
  272   [0x88] = { 0x0395, 0x030D, 0x0000 },
  273   [0x89] = { 0x0397, 0x030D, 0x0000 },
  274   [0x8a] = { 0x0399, 0x030D, 0x0000 },
  275   [0x8c] = { 0x039F, 0x030D, 0x0000 },
  276   [0x8e] = { 0x03A5, 0x030D, 0x0000 },
  277   [0x8f] = { 0x03A9, 0x030D, 0x0000 },
  278   [0x90] = { 0x03B9, 0x0308, 0x030D, 0x0000 },
  279   [0xaa] = { 0x0399, 0x0308, 0x0000 },
  280   [0xab] = { 0x03A5, 0x0308, 0x0000 },
  281   [0xac] = { 0x03B1, 0x030D, 0x0000 },
  282   [0xad] = { 0x03B5, 0x030D, 0x0000 },
  283   [0xae] = { 0x03B7, 0x030D, 0x0000 },
  284   [0xaf] = { 0x03B9, 0x030D, 0x0000 },
  285   [0xb0] = { 0x03C5, 0x0308, 0x030D, 0x0000 },
  286   [0xca] = { 0x03B9, 0x0308, 0x0000 },
  287   [0xcb] = { 0x03C5, 0x0308, 0x0000 },
  288   [0xcc] = { 0x03BF, 0x030D, 0x0000 },
  289   [0xcd] = { 0x03C5, 0x030D, 0x0000 },
  290   [0xce] = { 0x03C9, 0x030D, 0x0000 },
  291   [0xd3] = { 0x03D2, 0x030D, 0x0000 },
  292   [0xd4] = { 0x03D2, 0x0308, 0x0000 },
  293 };
  294 
  295 static const uint16_t page04[256][HFSPLUS_MAX_DECOMPOSE_LEN + 1] = {
  296   [0x01] = { 0x0415, 0x0308, 0x0000 },
  297   [0x03] = { 0x0413, 0x0301, 0x0000 },
  298   [0x07] = { 0x0406, 0x0308, 0x0000 },
  299   [0x0c] = { 0x041A, 0x0301, 0x0000 },
  300   [0x0e] = { 0x0423, 0x0306, 0x0000 },
  301   [0x19] = { 0x0418, 0x0306, 0x0000 },
  302   [0x39] = { 0x0438, 0x0306, 0x0000 },
  303   [0x51] = { 0x0435, 0x0308, 0x0000 },
  304   [0x53] = { 0x0433, 0x0301, 0x0000 },
  305   [0x57] = { 0x0456, 0x0308, 0x0000 },
  306   [0x5c] = { 0x043A, 0x0301, 0x0000 },
  307   [0x5e] = { 0x0443, 0x0306, 0x0000 },
  308   [0x76] = { 0x0474, 0x030F, 0x0000 },
  309   [0x77] = { 0x0475, 0x030F, 0x0000 },
  310   [0xc1] = { 0x0416, 0x0306, 0x0000 },
  311   [0xc2] = { 0x0436, 0x0306, 0x0000 },
  312   [0xd0] = { 0x0410, 0x0306, 0x0000 },
  313   [0xd1] = { 0x0430, 0x0306, 0x0000 },
  314   [0xd2] = { 0x0410, 0x0308, 0x0000 },
  315   [0xd3] = { 0x0430, 0x0308, 0x0000 },
  316   [0xd4] = { 0x00C6, 0x0000 },
  317   [0xd5] = { 0x00E6, 0x0000 },
  318   [0xd6] = { 0x0415, 0x0306, 0x0000 },
  319   [0xd7] = { 0x0435, 0x0306, 0x0000 },
  320   [0xd8] = { 0x018F, 0x0000 },
  321   [0xd9] = { 0x0259, 0x0000 },
  322   [0xda] = { 0x018F, 0x0308, 0x0000 },
  323   [0xdb] = { 0x0259, 0x0308, 0x0000 },
  324   [0xdc] = { 0x0416, 0x0308, 0x0000 },
  325   [0xdd] = { 0x0436, 0x0308, 0x0000 },
  326   [0xde] = { 0x0417, 0x0308, 0x0000 },
  327   [0xdf] = { 0x0437, 0x0308, 0x0000 },
  328   [0xe0] = { 0x01B7, 0x0000 },
  329   [0xe1] = { 0x0292, 0x0000 },
  330   [0xe2] = { 0x0418, 0x0304, 0x0000 },
  331   [0xe3] = { 0x0438, 0x0304, 0x0000 },
  332   [0xe4] = { 0x0418, 0x0308, 0x0000 },
  333   [0xe5] = { 0x0438, 0x0308, 0x0000 },
  334   [0xe6] = { 0x041E, 0x0308, 0x0000 },
  335   [0xe7] = { 0x043E, 0x0308, 0x0000 },
  336   [0xe8] = { 0x019F, 0x0000 },
  337   [0xe9] = { 0x0275, 0x0000 },
  338   [0xea] = { 0x019F, 0x0308, 0x0000 },
  339   [0xeb] = { 0x0275, 0x0308, 0x0000 },
  340   [0xee] = { 0x0423, 0x0304, 0x0000 },
  341   [0xef] = { 0x0443, 0x0304, 0x0000 },
  342   [0xf0] = { 0x0423, 0x0308, 0x0000 },
  343   [0xf1] = { 0x0443, 0x0308, 0x0000 },
  344   [0xf2] = { 0x0423, 0x030B, 0x0000 },
  345   [0xf3] = { 0x0443, 0x030B, 0x0000 },
  346   [0xf4] = { 0x0427, 0x0308, 0x0000 },
  347   [0xf5] = { 0x0447, 0x0308, 0x0000 },
  348   [0xf8] = { 0x042B, 0x0308, 0x0000 },
  349   [0xf9] = { 0x044B, 0x0308, 0x0000 },
  350 };
  351 
  352 static const uint16_t page09[256][HFSPLUS_MAX_DECOMPOSE_LEN + 1] = {
  353   [0x29] = { 0x0928, 0x093C, 0x0000 },
  354   [0x31] = { 0x0930, 0x093C, 0x0000 },
  355   [0x34] = { 0x0933, 0x093C, 0x0000 },
  356   [0x58] = { 0x0915, 0x093C, 0x0000 },
  357   [0x59] = { 0x0916, 0x093C, 0x0000 },
  358   [0x5a] = { 0x0917, 0x093C, 0x0000 },
  359   [0x5b] = { 0x091C, 0x093C, 0x0000 },
  360   [0x5c] = { 0x0921, 0x093C, 0x0000 },
  361   [0x5d] = { 0x0922, 0x093C, 0x0000 },
  362   [0x5e] = { 0x092B, 0x093C, 0x0000 },
  363   [0x5f] = { 0x092F, 0x093C, 0x0000 },
  364   [0xb0] = { 0x09AC, 0x09BC, 0x0000 },
  365   [0xcb] = { 0x09C7, 0x09BE, 0x0000 },
  366   [0xcc] = { 0x09C7, 0x09D7, 0x0000 },
  367   [0xdc] = { 0x09A1, 0x09BC, 0x0000 },
  368   [0xdd] = { 0x09A2, 0x09BC, 0x0000 },
  369   [0xdf] = { 0x09AF, 0x09BC, 0x0000 },
  370 };
  371 
  372 static const uint16_t page0a[256][HFSPLUS_MAX_DECOMPOSE_LEN + 1] = {
  373   [0x59] = { 0x0A16, 0x0A3C, 0x0000 },
  374   [0x5a] = { 0x0A17, 0x0A3C, 0x0000 },
  375   [0x5b] = { 0x0A1C, 0x0A3C, 0x0000 },
  376   [0x5c] = { 0x0A21, 0x0A3C, 0x0000 },
  377   [0x5e] = { 0x0A2B, 0x0A3C, 0x0000 },
  378 };
  379 
  380 static const uint16_t page0b[256][HFSPLUS_MAX_DECOMPOSE_LEN + 1] = {
  381   [0x48] = { 0x0B47, 0x0B56, 0x0000 },
  382   [0x4b] = { 0x0B47, 0x0B3E, 0x0000 },
  383   [0x4c] = { 0x0B47, 0x0B57, 0x0000 },
  384   [0x5c] = { 0x0B21, 0x0B3C, 0x0000 },
  385   [0x5d] = { 0x0B22, 0x0B3C, 0x0000 },
  386   [0x5f] = { 0x0B2F, 0x0B3C, 0x0000 },
  387   [0x94] = { 0x0B92, 0x0BD7, 0x0000 },
  388   [0xca] = { 0x0BC6, 0x0BBE, 0x0000 },
  389   [0xcb] = { 0x0BC7, 0x0BBE, 0x0000 },
  390   [0xcc] = { 0x0BC6, 0x0BD7, 0x0000 },
  391 };
  392 
  393 static const uint16_t page0c[256][HFSPLUS_MAX_DECOMPOSE_LEN + 1] = {
  394   [0x48] = { 0x0C46, 0x0C56, 0x0000 },
  395   [0xc0] = { 0x0CBF, 0x0CD5, 0x0000 },
  396   [0xc7] = { 0x0CC6, 0x0CD5, 0x0000 },
  397   [0xc8] = { 0x0CC6, 0x0CD6, 0x0000 },
  398   [0xca] = { 0x0CC6, 0x0CC2, 0x0000 },
  399   [0xcb] = { 0x0CC6, 0x0CC2, 0x0CD5, 0x0000 },
  400 };
  401 
  402 static const uint16_t page0d[256][HFSPLUS_MAX_DECOMPOSE_LEN + 1] = {
  403   [0x4a] = { 0x0D46, 0x0D3E, 0x0000 },
  404   [0x4b] = { 0x0D47, 0x0D3E, 0x0000 },
  405   [0x4c] = { 0x0D46, 0x0D57, 0x0000 },
  406 };
  407 
  408 static const uint16_t page0e[256][HFSPLUS_MAX_DECOMPOSE_LEN + 1] = {
  409   [0x33] = { 0x0E4D, 0x0E32, 0x0000 },
  410   [0xb3] = { 0x0ECD, 0x0EB2, 0x0000 },
  411 };
  412 
  413 static const uint16_t page0f[256][HFSPLUS_MAX_DECOMPOSE_LEN + 1] = {
  414   [0x43] = { 0x0F42, 0x0FB7, 0x0000 },
  415   [0x4d] = { 0x0F4C, 0x0FB7, 0x0000 },
  416   [0x52] = { 0x0F51, 0x0FB7, 0x0000 },
  417   [0x57] = { 0x0F56, 0x0FB7, 0x0000 },
  418   [0x5c] = { 0x0F5B, 0x0FB7, 0x0000 },
  419   [0x69] = { 0x0F40, 0x0FB5, 0x0000 },
  420   [0x73] = { 0x0F72, 0x0F71, 0x0000 },
  421   [0x75] = { 0x0F74, 0x0F71, 0x0000 },
  422   [0x76] = { 0x0FB2, 0x0F80, 0x0000 },
  423   [0x77] = { 0x0FB2, 0x0F80, 0x0F71, 0x0000 },
  424   [0x78] = { 0x0FB3, 0x0F80, 0x0000 },
  425   [0x79] = { 0x0FB3, 0x0F80, 0x0F71, 0x0000 },
  426   [0x81] = { 0x0F80, 0x0F71, 0x0000 },
  427   [0x93] = { 0x0F92, 0x0FB7, 0x0000 },
  428   [0x9d] = { 0x0F9C, 0x0FB7, 0x0000 },
  429   [0xa2] = { 0x0FA1, 0x0FB7, 0x0000 },
  430   [0xa7] = { 0x0FA6, 0x0FB7, 0x0000 },
  431   [0xac] = { 0x0FAB, 0x0FB7, 0x0000 },
  432   [0xb9] = { 0x0F90, 0x0FB5, 0x0000 },
  433 };
  434 
  435 static const uint16_t page1e[256][HFSPLUS_MAX_DECOMPOSE_LEN + 1] = {
  436   [0x00] = { 0x0041, 0x0325, 0x0000 },
  437   [0x01] = { 0x0061, 0x0325, 0x0000 },
  438   [0x02] = { 0x0042, 0x0307, 0x0000 },
  439   [0x03] = { 0x0062, 0x0307, 0x0000 },
  440   [0x04] = { 0x0042, 0x0323, 0x0000 },
  441   [0x05] = { 0x0062, 0x0323, 0x0000 },
  442   [0x06] = { 0x0042, 0x0331, 0x0000 },
  443   [0x07] = { 0x0062, 0x0331, 0x0000 },
  444   [0x08] = { 0x0043, 0x0327, 0x0301, 0x0000 },
  445   [0x09] = { 0x0063, 0x0327, 0x0301, 0x0000 },
  446   [0x0a] = { 0x0044, 0x0307, 0x0000 },
  447   [0x0b] = { 0x0064, 0x0307, 0x0000 },
  448   [0x0c] = { 0x0044, 0x0323, 0x0000 },
  449   [0x0d] = { 0x0064, 0x0323, 0x0000 },
  450   [0x0e] = { 0x0044, 0x0331, 0x0000 },
  451   [0x0f] = { 0x0064, 0x0331, 0x0000 },
  452   [0x10] = { 0x0044, 0x0327, 0x0000 },
  453   [0x11] = { 0x0064, 0x0327, 0x0000 },
  454   [0x12] = { 0x0044, 0x032D, 0x0000 },
  455   [0x13] = { 0x0064, 0x032D, 0x0000 },
  456   [0x14] = { 0x0045, 0x0304, 0x0300, 0x0000 },
  457   [0x15] = { 0x0065, 0x0304, 0x0300, 0x0000 },
  458   [0x16] = { 0x0045, 0x0304, 0x0301, 0x0000 },
  459   [0x17] = { 0x0065, 0x0304, 0x0301, 0x0000 },
  460   [0x18] = { 0x0045, 0x032D, 0x0000 },
  461   [0x19] = { 0x0065, 0x032D, 0x0000 },
  462   [0x1a] = { 0x0045, 0x0330, 0x0000 },
  463   [0x1b] = { 0x0065, 0x0330, 0x0000 },
  464   [0x1c] = { 0x0045, 0x0327, 0x0306, 0x0000 },
  465   [0x1d] = { 0x0065, 0x0327, 0x0306, 0x0000 },
  466   [0x1e] = { 0x0046, 0x0307, 0x0000 },
  467   [0x1f] = { 0x0066, 0x0307, 0x0000 },
  468   [0x20] = { 0x0047, 0x0304, 0x0000 },
  469   [0x21] = { 0x0067, 0x0304, 0x0000 },
  470   [0x22] = { 0x0048, 0x0307, 0x0000 },
  471   [0x23] = { 0x0068, 0x0307, 0x0000 },
  472   [0x24] = { 0x0048, 0x0323, 0x0000 },
  473   [0x25] = { 0x0068, 0x0323, 0x0000 },
  474   [0x26] = { 0x0048, 0x0308, 0x0000 },
  475   [0x27] = { 0x0068, 0x0308, 0x0000 },
  476   [0x28] = { 0x0048, 0x0327, 0x0000 },
  477   [0x29] = { 0x0068, 0x0327, 0x0000 },
  478   [0x2a] = { 0x0048, 0x032E, 0x0000 },
  479   [0x2b] = { 0x0068, 0x032E, 0x0000 },
  480   [0x2c] = { 0x0049, 0x0330, 0x0000 },
  481   [0x2d] = { 0x0069, 0x0330, 0x0000 },
  482   [0x2e] = { 0x0049, 0x0308, 0x0301, 0x0000 },
  483   [0x2f] = { 0x0069, 0x0308, 0x0301, 0x0000 },
  484   [0x30] = { 0x004B, 0x0301, 0x0000 },
  485   [0x31] = { 0x006B, 0x0301, 0x0000 },
  486   [0x32] = { 0x004B, 0x0323, 0x0000 },
  487   [0x33] = { 0x006B, 0x0323, 0x0000 },
  488   [0x34] = { 0x004B, 0x0331, 0x0000 },
  489   [0x35] = { 0x006B, 0x0331, 0x0000 },
  490   [0x36] = { 0x004C, 0x0323, 0x0000 },
  491   [0x37] = { 0x006C, 0x0323, 0x0000 },
  492   [0x38] = { 0x004C, 0x0323, 0x0304, 0x0000 },
  493   [0x39] = { 0x006C, 0x0323, 0x0304, 0x0000 },
  494   [0x3a] = { 0x004C, 0x0331, 0x0000 },
  495   [0x3b] = { 0x006C, 0x0331, 0x0000 },
  496   [0x3c] = { 0x004C, 0x032D, 0x0000 },
  497   [0x3d] = { 0x006C, 0x032D, 0x0000 },
  498   [0x3e] = { 0x004D, 0x0301, 0x0000 },
  499   [0x3f] = { 0x006D, 0x0301, 0x0000 },
  500   [0x40] = { 0x004D, 0x0307, 0x0000 },
  501   [0x41] = { 0x006D, 0x0307, 0x0000 },
  502   [0x42] = { 0x004D, 0x0323, 0x0000 },
  503   [0x43] = { 0x006D, 0x0323, 0x0000 },
  504   [0x44] = { 0x004E, 0x0307, 0x0000 },
  505   [0x45] = { 0x006E, 0x0307, 0x0000 },
  506   [0x46] = { 0x004E, 0x0323, 0x0000 },
  507   [0x47] = { 0x006E, 0x0323, 0x0000 },
  508   [0x48] = { 0x004E, 0x0331, 0x0000 },
  509   [0x49] = { 0x006E, 0x0331, 0x0000 },
  510   [0x4a] = { 0x004E, 0x032D, 0x0000 },
  511   [0x4b] = { 0x006E, 0x032D, 0x0000 },
  512   [0x4c] = { 0x004F, 0x0303, 0x0301, 0x0000 },
  513   [0x4d] = { 0x006F, 0x0303, 0x0301, 0x0000 },
  514   [0x4e] = { 0x004F, 0x0303, 0x0308, 0x0000 },
  515   [0x4f] = { 0x006F, 0x0303, 0x0308, 0x0000 },
  516   [0x50] = { 0x004F, 0x0304, 0x0300, 0x0000 },
  517   [0x51] = { 0x006F, 0x0304, 0x0300, 0x0000 },
  518   [0x52] = { 0x004F, 0x0304, 0x0301, 0x0000 },
  519   [0x53] = { 0x006F, 0x0304, 0x0301, 0x0000 },
  520   [0x54] = { 0x0050, 0x0301, 0x0000 },
  521   [0x55] = { 0x0070, 0x0301, 0x0000 },
  522   [0x56] = { 0x0050, 0x0307, 0x0000 },
  523   [0x57] = { 0x0070, 0x0307, 0x0000 },
  524   [0x58] = { 0x0052, 0x0307, 0x0000 },
  525   [0x59] = { 0x0072, 0x0307, 0x0000 },
  526   [0x5a] = { 0x0052, 0x0323, 0x0000 },
  527   [0x5b] = { 0x0072, 0x0323, 0x0000 },
  528   [0x5c] = { 0x0052, 0x0323, 0x0304, 0x0000 },
  529   [0x5d] = { 0x0072, 0x0323, 0x0304, 0x0000 },
  530   [0x5e] = { 0x0052, 0x0331, 0x0000 },
  531   [0x5f] = { 0x0072, 0x0331, 0x0000 },
  532   [0x60] = { 0x0053, 0x0307, 0x0000 },
  533   [0x61] = { 0x0073, 0x0307, 0x0000 },
  534   [0x62] = { 0x0053, 0x0323, 0x0000 },
  535   [0x63] = { 0x0073, 0x0323, 0x0000 },
  536   [0x64] = { 0x0053, 0x0301, 0x0307, 0x0000 },
  537   [0x65] = { 0x0073, 0x0301, 0x0307, 0x0000 },
  538   [0x66] = { 0x0053, 0x030C, 0x0307, 0x0000 },
  539   [0x67] = { 0x0073, 0x030C, 0x0307, 0x0000 },
  540   [0x68] = { 0x0053, 0x0323, 0x0307, 0x0000 },
  541   [0x69] = { 0x0073, 0x0323, 0x0307, 0x0000 },
  542   [0x6a] = { 0x0054, 0x0307, 0x0000 },
  543   [0x6b] = { 0x0074, 0x0307, 0x0000 },
  544   [0x6c] = { 0x0054, 0x0323, 0x0000 },
  545   [0x6d] = { 0x0074, 0x0323, 0x0000 },
  546   [0x6e] = { 0x0054, 0x0331, 0x0000 },
  547   [0x6f] = { 0x0074, 0x0331, 0x0000 },
  548   [0x70] = { 0x0054, 0x032D, 0x0000 },
  549   [0x71] = { 0x0074, 0x032D, 0x0000 },
  550   [0x72] = { 0x0055, 0x0324, 0x0000 },
  551   [0x73] = { 0x0075, 0x0324, 0x0000 },
  552   [0x74] = { 0x0055, 0x0330, 0x0000 },
  553   [0x75] = { 0x0075, 0x0330, 0x0000 },
  554   [0x76] = { 0x0055, 0x032D, 0x0000 },
  555   [0x77] = { 0x0075, 0x032D, 0x0000 },
  556   [0x78] = { 0x0055, 0x0303, 0x0301, 0x0000 },
  557   [0x79] = { 0x0075, 0x0303, 0x0301, 0x0000 },
  558   [0x7a] = { 0x0055, 0x0304, 0x0308, 0x0000 },
  559   [0x7b] = { 0x0075, 0x0304, 0x0308, 0x0000 },
  560   [0x7c] = { 0x0056, 0x0303, 0x0000 },
  561   [0x7d] = { 0x0076, 0x0303, 0x0000 },
  562   [0x7e] = { 0x0056, 0x0323, 0x0000 },
  563   [0x7f] = { 0x0076, 0x0323, 0x0000 },
  564   [0x80] = { 0x0057, 0x0300, 0x0000 },
  565   [0x81] = { 0x0077, 0x0300, 0x0000 },
  566   [0x82] = { 0x0057, 0x0301, 0x0000 },
  567   [0x83] = { 0x0077, 0x0301, 0x0000 },
  568   [0x84] = { 0x0057, 0x0308, 0x0000 },
  569   [0x85] = { 0x0077, 0x0308, 0x0000 },
  570   [0x86] = { 0x0057, 0x0307, 0x0000 },
  571   [0x87] = { 0x0077, 0x0307, 0x0000 },
  572   [0x88] = { 0x0057, 0x0323, 0x0000 },
  573   [0x89] = { 0x0077, 0x0323, 0x0000 },
  574   [0x8a] = { 0x0058, 0x0307, 0x0000 },
  575   [0x8b] = { 0x0078, 0x0307, 0x0000 },
  576   [0x8c] = { 0x0058, 0x0308, 0x0000 },
  577   [0x8d] = { 0x0078, 0x0308, 0x0000 },
  578   [0x8e] = { 0x0059, 0x0307, 0x0000 },
  579   [0x8f] = { 0x0079, 0x0307, 0x0000 },
  580   [0x90] = { 0x005A, 0x0302, 0x0000 },
  581   [0x91] = { 0x007A, 0x0302, 0x0000 },
  582   [0x92] = { 0x005A, 0x0323, 0x0000 },
  583   [0x93] = { 0x007A, 0x0323, 0x0000 },
  584   [0x94] = { 0x005A, 0x0331, 0x0000 },
  585   [0x95] = { 0x007A, 0x0331, 0x0000 },
  586   [0x96] = { 0x0068, 0x0331, 0x0000 },
  587   [0x97] = { 0x0074, 0x0308, 0x0000 },
  588   [0x98] = { 0x0077, 0x030A, 0x0000 },
  589   [0x99] = { 0x0079, 0x030A, 0x0000 },
  590   [0x9b] = { 0x017F, 0x0307, 0x0000 },
  591   [0xa0] = { 0x0041, 0x0323, 0x0000 },
  592   [0xa1] = { 0x0061, 0x0323, 0x0000 },
  593   [0xa2] = { 0x0041, 0x0309, 0x0000 },
  594   [0xa3] = { 0x0061, 0x0309, 0x0000 },
  595   [0xa4] = { 0x0041, 0x0302, 0x0301, 0x0000 },
  596   [0xa5] = { 0x0061, 0x0302, 0x0301, 0x0000 },
  597   [0xa6] = { 0x0041, 0x0302, 0x0300, 0x0000 },
  598   [0xa7] = { 0x0061, 0x0302, 0x0300, 0x0000 },
  599   [0xa8] = { 0x0041, 0x0302, 0x0309, 0x0000 },
  600   [0xa9] = { 0x0061, 0x0302, 0x0309, 0x0000 },
  601   [0xaa] = { 0x0041, 0x0302, 0x0303, 0x0000 },
  602   [0xab] = { 0x0061, 0x0302, 0x0303, 0x0000 },
  603   [0xac] = { 0x0041, 0x0323, 0x0302, 0x0000 },
  604   [0xad] = { 0x0061, 0x0323, 0x0302, 0x0000 },
  605   [0xae] = { 0x0041, 0x0306, 0x0301, 0x0000 },
  606   [0xaf] = { 0x0061, 0x0306, 0x0301, 0x0000 },
  607   [0xb0] = { 0x0041, 0x0306, 0x0300, 0x0000 },
  608   [0xb1] = { 0x0061, 0x0306, 0x0300, 0x0000 },
  609   [0xb2] = { 0x0041, 0x0306, 0x0309, 0x0000 },
  610   [0xb3] = { 0x0061, 0x0306, 0x0309, 0x0000 },
  611   [0xb4] = { 0x0041, 0x0306, 0x0303, 0x0000 },
  612   [0xb5] = { 0x0061, 0x0306, 0x0303, 0x0000 },
  613   [0xb6] = { 0x0041, 0x0323, 0x0306, 0x0000 },
  614   [0xb7] = { 0x0061, 0x0323, 0x0306, 0x0000 },
  615   [0xb8] = { 0x0045, 0x0323, 0x0000 },
  616   [0xb9] = { 0x0065, 0x0323, 0x0000 },
  617   [0xba] = { 0x0045, 0x0309, 0x0000 },
  618   [0xbb] = { 0x0065, 0x0309, 0x0000 },
  619   [0xbc] = { 0x0045, 0x0303, 0x0000 },
  620   [0xbd] = { 0x0065, 0x0303, 0x0000 },
  621   [0xbe] = { 0x0045, 0x0302, 0x0301, 0x0000 },
  622   [0xbf] = { 0x0065, 0x0302, 0x0301, 0x0000 },
  623   [0xc0] = { 0x0045, 0x0302, 0x0300, 0x0000 },
  624   [0xc1] = { 0x0065, 0x0302, 0x0300, 0x0000 },
  625   [0xc2] = { 0x0045, 0x0302, 0x0309, 0x0000 },
  626   [0xc3] = { 0x0065, 0x0302, 0x0309, 0x0000 },
  627   [0xc4] = { 0x0045, 0x0302, 0x0303, 0x0000 },
  628   [0xc5] = { 0x0065, 0x0302, 0x0303, 0x0000 },
  629   [0xc6] = { 0x0045, 0x0323, 0x0302, 0x0000 },
  630   [0xc7] = { 0x0065, 0x0323, 0x0302, 0x0000 },
  631   [0xc8] = { 0x0049, 0x0309, 0x0000 },
  632   [0xc9] = { 0x0069, 0x0309, 0x0000 },
  633   [0xca] = { 0x0049, 0x0323, 0x0000 },
  634   [0xcb] = { 0x0069, 0x0323, 0x0000 },
  635   [0xcc] = { 0x004F, 0x0323, 0x0000 },
  636   [0xcd] = { 0x006F, 0x0323, 0x0000 },
  637   [0xce] = { 0x004F, 0x0309, 0x0000 },
  638   [0xcf] = { 0x006F, 0x0309, 0x0000 },
  639   [0xd0] = { 0x004F, 0x0302, 0x0301, 0x0000 },
  640   [0xd1] = { 0x006F, 0x0302, 0x0301, 0x0000 },
  641   [0xd2] = { 0x004F, 0x0302, 0x0300, 0x0000 },
  642   [0xd3] = { 0x006F, 0x0302, 0x0300, 0x0000 },
  643   [0xd4] = { 0x004F, 0x0302, 0x0309, 0x0000 },
  644   [0xd5] = { 0x006F, 0x0302, 0x0309, 0x0000 },
  645   [0xd6] = { 0x004F, 0x0302, 0x0303, 0x0000 },
  646   [0xd7] = { 0x006F, 0x0302, 0x0303, 0x0000 },
  647   [0xd8] = { 0x004F, 0x0323, 0x0302, 0x0000 },
  648   [0xd9] = { 0x006F, 0x0323, 0x0302, 0x0000 },
  649   [0xda] = { 0x004F, 0x031B, 0x0301, 0x0000 },
  650   [0xdb] = { 0x006F, 0x031B, 0x0301, 0x0000 },
  651   [0xdc] = { 0x004F, 0x031B, 0x0300, 0x0000 },
  652   [0xdd] = { 0x006F, 0x031B, 0x0300, 0x0000 },
  653   [0xde] = { 0x004F, 0x031B, 0x0309, 0x0000 },
  654   [0xdf] = { 0x006F, 0x031B, 0x0309, 0x0000 },
  655   [0xe0] = { 0x004F, 0x031B, 0x0303, 0x0000 },
  656   [0xe1] = { 0x006F, 0x031B, 0x0303, 0x0000 },
  657   [0xe2] = { 0x004F, 0x031B, 0x0323, 0x0000 },
  658   [0xe3] = { 0x006F, 0x031B, 0x0323, 0x0000 },
  659   [0xe4] = { 0x0055, 0x0323, 0x0000 },
  660   [0xe5] = { 0x0075, 0x0323, 0x0000 },
  661   [0xe6] = { 0x0055, 0x0309, 0x0000 },
  662   [0xe7] = { 0x0075, 0x0309, 0x0000 },
  663   [0xe8] = { 0x0055, 0x031B, 0x0301, 0x0000 },
  664   [0xe9] = { 0x0075, 0x031B, 0x0301, 0x0000 },
  665   [0xea] = { 0x0055, 0x031B, 0x0300, 0x0000 },
  666   [0xeb] = { 0x0075, 0x031B, 0x0300, 0x0000 },
  667   [0xec] = { 0x0055, 0x031B, 0x0309, 0x0000 },
  668   [0xed] = { 0x0075, 0x031B, 0x0309, 0x0000 },
  669   [0xee] = { 0x0055, 0x031B, 0x0303, 0x0000 },
  670   [0xef] = { 0x0075, 0x031B, 0x0303, 0x0000 },
  671   [0xf0] = { 0x0055, 0x031B, 0x0323, 0x0000 },
  672   [0xf1] = { 0x0075, 0x031B, 0x0323, 0x0000 },
  673   [0xf2] = { 0x0059, 0x0300, 0x0000 },
  674   [0xf3] = { 0x0079, 0x0300, 0x0000 },
  675   [0xf4] = { 0x0059, 0x0323, 0x0000 },
  676   [0xf5] = { 0x0079, 0x0323, 0x0000 },
  677   [0xf6] = { 0x0059, 0x0309, 0x0000 },
  678   [0xf7] = { 0x0079, 0x0309, 0x0000 },
  679   [0xf8] = { 0x0059, 0x0303, 0x0000 },
  680   [0xf9] = { 0x0079, 0x0303, 0x0000 },
  681 };
  682 
  683 static const uint16_t page1f[256][HFSPLUS_MAX_DECOMPOSE_LEN + 1] = {
  684   [0x00] = { 0x03B1, 0x0313, 0x0000 },
  685   [0x01] = { 0x03B1, 0x0314, 0x0000 },
  686   [0x02] = { 0x03B1, 0x0313, 0x0300, 0x0000 },
  687   [0x03] = { 0x03B1, 0x0314, 0x0300, 0x0000 },
  688   [0x04] = { 0x03B1, 0x0313, 0x0301, 0x0000 },
  689   [0x05] = { 0x03B1, 0x0314, 0x0301, 0x0000 },
  690   [0x06] = { 0x03B1, 0x0313, 0x0342, 0x0000 },
  691   [0x07] = { 0x03B1, 0x0314, 0x0342, 0x0000 },
  692   [0x08] = { 0x0391, 0x0313, 0x0000 },
  693   [0x09] = { 0x0391, 0x0314, 0x0000 },
  694   [0x0a] = { 0x0391, 0x0313, 0x0300, 0x0000 },
  695   [0x0b] = { 0x0391, 0x0314, 0x0300, 0x0000 },
  696   [0x0c] = { 0x0391, 0x0313, 0x0301, 0x0000 },
  697   [0x0d] = { 0x0391, 0x0314, 0x0301, 0x0000 },
  698   [0x0e] = { 0x0391, 0x0313, 0x0342, 0x0000 },
  699   [0x0f] = { 0x0391, 0x0314, 0x0342, 0x0000 },
  700   [0x10] = { 0x03B5, 0x0313, 0x0000 },
  701   [0x11] = { 0x03B5, 0x0314, 0x0000 },
  702   [0x12] = { 0x03B5, 0x0313, 0x0300, 0x0000 },
  703   [0x13] = { 0x03B5, 0x0314, 0x0300, 0x0000 },
  704   [0x14] = { 0x03B5, 0x0313, 0x0301, 0x0000 },
  705   [0x15] = { 0x03B5, 0x0314, 0x0301, 0x0000 },
  706   [0x18] = { 0x0395, 0x0313, 0x0000 },
  707   [0x19] = { 0x0395, 0x0314, 0x0000 },
  708   [0x1a] = { 0x0395, 0x0313, 0x0300, 0x0000 },
  709   [0x1b] = { 0x0395, 0x0314, 0x0300, 0x0000 },
  710   [0x1c] = { 0x0395, 0x0313, 0x0301, 0x0000 },
  711   [0x1d] = { 0x0395, 0x0314, 0x0301, 0x0000 },
  712   [0x20] = { 0x03B7, 0x0313, 0x0000 },
  713   [0x21] = { 0x03B7, 0x0314, 0x0000 },
  714   [0x22] = { 0x03B7, 0x0313, 0x0300, 0x0000 },
  715   [0x23] = { 0x03B7, 0x0314, 0x0300, 0x0000 },
  716   [0x24] = { 0x03B7, 0x0313, 0x0301, 0x0000 },
  717   [0x25] = { 0x03B7, 0x0314, 0x0301, 0x0000 },
  718   [0x26] = { 0x03B7, 0x0313, 0x0342, 0x0000 },
  719   [0x27] = { 0x03B7, 0x0314, 0x0342, 0x0000 },
  720   [0x28] = { 0x0397, 0x0313, 0x0000 },
  721   [0x29] = { 0x0397, 0x0314, 0x0000 },
  722   [0x2a] = { 0x0397, 0x0313, 0x0300, 0x0000 },
  723   [0x2b] = { 0x0397, 0x0314, 0x0300, 0x0000 },
  724   [0x2c] = { 0x0397, 0x0313, 0x0301, 0x0000 },
  725   [0x2d] = { 0x0397, 0x0314, 0x0301, 0x0000 },
  726   [0x2e] = { 0x0397, 0x0313, 0x0342, 0x0000 },
  727   [0x2f] = { 0x0397, 0x0314, 0x0342, 0x0000 },
  728   [0x30] = { 0x03B9, 0x0313, 0x0000 },
  729   [0x31] = { 0x03B9, 0x0314, 0x0000 },
  730   [0x32] = { 0x03B9, 0x0313, 0x0300, 0x0000 },
  731   [0x33] = { 0x03B9, 0x0314, 0x0300, 0x0000 },
  732   [0x34] = { 0x03B9, 0x0313, 0x0301, 0x0000 },
  733   [0x35] = { 0x03B9, 0x0314, 0x0301, 0x0000 },
  734   [0x36] = { 0x03B9, 0x0313, 0x0342, 0x0000 },
  735   [0x37] = { 0x03B9, 0x0314, 0x0342, 0x0000 },
  736   [0x38] = { 0x0399, 0x0313, 0x0000 },
  737   [0x39] = { 0x0399, 0x0314, 0x0000 },
  738   [0x3a] = { 0x0399, 0x0313, 0x0300, 0x0000 },
  739   [0x3b] = { 0x0399, 0x0314, 0x0300, 0x0000 },
  740   [0x3c] = { 0x0399, 0x0313, 0x0301, 0x0000 },
  741   [0x3d] = { 0x0399, 0x0314, 0x0301, 0x0000 },
  742   [0x3e] = { 0x0399, 0x0313, 0x0342, 0x0000 },
  743   [0x3f] = { 0x0399, 0x0314, 0x0342, 0x0000 },
  744   [0x40] = { 0x03BF, 0x0313, 0x0000 },
  745   [0x41] = { 0x03BF, 0x0314, 0x0000 },
  746   [0x42] = { 0x03BF, 0x0313, 0x0300, 0x0000 },
  747   [0x43] = { 0x03BF, 0x0314, 0x0300, 0x0000 },
  748   [0x44] = { 0x03BF, 0x0313, 0x0301, 0x0000 },
  749   [0x45] = { 0x03BF, 0x0314, 0x0301, 0x0000 },
  750   [0x48] = { 0x039F, 0x0313, 0x0000 },
  751   [0x49] = { 0x039F, 0x0314, 0x0000 },
  752   [0x4a] = { 0x039F, 0x0313, 0x0300, 0x0000 },
  753   [0x4b] = { 0x039F, 0x0314, 0x0300, 0x0000 },
  754   [0x4c] = { 0x039F, 0x0313, 0x0301, 0x0000 },
  755   [0x4d] = { 0x039F, 0x0314, 0x0301, 0x0000 },
  756   [0x50] = { 0x03C5, 0x0313, 0x0000 },
  757   [0x51] = { 0x03C5, 0x0314, 0x0000 },
  758   [0x52] = { 0x03C5, 0x0313, 0x0300, 0x0000 },
  759   [0x53] = { 0x03C5, 0x0314, 0x0300, 0x0000 },
  760   [0x54] = { 0x03C5, 0x0313, 0x0301, 0x0000 },
  761   [0x55] = { 0x03C5, 0x0314, 0x0301, 0x0000 },
  762   [0x56] = { 0x03C5, 0x0313, 0x0342, 0x0000 },
  763   [0x57] = { 0x03C5, 0x0314, 0x0342, 0x0000 },
  764   [0x59] = { 0x03A5, 0x0314, 0x0000 },
  765   [0x5b] = { 0x03A5, 0x0314, 0x0300, 0x0000 },
  766   [0x5d] = { 0x03A5, 0x0314, 0x0301, 0x0000 },
  767   [0x5f] = { 0x03A5, 0x0314, 0x0342, 0x0000 },
  768   [0x60] = { 0x03C9, 0x0313, 0x0000 },
  769   [0x61] = { 0x03C9, 0x0314, 0x0000 },
  770   [0x62] = { 0x03C9, 0x0313, 0x0300, 0x0000 },
  771   [0x63] = { 0x03C9, 0x0314, 0x0300, 0x0000 },
  772   [0x64] = { 0x03C9, 0x0313, 0x0301, 0x0000 },
  773   [0x65] = { 0x03C9, 0x0314, 0x0301, 0x0000 },
  774   [0x66] = { 0x03C9, 0x0313, 0x0342, 0x0000 },
  775   [0x67] = { 0x03C9, 0x0314, 0x0342, 0x0000 },
  776   [0x68] = { 0x03A9, 0x0313, 0x0000 },
  777   [0x69] = { 0x03A9, 0x0314, 0x0000 },
  778   [0x6a] = { 0x03A9, 0x0313, 0x0300, 0x0000 },
  779   [0x6b] = { 0x03A9, 0x0314, 0x0300, 0x0000 },
  780   [0x6c] = { 0x03A9, 0x0313, 0x0301, 0x0000 },
  781   [0x6d] = { 0x03A9, 0x0314, 0x0301, 0x0000 },
  782   [0x6e] = { 0x03A9, 0x0313, 0x0342, 0x0000 },
  783   [0x6f] = { 0x03A9, 0x0314, 0x0342, 0x0000 },
  784   [0x70] = { 0x03B1, 0x0300, 0x0000 },
  785   [0x71] = { 0x03B1, 0x0301, 0x0000 },
  786   [0x72] = { 0x03B5, 0x0300, 0x0000 },
  787   [0x73] = { 0x03B5, 0x0301, 0x0000 },
  788   [0x74] = { 0x03B7, 0x0300, 0x0000 },
  789   [0x75] = { 0x03B7, 0x0301, 0x0000 },
  790   [0x76] = { 0x03B9, 0x0300, 0x0000 },
  791   [0x77] = { 0x03B9, 0x0301, 0x0000 },
  792   [0x78] = { 0x03BF, 0x0300, 0x0000 },
  793   [0x79] = { 0x03BF, 0x0301, 0x0000 },
  794   [0x7a] = { 0x03C5, 0x0300, 0x0000 },
  795   [0x7b] = { 0x03C5, 0x0301, 0x0000 },
  796   [0x7c] = { 0x03C9, 0x0300, 0x0000 },
  797   [0x7d] = { 0x03C9, 0x0301, 0x0000 },
  798   [0x80] = { 0x03B1, 0x0345, 0x0313, 0x0000 },
  799   [0x81] = { 0x03B1, 0x0345, 0x0314, 0x0000 },
  800   [0x82] = { 0x03B1, 0x0345, 0x0313, 0x0300, 0x0000 },
  801   [0x83] = { 0x03B1, 0x0345, 0x0314, 0x0300, 0x0000 },
  802   [0x84] = { 0x03B1, 0x0345, 0x0313, 0x0301, 0x0000 },
  803   [0x85] = { 0x03B1, 0x0345, 0x0314, 0x0301, 0x0000 },
  804   [0x86] = { 0x03B1, 0x0345, 0x0313, 0x0342, 0x0000 },
  805   [0x87] = { 0x03B1, 0x0345, 0x0314, 0x0342, 0x0000 },
  806   [0x88] = { 0x0391, 0x0345, 0x0313, 0x0000 },
  807   [0x89] = { 0x0391, 0x0345, 0x0314, 0x0000 },
  808   [0x8a] = { 0x0391, 0x0345, 0x0313, 0x0300, 0x0000 },
  809   [0x8b] = { 0x0391, 0x0345, 0x0314, 0x0300, 0x0000 },
  810   [0x8c] = { 0x0391, 0x0345, 0x0313, 0x0301, 0x0000 },
  811   [0x8d] = { 0x0391, 0x0345, 0x0314, 0x0301, 0x0000 },
  812   [0x8e] = { 0x0391, 0x0345, 0x0313, 0x0342, 0x0000 },
  813   [0x8f] = { 0x0391, 0x0345, 0x0314, 0x0342, 0x0000 },
  814   [0x90] = { 0x03B7, 0x0345, 0x0313, 0x0000 },
  815   [0x91] = { 0x03B7, 0x0345, 0x0314, 0x0000 },
  816   [0x92] = { 0x03B7, 0x0345, 0x0313, 0x0300, 0x0000 },
  817   [0x93] = { 0x03B7, 0x0345, 0x0314, 0x0300, 0x0000 },
  818   [0x94] = { 0x03B7, 0x0345, 0x0313, 0x0301, 0x0000 },
  819   [0x95] = { 0x03B7, 0x0345, 0x0314, 0x0301, 0x0000 },
  820   [0x96] = { 0x03B7, 0x0345, 0x0313, 0x0342, 0x0000 },
  821   [0x97] = { 0x03B7, 0x0345, 0x0314, 0x0342, 0x0000 },
  822   [0x98] = { 0x0397, 0x0345, 0x0313, 0x0000 },
  823   [0x99] = { 0x0397, 0x0345, 0x0314, 0x0000 },
  824   [0x9a] = { 0x0397, 0x0345, 0x0313, 0x0300, 0x0000 },
  825   [0x9b] = { 0x0397, 0x0345, 0x0314, 0x0300, 0x0000 },
  826   [0x9c] = { 0x0397, 0x0345, 0x0313, 0x0301, 0x0000 },
  827   [0x9d] = { 0x0397, 0x0345, 0x0314, 0x0301, 0x0000 },
  828   [0x9e] = { 0x0397, 0x0345, 0x0313, 0x0342, 0x0000 },
  829   [0x9f] = { 0x0397, 0x0345, 0x0314, 0x0342, 0x0000 },
  830   [0xa0] = { 0x03C9, 0x0345, 0x0313, 0x0000 },
  831   [0xa1] = { 0x03C9, 0x0345, 0x0314, 0x0000 },
  832   [0xa2] = { 0x03C9, 0x0345, 0x0313, 0x0300, 0x0000 },
  833   [0xa3] = { 0x03C9, 0x0345, 0x0314, 0x0300, 0x0000 },
  834   [0xa4] = { 0x03C9, 0x0345, 0x0313, 0x0301, 0x0000 },
  835   [0xa5] = { 0x03C9, 0x0345, 0x0314, 0x0301, 0x0000 },
  836   [0xa6] = { 0x03C9, 0x0345, 0x0313, 0x0342, 0x0000 },
  837   [0xa7] = { 0x03C9, 0x0345, 0x0314, 0x0342, 0x0000 },
  838   [0xa8] = { 0x03A9, 0x0345, 0x0313, 0x0000 },
  839   [0xa9] = { 0x03A9, 0x0345, 0x0314, 0x0000 },
  840   [0xaa] = { 0x03A9, 0x0345, 0x0313, 0x0300, 0x0000 },
  841   [0xab] = { 0x03A9, 0x0345, 0x0314, 0x0300, 0x0000 },
  842   [0xac] = { 0x03A9, 0x0345, 0x0313, 0x0301, 0x0000 },
  843   [0xad] = { 0x03A9, 0x0345, 0x0314, 0x0301, 0x0000 },
  844   [0xae] = { 0x03A9, 0x0345, 0x0313, 0x0342, 0x0000 },
  845   [0xaf] = { 0x03A9, 0x0345, 0x0314, 0x0342, 0x0000 },
  846   [0xb0] = { 0x03B1, 0x0306, 0x0000 },
  847   [0xb1] = { 0x03B1, 0x0304, 0x0000 },
  848   [0xb2] = { 0x03B1, 0x0345, 0x0300, 0x0000 },
  849   [0xb3] = { 0x03B1, 0x0345, 0x0000 },
  850   [0xb4] = { 0x03B1, 0x0345, 0x0301, 0x0000 },
  851   [0xb6] = { 0x03B1, 0x0342, 0x0000 },
  852   [0xb7] = { 0x03B1, 0x0345, 0x0342, 0x0000 },
  853   [0xb8] = { 0x0391, 0x0306, 0x0000 },
  854   [0xb9] = { 0x0391, 0x0304, 0x0000 },
  855   [0xba] = { 0x0391, 0x0300, 0x0000 },
  856   [0xbb] = { 0x0391, 0x0301, 0x0000 },
  857   [0xbc] = { 0x0391, 0x0345, 0x0000 },
  858   [0xbe] = { 0x03B9, 0x0000 },
  859   [0xc1] = { 0x00A8, 0x0342, 0x0000 },
  860   [0xc2] = { 0x03B7, 0x0345, 0x0300, 0x0000 },
  861   [0xc3] = { 0x03B7, 0x0345, 0x0000 },
  862   [0xc4] = { 0x03B7, 0x0345, 0x0301, 0x0000 },
  863   [0xc6] = { 0x03B7, 0x0342, 0x0000 },
  864   [0xc7] = { 0x03B7, 0x0345, 0x0342, 0x0000 },
  865   [0xc8] = { 0x0395, 0x0300, 0x0000 },
  866   [0xc9] = { 0x0395, 0x0301, 0x0000 },
  867   [0xca] = { 0x0397, 0x0300, 0x0000 },
  868   [0xcb] = { 0x0397, 0x0301, 0x0000 },
  869   [0xcc] = { 0x0397, 0x0345, 0x0000 },
  870   [0xcd] = { 0x1FBF, 0x0300, 0x0000 },
  871   [0xce] = { 0x1FBF, 0x0301, 0x0000 },
  872   [0xcf] = { 0x1FBF, 0x0342, 0x0000 },
  873   [0xd0] = { 0x03B9, 0x0306, 0x0000 },
  874   [0xd1] = { 0x03B9, 0x0304, 0x0000 },
  875   [0xd2] = { 0x03B9, 0x0308, 0x0300, 0x0000 },
  876   [0xd3] = { 0x03B9, 0x0308, 0x0301, 0x0000 },
  877   [0xd6] = { 0x03B9, 0x0342, 0x0000 },
  878   [0xd7] = { 0x03B9, 0x0308, 0x0342, 0x0000 },
  879   [0xd8] = { 0x0399, 0x0306, 0x0000 },
  880   [0xd9] = { 0x0399, 0x0304, 0x0000 },
  881   [0xda] = { 0x0399, 0x0300, 0x0000 },
  882   [0xdb] = { 0x0399, 0x0301, 0x0000 },
  883   [0xdd] = { 0x1FFE, 0x0300, 0x0000 },
  884   [0xde] = { 0x1FFE, 0x0301, 0x0000 },
  885   [0xdf] = { 0x1FFE, 0x0342, 0x0000 },
  886   [0xe0] = { 0x03C5, 0x0306, 0x0000 },
  887   [0xe1] = { 0x03C5, 0x0304, 0x0000 },
  888   [0xe2] = { 0x03C5, 0x0308, 0x0300, 0x0000 },
  889   [0xe3] = { 0x03C5, 0x0308, 0x0301, 0x0000 },
  890   [0xe4] = { 0x03C1, 0x0313, 0x0000 },
  891   [0xe5] = { 0x03C1, 0x0314, 0x0000 },
  892   [0xe6] = { 0x03C5, 0x0342, 0x0000 },
  893   [0xe7] = { 0x03C5, 0x0308, 0x0342, 0x0000 },
  894   [0xe8] = { 0x03A5, 0x0306, 0x0000 },
  895   [0xe9] = { 0x03A5, 0x0304, 0x0000 },
  896   [0xea] = { 0x03A5, 0x0300, 0x0000 },
  897   [0xeb] = { 0x03A5, 0x0301, 0x0000 },
  898   [0xec] = { 0x03A1, 0x0314, 0x0000 },
  899   [0xed] = { 0x00A8, 0x0300, 0x0000 },
  900   [0xee] = { 0x00A8, 0x0301, 0x0000 },
  901   [0xef] = { 0x0060, 0x0000 },
  902   [0xf2] = { 0x03C9, 0x0345, 0x0300, 0x0000 },
  903   [0xf3] = { 0x03C9, 0x0345, 0x0000 },
  904   [0xf4] = { 0x03BF, 0x0345, 0x0301, 0x0000 },
  905   [0xf6] = { 0x03C9, 0x0342, 0x0000 },
  906   [0xf7] = { 0x03C9, 0x0345, 0x0342, 0x0000 },
  907   [0xf8] = { 0x039F, 0x0300, 0x0000 },
  908   [0xf9] = { 0x039F, 0x0301, 0x0000 },
  909   [0xfa] = { 0x03A9, 0x0300, 0x0000 },
  910   [0xfb] = { 0x03A9, 0x0301, 0x0000 },
  911   [0xfc] = { 0x03A9, 0x0345, 0x0000 },
  912   [0xfd] = { 0x00B4, 0x0000 },
  913 };
  914 
  915 static const uint16_t page30[256][HFSPLUS_MAX_DECOMPOSE_LEN + 1] = {
  916   [0x4c] = { 0x304B, 0x3099, 0x0000 },
  917   [0x4e] = { 0x304D, 0x3099, 0x0000 },
  918   [0x50] = { 0x304F, 0x3099, 0x0000 },
  919   [0x52] = { 0x3051, 0x3099, 0x0000 },
  920   [0x54] = { 0x3053, 0x3099, 0x0000 },
  921   [0x56] = { 0x3055, 0x3099, 0x0000 },
  922   [0x58] = { 0x3057, 0x3099, 0x0000 },
  923   [0x5a] = { 0x3059, 0x3099, 0x0000 },
  924   [0x5c] = { 0x305B, 0x3099, 0x0000 },
  925   [0x5e] = { 0x305D, 0x3099, 0x0000 },
  926   [0x60] = { 0x305F, 0x3099, 0x0000 },
  927   [0x62] = { 0x3061, 0x3099, 0x0000 },
  928   [0x65] = { 0x3064, 0x3099, 0x0000 },
  929   [0x67] = { 0x3066, 0x3099, 0x0000 },
  930   [0x69] = { 0x3068, 0x3099, 0x0000 },
  931   [0x70] = { 0x306F, 0x3099, 0x0000 },
  932   [0x71] = { 0x306F, 0x309A, 0x0000 },
  933   [0x73] = { 0x3072, 0x3099, 0x0000 },
  934   [0x74] = { 0x3072, 0x309A, 0x0000 },
  935   [0x76] = { 0x3075, 0x3099, 0x0000 },
  936   [0x77] = { 0x3075, 0x309A, 0x0000 },
  937   [0x79] = { 0x3078, 0x3099, 0x0000 },
  938   [0x7a] = { 0x3078, 0x309A, 0x0000 },
  939   [0x7c] = { 0x307B, 0x3099, 0x0000 },
  940   [0x7d] = { 0x307B, 0x309A, 0x0000 },
  941   [0x94] = { 0x3046, 0x3099, 0x0000 },
  942   [0x9e] = { 0x309D, 0x3099, 0x0000 },
  943   [0xac] = { 0x30AB, 0x3099, 0x0000 },
  944   [0xae] = { 0x30AD, 0x3099, 0x0000 },
  945   [0xb0] = { 0x30AF, 0x3099, 0x0000 },
  946   [0xb2] = { 0x30B1, 0x3099, 0x0000 },
  947   [0xb4] = { 0x30B3, 0x3099, 0x0000 },
  948   [0xb6] = { 0x30B5, 0x3099, 0x0000 },
  949   [0xb8] = { 0x30B7, 0x3099, 0x0000 },
  950   [0xba] = { 0x30B9, 0x3099, 0x0000 },
  951   [0xbc] = { 0x30BB, 0x3099, 0x0000 },
  952   [0xbe] = { 0x30BD, 0x3099, 0x0000 },
  953   [0xc0] = { 0x30BF, 0x3099, 0x0000 },
  954   [0xc2] = { 0x30C1, 0x3099, 0x0000 },
  955   [0xc5] = { 0x30C4, 0x3099, 0x0000 },
  956   [0xc7] = { 0x30C6, 0x3099, 0x0000 },
  957   [0xc9] = { 0x30C8, 0x3099, 0x0000 },
  958   [0xd0] = { 0x30CF, 0x3099, 0x0000 },
  959   [0xd1] = { 0x30CF, 0x309A, 0x0000 },
  960   [0xd3] = { 0x30D2, 0x3099, 0x0000 },
  961   [0xd4] = { 0x30D2, 0x309A, 0x0000 },
  962   [0xd6] = { 0x30D5, 0x3099, 0x0000 },
  963   [0xd7] = { 0x30D5, 0x309A, 0x0000 },
  964   [0xd9] = { 0x30D8, 0x3099, 0x0000 },
  965   [0xda] = { 0x30D8, 0x309A, 0x0000 },
  966   [0xdc] = { 0x30DB, 0x3099, 0x0000 },
  967   [0xdd] = { 0x30DB, 0x309A, 0x0000 },
  968   [0xf4] = { 0x30A6, 0x3099, 0x0000 },
  969   [0xf7] = { 0x30EF, 0x3099, 0x0000 },
  970   [0xf8] = { 0x30F0, 0x3099, 0x0000 },
  971   [0xf9] = { 0x30F1, 0x3099, 0x0000 },
  972   [0xfa] = { 0x30F2, 0x3099, 0x0000 },
  973   [0xfe] = { 0x30FD, 0x3099, 0x0000 },
  974 };
  975 
  976 static const uint16_t pagefb[256][HFSPLUS_MAX_DECOMPOSE_LEN + 1] = {
  977   [0x1f] = { 0x05F2, 0x05B7, 0x0000 },
  978   [0x2a] = { 0x05E9, 0x05C1, 0x0000 },
  979   [0x2b] = { 0x05E9, 0x05C2, 0x0000 },
  980   [0x2c] = { 0x05E9, 0x05BC, 0x05C1, 0x0000 },
  981   [0x2d] = { 0x05E9, 0x05BC, 0x05C2, 0x0000 },
  982   [0x2e] = { 0x05D0, 0x05B7, 0x0000 },
  983   [0x2f] = { 0x05D0, 0x05B8, 0x0000 },
  984   [0x30] = { 0x05D0, 0x05BC, 0x0000 },
  985   [0x31] = { 0x05D1, 0x05BC, 0x0000 },
  986   [0x32] = { 0x05D2, 0x05BC, 0x0000 },
  987   [0x33] = { 0x05D3, 0x05BC, 0x0000 },
  988   [0x34] = { 0x05D4, 0x05BC, 0x0000 },
  989   [0x35] = { 0x05D5, 0x05BC, 0x0000 },
  990   [0x36] = { 0x05D6, 0x05BC, 0x0000 },
  991   [0x38] = { 0x05D8, 0x05BC, 0x0000 },
  992   [0x39] = { 0x05D9, 0x05BC, 0x0000 },
  993   [0x3a] = { 0x05DA, 0x05BC, 0x0000 },
  994   [0x3b] = { 0x05DB, 0x05BC, 0x0000 },
  995   [0x3c] = { 0x05DC, 0x05BC, 0x0000 },
  996   [0x3e] = { 0x05DE, 0x05BC, 0x0000 },
  997   [0x40] = { 0x05E0, 0x05BC, 0x0000 },
  998   [0x41] = { 0x05E1, 0x05BC, 0x0000 },
  999   [0x43] = { 0x05E3, 0x05BC, 0x0000 },
 1000   [0x44] = { 0x05E4, 0x05BC, 0x0000 },
 1001   [0x46] = { 0x05E6, 0x05BC, 0x0000 },
 1002   [0x47] = { 0x05E7, 0x05BC, 0x0000 },
 1003   [0x48] = { 0x05E8, 0x05BC, 0x0000 },
 1004   [0x49] = { 0x05E9, 0x05BC, 0x0000 },
 1005   [0x4a] = { 0x05EA, 0x05BC, 0x0000 },
 1006   [0x4b] = { 0x05D5, 0x05B9, 0x0000 },
 1007   [0x4c] = { 0x05D1, 0x05BF, 0x0000 },
 1008   [0x4d] = { 0x05DB, 0x05BF, 0x0000 },
 1009   [0x4e] = { 0x05E4, 0x05BF, 0x0000 },
 1010 };
 1011 
 1012 const uint16_t (*hfsplus_decompose_pages_old[256])[HFSPLUS_MAX_DECOMPOSE_LEN + 1] = {
 1013   [0x00] = page00,
 1014   [0x01] = page01,
 1015   [0x02] = page02,
 1016   [0x03] = page03,
 1017   [0x04] = page04,
 1018   [0x09] = page09,
 1019   [0x0a] = page0a,
 1020   [0x0b] = page0b,
 1021   [0x0c] = page0c,
 1022   [0x0d] = page0d,
 1023   [0x0e] = page0e,
 1024   [0x0f] = page0f,
 1025   [0x1e] = page1e,
 1026   [0x1f] = page1f,
 1027   [0x30] = page30,
 1028   [0xfb] = pagefb,
 1029 };
 1030 
 1031 /* ====================================== ts ============================= */
 1032 
 1033 /* The new implementation */
 1034 #include  "hfsplus_decompose_ts.c"
 1035 
 1036 static int compare_decompose_pages()
 1037 {
 1038     int i, j, k;
 1039 
 1040     for (i = 0; i < 256; i++) {
 1041         if (hfsplus_decompose_pages_old[i] == NULL) {
 1042             if (hfsplus_decompose_pages[i] == NULL)
 1043     continue;
 1044             fprintf(stderr, "DIFF : i= %d , ts != NULL\n", i);
 1045             return 0;
 1046         } else if (hfsplus_decompose_pages[i] == NULL) {
 1047             fprintf(stderr, "DIFF : i= %d , ts == NULL\n", i);
 1048             return 0;
 1049         }
 1050 
 1051         for (j = 0; j < 256; j++)
 1052             for (k = 0; k < HFSPLUS_MAX_DECOMPOSE_LEN + 1; k++)
 1053                  if (hfsplus_decompose_pages_old[i][j][k] !=
 1054                      hfsplus_decompose_pages[i][j][k]) {
 1055                      fprintf(stderr,
 1056                              "DIFF : i= %d , j= %d , k= %d : %4.4x !+ %4.4x\n",
 1057                              i, j, k, hfsplus_decompose_pages[i][j][k],
 1058                              hfsplus_decompose_pages[i][j][k]);
 1059                      return 0;
 1060                  }
 1061     }
 1062     return 1;
 1063 }
 1064 
 1065 
 1066 main()
 1067 {
 1068 
 1069  make_hfsplus_decompose_pages();
 1070 
 1071  /* <<< intentional deviations */
 1072  /* hfsplus_decompose_pages[1][4][0] = 0xffff; */
 1073  /* hfsplus_decompose_pages_old[3] = NULL; */
 1074 
 1075  compare_decompose_pages();
 1076 
 1077  exit(0);
 1078 }
 1079