home *** CD-ROM | disk | FTP | other *** search
/ BCI NET 2 / BCI NET 2.iso / archives / programming / source / term43-source.lha / Extras / Source / term-Source.lha / ScreenPanel.c < prev    next >
Encoding:
C/C++ Source or Header  |  1995-02-18  |  44.6 KB  |  1,713 lines

  1. /*
  2. **    ScreenPanel.c
  3. **
  4. **    Editing panel for screen configuration
  5. **
  6. **    Copyright © 1990-1995 by Olaf `Olsen' Barthel
  7. **        All Rights Reserved
  8. */
  9.  
  10. #include "termGlobal.h"
  11.  
  12. enum    {    GAD_SCREENMODE=1,GAD_USE_PUBSCREEN,GAD_PUBSCREENNAME,GAD_FONT,
  13.         GAD_COLOURMODE,GAD_SCREENTITLE,GAD_MAKESCREENPUBLIC,GAD_SHANGHAI,
  14.         GAD_BLINKING,GAD_PALETTE,GAD_RED,GAD_GREEN,GAD_BLUE,GAD_RESET,
  15.         GAD_STDPENS,GAD_EDITPENS,GAD_WINDOW_BORDER,GAD_SPLIT_STATUS,
  16.         GAD_STATUS_LINE,GAD_PAGER,GAD_PAGEGROUP,
  17.  
  18.         GAD_USE,GAD_CANCEL,GAD_DEFAULT };
  19.  
  20.     /* ModeFilter(register __a1 ULONG ID):
  21.      *
  22.      *    Screen display mode filter, rejects all
  23.      *    modes unapproriate for screen display.
  24.      */
  25.  
  26. STATIC ULONG __saveds __asm
  27. ModeFilter(register __a1 ULONG ID)
  28. {
  29.     struct DimensionInfo DimensionInfo;
  30.  
  31.     if(GetDisplayInfoData(NULL,(APTR)&DimensionInfo,sizeof(struct DimensionInfo),DTAG_DIMS,ID))
  32.     {
  33.         if(DimensionInfo . TxtOScan . MaxX - DimensionInfo . TxtOScan . MinX + 1 >= 640)
  34.             return(TRUE);
  35.     }
  36.  
  37.     return(FALSE);
  38. }
  39.  
  40. STATIC BYTE __regargs
  41. IsWrongMode(struct Configuration *LocalConfig,WORD OriginalMode)
  42. {
  43.     if(LocalConfig -> ScreenConfig -> ColourMode != OriginalMode || LocalConfig -> ScreenConfig -> UseWorkbench || Config -> ScreenConfig -> UseWorkbench || !Screen)
  44.         return(TRUE);
  45.     else
  46.     {
  47.         LONG Depth;
  48.  
  49.         Depth = GetBitMapDepth(Window -> WScreen -> RastPort . BitMap);
  50.  
  51.         switch(LocalConfig -> ScreenConfig -> ColourMode)
  52.         {
  53.             case COLOUR_AMIGA:
  54.  
  55.                 if(Depth < 2)
  56.                     return(TRUE);
  57.  
  58.                 break;
  59.  
  60.             case COLOUR_EIGHT:
  61.  
  62.                 if(Depth < 3)
  63.                     return(TRUE);
  64.  
  65.                 break;
  66.  
  67.             case COLOUR_SIXTEEN:
  68.  
  69.                 if(Depth < 4)
  70.                     return(TRUE);
  71.  
  72.                 break;
  73.         }
  74.  
  75.         return(FALSE);
  76.     }
  77. }
  78.  
  79. STATIC BYTE  __regargs
  80. SelectDisplayMode(struct Window *Window,ULONG *CurrentMode,struct Configuration *Config)
  81. {
  82.     BYTE Success = FALSE;
  83.  
  84.     if(AslBase -> lib_Version < 38)
  85.     {
  86.         struct List    *ModeList;
  87.         LONG         Index;
  88.  
  89.         if(ModeList = BuildModeList(&Index,*CurrentMode,ModeFilter))
  90.         {
  91.             struct LayoutHandle *Handle;
  92.  
  93.             if(Handle = LT_CreateHandleTags(Window -> WScreen,
  94.                 LH_LocaleHook,    &LocaleHook,
  95.             TAG_DONE))
  96.             {
  97.                 struct Window *LocalWindow;
  98.  
  99.                 LT_New(Handle,
  100.                     LA_Type,    VERTICAL_KIND,
  101.                 TAG_DONE);
  102.                 {
  103.                     LT_New(Handle,
  104.                         LA_Type,    VERTICAL_KIND,
  105.                     TAG_DONE);
  106.                     {
  107.                         LT_New(Handle,
  108.                             LA_Type,    LISTVIEW_KIND,
  109.                             LA_LabelID,    MSG_V36_0160,
  110.                             GTLV_Labels,    ModeList,
  111.                             LA_LONG,    &Index,
  112.                             LALV_CursorKey,    TRUE,
  113.                             LALV_Link,    NIL_LINK,
  114.                             LALV_MaxGrowY,    20,
  115.                             LALV_ResizeY,    TRUE,
  116.                             LA_Lines,    10,
  117.                             LA_Chars,    40,
  118.                             LA_CursorKey,    TRUE,
  119.                         TAG_DONE);
  120.  
  121.                         LT_EndGroup(Handle);
  122.                     }
  123.  
  124.                     LT_New(Handle,
  125.                         LA_Type,VERTICAL_KIND,
  126.                     TAG_DONE);
  127.                     {
  128.                         LT_New(Handle,
  129.                             LA_Type,    XBAR_KIND,
  130.                             LAXB_FullSize,    TRUE,
  131.                         TAG_DONE);
  132.  
  133.                         LT_EndGroup(Handle);
  134.                     }
  135.  
  136.                     LT_New(Handle,LA_Type,HORIZONTAL_KIND,
  137.                         LAGR_SameSize,    TRUE,
  138.                         LAGR_Spread,    TRUE,
  139.                     TAG_DONE);
  140.                     {
  141.                         LT_New(Handle,
  142.                             LA_Type,    BUTTON_KIND,
  143.                             LA_LabelID,    MSG_GLOBAL_USE_GAD,
  144.                             LA_ID,        GAD_USE,
  145.                             LABT_ReturnKey,    TRUE,
  146.                             LABT_ExtraFat,    TRUE,
  147.                         TAG_DONE);
  148.  
  149.                         LT_New(Handle,
  150.                             LA_Type,    BUTTON_KIND,
  151.                             LA_LabelID,    MSG_GLOBAL_CANCEL_GAD,
  152.                             LA_ID,        GAD_CANCEL,
  153.                             LABT_EscKey,    TRUE,
  154.                             LABT_ExtraFat,    TRUE,
  155.                         TAG_DONE);
  156.  
  157.                         LT_EndGroup(Handle);
  158.                     }
  159.  
  160.                     LT_EndGroup(Handle);
  161.                 }
  162.  
  163.                 if(LocalWindow = LT_Layout(Handle,LocaleString(MSG_V36_0161),NULL,0,0,IDCMP_CLOSEWINDOW,NULL,
  164.                     LAWN_HelpHook,        &GuideHook,
  165.                     LAWN_Parent,        Window,
  166.                     WA_DepthGadget,        TRUE,
  167.                     WA_CloseGadget,        TRUE,
  168.                     WA_DragBar,        TRUE,
  169.                     WA_RMBTrap,        TRUE,
  170.                     WA_Activate,        TRUE,
  171.                 TAG_DONE))
  172.                 {
  173.                     struct IntuiMessage    *Message;
  174.                     BOOL             Done = FALSE;
  175.                     ULONG             MsgClass,
  176.                                  MsgQualifier;
  177.                     UWORD             MsgCode;
  178.                     struct Gadget        *MsgGadget;
  179.                     LONG             i;
  180.                     struct ModeNode        *ModeNode;
  181.  
  182.                     do
  183.                     {
  184.                         WaitPort(LocalWindow -> UserPort);
  185.  
  186.                         while(Message = (struct IntuiMessage *)LT_GetIMsg(Handle))
  187.                         {
  188.                             MsgClass    = Message -> Class;
  189.                             MsgCode        = Message -> Code;
  190.                             MsgQualifier    = Message -> Qualifier;
  191.                             MsgGadget    = (struct Gadget *)Message -> IAddress;
  192.  
  193.                             LT_ReplyIMsg(Message);
  194.  
  195.                             if(MsgClass == IDCMP_CLOSEWINDOW)
  196.                                 Done = TRUE;
  197.  
  198.                             if(MsgClass == IDCMP_GADGETUP)
  199.                             {
  200.                                 switch(MsgGadget -> GadgetID)
  201.                                 {
  202.                                     case GAD_USE:
  203.  
  204.                                         for(ModeNode = (struct ModeNode *)ModeList -> lh_Head, i = 0; ModeNode -> VanillaNode . ln_Succ ; ModeNode = (struct ModeNode *)ModeNode -> VanillaNode . ln_Succ, i++)
  205.                                         {
  206.                                             if(Index == i)
  207.                                             {
  208.                                                 *CurrentMode = ModeNode -> DisplayID;
  209.  
  210.                                                 break;
  211.                                             }
  212.                                         }
  213.  
  214.                                         Success = Done = TRUE;
  215.                                         break;
  216.  
  217.                                     case GAD_CANCEL:
  218.  
  219.                                         Done = TRUE;
  220.                                         break;
  221.                                 }
  222.                             }
  223.  
  224.                             if(MsgClass == IDCMP_IDCMPUPDATE)
  225.                             {
  226.                                 for(ModeNode = (struct ModeNode *)ModeList -> lh_Head, i = 0; ModeNode -> VanillaNode . ln_Succ ; ModeNode = (struct ModeNode *)ModeNode -> VanillaNode . ln_Succ, i++)
  227.                                 {
  228.                                     if(Index == i)
  229.                                     {
  230.                                         *CurrentMode = ModeNode -> DisplayID;
  231.  
  232.                                         Success = Done = TRUE;
  233.  
  234.                                         LT_PressButton(Handle,GAD_USE);
  235.  
  236.                                         break;
  237.                                     }
  238.                                 }
  239.                             }
  240.                         }
  241.                     }
  242.                     while(!Done);
  243.  
  244.                     if(Success)
  245.                     {
  246.                         Config -> ScreenConfig -> Depth        = 0;
  247.                         Config -> ScreenConfig -> OverscanType    = OSCAN_TEXT;
  248.                         Config -> ScreenConfig -> DisplayWidth    = 0;
  249.                         Config -> ScreenConfig -> DisplayHeight    = 0;
  250.                     }
  251.                 }
  252.  
  253.                 LT_DeleteHandle(Handle);
  254.             }
  255.  
  256.             DeleteList(ModeList);
  257.         }
  258.     }
  259.     else
  260.     {
  261.         struct ScreenModeRequester    *Request;
  262.         struct Hook             FilterHook;
  263.         LONG                 Left    = 0,
  264.                          Top    = 0,
  265.                          Width    = 0,
  266.                          Height    = 0,
  267.                          DisplayWidth,
  268.                          DisplayHeight,
  269.                          Depth,
  270.                          MinDepth;
  271.         struct Rectangle         DisplayClip;
  272.  
  273.         Depth = Config -> ScreenConfig -> Depth;
  274.  
  275.         GetWindowInfo(WINDOW_SCREEN,&Left,&Top,&Width,&Height,Window -> Width / 2,Window -> Height / 2);
  276.  
  277.         FilterHook . h_Entry    = (HOOKFUNC)ModeFilter;
  278.         FilterHook . h_SubEntry    = NULL;
  279.         FilterHook . h_Data    = NULL;
  280.  
  281.         switch(Config -> ScreenConfig -> ColourMode)
  282.         {
  283.             case COLOUR_AMIGA:
  284.  
  285.                 MinDepth = 2;
  286.                 break;
  287.  
  288.             case COLOUR_EIGHT:
  289.  
  290.                 MinDepth = 3;
  291.                 break;
  292.  
  293.             case COLOUR_SIXTEEN:
  294.  
  295.                 MinDepth = 4;
  296.                 break;
  297.  
  298.             case COLOUR_MONO:
  299.  
  300.                 MinDepth = 1;
  301.                 break;
  302.         }
  303.  
  304.         if(Depth < MinDepth)
  305.             Depth = MinDepth;
  306.  
  307.         if((!Config -> ScreenConfig -> DisplayWidth || !Config -> ScreenConfig -> DisplayHeight) && QueryOverscan(Config -> ScreenConfig -> DisplayMode,&DisplayClip,Config -> ScreenConfig -> OverscanType))
  308.         {
  309.             DisplayWidth    = DisplayClip . MaxX - DisplayClip . MinX + 1;
  310.             DisplayHeight    = DisplayClip . MaxY - DisplayClip . MinY + 1;
  311.         }
  312.         else
  313.         {
  314.             DisplayWidth    = Config -> ScreenConfig -> DisplayWidth;
  315.             DisplayHeight    = Config -> ScreenConfig -> DisplayHeight;
  316.         }
  317.  
  318.         if(Request = (struct ScreenModeRequester *)AllocAslRequestTags(ASL_ScreenModeRequest,
  319.             ASLSM_Window,            Window,
  320.             ASLSM_InitialDisplayID,        *CurrentMode,
  321.             ASLSM_FilterFunc,        &FilterHook,
  322.             ASLSM_PrivateIDCMP,        TRUE,
  323.             ASLSM_InitialDisplayDepth,    Depth,
  324.             ASLSM_MinDepth,            MinDepth,
  325.             ASLSM_MaxDepth,            8,
  326.             ASLSM_DoDepth,            TRUE,
  327.             ASLSM_MinWidth,            640,
  328.             ASLSM_MinHeight,        200,
  329.             ASLSM_DoWidth,            TRUE,
  330.             ASLSM_DoHeight,            TRUE,
  331.             ASLSM_DoOverscanType,        TRUE,
  332.             ASLSM_InitialOverscanType,    Config -> ScreenConfig -> OverscanType,
  333.  
  334.             DisplayWidth  ? ASLSM_InitialDisplayWidth  : TAG_IGNORE, DisplayWidth,
  335.             DisplayHeight ? ASLSM_InitialDisplayHeight : TAG_IGNORE, DisplayHeight,
  336.  
  337.             ASL_LeftEdge,            Left,
  338.             ASL_TopEdge,            Top,
  339.             ASL_Width,            Width,
  340.             ASL_Height,            Height,
  341.         TAG_DONE))
  342.         {
  343.             if(AslRequestTags(Request,TAG_DONE))
  344.             {
  345.                 PutWindowInfo(WINDOW_SCREEN,Request -> sm_LeftEdge,Request -> sm_TopEdge,Request -> sm_Width,Request -> sm_Height);
  346.  
  347.                 *CurrentMode = Request -> sm_DisplayID;
  348.  
  349.                 if(Request -> sm_DisplayDepth == MinDepth)
  350.                     Depth = 0;
  351.                 else
  352.                     Depth = Request -> sm_DisplayDepth;
  353.  
  354.                 Config -> ScreenConfig -> Depth        = Depth;
  355.                 Config -> ScreenConfig -> OverscanType    = Request -> sm_OverscanType;
  356.                 Config -> ScreenConfig -> DisplayWidth    = Request -> sm_DisplayWidth;
  357.                 Config -> ScreenConfig -> DisplayHeight    = Request -> sm_DisplayHeight;
  358.  
  359.                 Success = TRUE;
  360.             }
  361.  
  362.             FreeAslRequest(Request);
  363.         }
  364.     }
  365.  
  366.     return(Success);
  367. }
  368.  
  369. STATIC BOOLEAN __regargs
  370. PenPanel(struct Window *Window,UWORD *Array,UWORD *DefaultArray,WORD Depth)
  371. {
  372.     struct LayoutHandle    *Handle;
  373.     UWORD             PrivateArray[16];
  374.     BOOLEAN             Result = FALSE;
  375.  
  376.     CopyMem(Array,PrivateArray,sizeof(PrivateArray));
  377.  
  378.     if(Handle = LT_CreateHandleTags(Window -> WScreen,
  379.         LH_LocaleHook,    &LocaleHook,
  380.         LH_ExactClone,    TRUE,
  381.     TAG_DONE))
  382.     {
  383.         struct Window *PanelWindow;
  384.  
  385.         LT_New(Handle,
  386.             LA_Type,    VERTICAL_KIND,
  387.         TAG_DONE);
  388.         {
  389.             LT_New(Handle,
  390.                 LA_Type,    VERTICAL_KIND,
  391.                 LA_LabelID,    MSG_PENPANEL_DRAWING_PENS_TXT,
  392.             TAG_DONE);
  393.             {
  394.                 LT_New(Handle,
  395.                     LA_Type,    VERTICAL_KIND,
  396.                 TAG_DONE);
  397.                 {
  398.                     LT_New(Handle,
  399.                         LA_Type,        PALETTE_KIND,
  400.                         LA_LabelID,        MSG_PENPANEL_BACKGROUND_TXT,
  401.                         GTPA_Depth,        Depth,
  402.                         LAPA_SmallPalette,    TRUE,
  403.                         LA_UWORD,        &PrivateArray[BACKGROUNDPEN],
  404.                         LA_Chars,        15,
  405.                         LA_ID,            100 + BACKGROUNDPEN,
  406.                     TAG_DONE);
  407.  
  408.                     LT_New(Handle,
  409.                         LA_Type,        PALETTE_KIND,
  410.                         LA_LabelID,        MSG_PENPANEL_TEXT_TXT,
  411.                         GTPA_Depth,        Depth,
  412.                         LAPA_SmallPalette,    TRUE,
  413.                         LA_UWORD,        &PrivateArray[TEXTPEN],
  414.                         LA_ID,            100 + TEXTPEN,
  415.                     TAG_DONE);
  416.  
  417.                     LT_New(Handle,
  418.                         LA_Type,        PALETTE_KIND,
  419.                         LA_LabelID,        MSG_PENPANEL_IMPORTANT_TEXT_TXT,
  420.                         GTPA_Depth,        Depth,
  421.                         LAPA_SmallPalette,    TRUE,
  422.                         LA_UWORD,        &PrivateArray[HIGHLIGHTTEXTPEN],
  423.                         LA_ID,            100 + HIGHLIGHTTEXTPEN,
  424.                     TAG_DONE);
  425.  
  426.                     LT_New(Handle,
  427.                         LA_Type,        PALETTE_KIND,
  428.                         LA_LabelID,        MSG_PENPANEL_BRIGHT_EDGES_TXT,
  429.                         GTPA_Depth,        Depth,
  430.                         LAPA_SmallPalette,    TRUE,
  431.                         LA_UWORD,        &PrivateArray[SHINEPEN],
  432.                         LA_ID,            100 + SHINEPEN,
  433.                     TAG_DONE);
  434.  
  435.                     LT_New(Handle,
  436.                         LA_Type,        PALETTE_KIND,
  437.                         LA_LabelID,        MSG_PENPANEL_DARK_EDGES_TXT,
  438.                         GTPA_Depth,        Depth,
  439.                         LAPA_SmallPalette,    TRUE,
  440.                         LA_UWORD,        &PrivateArray[SHADOWPEN],
  441.                         LA_ID,            100 + SHADOWPEN,
  442.                     TAG_DONE);
  443.  
  444.                     LT_New(Handle,
  445.                         LA_Type,        PALETTE_KIND,
  446.                         LA_LabelID,        MSG_PENPANEL_FILLPEN_TXT,
  447.                         GTPA_Depth,        Depth,
  448.                         LAPA_SmallPalette,    TRUE,
  449.                         LA_UWORD,        &PrivateArray[FILLPEN],
  450.                         LA_ID,            100 + FILLPEN,
  451.                     TAG_DONE);
  452.  
  453.                     LT_New(Handle,
  454.                         LA_Type,        PALETTE_KIND,
  455.                         LA_LabelID,        MSG_PENPANEL_FILLTEXTPEN_TXT,
  456.                         GTPA_Depth,        Depth,
  457.                         LAPA_SmallPalette,    TRUE,
  458.                         LA_UWORD,        &PrivateArray[FILLTEXTPEN],
  459.                         LA_ID,            100 + FILLTEXTPEN,
  460.                     TAG_DONE);
  461.  
  462.                     LT_New(Handle,
  463.                         LA_Type,        PALETTE_KIND,
  464.                         LA_LabelID,        MSG_PENPANEL_BARFILLPEN_TXT,
  465.                         GTPA_Depth,        Depth,
  466.                         LAPA_SmallPalette,    TRUE,
  467.                         LA_UWORD,        &PrivateArray[BARBLOCKPEN],
  468.                         LA_ID,            100 + BARBLOCKPEN,
  469.                     TAG_DONE);
  470.  
  471.                     LT_New(Handle,
  472.                         LA_Type,        PALETTE_KIND,
  473.                         LA_LabelID,        MSG_PENPANEL_BARTEXTPEN_TXT,
  474.                         GTPA_Depth,        Depth,
  475.                         LAPA_SmallPalette,    TRUE,
  476.                         LA_UWORD,        &PrivateArray[BARDETAILPEN],
  477.                         LA_ID,            100 + BARDETAILPEN,
  478.                     TAG_DONE);
  479.  
  480.                     LT_EndGroup(Handle);
  481.                 }
  482.  
  483.                 LT_New(Handle,
  484.                     LA_Type,XBAR_KIND,
  485.                 TAG_DONE);
  486.  
  487.                 LT_New(Handle,
  488.                     LA_Type,    VERTICAL_KIND,
  489.                 TAG_DONE);
  490.                 {
  491.                     LT_New(Handle,
  492.                         LA_Type,    BUTTON_KIND,
  493.                         LA_LabelID,    MSG_PENPANEL_STANDARDPENS_TXT,
  494.                         LA_ID,        GAD_DEFAULT,
  495.                         LABT_ExtraFat,    TRUE,
  496.                     TAG_DONE);
  497.  
  498.                     LT_EndGroup(Handle);
  499.                 }
  500.  
  501.                 LT_EndGroup(Handle);
  502.             }
  503.  
  504.             LT_New(Handle,
  505.                 LA_Type,VERTICAL_KIND,
  506.             TAG_DONE);
  507.             {
  508.                 LT_New(Handle,
  509.                     LA_Type,    XBAR_KIND,
  510.                     LAXB_FullSize,    TRUE,
  511.                 TAG_DONE);
  512.  
  513.                 LT_EndGroup(Handle);
  514.             }
  515.  
  516.             LT_New(Handle,LA_Type,HORIZONTAL_KIND,
  517.                 LAGR_SameSize,    TRUE,
  518.                 LAGR_Spread,    TRUE,
  519.             TAG_DONE);
  520.             {
  521.                 LT_New(Handle,
  522.                     LA_Type,    BUTTON_KIND,
  523.                     LA_LabelID,    MSG_GLOBAL_USE_GAD,
  524.                     LA_ID,        GAD_USE,
  525.                     LABT_ReturnKey,    TRUE,
  526.                     LABT_ExtraFat,    TRUE,
  527.                 TAG_DONE);
  528.  
  529.                 LT_New(Handle,
  530.                     LA_Type,    BUTTON_KIND,
  531.                     LA_LabelID,    MSG_GLOBAL_CANCEL_GAD,
  532.                     LA_ID,        GAD_CANCEL,
  533.                     LABT_EscKey,    TRUE,
  534.                     LABT_ExtraFat,    TRUE,
  535.                 TAG_DONE);
  536.  
  537.                 LT_EndGroup(Handle);
  538.             }
  539.  
  540.             LT_EndGroup(Handle);
  541.         }
  542.  
  543.         if(PanelWindow = LT_Layout(Handle,LocaleString(MSG_PENPANEL_SCREEN_DRAWING_PENS_TXT),NULL,0,0,IDCMP_CLOSEWINDOW,0,
  544.             LAWN_HelpHook,        &GuideHook,
  545.             LAWN_Parent,        Window,
  546.             WA_DepthGadget,        TRUE,
  547.             WA_CloseGadget,        TRUE,
  548.             WA_DragBar,        TRUE,
  549.             WA_RMBTrap,        TRUE,
  550.             WA_Activate,        TRUE,
  551.         TAG_DONE))
  552.         {
  553.             struct IntuiMessage    *Message;
  554.             BOOLEAN             Done = FALSE;
  555.             ULONG             MsgClass,
  556.                          MsgQualifier;
  557.             UWORD             MsgCode;
  558.             struct Gadget        *MsgGadget;
  559.             WORD             i;
  560.  
  561.             PushWindow(PanelWindow);
  562.  
  563.             LT_ShowWindow(Handle,TRUE);
  564.  
  565.             GuideContext(CONTEXT_SCREEN);
  566.  
  567.             do
  568.             {
  569.                 if(Wait(PORTMASK(PanelWindow -> UserPort) | SIG_BREAK) & SIG_BREAK)
  570.                     break;
  571.  
  572.                 while(Message = (struct IntuiMessage *)LT_GetIMsg(Handle))
  573.                 {
  574.                     MsgClass    = Message -> Class;
  575.                     MsgQualifier    = Message -> Qualifier;
  576.                     MsgCode        = Message -> Code;
  577.                     MsgGadget    = (struct Gadget *)Message -> IAddress;
  578.  
  579.                     LT_ReplyIMsg(Message);
  580.  
  581.                     if(MsgClass == IDCMP_CLOSEWINDOW)
  582.                         Done = TRUE;
  583.  
  584.                     if(MsgClass == IDCMP_GADGETUP)
  585.                     {
  586.                         switch(MsgGadget -> GadgetID)
  587.                         {
  588.                             case GAD_USE:
  589.  
  590.                                 CopyMem(PrivateArray,Array,sizeof(PrivateArray));
  591.  
  592.                                 Array[DETAILPEN]    = PrivateArray[BACKGROUNDPEN];
  593.                                 Array[BLOCKPEN]        = PrivateArray[SHADOWPEN];
  594.                                 Array[BARTRIMPEN]    = PrivateArray[BARDETAILPEN];
  595.  
  596.                                 Result = Done = TRUE;
  597.                                 break;
  598.  
  599.                             case GAD_CANCEL:
  600.  
  601.                                 Done = TRUE;
  602.                                 break;
  603.  
  604.                             case GAD_DEFAULT:
  605.  
  606.                                 for(i = TEXTPEN ; i <= BARBLOCKPEN ; i++)
  607.                                     LT_SetAttributes(Handle,100 + i,GTPA_Color,DefaultArray[i],TAG_DONE);
  608.  
  609.                                 break;
  610.                         }
  611.                     }
  612.                 }
  613.             }
  614.             while(!Done);
  615.  
  616.             PopWindow();
  617.         }
  618.  
  619.         LT_DeleteHandle(Handle);
  620.     }
  621.  
  622.     return(Result);
  623. }
  624.  
  625. BYTE __regargs
  626. ScreenPanel(struct Configuration *LocalConfig,BYTE *Default)
  627. {
  628.     STATIC LONG PageTitleID[6] =
  629.     {
  630.         MSG_V36_0163,
  631.         MSG_V36_0164,
  632.         MSG_V36_0165,
  633.         MSG_V36_0166,
  634.         MSG_PENPANEL_DRAWING_PENS_TXT,
  635.         -1
  636.     };
  637.  
  638.     STATIC BYTE         InitialPage = 0;
  639.  
  640.     struct LayoutHandle    *Handle;
  641.     BYTE             Cancel = FALSE;
  642.     STRPTR             PageTitle[6];
  643.  
  644.     LocalizeStringTable(PageTitle,PageTitleID);
  645.  
  646.     SaveConfig(LocalConfig,PrivateConfig);
  647.  
  648.     if(!LocalConfig -> ScreenConfig -> UseColours96)
  649.     {
  650.         Colour12x96(LocalConfig -> ScreenConfig -> Colours,LocalConfig -> ScreenConfig -> Colours96,16);
  651.  
  652.         LocalConfig -> ScreenConfig -> UseColours96 = TRUE;
  653.     }
  654.  
  655.     if(Handle = LT_CreateHandleTags(Window -> WScreen,
  656.         LH_LocaleHook,    &LocaleHook,
  657.         LH_ExactClone,    TRUE,
  658.         LH_ExitFlush,    FALSE,
  659.     TAG_DONE))
  660.     {
  661.         struct Window    *LocalWindow;
  662.         UBYTE         ModeName[DISPLAYNAMELEN + 1],
  663.                  FontName[MAX_FILENAME_LENGTH];
  664.         ULONG         DisplayMode;
  665.         BOOL         WrongMode = IsWrongMode(LocalConfig,PrivateConfig -> ScreenConfig -> ColourMode);
  666.  
  667.         DisplayMode = LocalConfig -> ScreenConfig -> DisplayMode;
  668.  
  669.         if(ModeNotAvailable(DisplayMode))
  670.         {
  671.             struct Screen *PubScreen = LockPubScreen(NULL);
  672.  
  673.             if(PubScreen)
  674.             {
  675.                 struct DimensionInfo DimensionInfo;
  676.  
  677.                 DisplayMode = GetVPModeID(&PubScreen -> ViewPort);
  678.  
  679.                 if(GetDisplayInfoData(NULL,(APTR)&DimensionInfo,sizeof(struct DimensionInfo),DTAG_DIMS,DisplayMode))
  680.                 {
  681.                     LONG    Width    = DimensionInfo . TxtOScan . MaxX - DimensionInfo . TxtOScan . MinX + 1,
  682.                         Height    = DimensionInfo . TxtOScan . MaxY - DimensionInfo . TxtOScan . MinY + 1;
  683.  
  684.                     if(Width != LocalConfig -> ScreenConfig -> DisplayWidth && LocalConfig -> ScreenConfig -> DisplayWidth)
  685.                         LocalConfig -> ScreenConfig -> DisplayWidth = Width;
  686.  
  687.                     if(Height != LocalConfig -> ScreenConfig -> DisplayHeight && LocalConfig -> ScreenConfig -> DisplayHeight)
  688.                         LocalConfig -> ScreenConfig -> DisplayHeight = Height;
  689.                 }
  690.  
  691.                 UnlockPubScreen(NULL,PubScreen);
  692.             }
  693.             else
  694.                 DisplayMode = DEFAULT_MONITOR_ID | HIRES_KEY;
  695.         }
  696.  
  697.         strcpy(ModeName,GetModeName(DisplayMode));
  698.  
  699.         BuildFontName(FontName,LocalConfig -> ScreenConfig -> FontName,LocalConfig -> ScreenConfig -> FontHeight);
  700.  
  701.         if(!Screen || LocalConfig -> ScreenConfig -> ColourMode != Config -> ScreenConfig -> ColourMode)
  702.         {
  703.             if(Kick30)
  704.             {
  705.                 if(InitialPage > 2)
  706.                     InitialPage = 2;
  707.  
  708.                 PageTitle[3] = NULL;
  709.             }
  710.             else
  711.             {
  712.                 if(InitialPage > 3)
  713.                     InitialPage = 3;
  714.  
  715.                 PageTitle[4] = NULL;
  716.             }
  717.         }
  718.         else
  719.             PageTitle[5] = NULL;
  720.  
  721.         LT_New(Handle,
  722.             LA_Type,    VERTICAL_KIND,
  723.         TAG_DONE);
  724.         {
  725.             LT_New(Handle,
  726.                 LA_Type,VERTICAL_KIND,
  727.             TAG_DONE);
  728.             {
  729.                 LT_New(Handle,
  730.                     LA_Type,    CYCLE_KIND,
  731.                     LA_ID,        GAD_PAGER,
  732.                     LA_LabelID,    MSG_XFER_PAGE_TXT,
  733.                     GTCY_Labels,    PageTitle,
  734.                     LACY_AutoPageID,GAD_PAGEGROUP,
  735.                     LACY_TabKey,    TRUE,
  736.                     LA_BYTE,    &InitialPage,
  737.                 TAG_DONE);
  738.  
  739.                 LT_EndGroup(Handle);
  740.             }
  741.  
  742.             LT_New(Handle,
  743.                 LA_Type,    VERTICAL_KIND,
  744.                 LA_ID,        GAD_PAGEGROUP,
  745.                 LAGR_Frame,    TRUE,
  746.                 LAGR_ActivePage,InitialPage,
  747.             TAG_DONE);
  748.             {
  749.                 LT_New(Handle,
  750.                     LA_Type,    VERTICAL_KIND,
  751.                 TAG_DONE);
  752.                 {
  753.                     LT_New(Handle,
  754.                         LA_Type,    VERTICAL_KIND,
  755.                     TAG_DONE);
  756.                     {
  757.                         LT_New(Handle,
  758.                             LA_Type,    TEXT_KIND,
  759.                             LA_LabelID,    MSG_SCREENPANEL_CURRENT_DISPLAY_MODE_GAD,
  760.                             LA_Chars,    20,
  761.                             LA_ID,        GAD_SCREENMODE,
  762.                             GTTX_Text,    ModeName,
  763.                             GTTX_Border,    TRUE,
  764.                             LATX_Picker,    TRUE,
  765.                         TAG_DONE);
  766.  
  767.                         LT_New(Handle,
  768.                             LA_Type,    TEXT_KIND,
  769.                             LA_LabelID,    MSG_SCREENPANEL_SCREEN_FONT_GAD,
  770.                             LA_ID,        GAD_FONT,
  771.                             GTTX_Text,    FontName,
  772.                             GTTX_Border,    TRUE,
  773.                             LATX_Picker,    TRUE,
  774.                         TAG_DONE);
  775.  
  776.                         LT_EndGroup(Handle);
  777.                     }
  778.  
  779.                     LT_New(Handle,
  780.                         LA_Type,    VERTICAL_KIND,
  781.                     TAG_DONE);
  782.                     {
  783.                         if(Kick30)
  784.                         {
  785.                             LT_New(Handle,
  786.                                 LA_Type,    CHECKBOX_KIND,
  787.                                 LA_LabelID,    MSG_SCREENPANEL_FASTER_LAYOUT_GAD,
  788.                                 LA_BYTE,    &LocalConfig -> ScreenConfig -> FasterLayout,
  789.                             TAG_DONE);
  790.                         }
  791.  
  792.                         LT_New(Handle,
  793.                             LA_Type,    CHECKBOX_KIND,
  794.                             LA_LabelID,    MSG_SCREENPANEL_MAKE_SCREEN_PUBLIC_GAD,
  795.                             LA_BYTE,    &LocalConfig -> ScreenConfig -> MakeScreenPublic,
  796.                             LA_ID,        GAD_MAKESCREENPUBLIC,
  797.                             GA_Disabled,    LocalConfig -> ScreenConfig -> UseWorkbench,
  798.                         TAG_DONE);
  799.  
  800.                         LT_New(Handle,
  801.                             LA_Type,    CHECKBOX_KIND,
  802.                             LA_ID,        GAD_SHANGHAI,
  803.                             LA_LabelID,    MSG_SCREENPANEL_SHANGHAI_WINDOWS_GAD,
  804.                             LA_BYTE,    &LocalConfig -> ScreenConfig -> ShanghaiWindows,
  805.                             GA_Disabled,    LocalConfig -> ScreenConfig -> UseWorkbench,
  806.                         TAG_DONE);
  807.  
  808.                         LT_EndGroup(Handle);
  809.                     }
  810.  
  811.                     LT_New(Handle,
  812.                         LA_Type,    VERTICAL_KIND,
  813.                     TAG_DONE);
  814.                     {
  815.                         LT_New(Handle,
  816.                             LA_Type,    XBAR_KIND,
  817.                         TAG_DONE);
  818.  
  819.                         LT_New(Handle,
  820.                             LA_Type,    CHECKBOX_KIND,
  821.                             LA_ID,        GAD_USE_PUBSCREEN,
  822.                             LA_LabelID,    MSG_SCREENPANEL_USE_WORKBENCH_GAD,
  823.                             LA_BYTE,    &LocalConfig -> ScreenConfig -> UseWorkbench,
  824.                         TAG_DONE);
  825.  
  826.                         LT_EndGroup(Handle);
  827.                     }
  828.  
  829.                     LT_New(Handle,
  830.                         LA_Type,    VERTICAL_KIND,
  831.                     TAG_DONE);
  832.                     {
  833.                         LT_New(Handle,
  834.                             LA_Type,    STRING_KIND,
  835.                             LA_LabelID,    MSG_SCREENPANEL_PUBSCREEN_NAME_GAD,
  836.                             LA_ID,        GAD_PUBSCREENNAME,
  837.                             LA_STRPTR,    LocalConfig -> ScreenConfig -> PubScreenName,
  838.                             LA_Chars,    14,
  839.                             GTST_MaxChars,    MAXPUBSCREENNAME,
  840.                             LAST_Picker,    TRUE,
  841.                             GA_Disabled,    !LocalConfig -> ScreenConfig -> UseWorkbench,
  842.                         TAG_DONE);
  843.  
  844.                         LT_EndGroup(Handle);
  845.                     }
  846.  
  847.                     LT_EndGroup(Handle);
  848.                 }
  849.  
  850.                 LT_New(Handle,
  851.                     LA_Type,    VERTICAL_KIND,
  852.                 TAG_DONE);
  853.                 {
  854.                     LT_New(Handle,
  855.                         LA_Type,    VERTICAL_KIND,
  856.                     TAG_DONE);
  857.                     {
  858.                         LT_New(Handle,
  859.                             LA_Type,    CHECKBOX_KIND,
  860.                             LA_LabelID,    MSG_SCREENPANEL_SCREEN_TITLE_GAD,
  861.                             LA_BYTE,    &LocalConfig -> ScreenConfig -> TitleBar,
  862.                             LA_ID,        GAD_SCREENTITLE,
  863.                             GA_Disabled,    LocalConfig -> ScreenConfig -> UseWorkbench,
  864.                         TAG_DONE);
  865.  
  866.                         LT_New(Handle,
  867.                             LA_Type,    CHECKBOX_KIND,
  868.                             LA_LabelID,    MSG_SCREENPANEL_WINDOW_BORDER_TXT,
  869.                             LA_BYTE,    &LocalConfig -> ScreenConfig -> ShareScreen,
  870.                             LA_ID,        GAD_WINDOW_BORDER,
  871.                             GA_Disabled,    LocalConfig -> ScreenConfig -> UseWorkbench,
  872.                         TAG_DONE);
  873.  
  874.                         LocalConfig -> ScreenConfig -> StatusLine &= 0xF;
  875.  
  876.                         LT_New(Handle,
  877.                             LA_Type,    CHECKBOX_KIND,
  878.                             LA_LabelID,    MSG_SCREENPANEL_SEPARATE_STATUS_WINDOW_TXT,
  879.                             LA_BYTE,    &LocalConfig -> ScreenConfig -> SplitStatus,
  880.                             LA_ID,        GAD_SPLIT_STATUS,
  881.                             GA_Disabled,    !LocalConfig -> ScreenConfig -> StatusLine || (!LocalConfig -> ScreenConfig -> ShareScreen && !LocalConfig -> ScreenConfig -> UseWorkbench),
  882.                         TAG_DONE);
  883.  
  884.                         LT_EndGroup(Handle);
  885.                     }
  886.  
  887.                     LT_New(Handle,
  888.                         LA_Type,    VERTICAL_KIND,
  889.                     TAG_DONE);
  890.                     {
  891.                         LT_New(Handle,
  892.                             LA_Type,    CYCLE_KIND,
  893.                             LA_LabelID,    MSG_SCREENPANEL_STATUS_LINE_GAD,
  894.                             LA_BYTE,    &LocalConfig -> ScreenConfig -> StatusLine,
  895.                             LACY_FirstLabel,MSG_SCREENPANEL_STATUS_DISABLED_TXT,
  896.                             LACY_LastLabel,    MSG_SCREENPANEL_STATUS_COMPACT_TXT,
  897.                             LA_ID,        GAD_STATUS_LINE,
  898.                         TAG_DONE);
  899.  
  900.                         LT_New(Handle,
  901.                             LA_Type,    CYCLE_KIND,
  902.                             LA_LabelID,    MSG_SCREENPANEL_ONLINE_TIME_GAD,
  903.                             LA_BYTE,    &LocalConfig -> ScreenConfig -> TimeMode,
  904.                             LACY_FirstLabel,MSG_SCREENPANEL_TIME_ONLINETIME_TXT,
  905.                             LACY_LastLabel,    MSG_SCREENPANEL_TIME_BOTH_TXT,
  906.                         TAG_DONE);
  907.  
  908.                         LT_EndGroup(Handle);
  909.                     }
  910.  
  911.                     LT_EndGroup(Handle);
  912.                 }
  913.  
  914.                 LT_New(Handle,
  915.                     LA_Type,    VERTICAL_KIND,
  916.                 TAG_DONE);
  917.                 {
  918.                     LT_New(Handle,
  919.                         LA_Type,    CYCLE_KIND,
  920.                         LA_LabelID,    MSG_SCREENPANEL_COLOUR_GAD,
  921.                         LA_WORD,    &LocalConfig -> ScreenConfig -> ColourMode,
  922.                         LA_ID,        GAD_COLOURMODE,
  923.                         LACY_FirstLabel,MSG_SCREENPANEL_COLOUR_AMIGA_TXT,
  924.                         LACY_LastLabel,    MSG_SCREENPANEL_COLOUR_MONO_TXT,
  925.                     TAG_DONE);
  926.  
  927.                     LT_New(Handle,
  928.                         LA_Type,    CHECKBOX_KIND,
  929.                         LA_LabelID,    MSG_SCREENPANEL_BLINKING_GAD,
  930.                         LA_ID,        GAD_BLINKING,
  931.                         LA_BYTE,    &LocalConfig -> ScreenConfig -> Blinking,
  932.                         GA_Disabled,    LocalConfig -> ScreenConfig -> UseWorkbench || LocalConfig -> ScreenConfig -> ColourMode == COLOUR_MONO,
  933.                     TAG_DONE);
  934.  
  935.                     LT_EndGroup(Handle);
  936.                 }
  937.  
  938.                 if(Screen && LocalConfig -> ScreenConfig -> ColourMode == Config -> ScreenConfig -> ColourMode)
  939.                 {
  940.                     LT_New(Handle,
  941.                         LA_Type,    VERTICAL_KIND,
  942.                     TAG_DONE);
  943.                     {
  944.                         LONG Depth;
  945.  
  946.                         switch(LocalConfig -> ScreenConfig -> ColourMode)
  947.                         {
  948.                             case COLOUR_MONO:
  949.  
  950.                                 Depth = 1;
  951.                                 break;
  952.  
  953.                             case COLOUR_AMIGA:
  954.  
  955.                                 Depth = 2;
  956.                                 break;
  957.  
  958.                             case COLOUR_EIGHT:
  959.  
  960.                                 Depth = 3;
  961.                                 break;
  962.  
  963.                             case COLOUR_SIXTEEN:
  964.  
  965.                                 Depth = 4;
  966.                                 break;
  967.                         }
  968.  
  969.                         if(LocalConfig -> ScreenConfig -> UseWorkbench)
  970.                         {
  971.                             LONG i,MaxDepth = 4;
  972.  
  973.                             for(i = 0 ; i < 4 ; i++)
  974.                             {
  975.                                 if((1L << i) > Window -> WScreen -> ViewPort . ColorMap -> Count)
  976.                                 {
  977.                                     MaxDepth = i;
  978.  
  979.                                     break;
  980.                                 }
  981.                             }
  982.  
  983.                             if(Depth > MaxDepth)
  984.                                 Depth = MaxDepth;
  985.                         }
  986.  
  987.                         LT_New(Handle,
  988.                             LA_Type,    VERTICAL_KIND,
  989.                         TAG_DONE);
  990.                         {
  991.                             WORD    ColourMax;
  992.                             STRPTR    ColourFormat;
  993.  
  994.                             if(Kick30)
  995.                             {
  996.                                 ColourMax    = 255;
  997.                                 ColourFormat    = "%3ld";
  998.                             }
  999.                             else
  1000.                             {
  1001.                                 ColourMax    = 15;
  1002.                                 ColourFormat    = "%2ld";
  1003.                             }
  1004.  
  1005.                             LT_New(Handle,
  1006.                                 LA_Type,    PALETTE_KIND,
  1007.                                 LA_LabelID,    MSG_SCREENPANEL_EDIT_SCREEN_PALETTE_GAD,
  1008.                                 LA_ID,        GAD_PALETTE,
  1009.                                 LA_Chars,    12,
  1010.                                 GTPA_Depth,    Depth,
  1011.                                 GA_Disabled,    WrongMode,
  1012.                             TAG_DONE);
  1013.  
  1014.                             LT_New(Handle,
  1015.                                 LA_Type,        SliderType,
  1016.                                 LA_LabelID,        MSG_SCREENPANEL_RED_GAD,
  1017.                                 LA_ID,            GAD_RED,
  1018.                                 GTSL_Min,        0,
  1019.                                 GTSL_Max,        ColourMax,
  1020.                                 GTSL_Level,        0,
  1021.                                 GTSL_LevelFormat,    ColourFormat,
  1022.                                 GA_Disabled,        WrongMode,
  1023.                             TAG_DONE);
  1024.  
  1025.                             LT_New(Handle,
  1026.                                 LA_Type,        SliderType,
  1027.                                 LA_LabelID,        MSG_SCREENPANEL_GREEN_GAD,
  1028.                                 LA_ID,            GAD_GREEN,
  1029.                                 GTSL_Min,        0,
  1030.                                 GTSL_Max,        ColourMax,
  1031.                                 GTSL_Level,        0,
  1032.                                 GTSL_LevelFormat,    ColourFormat,
  1033.                                 GA_Disabled,        WrongMode,
  1034.                             TAG_DONE);
  1035.  
  1036.                             LT_New(Handle,
  1037.                                 LA_Type,        SliderType,
  1038.                                 LA_LabelID,        MSG_SCREENPANEL_BLUE_GAD,
  1039.                                 LA_ID,            GAD_BLUE,
  1040.                                 GTSL_Min,        0,
  1041.                                 GTSL_Max,        ColourMax,
  1042.                                 GTSL_Level,        0,
  1043.                                 GTSL_LevelFormat,    ColourFormat,
  1044.                                 GA_Disabled,        WrongMode,
  1045.                             TAG_DONE);
  1046.  
  1047.                             LT_New(Handle,
  1048.                                 LA_Type,        XBAR_KIND,
  1049.                             TAG_DONE);
  1050.  
  1051.                             LT_EndGroup(Handle);
  1052.                         }
  1053.  
  1054.                         LT_New(Handle,
  1055.                             LA_Type,    VERTICAL_KIND,
  1056.                         TAG_DONE);
  1057.                         {
  1058.                             LT_New(Handle,
  1059.                                 LA_Type,    BUTTON_KIND,
  1060.                                 LA_LabelID,    MSG_SCREENPANEL_USE_DEFAULT_TXT,
  1061.                                 LA_ID,        GAD_RESET,
  1062.                                 LA_Chars,    16,
  1063.                                 GA_Disabled,    WrongMode,
  1064.                             TAG_DONE);
  1065.  
  1066.                             LT_EndGroup(Handle);
  1067.                         }
  1068.  
  1069.                         LT_EndGroup(Handle);
  1070.                     }
  1071.  
  1072.                     if(Kick30)
  1073.                     {
  1074.                         LT_New(Handle,
  1075.                             LA_Type,    VERTICAL_KIND,
  1076.                         TAG_DONE);
  1077.                         {
  1078.                             LT_New(Handle,
  1079.                                 LA_Type,    VERTICAL_KIND,
  1080.                             TAG_DONE);
  1081.                             {
  1082.                                 LT_New(Handle,
  1083.                                     LA_Type,    CHECKBOX_KIND,
  1084.                                     LA_LabelID,    MSG_PENPANEL_STANDARDPENS_TXT,
  1085.                                     LA_ID,        GAD_STDPENS,
  1086.                                     LA_BYTE,    &LocalConfig -> ScreenConfig -> UsePens,
  1087.                                     GA_Disabled,    LocalConfig -> ScreenConfig -> UseWorkbench || WrongMode,
  1088.                                 TAG_DONE);
  1089.  
  1090.                                 LT_EndGroup(Handle);
  1091.                             }
  1092.  
  1093.                             LT_New(Handle,
  1094.                                 LA_Type,    VERTICAL_KIND,
  1095.                             TAG_DONE);
  1096.                             {
  1097.                                 LT_New(Handle,
  1098.                                     LA_Type,    BUTTON_KIND,
  1099.                                     LA_LabelID,    MSG_PENPANEL_EDITPENS_TXT,
  1100.                                     LA_ID,        GAD_EDITPENS,
  1101.                                     GA_Disabled,    LocalConfig -> ScreenConfig -> UsePens || LocalConfig -> ScreenConfig -> UseWorkbench || WrongMode,
  1102.                                 TAG_DONE);
  1103.  
  1104.                                 LT_EndGroup(Handle);
  1105.                             }
  1106.  
  1107.                             LT_EndGroup(Handle);
  1108.                         }
  1109.                     }
  1110.                 }
  1111.  
  1112.                 LT_EndGroup(Handle);
  1113.             }
  1114.  
  1115.             LT_New(Handle,
  1116.                 LA_Type,    VERTICAL_KIND,
  1117.             TAG_DONE);
  1118.             {
  1119.                 LT_New(Handle,LA_Type,XBAR_KIND,LAXB_FullSize,TRUE,TAG_DONE);
  1120.  
  1121.                 LT_EndGroup(Handle);
  1122.             }
  1123.  
  1124.             LT_New(Handle,LA_Type,HORIZONTAL_KIND,
  1125.                 LAGR_SameSize,    TRUE,
  1126.                 LAGR_Spread,    TRUE,
  1127.             TAG_DONE);
  1128.             {
  1129.                 LT_New(Handle,
  1130.                     LA_Type,    BUTTON_KIND,
  1131.                     LA_LabelID,    MSG_GLOBAL_USE_GAD,
  1132.                     LA_ID,        GAD_USE,
  1133.                     LABT_ReturnKey,    TRUE,
  1134.                     LABT_ExtraFat,    TRUE,
  1135.                 TAG_DONE);
  1136.  
  1137.                 if(Default)
  1138.                 {
  1139.                     LT_New(Handle,
  1140.                         LA_Type,    BUTTON_KIND,
  1141.                         LA_LabelID,    MSG_GLOBAL_DEFAULT_GAD,
  1142.                         LA_ID,        GAD_DEFAULT,
  1143.                         LABT_ExtraFat,    TRUE,
  1144.                     TAG_DONE);
  1145.                 }
  1146.  
  1147.                 LT_New(Handle,
  1148.                     LA_Type,    BUTTON_KIND,
  1149.                     LA_LabelID,    MSG_GLOBAL_CANCEL_GAD,
  1150.                     LA_ID,        GAD_CANCEL,
  1151.                     LABT_EscKey,    TRUE,
  1152.                     LABT_ExtraFat,    TRUE,
  1153.                 TAG_DONE);
  1154.  
  1155.                 LT_EndGroup(Handle);
  1156.             }
  1157.  
  1158.             LT_EndGroup(Handle);
  1159.         }
  1160.  
  1161.         if(LocalWindow = LT_Layout(Handle,LocaleString(MSG_SCREENPANEL_SCREEN_PREFERENCES_TXT),NULL,0,0,IDCMP_CLOSEWINDOW,0,
  1162.             LAWN_HelpHook,        &GuideHook,
  1163.             LAWN_Parent,        Window,
  1164.             WA_DepthGadget,        TRUE,
  1165.             WA_CloseGadget,        TRUE,
  1166.             WA_DragBar,        TRUE,
  1167.             WA_RMBTrap,        TRUE,
  1168.             WA_Activate,        TRUE,
  1169.         TAG_DONE))
  1170.         {
  1171.             struct IntuiMessage    *Message;
  1172.             BOOLEAN             Done = FALSE;
  1173.             ULONG             MsgClass,
  1174.                          MsgQualifier;
  1175.             UWORD             MsgCode;
  1176.             struct Gadget        *MsgGadget;
  1177.  
  1178.             WORD             ColourNumber = 0,Count,i;
  1179.             WORD             Red,Green,Blue;
  1180.             struct ViewPort        *LocalVPort = &LocalWindow -> WScreen -> ViewPort;
  1181.  
  1182.             UWORD            *DefaultPens,Depth;
  1183.  
  1184.             switch(LocalConfig -> ScreenConfig -> ColourMode)
  1185.             {
  1186.                 case COLOUR_MONO:
  1187.  
  1188.                     DefaultPens = MonoPens;
  1189.                     Depth = 1;
  1190.                     break;
  1191.  
  1192.                 case COLOUR_AMIGA:
  1193.  
  1194.                     DefaultPens = StandardPens;
  1195.                     Depth = 2;
  1196.                     break;
  1197.  
  1198.                 case COLOUR_EIGHT:
  1199.  
  1200.                     DefaultPens = ANSIPens;
  1201.                     Depth = 3;
  1202.                     break;
  1203.  
  1204.                 case COLOUR_SIXTEEN:
  1205.  
  1206.                     if(IntuitionBase -> LibNode . lib_Version >= 39)
  1207.                         DefaultPens = NewEGAPens;
  1208.                     else
  1209.                         DefaultPens = EGAPens;
  1210.  
  1211.                     Depth = 4;
  1212.                     break;
  1213.             }
  1214.  
  1215.             for(Count = 0, i = DETAILPEN ; i <= BARTRIMPEN ; i++)
  1216.             {
  1217.                 if(LocalConfig -> ScreenConfig -> PenArray[i])
  1218.                     Count++;
  1219.             }
  1220.  
  1221.             if(!Count)
  1222.                 CopyMem(DefaultPens,LocalConfig -> ScreenConfig -> PenArray,16 * sizeof(UWORD));
  1223.  
  1224.             LocalConfig -> ScreenConfig -> DisplayMode = DisplayMode;
  1225.  
  1226.             if(!WrongMode)
  1227.             {
  1228.                 if(Kick30)
  1229.                 {
  1230.                     Red    = LocalConfig -> ScreenConfig -> Colours96[ColourNumber * 3 + 0] >> 24;
  1231.                     Green    = LocalConfig -> ScreenConfig -> Colours96[ColourNumber * 3 + 1] >> 24;
  1232.                     Blue    = LocalConfig -> ScreenConfig -> Colours96[ColourNumber * 3 + 2] >> 24;
  1233.                 }
  1234.                 else
  1235.                 {
  1236.                     Red    = (LocalConfig -> ScreenConfig -> Colours[ColourNumber] >> 8) & 0xF;
  1237.                     Green    = (LocalConfig -> ScreenConfig -> Colours[ColourNumber] >> 4) & 0xF;
  1238.                     Blue    = (LocalConfig -> ScreenConfig -> Colours[ColourNumber]     ) & 0xF;
  1239.                 }
  1240.  
  1241.                 LT_SetAttributes(Handle,GAD_RED,    GTSL_Level,    Red,    TAG_DONE);
  1242.                 LT_SetAttributes(Handle,GAD_GREEN,    GTSL_Level,    Green,    TAG_DONE);
  1243.                 LT_SetAttributes(Handle,GAD_BLUE,    GTSL_Level,    Blue,    TAG_DONE);
  1244.  
  1245.                 if(Screen)
  1246.                 {
  1247.                     LoadColourTable(VPort,        NormalColourTable,NormalColours,PaletteSize);
  1248.                     LoadColourTable(LocalVPort,    NormalColourTable,NormalColours,PaletteSize);
  1249.                 }
  1250.             }
  1251.  
  1252.             GuideContext(CONTEXT_SCREEN);
  1253.  
  1254.             PushWindow(LocalWindow);
  1255.  
  1256.             LT_ShowWindow(Handle,TRUE);
  1257.  
  1258.             do
  1259.             {
  1260.                 if(Wait(PORTMASK(LocalWindow -> UserPort) | SIG_BREAK) & SIG_BREAK)
  1261.                 {
  1262.                     SaveConfig(PrivateConfig,LocalConfig);
  1263.  
  1264.                     if(!Config -> ScreenConfig -> UseWorkbench && Screen)
  1265.                     {
  1266.                         if(!memcmp(Config -> ScreenConfig -> Colours96,LocalConfig -> ScreenConfig -> Colours96,sizeof(ULONG) * 3 * 16))
  1267.                             PaletteSetup(LocalConfig);
  1268.                         else
  1269.                             PaletteSetup(Config);
  1270.  
  1271.                         LoadColourTable(VPort,        NormalColourTable,NormalColours,PaletteSize);
  1272.                         LoadColourTable(LocalVPort,    NormalColourTable,NormalColours,PaletteSize);
  1273.                     }
  1274.  
  1275.                     break;
  1276.                 }
  1277.  
  1278.                 while(Message = (struct IntuiMessage *)LT_GetIMsg(Handle))
  1279.                 {
  1280.                     MsgClass    = Message -> Class;
  1281.                     MsgQualifier    = Message -> Qualifier;
  1282.                     MsgCode        = Message -> Code;
  1283.                     MsgGadget    = (struct Gadget *)Message -> IAddress;
  1284.  
  1285.                     LT_ReplyIMsg(Message);
  1286.  
  1287.                     if(MsgClass == IDCMP_CLOSEWINDOW)
  1288.                     {
  1289.                         SaveConfig(PrivateConfig,LocalConfig);
  1290.  
  1291.                         if(!Config -> ScreenConfig -> UseWorkbench && Screen)
  1292.                         {
  1293.                             if(!memcmp(Config -> ScreenConfig -> Colours96,LocalConfig -> ScreenConfig -> Colours96,sizeof(ULONG) * 3 * 16))
  1294.                                 PaletteSetup(LocalConfig);
  1295.                             else
  1296.                                 PaletteSetup(Config);
  1297.  
  1298.                             LoadColourTable(VPort,        NormalColourTable,NormalColours,PaletteSize);
  1299.                             LoadColourTable(LocalVPort,    NormalColourTable,NormalColours,PaletteSize);
  1300.                         }
  1301.  
  1302.                         Done = TRUE;
  1303.                     }
  1304.  
  1305.                     if(MsgClass == IDCMP_MOUSEMOVE)
  1306.                     {
  1307.                         switch(MsgGadget -> GadgetID)
  1308.                         {
  1309.                             case GAD_RED:
  1310.  
  1311.                                 Red = MsgCode;
  1312.  
  1313.                                 if(Kick30)
  1314.                                     LocalConfig -> ScreenConfig -> Colours96[ColourNumber * 3 + 0] = SPREAD(Red);
  1315.                                 else
  1316.                                     LocalConfig -> ScreenConfig -> Colours96[ColourNumber * 3 + 0] = SPREAD((Red << 4) | Red);
  1317.  
  1318.                                 PaletteSetup(LocalConfig);
  1319.  
  1320.                                 LoadColourTable(VPort,        NormalColourTable,NormalColours,PaletteSize);
  1321.                                 LoadColourTable(LocalVPort,    NormalColourTable,NormalColours,PaletteSize);
  1322.  
  1323.                                 break;
  1324.  
  1325.                             case GAD_GREEN:
  1326.  
  1327.                                 Green = MsgCode;
  1328.  
  1329.                                 if(Kick30)
  1330.                                     LocalConfig -> ScreenConfig -> Colours96[ColourNumber * 3 + 1] = SPREAD(Green);
  1331.                                 else
  1332.                                     LocalConfig -> ScreenConfig -> Colours96[ColourNumber * 3 + 1] = SPREAD((Green << 4) | Green);
  1333.  
  1334.                                 PaletteSetup(LocalConfig);
  1335.  
  1336.                                 LoadColourTable(VPort,        NormalColourTable,NormalColours,PaletteSize);
  1337.                                 LoadColourTable(LocalVPort,    NormalColourTable,NormalColours,PaletteSize);
  1338.  
  1339.                                 break;
  1340.  
  1341.                             case GAD_BLUE:
  1342.  
  1343.                                 Blue = MsgCode;
  1344.  
  1345.                                 if(Kick30)
  1346.                                     LocalConfig -> ScreenConfig -> Colours96[ColourNumber * 3 + 2] = SPREAD(Blue);
  1347.                                 else
  1348.                                     LocalConfig -> ScreenConfig -> Colours96[ColourNumber * 3 + 2] = SPREAD((Blue << 4) | Blue);
  1349.  
  1350.                                 PaletteSetup(LocalConfig);
  1351.  
  1352.                                 LoadColourTable(VPort,        NormalColourTable,NormalColours,PaletteSize);
  1353.                                 LoadColourTable(LocalVPort,    NormalColourTable,NormalColours,PaletteSize);
  1354.  
  1355.                                 break;
  1356.                         }
  1357.                     }
  1358.  
  1359.                     if(MsgClass == IDCMP_GADGETUP)
  1360.                     {
  1361.                         switch(MsgGadget -> GadgetID)
  1362.                         {
  1363.                             case GAD_STDPENS:
  1364.  
  1365.                                 LT_SetAttributes(Handle,GAD_EDITPENS,
  1366.                                     GA_Disabled,LocalConfig -> ScreenConfig -> UsePens || LocalConfig -> ScreenConfig -> UseWorkbench || WrongMode,
  1367.                                 TAG_DONE);
  1368.  
  1369.                                 break;
  1370.  
  1371.                             case GAD_USE_PUBSCREEN:
  1372.  
  1373.                                 LT_SetAttributes(Handle,GAD_PUBSCREENNAME,GA_Disabled,!LocalConfig -> ScreenConfig -> UseWorkbench,TAG_DONE);
  1374.                                 LT_SetAttributes(Handle,GAD_MAKESCREENPUBLIC,GA_Disabled,LocalConfig -> ScreenConfig -> UseWorkbench,TAG_DONE);
  1375.                                 LT_SetAttributes(Handle,GAD_SHANGHAI,GA_Disabled,LocalConfig -> ScreenConfig -> UseWorkbench,TAG_DONE);
  1376.                                 LT_SetAttributes(Handle,GAD_SCREENTITLE,GA_Disabled,LocalConfig -> ScreenConfig -> UseWorkbench,TAG_DONE);
  1377.                                 LT_SetAttributes(Handle,GAD_WINDOW_BORDER,GA_Disabled,LocalConfig -> ScreenConfig -> UseWorkbench,TAG_DONE);
  1378.                                 LT_SetAttributes(Handle,GAD_BLINKING,GA_Disabled,LocalConfig -> ScreenConfig -> UseWorkbench || LocalConfig -> ScreenConfig -> ColourMode == COLOUR_MONO,TAG_DONE);
  1379.                                 LT_SetAttributes(Handle,GAD_SPLIT_STATUS,GA_Disabled,!LocalConfig -> ScreenConfig -> StatusLine || (!LocalConfig -> ScreenConfig -> ShareScreen && !LocalConfig -> ScreenConfig -> UseWorkbench),TAG_DONE);
  1380.  
  1381.                                 WrongMode = IsWrongMode(LocalConfig,PrivateConfig -> ScreenConfig -> ColourMode);
  1382.  
  1383.                                 LT_SetAttributes(Handle,GAD_PALETTE,GA_Disabled,WrongMode,TAG_DONE);
  1384.                                 LT_SetAttributes(Handle,GAD_RED,GA_Disabled,WrongMode,TAG_DONE);
  1385.                                 LT_SetAttributes(Handle,GAD_GREEN,GA_Disabled,WrongMode,TAG_DONE);
  1386.                                 LT_SetAttributes(Handle,GAD_BLUE,GA_Disabled,WrongMode,TAG_DONE);
  1387.                                 LT_SetAttributes(Handle,GAD_RESET,GA_Disabled,WrongMode,TAG_DONE);
  1388.  
  1389.                                 LT_SetAttributes(Handle,GAD_EDITPENS,
  1390.                                     GA_Disabled,    LocalConfig -> ScreenConfig -> UsePens || LocalConfig -> ScreenConfig -> UseWorkbench || WrongMode,
  1391.                                 TAG_DONE);
  1392.  
  1393.                                 LT_SetAttributes(Handle,GAD_STDPENS,
  1394.                                     GTCB_Checked,    LocalConfig -> ScreenConfig -> UsePens = TRUE,
  1395.                                     GA_Disabled,    LocalConfig -> ScreenConfig -> UseWorkbench || WrongMode,
  1396.                                 TAG_DONE);
  1397.  
  1398.                                 break;
  1399.  
  1400.                             case GAD_WINDOW_BORDER:
  1401.  
  1402.                                 LT_SetAttributes(Handle,GAD_SPLIT_STATUS,GA_Disabled,!LocalConfig -> ScreenConfig -> StatusLine || (!LocalConfig -> ScreenConfig -> ShareScreen && !LocalConfig -> ScreenConfig -> UseWorkbench),TAG_DONE);
  1403.                                 break;
  1404.  
  1405.                             case GAD_COLOURMODE:
  1406.  
  1407.                                 if(!ModeOkay(LocalConfig -> ScreenConfig -> DisplayMode) && LocalConfig -> ScreenConfig -> ColourMode > COLOUR_AMIGA)
  1408.                                     LT_SetAttributes(Handle,GAD_COLOURMODE,GTCY_Active,COLOUR_AMIGA,TAG_DONE);
  1409.  
  1410.                                 WrongMode = IsWrongMode(LocalConfig,PrivateConfig -> ScreenConfig -> ColourMode);
  1411.  
  1412.                                 LT_SetAttributes(Handle,GAD_PALETTE,    GA_Disabled,WrongMode,TAG_DONE);
  1413.                                 LT_SetAttributes(Handle,GAD_RED,    GA_Disabled,WrongMode,TAG_DONE);
  1414.                                 LT_SetAttributes(Handle,GAD_GREEN,    GA_Disabled,WrongMode,TAG_DONE);
  1415.                                 LT_SetAttributes(Handle,GAD_BLUE,    GA_Disabled,WrongMode,TAG_DONE);
  1416.                                 LT_SetAttributes(Handle,GAD_RESET,    GA_Disabled,WrongMode,TAG_DONE);
  1417.  
  1418.                                 LT_SetAttributes(Handle,GAD_BLINKING,GA_Disabled,LocalConfig -> ScreenConfig -> UseWorkbench || LocalConfig -> ScreenConfig -> ColourMode == COLOUR_MONO,TAG_DONE);
  1419.  
  1420.                                 switch(LocalConfig -> ScreenConfig -> ColourMode)
  1421.                                 {
  1422.                                     case COLOUR_MONO:
  1423.  
  1424.                                         DefaultPens = MonoPens;
  1425.                                         Depth = 1;
  1426.                                         break;
  1427.  
  1428.                                     case COLOUR_AMIGA:
  1429.  
  1430.                                         DefaultPens = StandardPens;
  1431.                                         Depth = 2;
  1432.                                         break;
  1433.  
  1434.                                     case COLOUR_EIGHT:
  1435.  
  1436.                                         DefaultPens = ANSIPens;
  1437.                                         Depth = 3;
  1438.                                         break;
  1439.  
  1440.                                     case COLOUR_SIXTEEN:
  1441.  
  1442.                                         DefaultPens = EGAPens;
  1443.                                         Depth = 4;
  1444.                                         break;
  1445.                                 }
  1446.  
  1447.                                 LT_SetAttributes(Handle,GAD_EDITPENS,
  1448.                                     GA_Disabled,    LocalConfig -> ScreenConfig -> UsePens || LocalConfig -> ScreenConfig -> UseWorkbench || WrongMode,
  1449.                                 TAG_DONE);
  1450.  
  1451.                                 LT_SetAttributes(Handle,GAD_STDPENS,
  1452.                                     GA_Disabled,    LocalConfig -> ScreenConfig -> UseWorkbench || WrongMode,
  1453.                                 TAG_DONE);
  1454.  
  1455.                                 break;
  1456.  
  1457.                             case GAD_EDITPENS:
  1458.  
  1459.                                 LT_LockWindow(LocalWindow);
  1460.  
  1461.                                 if(LocalConfig -> ScreenConfig -> PenColourMode != LocalConfig -> ScreenConfig -> ColourMode)
  1462.                                 {
  1463.                                     UWORD LocalPens[16];
  1464.  
  1465.                                     CopyMem(DefaultPens,LocalPens,16 * sizeof(UWORD));
  1466.  
  1467.                                     if(PenPanel(LocalWindow,LocalPens,DefaultPens,Depth))
  1468.                                     {
  1469.                                         CopyMem(LocalPens,LocalConfig -> ScreenConfig -> PenArray,16 * sizeof(UWORD));
  1470.  
  1471.                                         LocalConfig -> ScreenConfig -> PenColourMode = LocalConfig -> ScreenConfig -> ColourMode;
  1472.                                     }
  1473.                                 }
  1474.                                 else
  1475.                                     PenPanel(LocalWindow,LocalConfig -> ScreenConfig -> PenArray,DefaultPens,Depth);
  1476.  
  1477.                                 LT_UnlockWindow(LocalWindow);
  1478.  
  1479.                                 LT_ShowWindow(Handle,TRUE);
  1480.                                 break;
  1481.  
  1482.                             case GAD_MAKESCREENPUBLIC:
  1483.  
  1484.                                 LT_SetAttributes(Handle,GAD_SHANGHAI,
  1485.                                     GA_Disabled,    !LocalConfig -> ScreenConfig -> MakeScreenPublic || LocalConfig -> ScreenConfig -> UseWorkbench,
  1486.                                 TAG_DONE);
  1487.  
  1488.                                 break;
  1489.  
  1490.                             case GAD_PALETTE:
  1491.  
  1492.                                 ColourNumber = MsgCode;
  1493.  
  1494.                                 if(Kick30)
  1495.                                 {
  1496.                                     Red    = LocalConfig -> ScreenConfig -> Colours96[ColourNumber * 3 + 0] >> 24;
  1497.                                     Green    = LocalConfig -> ScreenConfig -> Colours96[ColourNumber * 3 + 1] >> 24;
  1498.                                     Blue    = LocalConfig -> ScreenConfig -> Colours96[ColourNumber * 3 + 2] >> 24;
  1499.                                 }
  1500.                                 else
  1501.                                 {
  1502.                                     Red    = (LocalConfig -> ScreenConfig -> Colours[ColourNumber] >> 8) & 0xF;
  1503.                                     Green    = (LocalConfig -> ScreenConfig -> Colours[ColourNumber] >> 4) & 0xF;
  1504.                                     Blue    = (LocalConfig -> ScreenConfig -> Colours[ColourNumber]     ) & 0xF;
  1505.                                 }
  1506.  
  1507.                                 LT_SetAttributes(Handle,GAD_RED,    GTSL_Level,    Red,    TAG_DONE);
  1508.                                 LT_SetAttributes(Handle,GAD_GREEN,    GTSL_Level,    Green,    TAG_DONE);
  1509.                                 LT_SetAttributes(Handle,GAD_BLUE,    GTSL_Level,    Blue,    TAG_DONE);
  1510.  
  1511.                                 break;
  1512.  
  1513.                             case GAD_RESET:
  1514.  
  1515.                                 Default2CurrentPalette(LocalConfig);
  1516.  
  1517.                                 if(Kick30)
  1518.                                 {
  1519.                                     Red    = LocalConfig -> ScreenConfig -> Colours96[ColourNumber * 3 + 0] >> 24;
  1520.                                     Green    = LocalConfig -> ScreenConfig -> Colours96[ColourNumber * 3 + 1] >> 24;
  1521.                                     Blue    = LocalConfig -> ScreenConfig -> Colours96[ColourNumber * 3 + 2] >> 24;
  1522.                                 }
  1523.                                 else
  1524.                                 {
  1525.                                     Red    = (LocalConfig -> ScreenConfig -> Colours[ColourNumber] >> 8) & 0xF;
  1526.                                     Green    = (LocalConfig -> ScreenConfig -> Colours[ColourNumber] >> 4) & 0xF;
  1527.                                     Blue    = (LocalConfig -> ScreenConfig -> Colours[ColourNumber]     ) & 0xF;
  1528.                                 }
  1529.  
  1530.                                 LT_SetAttributes(Handle,GAD_RED,    GTSL_Level,    Red,    TAG_DONE);
  1531.                                 LT_SetAttributes(Handle,GAD_GREEN,    GTSL_Level,    Green,    TAG_DONE);
  1532.                                 LT_SetAttributes(Handle,GAD_BLUE,    GTSL_Level,    Blue,    TAG_DONE);
  1533.  
  1534.                                 PaletteSetup(LocalConfig);
  1535.  
  1536.                                 LoadColourTable(VPort,        NormalColourTable,NormalColours,PaletteSize);
  1537.                                 LoadColourTable(LocalVPort,    NormalColourTable,NormalColours,PaletteSize);
  1538.  
  1539.                                 break;
  1540.  
  1541.                             case GAD_USE:
  1542.  
  1543.                                 LT_UpdateStrings(Handle);
  1544.  
  1545.                                 if(!WrongMode)
  1546.                                     PaletteSetup(LocalConfig);
  1547.                                 else
  1548.                                 {
  1549.                                     if(LocalConfig -> ScreenConfig -> ColourMode != PrivateConfig -> ScreenConfig -> ColourMode)
  1550.                                         Default2CurrentPalette(LocalConfig);
  1551.                                 }
  1552.  
  1553.                                 if(LocalConfig -> ScreenConfig -> PenColourMode != LocalConfig -> ScreenConfig -> ColourMode)
  1554.                                 {
  1555.                                     CopyMem(DefaultPens,LocalConfig -> ScreenConfig -> PenArray,16 * sizeof(UWORD));
  1556.  
  1557.                                     LocalConfig -> ScreenConfig -> PenColourMode = LocalConfig -> ScreenConfig -> ColourMode;
  1558.                                 }
  1559.  
  1560.                                 Done = TRUE;
  1561.                                 break;
  1562.  
  1563.                             case GAD_CANCEL:
  1564.  
  1565.                                 SaveConfig(PrivateConfig,LocalConfig);
  1566.  
  1567.                                 if(!Config -> ScreenConfig -> UseWorkbench && Screen)
  1568.                                 {
  1569.                                     if(!memcmp(Config -> ScreenConfig -> Colours96,LocalConfig -> ScreenConfig -> Colours96,sizeof(ULONG) * 3 * 16))
  1570.                                         PaletteSetup(LocalConfig);
  1571.                                     else
  1572.                                         PaletteSetup(Config);
  1573.  
  1574.                                     LoadColourTable(VPort,        NormalColourTable,NormalColours,PaletteSize);
  1575.                                     LoadColourTable(LocalVPort,    NormalColourTable,NormalColours,PaletteSize);
  1576.                                 }
  1577.  
  1578.                                 Cancel = Done = TRUE;
  1579.                                 break;
  1580.  
  1581.                             case GAD_DEFAULT:
  1582.  
  1583.                                 *Default = TRUE;
  1584.  
  1585.                                 SaveConfig(PrivateConfig,LocalConfig);
  1586.  
  1587.                                 if(!Config -> ScreenConfig -> UseWorkbench && Screen)
  1588.                                 {
  1589.                                     if(!memcmp(Config -> ScreenConfig -> Colours96,LocalConfig -> ScreenConfig -> Colours96,sizeof(ULONG) * 3 * 16))
  1590.                                         PaletteSetup(LocalConfig);
  1591.                                     else
  1592.                                         PaletteSetup(Config);
  1593.  
  1594.                                     LoadColourTable(VPort,        NormalColourTable,NormalColours,PaletteSize);
  1595.                                     LoadColourTable(LocalVPort,    NormalColourTable,NormalColours,PaletteSize);
  1596.                                 }
  1597.  
  1598.                                 Done = TRUE;
  1599.                                 break;
  1600.                         }
  1601.                     }
  1602.  
  1603.                     if(MsgClass == IDCMP_IDCMPUPDATE)
  1604.                     {
  1605.                         switch(MsgGadget -> GadgetID)
  1606.                         {
  1607.                             case GAD_FONT:
  1608.  
  1609.                                 LT_LockWindow(LocalWindow);
  1610.  
  1611.                                 if(PickFont(LocalWindow,LocalConfig -> ScreenConfig -> FontName,&LocalConfig -> ScreenConfig -> FontHeight,FALSE))
  1612.                                 {
  1613.                                     BuildFontName(FontName,LocalConfig -> ScreenConfig -> FontName,LocalConfig -> ScreenConfig -> FontHeight);
  1614.  
  1615.                                     LT_SetAttributes(Handle,GAD_FONT,
  1616.                                         GTTX_Text,    FontName,
  1617.                                     TAG_DONE);
  1618.                                 }
  1619.  
  1620.                                 LT_UnlockWindow(LocalWindow);
  1621.  
  1622.                                 break;
  1623.  
  1624.                             case GAD_SCREENMODE:
  1625.  
  1626.                                 LT_LockWindow(LocalWindow);
  1627.  
  1628.                                 if(SelectDisplayMode(LocalWindow,&LocalConfig -> ScreenConfig -> DisplayMode,LocalConfig))
  1629.                                 {
  1630.                                     strcpy(ModeName,GetModeName(LocalConfig -> ScreenConfig -> DisplayMode));
  1631.  
  1632.                                     LT_SetAttributes(Handle,GAD_SCREENMODE,GTTX_Text,ModeName,TAG_DONE);
  1633.                                 }
  1634.  
  1635.                                 LT_UnlockWindow(LocalWindow);
  1636.  
  1637.                                 LT_ShowWindow(Handle,TRUE);
  1638.  
  1639.                                 break;
  1640.  
  1641.                             case GAD_STATUS_LINE:
  1642.  
  1643.                                 LT_SetAttributes(Handle,GAD_SPLIT_STATUS,GA_Disabled,!LocalConfig -> ScreenConfig -> StatusLine || (!LocalConfig -> ScreenConfig -> ShareScreen && !LocalConfig -> ScreenConfig -> UseWorkbench),TAG_DONE);
  1644.  
  1645.                                 break;
  1646.  
  1647.                             case GAD_PUBSCREENNAME:
  1648.  
  1649.                                 if(LocalConfig -> ScreenConfig -> UseWorkbench)
  1650.                                 {
  1651.                                     UBYTE DummyBuffer[MAXPUBSCREENNAME + 1];
  1652.  
  1653.                                     LT_LockWindow(LocalWindow);
  1654.  
  1655.                                     strcpy(DummyBuffer,(STRPTR)LT_GetAttributes(Handle,GAD_PUBSCREENNAME,TAG_DONE));
  1656.                                     strcpy(SharedBuffer,DummyBuffer);
  1657.  
  1658.                                     if(PickScreen(LocalWindow,DummyBuffer))
  1659.                                     {
  1660.                                         if(strcmp(DummyBuffer,SharedBuffer))
  1661.                                             LT_SetAttributes(Handle,GAD_PUBSCREENNAME,GTST_String,DummyBuffer,TAG_DONE);
  1662.                                     }
  1663.  
  1664.                                     LT_UnlockWindow(LocalWindow);
  1665.  
  1666.                                     LT_ShowWindow(Handle,TRUE);
  1667.                                 }
  1668.  
  1669.                                 break;
  1670.                         }
  1671.                     }
  1672.                 }
  1673.             }
  1674.             while(!Done);
  1675.  
  1676.             PopWindow();
  1677.         }
  1678.  
  1679.         LT_DeleteHandle(Handle);
  1680.     }
  1681.  
  1682.     if(Default)
  1683.         return((BYTE)(!Cancel));
  1684.     else
  1685.     {
  1686.         if(PrivateConfig -> ScreenConfig -> DisplayMode != LocalConfig -> ScreenConfig -> DisplayMode || Stricmp(PrivateConfig -> ScreenConfig -> FontName,LocalConfig -> ScreenConfig -> FontName) || PrivateConfig -> ScreenConfig -> FontHeight != LocalConfig -> ScreenConfig -> FontHeight || PrivateConfig -> ScreenConfig -> ColourMode != LocalConfig -> ScreenConfig -> ColourMode)
  1687.             return(TRUE);
  1688.  
  1689.         if(PrivateConfig -> ScreenConfig -> MakeScreenPublic != LocalConfig -> ScreenConfig -> MakeScreenPublic || PrivateConfig -> ScreenConfig -> ShanghaiWindows != LocalConfig -> ScreenConfig -> ShanghaiWindows)
  1690.             return(TRUE);
  1691.  
  1692.         if(PrivateConfig -> ScreenConfig -> Blinking != LocalConfig -> ScreenConfig -> Blinking && (LocalConfig -> ScreenConfig -> ColourMode == COLOUR_EIGHT || LocalConfig -> ScreenConfig -> ColourMode == COLOUR_SIXTEEN))
  1693.             return(TRUE);
  1694.  
  1695.         if(PrivateConfig -> ScreenConfig -> FasterLayout != LocalConfig -> ScreenConfig -> FasterLayout && LocalConfig -> ScreenConfig -> ColourMode != COLOUR_MONO)
  1696.             return(TRUE);
  1697.  
  1698.         if(PrivateConfig -> ScreenConfig -> TitleBar != LocalConfig -> ScreenConfig -> TitleBar || PrivateConfig -> ScreenConfig -> StatusLine != LocalConfig -> ScreenConfig -> StatusLine || PrivateConfig -> ScreenConfig -> UseWorkbench != LocalConfig -> ScreenConfig -> UseWorkbench || PrivateConfig -> ScreenConfig -> Depth != LocalConfig -> ScreenConfig -> Depth || PrivateConfig -> ScreenConfig -> OverscanType != LocalConfig -> ScreenConfig -> OverscanType || PrivateConfig -> ScreenConfig -> DisplayWidth != LocalConfig -> ScreenConfig -> DisplayWidth || PrivateConfig -> ScreenConfig -> DisplayHeight != LocalConfig -> ScreenConfig -> DisplayHeight)
  1699.             return(TRUE);
  1700.  
  1701.         if(PrivateConfig -> ScreenConfig -> ShareScreen != LocalConfig -> ScreenConfig -> ShareScreen || PrivateConfig -> ScreenConfig -> SplitStatus != LocalConfig -> ScreenConfig -> SplitStatus)
  1702.             return(TRUE);
  1703.  
  1704.         if(strcmp(PrivateConfig -> ScreenConfig -> PubScreenName,LocalConfig -> ScreenConfig -> PubScreenName) && LocalConfig -> ScreenConfig -> UseWorkbench)
  1705.             return(TRUE);
  1706.  
  1707.         if(LocalConfig -> ScreenConfig -> UsePens != PrivateConfig -> ScreenConfig -> UsePens || memcmp(LocalConfig -> ScreenConfig -> PenArray,PrivateConfig -> ScreenConfig -> PenArray,sizeof(UWORD) * 12))
  1708.             return(TRUE);
  1709.  
  1710.         return(FALSE);
  1711.     }
  1712. }
  1713.