Dennis Ritchie's kernel printf

2026-10-11

printf in ~/unix-v6/ken/prf.c is that idea in about 25 lines:


printf(fmt,x1,x2,x3,x4,x5,x6,x7,x8,x9,xa,xb,xc)
char fmt[];
{
    register char *s;
    register *adx, c;

    adx = &x1;
loop:
    while((c = *fmt++) != '%') {
        if(c == '\0')
            return;
        putchar(c);
    }
    c = *fmt++;
    if(c == 'd' || c == 'l' || c == 'o')
        printn(*adx, c=='o'? 8: 10);
    if(c == 's') {
        s = *adx;
        while(c = *s++)
            putchar(c);
    }
    adx++;
    goto loop;
}

printn(n, b)
{
    register a;

    if(a = ldiv(n, b))
        printn(a, b);
    putchar(lrem(n, b) + '0');
}