home *** CD-ROM | disk | FTP | other *** search
/ Amiga Developer CD 2.1 / Amiga Developer CD v2.1.iso / NDK / NDK_3.1 / Examples1 / asl / asltester.c < prev    next >
Encoding:
C/C++ Source or Header  |  1999-10-27  |  46.1 KB  |  1,060 lines

  1. /*
  2. COPYRIGHT: Unless otherwise noted, all files are Copyright (c) 1992-1999
  3. Amiga, Inc.  All rights reserved.
  4.  
  5. DISCLAIMER: This software is provided "as is".  No representations or
  6. warranties are made with respect to the accuracy, reliability, performance,
  7. currentness, or operation of this software, and all use is at your own risk.
  8. Neither Amiga nor the authors assume any responsibility or liability
  9. whatsoever with respect to your use of this software.
  10. */
  11.  
  12.  
  13. /****************************************************************************/
  14.  
  15.  
  16. #include <exec/types.h>
  17. #include <exec/memory.h>
  18. #include <intuition/intuition.h>
  19. #include <intuition/gadgetclass.h>
  20. #include <graphics/displayinfo.h>
  21. #include <dos/dos.h>
  22. #include <dos/rdargs.h>
  23. #include <utility/hooks.h>
  24. #include <libraries/asl.h>
  25. #include <libraries/gadtools.h>
  26. #include <libraries/locale.h>
  27. #include <graphics/gfxmacros.h>
  28. #include <string.h>
  29. #include <stdio.h>
  30.  
  31. #include <clib/dos_protos.h>
  32. #include <clib/exec_protos.h>
  33. #include <clib/intuition_protos.h>
  34. #include <clib/asl_protos.h>
  35. #include <clib/alib_protos.h>
  36. #include <clib/gadtools_protos.h>
  37. #include <clib/graphics_protos.h>
  38. #include <clib/locale_protos.h>
  39.  
  40. #include <pragmas/dos_pragmas.h>
  41. #include <pragmas/exec_pragmas.h>
  42. #include <pragmas/intuition_pragmas.h>
  43. #include <pragmas/asl_pragmas.h>
  44. #include <pragmas/gadtools_pragmas.h>
  45. #include <pragmas/graphics_pragmas.h>
  46. #include <pragmas/locale_pragmas.h>
  47.  
  48. #include "asltester_rev.h"
  49. #include "edithook.h"
  50. #include "gadgets.h"
  51. #include "reqtest.h"
  52.  
  53.  
  54. /****************************************************************************/
  55.  
  56.  
  57. static struct TextAttr topazAttr =
  58. {
  59.     "topaz.font",
  60.      8,
  61.      FS_NORMAL,
  62.      FPF_ROMFONT
  63. };
  64.  
  65. static const struct NewGadget NG[]=
  66. {
  67.     {12,21,148,14,"Reference Object",  NULL,ID_REFOBJECT,  PLACETEXT_ABOVE,NULL,NULL},
  68.  
  69.     {12,45,148,14, "InitialLeftEdge",  NULL,ID_INITIALLEFTEDGE,PLACETEXT_RIGHT,NULL,NULL},
  70.     {12,61,148,14, "InitialTopEdge",   NULL,ID_INITIALTOPEDGE,PLACETEXT_RIGHT,NULL,NULL},
  71.     {12,77,148,14, "InitialWidth",     NULL,ID_INITIALWIDTH,PLACETEXT_RIGHT,NULL,NULL},
  72.     {12,93,148,14, "InitialHeight",    NULL,ID_INITIALHEIGHT,PLACETEXT_RIGHT,NULL,NULL},
  73.     {12,113,148,14,"TitleText",        NULL,ID_TITLETEXT,PLACETEXT_RIGHT,NULL,NULL},
  74.     {12,129,148,14,"PositiveText",     NULL,ID_POSITIVETEXT,PLACETEXT_RIGHT,NULL,NULL},
  75.     {12,145,148,14,"NegativeText",     NULL,ID_NEGATIVETEXT,PLACETEXT_RIGHT,NULL,NULL},
  76.     {12,165,148,14,"TextAttr.ta_Name", NULL,ID_FONTNAME,PLACETEXT_RIGHT,NULL,NULL},
  77.     {12,181,148,14,"TextAttr.ta_YSize",NULL,ID_FONTSIZE,PLACETEXT_RIGHT,NULL,NULL},
  78.     {12,201,148,14,"Locale",           NULL,ID_LOCALE,PLACETEXT_RIGHT,NULL,NULL},
  79.     {12,221,26,11, "PrivateIDCMP",     NULL,ID_PRIVATEIDCMP,PLACETEXT_RIGHT,NULL,NULL},
  80.     {12,233,26,11, "SleepWindow",      NULL,ID_SLEEPWINDOW,PLACETEXT_RIGHT,NULL,NULL},
  81.     {12,245,26,11, "IntuiMsgFunc",     NULL,ID_INTUIMSGFUNC,PLACETEXT_RIGHT,NULL,NULL},
  82.     {12,257,26,11, "FilterFunc",       NULL,ID_FILTERFUNC,PLACETEXT_RIGHT,NULL,NULL},
  83.     {408,21,148,14,"Requester Type",   NULL,ID_REQTYPE,PLACETEXT_ABOVE,NULL,NULL},
  84.     {111,341,87,20,"Test",             NULL,ID_TEST,0,NULL,NULL},
  85.  
  86.     {472,57,148,14, "InitialFile",     NULL,ID_INITIALFILE,0,NULL,NULL},
  87.     {472,73,148,14, "InitialDrawer",   NULL,ID_INITIALDRAWER,0,NULL,NULL},
  88.     {472,89,148,14, "InitialPattern",  NULL,ID_INITIALPATTERN,0,NULL,NULL},
  89.     {472,109,148,14,"AcceptPattern",   NULL,ID_ACCEPTPATTERN,0,NULL,NULL},
  90.     {472,125,148,14,"RejectPattern",   NULL,ID_REJECTPATTERN,0,NULL,NULL},
  91.     {594,145,26,11, "DoSaveMode",      NULL,ID_DOSAVEMODE,0,NULL,NULL},
  92.     {594,157,26,11, "DoMultiSelect",   NULL,ID_DOMULTISELECT,0,NULL,NULL},
  93.     {594,169,26,11, "DoPatterns",      NULL,ID_DOPATTERNS,0,NULL,NULL},
  94.     {594,181,26,11, "DrawersOnly",     NULL,ID_DRAWERSONLY,0,NULL,NULL},
  95.     {594,193,26,11, "RejectIcons",     NULL,ID_REJECTICONS,0,NULL,NULL},
  96.     {594,205,26,11, "FilterDrawers",   NULL,ID_FILTERDRAWERS,0,NULL,NULL},
  97.  
  98.     {504,57,116,14, "InitialName    ",     NULL,ID_INITIALNAME,0,NULL,NULL},
  99.     {504,73,116,11, "InitialSize    ",     NULL,ID_INITIALSIZE,0,NULL,NULL},
  100.     {504,86,116,11, "InitialFrontPen    ", NULL,ID_INITIALFRONTPEN,0,NULL,NULL},
  101.     {504,99,116,11, "InitialBackPen    ",  NULL,ID_INITIALBACKPEN,0,NULL,NULL},
  102.     {504,112,116,14,"InitialDrawMode    ", NULL,ID_INITIALDRAWMODE,0,NULL,NULL},
  103.     {472,148,116,11,"InitialStyle",        NULL,ID_INITIALSTYLE,0,NULL,NULL},
  104.     {594,131,26,11, "Plain",               NULL,ID_INITIALSTYLE_PLAIN,0,NULL,NULL},
  105.     {594,143,26,11, "Bold",                NULL,ID_INITIALSTYLE_BOLD,0,NULL,NULL},
  106.     {594,155,26,11, "Italic",              NULL,ID_INITIALSTYLE_ITALIC,0,NULL,NULL},
  107.     {594,167,26,11, "Underline",           NULL,ID_INITIALSTYLE_UNDERLINE,0,NULL,NULL},
  108.     {594,183,26,11, "DoFrontPen",          NULL,ID_DOFRONTPEN,0,NULL,NULL},
  109.     {594,195,26,11, "DoBackPen",           NULL,ID_DOBACKPEN,0,NULL,NULL},
  110.     {594,207,26,11, "DoStyle",             NULL,ID_DOSTYLE,0,NULL,NULL},
  111.     {594,219,26,11, "DoDrawMode",          NULL,ID_DODRAWMODE,0,NULL,NULL},
  112.     {594,231,26,11, "FixedWidthOnly",      NULL,ID_FIXEDWIDTHONLY,0,NULL,NULL},
  113.     {504,246,116,11,"MinHeight    ",       NULL,ID_MINHEIGHT,0,NULL,NULL},
  114.     {504,259,116,11,"MaxHeight    ",       NULL,ID_MAXHEIGHT,0,NULL,NULL},
  115.     {504,272,116,11,"MaxFrontPen    ",     NULL,ID_MAXFRONTPEN,0,NULL,NULL},
  116.     {504,285,116,11,"MaxBackPen    ",      NULL,ID_MAXBACKPEN,0,NULL,NULL},
  117.     {594,300,26,11, "FrontPens",           NULL,ID_FRONTPENS,0,NULL,NULL},
  118.     {594,312,26,11, "BackPens",            NULL,ID_BACKPENS,0,NULL,NULL},
  119.     {594,324,26,11, "ModeList",            NULL,ID_MODELIST,0,NULL,NULL},
  120.  
  121.     {504,57,116,14, "InitialDispID   ",       NULL,ID_INITIALDISPLAYID,0,NULL,NULL},
  122.     {504,72,116,14, "InitialDispWidth   ",    NULL,ID_INITIALDISPLAYWIDTH,0,NULL,NULL},
  123.     {504,87,116,14, "InitialDispHeight   ",   NULL,ID_INITIALDISPLAYHEIGHT,0,NULL,NULL},
  124.     {504,102,116,11,"InitialDispDepth   ",    NULL,ID_INITIALDISPLAYDEPTH,0,NULL,NULL},
  125.     {504,114,116,14,"InitialOScanType   ",    NULL,ID_INITIALOVERSCANTYPE,0,NULL,NULL},
  126.     {504,129,116,14,"InitialInfoLeftEdge   ", NULL,ID_INITIALINFOLEFTEDGE,0,NULL,NULL},
  127.     {504,144,116,14,"InitialInfoTopEdge   ",  NULL,ID_INITIALINFOTOPEDGE,0,NULL,NULL},
  128.     {594,159,26,11, "InitialInfoOpened",      NULL,ID_INITIALINFOOPENED,0,NULL,NULL},
  129.     {594,171,26,11, "InitialAutoScroll",      NULL,ID_INITIALAUTOSCROLL,0,NULL,NULL},
  130.     {594,183,26,11, "DoWidth",                NULL,ID_DOWIDTH,0,NULL,NULL},
  131.     {594,195,26,11, "DoHeight",               NULL,ID_DOHEIGHT,0,NULL,NULL},
  132.     {594,207,26,11, "DoDepth",                NULL,ID_DODEPTH,0,NULL,NULL},
  133.     {594,219,26,11, "DoOverscanType",         NULL,ID_DOOVERSCANTYPE,0,NULL,NULL},
  134.     {594,231,26,11, "DoAutoScroll",           NULL,ID_DOAUTOSCROLL,0,NULL,NULL},
  135.     {594,243,26,11, "CustomSMList",           NULL,ID_CUSTOMSMLIST,0,NULL,NULL},
  136.     {504,255,116,14,"PropertyFlags   ",       NULL,ID_PROPERTYFLAGS,0,NULL,NULL},
  137.     {504,270,116,14,"PropertyMask   ",        NULL,ID_PROPERTYMASK,0,NULL,NULL},
  138.     {504,285,116,14,"MinWidth   ",            NULL,ID_MINWIDTH_SM,0,NULL,NULL},
  139.     {504,300,116,14,"MaxWidth   ",            NULL,ID_MAXWIDTH_SM,0,NULL,NULL},
  140.     {504,315,116,14,"MinHeight   ",           NULL,ID_MINHEIGHT_SM,0,NULL,NULL},
  141.     {504,330,116,14,"MaxHeight   ",           NULL,ID_MAXHEIGHT_SM,0,NULL,NULL},
  142.     {504,345,116,11,"MinDepth   ",            NULL,ID_MINDEPTH,0,NULL,NULL},
  143.     {504,357,116,11,"MaxDepth   ",            NULL,ID_MAXDEPTH,0,NULL,NULL},
  144. };
  145.  
  146. static const STRPTR ReferenceLabels[] =
  147. {
  148.     "None",
  149.     "Window",
  150.     "Screen",
  151.     "PubScreenName",
  152.     NULL
  153. };
  154.  
  155. static const STRPTR ReqTypeLabels[] =
  156. {
  157.     "File",
  158.     "Font",
  159.     "ScreenMode",
  160.     NULL
  161. };
  162.  
  163. static const STRPTR DrawModeLabels[] =
  164. {
  165.     "Jam1",
  166.     "Jam2",
  167.     "Complement",
  168.     NULL
  169. };
  170.  
  171. static const STRPTR OverscanTypeLabels[] =
  172. {
  173.     "Text",
  174.     "Graphics",
  175.     "Extreme",
  176.     "Maximum",
  177.     NULL
  178. };
  179.  
  180. struct CommonData cd =
  181. {
  182.     0,     // RefObject
  183.     30,    // InitialLeftEdge
  184.     20,    // InitialTopEdge
  185.     320,   // InitialWidth
  186.     200,   // InitialHeight
  187.     "",    // TitleText
  188.     "",    // PositiveText
  189.     "",    // NegativeText
  190.     "",    // FontName
  191.     8,     // FontSize
  192.     "",    // Locale
  193.     TRUE,  // PrivateIDCMP
  194.     TRUE,  // SleepWindow
  195.     FALSE, // IntuiMsgFunc
  196.     FALSE  // FilterFunc
  197. };
  198.  
  199. struct FileReqData frd =
  200. {
  201.     "",    // InitialFile
  202.     "",    // InitialDrawer
  203.     "",    // InitialPattern
  204.     "",    // AcceptPattern
  205.     "",    // RejectPattern
  206.     FALSE, // DoSaveMode
  207.     FALSE, // DoMultiSelect
  208.     FALSE, // DoPatterns
  209.     FALSE, // DrawersOnly
  210.     TRUE,  // RejectIcons
  211.     FALSE  // FilterDrawers
  212. };
  213.  
  214. struct FontReqData fod =
  215. {
  216.     "",    // InitialName
  217.     8,     // InitialSize
  218.     1,     // InitialFrontPen
  219.     0,     // InitialBackPen
  220.     JAM1,  // InitialDrawMode
  221.     0,     // InitialStyle
  222.     TRUE,  // DoFrontPen
  223.     TRUE,  // DoBackPen
  224.     TRUE,  // DoDrawMode
  225.     TRUE,  // DoStyle
  226.     FALSE, // FixedWidthOnly
  227.     4,     // MinHeight
  228.     32,    // MaxHeight
  229.     255,   // MaxFrontPen
  230.     255,   // MaxBackPen
  231.     FALSE, // FrontPens
  232.     FALSE, // BackPens
  233.     FALSE  // ModeList
  234. };
  235.  
  236. struct ScreenModeReqData smrd =
  237. {
  238.     0,          // InitialDisplayID
  239.     640,        // InitialDisplayWidth
  240.     200,        // InitialDisplayHeight
  241.     2,          // InitialDisplayDepth
  242.     OSCAN_TEXT, // InitialOverscanType
  243.     30,         // InitialInfoLeftEdge
  244.     20,         // InitialInfoTopEdge
  245.     FALSE,      // InitialInfoOpened
  246.     TRUE,       // InitialAutoScroll
  247.     TRUE,       // DoWidth
  248.     TRUE,       // DoHeight
  249.     TRUE,       // DoDepth
  250.     TRUE,       // DoOverscanType
  251.     TRUE,       // DoAutoScroll
  252.     FALSE,      // CustomSMList
  253.     DIPF_IS_WB, // PropertyFlags
  254.     DIPF_IS_WB, // PropertyMask
  255.     320,        // MinWidth
  256.     10000,      // MaxWidth
  257.     200,        // MinHeight
  258.     10000,      // MaxHeight
  259.     1,          // MinDepth
  260.     8,          // MaxDepth
  261. };
  262.  
  263.  
  264. /*****************************************************************************/
  265.  
  266.  
  267. extern struct Library *SysBase;
  268. extern struct Library *DOSBase;
  269. struct Library        *GfxBase;
  270. struct Library        *IntuitionBase;
  271. struct Library        *GadToolsBase;
  272. struct Library        *UtilityBase;
  273. struct Library        *AslBase;
  274. struct Library        *LocaleBase;
  275.  
  276. struct Screen         *screen;
  277. struct Window         *window;
  278. struct DrawInfo       *drawInfo;
  279. APTR                   visualInfo;
  280. struct TextFont       *textFont;
  281. struct Gadget         *gadgetList;
  282. struct Gadget         *gadgets[ID_MAX];
  283. struct Gadget         *lastAdded;
  284. struct Hook            hexHook;
  285.  
  286. ULONG                  requesterType;
  287.  
  288.  
  289. /*****************************************************************************/
  290.  
  291.  
  292. /* This function render a few borders and lines within the main window.
  293.  * This gets called whenever the window is initially opened, and whenever
  294.  * there is damage.
  295.  */
  296. static VOID RenderWindow(VOID)
  297. {
  298. static UWORD pattern[] = {0xaaaa, 0x5555};
  299.  
  300.     SetAPen(window->RPort,drawInfo->dri_Pens[SHADOWPEN]);
  301.     RectFill(window->RPort,window->BorderLeft + 316,window->BorderTop,
  302.                            window->BorderLeft + 316,window->Height - window->BorderBottom - 1);
  303.  
  304.     RectFill(window->RPort,window->BorderLeft,window->BorderTop + 325,
  305.                            window->BorderLeft + 315,window->BorderTop + 325);
  306.  
  307.     SetAPen(window->RPort,drawInfo->dri_Pens[SHINEPEN]);
  308.     RectFill(window->RPort,window->BorderLeft + 317,window->BorderTop,
  309.                            window->BorderLeft + 317,window->Height - window->BorderBottom - 1);
  310.  
  311.     RectFill(window->RPort,window->BorderLeft,window->BorderTop + 326,
  312.                            window->BorderLeft + 315,window->BorderTop + 326);
  313.  
  314.     SetAPen(window->RPort,drawInfo->dri_Pens[TEXTPEN]);
  315.     SetAfPt(window->RPort,pattern,1);
  316.     RectFill(window->RPort,window->BorderLeft + 328,window->BorderTop + 47,
  317.                            window->Width - window->BorderRight - 11,window->BorderTop + 47);
  318.     SetAfPt(window->RPort,NULL,0);
  319.  
  320.     if (requesterType == REQ_FONT)
  321.     {
  322.         Move(window->RPort,window->BorderLeft + 504,window->BorderTop + 134);
  323.         Draw(window->RPort,window->BorderLeft + 498,window->BorderTop + 134);
  324.         Draw(window->RPort,window->BorderLeft + 468,window->BorderTop + 153);
  325.         Draw(window->RPort,window->BorderLeft + 498,window->BorderTop + 172);
  326.         Draw(window->RPort,window->BorderLeft + 504,window->BorderTop + 172);
  327.     }
  328. }
  329.  
  330.  
  331. /*****************************************************************************/
  332.  
  333.  
  334. /* Short stub to create a gadget. Copies one of the static definitions,
  335.  * sets its visual info, and text attr pointer, offsets its position by the
  336.  * window's left/top border, then creates the gadget. The resulting pointer
  337.  * is stashes in the gadget pointer array that's maintained
  338.  */
  339. static VOID CreateGad(ULONG kind, ULONG id, ULONG tag1, ...)
  340. {
  341. struct NewGadget ng;
  342.  
  343.     ng = NG[id];
  344.     ng.ng_TextAttr    = &topazAttr;
  345.     ng.ng_VisualInfo  = visualInfo;
  346.     ng.ng_LeftEdge   += window->BorderLeft;
  347.     ng.ng_TopEdge    += window->BorderTop;
  348.  
  349.     lastAdded = gadgets[id] = CreateGadgetA(kind,lastAdded,&ng,(struct TagItem *)&tag1);
  350. }
  351.  
  352.  
  353. /*****************************************************************************/
  354.  
  355.  
  356. /* Special version of CreateGad() that creates a hex-edit gadget, as
  357.  * used to enter a display mode id in the screen mode requester section
  358.  * of the program.
  359.  */
  360. static VOID CreateHexGad(ULONG id, ULONG value)
  361. {
  362. char buffer[12];
  363.  
  364.     sprintf(buffer,"0x%08lX",value);
  365.     CreateGad(STRING_KIND,id,GTST_MaxChars, 10,
  366.                              GTST_String,   buffer,
  367.                              GTST_EditHook, &hexHook,
  368.                              TAG_DONE);
  369.  
  370.     if (gadgets[id])
  371.         gadgets[id]->UserData = (APTR)value;
  372. }
  373.  
  374.  
  375. /*****************************************************************************/
  376.  
  377.  
  378. /* Get a single attribute from one of the gadgets in the gadget array */
  379. static ULONG GetGadAttr(ULONG id, ULONG tag)
  380. {
  381. ULONG result;
  382.  
  383.     GT_GetGadgetAttrs(gadgets[id],window,NULL,tag,&result,TAG_DONE);
  384.  
  385.     return(result);
  386. }
  387.  
  388.  
  389. /*****************************************************************************/
  390.  
  391.  
  392. /* set attributes of one of the gadgets in the gadget array */
  393. static VOID SetGadAttrs(ULONG id, ULONG tag1, ...)
  394. {
  395.     GT_SetGadgetAttrsA(gadgets[id],window,NULL,(struct TagItem *)&tag1);
  396. }
  397.  
  398.  
  399. /*****************************************************************************/
  400.  
  401.  
  402. /* Range check an integer gadget. If the value falls outside of its allowed
  403.  * range, fence it.
  404.  */
  405. static VOID RangeCheckGad(ULONG id, LONG min, LONG max)
  406. {
  407. LONG num;
  408.  
  409.     if (gadgets[id])
  410.     {
  411.         num = GetGadAttr(id,GTIN_Number);
  412.  
  413.         if (num < min)
  414.             SetGadAttrs(id,GTIN_Number,min,TAG_DONE);
  415.  
  416.         if (num > max)
  417.             SetGadAttrs(id,GTIN_Number,max,TAG_DONE);
  418.     }
  419. }
  420.  
  421.  
  422. /*****************************************************************************/
  423.  
  424.  
  425. /* Creates all the gadgets needed for the 3 possible displays presented
  426.  * by the program... The values to set the gadgets to are taken from the
  427.  * global requester data variables (cd, frd, fod, and smrd)
  428.  */
  429. static BOOL InstallGadgets(VOID)
  430. {
  431.     gadgetList = NULL;
  432.     lastAdded  = CreateContext(&gadgetList);
  433.     memset(gadgets,0,sizeof(gadgets));
  434.  
  435.     CreateGad(CYCLE_KIND,ID_REFOBJECT,GTCY_Labels, &ReferenceLabels,
  436.                                       GTCY_Active, cd.RefObject,
  437.                                       TAG_DONE);
  438.  
  439.     CreateGad(INTEGER_KIND,ID_INITIALLEFTEDGE,GTIN_MaxChars, 4,
  440.                                               GTIN_Number,   cd.InitialLeftEdge,
  441.                                               TAG_DONE);
  442.  
  443.     CreateGad(INTEGER_KIND,ID_INITIALTOPEDGE,GTIN_MaxChars, 4,
  444.                                              GTIN_Number,   cd.InitialTopEdge,
  445.                                              TAG_DONE);
  446.  
  447.     CreateGad(INTEGER_KIND,ID_INITIALWIDTH,GTIN_MaxChars, 4,
  448.                                            GTIN_Number,   cd.InitialWidth,
  449.                                            TAG_DONE);
  450.  
  451.     CreateGad(INTEGER_KIND,ID_INITIALHEIGHT,GTIN_MaxChars, 4,
  452.                                             GTIN_Number,   cd.InitialHeight,
  453.                                             TAG_DONE);
  454.  
  455.     CreateGad(STRING_KIND,ID_TITLETEXT,GTST_MaxChars, sizeof(cd.TitleText) - 1,
  456.                                        GTST_String,   cd.TitleText,
  457.                                        TAG_DONE);
  458.  
  459.     CreateGad(STRING_KIND,ID_POSITIVETEXT,GTST_MaxChars, sizeof(cd.PositiveText) - 1,
  460.                                           GTST_String,   cd.PositiveText,
  461.                                           TAG_DONE);
  462.  
  463.     CreateGad(STRING_KIND,ID_NEGATIVETEXT,GTST_MaxChars, sizeof(cd.NegativeText) - 1,
  464.                                           GTST_String,   cd.NegativeText,
  465.                                           TAG_DONE);
  466.  
  467.     CreateGad(STRING_KIND,ID_FONTNAME,GTST_MaxChars, sizeof(cd.FontName) - 1,
  468.                                       GTST_String,   cd.FontName,
  469.                                       TAG_DONE);
  470.  
  471.     CreateGad(‰INTEGER_KIND,ID_FONTSIZE,GTIN_MaxChars, 4,
  472.                                         GTIN_Number,   cd.FontSize,
  473.                                         TAG_DONE);
  474.  
  475.     CreateGad(STRING_KIND,ID_LOCALE,GTST_MaxChars, sizeof(cd.Locale) - 1,
  476.                                     GTST_String,   cd.Locale,
  477.                                     TAG_DONE);
  478.  
  479.     CreateGad(CHECKBOX_KIND,ID_PRIVATEIDCMP,GTCB_Checked, cd.PrivateIDCMP,
  480.                                             TAG_DONE);
  481.  
  482.     CreateGad(CHECKBOX_KIND,ID_SLEEPWINDOW,GTCB_Checked, cd.SleepWindow,
  483.                                            TAG_DONE);
  484.  
  485.     CreateGad(CHECKBOX_KIND,ID_INTUIMSGFUNC,GTCB_Checked, cd.IntuiMsgFunc,
  486.                                             TAG_DONE);
  487.  
  488.     CreateGad(CHECKBOX_KIND,ID_FILTERFUNC,GTCB_Checked, cd.FilterFunc,
  489.                                           TAG_DONE);
  490.  
  491.     CreateGad(CYCLE_KIND,ID_REQTYPE,GTCY_Labels, &ReqTypeLabels,
  492.                                     GTCY_Active, requesterType,
  493.                                     TAG_DONE);
  494.  
  495.     CreateGad(BUTTON_KIND,ID_TEST,TAG_DONE);
  496.  
  497.     if (requesterType == REQ_FILE)
  498.     {
  499.         CreateGad(STRING_KIND,ID_INITIALFILE,GTST_MaxChars, sizeof(frd.InitialFile) - 1,
  500.                                              GTST_String,   frd.InitialFile,
  501.                                              TAG_DONE);
  502.  
  503.         CreateGad(STRING_KIND,ID_INITIALDRAWER,GTST_MaxChars, sizeof(frd.InitialDrawer) - 1,
  504.                                                GTST_String,   frd.InitialDrawer,
  505.                                                TAG_DONE);
  506.  
  507.         CreateGad(STRING_KIND,ID_INITIALPATTERN,GTST_MaxChars, sizeof(frd.InitialPattern) - 1,
  508.                                                 GTST_String,   frd.InitialPattern,
  509.                                                 TAG_DONE);
  510.  
  511.         CreateGad(STRING_KIND,ID_ACCEPTPATTERN,GTST_MaxChars, sizeof(frd.AcceptPattern) - 1,
  512.                                                GTST_String,   frd.AcceptPattern,
  513.                                                TAG_DONE);
  514.  
  515.         CreateGad(STRING_KIND,ID_REJECTPATTERN,GTST_MaxChars, sizeof(frd.RejectPattern) - 1,
  516.                                                GTST_String,   frd.RejectPattern,
  517.                                                TAG_DONE);
  518.  
  519.         CreateGad(CHECKBOX_KIND,ID_DOSAVEMODE,GTCB_Checked, frd.DoSaveMode,
  520.                                               TAG_DONE);
  521.  
  522.         CreateGad(CHECKBOX_KIND,ID_DOMULTISELECT,GTCB_Checked, frd.DoMultiSelect,
  523.                                                  TAG_DONE);
  524.  
  525.         CreateGad(CHECKBOX_KIND,ID_DOPATTERNS,GTCB_Checked, frd.DoPatterns,
  526.                                               TAG_DONE);
  527.  
  528.         CreateGad(CHECKBOX_KIND,ID_DRAWERSONLY,GTCB_Checked, frd.DrawersOnly,
  529.                                                TAG_DONE);
  530.  
  531.         CreateGad(CHECKBOX_KIND,ID_REJECTICONS,GTCB_Checked, frd.RejectIcons,
  532.                                                TAG_DONE);
  533.  
  534.         CreateGad(CHECKBOX_KIND,ID_FILTERDRAWERS,GTCB_Checked, frd.FilterDrawers,
  535.                                                  TAG_DONE);
  536.     }
  537.     else if (requesterType == REQ_FONT)
  538.     {
  539.         CreateGad(STRING_KIND,ID_INITIALNAME,GTST_MaxChars, sizeof(fod.InitialName) - 1,
  540.                                              GTST_String,   fod.InitialName,
  541.                                              TAG_DONE);
  542.  
  543.         CreateGad(SLIDER_KIND,ID_INITIALSIZE,GTSL_MaxLevelLen, 3,
  544.                                              GTSL_LevelFormat, "%3ld",
  545.                                              GTSL_Level,       fod.InitialSize,
  546.                                              GTSL_Min,         4,
  547.                                              GTSL_Max,         127,
  548.                                              TAG_DONE);
  549.  
  550.         CreateGad(SLIDER_KIND,ID_INITIALFRONTPEN,GTSL_MaxLevelLen, 3,
  551.                                                  GTSL_LevelFormat, "%3ld",
  552.                                                  GTSL_Level,       fod.InitialFrontPen,
  553.                                                  GTSL_Min,         0,
  554.                                                  GTSL_Max,         255,
  555.                                                  TAG_DONE);
  556.  
  557.         CreateGad(SLIDER_KIND,ID_INITIALBACKPEN,GTSL_MaxLevelLen, 3,
  558.                                                 GTSL_LevelFormat, "%3ld",
  559.                                                 GTSL_Level,       fod.InitialBackPen,
  560.                                                 GTSL_Min,         0,
  561.                                                 GTSL_Max,         255,
  562.                                                 TAG_DONE);
  563.  
  564.         CreateGad(CYCLE_KIND,ID_INITIALDRAWMODE,GTCY_Labels, &DrawModeLabels,
  565.                                                 GTCY_Active, fod.InitialDrawMode,
  566.                                                 TAG_DONE);
  567.  
  568.         CreateGad(TEXT_KIND,ID_INITIALSTYLE,TAG_DONE);
  569.  
  570.         CreateGad(CHECKBOX_KIND,ID_INITIALSTYLE_PLAIN,GTCB_Checked, fod.InitialStyle == 0,
  571.                                                       TAG_DONE);
  572.  
  573.         CreateGad(CHECKBOX_KIND,ID_INITIALSTYLE_BOLD,GTCB_Checked, fod.InitialStyle & FSF_BOLD,
  574.                                                      TAG_DONE);
  575.  
  576.         CreateGad(CHECKBOX_KIND,ID_INITIALSTYLE_ITALIC,GTCB_Checked, fod.InitialStyle & FSF_ITALIC,
  577.                                                        TAG_DONE);
  578.  
  579.         CreateGad(CHECKBOX_KIND,ID_INITIALSTYLE_UNDERLINE,GTCB_Checked, fod.InitialStyle & FSF_UNDERLINED,
  580.                                                           TAG_DONE);
  581.  
  582.         CreateGad(CHECKBOX_KIND,ID_DOFRONTPEN,GTCB_Checked, fod.DoFrontPen,
  583.                                               TAG_DONE);
  584.  
  585.         CreateGad(CHECKBOX_KIND,ID_DOBACKPEN,GTCB_Checked, fod.DoBackPen,
  586.                                              TAG_DONE);
  587.  
  588.         CreateGad(CHECKBOX_KIND,ID_DOSTYLE,GTCB_Checked, fod.DoStyle,
  589.                                            TAG_DONE);
  590.  
  591.         CreateGad(CHECKBOX_KIND,ID_DODRAWMODE,GTCB_Checked, fod.DoDrawMode,
  592.                                               TAG_DONE);
  593.  
  594.         CreateGad(CHECKBOX_KIND,ID_FIXEDWIDTHONLY,GTCB_Checked, fod.FixedWidthOnly,
  595.                                                   TAG_DONE);
  596.  
  597.         CreateGad(SLIDER_KIND,ID_MINHEIGHT,GTSL_MaxLevelLen, 3,
  598.                                            GTSL_LevelFormat, "%3ld",
  599.                                            GTSL_Level,       fod.MinHeight,
  600.                                            GTSL_Min,         4,
  601.                                            GTSL_Max,         127,
  602.                                            TAG_DONE);
  603.  
  604.         CreateGad(SLIDER_KIND,ID_MAXHEIGHT,GTSL_MaxLevelLen, 3,
  605.                                            GTSL_LevelFormat, "%3ld",
  606.                                            GTSL_Level,       fod.MaxHeight,
  607.                                            GTSL_Min,         4,
  608.                                            GTSL_Max,         127,
  609.                                            TAG_DONE);
  610.  
  611.         CreateGad(SLIDER_KIND,ID_MAXFRONTPEN,GTSL_MaxLevelLen, 3,
  612.                                              GTSL_LevelFormat, "%3ld",
  613.                                              GTSL_Level,       fod.MaxFrontPen,
  614.                                              GTSL_Min,         1,
  615.                                              GTSL_Max,         255,
  616.                                              TAG_DONE);
  617.  
  618.         CreateGad(SLIDER_KIND,ID_MAXBACKPEN,GTSL_MaxLevelLen, 3,
  619.                                             GTSL_LevelFormat, "%3ld",
  620.                                             GTSL_Level,       fod.MaxBackPen,
  621.                                             GTSL_Min,         1,
  622.                                             GTSL_Max,         255,
  623.                                             TAG_DONE);
  624.  
  625.         CreateGad(CHECKBOX_KIND,ID_FRONTPENS,GTCB_Checked, fod.FrontPens,
  626.                                              GA_Disabled,  TRUE,  // Not implemented in demo
  627.                                              TAG_DONE);
  628.  
  629.         CreateGad(CHECKBOX_KIND,ID_BACKPENS,GTCB_Checked, fod.BackPens,
  630.                                             GA_Disabled,  TRUE,   // Not implemented in demo
  631.                                             TAG_DONE);
  632.  
  633.         CreateGad(CHECKBOX_KIND,ID_MODELIST,GTCB_Checked, fod.ModeList,
  634.                                             TAG_DONE);
  635.  
  636.         RenderWindow(); /* to get the little lines drawn */
  637.     }
  638.     else /* if (requesterType == REQ_SCREENMODE) */
  639.     {
  640.         CreateHexGad(ID_INITIALDISPLAYID,smrd.InitialDisplayID);
  641.  
  642.         CreateGad(INTEGER_KIND,ID_INITIALDISPLAYWIDTH,GTIN_MaxChars, 5,
  643.                                                       GTIN_Number,   smrd.InitialDisplayWidth,
  644.                                                       TAG_DONE);
  645.  
  646.         CreateGad(INTEGER_KIND,ID_INITIALDISPLAYHEIGHT,GTIN_MaxChars, 5,
  647.                                                        GTIN_Number,   smrd.InitialDisplayHeight,
  648.                                                        TAG_DONE);
  649.  
  650.         CreateGad(SLIDER_KIND,ID_INITIALDISPLAYDEPTH,GTSL_MaxLevelLen, 2,
  651.                                                      GTSL_LevelFormat, "%2ld",
  652.                                                      GTSL_Level,       smrd.InitialDisplayDepth,
  653.                                                      GTSL_Min,         1,
  654.                                                      GTSL_Max,         32,
  655.                                                      TAG_DONE);
  656.  
  657.         CreateGad(CYCLE_KIND,ID_INITIALOVERSCANTYPE,GTCY_Labels, &OverscanTypeLabels,
  658.                                                     GTCY_Active, smrd.InitialOverscanType - 1,
  659.                                                     TAG_DONE);
  660.  
  661.         CreateGad(INTEGER_KIND,ID_INITIALINFOLEFTEDGE,GTIN_MaxChars, 5,
  662.                                                       GTIN_Number,   smrd.InitialInfoLeftEdge,
  663.                                                       TAG_DONE);
  664.  
  665.         CreateGad(INTEGER_KIND,ID_INITIALINFOTOPEDGE,GTIN_MaxChars, 5,
  666.                                                      GTIN_Number,   smrd.InitialInfoTopEdge,
  667.                                                      TAG_DONE);
  668.  
  669.         CreateGad(CHECKBOX_KIND,ID_INITIALINFOOPENED,GTCB_Checked, smrd.InitialInfoOpened,
  670.                                                      TAG_DONE);
  671.  
  672.         CreateGad(CHECKBOX_KIND,ID_INITIALAUTOSCROLL,GTCB_Checked, smrd.InitialAutoScroll,
  673.                                                      TAG_DONE);
  674.  
  675.         CreateGad(CHECKBOX_KIND,ID_DOWIDTH,GTCB_Checked, smrd.DoWidth,
  676.                                            TAG_DONE);
  677.  
  678.         CreateGad(CHECKBOX_KIND,ID_DOHEIGHT,GTCB_Checked, smrd.DoHeight,
  679.                                             TAG_DONE);
  680.  
  681.         CreateGad(CHECKBOX_KIND,ID_DODEPTH,GTCB_Checked, smrd.DoDepth,
  682.                                            TAG_DONE);
  683.  
  684.         CreateGad(CHECKBOX_KIND,ID_DOOVERSCANTYPE,GTCB_Checked, smrd.DoOverscanType,
  685.                                                   TAG_DONE);
  686.  
  687.         CreateGad(CHECKBOX_KIND,ID_DOAUTOSCROLL,GTCB_Checked, smrd.DoAutoScroll,
  688.                                                 TAG_DONE);
  689.  
  690.         CreateGad(CHECKBOX_KIND,ID_CUSTOMSMLIST,GTCB_Checked, smrd.CustomSMList,
  691.                                                 TAG_DONE);
  692.  
  693.         CreateHexGad(ID_PROPERTYFLAGS,smrd.PropertyFlags);
  694.         CreateHexGad(ID_PROPERTYMASK,smrd.PropertyMask);
  695.  
  696.         CreateGad(INTEGER_KIND,ID_MINWIDTH_SM,GTIN_MaxChars, 5,
  697.                                               GTIN_Number,   smrd.MinWidth,
  698.                                               TAG_DONE);
  699.  
  700.         CreateGad(INTEGER_KIND,ID_MAXWIDTH_SM,GTIN_MaxChars, 5,
  701.                                               GTIN_Number,   smrd.MaxWidth,
  702.                                               TAG_DONE);
  703.  
  704.         CreateGad(INTEGER_KIND,ID_MINHEIGHT_SM,GTIN_MaxChars, 5,
  705.                                                GTIN_Number,   smrd.MinHeight,
  706.                                                TAG_DONE);
  707.  
  708.         CreateGad(INTEGER_KIND,ID_MAXHEIGHT_SM,GTIN_MaxChars, 5,
  709.                                                GTIN_Number,   smrd.MaxHeight,
  710.                                                TAG_DONE);
  711.  
  712.         CreateGad(SLIDER_KIND,ID_MINDEPTH,GTSL_MaxLevelLen, 2,
  713.                                           GTSL_LevelFormat, "%2ld",
  714.                                           GTSL_Level,       smrd.MinDepth,
  715.                                           GTSL_Min,         1,
  716.                                           GTSL_Max,         32,
  717.                                           TAG_DONE);
  718.  
  719.         CreateGad(SLIDER_KIND,ID_MAXDEPTH,GTSL_MaxLevelLen, 2,
  720.                                           GTSL_LevelFormat, "%2ld",
  721.                                           GTSL_Level,       smrd.MaxDepth,
  722.                                           GTSL_Min,         1,
  723.                                           GTSL_Max,         32,
  724.                                           TAG_DONE);
  725.  
  726.     }
  727.  
  728.     if (!lastAdded)
  729.     {
  730.         FreeGadgets(gadgetList);
  731.         return(FALSE);
  732.     }
  733.  
  734.     AddGList(window,gadgetList,-1,-1,NULL);
  735.     RefreshGList(gadgetList,window,NULL,-1);
  736.     GT_RefreshWindow(window,NULL);
  737.  
  738.     return(TRUE);
  739. }
  740.  
  741.  
  742. /*****************************************************************************/
  743.  
  744.  
  745. /* Standard range check of all gadgets that need it */
  746. static VOID RangeCheckGadgets(VOID)
  747. {
  748.     RangeCheckGad(ID_INITIALLEFTEDGE,0,10000);
  749.     RangeCheckGad(ID_INITIALTOPEDGE,0,10000);
  750.     RangeCheckGad(ID_INITIALWIDTH,10,10000);
  751.     RangeCheckGad(ID_INITIALHEIGHT,10,10000);
  752.     RangeCheckGad(ID_INITIALDISPLAYWIDTH,16,32000);
  753.     RangeCheckGad(ID_INITIALDISPLAYHEIGHT,16,32000);
  754.     RangeCheckGad(ID_FONTSIZE,4,127);
  755. }
  756.  
  757.  
  758. /*****************************************************************************/
  759.  
  760.  
  761. /* This function reads the current values of the gadgets in the window,
  762.  * and updates the contents of the global requester data variables (cd,
  763.  * frd, fod, and smrd) to match what the gadgets indicate.
  764.  */
  765. static VOID ReadGadgets(VOID)
  766. {
  767.     RangeCheckGadgets();
  768.  
  769.     cd.RefObject       = GetGadAttr(ID_REFOBJECT,GTCY_Active);
  770.     cd.InitialLeftEdge = GetGadAttr(ID_INITIALLEFTEDGE,GTIN_Number);
  771.     cd.InitialTopEdge  = GetGadAttr(ID_INITIALTOPEDGE,GTIN_Number);
  772.     cd.InitialWidth    = GetGadAttr(ID_INITIALWIDTH,GTIN_Number);
  773.     cd.InitialHeight   = GetGadAttr(ID_INITIALHEIGHT,GTIN_Number);
  774.     strcpy(cd.TitleText,(STRPTR)GetGadAttr(ID_TITLETEXT,GTST_String));
  775.     strcpy(cd.PositiveText,(STRPTR)GetGadAttr(ID_POSITIVETEXT,GTST_String));
  776.     strcpy(cd.NegativeText,(STRPTR)GetGadAttr(ID_NEGATIVETEXT,GTST_String));
  777.     strcpy(cd.FontName,(STRPTR)GetGadAttr(ID_FONTNAME,GTST_String));
  778.     cd.FontSize       = GetGadAttr(ID_FONTSIZE,GTIN_Number);
  779.     strcpy(cd.Locale,(STRPTR)GetGadAttr(ID_LOCALE,GTST_String));
  780.     cd.PrivateIDCMP   = GetGadAttr(ID_PRIVATEIDCMP,GTCB_Checked);
  781.     cd.SleepWindow    = GetGadAttr(ID_SLEEPWINDOW,GTCB_Checked);
  782.     cd.IntuiMsgFunc   = GetGadAttr(ID_INTUIMSGFUNC,GTCB_Checked);
  783.     cd.FilterFunc     = GetGadAttr(ID_FILTERFUNC,GTCB_Checked);
  784.  
  785.     if (requesterType == REQ_FILE)
  786.     {
  787.         strcpy(frd.InitialFile,(STRPTR)GetGadAttr(ID_INITIALFILE,GTST_String));
  788.         strcpy(frd.InitialDrawer,(STRPTR)GetGadAttr(ID_INITIALDRAWER,GTST_String));
  789.         strcpy(frd.InitialPattern,(STRPTR)GetGadAttr(ID_INITIALPATTERN,GTST_String));
  790.         strcpy(frd.AcceptPattern,(STRPTR)GetGadAttr(ID_ACCEPTPATTERN,GTST_String));
  791.         strcpy(frd.RejectPattern,(STRPTR)GetGadAttr(ID_REJECTPATTERN,GTST_String));
  792.         frd.DoSaveMode    = GetGadAttr(ID_DOSAVEMODE,GTCB_Checked);
  793.         frd.DoMultiSelect = GetGadAttr(ID_DOMULTISELECT,GTCB_Checked);
  794.         frd.DoPatterns    = GetGadAttr(ID_DOPATTERNS,GTCB_Checked);
  795.         frd.DrawersOnly   = GetGadAttr(ID_DRAWERSONLY,GTCB_Checked);
  796.         frd.RejectIcons   = GetGadAttr(ID_REJECTICONS,GTCB_Checked);
  797.         frd.FilterDrawers = GetGadAttr(ID_FILTERDRAWERS,GTCB_Checked);
  798.     }
  799.     else if (requesterType == REQ_FONT)
  800.     {
  801.         strcpy(fod.InitialName,(STRPTR)GetGadAttr(ID_INITIALNAME,GTST_String));
  802.         fod.InitialSize     = GetGadAttr(ID_INITIALSIZE,GTSL_Level);
  803.         fod.InitialFrontPen = GetGadAttr(ID_INITIALFRONTPEN,GTSL_Level);
  804.         fod.InitialBackPen  = GetGadAttr(ID_INITIALBACKPEN,GTSL_Level);
  805.         fod.InitialDrawMode = GetGadAttr(ID_INITIALDRAWMODE,GTCY_Active);
  806.         fod.DoFrontPen      = GetGadAttr(ID_DOFRONTPEN,GTCB_Checked);
  807.         fod.DoBackPen       = GetGadAttr(ID_DOBACKPEN,GTCB_Checked);
  808.         fod.DoStyle         = GetGadAttr(ID_DOSTYLE,GTCB_Checked);
  809.         fod.DoDrawMode      = GetGadAttr(ID_DODRAWMODE,GTCB_Checked);
  810.         fod.FixedWidthOnly  = GetGadAttr(ID_FIXEDWIDTHONLY,GTCB_Checked);
  811.         fod.MinHeight       = GetGadAttr(ID_MINHEIGHT,GTSL_Level);
  812.         fod.MaxHeight       = GetGadAttr(ID_MAXHEIGHT,GTSL_Level);
  813.         fod.MaxFrontPen     = GetGadAttr(ID_MAXFRONTPEN,GTSL_Level);
  814.         fod.MaxBackPen      = GetGadAttr(ID_MAXBACKPEN,GTSL_Level);
  815.         fod.FrontPens       = GetGadAttr(ID_FRONTPENS,GTCB_Checked);
  816.         fod.BackPens        = GetGadAttr(ID_BACKPENS,GTCB_Checked);
  817.         fod.ModeList        = GetGadAttr(ID_MODELIST,GTCB_Checked);
  818.  
  819.         fod.InitialStyle    = (GetGadAttr(ID_INITIALSTYLE_BOLD,GTCB_Checked) << FSB_BOLD)
  820.                               | (GetGadAttr(ID_INITIALSTYLE_ITALIC,GTCB_Checked) << FSB_ITALIC)
  821.                               | (GetGadAttr(ID_INITIALSTYLE_UNDERLINE,GTCB_Checked) << FSB_UNDERLINED);
  822.     }
  823.     else /* if (requesterType == REQ_SCREENMODE) */
  824.     {
  825.         smrd.InitialDisplayID     = (ULONG)gadgets[ID_INITIALDISPLAYID]->UserData;
  826.         smrd.InitialDisplayWidth  = GetGadAttr(ID_INITIALDISPLAYWIDTH,GTIN_Number);
  827.         smrd.InitialDisplayHeight = GetGadAttr(ID_INITIALDISPLAYHEIGHT,GTIN_Number);
  828.         smrd.InitialDisplayDepth  = GetGadAttr(ID_INITIALDISPLAYDEPTH,GTSL_Level);
  829.         smrd.InitialOverscanType  = GetGadAttr(ID_INITIALOVERSCANTYPE,GTCY_Active) + 1;
  830.         smrd.InitialInfoLeftEdge  = GetGadAttr(ID_INITIALINFOLEFTEDGE,GTIN_Number);
  831.         smrd.InitialInfoTopEdge   = GetGadAttr(ID_INITIALINFOTOPEDGE,GTIN_Number);
  832.         smrd.InitialInfoOpened    = GetGadAttr(ID_INITIALINFOOPENED,GTCB_Checked);
  833.         smrd.InitialAutoScroll    = GetGadAttr(ID_INITIALAUTOSCROLL,GTCB_Checked);
  834.         smrd.DoWidth              = GetGadAttr(ID_DOWIDTH,GTCB_Checked);
  835.         smrd.DoHeight             = GetGadAttr(ID_DOHEIGHT,GTCB_Checked);
  836.         smrd.DoDepth              = GetGadAttr(ID_DODEPTH,GTCB_Checked);
  837.         smrd.DoOverscanType       = GetGadAttr(ID_DOOVERSCANTYPE,GTCB_Checked);
  838.         smrd.DoAutoScroll         = GetGadAttr(ID_DOAUTOSCROLL,GTCB_Checked);
  839.         smrd.CustomSMList         = GetGadAttr(ID_CUSTOMSMLIST,GTCB_Checked);
  840.         smrd.PropertyFlags        = (ULONG)gadgets[ID_PROPERTYFLAGS]->UserData;
  841.         smrd.PropertyMask         = (ULONG)gadgets[ID_PROPERTYMASK]->UserData;
  842.         smrd.MinWidth             = GetGadAttr(ID_MINWIDTH_SM,GTIN_Number);
  843.         smrd.MaxWidth             = GetGadAttr(ID_MAXWIDTH_SM,GTIN_Number);
  844.         smrd.MinHeight            = GetGadAttr(ID_MINHEIGHT_SM,GTIN_Number);
  845.         smrd.MaxHeight            = GetGadAttr(ID_MAXHEIGHT_SM,GTIN_Number);
  846.         smrd.MinDepth             = GetGadAttr(ID_MINDEPTH,GTSL_Level);
  847.         smrd.MaxDepth             = GetGadAttr(ID_MAXDEPTH,GTSL_Level);
  848.     }
  849. }
  850.  
  851.  
  852. /*****************************************************************************/
  853.  
  854.  
  855. /* Main event loop.
  856.  * Collect all events, and act on them...
  857.  */
  858. static VOID EventLoop(VOID)
  859. {
  860. ULONG                sigs;
  861. struct IntuiMessage *intuiMsg;
  862. BOOL                 quit;
  863. UWORD                icode;
  864.  
  865.     quit = FALSE;
  866.     while (!quit)
  867.     {
  868.         sigs = Wait((1 << window->UserPort->mp_SigBit) | SIGBREAKF_CTRL_C | SIGBREAKF_CTRL_F);
  869.  
  870.         /* if ctrl-c, quit */
  871.         if (sigs & SIGBREAKF_CTRL_C)
  872.             break;
  873.  
  874.         /* if ctrl-f, activate and bring to front */
  875.         if (sigs & SIGBREAKF_CTRL_F)
  876.         {
  877.             WindowToFront(window);
  878.             ActivateWindow(window);
  879.         }
  880.  
  881.         /* drain IDCMP */
  882.         while (intuiMsg = GT_GetIMsg(window->UserPort))
  883.         {
  884.             icode = intuiMsg->Code;
  885.  
  886.             switch (intuiMsg->Class)
  887.             {
  888.                 case IDCMP_VANILLAKEY   : if (icode != 0x1b) /* ESC key */
  889.                                               break;
  890.  
  891.                 case IDCMP_CLOSEWINDOW  : quit = TRUE;
  892.                                           break;
  893.  
  894.                 case IDCMP_REFRESHWINDOW: GT_BeginRefresh(window);
  895.                                           RenderWindow();
  896.                                           GT_EndRefresh(window,TRUE);
  897.                                           break;
  898.  
  899.                 case IDCMP_GADGETDOWN   :
  900.                 case IDCMP_MOUSEMOVE    :
  901.                 case IDCMP_GADGETUP     : switch (((struct Gadget *)intuiMsg->IAddress)->GadgetID)
  902.                                           {
  903.                                               case ID_REQTYPE: ReadGadgets();
  904.                                                                RemoveGList(window,gadgetList,-1);
  905.                                                                EraseRect(window->RPort,window->BorderLeft + 319,window->BorderTop + 48,
  906.                                                                                        window->Width - window->BorderRight - 1,window->Height - window->BorderBottom - 1);
  907.                                                                FreeGadgets(gadgetList);
  908.  
  909.                                                                requesterType = intuiMsg->Code;
  910.                                                                if (!InstallGadgets())
  911.                                                                    quit = TRUE;
  912.  
  913.                                                                break;
  914.  
  915.                                               case ID_INITIALSTYLE_PLAIN:
  916.                                                                if (!icode)
  917.                                                                    SetGadAttrs(ID_INITIALSTYLE_PLAIN,GTCB_Checked,TRUE,TAG_DONE);
  918.  
  919.                                                                SetGadAttrs(ID_INITIALSTYLE_BOLD,GTCB_Checked,FALSE,TAG_DONE);
  920.                                                                SetGadAttrs(ID_INITIALSTYLE_ITALIC,GTCB_Checked,FALSE,TAG_DONE);
  921.                                                                SetGadAttrs(ID_INITIALSTYLE_UNDERLINE,GTCB_Checked,FALSE,TAG_DONE);
  922.                                                                break;
  923.  
  924.                                               case ID_INITIALSTYLE_BOLD:
  925.                                                                if (icode)
  926.                                                                    SetGadAttrs(ID_INITIALSTYLE_PLAIN,GTCB_Checked,FALSE,TAG_DONE);
  927.                                                                else if (!GetGadAttr(ID_INITIALSTYLE_ITALIC,GTCB_Checked) && !GetGadAttr(ID_INITIALSTYLE_UNDERLINE,GTCB_Checked))
  928.                                                                    SetGadAttrs(ID_INITIALSTYLE_PLAIN,GTCB_Checked,TRUE,TAG_DONE);
  929.                                                                break;
  930.  
  931.                                               case ID_INITIALSTYLE_ITALIC:
  932.                                                                if (icode)
  933.                                                                    SetGadAttrs(ID_INITIALSTYLE_PLAIN,GTCB_Checked,FALSE,TAG_DONE);
  934.                                                                else if (!GetGadAttr(ID_INITIALSTYLE_BOLD,GTCB_Checked) && !GetGadAttr(ID_INITIALSTYLE_UNDERLINE,GTCB_Checked))
  935.                                                                    SetGadAttrs(ID_INITIALSTYLE_PLAIN,GTCB_Checked,TRUE,TAG_DONE);
  936.                                                                break;
  937.  
  938.                                               case ID_INITIALSTYLE_UNDERLINE:
  939.                                                                if (icode)
  940.                                                                    SetGadAttrs(ID_INITIALSTYLE_PLAIN,GTCB_Checked,FALSE,TAG_DONE);
  941.                                                                else if (!GetGadAttr(ID_INITIALSTYLE_BOLD,GTCB_Checked) && !GetGadAttr(ID_INITIALSTYLE_ITALIC,GTCB_Checked))
  942.                                                                    SetGadAttrs(ID_INITIALSTYLE_PLAIN,GTCB_Checked,TRUE,TAG_DONE);
  943.                                                                break;
  944.  
  945.                                               case ID_MINHEIGHT: if (GetGadAttr(ID_MAXHEIGHT,GTSL_Level) < icode)
  946.                                                                      SetGadAttrs(ID_MAXHEIGHT,GTSL_Level,icode,TAG_DONE);
  947.                                                                  break;
  948.  
  949.                                               case ID_MAXHEIGHT: if (GetGadAttr(ID_MINHEIGHT,GTSL_Level) > icode)
  950.                                                                      SetGadAttrs(ID_MINHEIGHT,GTSL_Level,icode,TAG_DONE);
  951.                                                                  break;
  952.  
  953.                                               case ID_MINDEPTH: if (GetGadAttr(ID_MAXDEPTH,GTSL_Level) < icode)
  954.                                                                     SetGadAttrs(ID_MAXDEPTH,GTSL_Level,icode,TAG_DONE);
  955.                                                                 break;
  956.  
  957.                                               case ID_MAXDEPTH: if (GetGadAttr(ID_MINDEPTH,GTSL_Level) > icode)
  958.                                                                     SetGadAttrs(ID_MINDEPTH,GTSL_Level,icode,TAG_DONE);
  959.                                                                 break;
  960.  
  961.                                               case ID_INITIALLEFTEDGE     :
  962.                                               case ID_INITIALTOPEDGE      :
  963.                                               case ID_INITIALWIDTH        :
  964.                                               case ID_INITIALHEIGHT       :
  965.                                               case ID_INITIALDISPLAYWIDTH :
  966.                                               case ID_INITIALDISPLAYHEIGHT:
  967.                                               case ID_FONTSIZE            : RangeCheckGadgets();
  968.                                                                             break;
  969.  
  970.  
  971.                                               case ID_TEST   : ReadGadgets();
  972.                                                                TestRequester(&cd,&frd,&fod,&smrd,requesterType);
  973.                                                                break;
  974.                                           }
  975.             }
  976.  
  977.             GT_ReplyIMsg(intuiMsg);
  978.  
  979.             if (quit)
  980.                 break;
  981.         }
  982.     }
  983. }
  984.  
  985.  
  986. /*****************************************************************************/
  987.  
  988.  
  989. /* Main entry point. Init the universe, and enter the event loop */
  990. LONG main(VOID)
  991. {
  992.     requesterType   = REQ_FILE;
  993.     hexHook.h_Entry = (HOOKFUNC)HexHook;
  994.  
  995.     /* open all basic libraries in case we need 'em later */
  996.     if (IntuitionBase = OpenLibrary("intuition.library" VERSTAG, 39))
  997.     {
  998.         GfxBase       = OpenLibrary("graphics.library", 39);
  999.         GadToolsBase  = OpenLibrary("gadtools.library", 39);
  1000.         UtilityBase   = OpenLibrary("utility.library", 39);
  1001.         LocaleBase    = OpenLibrary("locale.library", 38);
  1002.     }
  1003.  
  1004.     /* check if we got everything we need */
  1005.     if (IntuitionBase && GfxBase && GadToolsBase && UtilityBase && LocaleBase)
  1006.     {
  1007.         if (screen = LockPubScreen(NULL))
  1008.         {
  1009.             if (drawInfo = GetScreenDrawInfo(screen))
  1010.             {
  1011.                 if (visualInfo = GetVisualInfoA(screen,NULL))
  1012.                 {
  1013.                     if (textFont = OpenFont(&topazAttr))
  1014.                     {
  1015.                         if (window = OpenWindowTags(NULL,
  1016.                                           WA_InnerWidth,   630,
  1017.                                           WA_InnerHeight,  375,
  1018.                                           WA_IDCMP,        IDCMP_GADGETUP | IDCMP_GADGETDOWN | IDCMP_MOUSEMOVE | IDCMP_CLOSEWINDOW | IDCMP_REFRESHWINDOW | IDCMP_VANILLAKEY | BUTTONIDCMP | CYCLEIDCMP | CHECKBOXIDCMP | STRINGIDCMP | INTEGERIDCMP | SLIDERIDCMP,
  1019.                                           WA_DepthGadget,  TRUE,
  1020.                                           WA_DragBar,      TRUE,
  1021.                                           WA_CloseGadget,  TRUE,
  1022.                                           WA_SimpleRefresh,TRUE,
  1023.                                           WA_Activate,     TRUE,
  1024.                                           WA_Title,        "ASL Tester",
  1025.                                           WA_PubScreen,    screen,
  1026.                                           WA_AutoAdjust,   TRUE,
  1027.                                           TAG_DONE))
  1028.                         {
  1029.                             SetFont(window->RPort,textFont);
  1030.                             RenderWindow();
  1031.  
  1032.                             if (InstallGadgets())
  1033.                                 EventLoop();
  1034.  
  1035.                             CloseWindow(window);
  1036.  
  1037.                             FreeGadgets(gadgetList);
  1038.                         }
  1039.                         CloseFont(textFont);
  1040.                     }
  1041.                     FreeVisualInfo(visualInfo);
  1042.                 }
  1043.                 FreeScreenDrawInfo(screen,drawInfo);
  1044.             }
  1045.             UnlockPubScreen(NULL,screen);
  1046.         }
  1047.     }
  1048.  
  1049.     if (IntuitionBase)
  1050.     {
  1051.         CloseLibrary(LocaleBase);
  1052.         CloseLibrary(UtilityBase);
  1053.         CloseLibrary(GadToolsBase);
  1054.         CloseLibrary(GfxBase);
  1055.         CloseLibrary(IntuitionBase);
  1056.     }
  1057.  
  1058.     return(0);
  1059. }
  1060.