home *** CD-ROM | disk | FTP | other *** search
/ YPA: Your Privacy Assured / YPA.ISO / other_goodies / utilities / memomaster.lha / MM2.1 / source / MM2_gui.c < prev    next >
C/C++ Source or Header  |  1994-09-09  |  16KB  |  573 lines

  1. /*
  2.  *  Source machine generated by GadToolsBox V2.0
  3.  *  which is (c) Copyright 1991-1993 Jaba Development
  4.  *
  5.  *  GUI Designed by : Simon Dick
  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 "MM2_gui.h"
  26.  
  27. struct Screen         *Scr = NULL;
  28. UBYTE                 *PubScreenName = NULL;
  29. APTR                   VisualInfo = NULL;
  30. struct Window         *MMWnd = NULL;
  31. struct Window         *EditWnd = NULL;
  32. struct Gadget         *MMGList = NULL;
  33. struct Gadget         *EditGList = NULL;
  34. struct IntuiMessage    MMMsg;
  35. struct IntuiMessage    EditMsg;
  36. UWORD                  MMZoom[4];
  37. struct Gadget         *MMGadgets[42];
  38. struct Gadget         *EditGadgets[7];
  39. UWORD                  MMLeft = 0;
  40. UWORD                  MMTop = 0;
  41. UWORD                  MMWidth = 615;
  42. UWORD                  MMHeight = 187;
  43. UWORD                  EditLeft = 10;
  44. UWORD                  EditTop = 14;
  45. UWORD                  EditWidth = 595;
  46. UWORD                  EditHeight = 74;
  47. UBYTE                 *MMWdt = (UBYTE *)"MemoMaster V2.1 -  ";
  48. UBYTE                 *EditWdt = (UBYTE *)"Edit memo";
  49. struct TextAttr       *Font, Attr;
  50. UWORD                  FontX, FontY;
  51. UWORD                  OffX, OffY;
  52. struct TextFont       *MMFont = NULL;
  53. struct TextFont       *EditFont = NULL;
  54.  
  55. struct IntuiText EditIText[] = {
  56.     1, 0, JAM1,103, 8, NULL, (UBYTE *)"Please enter your memo:", NULL };
  57.  
  58. #define Edit_TNUM 1
  59.  
  60. UWORD MMGTypes[] = {
  61.     TEXT_KIND,
  62.     TEXT_KIND,
  63.     TEXT_KIND,
  64.     TEXT_KIND,
  65.     CHECKBOX_KIND,
  66.     TEXT_KIND,
  67.     TEXT_KIND,
  68.     TEXT_KIND,
  69.     TEXT_KIND,
  70.     CHECKBOX_KIND,
  71.     TEXT_KIND,
  72.     TEXT_KIND,
  73.     TEXT_KIND,
  74.     TEXT_KIND,
  75.     CHECKBOX_KIND,
  76.     TEXT_KIND,
  77.     TEXT_KIND,
  78.     TEXT_KIND,
  79.     TEXT_KIND,
  80.     CHECKBOX_KIND,
  81.     TEXT_KIND,
  82.     TEXT_KIND,
  83.     TEXT_KIND,
  84.     TEXT_KIND,
  85.     CHECKBOX_KIND,
  86.     TEXT_KIND,
  87.     TEXT_KIND,
  88.     TEXT_KIND,
  89.     TEXT_KIND,
  90.     CHECKBOX_KIND,
  91.     BUTTON_KIND,
  92.     BUTTON_KIND,
  93.     BUTTON_KIND,
  94.     BUTTON_KIND,
  95.     BUTTON_KIND,
  96.     BUTTON_KIND,
  97.     BUTTON_KIND,
  98.     BUTTON_KIND,
  99.     BUTTON_KIND,
  100.     BUTTON_KIND,
  101.     BUTTON_KIND,
  102.     BUTTON_KIND
  103. };
  104.  
  105. UWORD EditGTypes[] = {
  106.     BUTTON_KIND,
  107.     BUTTON_KIND,
  108.     BUTTON_KIND,
  109.     STRING_KIND,
  110.     STRING_KIND,
  111.     STRING_KIND,
  112.     STRING_KIND
  113. };
  114.  
  115. struct NewGadget MMNGad[] = {
  116.     69, 3, 136, 11, (UBYTE *)"Date :", NULL, GD_Date1Gad, PLACETEXT_LEFT, NULL, NULL,
  117.     286, 3, 99, 11, (UBYTE *)"Notice :", NULL, GD_Notice1Gad, PLACETEXT_LEFT, NULL, NULL,
  118.     445, 3, 112, 11, (UBYTE *)"Type :", NULL, GD_Type1Gad, PLACETEXT_LEFT, NULL, NULL,
  119.     14, 15, 542, 11, NULL, NULL, GD_Message1Gad, 0, NULL, NULL,
  120.     568, 9, 26, 11, NULL, NULL, GD_Select1Gad, 0, NULL, (APTR)Select1GadClicked,
  121.     69, 30, 136, 11, (UBYTE *)"Date :", NULL, GD_Date2Gad, PLACETEXT_LEFT, NULL, NULL,
  122.     286, 30, 99, 11, (UBYTE *)"Notice :", NULL, GD_Notice2Gad, PLACETEXT_LEFT, NULL, NULL,
  123.     445, 30, 112, 11, (UBYTE *)"Type :", NULL, GD_Type2Gad, PLACETEXT_LEFT, NULL, NULL,
  124.     14, 42, 542, 11, NULL, NULL, GD_Message2Gad, 0, NULL, NULL,
  125.     568, 36, 26, 11, NULL, NULL, GD_Select2Gad, 0, NULL, (APTR)Select2GadClicked,
  126.     69, 57, 136, 11, (UBYTE *)"Date :", NULL, GD_Date3Gad, PLACETEXT_LEFT, NULL, NULL,
  127.     286, 57, 99, 11, (UBYTE *)"Notice :", NULL, GD_Notice3Gad, PLACETEXT_LEFT, NULL, NULL,
  128.     445, 57, 112, 11, (UBYTE *)"Type :", NULL, GD_Type3Gad, PLACETEXT_LEFT, NULL, NULL,
  129.     14, 69, 542, 11, NULL, NULL, GD_Message3Gad, 0, NULL, NULL,
  130.     568, 63, 26, 11, NULL, NULL, GD_Select3Gad, 0, NULL, (APTR)Select3GadClicked,
  131.     69, 84, 136, 11, (UBYTE *)"Date :", NULL, GD_Date4Gad, PLACETEXT_LEFT, NULL, NULL,
  132.     286, 84, 99, 11, (UBYTE *)"Notice :", NULL, GD_Notice4Gad, PLACETEXT_LEFT, NULL, NULL,
  133.     445, 84, 112, 11, (UBYTE *)"Type :", NULL, GD_Type4Gad, PLACETEXT_LEFT, NULL, NULL,
  134.     14, 96, 542, 11, NULL, NULL, GD_Message4Gad, 0, NULL, NULL,
  135.     568, 90, 26, 11, NULL, NULL, GD_Select4Gad, 0, NULL, (APTR)Select4GadClicked,
  136.     69, 111, 136, 11, (UBYTE *)"Date :", NULL, GD_Date5Gad, PLACETEXT_LEFT, NULL, NULL,
  137.     286, 111, 99, 11, (UBYTE *)"Notice :", NULL, GD_Notice5Gad, PLACETEXT_LEFT, NULL, NULL,
  138.     445, 111, 112, 11, (UBYTE *)"Type :", NULL, GD_Type5Gad, PLACETEXT_LEFT, NULL, NULL,
  139.     14, 123, 542, 11, NULL, NULL, GD_Message5Gad, 0, NULL, NULL,
  140.     568, 117, 26, 11, NULL, NULL, GD_Select5Gad, 0, NULL, (APTR)Select5GadClicked,
  141.     69, 138, 136, 11, (UBYTE *)"Date :", NULL, GD_Date6Gad, PLACETEXT_LEFT, NULL, NULL,
  142.     286, 138, 99, 11, (UBYTE *)"Notice :", NULL, GD_Notice6Gad, PLACETEXT_LEFT, NULL, NULL,
  143.     445, 138, 112, 11, (UBYTE *)"Type :", NULL, GD_Type6Gad, PLACETEXT_LEFT, NULL, NULL,
  144.     14, 150, 542, 11, NULL, NULL, GD_Message6Gad, 0, NULL, NULL,
  145.     568, 144, 26, 11, NULL, NULL, GD_Select6Gad, 0, NULL, (APTR)Select6GadClicked,
  146.     5, 164, 74, 11, (UBYTE *)"|<", NULL, GD_MoveBeginGad, PLACETEXT_IN, NULL, (APTR)MoveBeginGadClicked,
  147.     110, 164, 74, 11, (UBYTE *)"<<", NULL, GD_BackBlockGad, PLACETEXT_IN, NULL, (APTR)BackBlockGadClicked,
  148.     216, 164, 74, 11, (UBYTE *)"<", NULL, GD_BackGad, PLACETEXT_IN, NULL, (APTR)BackGadClicked,
  149.     322, 164, 74, 11, (UBYTE *)">", NULL, GD_ForwardGad, PLACETEXT_IN, NULL, (APTR)ForwardGadClicked,
  150.     429, 164, 74, 11, (UBYTE *)">>", NULL, GD_ForwardBlockGad, PLACETEXT_IN, NULL, (APTR)ForwardBlockGadClicked,
  151.     536, 164, 74, 11, (UBYTE *)">|", NULL, GD_MoveEndGad, PLACETEXT_IN, NULL, (APTR)MoveEndGadClicked,
  152.     5, 175, 74, 11, (UBYTE *)"Add", NULL, GD_AddGad, PLACETEXT_IN, NULL, (APTR)AddGadClicked,
  153.     110, 175, 74, 11, (UBYTE *)"Delete", NULL, GD_DeleteGad, PLACETEXT_IN, NULL, (APTR)DeleteGadClicked,
  154.     216, 175, 74, 11, (UBYTE *)"Edit", NULL, GD_EditGad, PLACETEXT_IN, NULL, (APTR)EditGadClicked,
  155.     322, 175, 74, 11, (UBYTE *)"Check", NULL, GD_CheckGad, PLACETEXT_IN, NULL, (APTR)CheckGadClicked,
  156.     429, 175, 74, 11, (UBYTE *)"Shrink", NULL, GD_ShrinkGad, PLACETEXT_IN, NULL, (APTR)ShrinkGadClicked,
  157.     536, 175, 74, 11, (UBYTE *)"Help", NULL, GD_HelpGad, PLACETEXT_IN, NULL, (APTR)HelpGadClicked
  158. };
  159.  
  160. struct NewGadget EditNGad[] = {
  161.     12, 56, 81, 14, (UBYTE *)"OK", NULL, GD_OKGad, PLACETEXT_IN, NULL, (APTR)OKGadClicked,
  162.     255, 56, 81, 14, (UBYTE *)"Help", NULL, GD_EditHelpGad, PLACETEXT_IN, NULL, (APTR)EditHelpGadClicked,
  163.     499, 56, 81, 14, (UBYTE *)"Cancel", NULL, GD_CancelGad, PLACETEXT_IN, NULL, (APTR)CancelGadClicked,
  164.     75, 15, 99, 14, (UBYTE *)"Date :", NULL, GD_DateGad, PLACETEXT_LEFT, NULL, (APTR)DateGadClicked,
  165.     266, 15, 36, 14, (UBYTE *)"Notice :", NULL, GD_NoticeGad, PLACETEXT_LEFT, NULL, (APTR)NoticeGadClicked,
  166.     379, 15, 32, 14, (UBYTE *)"Type :", NULL, GD_TypeGad, PLACETEXT_LEFT, NULL, (APTR)TypeGadClicked,
  167.     75, 35, 505, 14, (UBYTE *)"Memo :", NULL, GD_MemoGad, PLACETEXT_LEFT, NULL, (APTR)MemoGadClicked
  168. };
  169.  
  170. ULONG MMGTags[] = {
  171.     (TAG_DONE),
  172.     (TAG_DONE),
  173.     (TAG_DONE),
  174.     (TAG_DONE),
  175.     (GA_Disabled), TRUE, (TAG_DONE),
  176.     (TAG_DONE),
  177.     (TAG_DONE),
  178.     (TAG_DONE),
  179.     (TAG_DONE),
  180.     (GA_Disabled), TRUE, (TAG_DONE),
  181.     (TAG_DONE),
  182.     (TAG_DONE),
  183.     (TAG_DONE),
  184.     (TAG_DONE),
  185.     (GA_Disabled), TRUE, (TAG_DONE),
  186.     (TAG_DONE),
  187.     (TAG_DONE),
  188.     (TAG_DONE),
  189.     (TAG_DONE),
  190.     (GA_Disabled), TRUE, (TAG_DONE),
  191.     (TAG_DONE),
  192.     (TAG_DONE),
  193.     (TAG_DONE),
  194.     (TAG_DONE),
  195.     (GA_Disabled), TRUE, (TAG_DONE),
  196.     (TAG_DONE),
  197.     (TAG_DONE),
  198.     (TAG_DONE),
  199.     (TAG_DONE),
  200.     (GA_Disabled), TRUE, (TAG_DONE),
  201.     (TAG_DONE),
  202.     (TAG_DONE),
  203.     (TAG_DONE),
  204.     (TAG_DONE),
  205.     (TAG_DONE),
  206.     (TAG_DONE),
  207.     (TAG_DONE),
  208.     (TAG_DONE),
  209.     (TAG_DONE),
  210.     (TAG_DONE),
  211.     (TAG_DONE),
  212.     (TAG_DONE)
  213. };
  214.  
  215. ULONG EditGTags[] = {
  216.     (TAG_DONE),
  217.     (TAG_DONE),
  218.     (TAG_DONE),
  219.     (GTST_MaxChars), 9, (TAG_DONE),
  220.     (GTST_MaxChars), 2, (TAG_DONE),
  221.     (GTST_MaxChars), 1, (TAG_DONE),
  222.     (GTST_MaxChars), 60, (TAG_DONE)
  223. };
  224.  
  225. static UWORD ComputeX( UWORD value )
  226. {
  227.     return(( UWORD )((( FontX * value ) + 4 ) / 8 ));
  228. }
  229.  
  230. static UWORD ComputeY( UWORD value )
  231. {
  232.     return(( UWORD )((( FontY * value ) + 4 ) / 8 ));
  233. }
  234.  
  235. static void ComputeFont( UWORD width, UWORD height )
  236. {
  237.     Forbid();
  238.     Font = &Attr;
  239.     Font->ta_Name = (STRPTR)GfxBase->DefaultFont->tf_Message.mn_Node.ln_Name;
  240.     Font->ta_YSize = FontY = GfxBase->DefaultFont->tf_YSize;
  241.     FontX = GfxBase->DefaultFont->tf_XSize;
  242.     Permit();
  243.  
  244.     OffX = Scr->WBorLeft;
  245.     OffY = Scr->RastPort.TxHeight + Scr->WBorTop + 1;
  246.  
  247.     if ( width && height ) {
  248.         if (( ComputeX( width ) + OffX + Scr->WBorRight ) > Scr->Width )
  249.             goto UseTopaz;
  250.         if (( ComputeY( height ) + OffY + Scr->WBorBottom ) > Scr->Height )
  251.             goto UseTopaz;
  252.     }
  253.     return;
  254.  
  255. UseTopaz:
  256.     Font->ta_Name = (STRPTR)"topaz.font";
  257.     FontX = FontY = Font->ta_YSize = 8;
  258. }
  259.  
  260. int SetupScreen( void )
  261. {
  262.     if ( ! ( Scr = LockPubScreen( PubScreenName )))
  263.         return( 1L );
  264.  
  265.     ComputeFont( 0, 0 );
  266.  
  267.     if ( ! ( VisualInfo = GetVisualInfo( Scr, TAG_DONE )))
  268.         return( 2L );
  269.  
  270.     return( 0L );
  271. }
  272.  
  273. void CloseDownScreen( void )
  274. {
  275.     if ( VisualInfo ) {
  276.         FreeVisualInfo( VisualInfo );
  277.         VisualInfo = NULL;
  278.     }
  279.  
  280.     if ( Scr        ) {
  281.         UnlockPubScreen( NULL, Scr );
  282.         Scr = NULL;
  283.     }
  284. }
  285.  
  286. void MMRender( void )
  287. {
  288.     ComputeFont( MMWidth, MMHeight );
  289.  
  290.     DrawBevelBox( MMWnd->RPort, OffX + ComputeX( 5 ),
  291.                     OffY + ComputeY( 1 ),
  292.                     ComputeX( 606 ),
  293.                     ComputeY( 27 ),
  294.                     GT_VisualInfo, VisualInfo, TAG_DONE );
  295.     DrawBevelBox( MMWnd->RPort, OffX + ComputeX( 5 ),
  296.                     OffY + ComputeY( 28 ),
  297.                     ComputeX( 606 ),
  298.                     ComputeY( 27 ),
  299.                     GT_VisualInfo, VisualInfo, TAG_DONE );
  300.     DrawBevelBox( MMWnd->RPort, OffX + ComputeX( 5 ),
  301.                     OffY + ComputeY( 55 ),
  302.                     ComputeX( 606 ),
  303.                     ComputeY( 27 ),
  304.                     GT_VisualInfo, VisualInfo, TAG_DONE );
  305.     DrawBevelBox( MMWnd->RPort, OffX + ComputeX( 5 ),
  306.                     OffY + ComputeY( 82 ),
  307.                     ComputeX( 606 ),
  308.                     ComputeY( 27 ),
  309.                     GT_VisualInfo, VisualInfo, TAG_DONE );
  310.     DrawBevelBox( MMWnd->RPort, OffX + ComputeX( 5 ),
  311.                     OffY + ComputeY( 109 ),
  312.                     ComputeX( 606 ),
  313.                     ComputeY( 27 ),
  314.                     GT_VisualInfo, VisualInfo, TAG_DONE );
  315.     DrawBevelBox( MMWnd->RPort, OffX + ComputeX( 5 ),
  316.                     OffY + ComputeY( 136 ),
  317.                     ComputeX( 606 ),
  318.                     ComputeY( 27 ),
  319.                     GT_VisualInfo, VisualInfo, TAG_DONE );
  320. }
  321.  
  322. int HandleMMIDCMP( void )
  323. {
  324.     struct IntuiMessage    *m;
  325.     int            (*func)();
  326.     BOOL            running = TRUE;
  327.  
  328.     while( m = GT_GetIMsg( MMWnd->UserPort )) {
  329.  
  330.         CopyMem(( char * )m, ( char * )&MMMsg, (long)sizeof( struct IntuiMessage ));
  331.  
  332.         GT_ReplyIMsg( m );
  333.  
  334.         switch ( MMMsg.Class ) {
  335.  
  336.             case    IDCMP_REFRESHWINDOW:
  337.                 GT_BeginRefresh( MMWnd );
  338.                 MMRender();
  339.                 GT_EndRefresh( MMWnd, TRUE );
  340.                 break;
  341.  
  342.             case    IDCMP_CLOSEWINDOW:
  343.                 running = MMCloseWindow();
  344.                 break;
  345.  
  346.             case    IDCMP_GADGETUP:
  347.                 func = ( void * )(( struct Gadget * )MMMsg.IAddress )->UserData;
  348.                 running = func();
  349.                 break;
  350.         }
  351.     }
  352.     return( running );
  353. }
  354.  
  355. int OpenMMWindow( void )
  356. {
  357.     struct NewGadget    ng;
  358.     struct Gadget    *g;
  359.     UWORD        lc, tc;
  360.     UWORD        wleft = MMLeft, wtop = MMTop, ww, wh;
  361.  
  362.     ComputeFont( MMWidth, MMHeight );
  363.  
  364.     ww = ComputeX( MMWidth );
  365.     wh = ComputeY( MMHeight );
  366.  
  367.     if (( wleft + ww + OffX + Scr->WBorRight ) > Scr->Width ) wleft = Scr->Width - ww;
  368.     if (( wtop + wh + OffY + Scr->WBorBottom ) > Scr->Height ) wtop = Scr->Height - wh;
  369.  
  370.     if ( ! ( MMFont = OpenDiskFont( Font )))
  371.         return( 5L );
  372.  
  373.     if ( ! ( g = CreateContext( &MMGList )))
  374.         return( 1L );
  375.  
  376.     for( lc = 0, tc = 0; lc < MM_CNT; lc++ ) {
  377.  
  378.         CopyMem((char * )&MMNGad[ lc ], (char * )&ng, (long)sizeof( struct NewGadget ));
  379.  
  380.         ng.ng_VisualInfo = VisualInfo;
  381.         ng.ng_TextAttr   = Font;
  382.         ng.ng_LeftEdge   = OffX + ComputeX( ng.ng_LeftEdge );
  383.         ng.ng_TopEdge    = OffY + ComputeY( ng.ng_TopEdge );
  384.         ng.ng_Width      = ComputeX( ng.ng_Width );
  385.         ng.ng_Height     = ComputeY( ng.ng_Height);
  386.  
  387.         MMGadgets[ lc ] = g = CreateGadgetA((ULONG)MMGTypes[ lc ], g, &ng, ( struct TagItem * )&MMGTags[ tc ] );
  388.  
  389.         while( MMGTags[ tc ] ) tc += 2;
  390.         tc++;
  391.  
  392.         if ( NOT g )
  393.             return( 2L );
  394.     }
  395.  
  396.     MMZoom[0] = MMLeft;
  397.     MMZoom[1] = MMTop;
  398.     if ( MMWdt )
  399.         MMZoom[2] = TextLength( &Scr->RastPort, (UBYTE *)MMWdt, strlen((char *)MMWdt )) + 80;
  400.     else
  401.         MMZoom[2]  = 80L;
  402.         MMZoom[3] = Scr->WBorTop + Scr->RastPort.TxHeight + 1;
  403.  
  404.     if ( ! ( MMWnd = OpenWindowTags( NULL,
  405.                 WA_Left,    wleft,
  406.                 WA_Top,        wtop,
  407.                 WA_Width,    ww + OffX + Scr->WBorRight,
  408.                 WA_Height,    wh + OffY + Scr->WBorBottom,
  409.                 WA_IDCMP,    TEXTIDCMP|CHECKBOXIDCMP|BUTTONIDCMP|IDCMP_CLOSEWINDOW|IDCMP_REFRESHWINDOW,
  410.                 WA_Flags,    WFLG_DRAGBAR|WFLG_DEPTHGADGET|WFLG_CLOSEGADGET|WFLG_SMART_REFRESH|WFLG_ACTIVATE,
  411.                 WA_Gadgets,    MMGList,
  412.                 WA_Title,    MMWdt,
  413.                 WA_PubScreen,    Scr,
  414.                 WA_Zoom,    MMZoom,
  415.                 TAG_DONE )))
  416.     return( 4L );
  417.  
  418.     GT_RefreshWindow( MMWnd, NULL );
  419.  
  420.     MMRender();
  421.  
  422.     return( 0L );
  423. }
  424.  
  425. void CloseMMWindow( void )
  426. {
  427.     if ( MMWnd        ) {
  428.         CloseWindow( MMWnd );
  429.         MMWnd = NULL;
  430.     }
  431.  
  432.     if ( MMGList      ) {
  433.         FreeGadgets( MMGList );
  434.         MMGList = NULL;
  435.     }
  436.  
  437.     if ( MMFont ) {
  438.         CloseFont( MMFont );
  439.         MMFont = NULL;
  440.     }
  441. }
  442.  
  443. void EditRender( void )
  444. {
  445.     struct IntuiText    it;
  446.     UWORD            cnt;
  447.  
  448.     ComputeFont( EditWidth, EditHeight );
  449.  
  450.  
  451.     for ( cnt = 0; cnt < Edit_TNUM; cnt++ ) {
  452.         CopyMem(( char * )&EditIText[ cnt ], ( char * )&it, (long)sizeof( struct IntuiText ));
  453.         it.ITextFont = Font;
  454.         it.LeftEdge  = OffX + ComputeX( it.LeftEdge ) - ( IntuiTextLength( &it ) >> 1 );
  455.         it.TopEdge   = OffY + ComputeY( it.TopEdge ) - ( Font->ta_YSize >> 1 );
  456.         PrintIText( EditWnd->RPort, &it, 0, 0 );
  457.     }
  458. }
  459.  
  460. int HandleEditIDCMP( void )
  461. {
  462.     struct IntuiMessage    *m;
  463.     int            (*func)();
  464.     BOOL            running = TRUE;
  465.  
  466.     while( m = GT_GetIMsg( EditWnd->UserPort )) {
  467.  
  468.         CopyMem(( char * )m, ( char * )&EditMsg, (long)sizeof( struct IntuiMessage ));
  469.  
  470.         GT_ReplyIMsg( m );
  471.  
  472.         switch ( EditMsg.Class ) {
  473.  
  474.             case    IDCMP_REFRESHWINDOW:
  475.                 GT_BeginRefresh( EditWnd );
  476.                 EditRender();
  477.                 GT_EndRefresh( EditWnd, TRUE );
  478.                 break;
  479.  
  480.             case    IDCMP_CLOSEWINDOW:
  481.                 running = EditCloseWindow();
  482.                 break;
  483.  
  484.             case    IDCMP_GADGETUP:
  485.                 func = ( void * )(( struct Gadget * )EditMsg.IAddress )->UserData;
  486.                 running = func();
  487.                 break;
  488.         }
  489.     }
  490.     return( running );
  491. }
  492.  
  493. int OpenEditWindow( void )
  494. {
  495.     struct NewGadget    ng;
  496.     struct Gadget    *g;
  497.     UWORD        lc, tc;
  498.     UWORD        wleft = EditLeft, wtop = EditTop, ww, wh;
  499.  
  500.     ComputeFont( EditWidth, EditHeight );
  501.  
  502.     ww = ComputeX( EditWidth );
  503.     wh = ComputeY( EditHeight );
  504.  
  505.     if (( wleft + ww + OffX + Scr->WBorRight ) > Scr->Width ) wleft = Scr->Width - ww;
  506.     if (( wtop + wh + OffY + Scr->WBorBottom ) > Scr->Height ) wtop = Scr->Height - wh;
  507.  
  508.     if ( ! ( EditFont = OpenDiskFont( Font )))
  509.         return( 5L );
  510.  
  511.     if ( ! ( g = CreateContext( &EditGList )))
  512.         return( 1L );
  513.  
  514.     for( lc = 0, tc = 0; lc < Edit_CNT; lc++ ) {
  515.  
  516.         CopyMem((char * )&EditNGad[ lc ], (char * )&ng, (long)sizeof( struct NewGadget ));
  517.  
  518.         ng.ng_VisualInfo = VisualInfo;
  519.         ng.ng_TextAttr   = Font;
  520.         ng.ng_LeftEdge   = OffX + ComputeX( ng.ng_LeftEdge );
  521.         ng.ng_TopEdge    = OffY + ComputeY( ng.ng_TopEdge );
  522.         ng.ng_Width      = ComputeX( ng.ng_Width );
  523.         ng.ng_Height     = ComputeY( ng.ng_Height);
  524.  
  525.         EditGadgets[ lc ] = g = CreateGadgetA((ULONG)EditGTypes[ lc ], g, &ng, ( struct TagItem * )&EditGTags[ tc ] );
  526.  
  527.         while( EditGTags[ tc ] ) tc += 2;
  528.         tc++;
  529.  
  530.         if ( NOT g )
  531.             return( 2L );
  532.     }
  533.  
  534.     if ( ! ( EditWnd = OpenWindowTags( NULL,
  535.                 WA_Left,    wleft,
  536.                 WA_Top,        wtop,
  537.                 WA_Width,    ww + OffX + Scr->WBorRight,
  538.                 WA_Height,    wh + OffY + Scr->WBorBottom,
  539.                 WA_IDCMP,    BUTTONIDCMP|STRINGIDCMP|IDCMP_CLOSEWINDOW|IDCMP_REFRESHWINDOW,
  540.                 WA_Flags,    WFLG_DRAGBAR|WFLG_DEPTHGADGET|WFLG_CLOSEGADGET|WFLG_SMART_REFRESH|WFLG_ACTIVATE,
  541.                 WA_Gadgets,    EditGList,
  542.                 WA_Title,    EditWdt,
  543.                 WA_ScreenTitle,    "MemoMaster V2.1",
  544.                 WA_PubScreen,    Scr,
  545.                 TAG_DONE )))
  546.     return( 4L );
  547.  
  548.     GT_RefreshWindow( EditWnd, NULL );
  549.  
  550.     EditRender();
  551.  
  552.     return( 0L );
  553. }
  554.  
  555. void CloseEditWindow( void )
  556. {
  557.     if ( EditWnd        ) {
  558.         CloseWindow( EditWnd );
  559.         EditWnd = NULL;
  560.     }
  561.  
  562.     if ( EditGList      ) {
  563.         FreeGadgets( EditGList );
  564.         EditGList = NULL;
  565.     }
  566.  
  567.     if ( EditFont ) {
  568.         CloseFont( EditFont );
  569.         EditFont = NULL;
  570.     }
  571. }
  572.  
  573.