Advertisement
Guest User

Untitled

a guest
Dec 10th, 2019
115
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C 1.60 KB | None | 0 0
  1. int genprintf(void (*put)(void * ctx, char c), void * ctx, char const * fmt, va_list ArgList)
  2. {
  3.     int len = 0;
  4.     bool isNull = false;
  5.     if (put == NULL)
  6.         isNull = true;
  7.     while (*fmt)
  8.     {
  9.         len++;
  10.         if (*fmt == '%')
  11.         {
  12.             fmt++;
  13.             if (*fmt == 'i')
  14.             {
  15.                 fmt++;
  16.                 char Buff[64] = "XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX";
  17.                 int length = NumToString(Buff, sizeof(Buff), va_arg(ArgList, int), 10);
  18.                 len += length - 1;
  19.                 for (int i = 0; i < length; i++) {
  20.                     if (!isNull)
  21.                         put(ctx, Buff[i]);
  22.                 }
  23.             }
  24.             else if (*fmt == 'h')
  25.             {
  26.                 fmt++;
  27.                 char Buff[64] = "XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX";
  28.                 int length = NumToString(Buff, sizeof(Buff), va_arg(ArgList, int), 16);
  29.                 len += length - 1;
  30.                 if (!isNull)
  31.                 {
  32.                     put(ctx, '0');
  33.                     put(ctx, 'x');
  34.                     for (int i = 0; i < length; i++) {
  35.                         put(ctx, Buff[i]);
  36.                     }
  37.                 }
  38.  
  39.             }
  40.         }
  41.         else
  42.         {
  43.             if (!isNull)
  44.                 put(ctx, *fmt);
  45.             fmt++;
  46.         }
  47.     }
  48.     return len;
  49. }
  50.  
  51. void kprintf(void (*put)(void * ctx, char c), void * ctx, char const * fmt, ...)
  52. {
  53.     va_list vaList;
  54.     va_start(vaList, fmt);
  55.     genprintf(put, ctx, fmt, vaList);
  56.     va_end(vaList);
  57. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement