|
|
1.1 root 1: /*
2: * Scaled down version of C Library printf.
3: * Only %s %u %d (==%u) %o %x %D are recognized.
4: * Used to print diagnostic information
5: * directly on console tty.
6: * Since it is not interrupt driven,
7: * all system activities are pretty much
8: * suspended.
9: * Printf should not be used for chit-chat.
10: */
11: /* VARARGS1 */
12: _printf(fmt, x1)
13: register char *fmt;
14: unsigned x1;
15: {
16: register c;
17: register unsigned *adx;
18: char *s;
19:
20: adx = &x1;
21: loop:
22: while((c = *fmt++) != '%') {
23: if(c == '\0')
24: return;
25: _putchar(c);
26: }
27: c = *fmt++;
28: if(c == 'd' || c == 'u' || c == 'o' || c == 'x')
29: _printn((long)*adx, c=='o'? 8: (c=='x'? 16:10));
30: else if(c == 's') {
31: s = (char *)*adx;
32: while(c = *s++)
33: _putchar(c);
34: adx++;
35: } else if (c=='D' || c=='O' || c =='X') {
36: _printn(*(long *)adx, c=='O'? 8: (c=='X'? 16:10));
37: adx += (sizeof(long) / sizeof(int)) - 1;
38: }
39: adx++;
40: goto loop;
41: }
42:
43: /*
44: * Print an unsigned integer in base b.
45: */
46: _printn(n, b)
47: long n;
48: {
49: register long a;
50:
51: if (n<0) { /* shouldn't happen */
52: _putchar('-');
53: n = -n;
54: }
55: if(a = n/b)
56: _printn(a, b);
57: _putchar("0123456789ABCDEF"[(int)(n%b)]);
58: }
59:
60: _putchar(c)
61: char c;
62: {
63: write(1,&c,1);
64: }
This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.