Back to index

glibc  2.9
Functions
show-ucs-data.c File Reference
#include <ctype.h>
#include <stdio.h>
#include <stdlib.h>
#include <sys/types.h>

Go to the source code of this file.

Functions

int main (int argc, char *argv[])

Function Documentation

int main ( int  argc,
char *  argv[] 
)

Definition at line 7 of file show-ucs-data.c.

{
  int n;
  char *line = NULL;
  size_t len = 0;

  if (argc == 1)
    {
      static char *new_argv[] = { NULL, (char *) "/dev/stdin", NULL };
      argv = new_argv;
      argc = 2;
    }

  for (n = 1; n < argc; ++n)
    {
      FILE *fp = fopen (argv[n], "r");
      if (fp == NULL)
       continue;

      while (! feof (fp))
       {
         ssize_t cnt = getline (&line, &len, fp);
         char *runp;
         if (cnt <= 0)
           break;

         runp = line;
         do
           {
             if (runp[0] == '<' && runp[1] == 'U' && isxdigit (runp[2])
                && isxdigit (runp[3]) && isxdigit (runp[4])
                && isxdigit (runp[5]) && runp[6] == '>')
              {
                unsigned int val = strtoul (runp + 2, NULL, 16);

                //putchar ('<');
                if (val < 128)
                  putchar (val);
                else if (val < 0x800)
                  {
                    putchar (0xc0 | (val >> 6));
                    putchar (0x80 | (val & 0x3f));
                  }
                else
                  {
                    putchar (0xe0 | (val >> 12));
                    putchar (0x80 | ((val >> 6) & 0x3f));
                    putchar (0x80 | (val & 0x3f));
                  }
                //putchar ('>');
                runp += 7;
              }
             else
              putchar (*runp++);
           }
         while (runp < &line[cnt]);
       }

      fclose (fp);
    }

  return 0;
}

Here is the call graph for this function: