home *** CD-ROM | disk | FTP | other *** search
/ Otherware / Otherware_1_SB_Development.iso / amiga / comms / comprgs / term232.lha / Source_Code / termSource / ScreenPanel.c < prev    next >
Encoding:
C/C++ Source or Header  |  1992-08-18  |  20.8 KB  |  813 lines

  1. /*
  2. **    $Id: ScreenPanel.c,v 1.10 92/08/15 20:13:16 olsen Sta Locker: olsen $
  3. **    $Revision: 1.10 $
  4. **    $Date: 92/08/15 20:13:16 $
  5. **
  6. **    Editing panel for screen configuration
  7. **
  8. **    Copyright ⌐ 1990-1992 by Olaf `Olsen' Barthel & MXM
  9. **        All Rights Reserved
  10. */
  11.  
  12. #include "termGlobal.h"
  13.  
  14. enum    {    GAD_MODES,GAD_MODE,GAD_NEWMODE,GAD_PALETTE,GAD_RED,GAD_GREEN,GAD_BLUE,GAD_STANDARD,
  15.         GAD_CURRENTFONT,GAD_NEWFONT,GAD_MAKEPUBLIC,GAD_SHANGHAI,GAD_USE,GAD_CANCEL };
  16.  
  17.     /* The names of the 16 display modes. */
  18.  
  19. STATIC UBYTE *ModeNames[16] =
  20. {
  21.     "Hires",
  22.     "Hires interlaced",
  23.     "Super hires",
  24.     "Super hires interlaced",
  25.     "Productivity",
  26.     "Productivity interlaced",
  27.  
  28.     "PAL hires",
  29.     "PAL hires interlaced",
  30.     "PAL super hires",
  31.     "PAL super hires interlaced",
  32.  
  33.     "NTSC hires",
  34.     "NTSC hires interlaced",
  35.     "NTSC super hires",
  36.     "NTSC super hires interlaced",
  37.  
  38.     "A2024 10 Hz",
  39.     "A2024 15 Hz"
  40. };
  41.  
  42. STATIC struct Node    ModeNodes[16];
  43. STATIC struct List    ModeList;
  44. STATIC BYTE        ModeLimited;
  45.  
  46.     /* ModeOkay(ULONG ID):
  47.      *
  48.      *    Checks whether a display mode ID will do for deep
  49.      *    screen bitmaps.
  50.      */
  51.  
  52. BYTE __regargs
  53. ModeOkay(ULONG ID)
  54. {
  55.     struct DimensionInfo DimensionInfo;
  56.  
  57.     if(GetDisplayInfoData(NULL,(APTR)&DimensionInfo,sizeof(struct DimensionInfo),DTAG_DIMS,ID))
  58.     {
  59.         if(DimensionInfo . MaxDepth >= 4)
  60.             return(TRUE);
  61.     }
  62.  
  63.     return(FALSE);
  64. }
  65.  
  66. #ifdef ASLSM_FilterFunc
  67.  
  68. STATIC UBYTE *
  69. CreateNewMode(ULONG Mode)
  70. {
  71.     STATIC UBYTE    Buffer[DISPLAYNAMELEN];
  72.     struct NameInfo    NameInfo;
  73.  
  74.     if(!GetDisplayInfoData(NULL,(APTR)&NameInfo,sizeof(struct NameInfo),DTAG_NAME,Mode))
  75.     {
  76.         struct DimensionInfo DimensionInfo;
  77.  
  78.         if(!GetDisplayInfoData(NULL,(APTR)&DimensionInfo,sizeof(struct DimensionInfo),DTAG_NAME,Mode))
  79.             strcpy(Buffer,LocaleString(MSG_SCREENPANEL_UNKNOWN_TXT));
  80.         else
  81.         {
  82.             UBYTE *MonitorName;
  83.  
  84.             switch(Mode & MONITOR_ID_MASK)
  85.             {
  86.                 case NTSC_MONITOR_ID:        MonitorName = "NTSC: ";
  87.                                 break;
  88.  
  89.                 case PAL_MONITOR_ID:        MonitorName = "PAL: ";
  90.                                 break;
  91.  
  92.                 case VGA_MONITOR_ID:        MonitorName = "VGA: ";
  93.                                 break;
  94.  
  95.                 case A2024_MONITOR_ID:        MonitorName = "A2024: ";
  96.                                 break;
  97.  
  98.                 default:            MonitorName = "";
  99.                                 break;
  100.             }
  101.  
  102.             SPrintf(Buffer,"%s%ld ╫ %ld",MonitorName,DimensionInfo . TxtOScan . MaxX - DimensionInfo . TxtOScan . MinX + 1,DimensionInfo . TxtOScan . MaxY - DimensionInfo . TxtOScan . MinY + 1);
  103.         }
  104.     }
  105.     else
  106.         strcpy(Buffer,NameInfo . Name);
  107.  
  108.     return(Buffer);
  109. }
  110.  
  111. STATIC LONG __saveds __asm
  112. ModeFilter(register __a1 ULONG ID)
  113. {
  114.     if(ModeLimited)
  115.         return((LONG)ModeOkay(ID));
  116.     else
  117.         return(TRUE);
  118. }
  119.  
  120. STATIC BYTE __regargs
  121. SelectDisplayMode(struct Window *Window,ULONG *Mode)
  122. {
  123.     struct ScreenModeRequester    *Request;
  124.     struct Hook             FilterHook;
  125.     BYTE                 Result = FALSE;
  126.  
  127.     FilterHook . h_Entry    = (APTR)ModeFilter;
  128.     FilterHook . h_SubEntry    = NULL;
  129.     FilterHook . h_Data    = NULL;
  130.  
  131.     if(Request = (struct ScreenModeRequester *)AllocAslRequestTags(ASL_ScreenModeRequest,
  132.         ASLSM_Window,        Window,
  133.         ASLSM_InitialDisplayID,    *Mode,
  134.         ASLSM_PropertyFlags,    DIPF_IS_WB,
  135.         ASLSM_FilterFunc,    &FilterHook,
  136.         ASLSM_PrivateIDCMP,    TRUE,
  137.     TAG_DONE))
  138.     {
  139.         if(AslRequestTags(Request,TAG_DONE))
  140.         {
  141.             *Mode = Request -> sm_DisplayID;
  142.  
  143.             Result = TRUE;
  144.         }
  145.  
  146.         FreeAslRequest(Request);
  147.     }
  148.  
  149.     return(Result);
  150. }
  151.  
  152. #endif    /* ASLSM_FilterFunc */
  153.  
  154. STATIC struct Gadget *
  155. CreateAllGadgets(LONG *ModeNumber,LONG *NumModes,struct Configuration *LocalConfig,struct Gadget **GadgetArray,struct Gadget **GadgetList,APTR VisualInfo,UWORD TopEdge,BYTE WrongMode)
  156. {
  157.     struct Gadget        *Gadget;
  158.     struct NewGadget     NewGadget;
  159.     UWORD             Counter = 0;
  160.     BYTE             Count = 0,i,Mode;
  161.  
  162.     SZ_SizeSetup(Screen,&UserFont,TRUE);
  163.  
  164.     memset(&NewGadget,0,sizeof(struct NewGadget));
  165.  
  166.     if(Gadget = CreateContext(GadgetList))
  167.     {
  168.         if(LocalConfig -> ColourMode == COLOUR_EIGHT || LocalConfig -> ColourMode == COLOUR_SIXTEEN)
  169.             ModeLimited = TRUE;
  170.         else
  171.             ModeLimited = FALSE;
  172.  
  173.         SZ_ResetMaxWidth();
  174.  
  175.         SZ_UpdateMaxWidth(LISTVIEW_KIND,NULL,20,NULL);
  176.         SZ_UpdateMaxWidth(BUTTON_KIND,LocaleString(MSG_GLOBAL_SELECT_NEW_DISPLAY_MODE_TXT),0,NULL);
  177.         SZ_UpdateMaxWidth(BUTTON_KIND,LocaleString(MSG_SCREENPANEL_USE_DEFAULT_TXT),0,NULL);
  178.         SZ_UpdateMaxWidth(BUTTON_KIND,LocaleString(MSG_SCREENPANEL_SELECT_NEW_FONT_TXT),0,NULL);
  179.  
  180.         SZ_SetWidth(SZ_ResetMaxWidth());
  181.  
  182. #ifdef ASLSM_FilterFunc
  183.         if(AslBase -> lib_Version < 38)
  184. #endif    /* ASLSM_FilterFunc */
  185.         {
  186.             SZ_AddLeftOffset(SZ_LeftOffsetDelta(MSG_SCREENPANEL_AVAILABLE_DISPLAY_MODES_GAD,MSG_SCREENPANEL_SCREEN_FONT_GAD));
  187.  
  188.             memset(&ModeList,0,sizeof(struct List));
  189.             memset(ModeNodes,0,sizeof(struct Node) * 16);
  190.  
  191.             NewList(&ModeList);
  192.  
  193.             *NumModes = 0;
  194.  
  195.                 /* This loop runs all possible display modes through `ModeNotAvailable'
  196.                  * to determine which resolutions are not supported by the current
  197.                  * monitor spec.
  198.                  */
  199.  
  200.             for(i = 0 ; i < 16 ; i++)
  201.             {
  202.                 if(!ModeNotAvailable(ModeID[i]))
  203.                 {
  204.                     if(ModeLimited)
  205.                     {
  206.                         if(ModeOkay(ModeID[i]))
  207.                         {
  208.                             if(LocalConfig -> DisplayMode == ModeID[i])
  209.                                 Mode = Count;
  210.  
  211.                             ModeNodes[Count] . ln_Name = ModeNames[i];
  212.                             ModeNodes[Count] . ln_Type = i;
  213.  
  214.                             AddTail(&ModeList,&ModeNodes[Count++]);
  215.                         }
  216.                     }
  217.                     else
  218.                     {
  219.                         if(LocalConfig -> DisplayMode == ModeID[i])
  220.                             Mode = Count;
  221.  
  222.                         ModeNodes[Count] . ln_Name = ModeNames[i];
  223.                         ModeNodes[Count] . ln_Type = i;
  224.  
  225.                         AddTail(&ModeList,&ModeNodes[Count++]);
  226.                     }
  227.                 }
  228.                 else
  229.                 {
  230.                     if(i == Mode)
  231.                         Mode = 0;
  232.                 }
  233.             }
  234.  
  235.             *NumModes = Count;
  236.  
  237.             *ModeNumber = Mode;
  238.  
  239.             NewGadget . ng_GadgetText    = LocaleString(MSG_SCREENPANEL_AVAILABLE_DISPLAY_MODES_GAD);
  240.             NewGadget . ng_TextAttr        = &UserFont;
  241.             NewGadget . ng_VisualInfo    = VisualInfo;
  242.             NewGadget . ng_GadgetID        = Counter;
  243.             NewGadget . ng_Flags        = PLACETEXT_LEFT;
  244.  
  245.             GadgetArray[Counter++] = Gadget = CreateGadget(LISTVIEW_KIND,Gadget,&NewGadget,
  246.                 SZ_Adjust,        TRUE,
  247.                 SZ_AutoWidth,        TRUE,
  248.                 SZ_Lines,        5,
  249.  
  250.                 GT_Underscore,        '_',
  251.                 GTLV_Labels,        &ModeList,
  252.                 GTLV_ShowSelected,    NULL,
  253.                 GTLV_Selected,        Mode,
  254.                 GTLV_Top,        Mode,
  255.             TAG_DONE);
  256.         }
  257. #ifdef ASLSM_FilterFunc
  258.         else
  259.         {
  260.             SZ_AddLeftOffset(SZ_LeftOffsetDelta(MSG_SCREENPANEL_CURRENT_DISPLAY_MODE_GAD,MSG_SCREENPANEL_SCREEN_FONT_GAD));
  261.  
  262.             Counter = GAD_MODE;
  263.  
  264.             NewGadget . ng_GadgetText    = LocaleString(MSG_SCREENPANEL_CURRENT_DISPLAY_MODE_GAD);
  265.             NewGadget . ng_TextAttr        = &UserFont;
  266.             NewGadget . ng_VisualInfo    = VisualInfo;
  267.             NewGadget . ng_GadgetID        = Counter;
  268.             NewGadget . ng_Flags        = PLACETEXT_LEFT;
  269.  
  270.             if(ModeNotAvailable(LocalConfig -> DisplayMode))
  271.                 LocalConfig -> DisplayMode = HIRES_KEY;
  272.  
  273.             GadgetArray[Counter++] = Gadget = CreateGadget(TEXT_KIND,Gadget,&NewGadget,
  274.                 SZ_Adjust,    TRUE,
  275.                 SZ_AutoWidth,    TRUE,
  276.  
  277.                 GT_Underscore,    '_',
  278.                 GTTX_Text,    CreateNewMode(LocalConfig -> DisplayMode),
  279.                 GTTX_Border,    TRUE,
  280.             TAG_DONE);
  281.  
  282.             NewGadget . ng_GadgetText    = LocaleString(MSG_GLOBAL_SELECT_NEW_DISPLAY_MODE_TXT);
  283.             NewGadget . ng_GadgetID        = Counter;
  284.             NewGadget . ng_Flags        = 0;
  285.  
  286.             GadgetArray[Counter++] = Gadget = CreateGadget(BUTTON_KIND,Gadget,&NewGadget,
  287.                 SZ_Adjust,    TRUE,
  288.                 SZ_AutoWidth,    TRUE,
  289.  
  290.                 GT_Underscore,    '_',
  291.             TAG_DONE);
  292.         }
  293. #endif    /* ASLSM_FilterFunc */
  294.  
  295.         Counter = GAD_PALETTE;
  296.  
  297.         NewGadget . ng_GadgetText    = LocaleString(MSG_SCREENPANEL_EDIT_SCREEN_PALETTE_GAD);
  298.         NewGadget . ng_GadgetID        = Counter;
  299.         NewGadget . ng_Flags        = 0;
  300.  
  301.         GadgetArray[Counter++] = Gadget = CreateGadget(PALETTE_KIND,Gadget,&NewGadget,
  302.             SZ_Adjust,        TRUE,
  303.             SZ_AutoWidth,        TRUE,
  304.  
  305.             GT_Underscore,        '_',
  306.             GTPA_Depth,        Config . ColourMode == COLOUR_EIGHT ? 3 : Screen -> RastPort . BitMap -> Depth,
  307.             GTPA_Color,        0,
  308.             GA_Disabled,        WrongMode,
  309.         TAG_DONE);
  310.  
  311.         NewGadget . ng_GadgetText    = LocaleString(MSG_SCREENPANEL_RED_GAD);
  312.         NewGadget . ng_GadgetID        = Counter;
  313.  
  314.         GadgetArray[Counter++] = Gadget = CreateGadget(SLIDER_KIND,Gadget,&NewGadget,
  315.             SZ_Adjust,        TRUE,
  316.             SZ_AutoWidth,        TRUE,
  317.  
  318.             GT_Underscore,        '_',
  319.             GTSL_Min,        0,
  320.             GTSL_Max,        15,
  321.             GTSL_Level,        0,
  322.             GTSL_LevelFormat,    "%2ld",
  323.             GTSL_MaxLevelLen,    2,
  324.             GA_Disabled,        WrongMode,
  325.         TAG_DONE);
  326.  
  327.         NewGadget . ng_GadgetText    = LocaleString(MSG_SCREENPANEL_GREEN_GAD);
  328.         NewGadget . ng_GadgetID        = Counter;
  329.  
  330.         GadgetArray[Counter++] = Gadget = CreateGadget(SLIDER_KIND,Gadget,&NewGadget,
  331.             SZ_Adjust,        TRUE,
  332.             SZ_AutoWidth,        TRUE,
  333.  
  334.             GT_Underscore,        '_',
  335.             GTSL_Min,        0,
  336.             GTSL_Max,        15,
  337.             GTSL_Level,        0,
  338.             GTSL_LevelFormat,    "%2ld",
  339.             GTSL_MaxLevelLen,    2,
  340.             GA_Disabled,        WrongMode,
  341.         TAG_DONE);
  342.  
  343.         NewGadget . ng_GadgetText    = LocaleString(MSG_SCREENPANEL_BLUE_GAD);
  344.         NewGadget . ng_GadgetID        = Counter;
  345.  
  346.         GadgetArray[Counter++] = Gadget = CreateGadget(SLIDER_KIND,Gadget,&NewGadget,
  347.             SZ_Adjust,        TRUE,
  348.             SZ_AutoWidth,        TRUE,
  349.  
  350.             GT_Underscore,        '_',
  351.             GTSL_Min,        0,
  352.             GTSL_Max,        15,
  353.             GTSL_Level,        0,
  354.             GTSL_LevelFormat,    "%2ld",
  355.             GTSL_MaxLevelLen,    2,
  356.             GA_Disabled,        WrongMode,
  357.         TAG_DONE);
  358.  
  359.         NewGadget . ng_GadgetText    = LocaleString(MSG_SCREENPANEL_USE_DEFAULT_TXT);
  360.         NewGadget . ng_GadgetID        = Counter;
  361.  
  362.         GadgetArray[Counter++] = Gadget = CreateGadget(BUTTON_KIND,Gadget,&NewGadget,
  363.             SZ_Adjust,    TRUE,
  364.             SZ_AutoWidth,    TRUE,
  365.  
  366.             GT_Underscore,    '_',
  367.             GA_Disabled,    WrongMode,
  368.         TAG_DONE);
  369.  
  370.         NewGadget . ng_GadgetText    = LocaleString(MSG_SCREENPANEL_SCREEN_FONT_GAD);
  371.         NewGadget . ng_GadgetID        = Counter;
  372.  
  373.         GadgetArray[Counter++] = Gadget = CreateGadget(TEXT_KIND,Gadget,&NewGadget,
  374.             SZ_Adjust,    TRUE,
  375.             SZ_AutoWidth,    TRUE,
  376.  
  377.             GTTX_Border,    TRUE,
  378.             GT_Underscore,    '_',
  379.         TAG_DONE);
  380.  
  381.         NewGadget . ng_GadgetText    = LocaleString(MSG_SCREENPANEL_SELECT_NEW_FONT_TXT);
  382.         NewGadget . ng_GadgetID        = Counter;
  383.  
  384.         GadgetArray[Counter++] = Gadget = CreateGadget(BUTTON_KIND,Gadget,&NewGadget,
  385.             SZ_Adjust,    TRUE,
  386.             SZ_AutoWidth,    TRUE,
  387.  
  388.             GT_Underscore,    '_',
  389.         TAG_DONE);
  390.  
  391.         SZ_AddLeftOffset(SZ_LeftOffsetDelta(MSG_SCREENPANEL_MAKE_SCREEN_PUBLIC_GAD,MSG_SCREENPANEL_SHANGHAI_WINDOWS_GAD));
  392.  
  393.         NewGadget . ng_GadgetText    = LocaleString(MSG_SCREENPANEL_MAKE_SCREEN_PUBLIC_GAD);
  394.         NewGadget . ng_GadgetID        = Counter;
  395.  
  396.         GadgetArray[Counter++] = Gadget = CreateGadget(CHECKBOX_KIND,Gadget,&NewGadget,
  397.             SZ_Adjust,    TRUE,
  398.             SZ_AutoWidth,    TRUE,
  399.             SZ_NewColumn,    TRUE,
  400.  
  401.             GT_Underscore,    '_',
  402.             GTCB_Checked,    LocalConfig -> MakeScreenPublic,
  403.         TAG_DONE);
  404.  
  405.         NewGadget . ng_GadgetText    = LocaleString(MSG_SCREENPANEL_SHANGHAI_WINDOWS_GAD);
  406.         NewGadget . ng_GadgetID        = Counter;
  407.  
  408.         GadgetArray[Counter++] = Gadget = CreateGadget(CHECKBOX_KIND,Gadget,&NewGadget,
  409.             SZ_Adjust,    TRUE,
  410.             SZ_AutoWidth,    TRUE,
  411.  
  412.             GT_Underscore,    '_',
  413.             GTCB_Checked,    LocalConfig -> ShanghaiWindows,
  414.             GA_Disabled,    LocalConfig -> MakeScreenPublic ? FALSE : TRUE,
  415.         TAG_DONE);
  416.  
  417.         NewGadget . ng_GadgetText    = LocaleString(MSG_GLOBAL_USE_GAD);
  418.         NewGadget . ng_GadgetID        = Counter;
  419.         NewGadget . ng_Flags        = 0;
  420.  
  421.         SZ_UpdateMaxWidth(BUTTON_KIND,LocaleString(MSG_GLOBAL_USE_GAD),0,NULL);
  422.         SZ_UpdateMaxWidth(BUTTON_KIND,LocaleString(MSG_GLOBAL_CANCEL_GAD),0,NULL);
  423.  
  424.         SZ_SetWidth(SZ_ResetMaxWidth());
  425.  
  426.         GadgetArray[Counter++] = Gadget = CreateGadget(BUTTON_KIND,Gadget,&NewGadget,
  427.             SZ_Adjust,    TRUE,
  428.             SZ_AutoWidth,    TRUE,
  429.             SZ_AlignExtra,    TRUE,
  430.             SZ_AlignLeft,    TRUE,
  431.             SZ_AlignBottom,    TRUE,
  432.  
  433.             GT_Underscore,    '_',
  434.         TAG_DONE);
  435.  
  436.         NewGadget . ng_GadgetText    = LocaleString(MSG_GLOBAL_CANCEL_GAD);
  437.         NewGadget . ng_GadgetID        = Counter;
  438.  
  439.         GadgetArray[Counter++] = Gadget = CreateGadget(BUTTON_KIND,Gadget,&NewGadget,
  440.             SZ_Adjust,    TRUE,
  441.             SZ_AutoWidth,    TRUE,
  442.             SZ_AlignRight,    TRUE,
  443.  
  444.             GT_Underscore,    '_',
  445.         TAG_DONE);
  446.     }
  447.  
  448.     return(Gadget);
  449. }
  450.  
  451. BYTE
  452. ScreenPanel(struct Configuration *MyConfig)
  453. {
  454.     struct Window    *PanelWindow;
  455.     struct Gadget    *GadgetList = NULL;
  456.     struct Gadget    *GadgetArray[GAD_CANCEL + 1];
  457.     LONG         ModeNumber,NumModes;
  458.  
  459.     BYTE         WrongMode;
  460.     WORD         i;
  461.  
  462.     if(Config . ColourMode == MyConfig -> ColourMode)
  463.     {
  464.         WrongMode = FALSE;
  465.  
  466.         switch(MyConfig -> ColourMode)
  467.         {
  468.             case COLOUR_AMIGA:    if(Screen -> RastPort . BitMap -> Depth < 2)
  469.                             WrongMode = TRUE;
  470.  
  471.                         break;
  472.  
  473.             case COLOUR_EIGHT:    if(Screen -> RastPort . BitMap -> Depth < 3)
  474.                             WrongMode = TRUE;
  475.  
  476.                         break;
  477.  
  478.             case COLOUR_SIXTEEN:    if(Screen -> RastPort . BitMap -> Depth < 4)
  479.                             WrongMode = TRUE;
  480.  
  481.                         break;
  482.  
  483.             case COLOUR_MONO:    if(Screen -> RastPort . BitMap -> Depth > 1)
  484.                             WrongMode = TRUE;
  485.  
  486.                         break;
  487.         }
  488.     }
  489.     else
  490.         WrongMode = TRUE;
  491.  
  492.     CopyMem(MyConfig,&PrivateConfig,sizeof(struct Configuration));
  493.  
  494.     if(CreateAllGadgets(&ModeNumber,&NumModes,MyConfig,&GadgetArray[0],&GadgetList,VisualInfo,Screen -> WBorTop + Screen -> Font -> ta_YSize + 1,WrongMode))
  495.     {
  496.         if(PanelWindow = OpenWindowTags(NULL,
  497.             WA_Left,    (Screen -> Width    - SZ_GetWindowWidth())    / 2,
  498.             WA_Top,        (Screen -> Height    - SZ_GetWindowHeight())    / 2,
  499.             WA_Width,    SZ_GetWindowWidth(),
  500.             WA_Height,    SZ_GetWindowHeight(),
  501.  
  502.             WA_Activate,    TRUE,
  503.             WA_DragBar,    TRUE,
  504.             WA_DepthGadget,    TRUE,
  505.             WA_RMBTrap,    TRUE,
  506.             WA_DepthGadget,    TRUE,
  507.             WA_CloseGadget,    TRUE,
  508.             WA_CustomScreen,Screen,
  509.  
  510.             WA_IDCMP,    IDCMP_CLOSEWINDOW | IDCMP_VANILLAKEY | SLIDERIDCMP | CHECKBOXIDCMP | LISTVIEWIDCMP | PALETTEIDCMP | BUTTONIDCMP,
  511.  
  512.             WA_Title,    LocaleString(MSG_SCREENPANEL_SCREEN_PREFERENCES_TXT),
  513.         TAG_DONE))
  514.         {
  515.             struct IntuiMessage    *Massage;
  516.             ULONG             Class,Code;
  517.             struct Gadget        *Gadget;
  518.             BYTE             Terminated = FALSE;
  519.             struct Node        *SomeNode;
  520.  
  521.             LONG             ColourNumber = 0;
  522.             BYTE             Red,Green,Blue;
  523.  
  524.             PushWindow(PanelWindow);
  525.  
  526.             AddGList(PanelWindow,GadgetList,(UWORD)-1,(UWORD)-1,NULL);
  527.             RefreshGList(GadgetList,PanelWindow,NULL,(UWORD)-1);
  528.             GT_RefreshWindow(PanelWindow,NULL);
  529.  
  530.             if(!WrongMode)
  531.             {
  532.                 Red    = (MyConfig -> Colours[ColourNumber] >> 8) & 0xF;
  533.                 Green    = (MyConfig -> Colours[ColourNumber] >> 4) & 0xF;
  534.                 Blue    = (MyConfig -> Colours[ColourNumber]     ) & 0xF;
  535.  
  536.                 GT_SetGadgetAttrs(GadgetArray[GAD_RED],PanelWindow,NULL,
  537.                     GTSL_Level,Red,
  538.                 TAG_DONE);
  539.  
  540.                 GT_SetGadgetAttrs(GadgetArray[GAD_GREEN],PanelWindow,NULL,
  541.                     GTSL_Level,Green,
  542.                 TAG_DONE);
  543.  
  544.                 GT_SetGadgetAttrs(GadgetArray[GAD_BLUE],PanelWindow,NULL,
  545.                     GTSL_Level,Blue,
  546.                 TAG_DONE);
  547.             }
  548.  
  549.             SPrintf(SharedBuffer,"%s %ld",MyConfig -> FontName,MyConfig -> FontHeight);
  550.  
  551.             GT_SetGadgetAttrs(GadgetArray[GAD_CURRENTFONT],PanelWindow,NULL,
  552.                 GTTX_Text,    SharedBuffer,
  553.             TAG_DONE);
  554.  
  555.             if(!WrongMode)
  556.                 LoadRGB4(VPort,&MyConfig -> Colours[0],16);
  557.  
  558.             while(!Terminated)
  559.             {
  560.                 WaitPort(PanelWindow -> UserPort);
  561.  
  562.                 while(!Terminated && (Massage = (struct IntuiMessage *)GT_GetIMsg(PanelWindow -> UserPort)))
  563.                 {
  564.                     Class    = Massage -> Class;
  565.                     Code    = Massage -> Code;
  566.                     Gadget    = (struct Gadget *)Massage -> IAddress;
  567.  
  568.                     GT_ReplyIMsg(Massage);
  569.  
  570.                     if(Class == IDCMP_VANILLAKEY)
  571.                         KeySelect(GadgetArray,GAD_CANCEL,Code,PanelWindow,&Gadget,&Class,&Code);
  572.  
  573.                     if(Class == IDCMP_CLOSEWINDOW)
  574.                         Terminated = TRUE;
  575.  
  576.                     if(Class == IDCMP_MOUSEMOVE)
  577.                     {
  578.                         switch(Gadget -> GadgetID)
  579.                         {
  580.                             case GAD_RED:        Red = Code;
  581.  
  582.                                         MyConfig -> Colours[ColourNumber] = (Red << 8) | (Green << 4) | (Blue);
  583.  
  584.                                         LoadRGB4(VPort,MyConfig -> Colours,1 << (Screen -> RastPort . BitMap -> Depth));
  585.  
  586.                                         break;
  587.  
  588.                             case GAD_GREEN:        Green = Code;
  589.  
  590.                                         MyConfig -> Colours[ColourNumber] = (Red << 8) | (Green << 4) | (Blue);
  591.  
  592.                                         LoadRGB4(VPort,MyConfig -> Colours,1 << (Screen -> RastPort . BitMap -> Depth));
  593.  
  594.                                         break;
  595.  
  596.                             case GAD_BLUE:        Blue = Code;
  597.  
  598.                                         MyConfig -> Colours[ColourNumber] = (Red << 8) | (Green << 4) | (Blue);
  599.  
  600.                                         LoadRGB4(VPort,MyConfig -> Colours,1 << (Screen -> RastPort . BitMap -> Depth));
  601.  
  602.                                         break;
  603.  
  604.                             default:        break;
  605.                         }
  606.                     }
  607.  
  608.                     if(Class == IDCMP_GADGETUP)
  609.                     {
  610.                         switch(Gadget -> GadgetID)
  611.                         {
  612.                             case GAD_RED:        Red = Code;
  613.  
  614.                                         MyConfig -> Colours[ColourNumber] = (Red << 8) | (Green << 4) | (Blue);
  615.  
  616.                                         LoadRGB4(VPort,MyConfig -> Colours,1 << (Screen -> RastPort . BitMap -> Depth));
  617.  
  618.                                         break;
  619.  
  620.                             case GAD_GREEN:        Green = Code;
  621.  
  622.                                         MyConfig -> Colours[ColourNumber] = (Red << 8) | (Green << 4) | (Blue);
  623.  
  624.                                         LoadRGB4(VPort,MyConfig -> Colours,1 << (Screen -> RastPort . BitMap -> Depth));
  625.  
  626.                                         break;
  627.  
  628.                             case GAD_BLUE:        Blue = Code;
  629.  
  630.                                         MyConfig -> Colours[ColourNumber] = (Red << 8) | (Green << 4) | (Blue);
  631.  
  632.                                         LoadRGB4(VPort,MyConfig -> Colours,1 << (Screen -> RastPort . BitMap -> Depth));
  633.  
  634.                                         break;
  635.  
  636.                             case GAD_STANDARD:    switch(MyConfig -> ColourMode)
  637.                                         {
  638.                                             case COLOUR_AMIGA:    CopyMem(DefaultColours,MyConfig -> Colours,16 * sizeof(UWORD));
  639.                                                         break;
  640.  
  641.                                             case COLOUR_EIGHT:    CopyMem(ANSIColours,MyConfig -> Colours,16 * sizeof(UWORD));
  642.                                                         break;
  643.  
  644.                                             case COLOUR_SIXTEEN:    CopyMem(EGAColours,MyConfig -> Colours,16 * sizeof(UWORD));
  645.                                                         break;
  646.  
  647.                                             case COLOUR_MONO:    CopyMem(AtomicColours,MyConfig -> Colours,16 * sizeof(UWORD));
  648.                                                         break;
  649.                                         }
  650.  
  651.                                         Red    = (MyConfig -> Colours[ColourNumber] >> 8) & 0xF;
  652.                                         Green    = (MyConfig -> Colours[ColourNumber] >> 4) & 0xF;
  653.                                         Blue    = (MyConfig -> Colours[ColourNumber]     ) & 0xF;
  654.  
  655.                                         GT_SetGadgetAttrs(GadgetArray[GAD_RED],PanelWindow,NULL,
  656.                                             GTSL_Level,Red,
  657.                                         TAG_DONE);
  658.  
  659.                                         GT_SetGadgetAttrs(GadgetArray[GAD_GREEN],PanelWindow,NULL,
  660.                                             GTSL_Level,Green,
  661.                                         TAG_DONE);
  662.  
  663.                                         GT_SetGadgetAttrs(GadgetArray[GAD_BLUE],PanelWindow,NULL,
  664.                                             GTSL_Level,Blue,
  665.                                         TAG_DONE);
  666.  
  667.                                         LoadRGB4(VPort,MyConfig -> Colours,1 << (Screen -> RastPort . BitMap -> Depth));
  668.  
  669.                                         break;
  670.  
  671.                             case GAD_MAKEPUBLIC:    if(!GT_CHECKED(Gadget))
  672.                                         {
  673.                                             GT_SetGadgetAttrs(GadgetArray[GAD_SHANGHAI],PanelWindow,NULL,
  674.                                                 GTCB_Checked,    FALSE,
  675.                                                 GA_Disabled,    TRUE,
  676.                                             TAG_DONE);
  677.                                         }
  678.                                         else
  679.                                         {
  680.                                             GT_SetGadgetAttrs(GadgetArray[GAD_SHANGHAI],PanelWindow,NULL,
  681.                                                 GA_Disabled,    FALSE,
  682.                                             TAG_DONE);
  683.                                         }
  684.  
  685.                                         break;
  686.  
  687.                             case GAD_MODES:        if(SomeNode = GetListNode(Code,&ModeList))
  688.                                         {
  689.                                             MyConfig -> DisplayMode = ModeID[SomeNode -> ln_Type];
  690.                                             ModeNumber = SomeNode -> ln_Type;
  691.                                         }
  692.  
  693.                                         break;
  694. #ifdef ASLSM_FilterFunc
  695.                             case GAD_NEWMODE:    BlockWindow(PanelWindow);
  696.  
  697.                                         if(SelectDisplayMode(PanelWindow,&MyConfig -> DisplayMode))
  698.                                         {
  699.                                             GT_SetGadgetAttrs(GadgetArray[GAD_MODE],PanelWindow,NULL,
  700.                                                 GTTX_Text,    CreateNewMode(MyConfig -> DisplayMode),
  701.                                             TAG_DONE);
  702.                                         }
  703.  
  704.                                         ReleaseWindow(PanelWindow);
  705.  
  706.                                         break;
  707. #endif    /* ASLSM_FilterFunc */
  708.                             case GAD_PALETTE:    ColourNumber = Code;
  709.  
  710. SetPalette:                                    Red    = (MyConfig -> Colours[ColourNumber] >> 8) & 0xF;
  711.                                         Green    = (MyConfig -> Colours[ColourNumber] >> 4) & 0xF;
  712.                                         Blue    = (MyConfig -> Colours[ColourNumber]     ) & 0xF;
  713.  
  714.                                         GT_SetGadgetAttrs(GadgetArray[GAD_RED],PanelWindow,NULL,
  715.                                             GTSL_Level,Red,
  716.                                         TAG_DONE);
  717.  
  718.                                         GT_SetGadgetAttrs(GadgetArray[GAD_GREEN],PanelWindow,NULL,
  719.                                             GTSL_Level,Green,
  720.                                         TAG_DONE);
  721.  
  722.                                         GT_SetGadgetAttrs(GadgetArray[GAD_BLUE],PanelWindow,NULL,
  723.                                             GTSL_Level,Blue,
  724.                                         TAG_DONE);
  725.  
  726.                                         break;
  727.  
  728.                             case GAD_NEWFONT:    BlockWindow(PanelWindow);
  729.  
  730.                                         if(PickFont(PanelWindow,MyConfig -> FontName,&MyConfig -> FontHeight,TRUE))
  731.                                         {
  732.                                             SPrintf(SharedBuffer,"%s %ld",MyConfig -> FontName,MyConfig -> FontHeight);
  733.  
  734.                                             GT_SetGadgetAttrs(GadgetArray[GAD_CURRENTFONT],PanelWindow,NULL,
  735.                                                 GTTX_Text,    SharedBuffer,
  736.                                             TAG_DONE);
  737.                                         }
  738.  
  739.                                         ReleaseWindow(PanelWindow);
  740.  
  741.                                         break;
  742.  
  743.                             case GAD_USE:        Terminated = TRUE;
  744.  
  745.                                         if(MyConfig -> ColourMode == COLOUR_EIGHT)
  746.                                         {
  747.                                             for(i = 0 ; i < 8 ; i++)
  748.                                                 MyConfig -> Colours[i + 8] = MyConfig -> Colours[i];
  749.                                         }
  750.  
  751.                                         if(MyConfig == &Config)
  752.                                         {
  753.                                             CopyMem(&MyConfig -> Colours[0],&BlinkColours[0],sizeof(UWORD) * 16);
  754.  
  755.                                             switch(MyConfig -> ColourMode)
  756.                                             {
  757.                                                 case COLOUR_EIGHT:    for(i = 0 ; i < 8 ; i++)
  758.                                                                 BlinkColours[i + 8] = BlinkColours[0];
  759.  
  760.                                                             break;
  761.  
  762.                                                 case COLOUR_SIXTEEN:    break;
  763.  
  764.                                                 case COLOUR_AMIGA:
  765.                                                 default:        BlinkColours[3] = BlinkColours[0];
  766.                                                             break;
  767.                                             }
  768.                                         }
  769.  
  770.                                         MyConfig -> MakeScreenPublic    = GT_CHECKED(GadgetArray[GAD_MAKEPUBLIC]);
  771.                                         MyConfig -> ShanghaiWindows    = GT_CHECKED(GadgetArray[GAD_SHANGHAI]);
  772.  
  773.                                         break;
  774.  
  775.                             case GAD_CANCEL:    Terminated = TRUE;
  776.  
  777.                                         CopyMem(&PrivateConfig,MyConfig,sizeof(struct Configuration));
  778.  
  779.                                         if(!memcmp(&Config,MyConfig,sizeof(struct Configuration)))
  780.                                             LoadRGB4(VPort,&MyConfig -> Colours[0],16);
  781.                                         else
  782.                                             LoadRGB4(VPort,&Config . Colours[0],16);
  783.  
  784.                                         break;
  785.  
  786.                             default:        break;
  787.                         }
  788.                     }
  789.                 }
  790.             }
  791.  
  792.             RemoveGList(PanelWindow,GadgetList,(UWORD)-1);
  793.  
  794.             PopWindow();
  795.  
  796.             CloseWindow(PanelWindow);
  797.         }
  798.     }
  799.  
  800.     FreeGadgets(GadgetList);
  801.  
  802.     if(PrivateConfig . DisplayMode != MyConfig -> DisplayMode)
  803.         return(TRUE);
  804.  
  805.     if(PrivateConfig . FontHeight != MyConfig -> FontHeight)
  806.         return(TRUE);
  807.  
  808.     if(Stricmp(PrivateConfig . FontName,MyConfig -> FontName))
  809.         return(TRUE);
  810.  
  811.     return(FALSE);
  812. }
  813.