static void _console_write_integer(int x, int base) { static char* characterLookup = "0123456789abcdef"; int negative = 0; if (x < 0) { x = -x; negative = 1; } int length = 0; int temp = x; do { ++length; } while ((temp /= base)); char buffer[length + 1]; for (int i = length - 1; i >= 0; --i) { buffer[i] = characterLookup[x % base]; x /= base; } buffer[length] = '\0'; if (negative) { console_write_char('-'); } console_write_str(buffer); }
main() { char buf[64]; while (1) { fgets(buf, 64, stdin); console_write_str(buf); console_flush(); } }
//------------------------------------------------------------------------------ void console_write_P (const char *Buffer,...) { va_list ap; va_start (ap, Buffer); int format_flag; char str_buffer[20]; char move = 0; char len, b; char by; char *ptr; //Ausgabe der Zeichen for(;;) { by = *Buffer++; if(by==0) break; // end of format string if (by == '%') { by = *Buffer++; while (isdigit(by)) { // potential overflow of move move = by - '0' + move * 10; by = *Buffer++; } switch (by) { case 's': ptr = va_arg(ap,char *); console_write_str(ptr); break; case 'c': //Int to char format_flag = va_arg(ap,int); console_write_char (format_flag++); break; case 'i': case 'd': itoa(va_arg(ap,int), str_buffer,10); goto ConversionLoop; case 'u': utoa(va_arg(ap,unsigned int), str_buffer,10); goto ConversionLoop; case 'x': itoa(va_arg(ap,int), str_buffer,16); //**************************** ConversionLoop: //**************************** len = strlen (str_buffer); b = '0'; while ( len < move ) { console_write_char (b); len++; } console_write_str (str_buffer); move = 0; break; } // switch } else