home *** CD-ROM | disk | FTP | other *** search
/ The Fred Fish Collection 1.5 / ffcollection-1-5-1992-11.iso / ff_disks / 500-599 / ff589.lza / Term / TermSrc.lha / TerminalPanel.c < prev    next >
C/C++ Source or Header  |  1991-12-04  |  24KB  |  822 lines

  1. /* $Revision Header * Header built automatically - do not edit! *************
  2.  *
  3.  *    (C) Copyright 1991 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_SWAP,GAD_STRIP,GAD_DISABLE,GAD_RASTER,
  18.         GAD_CR,GAD_LF,GAD_BELL,GAD_SIZE,GAD_COLOUR,GAD_EMULATIONCTRL,
  19.         GAD_EMUNAME,GAD_NEWEMU,GAD_FONT,GAD_USE,GAD_CANCEL,GAD_DEFAULT };
  20.  
  21. #define WIDTH    449
  22. #define HEIGHT    147
  23.  
  24. STATIC STRPTR DisplaySizeType[4] =
  25. {
  26.     (STRPTR)"Screen Size",
  27.     (STRPTR)"80 × 24 (VT100)",
  28.     (STRPTR)"80 × 25 (ANSI)",
  29.     NULL
  30. };
  31.  
  32. STATIC STRPTR BellType[5] =
  33. {
  34.     (STRPTR)"Ignore",
  35.     (STRPTR)"Visual",
  36.     (STRPTR)"Audible",
  37.     (STRPTR)"Visual & Audible",
  38.     NULL
  39. };
  40.  
  41. STATIC STRPTR CRType[4] =
  42. {
  43.     (STRPTR)"Ignore",
  44.     (STRPTR)"As CR",
  45.     (STRPTR)"As CR+LF",
  46.     NULL
  47. };
  48.  
  49. STATIC STRPTR LFType[4] =
  50. {
  51.     (STRPTR)"Ignore",
  52.     (STRPTR)"As LF",
  53.     (STRPTR)"As LF+CR",
  54.     NULL
  55. };
  56.  
  57. STATIC STRPTR Emulation[5] =
  58. {
  59.     (STRPTR)"ANSI/VT100",
  60.     (STRPTR)"Atomic",
  61.     (STRPTR)"TTY",
  62.     (STRPTR)"External",
  63.     NULL
  64. };
  65.  
  66. STATIC STRPTR ColourMode[5] =
  67. {
  68.     (STRPTR)"Amiga",
  69.     (STRPTR)"8 Colours (Blink)",
  70.     (STRPTR)"16 Colours",
  71.     (STRPTR)"Mono",
  72.     NULL
  73. };
  74.  
  75. STATIC STRPTR Fonts[3] =
  76. {
  77.     (STRPTR)"Topaz",
  78.     (STRPTR)"IBM PC Style",
  79.     NULL
  80. };
  81.  
  82.     /* TRUE if screen mode limits colour mode. */
  83.  
  84. STATIC BYTE Limited;
  85.  
  86.     /* Which item to select for current combination of bell modes. */
  87.  
  88. STATIC BYTE BellMode;
  89.  
  90. enum    {    MEN_FILTER=1,MEN_DESTRBS,MEN_SWAP,MEN_STRIP,MEN_DISABLE,MEN_RASTER,
  91.         MEN_CR,MEN_LF,MEN_BELL,MEN_SIZE,MEN_COLOUR,MEN_EMULATIONCTRL,
  92.         MEN_EMUNAME,MEN_NEWEMU,MEN_FONT,MEN_USE,MEN_CANCEL,MEN_DEFAULT };
  93.  
  94. STATIC struct NewMenu TerminalMenu[] =
  95. {
  96.     { NM_TITLE, "Project",         0 , 0, 0, (APTR)0},
  97.     {  NM_ITEM, "Capture Filter",    "F", 0, 0, (APTR)MEN_FILTER},
  98.     {  NM_ITEM, "Destructive BS",    "S", 0, 0, (APTR)MEN_DESTRBS},
  99.     {  NM_ITEM, "Swap DEL <-> BS",    "W", 0, 0, (APTR)MEN_SWAP},
  100.     {  NM_ITEM, "Strip Bit 8",    "T", 0, 0, (APTR)MEN_STRIP},
  101.     {  NM_ITEM, "Stop Blinking",    "K", 0, 0, (APTR)MEN_DISABLE},
  102.     {  NM_ITEM, "Raster Enabled",    "A", 0, 0, (APTR)MEN_RASTER},
  103.     {  NM_ITEM, NM_BARLABEL,     0 , 0, 0, (APTR)0},
  104.     {  NM_ITEM, "Send CR",        "R", 0, 0, (APTR)MEN_CR},
  105.     {  NM_ITEM, "Send LF",        "L", 0, 0, (APTR)MEN_LF},
  106.     {  NM_ITEM, "Bell",        "B", 0, 0, (APTR)MEN_BELL},
  107.     {  NM_ITEM, "Display Size",    "Y", 0, 0, (APTR)MEN_SIZE},
  108.     {  NM_ITEM, "Colour",        "O", 0, 0, (APTR)MEN_COLOUR},
  109.     {  NM_ITEM, "Emulation",    "E", 0, 0, (APTR)MEN_EMULATIONCTRL},
  110.     {  NM_ITEM, "Select New Emu.",    "N", 0, 0, (APTR)MEN_NEWEMU},
  111.     {  NM_ITEM, "Font",        "F", 0, 0, (APTR)MEN_FONT},
  112.     {  NM_ITEM, NM_BARLABEL,     0 , 0, 0, (APTR)0},
  113.     {  NM_ITEM, "Use",        "U", 0, 0, (APTR)MEN_USE},
  114.     {  NM_ITEM, "Cancel",        "C", 0, 0, (APTR)MEN_CANCEL},
  115.     {  NM_ITEM, NM_BARLABEL,     0 , 0, 0, (APTR)0},
  116.     {  NM_ITEM, "Quit",        "Q", 0, 0, (APTR)MEN_CANCEL},
  117.     { NM_END, 0,             0 , 0, 0, (APTR)0}
  118. };
  119.  
  120. STATIC struct Gadget *
  121. CreateAllGadgets(struct Configuration *Config,struct Gadget *GadgetArray[],struct Gadget **GadgetList,APTR VisualInfo,UWORD TopEdge)
  122. {
  123.     struct Gadget        *Gadget;
  124.     struct NewGadget     NewGadget;
  125.     UWORD             Counter = 0;
  126.  
  127.     memset(&NewGadget,0,sizeof(struct NewGadget));
  128.  
  129.     if(Gadget = CreateContext(GadgetList))
  130.     {
  131.         NewGadget . ng_Width        = 26;
  132.         NewGadget . ng_Height        = 12;
  133.         NewGadget . ng_GadgetText    = " Capture F_ilter";
  134.         NewGadget . ng_TextAttr        = &DefaultFont;
  135.         NewGadget . ng_VisualInfo    = VisualInfo;
  136.         NewGadget . ng_GadgetID        = Counter;
  137.         NewGadget . ng_LeftEdge        = (strlen(NewGadget . ng_GadgetText) + 2 - 1) * 8 + 1;
  138.         NewGadget . ng_TopEdge        = 1 + TopEdge;
  139.  
  140.         GadgetArray[Counter++] = Gadget = CreateGadget(CHECKBOX_KIND,Gadget,&NewGadget,
  141.             GT_Underscore,    '_',
  142.             GTCB_Checked,    Config -> CaptureFilter,
  143.         TAG_DONE);
  144.  
  145.         NewGadget . ng_GadgetText    = "Destructive B_S";
  146.         NewGadget . ng_GadgetID        = Counter;
  147.         NewGadget . ng_TopEdge        = NewGadget . ng_TopEdge + NewGadget . ng_Height + 1;
  148.  
  149.         GadgetArray[Counter++] = Gadget = CreateGadget(CHECKBOX_KIND,Gadget,&NewGadget,
  150.             GT_Underscore,    '_',
  151.             GTCB_Checked,    Config -> DestructiveBackspace,
  152.         TAG_DONE);
  153.  
  154.         NewGadget . ng_GadgetText    = "S_wap DEL <-> BS";
  155.         NewGadget . ng_GadgetID        = Counter;
  156.         NewGadget . ng_TopEdge        = NewGadget . ng_TopEdge + NewGadget . ng_Height + 1;
  157.  
  158.         GadgetArray[Counter++] = Gadget = CreateGadget(CHECKBOX_KIND,Gadget,&NewGadget,
  159.             GT_Underscore,    '_',
  160.             GTCB_Checked,    Config -> SwapBSDelete,
  161.         TAG_DONE);
  162.  
  163.         NewGadget . ng_GadgetText    = "S_trip Bit 8";
  164.         NewGadget . ng_GadgetID        = Counter;
  165.         NewGadget . ng_TopEdge        = NewGadget . ng_TopEdge + NewGadget . ng_Height + 1;
  166.  
  167.         GadgetArray[Counter++] = Gadget = CreateGadget(CHECKBOX_KIND,Gadget,&NewGadget,
  168.             GT_Underscore,    '_',
  169.             GTCB_Checked,    Config -> StripBit8,
  170.         TAG_DONE);
  171.  
  172.         NewGadget . ng_GadgetText    = "Stop Blin_king";
  173.         NewGadget . ng_GadgetID        = Counter;
  174.         NewGadget . ng_TopEdge        = NewGadget . ng_TopEdge + NewGadget . ng_Height + 1;
  175.  
  176.         GadgetArray[Counter++] = Gadget = CreateGadget(CHECKBOX_KIND,Gadget,&NewGadget,
  177.             GT_Underscore,    '_',
  178.             GTCB_Checked,    Config -> DisableBlinking,
  179.         TAG_DONE);
  180.  
  181.         NewGadget . ng_GadgetText    = "R_aster Enabled";
  182.         NewGadget . ng_GadgetID        = Counter;
  183.         NewGadget . ng_TopEdge        = NewGadget . ng_TopEdge + NewGadget . ng_Height + 1;
  184.  
  185.         GadgetArray[Counter++] = Gadget = CreateGadget(CHECKBOX_KIND,Gadget,&NewGadget,
  186.             GT_Underscore,    '_',
  187.             GTCB_Checked,    Config -> RasterEnabled,
  188.         TAG_DONE);
  189.  
  190.         NewGadget . ng_GadgetText    = "Send C_R";
  191.         NewGadget . ng_GadgetID        = Counter;
  192.         NewGadget . ng_TopEdge        = 1 + TopEdge;
  193.         NewGadget . ng_LeftEdge        = NewGadget . ng_LeftEdge + NewGadget . ng_Width + 8 * (strlen("Display Size") + 2);
  194.         NewGadget . ng_Width        = 164;
  195.  
  196.         GadgetArray[Counter++] = Gadget = CreateGadget(CYCLE_KIND,Gadget,&NewGadget,
  197.             GT_Underscore,    '_',
  198.             GTCY_Labels,    CRType,
  199.             GTCY_Active,    Config -> SendCR,
  200.         TAG_DONE);
  201.  
  202.         NewGadget . ng_GadgetText    = "Send _LF";
  203.         NewGadget . ng_GadgetID        = Counter;
  204.         NewGadget . ng_TopEdge        = NewGadget . ng_TopEdge + NewGadget . ng_Height + 1;
  205.  
  206.         GadgetArray[Counter++] = Gadget = CreateGadget(CYCLE_KIND,Gadget,&NewGadget,
  207.             GT_Underscore,    '_',
  208.             GTCY_Labels,    LFType,
  209.             GTCY_Active,    Config -> SendLF,
  210.         TAG_DONE);
  211.  
  212.         if(Config -> AudibleBell)
  213.         {
  214.             if(Config -> VisibleBell)
  215.                 BellMode = 3;
  216.             else
  217.                 BellMode = 2;
  218.         }
  219.         else
  220.         {
  221.             if(Config -> VisibleBell)
  222.                 BellMode = 1;
  223.             else
  224.                 BellMode = 0;
  225.         }
  226.  
  227.         NewGadget . ng_GadgetText    = "_Bell";
  228.         NewGadget . ng_GadgetID        = Counter;
  229.         NewGadget . ng_TopEdge        = NewGadget . ng_TopEdge + NewGadget . ng_Height + 1;
  230.  
  231.         GadgetArray[Counter++] = Gadget = CreateGadget(CYCLE_KIND,Gadget,&NewGadget,
  232.             GT_Underscore,    '_',
  233.             GTCY_Labels,    BellType,
  234.             GTCY_Active,    BellMode,
  235.         TAG_DONE);
  236.  
  237.         NewGadget . ng_GadgetText    = "Displa_y Size";
  238.         NewGadget . ng_GadgetID        = Counter;
  239.         NewGadget . ng_TopEdge        = NewGadget . ng_TopEdge + NewGadget . ng_Height + 1;
  240.  
  241.         GadgetArray[Counter++] = Gadget = CreateGadget(CYCLE_KIND,Gadget,&NewGadget,
  242.             GT_Underscore,    '_',
  243.             GTCY_Labels,    DisplaySizeType,
  244.             GTCY_Active,    Config -> EightyColumns,
  245.         TAG_DONE);
  246.  
  247.         NewGadget . ng_GadgetText    = "Col_our";
  248.         NewGadget . ng_GadgetID        = Counter;
  249.         NewGadget . ng_TopEdge        = NewGadget . ng_TopEdge + NewGadget . ng_Height + 1;
  250.  
  251.         switch(Config -> DisplayMode & ~MONITOR_ID_MASK)
  252.         {
  253.             case HIRES_KEY:
  254.             case HIRESLACE_KEY:    Limited = FALSE;
  255.                         break;
  256.  
  257.             default:        Limited = TRUE;
  258.                         break;
  259.         }
  260.  
  261.         GadgetArray[Counter++] = Gadget = CreateGadget(CYCLE_KIND,Gadget,&NewGadget,
  262.             GT_Underscore,    '_',
  263.             GTCY_Labels,    ColourMode,
  264.             GTCY_Active,    Config -> ColourMode,
  265.         TAG_DONE);
  266.  
  267.         NewGadget . ng_GadgetText    = "_Emulation";
  268.         NewGadget . ng_GadgetID        = Counter;
  269.         NewGadget . ng_TopEdge        = NewGadget . ng_TopEdge + NewGadget . ng_Height + 1;
  270.  
  271.         GadgetArray[Counter++] = Gadget = CreateGadget(CYCLE_KIND,Gadget,&NewGadget,
  272.             GT_Underscore,    '_',
  273.             GTCY_Labels,    Emulation,
  274.             GTCY_Active,    Config -> Emulation,
  275.         TAG_DONE);
  276.  
  277.         NewGadget . ng_GadgetText    = "Emu. Name";
  278.         NewGadget . ng_GadgetID        = Counter;
  279.         NewGadget . ng_TopEdge        = NewGadget . ng_TopEdge + NewGadget . ng_Height + 1;
  280.  
  281.         GadgetArray[Counter++] = Gadget = CreateGadget(STRING_KIND,Gadget,&NewGadget,
  282.             GTST_MaxChars,    256,
  283.             GTST_String,    Config -> EmulationName,
  284.             GA_Disabled,    Config -> Emulation != EMULATION_EXTERNAL,
  285.             GTST_EditHook,    &CommandHook,
  286.         TAG_DONE);
  287.  
  288.         NewGadget . ng_GadgetText    = "Select _New Emulation";
  289.         NewGadget . ng_GadgetID        = Counter;
  290.         NewGadget . ng_TopEdge        = NewGadget . ng_TopEdge + NewGadget . ng_Height + 1;
  291.  
  292.         GadgetArray[Counter++] = Gadget = CreateGadget(BUTTON_KIND,Gadget,&NewGadget,
  293.             GT_Underscore,    '_',
  294.             GA_Disabled,    Config -> Emulation != EMULATION_EXTERNAL,
  295.         TAG_DONE);
  296.  
  297.         NewGadget . ng_GadgetText    = "_Font";
  298.         NewGadget . ng_GadgetID        = Counter;
  299.         NewGadget . ng_TopEdge        = NewGadget . ng_TopEdge + NewGadget . ng_Height + 1;
  300.  
  301.         GadgetArray[Counter++] = Gadget = CreateGadget(CYCLE_KIND,Gadget,&NewGadget,
  302.             GT_Underscore,    '_',
  303.             GTCY_Labels,    Fonts,
  304.             GTCY_Active,    Config -> Font,
  305.             GA_Disabled,    (!IBM || Config -> Emulation == EMULATION_EXTERNAL),
  306.         TAG_DONE);
  307.  
  308.         NewGadget . ng_Width        = 52;
  309.         NewGadget . ng_Height        = 12;
  310.         NewGadget . ng_GadgetText    = "_Use";
  311.         NewGadget . ng_GadgetID        = Counter;
  312.         NewGadget . ng_Flags        = 0;
  313.         NewGadget . ng_LeftEdge        = 10;
  314.         NewGadget . ng_TopEdge        = HEIGHT - 3 - NewGadget . ng_Height;
  315.  
  316.         GadgetArray[Counter++] = Gadget = CreateGadget(BUTTON_KIND,Gadget,&NewGadget,
  317.             GT_Underscore,    '_',
  318.         TAG_DONE);
  319.  
  320.         NewGadget . ng_GadgetText    = "_Cancel";
  321.         NewGadget . ng_GadgetID        = Counter;
  322.         NewGadget . ng_LeftEdge        = WIDTH - 10 - NewGadget . ng_Width;
  323.  
  324.         GadgetArray[Counter++] = Gadget = CreateGadget(BUTTON_KIND,Gadget,&NewGadget,
  325.             GT_Underscore,    '_',
  326.         TAG_DONE);
  327. /*
  328.         NewGadget . ng_GadgetText    = "_Default";
  329.         NewGadget . ng_GadgetID        = Counter;
  330.         NewGadget . ng_Width        = 60;
  331.         NewGadget . ng_LeftEdge        = (WIDTH - NewGadget . ng_Width) >> 1;
  332.  
  333.         GadgetArray[Counter++] = Gadget = CreateGadget(BUTTON_KIND,Gadget,&NewGadget,
  334.             GT_Underscore,    '_',
  335.         TAG_DONE);*/
  336.     }
  337.  
  338.     return(Gadget);
  339. }
  340.  
  341.     /* SelectEmulator(UBYTE *Name,struct Window *ParentWindow):
  342.      *
  343.      *    Select a new emulator driver using the
  344.      *    asl.library file requester.
  345.      */
  346.  
  347. STATIC BYTE
  348. SelectEmulator(UBYTE *Name,struct Window *ParentWindow)
  349. {
  350.     struct FileRequester    *AslFileRequest;
  351.     UBYTE            *File,*Temp;
  352.     BYTE             NewDriver = FALSE;
  353.  
  354.     File = Name;
  355.  
  356.     strcpy(SharedBuffer,File);
  357.  
  358.     Temp = PathPart(SharedBuffer);
  359.  
  360.     Temp[0] = 0;
  361.  
  362.     File = FilePart(File);
  363.  
  364.     if(AslFileRequest = (struct FileRequester *)AllocAslRequestTags(ASL_FileRequest,
  365.         ASL_Window,    ParentWindow,
  366.         ASL_File,    File,
  367.         ASL_Dir,    SharedBuffer,
  368.         ASL_Hail,    "Select Emulator",
  369.         ASL_FuncFlags,    0,
  370.         ASL_Pattern,    "#?.XEM",
  371.         ASL_OKText,    "Select",
  372.     TAG_END))
  373.     {
  374.         if(AslRequestTags(AslFileRequest,TAG_DONE))
  375.         {
  376.             if(AslFileRequest -> rf_File[0])
  377.             {
  378.                 strcpy(SharedBuffer,AslFileRequest -> rf_Dir);
  379.  
  380.                 if(!AddPart(SharedBuffer,AslFileRequest -> rf_File,256))
  381.                     strcpy(SharedBuffer,AslFileRequest -> rf_File);
  382.  
  383.                 if(Stricmp(SharedBuffer,Name))
  384.                 {
  385.                     strcpy(Name,SharedBuffer);
  386.  
  387.                     NewDriver = TRUE;
  388.                 }
  389.             }
  390.         }
  391.  
  392.         FreeAslRequest(AslFileRequest);
  393.     }
  394.  
  395.     return(NewDriver);
  396. }
  397.  
  398. VOID
  399. TerminalPanel(struct Configuration *Config)
  400. {
  401.     struct Window    *PanelWindow;
  402.     struct Menu    *PanelMenu;
  403.     struct Gadget    *GadgetList = NULL;
  404.     struct Gadget    *GadgetArray[GAD_CANCEL + 1];
  405.     LONG         Value;
  406.     UBYTE         DummyBuffer[256];
  407.  
  408.     CopyMem(Config,&PrivateConfig,sizeof(struct Configuration));
  409.  
  410.     if(CreateAllGadgets(Config,&GadgetArray[0],&GadgetList,VisualInfo,Screen -> WBorTop + Screen -> Font -> ta_YSize + 1))
  411.     {
  412.         if(PanelMenu = CreateMenus(TerminalMenu,
  413.             GTMN_FrontPen, 0,
  414.         TAG_DONE))
  415.         {
  416.             if(LayoutMenus(PanelMenu,VisualInfo,
  417.                 GTMN_TextAttr,&DefaultFont,
  418.             TAG_DONE))
  419.             {
  420.                 if(PanelWindow = OpenWindowTags(NULL,
  421.                     WA_Left,    (Screen -> Width - WIDTH) >> 1,
  422.                     WA_Top,        (Screen -> Height - HEIGHT) >> 1,
  423.                     WA_Width,    WIDTH,
  424.                     WA_Height,    HEIGHT,
  425.  
  426.                     WA_Activate,    TRUE,
  427.                     WA_DragBar,    TRUE,
  428.                     WA_DepthGadget,    TRUE,
  429.                     WA_RMBTrap,    TRUE,
  430.                     WA_DepthGadget,    TRUE,
  431.                     WA_CloseGadget,    TRUE,
  432.                     WA_CustomScreen,Screen,
  433.  
  434.                     WA_IDCMP,    IDCMP_CLOSEWINDOW | SLIDERIDCMP | CHECKBOXIDCMP | LISTVIEWIDCMP | IDCMP_MENUPICK,
  435.  
  436.                     WA_Title,    "Terminal Preferences",
  437.                 TAG_DONE))
  438.                 {
  439.                     struct IntuiMessage    *Massage;
  440.                     ULONG             Class,Code;
  441.                     struct Gadget        *Gadget;
  442.                     BYTE             Terminated = FALSE;
  443.  
  444.                     PushWindow(PanelWindow);
  445.  
  446.                     AddGList(PanelWindow,GadgetList,(UWORD)-1,(UWORD)-1,NULL);
  447.                     RefreshGList(GadgetList,PanelWindow,NULL,(UWORD)-1);
  448.                     GT_RefreshWindow(PanelWindow,NULL);
  449.  
  450.                     SetMenuStrip(PanelWindow,PanelMenu);
  451.  
  452.                     if(Config -> Emulation != EMULATION_EXTERNAL)
  453.                         OffMenu(PanelWindow,FULLMENUNUM(0,13,0));
  454.  
  455.                     PanelWindow -> Flags &= ~WFLG_RMBTRAP;
  456.  
  457.                     if(!(GadgetArray[GAD_EMUNAME] -> Flags & GFLG_DISABLED))
  458.                     {
  459.                         ActivateGadget(GadgetArray[GAD_EMUNAME],PanelWindow,NULL);
  460.  
  461.                         ActiveGadget = GadgetArray[GAD_EMUNAME];
  462.                     }
  463.  
  464.                     while(!Terminated)
  465.                     {
  466.                         WaitPort(PanelWindow -> UserPort);
  467.  
  468.                         while(!Terminated && (Massage = (struct IntuiMessage *)GT_GetIMsg(PanelWindow -> UserPort)))
  469.                         {
  470.                             Class    = Massage -> Class;
  471.                             Code    = Massage -> Code;
  472.                             Gadget    = (struct Gadget *)Massage -> IAddress;
  473.  
  474.                             GT_ReplyIMsg(Massage);
  475.  
  476.                             if(Class == IDCMP_GADGETDOWN)
  477.                             {
  478.                                 if((Gadget -> GadgetType & GTYP_GTYPEMASK) == STRGADGET)
  479.                                     ActiveGadget = Gadget;
  480.                             }
  481.  
  482.                             if(Class == IDCMP_ACTIVEWINDOW && ActiveGadget)
  483.                                 ActivateGadget(ActiveGadget,PanelWindow,NULL);
  484.  
  485.                             if(Class == IDCMP_RAWKEY)
  486.                             {
  487.                                 if(Code == IECODE_UP_PREFIX|103 && CommandWindow == PanelWindow)
  488.                                     ActivateGadget(CommandGadget,PanelWindow,NULL);
  489.                             }
  490.  
  491.                             if(Class == IDCMP_MENUPICK)
  492.                             {
  493.                                 struct MenuItem *MenuItem;
  494.  
  495.                                 while(Code != MENUNULL)
  496.                                 {
  497.                                     MenuItem = ItemAddress(PanelMenu,Code);
  498.  
  499.                                     switch((ULONG)GTMENUITEM_USERDATA(MenuItem))
  500.                                     {
  501.                                         case MEN_FILTER:    GT_SetGadgetAttrs(GadgetArray[GAD_FILTER],PanelWindow,NULL,
  502.                                                         GTCB_Checked,GadgetArray[GAD_FILTER] -> Flags & GFLG_SELECTED ? FALSE : TRUE,
  503.                                                     TAG_DONE);
  504.  
  505.                                                     break;
  506.  
  507.                                         case MEN_DESTRBS:    GT_SetGadgetAttrs(GadgetArray[GAD_DESTRBS],PanelWindow,NULL,
  508.                                                         GTCB_Checked,GadgetArray[GAD_DESTRBS] -> Flags & GFLG_SELECTED ? FALSE : TRUE,
  509.                                                     TAG_DONE);
  510.  
  511.                                                     break;
  512.  
  513.                                         case MEN_SWAP:        GT_SetGadgetAttrs(GadgetArray[GAD_SWAP],PanelWindow,NULL,
  514.                                                         GTCB_Checked,GadgetArray[GAD_SWAP] -> Flags & GFLG_SELECTED ? FALSE : TRUE,
  515.                                                     TAG_DONE);
  516.  
  517.                                                     break;
  518.  
  519.                                         case MEN_STRIP:        GT_SetGadgetAttrs(GadgetArray[GAD_STRIP],PanelWindow,NULL,
  520.                                                         GTCB_Checked,GadgetArray[GAD_STRIP] -> Flags & GFLG_SELECTED ? FALSE : TRUE,
  521.                                                     TAG_DONE);
  522.  
  523.                                                     break;
  524.  
  525.                                         case MEN_DISABLE:        GT_SetGadgetAttrs(GadgetArray[GAD_DISABLE],PanelWindow,NULL,
  526.                                                         GTCB_Checked,GadgetArray[GAD_DISABLE] -> Flags & GFLG_SELECTED ? FALSE : TRUE,
  527.                                                     TAG_DONE);
  528.  
  529.                                                     break;
  530.  
  531.                                         case MEN_RASTER:        GT_SetGadgetAttrs(GadgetArray[GAD_RASTER],PanelWindow,NULL,
  532.                                                         GTCB_Checked,GadgetArray[GAD_RASTER] -> Flags & GFLG_SELECTED ? FALSE : TRUE,
  533.                                                     TAG_DONE);
  534.  
  535.                                                     break;
  536.  
  537.                                         case MEN_CR:        Value = (Config -> SendCR + 1) % 3;
  538.  
  539.                                                     GT_SetGadgetAttrs(GadgetArray[GAD_CR],PanelWindow,NULL,
  540.                                                         GTCY_Active,Value,
  541.                                                     TAG_DONE);
  542.  
  543.                                                     Class = IDCMP_GADGETUP;
  544.                                                     Gadget = GadgetArray[GAD_CR];
  545.                                                     Code = Value;
  546.  
  547.                                                     goto GadCheck;
  548.  
  549.                                         case MEN_LF:        Value = (Config -> SendLF + 1) % 3;
  550.  
  551.                                                     GT_SetGadgetAttrs(GadgetArray[GAD_LF],PanelWindow,NULL,
  552.                                                         GTCY_Active,Value,
  553.                                                     TAG_DONE);
  554.  
  555.                                                     Class = IDCMP_GADGETUP;
  556.                                                     Gadget = GadgetArray[GAD_LF];
  557.                                                     Code = Value;
  558.  
  559.                                                     goto GadCheck;
  560.  
  561.                                         case MEN_BELL:        BellMode = (BellMode + 1) % 4;
  562.  
  563.                                                     GT_SetGadgetAttrs(GadgetArray[GAD_BELL],PanelWindow,NULL,
  564.                                                         GTCY_Active,BellMode,
  565.                                                     TAG_DONE);
  566.  
  567.                                                     Class = IDCMP_GADGETUP;
  568.                                                     Gadget = GadgetArray[GAD_BELL];
  569.                                                     Code = BellMode;
  570.  
  571.                                                     goto GadCheck;
  572.  
  573.                                                     break;
  574.  
  575.                                         case MEN_SIZE:        Value = (Config -> EightyColumns + 1) % 3;
  576.  
  577.                                                     GT_SetGadgetAttrs(GadgetArray[GAD_SIZE],PanelWindow,NULL,
  578.                                                         GTCY_Active,Value,
  579.                                                     TAG_DONE);
  580.  
  581.                                                     Class = IDCMP_GADGETUP;
  582.                                                     Gadget = GadgetArray[GAD_SIZE];
  583.                                                     Code = Value;
  584.  
  585.                                                     goto GadCheck;
  586.  
  587.                                         case MEN_COLOUR:    Value = (Config -> ColourMode + 1) % 4;
  588.  
  589.                                                     GT_SetGadgetAttrs(GadgetArray[GAD_COLOUR],PanelWindow,NULL,
  590.                                                         GTCY_Active,Value,
  591.                                                     TAG_DONE);
  592.  
  593.                                                     Class = IDCMP_GADGETUP;
  594.                                                     Gadget = GadgetArray[GAD_COLOUR];
  595.                                                     Code = Value;
  596.  
  597.                                                     goto GadCheck;
  598.  
  599.                                         case MEN_EMULATIONCTRL:    Value = (Config -> Emulation + 1) % 4;
  600.  
  601.                                                     GT_SetGadgetAttrs(GadgetArray[GAD_EMULATIONCTRL],PanelWindow,NULL,
  602.                                                         GTCY_Active,Value,
  603.                                                     TAG_DONE);
  604.  
  605.                                                     Class = IDCMP_GADGETUP;
  606.                                                     Gadget = GadgetArray[GAD_EMULATIONCTRL];
  607.                                                     Code = Value;
  608.  
  609.                                                     goto GadCheck;
  610.  
  611.                                         case MEN_NEWEMU:        Class = IDCMP_GADGETUP;
  612.                                                     Gadget = GadgetArray[GAD_NEWEMU];
  613.                                                     break;
  614.  
  615.                                         case MEN_FONT:        if(Config -> Font == FONT_TOPAZ && IBM)
  616.                                                         Value = FONT_IBM;
  617.                                                     else
  618.                                                         Value = FONT_TOPAZ;
  619.  
  620.                                                     GT_SetGadgetAttrs(GadgetArray[GAD_FONT],PanelWindow,NULL,
  621.                                                         GTCY_Active,Value,
  622.                                                     TAG_DONE);
  623.  
  624.                                                     Class = IDCMP_GADGETUP;
  625.                                                     Gadget = GadgetArray[GAD_FONT];
  626.                                                     Code = Value;
  627.  
  628.                                                     goto GadCheck;
  629.  
  630.                                         case MEN_USE:        Class = IDCMP_GADGETUP;
  631.                                                     Gadget = GadgetArray[GAD_USE];
  632.                                                     break;
  633.  
  634.                                         case MEN_CANCEL:    Class = IDCMP_GADGETUP;
  635.                                                     Gadget = GadgetArray[GAD_CANCEL];
  636.                                                     break;
  637.  
  638.                                         default:        break;
  639.                                     }
  640.  
  641.                                     Code = MenuItem -> NextSelect;
  642.                                 }
  643.  
  644.                                 if(ActiveGadget)
  645.                                     ActivateGadget(ActiveGadget,PanelWindow,NULL);
  646.                             }
  647.  
  648.                             if(Class == IDCMP_CLOSEWINDOW)
  649.                                 Terminated = TRUE;
  650.  
  651. GadCheck:                        if(Class == IDCMP_GADGETUP)
  652.                             {
  653.                                 switch(Gadget -> GadgetID)
  654.                                 {
  655.                                     case GAD_CR:        Config -> SendCR = Code;
  656.                                                 break;
  657.  
  658.                                     case GAD_LF:        Config -> SendLF = Code;
  659.                                                 break;
  660.  
  661.                                     case GAD_BELL:        BellMode = Code;
  662.  
  663.                                                 switch(BellMode)
  664.                                                 {
  665.                                                     case 0:    Config -> VisibleBell    = FALSE;
  666.                                                         Config -> AudibleBell    = FALSE;
  667.                                                         break;
  668.  
  669.                                                     case 1:    Config -> VisibleBell    = TRUE;
  670.                                                         Config -> AudibleBell    = FALSE;
  671.                                                         break;
  672.  
  673.                                                     case 2:    Config -> VisibleBell    = FALSE;
  674.                                                         Config -> AudibleBell    = TRUE;
  675.                                                         break;
  676.  
  677.                                                     case 3:    Config -> VisibleBell    = TRUE;
  678.                                                         Config -> AudibleBell    = TRUE;
  679.                                                         break;
  680.                                                 }
  681.  
  682.                                                 break;
  683.  
  684.                                     case GAD_SIZE:    Config -> EightyColumns = Code;
  685.                                                 break;
  686.  
  687.                                     case GAD_COLOUR:    Config -> ColourMode = Code;
  688.  
  689.                                                 if(Code > COLOUR_AMIGA && (Config -> Emulation == EMULATION_ATOMIC || Limited))
  690.                                                 {
  691.                                                     GT_SetGadgetAttrs(GadgetArray[GAD_COLOUR],PanelWindow,NULL,
  692.                                                         GTCY_Active,COLOUR_MONO,
  693.                                                     TAG_DONE);
  694.  
  695.                                                     Config -> ColourMode = COLOUR_MONO;
  696.                                                 }
  697.  
  698.                                                 break;
  699.  
  700.                                     case GAD_EMULATIONCTRL:    Config -> Emulation = Code;
  701.  
  702.                                                 if(Code == EMULATION_ATOMIC && Config -> ColourMode != COLOUR_AMIGA && Config -> ColourMode != COLOUR_MONO)
  703.                                                 {
  704.                                                     GT_SetGadgetAttrs(GadgetArray[GAD_COLOUR],PanelWindow,NULL,
  705.                                                         GTCY_Active,COLOUR_MONO,
  706.                                                     TAG_DONE);
  707.  
  708.                                                     Config -> ColourMode = COLOUR_MONO;
  709.                                                 }
  710.  
  711.                                                 GT_SetGadgetAttrs(GadgetArray[GAD_EMUNAME],PanelWindow,NULL,
  712.                                                     GA_Disabled,    Config -> Emulation != EMULATION_EXTERNAL,
  713.                                                 TAG_DONE);
  714.  
  715.                                                 GT_SetGadgetAttrs(GadgetArray[GAD_NEWEMU],PanelWindow,NULL,
  716.                                                     GA_Disabled,    Config -> Emulation != EMULATION_EXTERNAL,
  717.                                                 TAG_DONE);
  718.  
  719.                                                 if(IBM)
  720.                                                 {
  721.                                                     GT_SetGadgetAttrs(GadgetArray[GAD_FONT],PanelWindow,NULL,
  722.                                                         GA_Disabled,    Config -> Emulation == EMULATION_EXTERNAL,
  723.                                                     TAG_DONE);
  724.                                                 }
  725.  
  726.                                                 if(Config -> Emulation == EMULATION_EXTERNAL)
  727.                                                 {
  728.                                                     OnMenu(PanelWindow,FULLMENUNUM(0,13,0));
  729.  
  730.                                                     ActivateGadget(GadgetArray[GAD_EMUNAME],PanelWindow,NULL);
  731.  
  732.                                                     ActiveGadget = GadgetArray[GAD_EMUNAME];
  733.                                                 }
  734.                                                 else
  735.                                                 {
  736.                                                     OffMenu(PanelWindow,FULLMENUNUM(0,13,0));
  737.  
  738.                                                     ActiveGadget = NULL;
  739.                                                 }
  740.  
  741.                                                 break;
  742.  
  743.                                     case GAD_FONT:        Config -> Font = Code;
  744.                                                 break;
  745.  
  746.                                     case GAD_USE:        Terminated = TRUE;
  747.  
  748.                                                 Config -> CaptureFilter        = GadgetArray[GAD_FILTER] -> Flags & GFLG_SELECTED;
  749.                                                 Config -> DestructiveBackspace    = GadgetArray[GAD_DESTRBS] -> Flags & GFLG_SELECTED;
  750.                                                 Config -> SwapBSDelete        = GadgetArray[GAD_SWAP] -> Flags & GFLG_SELECTED;
  751.                                                 Config -> StripBit8        = GadgetArray[GAD_STRIP] -> Flags & GFLG_SELECTED;
  752.                                                 Config -> DisableBlinking    = GadgetArray[GAD_DISABLE] -> Flags & GFLG_SELECTED;
  753.                                                 Config -> RasterEnabled        = GadgetArray[GAD_RASTER] -> Flags & GFLG_SELECTED;
  754.  
  755.                                                 strcpy(Config -> EmulationName,((struct StringInfo *)GadgetArray[GAD_EMUNAME] -> SpecialInfo) -> Buffer);
  756.  
  757.                                                 switch(Config -> ColourMode)
  758.                                                 {
  759.                                                     case COLOUR_EIGHT:    CopyMem(&ANSIColours[0],&Config -> Colours[0],16 * sizeof(UWORD));
  760.                                                                 break;
  761.  
  762.                                                     case COLOUR_SIXTEEN:    CopyMem(&EGAColours[0],&Config -> Colours[0],16 * sizeof(UWORD));
  763.                                                                 break;
  764.  
  765.                                                     case COLOUR_AMIGA:    CopyMem(&DefaultColours[0],&Config -> Colours[0],16 * sizeof(UWORD));
  766.                                                                 break;
  767.  
  768.                                                     case COLOUR_MONO:        CopyMem(&AtomicColours[0],&Config -> Colours[0],16 * sizeof(UWORD));
  769.                                                                 break;
  770.                                                 }
  771.  
  772.                                                 break;
  773.  
  774.                                     case GAD_NEWEMU:    strcpy(DummyBuffer,((struct StringInfo *)GadgetArray[GAD_EMUNAME] -> SpecialInfo) -> Buffer);
  775.  
  776.                                                 SetWait(PanelWindow);
  777.  
  778.                                                 PanelWindow -> Flags |= WFLG_RMBTRAP;
  779.  
  780.                                                 if(SelectEmulator(DummyBuffer,PanelWindow))
  781.                                                 {
  782.                                                     GT_SetGadgetAttrs(GadgetArray[GAD_EMUNAME],PanelWindow,NULL,
  783.                                                         GTST_String,DummyBuffer,
  784.                                                     TAG_DONE);
  785.                                                 }
  786.  
  787.                                                 ClearPointer(PanelWindow);
  788.                                                 PanelWindow -> Flags &= ~WFLG_RMBTRAP;
  789.  
  790.                                                 break;
  791.  
  792.                                     case GAD_CANCEL:    Terminated = TRUE;
  793.  
  794.                                                 CopyMem(&PrivateConfig,Config,sizeof(struct Configuration));
  795.  
  796.                                                 break;
  797.  
  798.                                     default:        break;
  799.                                 }
  800.                             }
  801.                         }
  802.                     }
  803.  
  804.                     PanelWindow -> Flags |= WFLG_RMBTRAP;
  805.  
  806.                     ClearMenuStrip(PanelWindow);
  807.  
  808.                     RemoveGList(PanelWindow,GadgetList,(UWORD)-1);
  809.  
  810.                     PopWindow();
  811.  
  812.                     CloseWindow(PanelWindow);
  813.                 }
  814.             }
  815.  
  816.             FreeMenus(PanelMenu);
  817.         }
  818.     }
  819.  
  820.     FreeGadgets(GadgetList);
  821. }
  822.