Update.
[platform/upstream/glibc.git] / localedata / show-ucs-data.c
1 #include <ctype.h>
2 #include <stdio.h>
3 #include <stdlib.h>
4 #include <sys/types.h>
5
6 int
7 main (int argc, char *argv[])
8 {
9   int n;
10   char *line = NULL;
11   size_t len = 0;
12
13   for (n = 1; n < argc; ++n)
14     {
15       FILE *fp = fopen (argv[n], "r");
16       if (fp == NULL)
17         continue;
18
19       while (! feof (fp))
20         {
21           ssize_t cnt = getline (&line, &len, fp);
22           char *runp;
23           if (cnt <= 0)
24             break;
25
26           runp = line;
27           do
28             {
29               if (runp[0] == '<' && runp[1] == 'U' && isxdigit (runp[2])
30                   && isxdigit (runp[3]) && isxdigit (runp[4])
31                   && isxdigit (runp[5]) && runp[6] == '>')
32                 {
33                   unsigned int val = strtoul (runp + 2, NULL, 16);
34
35                   putchar ('<');
36                   if (val < 128)
37                     putchar (val);
38                   else if (val < 0x800)
39                     {
40                       putchar (0xc0 | (val >> 6));
41                       putchar (0x80 | (val & 0x3f));
42                     }
43                   else
44                     {
45                       putchar (0xe0 | (val >> 12));
46                       putchar (0x80 | ((val >> 6) & 0x3f));
47                       putchar (0x80 | (val & 0x3f));
48                     }
49                   putchar ('>');
50                   runp += 7;
51                 }
52               else
53                 putchar (*runp++);
54             }
55           while (runp < &line[cnt]);
56         }
57
58       fclose (fp);
59     }
60
61   return 0;
62 }