home *** CD-ROM | disk | FTP | other *** search
/ Aminet 6 / Aminet 6 - June 1995.iso / Aminet / dev / gui / VisualArts2_2.lha / VisualArts / Demos / Source / Speech / speech.c < prev    next >
Encoding:
C/C++ Source or Header  |  1995-04-02  |  6.8 KB  |  254 lines

  1. /* ******************************************************************** */
  2. /* C code generated by:                            */
  3. /* Visual Arts Version 2.1                        */
  4. /* Copyright 1994-95 Danny Y. Wong  All rights reserved            */
  5. /* Calgary, Alberta (CANADA)                                    */
  6. /* Partial of the code is copyright by Jaba Development            */
  7. /* ******************************************************************** */
  8.  
  9. #include <VisualArts.h>
  10. #include <clib/VisualArts_protos.h>
  11.  
  12. #define ID_speak                                      0
  13. #define ID_quit                                       1
  14. #define ID_text                                       2
  15. #define ID_vol                                        3
  16. #define ID_rate                                       4
  17.  
  18. #define SpeakNumGads                        5
  19.  
  20. #include "Speech_func.c" 
  21.  
  22. int speakObj(struct VAobject VAObject);
  23. int quitObj(struct VAobject VAObject);
  24. int textObj(struct VAobject VAObject);
  25. int volObj(struct VAobject VAObject);
  26. int rateObj(struct VAobject VAObject);
  27.  
  28. int GetPubScreen(void);
  29. void ClosePubScreen(void);
  30. int OpenSpeakWindow(char windtitle[]);
  31. void CloseSpeakWindow(void);
  32. int SpeakHandler(void);
  33. int SpeakMainHandler(void);
  34. void DrawSpeakObjs(void);
  35. int main(int argc, char *argv[]);
  36.  
  37. UBYTE                *PubScrName = "Workbench";
  38. struct DrawInfo            *ScrDrawInfo = NULL;
  39. APTR                 VisualInfo = NULL;
  40. struct Screen            *Scr = NULL;
  41. struct Window            *SpeakWnd = NULL;
  42. struct Gadget            *SpeakGList = NULL;
  43. struct Gadget            *SpeakGadgets[SpeakNumGads];
  44. struct IntuiMessage         SpeakMsg;
  45. UWORD                 SpeakLeft = 99;
  46. UWORD                 SpeakTop = 51;
  47. UWORD                 SpeakWidth = 328;
  48. UWORD                 SpeakHeight = 77;
  49.  
  50. /* stringinfo for WB 1.x style string/integer gadgets */
  51.  
  52. struct StringExtend            SpeakStrExt;    /* Extend String Gadget */
  53. struct TextAttr topaz8 = { (STRPTR)"topaz.font", 8, 0x00, 0x01 };
  54. struct TextAttr topaz800 = { (STRPTR)"topaz.font", 8, 0x00, 0x00 };
  55.  
  56. WORD SpeakGadTypes[] = {
  57.     BUTTON_KIND,
  58.     BUTTON_KIND,
  59.     STRING_KIND,
  60.     SLIDER_KIND,
  61.     SLIDER_KIND,
  62. };
  63.  
  64. struct NewGadget SpeakNGads[] = {
  65.     13, 47, 75, 12, (UBYTE *)"Speak",&topaz800, ID_speak, PLACETEXT_IN, NULL, (APTR)speakObj,
  66.     235, 47, 75, 12, (UBYTE *)"Quit",&topaz800, ID_quit, PLACETEXT_IN, NULL, (APTR)quitObj,
  67.     51, 2, 259, 12, (UBYTE *)"Text", &topaz800, ID_text, PLACETEXT_LEFT, NULL, (APTR)textObj,
  68.     140, 17, 170, 12, (UBYTE *)"Volume   ", &topaz800, ID_vol, PLACETEXT_LEFT, NULL, (APTR)volObj,
  69.     140, 30, 170, 12, (UBYTE *)"Rate    ", &topaz800, ID_rate, PLACETEXT_LEFT, NULL, (APTR)rateObj,
  70. };
  71.  
  72. ULONG SpeakNTags[] = {
  73.     TAG_DONE,
  74.     TAG_DONE,
  75.     (GTST_String), (ULONG)"Hello, this is Amiga speaking", GTST_MaxChars, 255, (STRINGA_Justification), GACT_STRINGLEFT, TAG_DONE,
  76.     (GTSL_Min), 0, (GTSL_Max), 64, (GTSL_Level), 35, (GTSL_LevelFormat), (ULONG)"%2ld", (GTSL_MaxLevelLen), 0, (GTSL_LevelPlace), PLACETEXT_LEFT, (GA_Immediate), TRUE, (GA_RelVerify), TRUE, (PGA_Freedom), LORIENT_HORIZ, TAG_DONE,
  77.     (GTSL_Min), 40, (GTSL_Max), 400, (GTSL_Level), 200, (GTSL_LevelFormat), (ULONG)"%3ld", (GTSL_MaxLevelLen), 0, (GTSL_LevelPlace), PLACETEXT_LEFT, (GA_Immediate), TRUE, (GA_RelVerify), TRUE, (PGA_Freedom), LORIENT_HORIZ, TAG_DONE,
  78. };
  79.  
  80.  
  81. int GetPubScreen(void)
  82. {
  83.   if (!(Scr = LockPubScreen(PubScrName)))
  84.     return(1L);
  85.  
  86.   if (!(VisualInfo = GetVisualInfo(Scr, TAG_DONE)))
  87.     return(2L);
  88.  
  89.   if (!(ScrDrawInfo = GetScreenDrawInfo(Scr)))
  90.     return(3L);
  91.   return(0L);
  92. }
  93.  
  94. void ClosePubScreen(void)
  95. {
  96.   if (VisualInfo)
  97.     FreeVisualInfo(VisualInfo);
  98.   if (Scr)
  99.     UnlockPubScreen(NULL,  Scr);
  100.   if (ScrDrawInfo)
  101.     FreeScreenDrawInfo(Scr,  ScrDrawInfo);
  102. }
  103.  
  104. int OpenSpeakWindow(char windtitle[80])
  105. {
  106.   struct NewGadget    NewGad;
  107.   struct Gadget       *Gad;
  108.   register UWORD i, j;
  109.   UWORD offsetx = Scr->WBorLeft;
  110.   UWORD offsety = Scr->WBorTop + Scr->Font->ta_YSize + 1;
  111.  
  112.  
  113.   SpeakStrExt.Font = NULL;
  114.   SpeakStrExt.Pens[0] = 2;
  115.   SpeakStrExt.Pens[1] = 0;
  116.   SpeakStrExt.ActivePens[0] = 1;
  117.   SpeakStrExt.ActivePens[1] = 3;
  118.   SpeakStrExt.InitialModes  = 0;
  119.   SpeakStrExt.EditHook = NULL;
  120.   SpeakStrExt.WorkBuffer = NULL;
  121.  
  122.   if (!(Gad = CreateContext(&SpeakGList)))
  123.       return(1L);
  124.  
  125.   for (i=0, j=0; i < SpeakNumGads; i++)
  126.   {
  127.     CopyMem((char *)&SpeakNGads[i], (char *)&NewGad, (long)sizeof(struct NewGadget));
  128.  
  129.     NewGad.ng_VisualInfo = VisualInfo;
  130.     NewGad.ng_LeftEdge += offsetx;
  131.     NewGad.ng_TopEdge  += offsety;
  132.  
  133.     SpeakGadgets[i] = Gad = CreateGadgetA((ULONG)SpeakGadTypes[i], Gad, &NewGad,
  134.     (struct TagItem *)&SpeakNTags[j]);
  135.     if (SpeakGadTypes[i] == STRING_KIND || SpeakGadTypes[i] == INTEGER_KIND)
  136.     {
  137.     SpeakGadgets[i]->Flags |= GFLG_STRINGEXTEND;
  138.     ((struct StringInfo *)SpeakGadgets[i]->SpecialInfo)->Extension = &SpeakStrExt;
  139.     }
  140.     while (SpeakNTags[j])
  141.         j +=2;
  142.     j++;
  143.     if (!Gad)
  144.        return(2L);
  145.   }
  146.   if (!(SpeakWnd = OpenWindowTags(NULL,
  147.       WA_Left,    SpeakLeft,
  148.       WA_Top,     SpeakTop,
  149.       WA_Width,    SpeakWidth,
  150.       WA_Height,    SpeakHeight + kWindowOffSetY,
  151.       WA_NewLookMenus, TRUE,
  152.       WA_IDCMP,    IDCMP_CLOSEWINDOW | IDCMP_MOUSEMOVE | IDCMP_GADGETUP | IDCMP_GADGETDOWN ,
  153.       WA_Flags,    WFLG_CLOSEGADGET  |  WFLG_SMART_REFRESH | 
  154.              WFLG_ACTIVATE |  WFLG_DRAGBAR ,
  155.       WA_Gadgets,    SpeakGList,
  156.       WA_Title,    windtitle,
  157.       WA_ScreenTitle,    "Visual Arts V2.2 Copyright 1994-95 Danny Y. Wong  All Rights Reserved.",
  158.       WA_PubScreen,    Scr,
  159.       WA_MinWidth,    160,
  160.       WA_MinHeight,    50,
  161.       WA_MaxWidth,    640,
  162.       WA_MaxHeight,    200,
  163.       TAG_DONE)))
  164.           return(3L);
  165.  
  166.   GT_RefreshWindow(SpeakWnd, NULL);
  167.   RefreshGadgets(SpeakGadgets[0], SpeakWnd, NULL);
  168.   return(0L);
  169. }
  170.  
  171. void CloseSpeakWindow(void)
  172. {
  173.   if (SpeakWnd)
  174.     CloseWindow(SpeakWnd);
  175.   if (SpeakGList)
  176.     FreeGadgets(SpeakGList);
  177. }
  178.  
  179. int SpeakHandler(void)
  180. {
  181.   struct IntuiMessage    *msg;
  182.   struct VAobject    VAObject;
  183.   int running    = 1;
  184.   int (*func)(struct VAobject VAObject);
  185.   ULONG class;
  186.   UWORD code;
  187.  
  188.   while (msg=GT_GetIMsg(SpeakWnd->UserPort))
  189.   {
  190.     CopyMem((char *)msg, (char *)&SpeakMsg, (long)sizeof(struct IntuiMessage));
  191.     class = msg->Class;
  192.     code  = msg->Code;
  193.  
  194.     VAObject.va_Window = (struct Window *)SpeakWnd;
  195.     VAObject.va_Gadget = (struct Gadget *)msg->IAddress;
  196.     VAObject.va_IntuiMsg = (struct IntuiMessage *)msg;
  197.     VAObject.va_Flags = 0;
  198.     VAObject.va_UserData = 0;
  199.  
  200.     GT_ReplyIMsg(msg);
  201.     switch(class)
  202.     {
  203.  
  204.       case IDCMP_CLOSEWINDOW:
  205.          return(0);
  206.          break;
  207.  
  208.       case IDCMP_GADGETUP:
  209.         func = (void *)((struct Gadget *)SpeakMsg.IAddress)->UserData;
  210.         if (func != NULL)
  211.           running =  func(VAObject);
  212.         break;
  213.  
  214.     }
  215.   }
  216.   return(running);
  217. }
  218.  
  219. int SpeakMainHandler(void)
  220. {
  221.   int running = 1;
  222.   ULONG windsig, signals;
  223.  
  224.   windsig = 1L << SpeakWnd->UserPort->mp_SigBit;
  225.  
  226.   while (running == 1)
  227.   {
  228.     signals = Wait( windsig );
  229.     if (signals & windsig)
  230.     {
  231.       running = SpeakHandler();
  232.     }
  233.   }
  234.   return(running);
  235. }
  236.  
  237. int main(int argc, char *argv[])
  238. {
  239.   int rc;
  240.  
  241.   if (!(GetPubScreen()))
  242.   {
  243.     if (!(OpenSpeakWindow("Speech Demo")))
  244.     {
  245.           InitSpeech();
  246.       rc = SpeakMainHandler();
  247.       CloseSpeakWindow();
  248.           DeInitSpeech();
  249.     }
  250.     ClosePubScreen();
  251.   }
  252.   return(0L);
  253. }
  254.