home *** CD-ROM | disk | FTP | other *** search
/ BCI NET 2 / BCI NET 2.iso / archives / programming / source / term43-source.lha / Extras / Source / term-Source.lha / ModemPanel.c < prev    next >
Encoding:
C/C++ Source or Header  |  1995-02-18  |  12.4 KB  |  535 lines

  1. /*
  2. **    ModemPanel.c
  3. **
  4. **    Editing panel for modem configuration
  5. **
  6. **    Copyright © 1990-1995 by Olaf `Olsen' Barthel
  7. **        All Rights Reserved
  8. */
  9.  
  10. #include "termGlobal.h"
  11.  
  12. enum    {    GAD_LIMIT_MACRO=1000,GAD_DIAL_PREFIX,GAD_DIAL_SUFFIX,
  13.         GAD_DIAL_MODE,GAD_USE,GAD_CANCEL,GAD_DEFAULT,
  14.         GAD_PAGER,GAD_PAGEGROUP,
  15.     };
  16.  
  17. STATIC UBYTE * __saveds
  18. ShowDialRetries(struct Gadget *SomeGadget,WORD Level)
  19. {
  20.     if(Level < 0)
  21.         return(LocaleString(MSG_DIAL_RETRIES_UNLIMITED_TXT));
  22.     else
  23.     {
  24.         STATIC UBYTE __far Buffer[10];
  25.  
  26.         SPrintf(Buffer,"%ld",Level);
  27.  
  28.         return(Buffer);
  29.     }
  30. }
  31.  
  32. STATIC UBYTE * __saveds
  33. ShowHours(struct Gadget *SomeGadget,WORD Level)
  34. {
  35.     STATIC UBYTE __far Buffer[15];
  36.  
  37.     SPrintf(Buffer,LocaleString(MSG_GLOBAL_SHOW_HOURS_TXT),Level / 60,Level % 60);
  38.  
  39.     return(Buffer);
  40. }
  41.  
  42. STATIC UBYTE * __saveds
  43. ShowSeconds(struct Gadget *SomeGadget,WORD Level)
  44. {
  45.     STATIC UBYTE __far Buffer[15];
  46.  
  47.     SPrintf(Buffer,LocaleString(MSG_GLOBAL_SHOW_MINUTES_TXT),Level / 60,Level % 60);
  48.  
  49.     return(Buffer);
  50. }
  51.  
  52. BYTE __regargs
  53. ModemPanel(struct Configuration *Config,BYTE *Default)
  54. {
  55.     STATIC LONG PageTitleID[6] =
  56.     {
  57.         MSG_V36_0110,
  58.         MSG_V36_0111,
  59.         MSG_V36_0112,
  60.         MSG_V36_0116,
  61.         MSG_V36_0118,
  62.         -1
  63.     };
  64.  
  65.     STATIC BYTE InitialPage = 0;
  66.  
  67.     struct LayoutHandle    *Handle;
  68.     BYTE             Cancel = FALSE;
  69.     STRPTR             PageTitle[6];
  70.  
  71.     LocalizeStringTable(PageTitle,PageTitleID);
  72.  
  73.     SaveConfig(Config,PrivateConfig);
  74.  
  75.     if(Handle = LT_CreateHandleTags(Window -> WScreen,
  76.         LH_LocaleHook,    &LocaleHook,
  77.         LH_ExitFlush,    FALSE,
  78.     TAG_DONE))
  79.     {
  80.         struct Window *PanelWindow;
  81.  
  82.         LT_New(Handle,
  83.             LA_Type,    VERTICAL_KIND,
  84.         TAG_DONE);
  85.         {
  86.             LT_New(Handle,
  87.                 LA_Type,VERTICAL_KIND,
  88.             TAG_DONE);
  89.             {
  90.                 LT_New(Handle,
  91.                     LA_Type,    CYCLE_KIND,
  92.                     LA_ID,        GAD_PAGER,
  93.                     LA_LabelID,    MSG_XFER_PAGE_TXT,
  94.                     GTCY_Labels,    PageTitle,
  95.                     LACY_AutoPageID,GAD_PAGEGROUP,
  96.                     LACY_TabKey,    TRUE,
  97.                     LA_BYTE,    &InitialPage,
  98.                 TAG_DONE);
  99.  
  100.                 LT_EndGroup(Handle);
  101.             }
  102.  
  103.             LT_New(Handle,
  104.                 LA_Type,    VERTICAL_KIND,
  105.                 LA_ID,        GAD_PAGEGROUP,
  106.                 LAGR_Frame,    TRUE,
  107.                 LAGR_ActivePage,InitialPage,
  108.             TAG_DONE);
  109.             {
  110.                 LT_New(Handle,
  111.                     LA_Type,    VERTICAL_KIND,
  112.                 TAG_DONE);
  113.                 {
  114.                     LT_New(Handle,
  115.                         LA_Type,    STRING_KIND,
  116.                         LA_LabelID,    MSG_MODEMPANEL_MODEM_INIT_STRING_GAD,
  117.                         LA_STRPTR,    Config -> ModemConfig -> ModemInit,
  118.                         LA_Chars,    20,
  119.                         GTST_MaxChars,    79,
  120.                     TAG_DONE);
  121.  
  122.                     LT_New(Handle,
  123.                         LA_Type,    STRING_KIND,
  124.                         LA_LabelID,    MSG_MODEMPANEL_MODEM_EXIT_STRING_GAD,
  125.                         LA_STRPTR,    Config -> ModemConfig -> ModemExit,
  126.                         GTST_MaxChars,    79,
  127.                     TAG_DONE);
  128.  
  129.                     LT_New(Handle,
  130.                         LA_Type,    STRING_KIND,
  131.                         LA_LabelID,    MSG_MODEMPANEL_MODEM_HANGUP_STRING_GAD,
  132.                         LA_STRPTR,    Config -> ModemConfig -> ModemHangup,
  133.                         GTST_MaxChars,    79,
  134.                     TAG_DONE);
  135.  
  136.                     LT_EndGroup(Handle);
  137.                 }
  138.  
  139.                 LT_New(Handle,
  140.                     LA_Type,    VERTICAL_KIND,
  141.                 TAG_DONE);
  142.                 {
  143.                     LT_New(Handle,
  144.                         LA_Type,    STRING_KIND,
  145.                         LA_LabelID,    MSG_MODEMPANEL_NO_CARRIER_STRING_GAD,
  146.                         LA_STRPTR,    Config -> ModemConfig -> NoCarrier,
  147.                         LA_Chars,    20,
  148.                         GTST_MaxChars,    15,
  149.                     TAG_DONE);
  150.  
  151.                     LT_New(Handle,
  152.                         LA_Type,    STRING_KIND,
  153.                         LA_LabelID,    MSG_MODEMPANEL_NO_DIALTONE_STRING_GAD,
  154.                         LA_STRPTR,    Config -> ModemConfig -> NoDialTone,
  155.                         GTST_MaxChars,    15,
  156.                     TAG_DONE);
  157.  
  158.                     LT_New(Handle,
  159.                         LA_Type,    STRING_KIND,
  160.                         LA_LabelID,    MSG_MODEMPANEL_CONNECT_STRING_GAD,
  161.                         LA_STRPTR,    Config -> ModemConfig -> Connect,
  162.                         GTST_MaxChars,    15,
  163.                     TAG_DONE);
  164.  
  165.                     LT_New(Handle,
  166.                         LA_Type,    STRING_KIND,
  167.                         LA_LabelID,    MSG_MODEMPANEL_VOICE_STRING_GAD,
  168.                         LA_STRPTR,    Config -> ModemConfig -> Voice,
  169.                         GTST_MaxChars,    15,
  170.                     TAG_DONE);
  171.  
  172.                     LT_New(Handle,
  173.                         LA_Type,    STRING_KIND,
  174.                         LA_LabelID,    MSG_MODEMPANEL_RING_STRING_GAD,
  175.                         LA_STRPTR,    Config -> ModemConfig -> Ring,
  176.                         GTST_MaxChars,    15,
  177.                     TAG_DONE);
  178.  
  179.                     LT_New(Handle,
  180.                         LA_Type,    STRING_KIND,
  181.                         LA_LabelID,    MSG_MODEMPANEL_BUSY_STRING_GAD,
  182.                         LA_STRPTR,    Config -> ModemConfig -> Busy,
  183.                         GTST_MaxChars,    15,
  184.                     TAG_DONE);
  185.  
  186.                     LT_New(Handle,
  187.                         LA_Type,    STRING_KIND,
  188.                         LA_LabelID,    MSG_MODEMPANEL_OK_STRING_GAD,
  189.                         LA_STRPTR,    Config -> ModemConfig -> Ok,
  190.                         GTST_MaxChars,    15,
  191.                     TAG_DONE);
  192.  
  193.                     LT_New(Handle,
  194.                         LA_Type,    STRING_KIND,
  195.                         LA_LabelID,    MSG_MODEMPANEL_ERROR_STRING_GAD,
  196.                         LA_STRPTR,    Config -> ModemConfig -> Error,
  197.                         GTST_MaxChars,    15,
  198.                     TAG_DONE);
  199.  
  200.                     LT_EndGroup(Handle);
  201.                 }
  202.  
  203.                 LT_New(Handle,
  204.                     LA_Type,    VERTICAL_KIND,
  205.                 TAG_DONE);
  206.                 {
  207.                     BOOL NotFound = TRUE;
  208.                     WORD i;
  209.  
  210.                     for(i = 0 ; NotFound && i < strlen(Config -> ModemConfig -> DialPrefix) - 1 ; i++)
  211.                     {
  212.                         if(Config -> ModemConfig -> DialPrefix[i] == '\\' && ToUpper(Config -> ModemConfig -> DialPrefix[i + 1]) == 'W')
  213.                             NotFound = FALSE;
  214.                     }
  215.  
  216.                     for(i = 0 ; NotFound && i < strlen(Config -> ModemConfig -> DialSuffix) - 1 ; i++)
  217.                     {
  218.                         if(Config -> ModemConfig -> DialSuffix[i] == '\\' && ToUpper(Config -> ModemConfig -> DialSuffix[i + 1]) == 'W')
  219.                             NotFound = FALSE;
  220.                     }
  221.  
  222.                     LT_New(Handle,
  223.                         LA_Type,    STRING_KIND,
  224.                         LA_LabelID,    MSG_MODEMPANEL_DIAL_PREFIX_GAD,
  225.                         LA_STRPTR,    Config -> ModemConfig -> DialPrefix,
  226.                         LA_Chars,    20,
  227.                         LA_ID,        GAD_DIAL_PREFIX,
  228.                         GTST_MaxChars,    79,
  229.                     TAG_DONE);
  230.  
  231.                     LT_New(Handle,
  232.                         LA_Type,    STRING_KIND,
  233.                         LA_LabelID,    MSG_MODEMPANEL_DIAL_SUFFIX_GAD,
  234.                         LA_STRPTR,    Config -> ModemConfig -> DialSuffix,
  235.                         LA_ID,        GAD_DIAL_SUFFIX,
  236.                         GTST_MaxChars,    79,
  237.                     TAG_DONE);
  238.  
  239.                     LT_New(Handle,
  240.                         LA_Type,        CYCLE_KIND,
  241.                         LA_LabelID,        MSG_DIALMODE2_GAD,
  242.                         LA_BYTE,        &Config -> ModemConfig -> DialMode,
  243.                         LA_ID,            GAD_DIAL_MODE,
  244.                         LACY_FirstLabel,    MSG_DIALMODE1_TXT,
  245.                         LACY_LastLabel,        MSG_DIALMODE2_TXT,
  246.                         GA_Disabled,        NotFound,
  247.                     TAG_DONE);
  248.  
  249.                     LT_New(Handle,
  250.                         LA_Type,        SliderType,
  251.                         LA_LabelID,        MSG_MODEMPANEL_REDIAL_DELAY_GAD,
  252.                         LA_LONG,        &Config -> ModemConfig -> RedialDelay,
  253.                         GTSL_Min,        0,
  254.                         GTSL_Max,        60 * 60,
  255.                         GTSL_DispFunc,        ShowSeconds,
  256.                         GTSL_LevelFormat,    "%s",
  257.                     TAG_DONE);
  258.  
  259.                     LT_New(Handle,
  260.                         LA_Type,        SliderType,
  261.                         LA_LabelID,        MSG_MODEMPANEL_DIAL_RETRIES_GAD,
  262.                         LA_LONG,        &Config -> ModemConfig -> DialRetries,
  263.                         GTSL_DispFunc,        ShowDialRetries,
  264.                         GTSL_Min,        -1,
  265.                         GTSL_Max,        1000,
  266.                         GTSL_LevelFormat,    "%s",
  267.                     TAG_DONE);
  268.  
  269.                     LT_New(Handle,
  270.                         LA_Type,        SliderType,
  271.                         LA_LabelID,        MSG_MODEMPANEL_DIAL_TIMEOUT_GAD,
  272.                         LA_LONG,        &Config -> ModemConfig -> DialTimeout,
  273.                         GTSL_Min,        0,
  274.                         GTSL_Max,        1800,
  275.                         GTSL_DispFunc,        ShowSeconds,
  276.                         GTSL_LevelFormat,    "%s",
  277.                     TAG_DONE);
  278.  
  279.                     LT_New(Handle,
  280.                         LA_Type,        CHECKBOX_KIND,
  281.                         LA_LabelID,        MSG_MODEMPANEL_REDIAL_AFTER_HANGUP_GAD,
  282.                         LA_BYTE,        &Config -> ModemConfig -> RedialAfterHangup,
  283.                     TAG_DONE);
  284.  
  285.                     LT_New(Handle,
  286.                         LA_Type,        CHECKBOX_KIND,
  287.                         LA_LabelID,        MSG_VERBOSE_DIALING_TXT,
  288.                         LA_BYTE,        &Config -> ModemConfig -> VerboseDialing,
  289.                     TAG_DONE);
  290.  
  291.                     LT_EndGroup(Handle);
  292.                 }
  293.  
  294.                 LT_New(Handle,
  295.                     LA_Type,    VERTICAL_KIND,
  296.                 TAG_DONE);
  297.                 {
  298.                     LT_New(Handle,
  299.                         LA_Type,        CHECKBOX_KIND,
  300.                         LA_LabelID,        MSG_MODEMPANEL_CONNECT_AUTO_BAUD_GAD,
  301.                         LA_BYTE,        &Config -> ModemConfig -> ConnectAutoBaud,
  302.                     TAG_DONE);
  303.  
  304.                     LT_New(Handle,
  305.                         LA_Type,        CHECKBOX_KIND,
  306.                         LA_LabelID,        MSG_MODEMPANEL_DROP_DTR_ON_HANGUP_GAD,
  307.                         LA_BYTE,        &Config -> ModemConfig -> DropDTR,
  308.                     TAG_DONE);
  309.  
  310.                     LT_New(Handle,
  311.                         LA_Type,        CHECKBOX_KIND,
  312.                         LA_LabelID,        MSG_MODEMPANEL_NOCARRIER_IS_BUSY_GAD,
  313.                         LA_BYTE,        &Config -> ModemConfig -> NoCarrierIsBusy,
  314.                     TAG_DONE);
  315.  
  316.                     LT_New(Handle,
  317.                         LA_Type,        CHECKBOX_KIND,
  318.                         LA_LabelID,        MSG_MODEMPANEL_ABORT_HANGS_UP_TXT,
  319.                         LA_BYTE,        &Config -> ModemConfig -> AbortHangsUp,
  320.                     TAG_DONE);
  321.  
  322.                     LT_New(Handle,
  323.                         LA_Type,        SliderType,
  324.                         LA_LabelID,        MSG_MODEMPANEL_TIME_TO_CONNECT_GAD,
  325.                         LA_LONG,        &Config -> ModemConfig -> TimeToConnect,
  326.                         LA_Chars,        8,
  327.                         GTSL_Min,        0,
  328.                         GTSL_Max,        60 * 60,
  329.                         GTSL_DispFunc,        ShowSeconds,
  330.                         GTSL_LevelFormat,    "%s",
  331.                     TAG_DONE);
  332.  
  333.                     LT_EndGroup(Handle);
  334.                 }
  335.  
  336.                 LT_New(Handle,
  337.                     LA_Type,    VERTICAL_KIND,
  338.                 TAG_DONE);
  339.                 {
  340.                     LT_New(Handle,
  341.                         LA_Type,        SliderType,
  342.                         LA_LabelID,        MSG_MODEMPANEL_CONNECTION_LIMIT_GAD,
  343.                         LA_WORD,        &Config -> ModemConfig -> ConnectLimit,
  344.                         GTSL_Min,        0,
  345.                         GTSL_Max,        1440,
  346.                         GTSL_DispFunc,        ShowHours,
  347.                         GTSL_LevelFormat,    "%s",
  348.                     TAG_DONE);
  349.  
  350.                     LT_New(Handle,
  351.                         LA_Type,        STRING_KIND,
  352.                         LA_LabelID,        MSG_MODEMPANEL_LIMIT_MACRO_GAD,
  353.                         LA_STRPTR,        Config -> ModemConfig -> ConnectLimitMacro,
  354.                         LA_Chars,        20,
  355.                         LA_ID,            GAD_LIMIT_MACRO,
  356.                         GTST_MaxChars,        MAX_FILENAME_LENGTH - 1,
  357.                     TAG_DONE);
  358.  
  359.                     LT_EndGroup(Handle);
  360.                 }
  361.  
  362.                 LT_EndGroup(Handle);
  363.             }
  364.  
  365.             LT_New(Handle,
  366.                 LA_Type,    VERTICAL_KIND,
  367.             TAG_DONE);
  368.             {
  369.                 LT_New(Handle,LA_Type,XBAR_KIND,LAXB_FullSize,TRUE,TAG_DONE);
  370.  
  371.                 LT_EndGroup(Handle);
  372.             }
  373.  
  374.             LT_New(Handle,LA_Type,HORIZONTAL_KIND,
  375.                 LAGR_SameSize,    TRUE,
  376.                 LAGR_Spread,    TRUE,
  377.             TAG_DONE);
  378.             {
  379.                 LT_New(Handle,
  380.                     LA_Type,    BUTTON_KIND,
  381.                     LA_LabelID,    MSG_GLOBAL_USE_GAD,
  382.                     LA_ID,        GAD_USE,
  383.                     LABT_ReturnKey,    TRUE,
  384.                     LABT_ExtraFat,    TRUE,
  385.                 TAG_DONE);
  386.  
  387.                 if(Default)
  388.                 {
  389.                     LT_New(Handle,
  390.                         LA_Type,    BUTTON_KIND,
  391.                         LA_LabelID,    MSG_GLOBAL_DEFAULT_GAD,
  392.                         LA_ID,        GAD_DEFAULT,
  393.                         LABT_ExtraFat,    TRUE,
  394.                     TAG_DONE);
  395.                 }
  396.  
  397.                 LT_New(Handle,
  398.                     LA_Type,    BUTTON_KIND,
  399.                     LA_LabelID,    MSG_GLOBAL_CANCEL_GAD,
  400.                     LA_ID,        GAD_CANCEL,
  401.                     LABT_EscKey,    TRUE,
  402.                     LABT_ExtraFat,    TRUE,
  403.                 TAG_DONE);
  404.  
  405.                 LT_EndGroup(Handle);
  406.             }
  407.  
  408.             LT_EndGroup(Handle);
  409.         }
  410.  
  411.         if(PanelWindow = LT_Layout(Handle,LocaleString(MSG_MODEMPANEL_MODEM_PREFERENCES_TXT),NULL,0,0,IDCMP_CLOSEWINDOW,0,
  412.             LAWN_HelpHook,        &GuideHook,
  413.             LAWN_Parent,        Window,
  414.             WA_DepthGadget,        TRUE,
  415.             WA_CloseGadget,        TRUE,
  416.             WA_DragBar,        TRUE,
  417.             WA_RMBTrap,        TRUE,
  418.             WA_Activate,        TRUE,
  419.         TAG_DONE))
  420.         {
  421.             struct IntuiMessage    *Message;
  422.             BOOLEAN             Done = FALSE;
  423.             ULONG             MsgClass,
  424.                          MsgQualifier;
  425.             UWORD             MsgCode;
  426.             struct Gadget        *MsgGadget;
  427.             WORD             i;
  428.             BOOL             NotFound;
  429.  
  430.             GuideContext(CONTEXT_MODEM);
  431.  
  432.             PushWindow(PanelWindow);
  433.  
  434.             LT_ShowWindow(Handle,TRUE);
  435.  
  436.             do
  437.             {
  438.                 if(Wait(PORTMASK(PanelWindow -> UserPort) | SIG_BREAK) & SIG_BREAK)
  439.                 {
  440.                     SaveConfig(PrivateConfig,Config);
  441.  
  442.                     break;
  443.                 }
  444.  
  445.                 while(Message = (struct IntuiMessage *)GT_GetIMsg(PanelWindow -> UserPort))
  446.                 {
  447.                     MsgClass    = Message -> Class;
  448.                     MsgQualifier    = Message -> Qualifier;
  449.                     MsgCode        = Message -> Code;
  450.                     MsgGadget    = (struct Gadget *)Message -> IAddress;
  451.  
  452.                     GT_ReplyIMsg(Message);
  453.  
  454.                     LT_HandleInput(Handle,MsgQualifier,&MsgClass,&MsgCode,&MsgGadget);
  455.  
  456.                     if(MsgClass == IDCMP_CLOSEWINDOW)
  457.                     {
  458.                         SaveConfig(PrivateConfig,Config);
  459.  
  460.                         Done = TRUE;
  461.                     }
  462.  
  463.                     if(MsgClass == IDCMP_GADGETUP)
  464.                     {
  465.                         switch(MsgGadget -> GadgetID)
  466.                         {
  467.                             case GAD_DIAL_PREFIX:
  468.                             case GAD_DIAL_SUFFIX:
  469.                             case GAD_DIAL_MODE:
  470.  
  471.                                 for(i = 0, NotFound = TRUE ; NotFound && i < strlen(Config -> ModemConfig -> DialPrefix) - 1 ; i++)
  472.                                 {
  473.                                     if(Config -> ModemConfig -> DialPrefix[i] == '\\' && ToUpper(Config -> ModemConfig -> DialPrefix[i + 1]) == 'W')
  474.                                         NotFound = FALSE;
  475.                                 }
  476.  
  477.                                 for(i = 0 ; NotFound && i < strlen(Config -> ModemConfig -> DialSuffix) - 1 ; i++)
  478.                                 {
  479.                                     if(Config -> ModemConfig -> DialSuffix[i] == '\\' && ToUpper(Config -> ModemConfig -> DialSuffix[i + 1]) == 'W')
  480.                                         NotFound = FALSE;
  481.                                 }
  482.  
  483.                                 LT_SetAttributes(Handle,GAD_DIAL_MODE,
  484.                                     GA_Disabled,NotFound,
  485.                                 TAG_DONE);
  486.  
  487.                                 break;
  488.  
  489.                             case GAD_USE:
  490.  
  491.                                 LT_UpdateStrings(Handle);
  492.  
  493.                                 Done = TRUE;
  494.                                 break;
  495.  
  496.                             case GAD_CANCEL:
  497.  
  498.                                 SaveConfig(PrivateConfig,Config);
  499.  
  500.                                 Cancel = Done = TRUE;
  501.                                 break;
  502.  
  503.                             case GAD_DEFAULT:
  504.  
  505.                                 *Default = TRUE;
  506.  
  507.                                 Done = TRUE;
  508.                                 break;
  509.                         }
  510.                     }
  511.                 }
  512.             }
  513.             while(!Done);
  514.  
  515.             PopWindow();
  516.         }
  517.  
  518.         LT_DeleteHandle(Handle);
  519.     }
  520.  
  521.     if(!Cancel && Config -> MiscConfig && Config -> SerialConfig)
  522.     {
  523.         if(Config -> MiscConfig -> ProtectiveMode && Config -> SerialConfig -> BaudRate >= 4800 && Config -> ModemConfig -> ConnectAutoBaud)
  524.         {
  525.             if(MyEasyRequest(Window,LocaleString(MSG_AUTOBAUD_TXT),LocaleString(MSG_GLOBAL_YES_NO_TXT)))
  526.                 Config -> ModemConfig -> ConnectAutoBaud = FALSE;
  527.         }
  528.     }
  529.  
  530.     if(Default)
  531.         return((BYTE)(!Cancel));
  532.     else
  533.         return((BYTE)memcmp(PrivateConfig -> ModemConfig,Config -> ModemConfig,sizeof(struct ModemSettings)));
  534. }
  535.