[comp.sys.mac] Sample Macintalk program

bill@utastro.UUCP (William H. Jefferys) (01/15/87)

Lightspeed C v. 2.01 supports Macintalk with a library and header file.
Thanks to some pointers from Dave Bursik (db@cbosgd.UUCP) and 
Tom Speeter (vax135!ths@clyde.UUCP) I was able to get a very simple
program working under Lightspeed C that uses Macintalk. I used
Simpletools to define the user interface and main event loop, but
you can use any technique you want for this. The main ideas are from
an article by Bob Perez in MacUser, March 1986, pp. 104-110 (his
program is in Aztec C). Tom's article should be consulted for further
information.

Bill Jefferys
University of Texas

------------- Rippety Tear Snip Snip --------------------------------

#include <MacinTalk.h>
#include <MemoryMgr.h>

SpeechHandle theSpeech;
Handle spOut;

quitproc()
{
	DisposHandle(spOut);	/* Dispose of handles and */
	SpeechOff(theSpeech);	/* Turn Macintalk off before exiting. */
	exit(0);
}

sayproc()
{
	long len;
	char str[255];
	
	strcpy(str,"");
	prompt("Type something to say.",str);	/* Get a phrase */
	len = (long)strlen(str);
	CtoPstr(str);
	Reader(theSpeech, str, len, spOut);		/* Convert to phonemes */
	MacinTalk(theSpeech, spOut);			/* Say it. */
}

main()
{
	SpeechErr err;
	
	simpletools("Talk");					/* Initialize everything */
	menu("File","Quit/Q",quitproc);			/* Set up menus */
	menu("Actions","Say/S",sayproc);
	spOut = NewHandle(0L);					/* Allocate handle */
	if((err = SpeechOn("\p",&theSpeech)) != noErr)
		exit(0);							/* Turn Macintalk on */
	for(;;)									/* Main event loop */
		simpleevents();
}

bill@utastro.UUCP (William H. Jefferys) (01/16/87)

Contrary to my assumption, the Macintalk routine Reader()
apparently expects a "C" formatted string, not a Pascal
string. Therefore, the call to CtoPstr() in my previously
posted program should be eliminated.

Bill Jefferys

espen@well.UUCP (01/17/87)

#include <stdio.h>
#include <quickdraw.h>
#include <memory.h>
#include "macintalk.h"

	int   i;
	char  linein[5120],exceptfile[64];
	Handle   output;
	SpeechHandle theSpeech;
	FILE *f,*fopen();

main(argc, argv)
int argc;
char **argv;
{
	
	exceptfile[0] = 0;
   i = SpeechOn(exceptfile, &theSpeech);
   		/*Open the speech driver and the READER English to phonetics
				conversion package with the default
				pronounciation ruleset.*/


   if (i == 0)  {        			/*If error, go away*/
		f = fopen(argv[1],"r");		/*Open the English input file.*/
   	
		i = fread(&linein[0],10,512,f);
				/*Read 10 blocks (5120 chars) from the input file.*/
                                              
   	output = NewHandle(0L);		/*Create a handle for the phonetic
				output.  Reader will dynamically grow this handle
				as needed.*/

               /*Convert the English text to phonetic codes.*/

   	i = Reader(theSpeech, &linein, 6000L, output);

   	i = MacinTalk(theSpeech, output);        /*Say it.*/

   	SpeechOff(theSpeech);			/*Close the speech driver.*/

   	DisposHandle(output);			/*Release the output handle*/

   	close(f);                                  /*Close the input file.*/

	}
}