home *** CD-ROM | disk | FTP | other *** search
/ Frozen Fish 1: Amiga / FrozenFish-Apr94.iso / bbs / alib / d8xx / d832 / term.lha / Term / term-3.1-Source.lha / TerminalPanel.c < prev    next >
C/C++ Source or Header  |  1993-02-18  |  22KB  |  831 lines

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