Date: Wed, 2 Dec 92 16:28:25 PST From: macmod@SUMEX-AIM.Stanford.EDU (Info-Mac Moderator)!!agate!ucbvax!hplabs!!elroy.j!usc!davidp From: (David Peterson) Newsgroups: comp.sys.mac.programmer Subject: Just for you, an early Christmas present Message-Id: <> Date: 2 Dec 92 20:17:32 GMT Reply-To: Organization: University of Southern California, Los Angeles, CA Lines: 99 Nntp-Posting-Host: Apparently-To: info-mac Resent-To: backmod Resent-Date: Wed, 2 Dec 1992 16:28:22 PST Resent-From: Info-Mac Moderator Now you, the Mac programmer, can have pages of useless strings effortlessly vomited to your screen just like your DOS and UNIX friends do. With this dandy new MBPrintf routine you can make up printf style diagnostic messages and have them show up in MacsBug correctly interpreted and formatted. Okay, so this is just a little hack I threw together with a liberal amount copyright infringment (see pg 156 of K&R). After a few hours of using it I found it extremely useful, and it has earned a permanent place in my personal library (not unlike every other snippet of code I come across). Hopefully you will find it just as useful, but (as always) your mileage may vary. Handy tip: Instead of putting a '\n' at the end of your string try a semi-colon followed by Your Favorite MacsBug Command. ';g' is probably the most useful and ';s 3' will take you back to the instruction right after the JSR into this function. Combinations of ';dx off'/';dx on' could be good too. Caveats: This will probably blow up if called from interupt. It makes calls into the StdCLib segment which may or may not be loaded. Probably won't work in stand alone code resources because the aforementioned code segment contains global data. I don't know what will happen if your string gets over 255 characters, but it probably won't be what you expected. -dave. --------------------------- #include #include void MBPrintf(char* form, ...); void MBPrintf(char* form, ...) { va_list ap; char* p; char* sval; int ival; double dval; char string[256]; char* strp; char* strb; strp = &string[1]; strb = &string[1]; va_start(ap, form); for (p = form; *p; p++) { if (*p != '%') { *strp++ = *p; continue; } switch (*++p) { case 'd': ival = va_arg(ap, int); sprintf(strp, "%d", ival); while (*++strp); break; case 'x': ival = va_arg(ap, int); sprintf(strp, "%x", ival); while (*++strp); break; case 'f': dval = va_arg(ap, double); sprintf(strp, "%f", dval); while (*++strp); break; case 's': for (sval = va_arg(ap, char*); *sval; sval++) *strp++ = *sval; break; default: *strp++ = *p; break; } } va_end(ap); string[0] = strp - strb; DebugStr((Str255) string); }