5/25/97 11:00 PM
Subject: MAX Digest - 24 May 1997 to 25 May
1997To: Recipients of MAX digests 

There are 5 messages totalling 246 lines in this issue.

Topics of the day:

  1. MAX Digest - 22 May 1997 to 23 May 1997
  2. Maxplay 3.5.3 authorization?
  3. Development tools for externals
  4. Copy Protection Fucked Report #416
  5. "speak" compilation problems


Date:    Sun, 25 May 1997 14:16:48 +0000
Subject: Re: MAX Digest - 22 May 1997 to 23 May 1997

TeleMidi is not a software. It's an interface(hardware).
It's not a TCP/IP oriented system.

BTW. I'm 'interactive' and "realtime' things have to be
'just on time'? Do we have to have the same result running on the both
side of the telephone cable? Sharing info and infecting on other persons
time&space could be something more than that...well...maybe that's why
MAX came up.....just curious...

Are there any MIDI-RADIO station (maybe using MAX to provide endless
music)? If we could pour our HDD as much data as we want directly from
the would be great! I can say anything, because
I'm not a programmer...maybe a hard system to invent?

Automatic digest processor wrote:

> Date:    Fri, 1 Jan 1904 21:15:44 -0800
> From:    Richard Zvonar 
> Subject: Re: TeleMidi

> How is this different from such programs as Mark Coniglio's MidiPhone and
> Doug Wyatt's Modem Jammer (both written in 1993)?  These Mac programs
> allowed you to connect a MIDI interface to one serial port of your Mac and
> a modem to the other, dial up and make a phone connection, and then send
> MIDI data back and forth.
> The Telemidic Web site has a picture of a blue box with a MIDI jack on the
> front. Does this hook up to a modem?


Date:    Sat, 24 May 1997 23:18:49 -0700
From:    David Zicarelli 
Subject: Re: Maxplay 3.5.3 authorization?

Amanda Pehlke  writes:

>I downloaded the updated Max3.5.3 today, and put MaxPlay3.5.3 in my second
>computer to replace MaxPlay3.5.1.  Now MaxPlay wants its disk authorized,
>whereas v.3.5.1 didn't, and still doesn't if I put it back.

I messed up. MaxPlayFAT3.5.3 included with the 3.5.3 update
is actually a copy-protected 68K Max with a PowerPC MaxPlay that
is checking for the copy protection. MaxPlay is not supposed to
be copy protected, nor is it supposed to be Max!

For the next day or so, you can ftp the correct FAT MaxPlay from

... and I will correct the 3.5.3 update archive on the Opcode web
site on Monday. Once the archive is corrected, I will remove
the MaxPlay from this FTP site.

The 68K MaxPlay3.5.3 is correct.

Thanks for discovering the problem. I will get this update right
one of these days.

David Z.


Date:    Sun, 25 May 1997 19:41:51 +0200
From:    Peter Castine 
Subject: Re: Development tools for externals

R. Albert Falesch asks:
>Could I please get a recommendation?  I may have to develop some MAX
>externals. I would like guidance regarding the right compiler. I would
>want to have C++, if for no other reason than the fact that I've been
>using C++ on other platforms and I rather like it.  Any caveats about
>overhead or efficiency in the use of C++ in MAX externals are welcomed,

My take:

The sample code for Max externals is all plain-vanilla C. Now, back in the
days when THINK C was the great compiler for Mac, someone put together a
base class for Max externals using THINK's quasi-Objective C
implementation. I don't think the performance penalty of using C++ classes,
inheritance, etc. should be prohibitive, but I haven't gotten around to
trying it. Thing is, you'll probably want to get a couple of externals
under your belt in C, so you know what you want to abstract into a base
class. (And, don't forget, ANSI C is not K&R C, so you get a bunch of
Stroustrup enhancements in Metrowerks C.) By the time you've got that
experience, you'll probably find it just as fast to copy&paste your basic
external code then to sit down and develop a base class abstraction. But,
if you do write a C++ base class, let us'ns know, y'hear?

