/[pupa]/pupa/kern/misc.c
ViewVC logotype

Diff of /pupa/kern/misc.c

Parent Directory Parent Directory | Revision Log Revision Log | View Patch Patch

revision 1.2 by okuji, Mon Jan 6 00:01:35 2003 UTC revision 1.3 by okuji, Thu Sep 25 20:15:52 2003 UTC
# Line 328  pupa_vsprintf (char *str, const char *fm Line 328  pupa_vsprintf (char *str, const char *fm
328  {  {
329    char c;    char c;
330    int count = 0;    int count = 0;
331    auto void write_char (char ch);    auto void write_char (unsigned char ch);
332    auto void write_str (const char *s);    auto void write_str (const char *s);
333        
334    void write_char (char ch)    void write_char (unsigned char ch)
335      {      {
336        if (str)        if (str)
337          *str++ = ch;          *str++ = ch;
# Line 375  pupa_vsprintf (char *str, const char *fm Line 375  pupa_vsprintf (char *str, const char *fm
375    
376              case 'c':              case 'c':
377                n = va_arg (args, int);                n = va_arg (args, int);
378                write_char (n);                write_char (n & 0xff);
379                  break;
380    
381                case 'C':
382                  {
383                    pupa_uint32_t code = va_arg (args, pupa_uint32_t);
384                    int shift;
385                    unsigned mask;
386                    
387                    if (code <= 0x7f)
388                      {
389                        shift = 0;
390                        mask = 0;
391                      }
392                    else if (code <= 0x7ff)
393                      {
394                        shift = 6;
395                        mask = 0xc0;
396                      }
397                    else if (code <= 0xffff)
398                      {
399                        shift = 12;
400                        mask = 0xe0;
401                      }
402                    else if (code <= 0x1fffff)
403                      {
404                        shift = 18;
405                        mask = 0xf0;
406                      }
407                    else if (code <= 0x3ffffff)
408                      {
409                        shift = 24;
410                        mask = 0xf8;
411                      }
412                    else if (code <= 0x7fffffff)
413                      {
414                        shift = 30;
415                        mask = 0xfc;
416                      }
417                    else
418                      {
419                        code = '?';
420                        shift = 0;
421                        mask = 0;
422                      }
423    
424                    write_char (mask | (code >> shift));
425                    
426                    for (shift -= 6; shift >= 0; shift -= 6)
427                      write_char (0x80 | (0x3f & (code >> shift)));
428                  }
429                break;                break;
430    
431              case 's':              case 's':

Legend:
Removed from v.1.2  
changed lines
  Added in v.1.3

savannah-hackers-public@gnu.org
ViewVC Help
Powered by ViewVC 1.1.26