Blame localedata/show-ucs-data.c

Packit Service 82fcde
#include <ctype.h>
Packit Service 82fcde
#include <stdio.h>
Packit Service 82fcde
#include <stdlib.h>
Packit Service 82fcde
#include <sys/types.h>
Packit Service 82fcde
Packit Service 82fcde
int
Packit Service 82fcde
main (int argc, char *argv[])
Packit Service 82fcde
{
Packit Service 82fcde
  int n;
Packit Service 82fcde
  char *line = NULL;
Packit Service 82fcde
  size_t len = 0;
Packit Service 82fcde
Packit Service 82fcde
  if (argc == 1)
Packit Service 82fcde
    {
Packit Service 82fcde
      static char *new_argv[] = { NULL, (char *) "/dev/stdin", NULL };
Packit Service 82fcde
      argv = new_argv;
Packit Service 82fcde
      argc = 2;
Packit Service 82fcde
    }
Packit Service 82fcde
Packit Service 82fcde
  for (n = 1; n < argc; ++n)
Packit Service 82fcde
    {
Packit Service 82fcde
      FILE *fp = fopen (argv[n], "r");
Packit Service 82fcde
      if (fp == NULL)
Packit Service 82fcde
	continue;
Packit Service 82fcde
Packit Service 82fcde
      while (! feof (fp))
Packit Service 82fcde
	{
Packit Service 82fcde
	  ssize_t cnt = getline (&line, &len, fp);
Packit Service 82fcde
	  char *runp;
Packit Service 82fcde
	  if (cnt <= 0)
Packit Service 82fcde
	    break;
Packit Service 82fcde
Packit Service 82fcde
	  runp = line;
Packit Service 82fcde
	  do
Packit Service 82fcde
	    {
Packit Service 82fcde
	      if (runp[0] == '<' && runp[1] == 'U' && isxdigit (runp[2])
Packit Service 82fcde
		  && isxdigit (runp[3]) && isxdigit (runp[4])
Packit Service 82fcde
		  && isxdigit (runp[5]) && runp[6] == '>')
Packit Service 82fcde
		{
Packit Service 82fcde
		  unsigned int val = strtoul (runp + 2, NULL, 16);
Packit Service 82fcde
Packit Service 82fcde
		  //putchar ('<');
Packit Service 82fcde
		  if (val < 128)
Packit Service 82fcde
		    putchar (val);
Packit Service 82fcde
		  else if (val < 0x800)
Packit Service 82fcde
		    {
Packit Service 82fcde
		      putchar (0xc0 | (val >> 6));
Packit Service 82fcde
		      putchar (0x80 | (val & 0x3f));
Packit Service 82fcde
		    }
Packit Service 82fcde
		  else
Packit Service 82fcde
		    {
Packit Service 82fcde
		      putchar (0xe0 | (val >> 12));
Packit Service 82fcde
		      putchar (0x80 | ((val >> 6) & 0x3f));
Packit Service 82fcde
		      putchar (0x80 | (val & 0x3f));
Packit Service 82fcde
		    }
Packit Service 82fcde
		  //putchar ('>');
Packit Service 82fcde
		  runp += 7;
Packit Service 82fcde
		}
Packit Service 82fcde
	      else
Packit Service 82fcde
		putchar (*runp++);
Packit Service 82fcde
	    }
Packit Service 82fcde
	  while (runp < &line[cnt]);
Packit Service 82fcde
	}
Packit Service 82fcde
Packit Service 82fcde
      fclose (fp);
Packit Service 82fcde
    }
Packit Service 82fcde
Packit Service 82fcde
  return 0;
Packit Service 82fcde
}