# include # include # include # include "print.h" int i; char c; char *cp; char **cpp; void *vp; static depth = 0; long printcall (char *fname, int n_ptrs, ...) { int at = 0; va_list ap; int ptr_no = 0; if (depth++) return (1111); if (n_ptrs > MAXARGS) n_ptrs = MAXARGS; va_start (ap, n_ptrs); fprintf (stderr, "%s (", fname); while (ptr_no < n_ptrs) { switch (va_arg(ap, int)) { case Int: fprintf (stderr, "(int) %d", va_arg(ap, int)); break; case Char: fprintf (stderr, "(char) %d", c = va_arg(ap, char)); if (isprint (c)) fprintf (stderr, "<%c>", c); break; case VoidStar: fprintf (stderr, "(void *) %x", va_arg(ap, void *)); break; case CharStar: fprintf (stderr, "(char *) %x", cp = va_arg(ap, char *)); fprintf (stderr, "<\"%s\">", cp? cp : "(null)"); break; case CharStarStar: fprintf (stderr, "(char **) %x", va_arg(ap, char **)); break; default: fprintf (stderr, "(unknown type) %x", va_arg(ap, void *)); exit (1); } ptr_no++; } va_end(ap); fprintf (stderr, ") = "); return (1111); } void printretn (long by, int type, ...) { va_list ap; int ptr_no = 0; if (--depth) return; ++depth; va_start (ap, type); switch (type) { case Int: fprintf (stderr, "(int) %d\n", va_arg (ap, int)); break; case Char: fprintf (stderr, "(char) %c\n", va_arg (ap, char)); break; case VoidStar: fprintf (stderr, "(void *) %x\n", va_arg (ap, void *)); break; case CharStar: fprintf (stderr, "(char *) %x", cp = va_arg(ap, char *)); fprintf (stderr, "<\"%s\">\n", cp? cp : "(null)"); break; case CharStarStar: fprintf (stderr, "(char **) %x\n", va_arg (ap, char **)); break; default: fprintf (stderr, "(unknown type) %x\n", va_arg (ap, void *)); exit (1); } va_end(ap); --depth; }