home *** CD-ROM | disk | FTP | other *** search
/ Otherware / Otherware_1_SB_Development.iso / amiga / comms / comprgs / t22bi2.lha / Source_Code / termSource / SerialPanel.c < prev    next >
Encoding:
C/C++ Source or Header  |  1992-05-09  |  14.1 KB  |  540 lines

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