|
|
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.