extern int putchar(char); extern int putint(int); void mini_printf(void); int power(int, int); int *values; char *fmt; void goal(int x, int n) { int v[3]; v[0] = x; v[1] = n; v[2] = power(x, n); values = v; fmt = "power(%d, %d) = %d\n"; mini_printf(); } int power(int x, int n) /* Return the nth power of x */ { int pow; pow = 1; while (n > 0) { pow = pow * x; n--; } return pow; } void mini_printf(void) { int i, j; for (i = j = 0; fmt[i] != '\0'; i++) { /* Parse the format string */ if (fmt[i] != '%') putchar(fmt[i]); else { i++; switch (fmt[i]) { case 'd': putint(values[j]); /* %d: output the next int */ j++; break; case '%': putchar('%'); break; default: putchar(fmt[i]); break; } } } }