include "NSLog.incl" begin enum output _firstAnimal = 0 _lastAnimal = 7 end enum local fn OldLadySwallowedAFly NSUInteger i, j, numberOfAnimals CFMutableStringRef mutStr = fn MutableStringWithCapacity( 0 ) NSLogClear CFArrayRef animals = @[@"fly", @"spider", @"bird", @"cat", @"dog", @"goat", @"cow", @"horse.."] CFArrayRef verses = @[@"",¬ @"I don't know why she swallowed the fly — perhaps she'll die!\n",¬ @"That wriggled and jiggled and tickled inside her.",¬ @"How absurd, to swallow a bird!",¬ @"Imagine that, she swallowed a cat!",¬ @"What a hog to swallow a dog!",¬ @"She just opened her throat and swallowed that goat!",¬ @"I wonder how she swallowed a cow?",¬ @"She's dead, of course!"] numberOfAnimals = len(animals) for i = 0 to numberOfAnimals -1 NSLog( @"There was an old lady who swallowed a %@.", animals[i] ) : MutableStringAppendFormat( mutStr, @"There was an old lady who swallowed a %@.\n", animals[i] ) if i == _firstAnimal then NSLog( @"%@", verses[1] ) : MutableStringAppendFormat( mutStr, @"%@\n", verses[1] ) : continue if i > _firstAnimal then NSLog( @"%@", verses[i+1] ) : MutableStringAppendFormat( mutStr, @"%@\n", verses[i+1] ) if i == _lastAnimal then break if ( i > 0 ) for j = i to 1 step -1 CFStringRef p if fn StringIsEqual( animals[j-1], @"fly" ) then p = @"." else p = @"," NSLog( @"\tShe swallowed the %@ to catch the %@%@", animals[j], animals[j-1], p ) : MutableStringAppendFormat( mutStr, @"\tShe swallowed the %@ to catch the %@%@\n", animals[j], animals[j-1], p ) if j == 2 then NSLog(@"\tThat wriggled and jiggled and tickled inside her.") : MutableStringAppendString( mutStr, @"\tThat wriggled and jiggled and tickled inside her.\n" ) if j == 1 then NSLog( @"%@", verses[1] ) : MutableStringAppendFormat( mutStr, @"%@\n", verses[1] ) : break next end if next SpeechSynthesizerRef ref = fn SpeechSynthesizerWithVoice( @"com.apple.speech.synthesis.voice.daniel.premium" ) fn SpeechSynthesizerStartSpeakingString( ref, mutStr ) end fn fn OldLadySwallowedAFly HandleEvents