home *** CD-ROM | disk | FTP | other *** search
/ World of A1200 / World_Of_A1200.iso / datafiles / hardware / eprommer / source.lha / src / gad_eprommer.c < prev    next >
C/C++ Source or Header  |  1993-11-14  |  25KB  |  914 lines

  1. /*
  2.  *  Source machine generated by GadToolsBox V2.0b
  3.  *  which is (c) Copyright 1991-1993 Jaba Development
  4.  *
  5.  *  GUI Designed by : -- Unnamed --
  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 "gad_eprommer.h"
  24.  
  25. struct Screen         *Scr = NULL;
  26. UBYTE                 *PubScreenName = NULL;
  27. APTR                   VisualInfo = NULL;
  28. struct Window         *EprommerWnd = NULL;
  29. struct Window         *OptionsWnd = NULL;
  30. struct Window         *BusyWnd = NULL;
  31. struct Window         *TestWnd = NULL;
  32. struct Gadget         *EprommerGList = NULL;
  33. struct Gadget         *OptionsGList = NULL;
  34. struct Gadget         *BusyGList = NULL;
  35. struct Gadget         *TestGList = NULL;
  36. struct IntuiMessage    EprommerMsg;
  37. struct IntuiMessage    OptionsMsg;
  38. struct IntuiMessage    BusyMsg;
  39. struct IntuiMessage    TestMsg;
  40. struct Gadget         *EprommerGadgets[21];
  41. struct Gadget         *OptionsGadgets[10];
  42. struct Gadget         *BusyGadgets[1];
  43. struct Gadget         *TestGadgets[4];
  44. extern Class          *initGet( void );
  45. struct IClass         *getClass = NULL;
  46. struct _Object        *getImage = NULL;
  47. UWORD                  EprommerLeft = 26;
  48. UWORD                  EprommerTop = 34;
  49. UWORD                  EprommerWidth = 502;
  50. UWORD                  EprommerHeight = 182;
  51. UWORD                  OptionsLeft = 238;
  52. UWORD                  OptionsTop = 53;
  53. UWORD                  OptionsWidth = 223;
  54. UWORD                  OptionsHeight = 175;
  55. UWORD                  BusyLeft = 229;
  56. UWORD                  BusyTop = 129;
  57. UWORD                  BusyWidth = 177;
  58. UWORD                  BusyHeight = 46;
  59. UWORD                  TestLeft = 80;
  60. UWORD                  TestTop = 98;
  61. UWORD                  TestWidth = 204;
  62. UWORD                  TestHeight = 95;
  63. UBYTE                 *EprommerWdt = (UBYTE *)"-";
  64. UBYTE                 *OptionsWdt = (UBYTE *)"Options";
  65. UBYTE                 *BusyWdt = NULL;
  66. UBYTE                 *TestWdt = (UBYTE *)"Check Eprommer";
  67. struct TextAttr       *Font, Attr;
  68. UWORD                  FontX, FontY;
  69. UWORD                  OffX, OffY;
  70.  
  71. UBYTE *DataFormat0Labels[] = {
  72.     (UBYTE *)"Binary",
  73.     (UBYTE *)"IntelHex",
  74.     NULL };
  75.  
  76. UBYTE *ProgAlgo0Labels[] = {
  77.     (UBYTE *)"50 msec",
  78.     (UBYTE *)"IntEligent",
  79.     (UBYTE *)"Eprommer",
  80.     (UBYTE *)"No delay",
  81.     NULL };
  82.  
  83. UBYTE *EpromType0Labels[] = {
  84.     (UBYTE *)"2716",
  85.     (UBYTE *)"2732",
  86.     (UBYTE *)"2732A",
  87.     (UBYTE *)"2764",
  88.     (UBYTE *)"2764A",
  89.     (UBYTE *)"27128",
  90.     (UBYTE *)"27256",
  91.     (UBYTE *)"27512",
  92.     (UBYTE *)"6216",
  93.     (UBYTE *)"6264",
  94.     (UBYTE *)"62256",
  95.     NULL };
  96.  
  97. UBYTE *NumericalBase1Labels[] = {
  98.     (UBYTE *)"Only Decimal",
  99.     (UBYTE *)"Dec. & Hex.",
  100.     (UBYTE *)"Hexadecimal",
  101.     NULL };
  102.  
  103. UBYTE *SetVpp3Labels[] = {
  104.     (UBYTE *)"12.5 V",
  105.     (UBYTE *)"21 V",
  106.     (UBYTE *)"25 V",
  107.     NULL };
  108.  
  109. UBYTE *T_CyAddress3Labels[] = {
  110.     (UBYTE *)"0x5555",
  111.     (UBYTE *)"0xAAAA",
  112.     NULL };
  113.  
  114. UBYTE *T_CyData3Labels[] = {
  115.     (UBYTE *)"0x55",
  116.     (UBYTE *)"0xAA",
  117.     NULL };
  118.  
  119. struct IntuiText EprommerIText[] = {
  120.     1, 0, JAM1,264, 11, NULL, (UBYTE *)"Address", NULL,
  121.     1, 0, JAM1,416, 11, NULL, (UBYTE *)"Eprom Type", NULL,
  122.     1, 0, JAM1,416, 127, NULL, (UBYTE *)"Algorythm", NULL,
  123.     1, 0, JAM1,100, 91, NULL, (UBYTE *)"Action", NULL };
  124.  
  125. #define Eprommer_TNUM 4
  126.  
  127. struct IntuiText BusyIText[] = {
  128.     2, 0, JAM1,52, 15, NULL, (UBYTE *)"Address:", NULL,
  129.     1, 0, JAM2,128, 15, NULL, (UBYTE *)"0x----   ", NULL };
  130.  
  131. #define Busy_TNUM 2
  132.  
  133. UWORD EprommerGTypes[] = {
  134.     CYCLE_KIND,
  135.     MX_KIND,
  136.     MX_KIND,
  137.     BUTTON_KIND,
  138.     BUTTON_KIND,
  139.     BUTTON_KIND,
  140.     BUTTON_KIND,
  141.     BUTTON_KIND,
  142.     BUTTON_KIND,
  143.     GENERIC_KIND,
  144.     GENERIC_KIND,
  145.     STRING_KIND,
  146.     STRING_KIND,
  147.     STRING_KIND,
  148.     STRING_KIND,
  149.     STRING_KIND,
  150.     STRING_KIND,
  151.     BUTTON_KIND,
  152.     BUTTON_KIND,
  153.     BUTTON_KIND,
  154.     BUTTON_KIND
  155. };
  156.  
  157. UWORD OptionsGTypes[] = {
  158.     CYCLE_KIND,
  159.     CHECKBOX_KIND,
  160.     CHECKBOX_KIND,
  161.     CHECKBOX_KIND,
  162.     BUTTON_KIND,
  163.     BUTTON_KIND,
  164.     BUTTON_KIND,
  165.     CHECKBOX_KIND,
  166.     CHECKBOX_KIND,
  167.     INTEGER_KIND
  168. };
  169.  
  170. UWORD BusyGTypes[] = {
  171.     BUTTON_KIND
  172. };
  173.  
  174. UWORD TestGTypes[] = {
  175.     CHECKBOX_KIND,
  176.     CYCLE_KIND,
  177.     CYCLE_KIND,
  178.     CYCLE_KIND
  179. };
  180.  
  181. struct NewGadget EprommerNGad[] = {
  182.     51, 19, 95, 11, (UBYTE *)"Data Format", NULL, GD_DataFormat, PLACETEXT_ABOVE, NULL, (APTR)DataFormatClicked,
  183.     373, 135, 17, 9, NULL, NULL, GD_ProgAlgo, PLACETEXT_RIGHT, NULL, (APTR)ProgAlgoClicked,
  184.     373, 19, 17, 9, NULL, NULL, GD_EpromType, PLACETEXT_RIGHT, NULL, (APTR)EpromTypeClicked,
  185.     220, 101, 132, 11, (UBYTE *)"Read Byte", NULL, GD_ReadByte, PLACETEXT_IN, NULL, (APTR)ReadByteClicked,
  186.     220, 116, 132, 11, (UBYTE *)"Write Byte", NULL, GD_WriteByte, PLACETEXT_IN, NULL, (APTR)WriteByteClicked,
  187.     11, 101, 88, 15, (UBYTE *)"Read", NULL, GD_ReadEprom, PLACETEXT_IN, NULL, (APTR)ReadEpromClicked,
  188.     11, 128, 88, 15, (UBYTE *)"Empty ?", NULL, GD_BlankTest, PLACETEXT_IN, NULL, (APTR)BlankTestClicked,
  189.     11, 155, 88, 15, (UBYTE *)"Compare", NULL, GD_CompareEprom, PLACETEXT_IN, NULL, (APTR)CompareEpromClicked,
  190.     111, 101, 88, 71, (UBYTE *)"Program", NULL, GD_ProgramEprom, PLACETEXT_IN, NULL, (APTR)ProgramEpromClicked,
  191.     11, 37, 20, 14, NULL, NULL, GD_LoadFileReq, 0, NULL, (APTR)LoadFileReqClicked,
  192.     11, 57, 20, 14, NULL, NULL, GD_SaveFileReq, 0, NULL, (APTR)SaveFileReqClicked,
  193.     34, 37, 117, 12, NULL, NULL, GD_LoadFile, 0, NULL, (APTR)LoadFileClicked,
  194.     34, 57, 117, 12, NULL, NULL, GD_SaveFile, 0, NULL, (APTR)SaveFileClicked,
  195.     220, 20, 80, 12, (UBYTE *)"Buffer", NULL, GD_RamAddress, PLACETEXT_RIGHT, NULL, (APTR)RamAddressClicked,
  196.     220, 37, 80, 12, (UBYTE *)"Eprom", NULL, GD_EpromAddress, PLACETEXT_RIGHT, NULL, (APTR)EpromAddressClicked,
  197.     220, 55, 80, 12, (UBYTE *)"Length", NULL, GD_Length, PLACETEXT_RIGHT, NULL, (APTR)LengthClicked,
  198.     220, 85, 46, 12, (UBYTE *)"RAM Value", NULL, GD_RamVal, PLACETEXT_RIGHT, NULL, (APTR)RamValClicked,
  199.     220, 144, 132, 11, (UBYTE *)"Options", NULL, GD_DoOptions, PLACETEXT_IN, NULL, (APTR)DoOptionsClicked,
  200.     153, 37, 49, 11, (UBYTE *)"LOAD", NULL, GD_LoadBt, PLACETEXT_IN, NULL, (APTR)LoadBtClicked,
  201.     153, 57, 49, 11, (UBYTE *)"SAVE", NULL, GD_SaveBt, PLACETEXT_IN, NULL, (APTR)SaveBtClicked,
  202.     220, 160, 132, 11, (UBYTE *)"Adjust Hardware", NULL, GD_TestHardware, PLACETEXT_IN, NULL, (APTR)TestHardwareClicked
  203. };
  204.  
  205. struct NewGadget OptionsNGad[] = {
  206.     35, 18, 144, 12, (UBYTE *)"Numrical Base", NULL, GD_NumericalBase, PLACETEXT_ABOVE, NULL, (APTR)NumericalBaseClicked,
  207.     23, 41, 26, 11, (UBYTE *)"Buffer fragmented", NULL, GD_SetBufferFrag, PLACETEXT_RIGHT, NULL, (APTR)SetBufferFragClicked,
  208.     23, 55, 26, 11, (UBYTE *)"Clear Buffer (0xFF)", NULL, GD_SetClearBuffer, PLACETEXT_RIGHT, NULL, (APTR)SetClearBufferClicked,
  209.     24, 75, 26, 11, (UBYTE *)"Info Requester", NULL, GD_SetInfoReq, PLACETEXT_RIGHT, NULL, (APTR)SetInfoReqClicked,
  210.     7, 160, 56, 12, (UBYTE *)"Ok", NULL, GD_OptionsOk, PLACETEXT_IN, NULL, (APTR)OptionsOkClicked,
  211.     83, 160, 56, 12, (UBYTE *)"Save", NULL, GD_SavePrefs, PLACETEXT_IN, NULL, (APTR)SavePrefsClicked,
  212.     160, 160, 56, 11, (UBYTE *)"Cancel", NULL, GD_OptionsCancel, PLACETEXT_IN, NULL, (APTR)OptionsCancelClicked,
  213.     24, 111, 26, 11, (UBYTE *)"EProm default size", NULL, GD_setepsize, PLACETEXT_RIGHT, NULL, (APTR)setepsizeClicked,
  214.     24, 89, 26, 11, (UBYTE *)"Counting", NULL, GD_count, PLACETEXT_RIGHT, NULL, (APTR)countClicked,
  215.     23, 133, 28, 13, (UBYTE *)"CIA Delay", NULL, GD_CIADelay, PLACETEXT_RIGHT, NULL, (APTR)CIADelayClicked
  216. };
  217.  
  218. struct NewGadget BusyNGad[] = {
  219.     43, 30, 81, 12, (UBYTE *)"Abort", NULL, GD_abort, PLACETEXT_IN, NULL, (APTR)abortClicked
  220. };
  221.  
  222. struct NewGadget TestNGad[] = {
  223.     41, 51, 26, 11, (UBYTE *)"Eprom removed", NULL, GD_NoEprom, PLACETEXT_RIGHT, NULL, (APTR)NoEpromClicked,
  224.     96, 69, 92, 11, (UBYTE *)"Vpp", NULL, GD_SetVpp, PLACETEXT_LEFT, NULL, (APTR)SetVppClicked,
  225.     79, 9, 108, 11, (UBYTE *)"Address", NULL, GD_T_CyAddress, PLACETEXT_LEFT, NULL, (APTR)T_CyAddressClicked,
  226.     79, 24, 108, 11, (UBYTE *)"Data", NULL, GD_T_CyData, PLACETEXT_LEFT, NULL, (APTR)T_CyDataClicked
  227. };
  228.  
  229. ULONG EprommerGTags[] = {
  230.     (GTCY_Labels), (ULONG)&DataFormat0Labels[ 0 ], (TAG_DONE),
  231.     (GTMX_Labels), (ULONG)&ProgAlgo0Labels[ 0 ], (GTMX_Spacing), 2, (TAG_DONE),
  232.     (GTMX_Labels), (ULONG)&EpromType0Labels[ 0 ], (TAG_DONE),
  233.     (TAG_DONE),
  234.     (TAG_DONE),
  235.     (TAG_DONE),
  236.     (TAG_DONE),
  237.     (TAG_DONE),
  238.     (TAG_DONE),
  239.     (TAG_DONE),
  240.     (TAG_DONE),
  241.     (GTST_MaxChars), 256, (TAG_DONE),
  242.     (GTST_MaxChars), 256, (TAG_DONE),
  243.     (GTST_String), (ULONG)"0", (GTST_MaxChars), 7, (TAG_DONE),
  244.     (GTST_String), (ULONG)"0", (GTST_MaxChars), 7, (TAG_DONE),
  245.     (GTST_String), (ULONG)"0", (GTST_MaxChars), 7, (TAG_DONE),
  246.     (GTST_String), (ULONG)"0", (GTST_MaxChars), 5, (TAG_DONE),
  247.     (TAG_DONE),
  248.     (TAG_DONE),
  249.     (TAG_DONE),
  250.     (TAG_DONE)
  251. };
  252.  
  253. ULONG OptionsGTags[] = {
  254.     (GTCY_Labels), (ULONG)&NumericalBase1Labels[ 0 ], (TAG_DONE),
  255.     (TAG_DONE),
  256.     (TAG_DONE),
  257.     (TAG_DONE),
  258.     (TAG_DONE),
  259.     (TAG_DONE),
  260.     (TAG_DONE),
  261.     (TAG_DONE),
  262.     (TAG_DONE),
  263.     (GTIN_Number), 0, (GTIN_MaxChars), 1, (TAG_DONE)
  264. };
  265.  
  266. ULONG BusyGTags[] = {
  267.     (TAG_DONE)
  268. };
  269.  
  270. ULONG TestGTags[] = {
  271.     (TAG_DONE),
  272.     (GTCY_Labels), (ULONG)&SetVpp3Labels[ 0 ], (GA_Disabled), TRUE, (TAG_DONE),
  273.     (GTCY_Labels), (ULONG)&T_CyAddress3Labels[ 0 ], (TAG_DONE),
  274.     (GTCY_Labels), (ULONG)&T_CyData3Labels[ 0 ], (TAG_DONE)
  275. };
  276.  
  277. static UWORD ComputeX( UWORD value )
  278. {
  279.     return(( UWORD )((( FontX * value ) + 4 ) / 8 ));
  280. }
  281.  
  282. static UWORD ComputeY( UWORD value )
  283. {
  284.     return(( UWORD )((( FontY * value ) + 4 ) / 8 ));
  285. }
  286.  
  287. static void ComputeFont( UWORD width, UWORD height )
  288. {
  289.     Font = &Attr;
  290.     Font->ta_Name = (STRPTR)Scr->RastPort.Font->tf_Message.mn_Node.ln_Name;
  291.     Font->ta_YSize = FontY = Scr->RastPort.Font->tf_YSize;
  292.     FontX = Scr->RastPort.Font->tf_XSize;
  293.  
  294.     OffX = Scr->WBorLeft;
  295.     OffY = Scr->RastPort.TxHeight + Scr->WBorTop + 1;
  296.  
  297.     if ( width && height ) {
  298.         if (( ComputeX( width ) + OffX + Scr->WBorRight ) > Scr->Width )
  299.             goto UseTopaz;
  300.         if (( ComputeY( height ) + OffY + Scr->WBorBottom ) > Scr->Height )
  301.             goto UseTopaz;
  302.     }
  303.     return;
  304.  
  305. UseTopaz:
  306.     Font->ta_Name = (STRPTR)"topaz.font";
  307.     FontX = FontY = Font->ta_YSize = 8;
  308. }
  309.  
  310. int SetupScreen( void )
  311. {
  312.     if ( ! ( Scr = LockPubScreen( PubScreenName )))
  313.         return( 1L );
  314.  
  315.     ComputeFont( 0, 0 );
  316.  
  317.     if ( ! ( VisualInfo = GetVisualInfo( Scr, TAG_DONE )))
  318.         return( 2L );
  319.  
  320.     if ( ! ( getClass = initGet()))
  321.         return( 3L );
  322.  
  323.     if ( ! ( getImage = NewObject( getClass, NULL, GT_VisualInfo, VisualInfo, TAG_DONE )))
  324.         return( 4L );
  325.  
  326.     return( 0L );
  327. }
  328.  
  329. void CloseDownScreen( void )
  330. {
  331.     if ( getImage   ) {
  332.         DisposeObject( getImage );
  333.         getImage = NULL;
  334.     }
  335.  
  336.     if ( getClass   ) {
  337.         FreeClass( getClass );
  338.         getClass = NULL;
  339.     }
  340.  
  341.     if ( VisualInfo ) {
  342.         FreeVisualInfo( VisualInfo );
  343.         VisualInfo = NULL;
  344.     }
  345.  
  346.     if ( Scr        ) {
  347.         UnlockPubScreen( NULL, Scr );
  348.         Scr = NULL;
  349.     }
  350. }
  351.  
  352. void EprommerRender( void )
  353. {
  354.     struct IntuiText    it;
  355.     UWORD            cnt;
  356.  
  357.     ComputeFont( EprommerWidth, EprommerHeight );
  358.  
  359.     DrawBevelBox( EprommerWnd->RPort, OffX + ComputeX( 212 ),
  360.                     OffY + ComputeY( 137 ),
  361.                     ComputeX( 149 ),
  362.                     ComputeY( 41 ),
  363.                     GT_VisualInfo, VisualInfo, TAG_DONE );
  364.     DrawBevelBox( EprommerWnd->RPort, OffX + ComputeX( 212 ),
  365.                     OffY + ComputeY( 81 ),
  366.                     ComputeX( 149 ),
  367.                     ComputeY( 53 ),
  368.                     GT_VisualInfo, VisualInfo, TAG_DONE );
  369.     DrawBevelBox( EprommerWnd->RPort, OffX + ComputeX( 212 ),
  370.                     OffY + ComputeY( 5 ),
  371.                     ComputeX( 149 ),
  372.                     ComputeY( 73 ),
  373.                     GT_VisualInfo, VisualInfo, TAG_DONE );
  374.     DrawBevelBox( EprommerWnd->RPort, OffX + ComputeX( 4 ),
  375.                     OffY + ComputeY( 5 ),
  376.                     ComputeX( 205 ),
  377.                     ComputeY( 73 ),
  378.                     GT_VisualInfo, VisualInfo, TAG_DONE );
  379.     DrawBevelBox( EprommerWnd->RPort, OffX + ComputeX( 4 ),
  380.                     OffY + ComputeY( 81 ),
  381.                     ComputeX( 205 ),
  382.                     ComputeY( 97 ),
  383.                     GT_VisualInfo, VisualInfo, TAG_DONE );
  384.     DrawBevelBox( EprommerWnd->RPort, OffX + ComputeX( 364 ),
  385.                     OffY + ComputeY( 5 ),
  386.                     ComputeX( 121 ),
  387.                     ComputeY( 173 ),
  388.                     GT_VisualInfo, VisualInfo, TAG_DONE );
  389.  
  390.     for ( cnt = 0; cnt < Eprommer_TNUM; cnt++ ) {
  391.         CopyMem(( char * )&EprommerIText[ cnt ], ( char * )&it, (long)sizeof( struct IntuiText ));
  392.         it.ITextFont = Font;
  393.         it.LeftEdge  = OffX + ComputeX( it.LeftEdge ) - ( IntuiTextLength( &it ) >> 1 );
  394.         it.TopEdge   = OffY + ComputeY( it.TopEdge ) - ( Font->ta_YSize >> 1 );
  395.         PrintIText( EprommerWnd->RPort, &it, 0, 0 );
  396.     }
  397. }
  398.  
  399. int HandleEprommerIDCMP( void )
  400. {
  401.     struct IntuiMessage    *m;
  402.     int            (*func)();
  403.     BOOL            running = TRUE;
  404.  
  405.     while( m = GT_GetIMsg( EprommerWnd->UserPort )) {
  406.  
  407.         CopyMem(( char * )m, ( char * )&EprommerMsg, (long)sizeof( struct IntuiMessage ));
  408.  
  409.         GT_ReplyIMsg( m );
  410.  
  411.         switch ( EprommerMsg.Class ) {
  412.  
  413.             case    IDCMP_REFRESHWINDOW:
  414.                 GT_BeginRefresh( EprommerWnd );
  415.                 EprommerRender();
  416.                 GT_EndRefresh( EprommerWnd, TRUE );
  417.                 break;
  418.  
  419.             case    IDCMP_CLOSEWINDOW:
  420.                 running = EprommerCloseWindow();
  421.                 break;
  422.  
  423.             case    IDCMP_RAWKEY:
  424.                 running = EprommerRawKey();
  425.                 break;
  426.  
  427.             case    IDCMP_GADGETUP:
  428.             case    IDCMP_GADGETDOWN:
  429.                 func = ( void * )(( struct Gadget * )EprommerMsg.IAddress )->UserData;
  430.                 running = func();
  431.                 break;
  432.         }
  433.     }
  434.     return( running );
  435. }
  436.  
  437. int OpenEprommerWindow( void )
  438. {
  439.     struct NewGadget    ng;
  440.     struct Gadget    *g;
  441.     UWORD        lc, tc;
  442.     UWORD        wleft = EprommerLeft, wtop = EprommerTop, ww, wh;
  443.  
  444.     ComputeFont( EprommerWidth, EprommerHeight );
  445.  
  446.     ww = ComputeX( EprommerWidth );
  447.     wh = ComputeY( EprommerHeight );
  448.  
  449.     if (( wleft + ww + OffX + Scr->WBorRight ) > Scr->Width ) wleft = Scr->Width - ww;
  450.     if (( wtop + wh + OffY + Scr->WBorBottom ) > Scr->Height ) wtop = Scr->Height - wh;
  451.  
  452.     if ( ! ( g = CreateContext( &EprommerGList )))
  453.         return( 1L );
  454.  
  455.     for( lc = 0, tc = 0; lc < Eprommer_CNT; lc++ ) {
  456.  
  457.         CopyMem((char * )&EprommerNGad[ lc ], (char * )&ng, (long)sizeof( struct NewGadget ));
  458.  
  459.         ng.ng_VisualInfo = VisualInfo;
  460.         ng.ng_TextAttr   = Font;
  461.         ng.ng_LeftEdge   = OffX + ComputeX( ng.ng_LeftEdge );
  462.         ng.ng_TopEdge    = OffY + ComputeY( ng.ng_TopEdge );
  463.  
  464.         if ( EprommerGTypes[ lc ] != GENERIC_KIND ) {
  465.             ng.ng_Width      = ComputeX( ng.ng_Width );
  466.             ng.ng_Height     = ComputeY( ng.ng_Height);
  467.         }
  468.  
  469.         EprommerGadgets[ lc ] = g = CreateGadgetA((ULONG)EprommerGTypes[ lc ], g, &ng, ( struct TagItem * )&EprommerGTags[ tc ] );
  470.  
  471.         if ( EprommerGTypes[ lc ] == GENERIC_KIND ) {
  472.             g->Flags             |= GFLG_GADGIMAGE | GFLG_GADGHIMAGE;
  473.             g->Activation        |= GACT_RELVERIFY;
  474.             g->GadgetRender       = (APTR)getImage;
  475.             g->SelectRender       = (APTR)getImage;
  476.         }
  477.  
  478.         while( EprommerGTags[ tc ] ) tc += 2;
  479.         tc++;
  480.  
  481.         if ( NOT g )
  482.             return( 2L );
  483.     }
  484.  
  485.     if ( ! ( EprommerWnd = OpenWindowTags( NULL,
  486.                 WA_Left,    wleft,
  487.                 WA_Top,        wtop,
  488.                 WA_Width,    ww + OffX + Scr->WBorRight,
  489.                 WA_Height,    wh + OffY + Scr->WBorBottom,
  490.                 WA_IDCMP,    CYCLEIDCMP|MXIDCMP|BUTTONIDCMP|IDCMP_GADGETUP|STRINGIDCMP|IDCMP_CLOSEWINDOW|IDCMP_RAWKEY|IDCMP_REFRESHWINDOW,
  491.                 WA_Flags,    WFLG_SIZEGADGET|WFLG_DRAGBAR|WFLG_DEPTHGADGET|WFLG_CLOSEGADGET|WFLG_SMART_REFRESH|WFLG_SIMPLE_REFRESH,
  492.                 WA_Gadgets,    EprommerGList,
  493.                 WA_Title,    EprommerWdt,
  494.                 WA_PubScreen,    Scr,
  495.                 WA_MinWidth,    67,
  496.                 WA_MinHeight,    21,
  497.                 WA_MaxWidth,    640,
  498.                 WA_MaxHeight,    400,
  499.                 WA_AutoAdjust,    TRUE,
  500.                 WA_PubScreenFallBack,    TRUE,
  501.                 TAG_DONE )))
  502.     return( 4L );
  503.  
  504.     GT_RefreshWindow( EprommerWnd, NULL );
  505.  
  506.     EprommerRender();
  507.  
  508.     return( 0L );
  509. }
  510.  
  511. void CloseEprommerWindow( void )
  512. {
  513.     if ( EprommerWnd        ) {
  514.         CloseWindow( EprommerWnd );
  515.         EprommerWnd = NULL;
  516.     }
  517.  
  518.     if ( EprommerGList      ) {
  519.         FreeGadgets( EprommerGList );
  520.         EprommerGList = NULL;
  521.     }
  522. }
  523.  
  524. void OptionsRender( void )
  525. {
  526.     ComputeFont( OptionsWidth, OptionsHeight );
  527.  
  528.     DrawBevelBox( OptionsWnd->RPort, OffX + ComputeX( 6 ),
  529.                     OffY + ComputeY( 130 ),
  530.                     ComputeX( 211 ),
  531.                     ComputeY( 19 ),
  532.                     GT_VisualInfo, VisualInfo, TAG_DONE );
  533.     DrawBevelBox( OptionsWnd->RPort, OffX + ComputeX( 6 ),
  534.                     OffY + ComputeY( 107 ),
  535.                     ComputeX( 211 ),
  536.                     ComputeY( 19 ),
  537.                     GT_VisualInfo, VisualInfo, TAG_DONE );
  538.     DrawBevelBox( OptionsWnd->RPort, OffX + ComputeX( 6 ),
  539.                     OffY + ComputeY( 4 ),
  540.                     ComputeX( 211 ),
  541.                     ComputeY( 31 ),
  542.                     GT_VisualInfo, VisualInfo, TAG_DONE );
  543.     DrawBevelBox( OptionsWnd->RPort, OffX + ComputeX( 6 ),
  544.                     OffY + ComputeY( 38 ),
  545.                     ComputeX( 211 ),
  546.                     ComputeY( 31 ),
  547.                     GT_VisualInfo, VisualInfo, TAG_DONE );
  548.     DrawBevelBox( OptionsWnd->RPort, OffX + ComputeX( 6 ),
  549.                     OffY + ComputeY( 72 ),
  550.                     ComputeX( 211 ),
  551.                     ComputeY( 31 ),
  552.                     GT_VisualInfo, VisualInfo, TAG_DONE );
  553. }
  554.  
  555. int HandleOptionsIDCMP( void )
  556. {
  557.     struct IntuiMessage    *m;
  558.     int            (*func)();
  559.     BOOL            running = TRUE;
  560.  
  561.     while( m = GT_GetIMsg( OptionsWnd->UserPort )) {
  562.  
  563.         CopyMem(( char * )m, ( char * )&OptionsMsg, (long)sizeof( struct IntuiMessage ));
  564.  
  565.         GT_ReplyIMsg( m );
  566.  
  567.         switch ( OptionsMsg.Class ) {
  568.  
  569.             case    IDCMP_REFRESHWINDOW:
  570.                 GT_BeginRefresh( OptionsWnd );
  571.                 OptionsRender();
  572.                 GT_EndRefresh( OptionsWnd, TRUE );
  573.                 break;
  574.  
  575.             case    IDCMP_CLOSEWINDOW:
  576.                 running = OptionsCloseWindow();
  577.                 break;
  578.  
  579.             case    IDCMP_RAWKEY:
  580.                 running = OptionsRawKey();
  581.                 break;
  582.  
  583.             case    IDCMP_GADGETUP:
  584.                 func = ( void * )(( struct Gadget * )OptionsMsg.IAddress )->UserData;
  585.                 running = func();
  586.                 break;
  587.         }
  588.     }
  589.     return( running );
  590. }
  591.  
  592. int OpenOptionsWindow( void )
  593. {
  594.     struct NewGadget    ng;
  595.     struct Gadget    *g;
  596.     UWORD        lc, tc;
  597.     UWORD        wleft = OptionsLeft, wtop = OptionsTop, ww, wh;
  598.  
  599.     ComputeFont( OptionsWidth, OptionsHeight );
  600.  
  601.     ww = ComputeX( OptionsWidth );
  602.     wh = ComputeY( OptionsHeight );
  603.  
  604.     if (( wleft + ww + OffX + Scr->WBorRight ) > Scr->Width ) wleft = Scr->Width - ww;
  605.     if (( wtop + wh + OffY + Scr->WBorBottom ) > Scr->Height ) wtop = Scr->Height - wh;
  606.  
  607.     if ( ! ( g = CreateContext( &OptionsGList )))
  608.         return( 1L );
  609.  
  610.     for( lc = 0, tc = 0; lc < Options_CNT; lc++ ) {
  611.  
  612.         CopyMem((char * )&OptionsNGad[ lc ], (char * )&ng, (long)sizeof( struct NewGadget ));
  613.  
  614.         ng.ng_VisualInfo = VisualInfo;
  615.         ng.ng_TextAttr   = Font;
  616.         ng.ng_LeftEdge   = OffX + ComputeX( ng.ng_LeftEdge );
  617.         ng.ng_TopEdge    = OffY + ComputeY( ng.ng_TopEdge );
  618.         ng.ng_Width      = ComputeX( ng.ng_Width );
  619.         ng.ng_Height     = ComputeY( ng.ng_Height);
  620.  
  621.         OptionsGadgets[ lc ] = g = CreateGadgetA((ULONG)OptionsGTypes[ lc ], g, &ng, ( struct TagItem * )&OptionsGTags[ tc ] );
  622.  
  623.         while( OptionsGTags[ tc ] ) tc += 2;
  624.         tc++;
  625.  
  626.         if ( NOT g )
  627.             return( 2L );
  628.     }
  629.  
  630.     if ( ! ( OptionsWnd = OpenWindowTags( NULL,
  631.                 WA_Left,    wleft,
  632.                 WA_Top,        wtop,
  633.                 WA_Width,    ww + OffX + Scr->WBorRight,
  634.                 WA_Height,    wh + OffY + Scr->WBorBottom,
  635.                 WA_IDCMP,    CYCLEIDCMP|CHECKBOXIDCMP|BUTTONIDCMP|INTEGERIDCMP|IDCMP_CLOSEWINDOW|IDCMP_RAWKEY|IDCMP_REFRESHWINDOW,
  636.                 WA_Flags,    WFLG_DRAGBAR|WFLG_DEPTHGADGET|WFLG_CLOSEGADGET|WFLG_SMART_REFRESH|WFLG_SIMPLE_REFRESH|WFLG_ACTIVATE,
  637.                 WA_Gadgets,    OptionsGList,
  638.                 WA_Title,    OptionsWdt,
  639.                 WA_ScreenTitle,    "Options",
  640.                 WA_PubScreen,    Scr,
  641.                 TAG_DONE )))
  642.     return( 4L );
  643.  
  644.     GT_RefreshWindow( OptionsWnd, NULL );
  645.  
  646.     OptionsRender();
  647.  
  648.     return( 0L );
  649. }
  650.  
  651. void CloseOptionsWindow( void )
  652. {
  653.     if ( OptionsWnd        ) {
  654.         CloseWindow( OptionsWnd );
  655.         OptionsWnd = NULL;
  656.     }
  657.  
  658.     if ( OptionsGList      ) {
  659.         FreeGadgets( OptionsGList );
  660.         OptionsGList = NULL;
  661.     }
  662. }
  663.  
  664. void BusyRender( void )
  665. {
  666.     struct IntuiText    it;
  667.     UWORD            cnt;
  668.  
  669.     ComputeFont( BusyWidth, BusyHeight );
  670.  
  671.     DrawBevelBox( BusyWnd->RPort, OffX + ComputeX( 6 ),
  672.                     OffY + ComputeY( 4 ),
  673.                     ComputeX( 167 ),
  674.                     ComputeY( 22 ),
  675.                     GT_VisualInfo, VisualInfo, TAG_DONE );
  676.  
  677.     for ( cnt = 0; cnt < Busy_TNUM; cnt++ ) {
  678.         CopyMem(( char * )&BusyIText[ cnt ], ( char * )&it, (long)sizeof( struct IntuiText ));
  679.         it.ITextFont = Font;
  680.         it.LeftEdge  = OffX + ComputeX( it.LeftEdge ) - ( IntuiTextLength( &it ) >> 1 );
  681.         it.TopEdge   = OffY + ComputeY( it.TopEdge ) - ( Font->ta_YSize >> 1 );
  682.         PrintIText( BusyWnd->RPort, &it, 0, 0 );
  683.     }
  684. }
  685.  
  686. int HandleBusyIDCMP( void )
  687. {
  688.     struct IntuiMessage    *m;
  689.     int            (*func)();
  690.     BOOL            running = TRUE;
  691.  
  692.     while( m = GT_GetIMsg( BusyWnd->UserPort )) {
  693.  
  694.         CopyMem(( char * )m, ( char * )&BusyMsg, (long)sizeof( struct IntuiMessage ));
  695.  
  696.         GT_ReplyIMsg( m );
  697.  
  698.         switch ( BusyMsg.Class ) {
  699.  
  700.             case    IDCMP_REFRESHWINDOW:
  701.                 GT_BeginRefresh( BusyWnd );
  702.                 BusyRender();
  703.                 GT_EndRefresh( BusyWnd, TRUE );
  704.                 break;
  705.  
  706.             case    IDCMP_RAWKEY:
  707.                 running = BusyRawKey();
  708.                 break;
  709.  
  710.             case    IDCMP_GADGETUP:
  711.                 func = ( void * )(( struct Gadget * )BusyMsg.IAddress )->UserData;
  712.                 running = func();
  713.                 break;
  714.         }
  715.     }
  716.     return( running );
  717. }
  718.  
  719. int OpenBusyWindow( void )
  720. {
  721.     struct NewGadget    ng;
  722.     struct Gadget    *g;
  723.     UWORD        lc, tc;
  724.     UWORD        wleft = BusyLeft, wtop = BusyTop, ww, wh;
  725.  
  726.     ComputeFont( BusyWidth, BusyHeight );
  727.  
  728.     ww = ComputeX( BusyWidth );
  729.     wh = ComputeY( BusyHeight );
  730.  
  731.     if (( wleft + ww + OffX + Scr->WBorRight ) > Scr->Width ) wleft = Scr->Width - ww;
  732.     if (( wtop + wh + OffY + Scr->WBorBottom ) > Scr->Height ) wtop = Scr->Height - wh;
  733.  
  734.     if ( ! ( g = CreateContext( &BusyGList )))
  735.         return( 1L );
  736.  
  737.     for( lc = 0, tc = 0; lc < Busy_CNT; lc++ ) {
  738.  
  739.         CopyMem((char * )&BusyNGad[ lc ], (char * )&ng, (long)sizeof( struct NewGadget ));
  740.  
  741.         ng.ng_VisualInfo = VisualInfo;
  742.         ng.ng_TextAttr   = Font;
  743.         ng.ng_LeftEdge   = OffX + ComputeX( ng.ng_LeftEdge );
  744.         ng.ng_TopEdge    = OffY + ComputeY( ng.ng_TopEdge );
  745.         ng.ng_Width      = ComputeX( ng.ng_Width );
  746.         ng.ng_Height     = ComputeY( ng.ng_Height);
  747.  
  748.         BusyGadgets[ lc ] = g = CreateGadgetA((ULONG)BusyGTypes[ lc ], g, &ng, ( struct TagItem * )&BusyGTags[ tc ] );
  749.  
  750.         while( BusyGTags[ tc ] ) tc += 2;
  751.         tc++;
  752.  
  753.         if ( NOT g )
  754.             return( 2L );
  755.     }
  756.  
  757.     if ( ! ( BusyWnd = OpenWindowTags( NULL,
  758.                 WA_Left,    wleft,
  759.                 WA_Top,        wtop,
  760.                 WA_Width,    ww + OffX + Scr->WBorRight,
  761.                 WA_Height,    wh + OffY + Scr->WBorBottom,
  762.                 WA_IDCMP,    BUTTONIDCMP|IDCMP_RAWKEY|IDCMP_REFRESHWINDOW,
  763.                 WA_Flags,    WFLG_DRAGBAR|WFLG_DEPTHGADGET|WFLG_SMART_REFRESH|WFLG_ACTIVATE,
  764.                 WA_Gadgets,    BusyGList,
  765.                 WA_Title,    BusyWdt,
  766.                 WA_PubScreen,    Scr,
  767.                 TAG_DONE )))
  768.     return( 4L );
  769.  
  770.     GT_RefreshWindow( BusyWnd, NULL );
  771.  
  772.     BusyRender();
  773.  
  774.     return( 0L );
  775. }
  776.  
  777. void CloseBusyWindow( void )
  778. {
  779.     if ( BusyWnd        ) {
  780.         CloseWindow( BusyWnd );
  781.         BusyWnd = NULL;
  782.     }
  783.  
  784.     if ( BusyGList      ) {
  785.         FreeGadgets( BusyGList );
  786.         BusyGList = NULL;
  787.     }
  788. }
  789.  
  790. void TestRender( void )
  791. {
  792.     ComputeFont( TestWidth, TestHeight );
  793.  
  794.     DrawBevelBox( TestWnd->RPort, OffX + ComputeX( 4 ),
  795.                     OffY + ComputeY( 4 ),
  796.                     ComputeX( 197 ),
  797.                     ComputeY( 37 ),
  798.                     GT_VisualInfo, VisualInfo, TAG_DONE );
  799.     DrawBevelBox( TestWnd->RPort, OffX + ComputeX( 4 ),
  800.                     OffY + ComputeY( 45 ),
  801.                     ComputeX( 197 ),
  802.                     ComputeY( 45 ),
  803.                     GT_VisualInfo, VisualInfo, TAG_DONE );
  804. }
  805.  
  806. int HandleTestIDCMP( void )
  807. {
  808.     struct IntuiMessage    *m;
  809.     int            (*func)();
  810.     BOOL            running = TRUE;
  811.  
  812.     while( m = GT_GetIMsg( TestWnd->UserPort )) {
  813.  
  814.         CopyMem(( char * )m, ( char * )&TestMsg, (long)sizeof( struct IntuiMessage ));
  815.  
  816.         GT_ReplyIMsg( m );
  817.  
  818.         switch ( TestMsg.Class ) {
  819.  
  820.             case    IDCMP_REFRESHWINDOW:
  821.                 GT_BeginRefresh( TestWnd );
  822.                 TestRender();
  823.                 GT_EndRefresh( TestWnd, TRUE );
  824.                 break;
  825.  
  826.             case    IDCMP_CLOSEWINDOW:
  827.                 running = TestCloseWindow();
  828.                 break;
  829.  
  830.             case    IDCMP_RAWKEY:
  831.                 running = TestRawKey();
  832.                 break;
  833.  
  834.             case    IDCMP_GADGETUP:
  835.                 func = ( void * )(( struct Gadget * )TestMsg.IAddress )->UserData;
  836.                 running = func();
  837.                 break;
  838.         }
  839.     }
  840.     return( running );
  841. }
  842.  
  843. int OpenTestWindow( void )
  844. {
  845.     struct NewGadget    ng;
  846.     struct Gadget    *g;
  847.     UWORD        lc, tc;
  848.     UWORD        wleft = TestLeft, wtop = TestTop, ww, wh;
  849.  
  850.     ComputeFont( TestWidth, TestHeight );
  851.  
  852.     ww = ComputeX( TestWidth );
  853.     wh = ComputeY( TestHeight );
  854.  
  855.     if (( wleft + ww + OffX + Scr->WBorRight ) > Scr->Width ) wleft = Scr->Width - ww;
  856.     if (( wtop + wh + OffY + Scr->WBorBottom ) > Scr->Height ) wtop = Scr->Height - wh;
  857.  
  858.     if ( ! ( g = CreateContext( &TestGList )))
  859.         return( 1L );
  860.  
  861.     for( lc = 0, tc = 0; lc < Test_CNT; lc++ ) {
  862.  
  863.         CopyMem((char * )&TestNGad[ lc ], (char * )&ng, (long)sizeof( struct NewGadget ));
  864.  
  865.         ng.ng_VisualInfo = VisualInfo;
  866.         ng.ng_TextAttr   = Font;
  867.         ng.ng_LeftEdge   = OffX + ComputeX( ng.ng_LeftEdge );
  868.         ng.ng_TopEdge    = OffY + ComputeY( ng.ng_TopEdge );
  869.         ng.ng_Width      = ComputeX( ng.ng_Width );
  870.         ng.ng_Height     = ComputeY( ng.ng_Height);
  871.  
  872.         TestGadgets[ lc ] = g = CreateGadgetA((ULONG)TestGTypes[ lc ], g, &ng, ( struct TagItem * )&TestGTags[ tc ] );
  873.  
  874.         while( TestGTags[ tc ] ) tc += 2;
  875.         tc++;
  876.  
  877.         if ( NOT g )
  878.             return( 2L );
  879.     }
  880.  
  881.     if ( ! ( TestWnd = OpenWindowTags( NULL,
  882.                 WA_Left,    wleft,
  883.                 WA_Top,        wtop,
  884.                 WA_Width,    ww + OffX + Scr->WBorRight,
  885.                 WA_Height,    wh + OffY + Scr->WBorBottom,
  886.                 WA_IDCMP,    CHECKBOXIDCMP|CYCLEIDCMP|IDCMP_CLOSEWINDOW|IDCMP_RAWKEY|IDCMP_REFRESHWINDOW,
  887.                 WA_Flags,    WFLG_DRAGBAR|WFLG_DEPTHGADGET|WFLG_CLOSEGADGET|WFLG_SMART_REFRESH|WFLG_ACTIVATE,
  888.                 WA_Gadgets,    TestGList,
  889.                 WA_Title,    TestWdt,
  890.                 WA_PubScreen,    Scr,
  891.                 TAG_DONE )))
  892.     return( 4L );
  893.  
  894.     GT_RefreshWindow( TestWnd, NULL );
  895.  
  896.     TestRender();
  897.  
  898.     return( 0L );
  899. }
  900.  
  901. void CloseTestWindow( void )
  902. {
  903.     if ( TestWnd        ) {
  904.         CloseWindow( TestWnd );
  905.         TestWnd = NULL;
  906.     }
  907.  
  908.     if ( TestGList      ) {
  909.         FreeGadgets( TestGList );
  910.         TestGList = NULL;
  911.     }
  912. }
  913.  
  914.