home *** CD-ROM | disk | FTP | other *** search
/ Amiga Elysian Archive / AmigaElysianArchive.iso / comm / term33so.lha / SerialPanel.c < prev    next >
C/C++ Source or Header  |  1993-04-30  |  17KB  |  644 lines

  1. /*
  2. **    SerialPanel.c
  3. **
  4. **    Editing panel for serial 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_BAUD,GAD_DATABITS,GAD_PARITY,GAD_STOPBITS,GAD_HANDSHAKING,GAD_DUPLEX,GAD_BUFFERSIZE,GAD_BREAKLENGTH,
  13.         GAD_STRIP,GAD_HIGHSPEED,GAD_CHECK_CARRIER,GAD_SHARED,GAD_XON_XOFF,GAD_PASSTHROUGH,
  14.         GAD_DEVICE,GAD_SELECT,GAD_UNIT,GAD_USE,GAD_CANCEL,GAD_DEFAULT };
  15.  
  16. STATIC LONG Sizes[11] =
  17. {
  18.     512,1024,2048,4096,8192,16384,32768,65536,131072,262144,524288
  19. };
  20.  
  21. STATIC STRPTR    DataBits[3],
  22.         Parity[6],
  23.         StopBits[3],
  24.         Handshaking[4],
  25.         Duplex[3];
  26.  
  27. STATIC LONG __saveds
  28. ShowBaud(struct Gadget *SomeGadget,WORD Level)
  29. {
  30.     return(BaudRates[Level]);
  31. }
  32.  
  33. STATIC LONG __saveds
  34. ShowSize(struct Gadget *SomeGadget,WORD Level)
  35. {
  36.     return(Sizes[Level]);
  37. }
  38.  
  39. STATIC struct Gadget *
  40. CreateAllGadgets(struct Configuration *Config,struct Gadget **GadgetArray,struct Gadget **GadgetList,BYTE *Default)
  41. {
  42.     struct Gadget        *Gadget;
  43.     struct NewGadget     NewGadget;
  44.     UWORD             Counter = 0;
  45.     WORD             i,Rate,Size;
  46.  
  47.     SZ_SizeSetup(Window -> WScreen,&UserFont,TRUE);
  48.  
  49.     LocalizeString(DataBits,MSG_SERIALPANEL_SEVEN_BITS_TXT,MSG_SERIALPANEL_EIGHT_BITS_TXT);
  50.     LocalizeString(Parity,MSG_SERIALPANEL_NO_PARITY_TXT,MSG_SERIALPANEL_SPACE_TXT);
  51.     LocalizeString(StopBits,MSG_SERIALPANEL_ONE_BIT_TXT,MSG_SERIALPANEL_TWO_BITS_TXT);
  52.     LocalizeString(Handshaking,MSG_SERIALPANEL_HANDSHAKING_NONE_TXT,MSG_SERIALPANEL_HANDSHAKING_RTS_CTS_DSR_TXT);
  53.     LocalizeString(Duplex,MSG_SERIALPANEL_DUPLEX_FULL_TXT,MSG_SERIALPANEL_DUPLEX_HALF_TXT);
  54.  
  55.     memset(&NewGadget,0,sizeof(struct NewGadget));
  56.  
  57.     if(Gadget = CreateContext(GadgetList))
  58.     {
  59.         for(i = 0 ; i < NumBaudRates ; i++)
  60.         {
  61.             if(Config -> SerialConfig -> BaudRate == BaudRates[i])
  62.             {
  63.                 Rate = i;
  64.  
  65.                 break;
  66.             }
  67.         }
  68.  
  69.         for(i = 0 ; i < sizeof(Sizes) / sizeof(LONG) ; i++)
  70.         {
  71.             if(Config -> SerialConfig -> SerialBufferSize == Sizes[i])
  72.             {
  73.                 Size = i;
  74.  
  75.                 break;
  76.             }
  77.         }
  78.  
  79.         SZ_AddLeftOffset(SZ_LeftOffsetDelta(MSG_SERIALPANEL_BAUD_RATE_GAD,MSG_SERIALPANEL_BREAK_LENGTH_GAD));
  80.  
  81.         SZ_ResetMaxWidth();
  82.  
  83.         SZ_UpdateMaxWidth(CYCLE_KIND,NULL,0,DataBits);
  84.         SZ_UpdateMaxWidth(CYCLE_KIND,NULL,0,Parity);
  85.         SZ_UpdateMaxWidth(CYCLE_KIND,NULL,0,StopBits);
  86.         SZ_UpdateMaxWidth(CYCLE_KIND,NULL,0,Handshaking);
  87.         SZ_UpdateMaxWidth(CYCLE_KIND,NULL,0,Duplex);
  88.         SZ_UpdateMaxWidth(INTEGER_KIND,NULL,8,NULL);
  89.  
  90.         SZ_SetWidth(SZ_ResetMaxWidth());
  91.  
  92.             /* Are we in high speed mode? If so, reset
  93.              * the parameters to defaults.
  94.              */
  95.  
  96.         if(Config -> SerialConfig -> HighSpeed)
  97.         {
  98.             Config -> SerialConfig -> BitsPerChar    = 8;
  99.             Config -> SerialConfig -> StopBits    = 1;
  100.             Config -> SerialConfig -> Parity        = PARITY_NONE;
  101.         }
  102.  
  103.         NewGadget . ng_GadgetText    = LocaleString(MSG_SERIALPANEL_BAUD_RATE_GAD);
  104.         NewGadget . ng_GadgetID        = Counter;
  105.  
  106.         GadgetArray[Counter++] = Gadget = CreateGadget(SLIDER_KIND,Gadget,&NewGadget,
  107.             SZ_Adjust,        TRUE,
  108.             SZ_AutoWidth,        TRUE,
  109.  
  110.             GTSL_Min,        0,
  111.             GTSL_Max,        NumBaudRates - 1,
  112.             GTSL_Level,        Rate,
  113.             GTSL_DispFunc,        ShowBaud,
  114.             GTSL_LevelFormat,    LocaleBase ? "%7lD" : "%7ld",
  115.             GTSL_MaxLevelLen,    7,
  116.         TAG_DONE);
  117.  
  118.         NewGadget . ng_GadgetText    = LocaleString(MSG_SERIALPANEL_BITS_PER_CHAR_GAD);
  119.         NewGadget . ng_GadgetID        = Counter;
  120.  
  121.         GadgetArray[Counter++] = Gadget = CreateGadget(CYCLE_KIND,Gadget,&NewGadget,
  122.             SZ_Adjust,    TRUE,
  123.             SZ_AutoWidth,    TRUE,
  124.  
  125.             GA_Disabled,    Config -> SerialConfig -> HighSpeed,
  126.             GTCY_Labels,    DataBits,
  127.             GTCY_Active,    Config -> SerialConfig -> BitsPerChar - 7,
  128.         TAG_DONE);
  129.  
  130.         NewGadget . ng_GadgetText    = LocaleString(MSG_SERIALPANEL_PARITY_GAD);
  131.         NewGadget . ng_GadgetID        = Counter;
  132.  
  133.         GadgetArray[Counter++] = Gadget = CreateGadget(CYCLE_KIND,Gadget,&NewGadget,
  134.             SZ_Adjust,    TRUE,
  135.             SZ_AutoWidth,    TRUE,
  136.  
  137.             GA_Disabled,    Config -> SerialConfig -> HighSpeed,
  138.             GTCY_Labels,    Parity,
  139.             GTCY_Active,    Config -> SerialConfig -> Parity,
  140.         TAG_DONE);
  141.  
  142.         NewGadget . ng_GadgetText    = LocaleString(MSG_SERIALPANEL_STOP_BITS_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.             GA_Disabled,    Config -> SerialConfig -> HighSpeed,
  150.             GTCY_Labels,    StopBits,
  151.             GTCY_Active,    Config -> SerialConfig -> StopBits - 1,
  152.         TAG_DONE);
  153.  
  154.         NewGadget . ng_GadgetText    = LocaleString(MSG_SERIALPANEL_HANDSHAKING_GAD);
  155.         NewGadget . ng_GadgetID        = Counter;
  156.  
  157.         GadgetArray[Counter++] = Gadget = CreateGadget(CYCLE_KIND,Gadget,&NewGadget,
  158.             SZ_Adjust,    TRUE,
  159.             SZ_AutoWidth,    TRUE,
  160.  
  161.             GTCY_Labels,    Handshaking,
  162.             GTCY_Active,    Config -> SerialConfig -> HandshakingProtocol,
  163.         TAG_DONE);
  164.  
  165.         NewGadget . ng_GadgetText    = LocaleString(MSG_SERIALPANEL_DUPLEX_GAD);
  166.         NewGadget . ng_GadgetID        = Counter;
  167.  
  168.         GadgetArray[Counter++] = Gadget = CreateGadget(CYCLE_KIND,Gadget,&NewGadget,
  169.             SZ_Adjust,    TRUE,
  170.             SZ_AutoWidth,    TRUE,
  171.  
  172.             GTCY_Labels,    Duplex,
  173.             GTCY_Active,    Config -> SerialConfig -> Duplex,
  174.         TAG_DONE);
  175.  
  176.         NewGadget . ng_GadgetText    = LocaleString(MSG_SERIALPANEL_BUFFER_SIZE_GAD);
  177.         NewGadget . ng_GadgetID        = Counter;
  178.  
  179.         GadgetArray[Counter++] = Gadget = CreateGadget(SLIDER_KIND,Gadget,&NewGadget,
  180.             SZ_Adjust,        TRUE,
  181.             SZ_AutoWidth,        TRUE,
  182.  
  183.             GTSL_Min,        0,
  184.             GTSL_Max,        10,
  185.             GTSL_Level,        Size,
  186.             GTSL_DispFunc,        ShowSize,
  187.             GTSL_LevelFormat,    LocaleBase ? "%7lD" : "%7ld",
  188.             GTSL_MaxLevelLen,    7,
  189.         TAG_DONE);
  190.  
  191.         NewGadget . ng_GadgetText    = LocaleString(MSG_SERIALPANEL_BREAK_LENGTH_GAD);
  192.         NewGadget . ng_GadgetID        = Counter;
  193.  
  194.         GadgetArray[Counter++] = Gadget = CreateGadget(INTEGER_KIND,Gadget,&NewGadget,
  195.             SZ_Adjust,    TRUE,
  196.             SZ_AutoWidth,    TRUE,
  197.  
  198.             GTIN_MaxChars,    8,
  199.             GTIN_Number,    Config -> SerialConfig -> BreakLength,
  200.         TAG_DONE);
  201.  
  202.         SZ_AddLeftOffset(SZ_LeftOffsetDelta(MSG_SERIALPANEL_STRIP_BIT_8_GAD,MSG_SERIALPANEL_DEVICE_UNIT_NUMBER_GAD));
  203.  
  204.         SZ_UpdateMaxWidth(FOLDER_KIND,NULL,15,NULL);
  205.         SZ_UpdateMaxWidth(INTEGER_KIND,NULL,15,NULL);
  206.  
  207.         SZ_SetWidth(SZ_ResetMaxWidth());
  208.  
  209.         NewGadget . ng_GadgetText    = LocaleString(MSG_SERIALPANEL_STRIP_BIT_8_GAD);
  210.         NewGadget . ng_GadgetID        = Counter;
  211.  
  212.         GadgetArray[Counter++] = Gadget = CreateGadget(CHECKBOX_KIND,Gadget,&NewGadget,
  213.             SZ_Adjust,    TRUE,
  214.             SZ_NewColumn,    TRUE,
  215.  
  216.             GTCB_Checked,    Config -> SerialConfig -> StripBit8,
  217.         TAG_DONE);
  218.  
  219.         NewGadget . ng_GadgetText    = LocaleString(MSG_SERIALPANEL_HIGH_SPEED_MODE_GAD);
  220.         NewGadget . ng_GadgetID        = Counter;
  221.  
  222.         GadgetArray[Counter++] = Gadget = CreateGadget(CHECKBOX_KIND,Gadget,&NewGadget,
  223.             SZ_Adjust,    TRUE,
  224.  
  225.             GTCB_Checked,    Config -> SerialConfig -> HighSpeed,
  226.         TAG_DONE);
  227.  
  228.         NewGadget . ng_GadgetText    = LocaleString(MSG_SERIALPANEL_CHECK_CARRIER_GAD);
  229.         NewGadget . ng_GadgetID        = Counter;
  230.  
  231.         GadgetArray[Counter++] = Gadget = CreateGadget(CHECKBOX_KIND,Gadget,&NewGadget,
  232.             SZ_Adjust,    TRUE,
  233.  
  234.             GTCB_Checked,    Config -> SerialConfig -> CheckCarrier,
  235.         TAG_DONE);
  236.  
  237.         NewGadget . ng_GadgetText    = LocaleString(MSG_SERIALPANEL_SHARED_ACCESS_GAD);
  238.         NewGadget . ng_GadgetID        = Counter;
  239.  
  240.         GadgetArray[Counter++] = Gadget = CreateGadget(CHECKBOX_KIND,Gadget,&NewGadget,
  241.             SZ_Adjust,    TRUE,
  242.  
  243.             GTCB_Checked,    Config -> SerialConfig -> Shared,
  244.         TAG_DONE);
  245.  
  246.         NewGadget . ng_GadgetText    = LocaleString(MSG_SERIALPANEL_XON_XOFF_GAD);
  247.         NewGadget . ng_GadgetID        = Counter;
  248.  
  249.         GadgetArray[Counter++] = Gadget = CreateGadget(CHECKBOX_KIND,Gadget,&NewGadget,
  250.             SZ_Adjust,    TRUE,
  251.  
  252.             GTCB_Checked,    Config -> SerialConfig -> xONxOFF,
  253.         TAG_DONE);
  254.  
  255.         NewGadget . ng_GadgetText    = LocaleString(MSG_SERIALPANEL_PASS_XON_XOFF_THROUGH_GAD);
  256.         NewGadget . ng_GadgetID        = Counter;
  257.  
  258.         GadgetArray[Counter++] = Gadget = CreateGadget(CHECKBOX_KIND,Gadget,&NewGadget,
  259.             SZ_Adjust,    TRUE,
  260.  
  261.             GTCB_Checked,    Config -> SerialConfig -> PassThrough,
  262.         TAG_DONE);
  263.  
  264.         NewGadget . ng_GadgetText    = LocaleString(MSG_SERIALPANEL_SERIAL_DEVICE_GAD);
  265.         NewGadget . ng_GadgetID        = Counter;
  266.  
  267.         GadgetArray[Counter++] = Gadget = CreateGadget(STRING_KIND,Gadget,&NewGadget,
  268.             SZ_Adjust,    TRUE,
  269.             SZ_AutoWidth,    TRUE,
  270.             SZ_LeaveFolder,    TRUE,
  271.  
  272.             GTST_MaxChars,    255,
  273.             GTST_String,    Config -> SerialConfig -> SerialDevice,
  274.         TAG_DONE);
  275.  
  276.         NewGadget . ng_GadgetID        = Counter;
  277.  
  278.         GadgetArray[Counter++] = Gadget = CreateGadget(FILE_KIND,Gadget,&NewGadget,
  279.             SZ_Adjust,    TRUE,
  280.             SZ_AutoWidth,    TRUE,
  281.             SZ_PlaceLeft,    TRUE,
  282.         TAG_DONE);
  283.  
  284.         NewGadget . ng_GadgetText    = LocaleString(MSG_SERIALPANEL_DEVICE_UNIT_NUMBER_GAD);
  285.         NewGadget . ng_GadgetID        = Counter;
  286.  
  287.         GadgetArray[Counter++] = Gadget = CreateGadget(INTEGER_KIND,Gadget,&NewGadget,
  288.             SZ_Adjust,    TRUE,
  289.             SZ_AutoWidth,    TRUE,
  290.  
  291.             GTIN_MaxChars,    8,
  292.             GTIN_Number,    Config -> SerialConfig -> UnitNumber,
  293.         TAG_DONE);
  294.  
  295.         SZ_UpdateMaxWidth(BUTTON_KIND,LocaleString(MSG_GLOBAL_USE_GAD),0,NULL);
  296.         SZ_UpdateMaxWidth(BUTTON_KIND,LocaleString(MSG_GLOBAL_CANCEL_GAD),0,NULL);
  297.         SZ_UpdateMaxWidth(BUTTON_KIND,LocaleString(MSG_GLOBAL_DEFAULT_GAD),0,NULL);
  298.  
  299.         SZ_SetWidth(SZ_ResetMaxWidth());
  300.  
  301.         NewGadget . ng_GadgetText    = LocaleString(MSG_GLOBAL_USE_GAD);
  302.         NewGadget . ng_GadgetID        = Counter;
  303.         NewGadget . ng_Flags        = 0;
  304.  
  305.         GadgetArray[Counter++] = Gadget = CreateGadget(BUTTON_KIND,Gadget,&NewGadget,
  306.             SZ_AlignExtra,    TRUE,
  307.             SZ_Adjust,    TRUE,
  308.             SZ_AutoWidth,    TRUE,
  309.             SZ_AlignLeft,    TRUE,
  310.             SZ_AlignBottom,    TRUE,
  311.         TAG_DONE);
  312.  
  313.         NewGadget . ng_GadgetText    = LocaleString(MSG_GLOBAL_CANCEL_GAD);
  314.         NewGadget . ng_GadgetID        = Counter;
  315.  
  316.         GadgetArray[Counter++] = Gadget = CreateGadget(BUTTON_KIND,Gadget,&NewGadget,
  317.             SZ_Adjust,    TRUE,
  318.             SZ_AutoWidth,    TRUE,
  319.             SZ_AlignRight,    TRUE,
  320.         TAG_DONE);
  321.  
  322.         if(Default)
  323.         {
  324.             NewGadget . ng_GadgetText    = LocaleString(MSG_GLOBAL_DEFAULT_GAD);
  325.             NewGadget . ng_GadgetID        = Counter;
  326.  
  327.             GadgetArray[Counter] = Gadget = CreateGadget(BUTTON_KIND,Gadget,&NewGadget,
  328.                 SZ_Adjust,    TRUE,
  329.                 SZ_AutoWidth,    TRUE,
  330.                 SZ_AlignCentre,    TRUE,
  331.             TAG_DONE);
  332.         }
  333.     }
  334.  
  335.     return(Gadget);
  336. }
  337.  
  338.     /* SelectDevice(UBYTE *Name,struct Window *ParentWindow):
  339.      *
  340.      *    Select a new serial driver device using the
  341.      *    asl.library file requester.
  342.      */
  343.  
  344. STATIC BYTE
  345. SelectDevice(UBYTE *Name,struct Window *ParentWindow)
  346. {
  347.     struct FileRequester    *AslFileRequest;
  348.     UBYTE            *File;
  349.     BYTE             NewDevice = FALSE;
  350.  
  351.     File = Name;
  352.  
  353.     if(FilePart(File) == File)
  354.         strcpy(SharedBuffer,"Devs:");
  355.     else
  356.     {
  357.         UBYTE *Temp;
  358.  
  359.         strcpy(SharedBuffer,File);
  360.  
  361.         Temp = PathPart(SharedBuffer);
  362.  
  363.         Temp[0] = 0;
  364.  
  365.         File = FilePart(File);
  366.     }
  367.  
  368.     if(AslFileRequest = (struct FileRequester *)AllocAslRequestTags(ASL_FileRequest,
  369.         ASL_Window,    ParentWindow,
  370.         ASL_File,    File,
  371.         ASL_Dir,    SharedBuffer,
  372.         ASL_Hail,    LocaleString(MSG_SERIALPANEL_SELECT_DEVICE_TXT),
  373.         ASL_FuncFlags,    FILF_NEWIDCMP,
  374.         ASL_Pattern,    "#?.device",
  375.         ASL_OKText,    LocaleString(MSG_GLOBAL_SELECT_TXT),
  376.     TAG_END))
  377.     {
  378.         if(AslRequestTags(AslFileRequest,TAG_DONE))
  379.         {
  380.             if(AslFileRequest -> rf_File[0])
  381.             {
  382.                 if(Stricmp(AslFileRequest -> rf_Dir,"Devs:"))
  383.                 {
  384.                     strcpy(SharedBuffer,AslFileRequest -> rf_Dir);
  385.  
  386.                     if(!AddPart(SharedBuffer,AslFileRequest -> rf_File,MAX_FILENAME_LENGTH))
  387.                         strcpy(SharedBuffer,AslFileRequest -> rf_File);
  388.                 }
  389.                 else
  390.                     strcpy(SharedBuffer,AslFileRequest -> rf_File);
  391.  
  392.                 if(Stricmp(SharedBuffer,Name))
  393.                 {
  394.                     strcpy(Name,SharedBuffer);
  395.  
  396.                     NewDevice = TRUE;
  397.                 }
  398.             }
  399.         }
  400.  
  401.         FreeAslRequest(AslFileRequest);
  402.     }
  403.  
  404.     return(NewDevice);
  405. }
  406.  
  407. BYTE
  408. SerialPanel(struct Configuration *Config,BYTE *Default)
  409. {
  410.     struct Window    *PanelWindow;
  411.     struct Gadget    *GadgetList = NULL;
  412.     struct Gadget    *GadgetArray[GAD_DEFAULT + 1];
  413.     UBYTE         DummyBuffer[MAX_FILENAME_LENGTH];
  414.  
  415.     SaveConfig(Config,PrivateConfig);
  416.  
  417.     if(CreateAllGadgets(Config,GadgetArray,&GadgetList,Default))
  418.     {
  419.         if(PanelWindow = OpenWindowTags(NULL,
  420.             WA_Left,    GetScreenLeft(Window) + (GetScreenWidth(Window) - SZ_GetWindowWidth()) / 2,
  421.             WA_Top,        GetScreenTop(Window) + (GetScreenHeight(Window) - SZ_GetWindowHeight())    / 2,
  422.             WA_Width,    SZ_GetWindowWidth(),
  423.             WA_Height,    SZ_GetWindowHeight(),
  424.  
  425.             WA_Activate,    TRUE,
  426.             WA_DragBar,    TRUE,
  427.             WA_DepthGadget,    TRUE,
  428.             WA_RMBTrap,    TRUE,
  429.             WA_DepthGadget,    TRUE,
  430.             WA_CloseGadget,    TRUE,
  431.             WA_CustomScreen,Window -> WScreen,
  432.  
  433.             WA_IDCMP,    IDCMP_GADGETDOWN | IDCMP_ACTIVEWINDOW | IDCMP_CLOSEWINDOW | IDCMP_RAWKEY | IDCMP_VANILLAKEY | SLIDERIDCMP | CHECKBOXIDCMP | BUTTONIDCMP | CYCLEIDCMP | INTEGERIDCMP | STRINGIDCMP,
  434.  
  435.             WA_Title,    LocaleString(MSG_SERIALPANEL_SERIAL_PREFERENCES_TXT),
  436.         TAG_DONE))
  437.         {
  438.             struct IntuiMessage    *Massage;
  439.             ULONG             IClass,Code;
  440.             struct Gadget        *Gadget;
  441.             BYTE             Terminated = FALSE;
  442.  
  443.             GuideContext(CONTEXT_SERIAL);
  444.  
  445.             PushWindow(PanelWindow);
  446.  
  447.             AddGList(PanelWindow,GadgetList,(UWORD)-1,(UWORD)-1,NULL);
  448.             RefreshGList(GadgetList,PanelWindow,NULL,(UWORD)-1);
  449.             GT_RefreshWindow(PanelWindow,NULL);
  450.  
  451.             ActiveGadget = NULL;
  452.  
  453.             ClrSignal(SIG_BREAK);
  454.  
  455.             while(!Terminated)
  456.             {
  457.                 if(Wait(PORTMASK(PanelWindow -> UserPort) | SIG_BREAK) & SIG_BREAK)
  458.                 {
  459.                     SaveConfig(PrivateConfig,Config);
  460.  
  461.                     break;
  462.                 }
  463.  
  464.                 while(!Terminated && (Massage = (struct IntuiMessage *)GT_GetIMsg(PanelWindow -> UserPort)))
  465.                 {
  466.                     IClass    = Massage -> Class;
  467.                     Code    = Massage -> Code;
  468.                     Gadget    = (struct Gadget *)Massage -> IAddress;
  469.  
  470.                     GT_ReplyIMsg(Massage);
  471.  
  472.                     KeySelect(GadgetArray,GAD_CANCEL,Code,PanelWindow,&Gadget,&IClass,&Code);
  473.  
  474.                     if(IClass == IDCMP_GADGETDOWN)
  475.                     {
  476.                         if((Gadget -> GadgetType & GTYP_GTYPEMASK) == GTYP_STRGADGET)
  477.                             ActiveGadget = Gadget;
  478.                     }
  479.  
  480.                     if(IClass == IDCMP_ACTIVEWINDOW && ActiveGadget)
  481.                         ActivateGadget(ActiveGadget,PanelWindow,NULL);
  482.  
  483.                     if(IClass == IDCMP_CLOSEWINDOW)
  484.                     {
  485.                         SaveConfig(PrivateConfig,Config);
  486.  
  487.                         Terminated = TRUE;
  488.                     }
  489.  
  490.                     if(IClass == IDCMP_MOUSEMOVE)
  491.                     {
  492.                         switch(Gadget -> GadgetID)
  493.                         {
  494.                             case GAD_BAUD:
  495.  
  496.                                 Config -> SerialConfig -> BaudRate = BaudRates[Code];
  497.                                 break;
  498.  
  499.                             case GAD_BUFFERSIZE:
  500.  
  501.                                 Config -> SerialConfig -> SerialBufferSize = Sizes[Code];
  502.                                 break;
  503.                         }
  504.                     }
  505.  
  506.                     if(IClass == IDCMP_GADGETUP)
  507.                     {
  508.                         switch(Gadget -> GadgetID)
  509.                         {
  510.                             case GAD_HIGHSPEED:
  511.  
  512.                                 if(SZ_GetChecked(Gadget))
  513.                                 {
  514.                                     GT_SetGadgetAttrs(GadgetArray[GAD_DATABITS],PanelWindow,NULL,
  515.                                         GA_Disabled,    TRUE,
  516.                                         GTCY_Active,    1,
  517.                                     TAG_DONE);
  518.  
  519.                                     Config -> SerialConfig -> BitsPerChar = 8;
  520.  
  521.                                     GT_SetGadgetAttrs(GadgetArray[GAD_STOPBITS],PanelWindow,NULL,
  522.                                         GA_Disabled,    TRUE,
  523.                                         GTCY_Active,    0,
  524.                                     TAG_DONE);
  525.  
  526.                                     Config -> SerialConfig -> StopBits = 1;
  527.  
  528.                                     GT_SetGadgetAttrs(GadgetArray[GAD_PARITY],PanelWindow,NULL,
  529.                                         GA_Disabled,    TRUE,
  530.                                         GTCY_Active,    PARITY_NONE,
  531.                                     TAG_DONE);
  532.  
  533.                                     Config -> SerialConfig -> Parity = PARITY_NONE;
  534.                                 }
  535.                                 else
  536.                                 {
  537.                                     GT_SetGadgetAttrs(GadgetArray[GAD_DATABITS],PanelWindow,NULL,
  538.                                         GA_Disabled,FALSE,
  539.                                     TAG_DONE);
  540.  
  541.                                     GT_SetGadgetAttrs(GadgetArray[GAD_STOPBITS],PanelWindow,NULL,
  542.                                         GA_Disabled,FALSE,
  543.                                     TAG_DONE);
  544.  
  545.                                     GT_SetGadgetAttrs(GadgetArray[GAD_PARITY],PanelWindow,NULL,
  546.                                         GA_Disabled,FALSE,
  547.                                     TAG_DONE);
  548.                                 }
  549.  
  550.                                 break;
  551.  
  552.                             case GAD_DUPLEX:
  553.  
  554.                                 Config -> SerialConfig -> Duplex = Code;
  555.                                 break;
  556.  
  557.                             case GAD_HANDSHAKING:
  558.  
  559.                                 Config -> SerialConfig -> HandshakingProtocol = Code;
  560.                                 break;
  561.  
  562.                             case GAD_STOPBITS:
  563.  
  564.                                 Config -> SerialConfig -> StopBits = 1 + Code;
  565.                                 break;
  566.  
  567.                             case GAD_PARITY:
  568.  
  569.                                 Config -> SerialConfig -> Parity = Code;
  570.                                 break;
  571.  
  572.                             case GAD_DATABITS:
  573.  
  574.                                 Config -> SerialConfig -> BitsPerChar = 7 + Code;
  575.                                 break;
  576.  
  577.                             case GAD_SELECT:
  578.  
  579.                                 BlockWindow(PanelWindow);
  580.  
  581.                                 strcpy(DummyBuffer,SZ_GetString(GadgetArray[GAD_DEVICE]));
  582.  
  583.                                 if(SelectDevice(DummyBuffer,PanelWindow))
  584.                                 {
  585.                                     GT_SetGadgetAttrs(GadgetArray[GAD_DEVICE],PanelWindow,NULL,
  586.                                         GTST_String,DummyBuffer,
  587.                                     TAG_DONE);
  588.                                 }
  589.  
  590.                                 ReleaseWindow(PanelWindow);
  591.  
  592.                                 break;
  593.  
  594.                             case GAD_USE:
  595.  
  596.                                 Terminated = TRUE;
  597.  
  598.                                 strcpy(Config -> SerialConfig -> SerialDevice,SZ_GetString(GadgetArray[GAD_DEVICE]));
  599.  
  600.                                 Config -> SerialConfig -> UnitNumber    = SZ_GetInteger(GadgetArray[GAD_UNIT]);
  601.  
  602.                                 Config -> SerialConfig -> BreakLength    = SZ_GetInteger(GadgetArray[GAD_BREAKLENGTH]);
  603.                                 Config -> SerialConfig -> StripBit8    = SZ_GetChecked(GadgetArray[GAD_STRIP]);
  604.                                 Config -> SerialConfig -> HighSpeed    = SZ_GetChecked(GadgetArray[GAD_HIGHSPEED]);
  605.                                 Config -> SerialConfig -> CheckCarrier    = SZ_GetChecked(GadgetArray[GAD_CHECK_CARRIER]);
  606.                                 Config -> SerialConfig -> Shared    = SZ_GetChecked(GadgetArray[GAD_SHARED]);
  607.                                 Config -> SerialConfig -> xONxOFF    = SZ_GetChecked(GadgetArray[GAD_XON_XOFF]);
  608.                                 Config -> SerialConfig -> PassThrough    = SZ_GetChecked(GadgetArray[GAD_PASSTHROUGH]);
  609.  
  610.                                 break;
  611.  
  612.                             case GAD_CANCEL:
  613.  
  614.                                 Terminated = TRUE;
  615.  
  616.                                 SaveConfig(PrivateConfig,Config);
  617.  
  618.                                 break;
  619.  
  620.                             case GAD_DEFAULT:
  621.  
  622.                                 *Default    = TRUE;
  623.  
  624.                                 Terminated    = TRUE;
  625.  
  626.                                 break;
  627.                         }
  628.                     }
  629.                 }
  630.             }
  631.  
  632.             RemoveGList(PanelWindow,GadgetList,(UWORD)-1);
  633.  
  634.             PopWindow();
  635.  
  636.             CloseWindow(PanelWindow);
  637.         }
  638.     }
  639.  
  640.     FreeGadgets(GadgetList);
  641.  
  642.     return((BYTE)memcmp(PrivateConfig -> SerialConfig,Config -> SerialConfig,sizeof(struct SerialSettings)));
  643. }
  644.