Date: Wed, 2 Dec 92 16:28:25 PST
From: [email protected] (Info-Mac Moderator)

orrow.stanford.edu!stanford.edu!agate!ucbvax!hplabs!sdd.hp.com!elroy.j        pl.nasa.gov!usc!davidp
From: [email protected] (David Peterson)
Newsgroups: comp.sys.mac.programmer
Subject: Just for you, an early Christmas present
Message-Id: <[email protected]>
Date: 2 Dec 92 20:17:32 GMT
Reply-To: [email protected]
Organization: University of Southern California, Los Angeles, CA
Lines: 99
Nntp-Posting-Host: calvin.usc.edu
Apparently-To: info-mac
Resent-To: backmod
Resent-Date: Wed, 2 Dec 1992 16:28:22 PST
Resent-From: Info-Mac Moderator <[email protected]>



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 <StdArg.h>
#include <StdIO.h>

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);
}