home *** CD-ROM | disk | FTP | other *** search
/ Amiga Elysian Archive / AmigaElysianArchive.iso / comm / term23_2.lha / Source_Code / termSource / TerminalPanel.c < prev    next >
C/C++ Source or Header  |  1992-08-18  |  23KB  |  841 lines

  1. /*
  2. **    $Id: TerminalPanel.c,v 1.9 92/08/15 20:14:23 olsen Sta Locker: olsen $
  3. **    $Revision: 1.9 $
  4. **    $Date: 92/08/15 20:14:23 $
  5. **
  6. **    Editing panel for terminal configuration
  7. **
  8. **    Copyright © 1990-1992 by Olaf `Olsen' Barthel & MXM
  9. **        All Rights Reserved
  10. */
  11.  
  12. #include "termGlobal.h"
  13.  
  14. enum    {    GAD_FILTER,GAD_DESTRBS,GAD_SWAP,GAD_STRIP,GAD_DISABLE,
  15.         GAD_FASTER,GAD_TITLEBAR,GAD_PRINTER,GAD_STATUSLINE,GAD_ANSWERBACK,GAD_FONT,GAD_TEXT_FONT,GAD_NEWFONT,
  16.         GAD_CR,GAD_LF,GAD_RECEIVECR,GAD_RECEIVELF,GAD_BELL,GAD_ALERT,
  17.         GAD_COLOUR,GAD_SIZE,GAD_EMULATIONCTRL,GAD_EMUNAME,GAD_NEWEMU,GAD_KEYMAP,
  18.         GAD_USE,GAD_CANCEL };
  19.  
  20. STATIC STRPTR DisplaySizeType[4] =
  21. {
  22.     NULL,
  23.     NULL,
  24.     NULL,
  25.     NULL
  26. };
  27.  
  28. STATIC STRPTR BellType[6] =
  29. {
  30.     NULL,
  31.     NULL,
  32.     NULL,
  33.     NULL,
  34.     NULL,
  35.     NULL
  36. };
  37.  
  38. STATIC STRPTR AlertType[5] =
  39. {
  40.     NULL,
  41.     NULL,
  42.     NULL,
  43.     NULL,
  44.     NULL
  45. };
  46.  
  47. STATIC STRPTR CRType[4] =
  48. {
  49.     NULL,
  50.     NULL,
  51.     NULL,
  52.     NULL
  53. };
  54.  
  55. STATIC STRPTR LFType[4] =
  56. {
  57.     NULL,
  58.     NULL,
  59.     NULL,
  60.     NULL
  61. };
  62.  
  63. STATIC STRPTR Emulation[5] =
  64. {
  65.     NULL,
  66.     NULL,
  67.     NULL,
  68.     NULL,
  69.     NULL
  70. };
  71.  
  72. STATIC STRPTR ColourMode[5] =
  73. {
  74.     NULL,
  75.     NULL,
  76.     NULL,
  77.     NULL,
  78.     NULL
  79. };
  80.  
  81. STATIC STRPTR Fonts[3] =
  82. {
  83.     NULL,
  84.     NULL,
  85.     NULL
  86. };
  87.  
  88. STATIC STRPTR StatusLine[4] =
  89. {
  90.     NULL,
  91.     NULL,
  92.     NULL,
  93.     NULL
  94. };
  95.  
  96.     /* Which item to select for current combination of bell modes. */
  97.  
  98. STATIC BYTE BellMode;
  99.  
  100. STATIC struct Gadget *
  101. CreateAllGadgets(struct Configuration *ConfigPtr,struct Gadget *GadgetArray[],struct Gadget **GadgetList,APTR VisualInfo,UWORD TopEdge)
  102. {
  103.     struct Gadget        *Gadget;
  104.     struct NewGadget     NewGadget;
  105.     UWORD             Counter = 0;
  106.  
  107.     SZ_SizeSetup(Screen,&UserFont,TRUE);
  108.  
  109.     LocalizeString(DisplaySizeType,MSG_TERMINALPANEL_SCREEN_SIZE_TXT,MSG_TERMINALPANEL_80_X_25_TXT);
  110.     LocalizeString(BellType,MSG_TERMINALPANEL_IGNORE_BELL_TXT,MSG_TERMINALPANEL_SYSTEM_DEFAULT_TXT);
  111.     LocalizeString(AlertType,MSG_TERMINALPANEL_ALERT_NONE_TXT,MSG_TERMINALPANEL_ALERT_SIGNAL_SCREEN_TXT);
  112.     LocalizeString(CRType,MSG_TERMINALPANEL_IGNORE_CR_TXT,MSG_TERMINALPANEL_AS_CR_LF_TXT);
  113.     LocalizeString(LFType,MSG_TERMINALPANEL_IGNORE_LF_TXT,MSG_TERMINALPANEL_AS_LF_CR_TXT);
  114.     LocalizeString(Emulation,MSG_TERMINALPANEL_ANSI_VT102_TXT,MSG_TERMINALPANEL_EXTERNAL_TXT);
  115.     LocalizeString(ColourMode,MSG_TERMINALPANEL_AMIGA_TXT,MSG_TERMINALPANEL_MONO_TXT);
  116.     LocalizeString(Fonts,MSG_TERMINALPANEL_TOPAZ_TXT,MSG_TERMINALPANEL_IBM_PC_STYLE_TXT);
  117.     LocalizeString(StatusLine,MSG_TERMINALPANEL_STATUS_DISABLED_TXT,MSG_TERMINALPANEL_STATUS_COMPACT_TXT);
  118.  
  119.     memset(&NewGadget,0,sizeof(struct NewGadget));
  120.  
  121.     if(Gadget = CreateContext(GadgetList))
  122.     {
  123.         BYTE ChangeFont;
  124.  
  125.         SZ_AddLeftOffset(SZ_LeftOffsetDelta(MSG_TERMINALPANEL_CAPTURE_FILTER_GAD,MSG_TERMINALPANEL_TEXT_FONT_GAD));
  126.  
  127.         SZ_ResetMaxWidth();
  128.  
  129.         SZ_UpdateMaxWidth(STRING_KIND,NULL,15,NULL);
  130.         SZ_UpdateMaxWidth(TEXT_KIND,NULL,20,NULL);
  131.         SZ_UpdateMaxWidth(BUTTON_KIND,LocaleString(MSG_TERMINALPANEL_SELECT_NEW_TEXT_GAD),0,NULL);
  132.         SZ_UpdateMaxWidth(CYCLE_KIND,NULL,0,StatusLine);
  133.         SZ_UpdateMaxWidth(CYCLE_KIND,NULL,0,Fonts);
  134.         SZ_UpdateMaxWidth(CYCLE_KIND,NULL,0,BellType);
  135.  
  136.         SZ_SetWidth(SZ_ResetMaxWidth());
  137.  
  138.         NewGadget . ng_GadgetText    = LocaleString(MSG_TERMINALPANEL_CAPTURE_FILTER_GAD);
  139.         NewGadget . ng_TextAttr        = &UserFont;
  140.         NewGadget . ng_VisualInfo    = VisualInfo;
  141.         NewGadget . ng_GadgetID        = Counter;
  142.  
  143.         GadgetArray[Counter++] = Gadget = CreateGadget(CHECKBOX_KIND,Gadget,&NewGadget,
  144.             SZ_Adjust,    TRUE,
  145.             SZ_AutoWidth,    TRUE,
  146.  
  147.             GT_Underscore,    '_',
  148.             GTCB_Checked,    ConfigPtr -> CaptureFilter,
  149.         TAG_DONE);
  150.  
  151.         NewGadget . ng_GadgetText    = LocaleString(MSG_TERMINALPANEL_DESTRUCTIVE_BS_GAD);
  152.         NewGadget . ng_GadgetID        = Counter;
  153.  
  154.         GadgetArray[Counter++] = Gadget = CreateGadget(CHECKBOX_KIND,Gadget,&NewGadget,
  155.             SZ_Adjust,    TRUE,
  156.             SZ_AutoWidth,    TRUE,
  157.  
  158.             GT_Underscore,    '_',
  159.             GTCB_Checked,    ConfigPtr -> DestructiveBackspace,
  160.         TAG_DONE);
  161.  
  162.         NewGadget . ng_GadgetText    = LocaleString(MSG_TERMINALPANEL_SWAP_DEL_BS_GAD);
  163.         NewGadget . ng_GadgetID        = Counter;
  164.  
  165.         GadgetArray[Counter++] = Gadget = CreateGadget(CHECKBOX_KIND,Gadget,&NewGadget,
  166.             SZ_Adjust,    TRUE,
  167.             SZ_AutoWidth,    TRUE,
  168.  
  169.             GT_Underscore,    '_',
  170.             GTCB_Checked,    ConfigPtr -> SwapBSDelete,
  171.         TAG_DONE);
  172.  
  173.         NewGadget . ng_GadgetText    = LocaleString(MSG_TERMINALPANEL_STRIP_BIT_8_GAD);
  174.         NewGadget . ng_GadgetID        = Counter;
  175.  
  176.         GadgetArray[Counter++] = Gadget = CreateGadget(CHECKBOX_KIND,Gadget,&NewGadget,
  177.             SZ_Adjust,    TRUE,
  178.             SZ_AutoWidth,    TRUE,
  179.  
  180.             GT_Underscore,    '_',
  181.             GTCB_Checked,    ConfigPtr -> StripBit8,
  182.         TAG_DONE);
  183.  
  184.         NewGadget . ng_GadgetText    = LocaleString(MSG_TERMINALPANEL_STOP_BLINKING_GAD);
  185.         NewGadget . ng_GadgetID        = Counter;
  186.  
  187.         GadgetArray[Counter++] = Gadget = CreateGadget(CHECKBOX_KIND,Gadget,&NewGadget,
  188.             SZ_Adjust,    TRUE,
  189.             SZ_AutoWidth,    TRUE,
  190.  
  191.             GT_Underscore,    '_',
  192.             GTCB_Checked,    ConfigPtr -> DisableBlinking & ~TERMINAL_FASTER,
  193.         TAG_DONE);
  194.  
  195.         NewGadget . ng_GadgetText    = LocaleString(MSG_TERMINALPANEL_FASTER_LAYOUT_GAD);
  196.         NewGadget . ng_GadgetID        = Counter;
  197.  
  198.         GadgetArray[Counter++] = Gadget = CreateGadget(CHECKBOX_KIND,Gadget,&NewGadget,
  199.             SZ_Adjust,    TRUE,
  200.             SZ_AutoWidth,    TRUE,
  201.  
  202.             GT_Underscore,    '_',
  203.             GTCB_Checked,    ConfigPtr -> DisableBlinking & TERMINAL_FASTER,
  204.         TAG_DONE);
  205.  
  206.         NewGadget . ng_GadgetText    = LocaleString(MSG_TERMINALPANEL_SCREEN_TITLE_GAD);
  207.         NewGadget . ng_GadgetID        = Counter;
  208.  
  209.         GadgetArray[Counter++] = Gadget = CreateGadget(CHECKBOX_KIND,Gadget,&NewGadget,
  210.             SZ_Adjust,    TRUE,
  211.             SZ_AutoWidth,    TRUE,
  212.  
  213.             GT_Underscore,    '_',
  214.             GTCB_Checked,    ConfigPtr -> TitleBar,
  215.         TAG_DONE);
  216.  
  217.         NewGadget . ng_GadgetText    = LocaleString(MSG_TERMINALPANEL_PRINTER_ENABLED_GAD);
  218.         NewGadget . ng_GadgetID        = Counter;
  219.  
  220.         GadgetArray[Counter++] = Gadget = CreateGadget(CHECKBOX_KIND,Gadget,&NewGadget,
  221.             SZ_Adjust,    TRUE,
  222.             SZ_AutoWidth,    TRUE,
  223.  
  224.             GT_Underscore,    '_',
  225.             GTCB_Checked,    ConfigPtr -> PrinterEnabled,
  226.         TAG_DONE);
  227.  
  228.         NewGadget . ng_GadgetText    = LocaleString(MSG_TERMINALPANEL_STATUS_LINE_GAD);
  229.         NewGadget . ng_GadgetID        = Counter;
  230.  
  231.         GadgetArray[Counter++] = Gadget = CreateGadget(CYCLE_KIND,Gadget,&NewGadget,
  232.             SZ_Adjust,    TRUE,
  233.             SZ_AutoWidth,    TRUE,
  234.  
  235.             GT_Underscore,    '_',
  236.             GTCY_Labels,    StatusLine,
  237.             GTCY_Active,    ConfigPtr -> StatusLine,
  238.         TAG_DONE);
  239.  
  240.         NewGadget . ng_GadgetText    = LocaleString(MSG_TERMINALPANEL_ANSWERBACK_MESSAGE_GAD);
  241.         NewGadget . ng_GadgetID        = Counter;
  242.  
  243.         GadgetArray[Counter++] = Gadget = CreateGadget(STRING_KIND,Gadget,&NewGadget,
  244.             SZ_Adjust,    TRUE,
  245.             SZ_AutoWidth,    TRUE,
  246.  
  247.             GT_Underscore,    '_',
  248.             GTST_MaxChars,    40,
  249.             GTST_String,    ConfigPtr -> AnswerBack,
  250.             GTST_EditHook,    &CommandHook,
  251.             GA_Immediate,    TRUE,
  252.         TAG_DONE);
  253.  
  254.         NewGadget . ng_GadgetText    = LocaleString(MSG_TERMINALPANEL_FONT_GAD);
  255.         NewGadget . ng_GadgetID        = Counter;
  256.  
  257.         if(ConfigPtr == &Config && ConfigPtr -> Emulation == EMULATION_EXTERNAL)
  258.             ChangeFont = TRUE;
  259.         else
  260.             ChangeFont = FALSE;
  261.  
  262.         GadgetArray[Counter++] = Gadget = CreateGadget(CYCLE_KIND,Gadget,&NewGadget,
  263.             SZ_Adjust,    TRUE,
  264.             SZ_AutoWidth,    TRUE,
  265.  
  266.             GT_Underscore,    '_',
  267.             GTCY_Labels,    Fonts,
  268.             GTCY_Active,    ConfigPtr -> Font,
  269.             GA_Disabled,    ChangeFont,
  270.         TAG_DONE);
  271.  
  272.         NewGadget . ng_GadgetText    = LocaleString(MSG_TERMINALPANEL_TEXT_FONT_GAD);
  273.         NewGadget . ng_GadgetID        = Counter;
  274.  
  275.         SPrintf(SharedBuffer,"%s %ld",ConfigPtr -> TextFontName,ConfigPtr -> TextFontHeight);
  276.  
  277.         GadgetArray[Counter++] = Gadget = CreateGadget(TEXT_KIND,Gadget,&NewGadget,
  278.             SZ_Adjust,    TRUE,
  279.             SZ_AutoWidth,    TRUE,
  280.  
  281.             GTTX_Text,    SharedBuffer,
  282.             GTTX_Border,    TRUE,
  283.             GTTX_CopyText,    TRUE,
  284.         TAG_DONE);
  285.  
  286.         NewGadget . ng_GadgetText    = LocaleString(MSG_TERMINALPANEL_SELECT_NEW_TEXT_GAD);
  287.         NewGadget . ng_GadgetID        = Counter;
  288.  
  289.         GadgetArray[Counter++] = Gadget = CreateGadget(BUTTON_KIND,Gadget,&NewGadget,
  290.             SZ_Adjust,    TRUE,
  291.             SZ_AutoWidth,    TRUE,
  292.  
  293.             GT_Underscore,    '_',
  294.         TAG_DONE);
  295.  
  296.         SZ_AddLeftOffset(SZ_LeftOffsetDelta(MSG_TERMINALPANEL_DISPLAY_SIZE_GAD,MSG_TERMINALPANEL_EMU__NAME_GAD));
  297.  
  298.         SZ_UpdateMaxWidth(STRING_KIND,NULL,15,NULL);
  299.         SZ_UpdateMaxWidth(CYCLE_KIND,NULL,0,DisplaySizeType);
  300.         SZ_UpdateMaxWidth(CYCLE_KIND,NULL,0,AlertType);
  301.         SZ_UpdateMaxWidth(CYCLE_KIND,NULL,0,CRType);
  302.         SZ_UpdateMaxWidth(CYCLE_KIND,NULL,0,LFType);
  303.         SZ_UpdateMaxWidth(CYCLE_KIND,NULL,0,Emulation);
  304.         SZ_UpdateMaxWidth(CYCLE_KIND,NULL,0,ColourMode);
  305.         SZ_UpdateMaxWidth(BUTTON_KIND,LocaleString(MSG_TERMINALPANEL_SELECT_NEW_EMULATION_GAD),0,NULL);
  306.  
  307.         SZ_SetWidth(SZ_ResetMaxWidth());
  308.  
  309.         NewGadget . ng_GadgetText    = LocaleString(MSG_TERMINALPANEL_SEND_CR_GAD);
  310.         NewGadget . ng_GadgetID        = Counter;
  311.  
  312.         GadgetArray[Counter++] = Gadget = CreateGadget(CYCLE_KIND,Gadget,&NewGadget,
  313.             SZ_Adjust,    TRUE,
  314.             SZ_AutoWidth,    TRUE,
  315.             SZ_NewColumn,    TRUE,
  316.  
  317.             GT_Underscore,    '_',
  318.             GTCY_Labels,    CRType,
  319.             GTCY_Active,    ConfigPtr -> SendCR,
  320.         TAG_DONE);
  321.  
  322.         NewGadget . ng_GadgetText    = LocaleString(MSG_TERMINALPANEL_SEND_LF_GAD);
  323.         NewGadget . ng_GadgetID        = Counter;
  324.  
  325.         GadgetArray[Counter++] = Gadget = CreateGadget(CYCLE_KIND,Gadget,&NewGadget,
  326.             SZ_Adjust,    TRUE,
  327.             SZ_AutoWidth,    TRUE,
  328.  
  329.             GT_Underscore,    '_',
  330.             GTCY_Labels,    LFType,
  331.             GTCY_Active,    ConfigPtr -> SendLF,
  332.         TAG_DONE);
  333.  
  334.         NewGadget . ng_GadgetText    = LocaleString(MSG_TERMINALPANEL_RECEIVE_CR_GAD);
  335.         NewGadget . ng_GadgetID        = Counter;
  336.  
  337.         GadgetArray[Counter++] = Gadget = CreateGadget(CYCLE_KIND,Gadget,&NewGadget,
  338.             SZ_Adjust,    TRUE,
  339.             SZ_AutoWidth,    TRUE,
  340.  
  341.             GT_Underscore,    '_',
  342.             GTCY_Labels,    CRType,
  343.             GTCY_Active,    ConfigPtr -> ReceiveCR,
  344.         TAG_DONE);
  345.  
  346.         NewGadget . ng_GadgetText    = LocaleString(MSG_TERMINALPANEL_RECEIVE_LF_GAD);
  347.         NewGadget . ng_GadgetID        = Counter;
  348.  
  349.         GadgetArray[Counter++] = Gadget = CreateGadget(CYCLE_KIND,Gadget,&NewGadget,
  350.             SZ_Adjust,    TRUE,
  351.             SZ_AutoWidth,    TRUE,
  352.  
  353.             GT_Underscore,    '_',
  354.             GTCY_Labels,    LFType,
  355.             GTCY_Active,    ConfigPtr -> ReceiveLF,
  356.         TAG_DONE);
  357.  
  358.         if(ConfigPtr -> SystemBeep)
  359.             BellMode = 4;
  360.         else
  361.         {
  362.             if(ConfigPtr -> AudibleBell)
  363.             {
  364.                 if(ConfigPtr -> VisibleBell)
  365.                     BellMode = 3;
  366.                 else
  367.                     BellMode = 2;
  368.             }
  369.             else
  370.             {
  371.                 if(ConfigPtr -> VisibleBell)
  372.                     BellMode = 1;
  373.                 else
  374.                     BellMode = 0;
  375.             }
  376.         }
  377.  
  378.         NewGadget . ng_GadgetText    = LocaleString(MSG_TERMINALPANEL_BELL_GAD);
  379.         NewGadget . ng_GadgetID        = Counter;
  380.  
  381.         GadgetArray[Counter++] = Gadget = CreateGadget(CYCLE_KIND,Gadget,&NewGadget,
  382.             SZ_Adjust,    TRUE,
  383.             SZ_AutoWidth,    TRUE,
  384.  
  385.             GT_Underscore,    '_',
  386.             GTCY_Labels,    BellType,
  387.             GTCY_Active,    BellMode,
  388.         TAG_DONE);
  389.  
  390.         NewGadget . ng_GadgetText    = LocaleString(MSG_TERMINALPANEL_ALERT_GAD);
  391.         NewGadget . ng_GadgetID        = Counter;
  392.  
  393.         GadgetArray[Counter++] = Gadget = CreateGadget(CYCLE_KIND,Gadget,&NewGadget,
  394.             SZ_Adjust,    TRUE,
  395.             SZ_AutoWidth,    TRUE,
  396.  
  397.             GT_Underscore,    '_',
  398.             GTCY_Labels,    AlertType,
  399.             GTCY_Active,    ConfigPtr -> Alert,
  400.         TAG_DONE);
  401.  
  402.         NewGadget . ng_GadgetText    = LocaleString(MSG_TERMINALPANEL_COLOUR_GAD);
  403.         NewGadget . ng_GadgetID        = Counter;
  404.  
  405.         GadgetArray[Counter++] = Gadget = CreateGadget(CYCLE_KIND,Gadget,&NewGadget,
  406.             SZ_Adjust,    TRUE,
  407.             SZ_AutoWidth,    TRUE,
  408.  
  409.             GT_Underscore,    '_',
  410.             GTCY_Labels,    ColourMode,
  411.             GTCY_Active,    ConfigPtr -> ColourMode,
  412.         TAG_DONE);
  413.  
  414.         NewGadget . ng_GadgetText    = LocaleString(MSG_TERMINALPANEL_DISPLAY_SIZE_GAD);
  415.         NewGadget . ng_GadgetID        = Counter;
  416.  
  417.         GadgetArray[Counter++] = Gadget = CreateGadget(CYCLE_KIND,Gadget,&NewGadget,
  418.             SZ_Adjust,    TRUE,
  419.             SZ_AutoWidth,    TRUE,
  420.  
  421.             GT_Underscore,    '_',
  422.             GTCY_Labels,    DisplaySizeType,
  423.             GTCY_Active,    ConfigPtr -> EightyColumns,
  424.             GA_Disabled,    Window -> Height / TextFontHeight < 25,
  425.         TAG_DONE);
  426.  
  427.         NewGadget . ng_GadgetText    = LocaleString(MSG_TERMINALPANEL_EMULATION_GAD);
  428.         NewGadget . ng_GadgetID        = Counter;
  429.  
  430.         GadgetArray[Counter++] = Gadget = CreateGadget(CYCLE_KIND,Gadget,&NewGadget,
  431.             SZ_Adjust,    TRUE,
  432.             SZ_AutoWidth,    TRUE,
  433.  
  434.             GT_Underscore,    '_',
  435.             GTCY_Labels,    Emulation,
  436.             GTCY_Active,    ConfigPtr -> Emulation,
  437.         TAG_DONE);
  438.  
  439.         NewGadget . ng_GadgetText    = LocaleString(MSG_TERMINALPANEL_EMU__NAME_GAD);
  440.         NewGadget . ng_GadgetID        = Counter;
  441.  
  442.         GadgetArray[Counter++] = Gadget = CreateGadget(STRING_KIND,Gadget,&NewGadget,
  443.             SZ_Adjust,    TRUE,
  444.             SZ_AutoWidth,    TRUE,
  445.  
  446.             GT_Underscore,    '_',
  447.             GTST_MaxChars,    255,
  448.             GTST_String,    ConfigPtr -> EmulationName,
  449.             GA_Disabled,    ConfigPtr -> Emulation != EMULATION_EXTERNAL,
  450.             GTST_EditHook,    &CommandHook,
  451.             GA_Immediate,    TRUE,
  452.         TAG_DONE);
  453.  
  454.         NewGadget . ng_GadgetText    = LocaleString(MSG_TERMINALPANEL_SELECT_NEW_EMULATION_GAD);
  455.         NewGadget . ng_GadgetID        = Counter;
  456.  
  457.         GadgetArray[Counter++] = Gadget = CreateGadget(BUTTON_KIND,Gadget,&NewGadget,
  458.             SZ_Adjust,    TRUE,
  459.             SZ_AutoWidth,    TRUE,
  460.  
  461.             GT_Underscore,    '_',
  462.             GA_Disabled,    ConfigPtr -> Emulation != EMULATION_EXTERNAL,
  463.         TAG_DONE);
  464.  
  465.         NewGadget . ng_GadgetText    = LocaleString(MSG_TERMINALPANEL_KEYMAP_NAME_GAD);
  466.         NewGadget . ng_GadgetID        = Counter;
  467.  
  468.         GadgetArray[Counter++] = Gadget = CreateGadget(STRING_KIND,Gadget,&NewGadget,
  469.             SZ_Adjust,    TRUE,
  470.             SZ_AutoWidth,    TRUE,
  471.  
  472.             GT_Underscore,    '_',
  473.             GTST_MaxChars,    39,
  474.             GTST_String,    ConfigPtr -> KeyMapName,
  475.             GTST_EditHook,    &CommandHook,
  476.             GA_Immediate,    TRUE,
  477.         TAG_DONE);
  478.  
  479.         SZ_UpdateMaxWidth(BUTTON_KIND,LocaleString(MSG_GLOBAL_USE_GAD),0,NULL);
  480.         SZ_UpdateMaxWidth(BUTTON_KIND,LocaleString(MSG_GLOBAL_CANCEL_GAD),0,NULL);
  481.  
  482.         SZ_SetWidth(SZ_ResetMaxWidth());
  483.  
  484.         NewGadget . ng_GadgetText    = LocaleString(MSG_GLOBAL_USE_GAD);
  485.         NewGadget . ng_GadgetID        = Counter;
  486.         NewGadget . ng_Flags        = 0;
  487.  
  488.         GadgetArray[Counter++] = Gadget = CreateGadget(BUTTON_KIND,Gadget,&NewGadget,
  489.             SZ_Adjust,    TRUE,
  490.             SZ_AutoWidth,    TRUE,
  491.             SZ_AlignExtra,    TRUE,
  492.             SZ_AlignLeft,    TRUE,
  493.             SZ_AlignBottom,    TRUE,
  494.  
  495.             GT_Underscore,    '_',
  496.         TAG_DONE);
  497.  
  498.         NewGadget . ng_GadgetText    = LocaleString(MSG_GLOBAL_CANCEL_GAD);
  499.         NewGadget . ng_GadgetID        = Counter;
  500.  
  501.         GadgetArray[Counter++] = Gadget = CreateGadget(BUTTON_KIND,Gadget,&NewGadget,
  502.             SZ_Adjust,    TRUE,
  503.             SZ_AutoWidth,    TRUE,
  504.             SZ_AlignRight,    TRUE,
  505.  
  506.             GT_Underscore,    '_',
  507.         TAG_DONE);
  508.     }
  509.  
  510.     return(Gadget);
  511. }
  512.  
  513.     /* SelectEmulator(UBYTE *Name,struct Window *ParentWindow):
  514.      *
  515.      *    Select a new emulator driver using the
  516.      *    asl.library file requester.
  517.      */
  518.  
  519. STATIC BYTE
  520. SelectEmulator(UBYTE *Name,struct Window *ParentWindow)
  521. {
  522.     struct FileRequester    *AslFileRequest;
  523.     UBYTE            *File,*Temp;
  524.     BYTE             NewDriver = FALSE;
  525.  
  526.     File = Name;
  527.  
  528.     strcpy(SharedBuffer,File);
  529.  
  530.     Temp = PathPart(SharedBuffer);
  531.  
  532.     Temp[0] = 0;
  533.  
  534.     if(!SharedBuffer[0])
  535.         strcpy(SharedBuffer,"Libs:");
  536.  
  537.     File = FilePart(File);
  538.  
  539.     if(AslFileRequest = (struct FileRequester *)AllocAslRequestTags(ASL_FileRequest,
  540.         ASL_Window,    ParentWindow,
  541.         ASL_File,    File,
  542.         ASL_Dir,    SharedBuffer,
  543.         ASL_Hail,    LocaleString(MSG_TERMINALPANEL_SELECT_EMULATOR_TXT),
  544.         ASL_FuncFlags,    FILF_NEWIDCMP,
  545.         ASL_Pattern,    "xem#?.library",
  546.         ASL_OKText,    LocaleString(MSG_GLOBAL_SELECT_TXT),
  547.     TAG_END))
  548.     {
  549.         if(AslRequestTags(AslFileRequest,TAG_DONE))
  550.         {
  551.             if(AslFileRequest -> rf_File[0])
  552.             {
  553.                 if(Stricmp(AslFileRequest -> rf_Dir,"Libs:"))
  554.                     strcpy(SharedBuffer,AslFileRequest -> rf_Dir);
  555.                 else
  556.                     SharedBuffer[0] = 0;
  557.  
  558.                 if(!AddPart(SharedBuffer,AslFileRequest -> rf_File,256))
  559.                     strcpy(SharedBuffer,AslFileRequest -> rf_File);
  560.  
  561.                 if(Stricmp(SharedBuffer,Name))
  562.                 {
  563.                     strcpy(Name,SharedBuffer);
  564.  
  565.                     NewDriver = TRUE;
  566.                 }
  567.             }
  568.         }
  569.  
  570.         FreeAslRequest(AslFileRequest);
  571.     }
  572.  
  573.     return(NewDriver);
  574. }
  575.  
  576. VOID
  577. TerminalPanel(struct Configuration *Config)
  578. {
  579.     struct Window    *PanelWindow;
  580.     struct Gadget    *GadgetList = NULL;
  581.     struct Gadget    *GadgetArray[GAD_CANCEL + 1];
  582.     UBYTE         DummyBuffer[256];
  583.  
  584.     CopyMem(Config,&PrivateConfig,sizeof(struct Configuration));
  585.  
  586.     if(CreateAllGadgets(Config,&GadgetArray[0],&GadgetList,VisualInfo,Screen -> WBorTop + Screen -> Font -> ta_YSize + 1))
  587.     {
  588.         if(PanelWindow = OpenWindowTags(NULL,
  589.             WA_Left,    (Screen -> Width    - SZ_GetWindowWidth())    / 2,
  590.             WA_Top,        (Screen -> Height    - SZ_GetWindowHeight())    / 2,
  591.             WA_Width,    SZ_GetWindowWidth(),
  592.             WA_Height,    SZ_GetWindowHeight(),
  593.  
  594.             WA_Activate,    TRUE,
  595.             WA_DragBar,    TRUE,
  596.             WA_DepthGadget,    TRUE,
  597.             WA_RMBTrap,    TRUE,
  598.             WA_DepthGadget,    TRUE,
  599.             WA_CloseGadget,    TRUE,
  600.             WA_CustomScreen,Screen,
  601.  
  602.             WA_IDCMP,    IDCMP_CLOSEWINDOW | IDCMP_VANILLAKEY | IDCMP_GADGETDOWN | BUTTONIDCMP | CHECKBOXIDCMP | CYCLEIDCMP | STRINGIDCMP,
  603.  
  604.             WA_Title,    LocaleString(MSG_TERMINALPANEL_TERMINAL_PREFERENCES_TXT),
  605.         TAG_DONE))
  606.         {
  607.             struct IntuiMessage    *Massage;
  608.             ULONG             Class,Code;
  609.             struct Gadget        *Gadget;
  610.             BYTE             Terminated = FALSE,
  611.                          TheLine = Config -> StatusLine;
  612.  
  613.             PushWindow(PanelWindow);
  614.  
  615.             AddGList(PanelWindow,GadgetList,(UWORD)-1,(UWORD)-1,NULL);
  616.             RefreshGList(GadgetList,PanelWindow,NULL,(UWORD)-1);
  617.             GT_RefreshWindow(PanelWindow,NULL);
  618.  
  619.             ActiveGadget = NULL;
  620.  
  621.             while(!Terminated)
  622.             {
  623.                 WaitPort(PanelWindow -> UserPort);
  624.  
  625.                 while(!Terminated && (Massage = (struct IntuiMessage *)GT_GetIMsg(PanelWindow -> UserPort)))
  626.                 {
  627.                     Class    = Massage -> Class;
  628.                     Code    = Massage -> Code;
  629.                     Gadget    = (struct Gadget *)Massage -> IAddress;
  630.  
  631.                     GT_ReplyIMsg(Massage);
  632.  
  633.                     if(Class == IDCMP_VANILLAKEY)
  634.                         KeySelect(GadgetArray,GAD_CANCEL,Code,PanelWindow,&Gadget,&Class,&Code);
  635.  
  636.                     if(Class == IDCMP_GADGETDOWN)
  637.                     {
  638.                         if((Gadget -> GadgetType & GTYP_GTYPEMASK) == GTYP_STRGADGET)
  639.                             ActiveGadget = Gadget;
  640.                     }
  641.  
  642.                     if(Class == IDCMP_ACTIVEWINDOW && ActiveGadget)
  643.                         ActivateGadget(ActiveGadget,PanelWindow,NULL);
  644.  
  645.                     if(Class == IDCMP_CLOSEWINDOW)
  646.                         Terminated = TRUE;
  647.  
  648. GadCheck:                if(Class == IDCMP_GADGETUP && !GT_DISABLED(Gadget))
  649.                     {
  650.                         switch(Gadget -> GadgetID)
  651.                         {
  652.                             case GAD_CR:        Config -> SendCR = Code;
  653.                                         break;
  654.  
  655.                             case GAD_LF:        Config -> SendLF = Code;
  656.                                         break;
  657.  
  658.                             case GAD_RECEIVECR:    Config -> ReceiveCR = Code;
  659.                                         break;
  660.  
  661.                             case GAD_RECEIVELF:    Config -> ReceiveLF = Code;
  662.                                         break;
  663.  
  664.                             case GAD_BELL:        BellMode = Code;
  665.  
  666.                                         switch(BellMode)
  667.                                         {
  668.                                             case 0:    Config -> VisibleBell    = FALSE;
  669.                                                 Config -> AudibleBell    = FALSE;
  670.                                                 Config -> SystemBeep    = FALSE;
  671.                                                 break;
  672.  
  673.                                             case 1:    Config -> VisibleBell    = TRUE;
  674.                                                 Config -> AudibleBell    = FALSE;
  675.                                                 Config -> SystemBeep    = FALSE;
  676.                                                 break;
  677.  
  678.                                             case 2:    Config -> VisibleBell    = FALSE;
  679.                                                 Config -> AudibleBell    = TRUE;
  680.                                                 Config -> SystemBeep    = FALSE;
  681.                                                 break;
  682.  
  683.                                             case 3:    Config -> VisibleBell    = TRUE;
  684.                                                 Config -> AudibleBell    = TRUE;
  685.                                                 Config -> SystemBeep    = FALSE;
  686.                                                 break;
  687.  
  688.                                             case 4:    Config -> VisibleBell    = FALSE;
  689.                                                 Config -> AudibleBell    = FALSE;
  690.                                                 Config -> SystemBeep    = TRUE;
  691.                                                 break;
  692.                                         }
  693.  
  694.                                         break;
  695.  
  696.                             case GAD_SIZE:        Config -> EightyColumns = Code;
  697.                                         break;
  698.  
  699.                             case GAD_ALERT:        Config -> Alert = Code;
  700.                                         break;
  701.  
  702.                             case GAD_COLOUR:    if(Code && !ModeOkay(Config -> DisplayMode))
  703.                                         {
  704.                                             Code = COLOUR_MONO;
  705.  
  706.                                             GT_SetGadgetAttrs(GadgetArray[GAD_COLOUR],PanelWindow,NULL,
  707.                                                 GTCY_Active,    Code,
  708.                                             TAG_DONE);
  709.                                         }
  710.  
  711.                                         Config -> ColourMode = Code;
  712.  
  713.                                         break;
  714.  
  715.                             case GAD_EMULATIONCTRL:    Config -> Emulation = Code;
  716.  
  717.                                         if(Code == EMULATION_ATOMIC && Config -> ColourMode != COLOUR_AMIGA && Config -> ColourMode != COLOUR_MONO)
  718.                                         {
  719.                                             GT_SetGadgetAttrs(GadgetArray[GAD_COLOUR],PanelWindow,NULL,
  720.                                                 GTCY_Active,COLOUR_MONO,
  721.                                             TAG_DONE);
  722.  
  723.                                             Config -> ColourMode = COLOUR_MONO;
  724.                                         }
  725.  
  726.                                         GT_SetGadgetAttrs(GadgetArray[GAD_EMUNAME],PanelWindow,NULL,
  727.                                             GA_Disabled,    Config -> Emulation != EMULATION_EXTERNAL,
  728.                                         TAG_DONE);
  729.  
  730.                                         GT_SetGadgetAttrs(GadgetArray[GAD_NEWEMU],PanelWindow,NULL,
  731.                                             GA_Disabled,    Config -> Emulation != EMULATION_EXTERNAL,
  732.                                         TAG_DONE);
  733.  
  734.                                         if((Window -> Height / TextFontHeight) > 24)
  735.                                         {
  736.                                             GT_SetGadgetAttrs(GadgetArray[GAD_SIZE],PanelWindow,NULL,
  737.                                                 GA_Disabled,    Config -> Emulation == EMULATION_EXTERNAL,
  738.                                             TAG_DONE);
  739.                                         }
  740.  
  741.                                         GT_SetGadgetAttrs(GadgetArray[GAD_FONT],PanelWindow,NULL,
  742.                                             GA_Disabled,    Config -> Emulation == EMULATION_EXTERNAL,
  743.                                         TAG_DONE);
  744.  
  745.                                         break;
  746.  
  747.                             case GAD_FONT:        Config -> Font = Code;
  748.                                         break;
  749.  
  750.                             case GAD_STATUSLINE:    TheLine = Code;
  751.                                         break;
  752.  
  753.                             case GAD_USE:        Terminated = TRUE;
  754.  
  755.                                         Config -> CaptureFilter        = GT_CHECKED(GadgetArray[GAD_FILTER]);
  756.                                         Config -> DestructiveBackspace    = GT_CHECKED(GadgetArray[GAD_DESTRBS]);
  757.                                         Config -> SwapBSDelete        = GT_CHECKED(GadgetArray[GAD_SWAP]);
  758.                                         Config -> StripBit8        = GT_CHECKED(GadgetArray[GAD_STRIP]);
  759.                                         Config -> DisableBlinking    = GT_CHECKED(GadgetArray[GAD_DISABLE]);
  760.                                         Config -> TitleBar        = GT_CHECKED(GadgetArray[GAD_TITLEBAR]);
  761.                                         Config -> PrinterEnabled    = GT_CHECKED(GadgetArray[GAD_PRINTER]);
  762.  
  763.                                         if(GT_CHECKED(GadgetArray[GAD_FASTER]))
  764.                                             Config -> DisableBlinking |= TERMINAL_FASTER;
  765.  
  766.                                         strcpy(Config -> EmulationName,    GT_STRING(GadgetArray[GAD_EMUNAME]));
  767.                                         strcpy(Config -> KeyMapName,    GT_STRING(GadgetArray[GAD_KEYMAP]));
  768.                                         strcpy(Config -> AnswerBack,    GT_STRING(GadgetArray[GAD_ANSWERBACK]));
  769.  
  770.                                         Config -> StatusLine = TheLine;
  771.  
  772.                                         switch(Config -> ColourMode)
  773.                                         {
  774.                                             case COLOUR_EIGHT:    CopyMem(&ANSIColours[0],&Config -> Colours[0],16 * sizeof(UWORD));
  775.                                                         break;
  776.  
  777.                                             case COLOUR_SIXTEEN:    CopyMem(&EGAColours[0],&Config -> Colours[0],16 * sizeof(UWORD));
  778.                                                         break;
  779.  
  780.                                             case COLOUR_AMIGA:    CopyMem(&DefaultColours[0],&Config -> Colours[0],16 * sizeof(UWORD));
  781.                                                         break;
  782.  
  783.                                             case COLOUR_MONO:        CopyMem(&AtomicColours[0],&Config -> Colours[0],16 * sizeof(UWORD));
  784.                                                         break;
  785.                                         }
  786.  
  787.                                         break;
  788.  
  789.                             case GAD_NEWEMU:    strcpy(DummyBuffer,GT_STRING(GadgetArray[GAD_EMUNAME]));
  790.  
  791.                                         BlockWindow(PanelWindow);
  792.  
  793.                                         if(SelectEmulator(DummyBuffer,PanelWindow))
  794.                                         {
  795.                                             GT_SetGadgetAttrs(GadgetArray[GAD_EMUNAME],PanelWindow,NULL,
  796.                                                 GTST_String,DummyBuffer,
  797.                                             TAG_DONE);
  798.                                         }
  799.  
  800.                                         ReleaseWindow(PanelWindow);
  801.  
  802.                                         break;
  803.  
  804.                             case GAD_NEWFONT:    BlockWindow(PanelWindow);
  805.  
  806.                                         if(PickFont(PanelWindow,Config -> TextFontName,&Config -> TextFontHeight,TRUE))
  807.                                         {
  808.                                             SPrintf(SharedBuffer,"%s %ld",Config -> TextFontName,Config -> TextFontHeight);
  809.  
  810.                                             GT_SetGadgetAttrs(GadgetArray[GAD_TEXT_FONT],PanelWindow,NULL,
  811.                                                 GTTX_Text,    SharedBuffer,
  812.                                             TAG_DONE);
  813.                                         }
  814.  
  815.                                         ReleaseWindow(PanelWindow);
  816.  
  817.                                         break;
  818.  
  819.                             case GAD_CANCEL:    Terminated = TRUE;
  820.  
  821.                                         CopyMem(&PrivateConfig,Config,sizeof(struct Configuration));
  822.  
  823.                                         break;
  824.  
  825.                             default:        break;
  826.                         }
  827.                     }
  828.                 }
  829.             }
  830.  
  831.             RemoveGList(PanelWindow,GadgetList,(UWORD)-1);
  832.  
  833.             PopWindow();
  834.  
  835.             CloseWindow(PanelWindow);
  836.         }
  837.     }
  838.  
  839.     FreeGadgets(GadgetList);
  840. }
  841.