1*45194Ssklower
2*45194Ssklower /*
3*45194Ssklower * Scaled down version of C Library printf and sprintf.
4*45194Ssklower * Only %c %s %u %d (==%u) %o %D %O %x %X are recognized.
5*45194Ssklower *
6*45194Ssklower * Frank Pronk
7*45194Ssklower * Copyright (c) 1983
8*45194Ssklower */
9*45194Ssklower
10*45194Ssklower static char *lp;
11*45194Ssklower
12*45194Ssklower char *
sprint(buf,fmt,x1)13*45194Ssklower sprint (buf, fmt, x1)
14*45194Ssklower char *buf, *fmt;
15*45194Ssklower unsigned x1;
16*45194Ssklower {
17*45194Ssklower (void) doprint (buf, fmt, &x1);
18*45194Ssklower }
19*45194Ssklower
fprint(fd,fmt,x1)20*45194Ssklower fprint (fd, fmt, x1)
21*45194Ssklower char *fmt;
22*45194Ssklower unsigned x1;
23*45194Ssklower {
24*45194Ssklower register int n;
25*45194Ssklower char line[128];
26*45194Ssklower
27*45194Ssklower n = doprint (line, fmt, &x1);
28*45194Ssklower return (write (fd, line, n));
29*45194Ssklower }
30*45194Ssklower
print(fmt,x1)31*45194Ssklower print (fmt, x1)
32*45194Ssklower char *fmt;
33*45194Ssklower unsigned x1;
34*45194Ssklower {
35*45194Ssklower register int n;
36*45194Ssklower char line[128];
37*45194Ssklower
38*45194Ssklower n = doprint (line, fmt, &x1);
39*45194Ssklower return (write (1, line, n));
40*45194Ssklower }
41*45194Ssklower
42*45194Ssklower static
doprint(buf,fmt,adx)43*45194Ssklower doprint(buf, fmt, adx)
44*45194Ssklower char *buf;
45*45194Ssklower register char *fmt;
46*45194Ssklower register unsigned *adx;
47*45194Ssklower {
48*45194Ssklower register c;
49*45194Ssklower char *s;
50*45194Ssklower
51*45194Ssklower lp = buf;
52*45194Ssklower loop:
53*45194Ssklower while((c = *fmt++) != '%') {
54*45194Ssklower if(c == '\0') {
55*45194Ssklower *lp = '\0';
56*45194Ssklower return (lp - buf);
57*45194Ssklower }
58*45194Ssklower putchar(c);
59*45194Ssklower }
60*45194Ssklower switch(c = *fmt++) {
61*45194Ssklower case 'c':
62*45194Ssklower putchar((char)*adx);
63*45194Ssklower break;
64*45194Ssklower
65*45194Ssklower case 'd':
66*45194Ssklower case 'u':
67*45194Ssklower case 'o':
68*45194Ssklower case 'x':
69*45194Ssklower itoa((unsigned long)*adx, c);
70*45194Ssklower break;
71*45194Ssklower
72*45194Ssklower case 's':
73*45194Ssklower s = (char *)*adx;
74*45194Ssklower while(c = *s++)
75*45194Ssklower putchar(c);
76*45194Ssklower break;
77*45194Ssklower
78*45194Ssklower case 'D':
79*45194Ssklower case 'O':
80*45194Ssklower case 'X':
81*45194Ssklower itoa(*(unsigned long *)adx, c);
82*45194Ssklower adx += (sizeof(long) / sizeof(int)) - 1;
83*45194Ssklower break;
84*45194Ssklower
85*45194Ssklower default:
86*45194Ssklower putchar(c);
87*45194Ssklower }
88*45194Ssklower adx++;
89*45194Ssklower goto loop;
90*45194Ssklower }
91*45194Ssklower
92*45194Ssklower /*
93*45194Ssklower * Print an unsigned integer in base base.
94*45194Ssklower */
itoa(n,base)95*45194Ssklower itoa (n, base)
96*45194Ssklower register unsigned long n;
97*45194Ssklower register char base;
98*45194Ssklower {
99*45194Ssklower char prbuf[11];
100*45194Ssklower register int b;
101*45194Ssklower register char *cp;
102*45194Ssklower
103*45194Ssklower if (base == 'o' || base == 'O')
104*45194Ssklower b = 8;
105*45194Ssklower else if (base == 'x' || base == 'X')
106*45194Ssklower b = 16;
107*45194Ssklower else
108*45194Ssklower b = 10;
109*45194Ssklower if (b == 10 && (int)n < 0) {
110*45194Ssklower putchar('-');
111*45194Ssklower n = (unsigned)(-(int)n);
112*45194Ssklower }
113*45194Ssklower cp = prbuf;
114*45194Ssklower do {
115*45194Ssklower *cp++ = "0123456789abcdef"[n%b];
116*45194Ssklower n /= b;
117*45194Ssklower } while (n);
118*45194Ssklower do
119*45194Ssklower putchar(*--cp);
120*45194Ssklower while (cp > prbuf);
121*45194Ssklower }
122*45194Ssklower
123*45194Ssklower static
putchar(c)124*45194Ssklower putchar(c)
125*45194Ssklower char c;
126*45194Ssklower {
127*45194Ssklower /* if(lp < &line[128])*/
128*45194Ssklower *lp++ = c;
129*45194Ssklower }
130