(linenum→info "unix/slp.c:2238")

glibc/2.7/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:   if (argc == 1)
   14:     {
   15:       static char *new_argv[] = { NULL, (char *) "/dev/stdin", NULL };
   16:       argv = new_argv;
   17:       argc = 2;
   18:     }
   19: 
   20:   for (n = 1; n < argc; ++n)
   21:     {
   22:       FILE *fp = fopen (argv[n], "r");
   23:       if (fp == NULL)
   24:         continue;
   25: 
   26:       while (! feof (fp))
   27:         {
   28:           ssize_t cnt = getline (&line, &len, fp);
   29:           char *runp;
   30:           if (cnt <= 0)
   31:             break;
   32: 
   33:           runp = line;
   34:           do
   35:             {
   36:               if (runp[0] == '<' && runp[1] == 'U' && isxdigit (runp[2])
   37:                   && isxdigit (runp[3]) && isxdigit (runp[4])
   38:                   && isxdigit (runp[5]) && runp[6] == '>')
   39:                 {
   40:                   unsigned int val = strtoul (runp + 2, NULL, 16);
   41: 
   42:                   //putchar ('<');
   43:                   if (val < 128)
   44:                     putchar (val);
   45:                   else if (val < 0x800)
   46:                     {
   47:                       putchar (0xc0 | (val >> 6));
   48:                       putchar (0x80 | (val & 0x3f));
   49:                     }
   50:                   else
   51:                     {
   52:                       putchar (0xe0 | (val >> 12));
   53:                       putchar (0x80 | ((val >> 6) & 0x3f));
   54:                       putchar (0x80 | (val & 0x3f));
   55:                     }
   56:                   //putchar ('>');
   57:                   runp += 7;
   58:                 }
   59:               else
   60:                 putchar (*runp++);
   61:             }
   62:           while (runp < &line[cnt]);
   63:         }
   64: 
   65:       fclose (fp);
   66:     }
   67: 
   68:   return 0;
   69: }
Syntax (Markdown)