Anyway, CodeWarrior is considered by most folks to be the compiler of
choice nowadays. Given that, it would make most sense to get the latest
version, n'est-ce-pas? If you get CW11, you get free upgrades to 12 and 13.
If you have any sort of academic affiliation, you can probably get CW
Gold/Academic for about the same price of any of the book/CW bundles (which
don't give you free upgrades--methinks).

[FTR and to be absolutely honest: I'm still using CW 10, and quite happily,
too; but that's because my subscription ran out and rumor has it that the
10->11 update was not a big deal. Also, I'm no longer academic, which makes
a new subscription a lot more expensive than what I'm used to paying...]

Hope this helps,


------------------ ------------------
Dr. Peter Castine           | The e-mail address still works. It's just the   | university computer center that's been flaky
                            | (particularly on public holidays).
                            | If mail bounces, please try again.


Date:    Sat, 24 May 1997 23:38:08 -0800
From:    Richard Zvonar 
Subject: Re: Copy Protection Fucked Report #416

On Sat, 24 May 1997 13:21:19 +0100  Nick Rothwell :

>Here's a good game. Set the clock on the Mac forward (either to simulate an
>accident, such as a second-hand PowerBook arriving with the date set ten
>days in advance for no good reason, or to simulate changing timezones).
>Install MAX. Set clock back.
>Run Norton utilites to check disks. It will want to change the modification
>dates of the files that appear to be modified ahead of the current time.
>Let it do so.
>Try to run MAX: copy protection refuses to launch it and requires new

Send bug reports and complaints to:

Allen Cronce
Pace Anti-Piracy
(408) 297-7444

Richard Zvonar, PhD                    
(818) 760-8055 voice/fax               



Date:    Sun, 25 May 1997 19:48:37 -0400
From:    Stephen Kay 
Subject: "speak" compilation problems

Hello All,

I've been attempting to finish the port of Michael Klingbiel's "speak"
object to the PPC (for the benefit of all), and not having much luck. =

After more than a day's time, (and learning far more about the
SpeechManager than I ever wanted to know), I am forced to the conclusion
that the code seems to be basically correct.

The problem is it compiles and runs fine in 68k version; in the PPC it
crashes immediately when calling SpeakText().

AFAICT, all of the SpeechManager functions, voices, channels etc. are
initialized properly (do not return any error messages).  This seems to b=
further proven by the little test I've illustrated below using
"SpeakString()", which functions properly.

I can only assume it's some vagary with the PPC that I cannot find (I've
tried everything I can thing of). Or perhaps with the way the text buffer=

is being dereferenced?  Any suggestions/help would be appreciated, or I'm=

afraid I'll have to give up and pass this on to someone else.

Stephen Kay

//the object:
typedef struct {
        Object                  speak_obj;
        VoiceSpec               speaker;
        SpeechChannel   chan;
        short                   vc;
        short                   voiceCount;
        long                    len;
        char                    **text;         //the text buffer
        long                    maxA5;
        void                    *v_qelem;
} SpeakObj;

//In the new function:
  x->text =3D newhandle(BUFSIZE);         //allocate the buffer (BUFFSIZE=
                                        //return no errors

void speak_bang(SpeakObj *x)
  Str255 test;

  HLockHi(x->text);             //later unlocked in Callback routine
  post("MemError %d", MemError());      //posts MemError =3D 0 - proves
                                        //iss locked correctly

        //these 2 lines are a simple test
        //which prove the SpeechMgr is working  =

  pstrcpy((char *)test,(char *)"\ptesting");            =

  SpeakString(test);                                                     =


        // I have not illustrated the code which fills the buffer with te=
        // but you can assume it's being done correctly, since the
        // test proves the buffer and length are correct
        //(assume was filled with "testing")...
  post( "Speak: %s", *(x->text) );  //posts "Speak: testing"
  post("x->len %ld", x->len);    // posts "x->len 7"

                        //x->chan was initialized in new with no errors..=
  SpeakText (x->chan, *(x->text), x->len); //crashes immediately, only in=




End of MAX Digest - 24 May 1997 to 25 May 1997