home *** CD-ROM | disk | FTP | other *** search
/ Frozen Fish 1: Amiga / FrozenFish-Apr94.iso / bbs / alib / d5xx / d534 / term.lha / Term / Source.LZH / TerminalPanel.c < prev    next >
C/C++ Source or Header  |  1991-07-06  |  17KB  |  606 lines

  1. /* $Revision Header * Header built automatically - do not edit! *************
  2.  *
  3.  *    (C) Copyright 1990 by Olaf 'Olsen' Barthel & MXM
  4.  *
  5.  *    Name .....: TerminalPanel.c
  6.  *    Created ..: Monday 21-Jan-91 20:12
  7.  *    Revision .: 0
  8.  *
  9.  *    Date            Author          Comment
  10.  *    =========       ========        ====================
  11.  *    21-Jan-91       Olsen           Created this file!
  12.  *
  13.  * $Revision Header ********************************************************/
  14.  
  15. #include "TermGlobal.h"
  16.  
  17. enum    {    GAD_FILTER,GAD_DESTRBS,GAD_AUDBEL,GAD_VISBEL,GAD_FORCE,GAD_DISABLE,
  18.         GAD_CR,GAD_LF,GAD_COLOUR,GAD_EMULATION,GAD_FONT,GAD_USE,GAD_CANCEL };
  19.  
  20. #define WIDTH    303
  21. #define HEIGHT    165
  22.  
  23. STATIC STRPTR CRType[4] =
  24. {
  25.     (STRPTR)"Ignore",
  26.     (STRPTR)"As CR",
  27.     (STRPTR)"As CR+LF",
  28.     NULL
  29. };
  30.  
  31. STATIC STRPTR LFType[4] =
  32. {
  33.     (STRPTR)"Ignore",
  34.     (STRPTR)"As LF",
  35.     (STRPTR)"As LF+CR",
  36.     NULL
  37. };
  38.  
  39. STATIC STRPTR Emulation[4] =
  40. {
  41.     (STRPTR)"ANSI/VT100",
  42.     (STRPTR)"Atomic",
  43.     (STRPTR)"TTY",
  44.     NULL
  45. };
  46.  
  47. STATIC STRPTR ColourMode[5] =
  48. {
  49.     (STRPTR)"Amiga",
  50.     (STRPTR)"8 Colours (Blink)",
  51.     (STRPTR)"16 Colours",
  52.     (STRPTR)"Mono",
  53.     NULL
  54. };
  55.  
  56. STATIC STRPTR Fonts[3] =
  57. {
  58.     (STRPTR)"Topaz",
  59.     (STRPTR)"IBM PC Style",
  60.     NULL
  61. };
  62.  
  63.     /* TRUE if screen mode limits colour mode. */
  64.  
  65. STATIC BYTE Limited;
  66.  
  67. enum    {    MEN_FILTER=1,MEN_DESTRBS,MEN_AUDBEL,MEN_VISBEL,MEN_FORCE,MEN_DISABLE,
  68.         MEN_CR,MEN_LF,MEN_COLOUR,MEN_EMULATIONCTRL,MEN_FONT,MEN_USE,MEN_CANCEL,
  69.         MEN_QUITPANEL };
  70.  
  71. STATIC struct NewMenu TerminalMenu[] =
  72. {
  73.     { NM_TITLE, "Project",         0 , 0, 0, (APTR)0},
  74.     {  NM_ITEM, "Capture Filter",    "F", 0, 0, (APTR)MEN_FILTER},
  75.     {  NM_ITEM, NM_BARLABEL,     0 , 0, 0, (APTR)0},
  76.     {  NM_ITEM, "Backspace",    "B", 0, 0, (APTR)MEN_DESTRBS},
  77.     {  NM_ITEM, "Audible Bell",    "A", 0, 0, (APTR)MEN_AUDBEL},
  78.     {  NM_ITEM, "Visible Bell",    "V", 0, 0, (APTR)MEN_VISBEL},
  79.     {  NM_ITEM, "Eighty Columns",    "8", 0, 0, (APTR)MEN_FORCE},
  80.     {  NM_ITEM, "Stop Blinking",    "S", 0, 0, (APTR)MEN_DISABLE},
  81.     {  NM_ITEM, NM_BARLABEL,     0 , 0, 0, (APTR)0},
  82.     {  NM_ITEM, "Send CR",        "R", 0, 0, (APTR)MEN_CR},
  83.     {  NM_ITEM, "Send LF",        "L", 0, 0, (APTR)MEN_LF},
  84.     {  NM_ITEM, NM_BARLABEL,     0 , 0, 0, (APTR)0},
  85.     {  NM_ITEM, "Colour",        "O", 0, 0, (APTR)MEN_COLOUR},
  86.     {  NM_ITEM, "Emulation",    "E", 0, 0, (APTR)MEN_EMULATIONCTRL},
  87.     {  NM_ITEM, "Font",        "N", 0, 0, (APTR)MEN_FONT},
  88.     {  NM_ITEM, NM_BARLABEL,     0 , 0, 0, (APTR)0},
  89.     {  NM_ITEM, "Use",        "U", 0, 0, (APTR)MEN_USE},
  90.     {  NM_ITEM, "Cancel",        "C", 0, 0, (APTR)MEN_CANCEL},
  91.     {  NM_ITEM, NM_BARLABEL,     0 , 0, 0, (APTR)0},
  92.     {  NM_ITEM, "Quit",        "Q", 0, 0, (APTR)MEN_QUITPANEL},
  93.     { NM_END, 0,             0 , 0, 0, (APTR)0}
  94. };
  95.  
  96. STATIC struct Gadget *
  97. CreateAllGadgets(struct Configuration *Config,struct Gadget *GadgetArray[],struct Gadget **GadgetList,APTR VisualInfo,UWORD TopEdge)
  98. {
  99.     struct Gadget        *Gadget;
  100.     struct NewGadget     NewGadget;
  101.     UWORD             Counter = 0;
  102.  
  103.     if(Gadget = CreateContext(GadgetList))
  104.     {
  105.         NewGadget . ng_Width        = 164;
  106.         NewGadget . ng_Height        = 12;
  107.         NewGadget . ng_GadgetText    = "Capture _Filter";
  108.         NewGadget . ng_TextAttr        = &DefaultFont;
  109.         NewGadget . ng_VisualInfo    = VisualInfo;
  110.         NewGadget . ng_GadgetID        = Counter;
  111.         NewGadget . ng_Flags        = NG_HIGHLABEL;
  112.         NewGadget . ng_LeftEdge        = (strlen(NewGadget . ng_GadgetText) + 2 - 1) * 8 + 1;
  113.         NewGadget . ng_TopEdge        = 1 + TopEdge;
  114.  
  115.         GadgetArray[Counter++] = Gadget = CreateGadget(CHECKBOX_KIND,Gadget,&NewGadget,
  116.             GT_Underscore,    '_',
  117.             GTCB_Checked,    Config -> CaptureFilter,
  118.         TAG_DONE);
  119.  
  120.         NewGadget . ng_GadgetText    = "Destructive _BS";
  121.         NewGadget . ng_GadgetID        = Counter;
  122.         NewGadget . ng_TopEdge        = Gadget -> TopEdge + Gadget -> Height + 1;
  123.  
  124.         GadgetArray[Counter++] = Gadget = CreateGadget(CHECKBOX_KIND,Gadget,&NewGadget,
  125.             GT_Underscore,    '_',
  126.             GTCB_Checked,    Config -> DestructiveBackspace,
  127.         TAG_DONE);
  128.  
  129.         NewGadget . ng_GadgetText    = "_Audible Bell";
  130.         NewGadget . ng_GadgetID        = Counter;
  131.         NewGadget . ng_TopEdge        = Gadget -> TopEdge + Gadget -> Height + 1;
  132.  
  133.         GadgetArray[Counter++] = Gadget = CreateGadget(CHECKBOX_KIND,Gadget,&NewGadget,
  134.             GT_Underscore,    '_',
  135.             GTCB_Checked,    Config -> AudibleBell,
  136.         TAG_DONE);
  137.  
  138.         NewGadget . ng_GadgetText    = "_Visible Bell";
  139.         NewGadget . ng_GadgetID        = Counter;
  140.         NewGadget . ng_TopEdge        = Gadget -> TopEdge + Gadget -> Height + 1;
  141.  
  142.         GadgetArray[Counter++] = Gadget = CreateGadget(CHECKBOX_KIND,Gadget,&NewGadget,
  143.             GT_Underscore,    '_',
  144.             GTCB_Checked,    Config -> VisibleBell,
  145.         TAG_DONE);
  146.  
  147.         NewGadget . ng_GadgetText    = "Force _80 × 24";
  148.         NewGadget . ng_GadgetID        = Counter;
  149.         NewGadget . ng_TopEdge        = Gadget -> TopEdge + Gadget -> Height + 1;
  150.  
  151.         GadgetArray[Counter++] = Gadget = CreateGadget(CHECKBOX_KIND,Gadget,&NewGadget,
  152.             GT_Underscore,    '_',
  153.             GTCB_Checked,    Config -> EightyColumns,
  154.         TAG_DONE);
  155.  
  156.         NewGadget . ng_GadgetText    = "_Stop Blinking";
  157.         NewGadget . ng_GadgetID        = Counter;
  158.         NewGadget . ng_TopEdge        = Gadget -> TopEdge + Gadget -> Height + 1;
  159.  
  160.         GadgetArray[Counter++] = Gadget = CreateGadget(CHECKBOX_KIND,Gadget,&NewGadget,
  161.             GT_Underscore,    '_',
  162.             GTCB_Checked,    Config -> DisableBlinking,
  163.         TAG_DONE);
  164.  
  165.         NewGadget . ng_GadgetText    = "Send C_R";
  166.         NewGadget . ng_GadgetID        = Counter;
  167.         NewGadget . ng_TopEdge        = Gadget -> TopEdge + Gadget -> Height + 2;
  168.  
  169.         GadgetArray[Counter++] = Gadget = CreateGadget(CYCLE_KIND,Gadget,&NewGadget,
  170.             GT_Underscore,    '_',
  171.             GTCY_Labels,    CRType,
  172.             GTCY_Active,    Config -> SendCR,
  173.         TAG_DONE);
  174.  
  175.         NewGadget . ng_GadgetText    = "Send _LF";
  176.         NewGadget . ng_GadgetID        = Counter;
  177.         NewGadget . ng_TopEdge        = Gadget -> TopEdge + Gadget -> Height + 1;
  178.  
  179.         GadgetArray[Counter++] = Gadget = CreateGadget(CYCLE_KIND,Gadget,&NewGadget,
  180.             GT_Underscore,    '_',
  181.             GTCY_Labels,    LFType,
  182.             GTCY_Active,    Config -> SendLF,
  183.         TAG_DONE);
  184.  
  185.         NewGadget . ng_GadgetText    = "Col_our";
  186.         NewGadget . ng_GadgetID        = Counter;
  187.         NewGadget . ng_TopEdge        = Gadget -> TopEdge + Gadget -> Height + 1;
  188.  
  189.         switch(Config -> DisplayMode & ~MONITOR_ID_MASK)
  190.         {
  191.             case HIRES_KEY:
  192.             case HIRESLACE_KEY:    Limited = FALSE;
  193.                         break;
  194.  
  195.             default:        Limited = TRUE;
  196.                         break;
  197.         }
  198.  
  199.         GadgetArray[Counter++] = Gadget = CreateGadget(CYCLE_KIND,Gadget,&NewGadget,
  200.             GT_Underscore,    '_',
  201.             GTCY_Labels,    ColourMode,
  202.             GTCY_Active,    Config -> ColourMode,
  203.         TAG_DONE);
  204.  
  205.         NewGadget . ng_GadgetText    = "_Emulation";
  206.         NewGadget . ng_GadgetID        = Counter;
  207.         NewGadget . ng_TopEdge        = Gadget -> TopEdge + Gadget -> Height + 1;
  208.  
  209.         GadgetArray[Counter++] = Gadget = CreateGadget(CYCLE_KIND,Gadget,&NewGadget,
  210.             GT_Underscore,    '_',
  211.             GTCY_Labels,    Emulation,
  212.             GTCY_Active,    Config -> Emulation,
  213.         TAG_DONE);
  214.  
  215.         NewGadget . ng_GadgetText    = "Fo_nt";
  216.         NewGadget . ng_GadgetID        = Counter;
  217.         NewGadget . ng_TopEdge        = Gadget -> TopEdge + Gadget -> Height + 1;
  218.  
  219.         if(IBM)
  220.         {
  221.             GadgetArray[Counter++] = Gadget = CreateGadget(CYCLE_KIND,Gadget,&NewGadget,
  222.                 GT_Underscore,    '_',
  223.                 GTCY_Labels,    Fonts,
  224.                 GTCY_Active,    Config -> Font,
  225.             TAG_DONE);
  226.         }
  227.         else
  228.         {
  229.             GadgetArray[Counter++] = Gadget = CreateGadget(CYCLE_KIND,Gadget,&NewGadget,
  230.                 GT_Underscore,    '_',
  231.                 GTCY_Labels,    Fonts,
  232.                 GTCY_Active,    0,
  233.                 GA_Disabled,    TRUE,
  234.             TAG_DONE);
  235.         }
  236.  
  237.         NewGadget . ng_Width        = 52;
  238.         NewGadget . ng_Height        = 12;
  239.         NewGadget . ng_GadgetText    = "_Use";
  240.         NewGadget . ng_GadgetID        = Counter;
  241.         NewGadget . ng_Flags        = 0;
  242.         NewGadget . ng_LeftEdge        = 10;
  243.         NewGadget . ng_TopEdge        = HEIGHT - 3 - NewGadget . ng_Height;
  244.  
  245.         GadgetArray[Counter++] = Gadget = CreateGadget(BUTTON_KIND,Gadget,&NewGadget,
  246.             GT_Underscore,    '_',
  247.         TAG_DONE);
  248.  
  249.         NewGadget . ng_GadgetText    = "_Cancel";
  250.         NewGadget . ng_GadgetID        = Counter;
  251.         NewGadget . ng_LeftEdge        = WIDTH - 10 - NewGadget . ng_Width;
  252.  
  253.         GadgetArray[Counter++] = Gadget = CreateGadget(BUTTON_KIND,Gadget,&NewGadget,
  254.             GT_Underscore,    '_',
  255.         TAG_DONE);
  256.     }
  257.  
  258.     return(Gadget);
  259. }
  260.  
  261. BYTE
  262. TerminalPanel(struct Configuration *Config)
  263. {
  264.     struct Window    *PanelWindow;
  265.     struct Menu    *PanelMenu;
  266.     struct Gadget    *GadgetList;
  267.     struct Gadget    *GadgetArray[GAD_CANCEL + 1];
  268.     LONG Value;
  269.  
  270.     CopyMem(Config,&PrivateConfig,sizeof(struct Configuration));
  271.  
  272.     if(CreateAllGadgets(Config,&GadgetArray[0],&GadgetList,VisualInfo,Screen -> WBorTop + Screen -> Font -> ta_YSize + 1))
  273.     {
  274.         if(PanelMenu = CreateMenus(TerminalMenu,
  275.             GTMN_FrontPen, 0,
  276.         TAG_DONE))
  277.         {
  278.             if(LayoutMenus(PanelMenu,VisualInfo,
  279.                 GTMN_TextAttr,&DefaultFont,
  280.             TAG_DONE))
  281.             {
  282.                 if(PanelWindow = OpenWindowTags(NULL,
  283.                     WA_Left,    (Screen -> Width - WIDTH) >> 1,
  284.                     WA_Top,        (Screen -> Height - HEIGHT) >> 1,
  285.                     WA_Width,    WIDTH,
  286.                     WA_Height,    HEIGHT,
  287.  
  288.                     WA_Activate,    TRUE,
  289.                     WA_DragBar,    TRUE,
  290.                     WA_DepthGadget,    TRUE,
  291.                     WA_RMBTrap,    TRUE,
  292.                     WA_DepthGadget,    TRUE,
  293.                     WA_CloseGadget,    TRUE,
  294.                     WA_CustomScreen,Screen,
  295.  
  296.                     WA_IDCMP,    IDCMP_CLOSEWINDOW | SLIDERIDCMP | CHECKBOXIDCMP | LISTVIEWIDCMP | IDCMP_MENUPICK,
  297.  
  298.                     WA_Title,    "Terminal Preferences",
  299.                 TAG_DONE))
  300.                 {
  301.                     struct IntuiMessage    *Massage;
  302.                     ULONG             Class,Code;
  303.                     struct Gadget        *Gadget;
  304.                     BYTE             Terminated = FALSE;
  305.  
  306.                     PushWindow(PanelWindow);
  307.  
  308.                     AddGList(PanelWindow,GadgetList,(UWORD)-1,(UWORD)-1,NULL);
  309.                     RefreshGList(GadgetList,PanelWindow,NULL,(UWORD)-1);
  310.                     GT_RefreshWindow(PanelWindow,NULL);
  311.  
  312.                     SetMenuStrip(PanelWindow,PanelMenu);
  313.  
  314.                     PanelWindow -> Flags &= ~WFLG_RMBTRAP;
  315.  
  316.                     while(!Terminated)
  317.                     {
  318.                         WaitPort(PanelWindow -> UserPort);
  319.  
  320.                         while(!Terminated && (Massage = (struct IntuiMessage *)GT_GetIMsg(PanelWindow -> UserPort)))
  321.                         {
  322.                             Class    = Massage -> Class;
  323.                             Code    = Massage -> Code;
  324.                             Gadget    = (struct Gadget *)Massage -> IAddress;
  325.  
  326.                             GT_ReplyIMsg(Massage);
  327.  
  328.                             if(Class == IDCMP_MENUPICK)
  329.                             {
  330.                                 struct MenuItem *MenuItem;
  331.  
  332.                                 while(Code != MENUNULL)
  333.                                 {
  334.                                     MenuItem = ItemAddress(PanelMenu,Code);
  335.  
  336.                                     switch((ULONG)MENU_USERDATA(MenuItem))
  337.                                     {
  338.                                         case MEN_QUITPANEL:    Class = IDCMP_CLOSEWINDOW;
  339.                                                     break;
  340.  
  341.                                         case MEN_FILTER:    GT_SetGadgetAttrs(GadgetArray[GAD_FILTER],PanelWindow,NULL,
  342.                                                         GTCB_Checked,GadgetArray[GAD_FILTER] -> Flags & GFLG_SELECTED ? FALSE : TRUE,
  343.                                                     TAG_DONE);
  344.  
  345.                                                     break;
  346.  
  347.                                         case MEN_DESTRBS:    GT_SetGadgetAttrs(GadgetArray[GAD_DESTRBS],PanelWindow,NULL,
  348.                                                         GTCB_Checked,GadgetArray[GAD_DESTRBS] -> Flags & GFLG_SELECTED ? FALSE : TRUE,
  349.                                                     TAG_DONE);
  350.  
  351.                                                     break;
  352.  
  353.                                         case MEN_AUDBEL:    GT_SetGadgetAttrs(GadgetArray[GAD_AUDBEL],PanelWindow,NULL,
  354.                                                         GTCB_Checked,GadgetArray[GAD_AUDBEL] -> Flags & GFLG_SELECTED ? FALSE : TRUE,
  355.                                                     TAG_DONE);
  356.  
  357.                                                     break;
  358.  
  359.                                         case MEN_VISBEL:    GT_SetGadgetAttrs(GadgetArray[GAD_VISBEL],PanelWindow,NULL,
  360.                                                         GTCB_Checked,GadgetArray[GAD_VISBEL] -> Flags & GFLG_SELECTED ? FALSE : TRUE,
  361.                                                     TAG_DONE);
  362.  
  363.                                                     break;
  364.  
  365.                                         case MEN_FORCE:        GT_SetGadgetAttrs(GadgetArray[GAD_FORCE],PanelWindow,NULL,
  366.                                                         GTCB_Checked,GadgetArray[GAD_FORCE] -> Flags & GFLG_SELECTED ? FALSE : TRUE,
  367.                                                     TAG_DONE);
  368.  
  369.                                                     break;
  370.  
  371.                                         case MEN_DISABLE:        GT_SetGadgetAttrs(GadgetArray[GAD_DISABLE],PanelWindow,NULL,
  372.                                                         GTCB_Checked,GadgetArray[GAD_DISABLE] -> Flags & GFLG_SELECTED ? FALSE : TRUE,
  373.                                                     TAG_DONE);
  374.  
  375.                                                     break;
  376.  
  377.                                         case MEN_CR:        if(Config -> SendCR == CR_ASCRLF)
  378.                                                         Value = CR_IGNORE;
  379.                                                     else
  380.                                                         Value = Config -> SendCR + 1;
  381.  
  382.                                                     GT_SetGadgetAttrs(GadgetArray[GAD_CR],PanelWindow,NULL,
  383.                                                         GTCY_Active,Value,
  384.                                                     TAG_DONE);
  385.  
  386.                                                     Class = IDCMP_GADGETUP;
  387.                                                     Gadget = GadgetArray[GAD_CR];
  388.                                                     Code = Value;
  389.  
  390.                                                     goto GadCheck;
  391.  
  392.                                         case MEN_LF:        if(Config -> SendLF == LF_ASLFCR)
  393.                                                         Value = LF_IGNORE;
  394.                                                     else
  395.                                                         Value = Config -> SendLF + 1;
  396.  
  397.                                                     GT_SetGadgetAttrs(GadgetArray[GAD_LF],PanelWindow,NULL,
  398.                                                         GTCY_Active,Value,
  399.                                                     TAG_DONE);
  400.  
  401.                                                     Class = IDCMP_GADGETUP;
  402.                                                     Gadget = GadgetArray[GAD_LF];
  403.                                                     Code = Value;
  404.  
  405.                                                     goto GadCheck;
  406.  
  407.                                         case MEN_COLOUR:    if(Config -> ColourMode == COLOUR_MONO)
  408.                                                         Value = COLOUR_AMIGA;
  409.                                                     else
  410.                                                         Value = Config -> ColourMode + 1;
  411.  
  412.                                                     GT_SetGadgetAttrs(GadgetArray[GAD_COLOUR],PanelWindow,NULL,
  413.                                                         GTCY_Active,Value,
  414.                                                     TAG_DONE);
  415.  
  416.                                                     Class = IDCMP_GADGETUP;
  417.                                                     Gadget = GadgetArray[GAD_COLOUR];
  418.                                                     Code = Value;
  419.  
  420.                                                     goto GadCheck;
  421.  
  422.                                         case MEN_EMULATIONCTRL:    if(Config -> Emulation == EMULATION_TTY)
  423.                                                         Value = EMULATION_ANSIVT100;
  424.                                                     else
  425.                                                         Value = Config -> Emulation + 1;
  426.  
  427.                                                     GT_SetGadgetAttrs(GadgetArray[GAD_EMULATION],PanelWindow,NULL,
  428.                                                         GTCY_Active,Value,
  429.                                                     TAG_DONE);
  430.  
  431.                                                     Class = IDCMP_GADGETUP;
  432.                                                     Gadget = GadgetArray[GAD_EMULATION];
  433.                                                     Code = Value;
  434.  
  435.                                                     goto GadCheck;
  436.  
  437.                                         case MEN_FONT:        if(Config -> Font == FONT_IBM)
  438.                                                         Value = FONT_TOPAZ;
  439.                                                     else
  440.                                                         Value = FONT_IBM;
  441.  
  442.                                                     GT_SetGadgetAttrs(GadgetArray[GAD_FONT],PanelWindow,NULL,
  443.                                                         GTCY_Active,Value,
  444.                                                     TAG_DONE);
  445.  
  446.                                                     Class = IDCMP_GADGETUP;
  447.                                                     Gadget = GadgetArray[GAD_FONT];
  448.                                                     Code = Value;
  449.  
  450.                                                     goto GadCheck;
  451.  
  452.                                         case MEN_USE:        Class = IDCMP_GADGETUP;
  453.                                                     Gadget = GadgetArray[GAD_USE];
  454.                                                     break;
  455.  
  456.                                         case MEN_CANCEL:    Class = IDCMP_GADGETUP;
  457.                                                     Gadget = GadgetArray[GAD_CANCEL];
  458.                                                     break;
  459.  
  460.                                         default:        break;
  461.                                     }
  462.  
  463.                                     Code = MenuItem -> NextSelect;
  464.                                 }
  465.                             }
  466.  
  467.                             if(Class == IDCMP_CLOSEWINDOW)
  468.                                 Terminated = TRUE;
  469.  
  470. GadCheck:                        if(Class == IDCMP_GADGETUP)
  471.                             {
  472.                                 switch(Gadget -> GadgetID)
  473.                                 {
  474.                                     case GAD_CR:        Config -> SendCR = Code;
  475.                                                 break;
  476.  
  477.                                     case GAD_LF:        Config -> SendLF = Code;
  478.                                                 break;
  479.  
  480.                                     case GAD_COLOUR:    Config -> ColourMode = Code;
  481.  
  482.                                                 if(Code > COLOUR_AMIGA && (Config -> Emulation == EMULATION_ATOMIC || Limited))
  483.                                                 {
  484.                                                     GT_SetGadgetAttrs(GadgetArray[GAD_COLOUR],PanelWindow,NULL,
  485.                                                         GTCY_Active,COLOUR_MONO,
  486.                                                     TAG_DONE);
  487.  
  488.                                                     Config -> ColourMode = COLOUR_MONO;
  489.                                                 }
  490.  
  491.                                                 break;
  492.  
  493.                                     case GAD_EMULATION:    Config -> Emulation = Code;
  494.  
  495.                                                 if(Code == EMULATION_ATOMIC && Config -> ColourMode != COLOUR_AMIGA && Config -> ColourMode != COLOUR_MONO)
  496.                                                 {
  497.                                                     GT_SetGadgetAttrs(GadgetArray[GAD_COLOUR],PanelWindow,NULL,
  498.                                                         GTCY_Active,COLOUR_MONO,
  499.                                                     TAG_DONE);
  500.  
  501.                                                     Config -> ColourMode = COLOUR_MONO;
  502.                                                 }
  503.  
  504.                                                 break;
  505.  
  506.                                     case GAD_FONT:        Config -> Font = Code;
  507.                                                 break;
  508.  
  509.                                     case GAD_USE:        Terminated = TRUE;
  510.  
  511.                                                 Config -> CaptureFilter        = GadgetArray[GAD_FILTER] -> Flags & GFLG_SELECTED;
  512.                                                 Config -> DestructiveBackspace    = GadgetArray[GAD_DESTRBS] -> Flags & GFLG_SELECTED;
  513.                                                 Config -> AudibleBell        = GadgetArray[GAD_AUDBEL] -> Flags & GFLG_SELECTED;
  514.                                                 Config -> VisibleBell        = GadgetArray[GAD_VISBEL] -> Flags & GFLG_SELECTED;
  515.                                                 Config -> EightyColumns        = GadgetArray[GAD_FORCE] -> Flags & GFLG_SELECTED;
  516.                                                 Config -> DisableBlinking    = GadgetArray[GAD_DISABLE] -> Flags & GFLG_SELECTED;
  517.  
  518.                                                 switch(Config -> ColourMode)
  519.                                                 {
  520.                                                     case COLOUR_EIGHT:    CopyMem(&ANSIColours[0],&Config -> Colours[0],16 * sizeof(UWORD));
  521.                                                                 break;
  522.  
  523.                                                     case COLOUR_SIXTEEN:    CopyMem(&EGAColours[0],&Config -> Colours[0],16 * sizeof(UWORD));
  524.                                                                 break;
  525.  
  526.                                                     case COLOUR_AMIGA:    CopyMem(&DefaultColours[0],&Config -> Colours[0],16 * sizeof(UWORD));
  527.                                                                 break;
  528.  
  529.                                                     case COLOUR_MONO:        CopyMem(&AtomicColours[0],&Config -> Colours[0],16 * sizeof(UWORD));
  530.                                                                 break;
  531.                                                 }
  532.  
  533.                                                 break;
  534.  
  535.                                     case GAD_CANCEL:    Terminated = TRUE;
  536.  
  537.                                                 CopyMem(&PrivateConfig,Config,sizeof(struct Configuration));
  538.  
  539.                                                 break;
  540.  
  541.                                     default:        break;
  542.                                 }
  543.                             }
  544.                         }
  545.                     }
  546.  
  547.                     PanelWindow -> Flags |= WFLG_RMBTRAP;
  548.  
  549.                     ClearMenuStrip(PanelWindow);
  550.  
  551.                     RemoveGList(PanelWindow,GadgetList,(UWORD)-1);
  552.  
  553.                     PopWindow();
  554.  
  555.                     CloseWindow(PanelWindow);
  556.                 }
  557.             }
  558.  
  559.             FreeMenus(PanelMenu);
  560.         }
  561.  
  562.         FreeGadgets(GadgetList);
  563.     }
  564.  
  565.     if(Config -> EightyColumns)
  566.     {
  567.         if(Config -> FontScale == SCALE_HALF)
  568.             LastColumn = 131;
  569.         else
  570.         {
  571.             LastColumn    = 79;
  572.             LastLine    = 23;
  573.  
  574.             BackupRender();
  575.  
  576.             SetAPen(RPort,0);
  577.             RectFill(RPort,0,(LastLine + 1) * 8,Window -> Width - 1,Window -> Height - 1);
  578.  
  579.             BackupRender();
  580.  
  581.             if(CursorY > LastLine)
  582.             {
  583.                 CursorY = LastLine;
  584.  
  585.                 SetCursor();
  586.             }
  587.         }
  588.     }
  589.     else
  590.     {
  591.         LastColumn    = (Window -> Width >> 3) - 1;
  592.         LastLine    = (Window -> Height >> 3) - 1;
  593.  
  594.         if(!UseRegion)
  595.             Bottom = LastLine;
  596.     }
  597.  
  598.     if(Config -> DisableBlinking)
  599.         LoadRGB4(VPort,&Config -> Colours[0],16);
  600.  
  601.     if(PrivateConfig . Font != Config -> Font || PrivateConfig . ColourMode != Config -> ColourMode)
  602.         return(TRUE);
  603.     else
  604.         return(FALSE);
  605. }
  606.