Facebook
From Bulky Stork, 3 Years ago, written in Plain Text.
Embed
Download Paste or View Raw
Hits: 50
  1. #include <unistd.h>
  2. #include <stdarg.h>
  3. #include <stdlib.h>
  4. #include <stdio.h>
  5. #include <string.h>
  6.  
  7. static int write_stdout(const char *token, int length)
  8. {
  9.         int rc;
  10.         int bytes_written = 0;
  11.  
  12.         do {
  13.                 rc = write(1, token + bytes_written, length - bytes_written);
  14.                 if (rc < 0)
  15.                         return rc;
  16.  
  17.                 bytes_written += rc;
  18.         } while (bytes_written < length);
  19.  
  20.         return bytes_written;
  21. }
  22.  
  23. char* convert(unsigned int num, int base)
  24. {
  25.         static char Representation[] = "0123456789ABCDEF";
  26.         static char buffer[50];
  27.         char *ptr;
  28.  
  29.         ptr = &buffer[49];
  30.         *ptr = '\0';
  31.  
  32.         do
  33.         {
  34.                 *--ptr = Representation[num % base];
  35.                 num/=base;
  36.         } while (num != 0);
  37.        
  38.         return ptr;
  39. }
  40.  
  41. void iocla_printf(const char *format, ...)
  42. {
  43.         va_list args;
  44.         va_start(args, format);
  45.  
  46.         unsigned int i;
  47.         char* specificator;
  48.         char* s;
  49.  
  50.         for (specificator = format; *specificator != '\0'; specificator++)
  51.         {
  52.                 while (*specificator != '%')
  53.                 {
  54.                         putchar(*specificator);
  55.                 }
  56.  
  57.                 specificator++;
  58.  
  59.                 switch (*specificator)
  60.                 {
  61.                         case 'd':
  62.                                         i = va_arg(args,int);
  63.                                         if (i<0)
  64.                                         {
  65.                                                 i = -i;
  66.                                                 putchar('-');
  67.                                         }
  68.                                         puts(convert(i,10));
  69.                                         break;
  70.                         break;
  71.                
  72.                         case 'u':
  73.                                         i = va_arg(args,int);
  74.                                         puts(convert(i,10));
  75.                                         break;
  76.                         break;
  77.  
  78.                         case 'x':
  79.                                         i = va_arg(args, unsigned int);
  80.                                         puts(convert(i,16));
  81.                                         break;
  82.                         break;
  83.  
  84.                         case 'c':
  85.                                         i = va_arg(args, int);
  86.                                         putchar(i);
  87.                                         break;
  88.                         break;
  89.  
  90.                         case 's':
  91.                                         s = va_arg(args, char *);
  92.                                         puts(s);
  93.                                         break;
  94.                         break;
  95.  
  96.                         default:
  97.                         break;
  98.                 }                              
  99.         }
  100.        
  101.         //return 0;
  102. }
  103.  
  104. int main()
  105. {
  106.         //printf("%d\n", iocla_printf("Test blaa balaba %d", 5, 7 ,8));
  107.         iocla_printf("test, nr int: %d, unsigned: %u, hexa: %x, char: %c, string: %s", 15, 2, 4, 'b', "mancare");
  108.         printf("\n");
  109.         return 0;
  110. }
  111.