-
-/*
- * The following hacks are a trimmed down version of sprintf.
- */
-/*VARARGS1*/
-/*ARGSUSED*/
-clnp_sprintf(buf, fmt, x1, x2)
- register char *buf, *fmt;
- unsigned x1, x2;
-{
- clnp_prf(buf, fmt, (unsigned int *)&x1);
-}
-
-clnp_prf(buf, fmt, adx)
- register char *buf;
- register char *fmt;
- register unsigned int *adx;
-{
- register int b, c, i;
- char *s;
- char *clnp_printn();
-
-loop:
- while ((c = *fmt++) != '%') {
- if(c == '\0') {
- *buf++ = (char)0;
- return;
- }
- *buf++ = c;
- }
-again:
- c = *fmt++;
- switch (c) {
- case 'l':
- goto again;
- case 'x': case 'X':
- b = 16;
- goto number;
- case 'd': case 'D':
- case 'u': /* what a joke */
- b = 10;
- goto number;
- case 'o': case 'O':
- b = 8;
-number:
- buf = clnp_printn((unsigned long)*adx, b, buf);
- break;
- case 'c':
- b = *adx;
- for (i = 24; i >= 0; i -= 8)
- if (c = (b >> i) & 0x7f)
- *buf++ = c;
- break;
-
- case 's':
- s = (char *)*adx;
- while (*s)
- *buf++ = *s++;
- break;
-
- case '%':
- *buf++ = '%';
- break;
- }
- adx++;
- goto loop;
-}
-
-char *
-clnp_printn(n, b, where)
-unsigned long n;
-int b;
-char *where;
-{
- char prbuf[11];
- register char *cp;
-
- if (b == 10 && (int)n < 0) {
- *where++ = '-';
- n = (unsigned)(-(int)n);
- }
- cp = prbuf;
- do {
- *cp++ = "0123456789abcdef"[n%b];
- n /= b;
- } while (n);
- do {
- *where++ = *--cp;
- } while (cp > prbuf);
- return(where);
-}