As Ian suggested, I fetched the sources, uncommented the
/*success(FALSE)*/
in the #definition of FAIL() near the top of sqUnixSound.c and compiled.
"FALSE" is undefined, so I had to change the code to "false". That's not the problem. Back on 12 November Ian pointed out:
Excerpts from pm.squeak: 12-Nov-98 Re: Latest updates Ian Piumarta@inria.fr (1033*)
Because, under Unix, failing the primitive opens up a "a primitive has failed" notifier at *really* inconvenient moments. E.g:
SoundPlayer class(Object)>>error: SoundPlayer class(Object)>>primitiveFailed SoundPlayer class>>primSoundStop SoundPlayer class>>stopPlayerProcess SoundPlayer class>>shutDown SystemDictionary>>shutDownSound SystemDictionary>>processShutDownList SystemDictionary>>snapshot:andQuit: ScreenController>>quit ScreenController>>yellowButtonActivity
IE when one tries to quit.
Well, it does.
This resolves the confusion I raised earlier somewhat, IE what the default distributed VM should and should not do under UNIX.
Does this mean we should run in Tim Rowledge's suggested kludge instead?
Excerpts from pm.squeak: 18-Nov-98 Re: Bug: disableSounds pref.. Tim Rowledge@interval.co (1298*)
I get around this problem on Acorn by making the machine specific sound functions cheat. So far as I recall, this basically only needed snd_InsertSamplesFromLeadTime(int frameCount, int srcBufPtr, int samplesOfLeadTime) { // return frameCount to pretend the buffer was filled return frameCount; } and snd_Start(int frameCount, int samplesPerSec, int stereo, int semaIndex) {
return true; }
squeak-dev@lists.squeakfoundation.org