home *** CD-ROM | disk | FTP | other *** search
/ Otherware / Otherware_1_SB_Development.iso / amiga / comms / comprgs / term232.lha / Source_Code / termSource / SerialPanel.c < prev    next >
Encoding:
C/C++ Source or Header  |  1992-08-18  |  16.1 KB  |  650 lines

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