void setneturg(void) { ring_mark(&netoring); }
static int vrprintf(struct ring *ring, const char *fmt, va_list va) { uint32_t mark = ring_mark(ring); char bf[24]; char ch; while ((ch = *(fmt++))) { if (ch == '\n') { ring_write_ch(ring, '\n'); ring_write_ch(ring, '\r'); } else if (ch != '%') { ring_write_ch(ring, ch); } else { char zero_pad = 0; char *ptr; uint32_t len; ch = *(fmt++); /* Zero padding requested */ if (ch == '0') { ch = *(fmt++); if (ch == '\0') goto end; if (ch >= '0' && ch <= '9') zero_pad = ch - '0'; ch = *(fmt++); } switch (ch) { case 0: goto end; case 'u': case 'd': len = itoa(va_arg(va, uint32_t), 10, 0, (ch == 'u'), bf, zero_pad); ring_write(ring, (uint8_t *)bf, len); break; case 'x': case 'X': len = itoa(va_arg(va, uint32_t), 16, (ch == 'X'), 1, bf, zero_pad); ring_write(ring, (uint8_t *)bf, len); break; case 'c' : ring_write_ch(ring, (char)(va_arg(va, int))); break; case 's' : ptr = va_arg(va, char*); ring_write(ring, (uint8_t *)ptr, strlen(ptr)); break; default: ring_write_ch(ring, ch); break; } } } end: return ring_marklen(ring, mark); }