Subversion Repositories Kolibri OS

Rev

Go to most recent revision | Blame | Compare with Previous | Last modification | View Log | Download | RSS feed

  1.  
  2.  
  3. int putchar(int ch)
  4. {
  5.         con_init_console_dll();
  6.         char str[2];
  7.         str[0] = ch;
  8.         str[1] = 0;
  9.         con_write_asciiz(str);
  10.         return ch;
  11. }
  12.  
  13. void cdecl puts(const char *str)
  14. {
  15.         con_init_console_dll();
  16.         con_write_asciiz(str);
  17. }
  18.  
  19. char* cdecl gets(char* str)
  20. {
  21.         con_init_console_dll();
  22.         return con_gets(str, 256);
  23. }
  24.  
  25.  
  26. void putuint(int i)
  27. {
  28.     unsigned int n, d = 1000000000;
  29.     char str[255];
  30.     unsigned int dec_index = 0;
  31.     while( ( i/d == 0 ) && ( d >= 10 ) ) d /= 10;
  32.     n = i;
  33.     while(d >= 10)
  34.     {
  35.         str[dec_index++] = ((char)((int)'0' + n/d));
  36.         n = n % d;
  37.         d /= 10;
  38.     }
  39.     str[dec_index++] = ((char)((int)'0' + n));
  40.     str[dec_index] = 0;
  41.     puts(str);
  42. }
  43.  
  44. void putint(int i)
  45. {
  46.     if(i >= 0)
  47.     {
  48.         putuint(i);
  49.     } else {
  50.         putchar('-');
  51.         putuint(-i);
  52.     }
  53. }
  54.  
  55.  
  56. void puthex(uint32_t i)
  57. {
  58.     const unsigned char hex[16]  =  { '0', '1', '2', '3', '4', '5', '6', '7', '8', '9', 'A', 'B', 'C', 'D', 'E', 'F' };
  59.     unsigned int n, d = 0x10000000;
  60.  
  61.     puts("0x");
  62.     while((i / d == 0) && (d >= 0x10)) d /= 0x10;
  63.     n = i;
  64.     while( d >= 0xF )
  65.     {
  66.         putchar(hex[n/d]);
  67.         n = n % d;
  68.         d /= 0x10;
  69.     }
  70.     putchar(hex[n]);
  71. }
  72.  
  73.  
  74. void print(char *format, va_list args)
  75. {
  76.     int i = 0;
  77.     char *string;
  78.  
  79.     while (format[i])
  80.     {
  81.         if (format[i] == '%')
  82.         {
  83.             i++;
  84.             switch (format[i])
  85.             {
  86.                 case 's':
  87.                     string = va_arg(args, char*);
  88.                     puts(string);
  89.                     break;
  90.                 case 'c':
  91.                     // To-Do: fix this! "warning: cast to pointer from integer of different size"
  92.                     putchar(va_arg(args, int));
  93.                     break;
  94.                 case 'd':
  95.                     putint(va_arg(args, int));
  96.                     break;
  97.                 case 'i':
  98.                     putint(va_arg(args, int));
  99.                     break;
  100.                 case 'u':
  101.                     putuint(va_arg(args, unsigned int));
  102.                     break;
  103.                 case 'x':
  104.                     puthex(va_arg(args, uint32_t));
  105.                     break;
  106.                 default:
  107.                     putchar(format[i]);
  108.             }
  109.         } else {
  110.             putchar(format[i]);
  111.         }
  112.         i++;
  113.     }//endwhile
  114. }
  115.  
  116.  
  117. void printf(char *text, ... )
  118. {
  119.     va_list args;
  120.     // find the first argument
  121.     va_start(args, text);
  122.     // pass print the output handle the format text and the first argument
  123.     print(text, args);
  124. }