#include "stdout.h" #ifdef STDOUT_put_string void stdout_put_string(void (*putc)(char c), const char* s) { register unsigned char c; while ((c=*s++)) putc(c); } #endif #ifdef STDOUT_put_uint void stdout_put_uint(void (*putc)(const char c), int n) { unsigned char i; for(i=0; _devisor_ten[i]>n; i++); int c=0; for(; i0; n %= d, d /= 10) /// putc('0' + (n / d)); } #endif #ifdef STDOUT_reverse_bits char stdout_reverse_bits(unsigned char v) { unsigned char s = sizeof(v) * CHAR_BIT; // bit size; must be power of 2 unsigned char mask = ~0; while ((s >>= 1) > 0) { mask ^= (mask << s); v = ((v >> s) & mask) | ((v << s) & ~mask); } return v; } #endif #ifdef STDOUT_put_binary void stdout_put_binary(void (*putc)(const char c), const unsigned char data) { char i; for(i=CHAR_BIT-1; i>=0; i--) { if(data & (1<='0' && format[0] <='9') s++; for(; s>=0; --s) width += _potences[sizeof(_potences) - s] * (format[-s] - '0'); // count numbers width in decimal-system... for(s=10; s1; width--, putc(f)); // prepend whitespace-character[space] } stdout_put_uint(putc, data.as_uint); if(format[0] != 'd') ++format; } break; case 's': #ifdef STDOUT_put_string stdout_put_string(putc, va_arg(vl, char*)); #else va_arg(vl, int); // remove next argument #endif break; case 'b': #ifdef STDOUT_put_binary data.as_int = va_arg(vl, int); stdout_put_binary(putc, data.as_uint); #else va_arg(vl, int); // remove next argument #endif break; } } } while((++format)[0] != '\0'); return; } #endif