home *** CD-ROM | disk | FTP | other *** search
/ Amiga Format CD 18 / amigaformatcd18.iso / -readerstuff- / steve_boxall / hangman / hangmangui.c < prev    next >
C/C++ Source or Header  |  1997-07-18  |  18KB  |  666 lines

  1. /*
  2.  *  Source machine generated by GadToolsBox V2.0b
  3.  *  which is (c) Copyright 1991-1993 Jaba Development
  4.  *
  5.  *  GUI Designed by : Steve Boxall
  6.  */
  7.  
  8. #include <exec/types.h>
  9. #include <intuition/intuition.h>
  10. #include <intuition/classes.h>
  11. #include <intuition/classusr.h>
  12. #include <intuition/imageclass.h>
  13. #include <intuition/gadgetclass.h>
  14. #include <libraries/gadtools.h>
  15. #include <graphics/displayinfo.h>
  16. #include <graphics/gfxbase.h>
  17. #include <clib/exec_protos.h>
  18. #include <clib/intuition_protos.h>
  19. #include <clib/gadtools_protos.h>
  20. #include <clib/graphics_protos.h>
  21. #include <clib/utility_protos.h>
  22. #include <string.h>
  23. #include <clib/diskfont_protos.h>
  24.  
  25. #include "HangmanGui.h"
  26.  
  27. struct Screen         *Scr = NULL;
  28. UBYTE                 *PubScreenName = NULL;
  29. APTR                   VisualInfo = NULL;
  30. struct Window         *Project0Wnd = NULL;
  31. struct Window         *Project1Wnd = NULL;
  32. struct Window         *Project2Wnd = NULL;
  33. struct Window         *Project3Wnd = NULL;
  34. struct Gadget         *Project0GList = NULL;
  35. struct Gadget         *Project1GList = NULL;
  36. struct Gadget         *Project2GList = NULL;
  37. struct Gadget         *Project3GList = NULL;
  38. struct Menu           *Project0Menus = NULL;
  39. struct IntuiMessage    Project0Msg;
  40. struct IntuiMessage    Project1Msg;
  41. struct IntuiMessage    Project2Msg;
  42. struct IntuiMessage    Project3Msg;
  43. struct TextFont       *Font       = NULL;
  44. struct Gadget         *Project0Gadgets[8];
  45. struct Gadget         *Project1Gadgets[3];
  46. struct Gadget         *Project2Gadgets[3];
  47. struct Gadget         *Project3Gadgets[2];
  48. UWORD                  Project0Left = 29;
  49. UWORD                  Project0Top = 9;
  50. UWORD                  Project0Width = 617;
  51. UWORD                  Project0Height = 241;
  52. UWORD                  Project1Left = 153;
  53. UWORD                  Project1Top = 32;
  54. UWORD                  Project1Width = 405;
  55. UWORD                  Project1Height = 179;
  56. UWORD                  Project2Left = 130;
  57. UWORD                  Project2Top = 38;
  58. UWORD                  Project2Width = 406;
  59. UWORD                  Project2Height = 181;
  60. UWORD                  Project3Left = 145;
  61. UWORD                  Project3Top = 40;
  62. UWORD                  Project3Width = 408;
  63. UWORD                  Project3Height = 156;
  64. UBYTE                 *Project0Wdt = (UBYTE *)"Hangman";
  65. UBYTE                 *Project1Wdt = (UBYTE *)"Hangman Winner";
  66. UBYTE                 *Project2Wdt = (UBYTE *)"Hangman Loser!!!";
  67. UBYTE                 *Project3Wdt = (UBYTE *)"About Hangman";
  68.  
  69. extern struct MinList Gadget133List;
  70.  
  71. struct Node Gadget133Nodes[] = {
  72.     &Gadget133Nodes[1], ( struct Node * )&Gadget133List.mlh_Head, 0, 0, "Hangman 1997",
  73.     &Gadget133Nodes[2], &Gadget133Nodes[0], 0, 0, " ",
  74.     &Gadget133Nodes[3], &Gadget133Nodes[1], 0, 0, "This is my first program purely for the Amiga.",
  75.     &Gadget133Nodes[4], &Gadget133Nodes[2], 0, 0, " ",
  76.     &Gadget133Nodes[5], &Gadget133Nodes[3], 0, 0, "It is written in 'C' using Gadtools & DICE 'C' ",
  77.     &Gadget133Nodes[6], &Gadget133Nodes[4], 0, 0, " ",
  78.     &Gadget133Nodes[7], &Gadget133Nodes[5], 0, 0, "You can guess a letter or the whole word",
  79.     &Gadget133Nodes[8], &Gadget133Nodes[6], 0, 0, " ",
  80.     &Gadget133Nodes[9], &Gadget133Nodes[7], 0, 0, "You may also add new word data files using a text",
  81.     &Gadget133Nodes[10], &Gadget133Nodes[8], 0, 0, "editor ( one word per line in UPPERCASE MAX 100 words)",
  82.     &Gadget133Nodes[11], &Gadget133Nodes[9], 0, 0, " ",
  83.     &Gadget133Nodes[12], &Gadget133Nodes[10], 0, 0, " ",
  84.     &Gadget133Nodes[13], &Gadget133Nodes[11], 0, 0, "If you like it good else why worry?",
  85.     &Gadget133Nodes[14], &Gadget133Nodes[12], 0, 0, " ",
  86.     ( struct Node * )&Gadget133List.mlh_Tail, &Gadget133Nodes[13], 0, 0, "Hangman 1997 is FREEWARE" };
  87.  
  88. struct MinList Gadget133List = {
  89.     ( struct MinNode * )&Gadget133Nodes[0], ( struct MinNode * )NULL, ( struct MinNode * )&Gadget133Nodes[14] };
  90.  
  91. struct TextAttr XHelvetica11 = {
  92.     ( STRPTR )"XHelvetica.font", 11, 0x00, 0x62 };
  93.  
  94. struct NewMenu Project0NewMenu[] = {
  95.     NM_TITLE, (STRPTR)"Game", NULL, 0, NULL, NULL,
  96.     NM_ITEM, (STRPTR)"New Game", (STRPTR)"n", 0, 0L, (APTR)Project0GameItem0,
  97.     NM_ITEM, (STRPTR)"Load Words", (STRPTR)"l", 0, 0L, (APTR)Project0GameItem1,
  98.     NM_ITEM, (STRPTR)NM_BARLABEL, NULL, 0, 0L, NULL,
  99.     NM_ITEM, (STRPTR)"About", (STRPTR)"a", 0, 0L, (APTR)Project0GameItem2,
  100.     NM_ITEM, (STRPTR)NM_BARLABEL, NULL, 0, 0L, NULL,
  101.     NM_ITEM, (STRPTR)"Exit", (STRPTR)"e", 0, 0L, (APTR)Project0GameItem3,
  102.     NM_END, NULL, NULL, 0, 0L, NULL };
  103.  
  104. UWORD Project0GTypes[] = {
  105.     STRING_KIND,
  106.     TEXT_KIND,
  107.     TEXT_KIND,
  108.     TEXT_KIND,
  109.     TEXT_KIND,
  110.     BUTTON_KIND,
  111.     BUTTON_KIND,
  112.     BUTTON_KIND
  113. };
  114.  
  115. UWORD Project1GTypes[] = {
  116.     BUTTON_KIND,
  117.     TEXT_KIND,
  118.     TEXT_KIND
  119. };
  120.  
  121. UWORD Project2GTypes[] = {
  122.     BUTTON_KIND,
  123.     TEXT_KIND,
  124.     TEXT_KIND
  125. };
  126.  
  127. UWORD Project3GTypes[] = {
  128.     BUTTON_KIND,
  129.     LISTVIEW_KIND
  130. };
  131.  
  132. struct NewGadget Project0NGad[] = {
  133.     182, 20, 219, 23, NULL, NULL, GD_GuessIt, 0, NULL, (APTR)GuessItClicked,
  134.     18, 24, 137, 17, NULL, NULL, GD_UserGuess, 0, NULL, NULL,
  135.     186, 60, 215, 23, NULL, NULL, GD_GuessWord, 0, NULL, NULL,
  136.     18, 64, 137, 17, NULL, NULL, GD_GuessText, 0, NULL, NULL,
  137.     20, 116, 381, 53, NULL, NULL, GD_Guesses, 0, NULL, NULL,
  138.     18, 214, 113, 17, (UBYTE *)"New Game", NULL, GD_NewGame, PLACETEXT_IN, NULL, (APTR)NewGameClicked,
  139.     239, 214, 113, 17, (UBYTE *)"Load Words", NULL, GD_LoadWords, PLACETEXT_IN, NULL, (APTR)LoadWordsClicked,
  140.     460, 214, 113, 17, (UBYTE *)"Exit", NULL, GD_ExitGame, PLACETEXT_IN, NULL, (APTR)ExitGameClicked
  141. };
  142.  
  143. struct NewGadget Project1NGad[] = {
  144.     28, 142, 341, 27, (UBYTE *)"Continue", NULL, GD_WinnerOk, PLACETEXT_IN, NULL, (APTR)WinnerOkClicked,
  145.     136, 28, 119, 23, NULL, NULL, GD_Gadget11, 0, NULL, NULL,
  146.     78, 96, 241, 29, NULL, NULL, GD_winnertext01, 0, NULL, NULL
  147. };
  148.  
  149. struct NewGadget Project2NGad[] = {
  150.     26, 148, 347, 23, (UBYTE *)"Continue", NULL, GD_LostOk, PLACETEXT_IN, NULL, (APTR)LostOkClicked,
  151.     146, 24, 103, 25, NULL, NULL, GD_Gadget12, 0, NULL, NULL,
  152.     72, 94, 259, 27, NULL, NULL, GD_LoserText01, 0, NULL, NULL
  153. };
  154.  
  155. struct NewGadget Project3NGad[] = {
  156.     42, 122, 315, 25, (UBYTE *)"Ok", NULL, GD_AboutOk, PLACETEXT_IN, NULL, (APTR)AboutOkClicked,
  157.     26, 14, 351, 99, NULL, NULL, GD_Gadget13, 0, NULL, (APTR)Gadget13Clicked
  158. };
  159.  
  160. ULONG Project0GTags[] = {
  161.     (GTST_MaxChars), 256, (TAG_DONE),
  162.     (GTTX_Text), (ULONG)" Your Guess", (GTTX_Border), TRUE, (TAG_DONE),
  163.     (GTTX_Border), TRUE, (TAG_DONE),
  164.     (GTTX_Text), (ULONG)" Word to Guess", (GTTX_Border), TRUE, (TAG_DONE),
  165.     (GTTX_Text), (ULONG)"Guesses so far :", (GTTX_Border), TRUE, (TAG_DONE),
  166.     (TAG_DONE),
  167.     (TAG_DONE),
  168.     (TAG_DONE)
  169. };
  170.  
  171. ULONG Project1GTags[] = {
  172.     (TAG_DONE),
  173.     (GTTX_Text), (ULONG)"YOU ARE A WINNER!!!", (GTTX_Border), TRUE, (TAG_DONE),
  174.     (GTTX_Border), TRUE, (TAG_DONE)
  175. };
  176.  
  177. ULONG Project2GTags[] = {
  178.     (TAG_DONE),
  179.     (GTTX_Text), (ULONG)"YOU HAVE LOST !!!", (GTTX_Border), TRUE, (TAG_DONE),
  180.     (GTTX_Border), TRUE, (TAG_DONE)
  181. };
  182.  
  183. ULONG Project3GTags[] = {
  184.     (TAG_DONE),
  185.     (GTLV_Labels), (ULONG)&Gadget133List, (GTLV_ReadOnly), TRUE, (TAG_DONE)
  186. };
  187.  
  188. int SetupScreen( void )
  189. {
  190.     if ( ! ( Font = OpenDiskFont( &XHelvetica11 )))
  191.         return( 5L );
  192.  
  193.     if ( ! ( Scr = LockPubScreen( PubScreenName )))
  194.         return( 1L );
  195.  
  196.     if ( ! ( VisualInfo = GetVisualInfo( Scr, TAG_DONE )))
  197.         return( 2L );
  198.  
  199.     return( 0L );
  200. }
  201.  
  202. void CloseDownScreen( void )
  203. {
  204.     if ( VisualInfo ) {
  205.         FreeVisualInfo( VisualInfo );
  206.         VisualInfo = NULL;
  207.     }
  208.  
  209.     if ( Scr        ) {
  210.         UnlockPubScreen( NULL, Scr );
  211.         Scr = NULL;
  212.     }
  213.  
  214.     if ( Font       ) {
  215.         CloseFont( Font );
  216.         Font = NULL;
  217.     }
  218. }
  219.  
  220. void Project0Render( void )
  221. {
  222.     UWORD        offx, offy;
  223.  
  224.     offx = Project0Wnd->BorderLeft;
  225.     offy = Project0Wnd->BorderTop;
  226.  
  227.  
  228.     DrawBevelBox( Project0Wnd->RPort, offx + 420, offy + 20, 177, 169, GT_VisualInfo, VisualInfo, TAG_DONE );
  229. }
  230.  
  231. int HandleProject0IDCMP( void )
  232. {
  233.     struct IntuiMessage    *m;
  234.     struct MenuItem        *n;
  235.     int            (*func)();
  236.     BOOL            running = TRUE;
  237.  
  238.     while( m = GT_GetIMsg( Project0Wnd->UserPort )) {
  239.  
  240.         CopyMem(( char * )m, ( char * )&Project0Msg, (long)sizeof( struct IntuiMessage ));
  241.  
  242.         GT_ReplyIMsg( m );
  243.  
  244.         switch ( Project0Msg.Class ) {
  245.  
  246.             case    IDCMP_REFRESHWINDOW:
  247.                 GT_BeginRefresh( Project0Wnd );
  248.                 Project0Render();
  249.                 GT_EndRefresh( Project0Wnd, TRUE );
  250.                 break;
  251.  
  252.             case    IDCMP_CLOSEWINDOW:
  253.                 running = Project0CloseWindow();
  254.                 break;
  255.  
  256.             case    IDCMP_GADGETUP:
  257.                 func = ( void * )(( struct Gadget * )Project0Msg.IAddress )->UserData;
  258.                 running = func();
  259.                 break;
  260.  
  261.             case    IDCMP_MENUPICK:
  262.                 while( Project0Msg.Code != MENUNULL ) {
  263.                     n = ItemAddress( Project0Menus, Project0Msg.Code );
  264.                     func = (void *)(GTMENUITEM_USERDATA( n ));
  265.                     running = func();
  266.                     Project0Msg.Code = n->NextSelect;
  267.                 }
  268.                 break;
  269.         }
  270.     }
  271.     return( running );
  272. }
  273.  
  274. int OpenProject0Window( void )
  275. {
  276.     struct NewGadget    ng;
  277.     struct Gadget    *g;
  278.     UWORD        lc, tc;
  279.     UWORD        offx = Scr->WBorLeft, offy = Scr->WBorTop + Scr->RastPort.TxHeight + 1;
  280.  
  281.     if ( ! ( g = CreateContext( &Project0GList )))
  282.         return( 1L );
  283.  
  284.     for( lc = 0, tc = 0; lc < Project0_CNT; lc++ ) {
  285.  
  286.         CopyMem((char * )&Project0NGad[ lc ], (char * )&ng, (long)sizeof( struct NewGadget ));
  287.  
  288.         ng.ng_VisualInfo = VisualInfo;
  289.         ng.ng_TextAttr   = &XHelvetica11;
  290.         ng.ng_LeftEdge  += offx;
  291.         ng.ng_TopEdge   += offy;
  292.  
  293.         Project0Gadgets[ lc ] = g = CreateGadgetA((ULONG)Project0GTypes[ lc ], g, &ng, ( struct TagItem * )&Project0GTags[ tc ] );
  294.  
  295.         while( Project0GTags[ tc ] ) tc += 2;
  296.         tc++;
  297.  
  298.         if ( NOT g )
  299.             return( 2L );
  300.     }
  301.  
  302.     if ( ! ( Project0Menus = CreateMenus( Project0NewMenu, GTMN_FrontPen, 0L, TAG_DONE )))
  303.         return( 3L );
  304.  
  305.     LayoutMenus( Project0Menus, VisualInfo, GTMN_TextAttr, &XHelvetica11, TAG_DONE );
  306.  
  307.     if ( ! ( Project0Wnd = OpenWindowTags( NULL,
  308.                 WA_Left,    Project0Left,
  309.                 WA_Top,        Project0Top,
  310.                 WA_Width,    Project0Width,
  311.                 WA_Height,    Project0Height + offy,
  312.                 WA_IDCMP,    STRINGIDCMP|TEXTIDCMP|BUTTONIDCMP|IDCMP_MENUPICK|IDCMP_CLOSEWINDOW|IDCMP_REFRESHWINDOW,
  313.                 WA_Flags,    WFLG_DRAGBAR|WFLG_DEPTHGADGET|WFLG_CLOSEGADGET|WFLG_SMART_REFRESH|WFLG_ACTIVATE,
  314.                 WA_Gadgets,    Project0GList,
  315.                 WA_Title,    Project0Wdt,
  316.                 WA_ScreenTitle,    "Hangman 1997",
  317.                 WA_PubScreen,    Scr,
  318.                 TAG_DONE )))
  319.     return( 4L );
  320.  
  321.     SetMenuStrip( Project0Wnd, Project0Menus );
  322.     GT_RefreshWindow( Project0Wnd, NULL );
  323.  
  324.     Project0Render();
  325.  
  326.     return( 0L );
  327. }
  328.  
  329. void CloseProject0Window( void )
  330. {
  331.     if ( Project0Menus      ) {
  332.         ClearMenuStrip( Project0Wnd );
  333.         FreeMenus( Project0Menus );
  334.         Project0Menus = NULL;    }
  335.  
  336.     if ( Project0Wnd        ) {
  337.         CloseWindow( Project0Wnd );
  338.         Project0Wnd = NULL;
  339.     }
  340.  
  341.     if ( Project0GList      ) {
  342.         FreeGadgets( Project0GList );
  343.         Project0GList = NULL;
  344.     }
  345. }
  346.  
  347. void Project1Render( void )
  348. {
  349.     UWORD        offx, offy;
  350.  
  351.     offx = Project1Wnd->BorderLeft;
  352.     offy = Project1Wnd->BorderTop;
  353.  
  354.  
  355.     DrawBevelBox( Project1Wnd->RPort, offx + 24, offy + 10, 349, 63, GT_VisualInfo, VisualInfo, TAG_DONE );
  356. }
  357.  
  358. int HandleProject1IDCMP( void )
  359. {
  360.     struct IntuiMessage    *m;
  361.     int            (*func)();
  362.     BOOL            running = TRUE;
  363.  
  364.     while( m = GT_GetIMsg( Project1Wnd->UserPort )) {
  365.  
  366.         CopyMem(( char * )m, ( char * )&Project1Msg, (long)sizeof( struct IntuiMessage ));
  367.  
  368.         GT_ReplyIMsg( m );
  369.  
  370.         switch ( Project1Msg.Class ) {
  371.  
  372.             case    IDCMP_REFRESHWINDOW:
  373.                 GT_BeginRefresh( Project1Wnd );
  374.                 Project1Render();
  375.                 GT_EndRefresh( Project1Wnd, TRUE );
  376.                 break;
  377.  
  378.             case    IDCMP_CLOSEWINDOW:
  379.                 running = Project1CloseWindow();
  380.                 break;
  381.  
  382.             case    IDCMP_GADGETUP:
  383.                 func = ( void * )(( struct Gadget * )Project1Msg.IAddress )->UserData;
  384.                 running = func();
  385.                 break;
  386.         }
  387.     }
  388.     return( running );
  389. }
  390.  
  391. int OpenProject1Window( void )
  392. {
  393.     struct NewGadget    ng;
  394.     struct Gadget    *g;
  395.     UWORD        lc, tc;
  396.     UWORD        offx = Scr->WBorLeft, offy = Scr->WBorTop + Scr->RastPort.TxHeight + 1;
  397.  
  398.     if ( ! ( g = CreateContext( &Project1GList )))
  399.         return( 1L );
  400.  
  401.     for( lc = 0, tc = 0; lc < Project1_CNT; lc++ ) {
  402.  
  403.         CopyMem((char * )&Project1NGad[ lc ], (char * )&ng, (long)sizeof( struct NewGadget ));
  404.  
  405.         ng.ng_VisualInfo = VisualInfo;
  406.         ng.ng_TextAttr   = &XHelvetica11;
  407.         ng.ng_LeftEdge  += offx;
  408.         ng.ng_TopEdge   += offy;
  409.  
  410.         Project1Gadgets[ lc ] = g = CreateGadgetA((ULONG)Project1GTypes[ lc ], g, &ng, ( struct TagItem * )&Project1GTags[ tc ] );
  411.  
  412.         while( Project1GTags[ tc ] ) tc += 2;
  413.         tc++;
  414.  
  415.         if ( NOT g )
  416.             return( 2L );
  417.     }
  418.  
  419.     if ( ! ( Project1Wnd = OpenWindowTags( NULL,
  420.                 WA_Left,    Project1Left,
  421.                 WA_Top,        Project1Top,
  422.                 WA_Width,    Project1Width,
  423.                 WA_Height,    Project1Height + offy,
  424.                 WA_IDCMP,    BUTTONIDCMP|TEXTIDCMP|IDCMP_CLOSEWINDOW|IDCMP_REFRESHWINDOW,
  425.                 WA_Flags,    WFLG_DRAGBAR|WFLG_DEPTHGADGET|WFLG_CLOSEGADGET|WFLG_SMART_REFRESH|WFLG_ACTIVATE,
  426.                 WA_Gadgets,    Project1GList,
  427.                 WA_Title,    Project1Wdt,
  428.                 WA_ScreenTitle,    "Hangman 1997",
  429.                 WA_PubScreen,    Scr,
  430.                 TAG_DONE )))
  431.     return( 4L );
  432.  
  433.     GT_RefreshWindow( Project1Wnd, NULL );
  434.  
  435.     Project1Render();
  436.  
  437.     return( 0L );
  438. }
  439.  
  440. void CloseProject1Window( void )
  441. {
  442.     if ( Project1Wnd        ) {
  443.         CloseWindow( Project1Wnd );
  444.         Project1Wnd = NULL;
  445.     }
  446.  
  447.     if ( Project1GList      ) {
  448.         FreeGadgets( Project1GList );
  449.         Project1GList = NULL;
  450.     }
  451. }
  452.  
  453. void Project2Render( void )
  454. {
  455.     UWORD        offx, offy;
  456.  
  457.     offx = Project2Wnd->BorderLeft;
  458.     offy = Project2Wnd->BorderTop;
  459.  
  460.  
  461.     DrawBevelBox( Project2Wnd->RPort, offx + 20, offy + 14, 365, 49, GT_VisualInfo, VisualInfo, TAG_DONE );
  462. }
  463.  
  464. int HandleProject2IDCMP( void )
  465. {
  466.     struct IntuiMessage    *m;
  467.     int            (*func)();
  468.     BOOL            running = TRUE;
  469.  
  470.     while( m = GT_GetIMsg( Project2Wnd->UserPort )) {
  471.  
  472.         CopyMem(( char * )m, ( char * )&Project2Msg, (long)sizeof( struct IntuiMessage ));
  473.  
  474.         GT_ReplyIMsg( m );
  475.  
  476.         switch ( Project2Msg.Class ) {
  477.  
  478.             case    IDCMP_REFRESHWINDOW:
  479.                 GT_BeginRefresh( Project2Wnd );
  480.                 Project2Render();
  481.                 GT_EndRefresh( Project2Wnd, TRUE );
  482.                 break;
  483.  
  484.             case    IDCMP_CLOSEWINDOW:
  485.                 running = Project2CloseWindow();
  486.                 break;
  487.  
  488.             case    IDCMP_GADGETUP:
  489.                 func = ( void * )(( struct Gadget * )Project2Msg.IAddress )->UserData;
  490.                 running = func();
  491.                 break;
  492.         }
  493.     }
  494.     return( running );
  495. }
  496.  
  497. int OpenProject2Window( void )
  498. {
  499.     struct NewGadget    ng;
  500.     struct Gadget    *g;
  501.     UWORD        lc, tc;
  502.     UWORD        offx = Scr->WBorLeft, offy = Scr->WBorTop + Scr->RastPort.TxHeight + 1;
  503.  
  504.     if ( ! ( g = CreateContext( &Project2GList )))
  505.         return( 1L );
  506.  
  507.     for( lc = 0, tc = 0; lc < Project2_CNT; lc++ ) {
  508.  
  509.         CopyMem((char * )&Project2NGad[ lc ], (char * )&ng, (long)sizeof( struct NewGadget ));
  510.  
  511.         ng.ng_VisualInfo = VisualInfo;
  512.         ng.ng_TextAttr   = &XHelvetica11;
  513.         ng.ng_LeftEdge  += offx;
  514.         ng.ng_TopEdge   += offy;
  515.  
  516.         Project2Gadgets[ lc ] = g = CreateGadgetA((ULONG)Project2GTypes[ lc ], g, &ng, ( struct TagItem * )&Project2GTags[ tc ] );
  517.  
  518.         while( Project2GTags[ tc ] ) tc += 2;
  519.         tc++;
  520.  
  521.         if ( NOT g )
  522.             return( 2L );
  523.     }
  524.  
  525.     if ( ! ( Project2Wnd = OpenWindowTags( NULL,
  526.                 WA_Left,    Project2Left,
  527.                 WA_Top,        Project2Top,
  528.                 WA_Width,    Project2Width,
  529.                 WA_Height,    Project2Height + offy,
  530.                 WA_IDCMP,    BUTTONIDCMP|TEXTIDCMP|IDCMP_CLOSEWINDOW|IDCMP_REFRESHWINDOW,
  531.                 WA_Flags,    WFLG_DRAGBAR|WFLG_DEPTHGADGET|WFLG_CLOSEGADGET|WFLG_SMART_REFRESH|WFLG_ACTIVATE,
  532.                 WA_Gadgets,    Project2GList,
  533.                 WA_Title,    Project2Wdt,
  534.                 WA_ScreenTitle,    "Hangman 1997",
  535.                 WA_PubScreen,    Scr,
  536.                 TAG_DONE )))
  537.     return( 4L );
  538.  
  539.     GT_RefreshWindow( Project2Wnd, NULL );
  540.  
  541.     Project2Render();
  542.  
  543.     return( 0L );
  544. }
  545.  
  546. void CloseProject2Window( void )
  547. {
  548.     if ( Project2Wnd        ) {
  549.         CloseWindow( Project2Wnd );
  550.         Project2Wnd = NULL;
  551.     }
  552.  
  553.     if ( Project2GList      ) {
  554.         FreeGadgets( Project2GList );
  555.         Project2GList = NULL;
  556.     }
  557. }
  558.  
  559. void Project3Render( void )
  560. {
  561.     UWORD        offx, offy;
  562.  
  563.     offx = Project3Wnd->BorderLeft;
  564.     offy = Project3Wnd->BorderTop;
  565.  
  566.  
  567.     DrawBevelBox( Project3Wnd->RPort, offx + 16, offy + 6, 367, 105, GT_VisualInfo, VisualInfo, TAG_DONE );
  568. }
  569.  
  570. int HandleProject3IDCMP( void )
  571. {
  572.     struct IntuiMessage    *m;
  573.     int            (*func)();
  574.     BOOL            running = TRUE;
  575.  
  576.     while( m = GT_GetIMsg( Project3Wnd->UserPort )) {
  577.  
  578.         CopyMem(( char * )m, ( char * )&Project3Msg, (long)sizeof( struct IntuiMessage ));
  579.  
  580.         GT_ReplyIMsg( m );
  581.  
  582.         switch ( Project3Msg.Class ) {
  583.  
  584.             case    IDCMP_REFRESHWINDOW:
  585.                 GT_BeginRefresh( Project3Wnd );
  586.                 Project3Render();
  587.                 GT_EndRefresh( Project3Wnd, TRUE );
  588.                 break;
  589.  
  590.             case    IDCMP_CLOSEWINDOW:
  591.                 running = Project3CloseWindow();
  592.                 break;
  593.  
  594.             case    IDCMP_GADGETUP:
  595.             case    IDCMP_GADGETDOWN:
  596.                 func = ( void * )(( struct Gadget * )Project3Msg.IAddress )->UserData;
  597.                 running = func();
  598.                 break;
  599.         }
  600.     }
  601.     return( running );
  602. }
  603.  
  604. int OpenProject3Window( void )
  605. {
  606.     struct NewGadget    ng;
  607.     struct Gadget    *g;
  608.     UWORD        lc, tc;
  609.     UWORD        offx = Scr->WBorLeft, offy = Scr->WBorTop + Scr->RastPort.TxHeight + 1;
  610.  
  611.     if ( ! ( g = CreateContext( &Project3GList )))
  612.         return( 1L );
  613.  
  614.     for( lc = 0, tc = 0; lc < Project3_CNT; lc++ ) {
  615.  
  616.         CopyMem((char * )&Project3NGad[ lc ], (char * )&ng, (long)sizeof( struct NewGadget ));
  617.  
  618.         ng.ng_VisualInfo = VisualInfo;
  619.         ng.ng_TextAttr   = &XHelvetica11;
  620.         ng.ng_LeftEdge  += offx;
  621.         ng.ng_TopEdge   += offy;
  622.  
  623.         Project3Gadgets[ lc ] = g = CreateGadgetA((ULONG)Project3GTypes[ lc ], g, &ng, ( struct TagItem * )&Project3GTags[ tc ] );
  624.  
  625.         while( Project3GTags[ tc ] ) tc += 2;
  626.         tc++;
  627.  
  628.         if ( NOT g )
  629.             return( 2L );
  630.     }
  631.  
  632.     if ( ! ( Project3Wnd = OpenWindowTags( NULL,
  633.                 WA_Left,    Project3Left,
  634.                 WA_Top,        Project3Top,
  635.                 WA_Width,    Project3Width,
  636.                 WA_Height,    Project3Height + offy,
  637.                 WA_IDCMP,    BUTTONIDCMP|LISTVIEWIDCMP|IDCMP_CLOSEWINDOW|IDCMP_REFRESHWINDOW,
  638.                 WA_Flags,    WFLG_DRAGBAR|WFLG_DEPTHGADGET|WFLG_CLOSEGADGET|WFLG_SMART_REFRESH|WFLG_ACTIVATE,
  639.                 WA_Gadgets,    Project3GList,
  640.                 WA_Title,    Project3Wdt,
  641.                 WA_ScreenTitle,    "Hangman 1997",
  642.                 WA_PubScreen,    Scr,
  643.                 TAG_DONE )))
  644.     return( 4L );
  645.  
  646.     GT_RefreshWindow( Project3Wnd, NULL );
  647.  
  648.     Project3Render();
  649.  
  650.     return( 0L );
  651. }
  652.  
  653. void CloseProject3Window( void )
  654. {
  655.     if ( Project3Wnd        ) {
  656.         CloseWindow( Project3Wnd );
  657.         Project3Wnd = NULL;
  658.     }
  659.  
  660.     if ( Project3GList      ) {
  661.         FreeGadgets( Project3GList );
  662.         Project3GList = NULL;
  663.     }
  664. }
  665.  
  666.