home *** CD-ROM | disk | FTP | other *** search
/ Carousel / CAROUSEL.cdr / mactosh / code / c_cheapt.sit < prev    next >
Text File  |  1988-06-20  |  7KB  |  175 lines

  1. 18-Jun-88 14:25:58-MDT,7401;000000000000
  2. Return-Path: <u-lchoqu%sunset@cs.utah.edu>
  3. Received: from cs.utah.edu by SIMTEL20.ARPA with TCP; Sat, 18 Jun 88 14:25:48 MDT
  4. Received: by cs.utah.edu (5.54/utah-2.0-cs)
  5.     id AA22101; Sat, 18 Jun 88 14:25:44 MDT
  6. Received: by sunset.utah.edu (5.54/utah-2.0-leaf)
  7.     id AA24518; Sat, 18 Jun 88 14:25:41 MDT
  8. Date: Sat, 18 Jun 88 14:25:41 MDT
  9. From: u-lchoqu%sunset@cs.utah.edu (Lee Choquette)
  10. Message-Id: <8806182025.AA24518@sunset.utah.edu>
  11. To: rthum@simtel20.arpa
  12. Subject: Cheaptalk.c
  13.  
  14. /******************************************************************     
  15.                             
  16.         Cheaptalk.c                
  17.                             
  18.        TOM PHILLIPS   6-27-86  
  19.        1633 Commonwealth Ave. 
  20.        West Newton, MA 02165 
  21.        (617) 332-1373
  22.  
  23.   This is a translation of Dan Weston's 
  24.   Cheaptalk demo application from 
  25.   assembly to LightspeedC.  His original 
  26.   program was published in Mactutor, November 1985.
  27.   (This was done on a Mac Plus and HD20)
  28.  
  29. Instructions for getting this code to compile 
  30. and run with LightspeedC:
  31.  
  32. 1) you must have the MacinTalk driver
  33.    and SpeechAsm.Rel files.  Both are available in
  34.    the May 1985 Software Supplement from Apple. 
  35.    They are also available on MacTutor's source
  36.    code disk #4. They are also be available on Delphi.
  37.    The MacinTalk driver must be in the same HFS 
  38.    folder as your project.
  39.  
  40. 2) Convert SpeechAsm.Rel to SpeechAsm.Lib with 
  41.    LightspeedC's RelConv utility.
  42.  
  43. 3) Edit SpeechAsm.Voc (which was created by RelConv)
  44.    so that the capitalization corresponds to 
  45.    the following: SpeechOn, MacinTalk, Reader, SpeechOff. 
  46.  
  47. 4) Re-convert SpeechAsm.Rel to SpeechAsm.Lib with
  48.    RelConv so that new capitalization will occur
  49.    in the Lib file.
  50.  
  51. 5) Create a resouce file called Cheaptalk.Rsrc 
  52.    from Cheaptalk's resources (DLOG DITL and PHNM)
  53.    using ResEdit.
  54.  
  55. 6) Load Cheaptalk.c into project with MacTraps 
  56.    and SpeechAsm.Lib.
  57.  
  58. 7) Run it.
  59.  
  60. **************************************************************/      
  61. #include "QuickDraw.h"
  62. #include "WindowMgr.h"
  63. #include "DialogMgr.h"
  64. /*************************************************************/
  65.  
  66. extern pascal SpeechOn();  /* these MacinTalk calls must        */
  67. extern pascal MacinTalk(); /* be declared as pascal type        */
  68. extern pascal Reader();    /* so that the parameters are pushed */
  69. extern pascal SpeechOff(); /* on the stack in the right order   */
  70.  
  71. #define  theDialog        1    /*  resource ID # of dialog   */
  72. #define  sayitbutton    1    /*  item # for 'say it '      */
  73. #define  quitbutton         2    /*  item # for 'quit'         */
  74. #define  usertext         3    /*  item # for edit text box  */
  75.  
  76. /********************* Global Variables **********************/
  77.  
  78. long       theSpeech;        /* handle to speech driver globals */
  79. short      speechOK;        /* our flag to show if driver open */
  80. char       theString[256];    /* array for GetIText and Reader */
  81. Handle     phHandle;        /* handle to phonetic string */
  82. WindowPtr  dp;              /* dialog pointer */
  83. short      Result;          /* error code */
  84. long       length;          /* used for length of string for Reader */
  85.  
  86. short         ItemHit;            /* itemnumber from modal dialog */
  87. short        theType;            /* for GetDItem */
  88. int         ***theItem;            /* for GetDItem */
  89. Rect        theRect;            /* for GetDItem */
  90.  
  91. main()
  92. {
  93.     InitGraf(&thePort);        /* Init Quickdraw */
  94.     InitFonts();            /* Init Font Manager */
  95.     InitWindows();            /* Init Window Manager */
  96.     InitDialogs(0);            /* Init Dialog Manager */
  97.     TEInit();
  98.     InitCursor();            /* set arrow cursor */
  99.  
  100.     OpenResFile("\pCheapTalk.Rsrc"); /* open for DLOG and PHNM resources */
  101.  
  102.     /* assume that driver will open alright, set our flag to TRUE */
  103.       speechOK=1;            
  104. /*************************************************************/
  105.     /* Open speech driver to use default rules */
  106.     /* If driver open not successful then clear speechOK flag */
  107.     /* to prevent further use of invalid driver */
  108.     /* You could also put an error dialog here  */
  109.      
  110.       if (SpeechOn(0,&theSpeech) != 0) 
  111.          { speechOK = 0; 
  112.            dp = GetNewDialog(2,0,-1);
  113.            SetPort(dp);          
  114.             ModalDialog(0,&ItemHit);  
  115.              ExitToShell();  
  116.           }
  117. /*************************************************************/
  118.     /* Get Dialog from the Resource file */
  119.     /* Store on heap and make it front window */
  120.       dp = GetNewDialog(theDialog,0,-1);
  121.       SetPort(dp);          /*  Make It The Current Port */
  122. /*************************************************************/
  123.     /* usually you would not use DrawDialog, but we need to draw the */
  124.     /* dialog contents once before saying them, then go to Modal dialog */
  125.     /* which will draw the contents again */
  126.        DrawDialog(dp);
  127. /****************** Speak pre-translated speech ***************/
  128.     /* now Say the static text item which has been pre-translated into */
  129.     /* a phoneme string with the same ID as the dialog */
  130.     /* first, check our flag to make sure that driver is open */
  131.       if (speechOK == 0) goto L2; /* driver not valid, branch around */
  132.     /* driver valid, go ahead and speak */
  133.       phHandle = GetResource('PHNM',theDialog); /* handle to phoneme string */
  134.     /* say it  using, speech global handle and phoneme handle,*/
  135.       Result = MacinTalk(theSpeech,phHandle);
  136.       L2:    /* branch to here to avoid speaking with invalid driver */
  137. /*************** Dialog loop *******************/    
  138.     /* now process the dialog */
  139.       dialogloop:
  140.       ModalDialog(0,&ItemHit);  /* default filter proc & Item Hit Data */
  141.     /*see which button was pushed */
  142.       if (quitbutton == ItemHit) goto closeit; /* if quit button, then close */
  143.       if (sayitbutton == ItemHit) goto sayit;  /* if say it button, then say it */
  144.       goto dialogloop;    /* none of the above so go around again */
  145. /*********** Translate English to Phonetics and speak **********/
  146.       sayit:
  147.     /* first, check our flag to make sure that driver is open */
  148.       if (speechOK==0)  goto L3; 
  149.     /* driver not valid, branch around speech stuff */
  150.     /* driver valid, go ahead and speak */
  151.     /* get the current text in the edit text box */
  152.       GetDItem(dp,usertext,&theType,&theItem,&theRect);
  153.       GetIText(theItem,theString); 
  154.     /* now feed the text into reader to translate it into phonemes   */
  155.     /* set up an empty handle first for Reader to fill with phonemes */
  156.       phHandle = NewHandle(0);    /* set up empty handle.  */
  157.       length = (long)theString[0];/* length fo the string */
  158.       Result = Reader(theSpeech,&theString[1],length,phHandle);
  159.     /* now feed the phonemes to Macintalk */
  160.       Result = MacinTalk(theSpeech,phHandle);
  161.     /* deallocate handle and loop back for more */
  162.       DisposHandle(phHandle);
  163.       L3:    /* branch to here to avoid speaking with invalid driver */
  164.       goto dialogloop;
  165. /******************* Close up shop *******************************/
  166.       closeit:
  167.       CloseDialog(dp);      /* Close the Dialog window */    
  168.     /* first, check our flag to make sure that driver is open */
  169.       if (speechOK==0) goto L4;  /* if driver not valid, branch around */
  170.     /* driver valid,so close it up with the handle to the speech globals */
  171.       SpeechOff(theSpeech);
  172.       L4: /* branch to here to avoid closing invalid driver */
  173.       ExitToShell();          /* Return To Finder */
  174. }
  175.