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

  1. /*
  2. **    ModemPanel.c
  3. **
  4. **    Editing panel for modem 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_MODEMINIT,GAD_MODEMEXIT,GAD_MODEMHANGUP,GAD_DIALPREFIX,GAD_DIALSUFFIX,
  13.         GAD_NOCARRIER,GAD_NODIALTONE,GAD_CONNECT,GAD_VOICE,GAD_RING,GAD_BUSY,
  14.         GAD_REDIALDELAY,GAD_DIALRETRIES,GAD_DIALTIMEOUT,GAD_REDIAL,GAD_AUTOBAUD,GAD_DROPDTR,
  15.         GAD_USE,GAD_CANCEL,GAD_DEFAULT };
  16.  
  17. STATIC UBYTE * __saveds
  18. ShowMinutes(struct Gadget *SomeGadget,WORD Level)
  19. {
  20.     STATIC UBYTE Buffer[15];
  21.  
  22.     SPrintf(Buffer,LocaleString(MSG_GLOBAL_SHOW_MINUTES_TXT),Level / 6,(Level % 6) * 10);
  23.  
  24.     return(Buffer);
  25. }
  26.  
  27. STATIC UBYTE * __saveds
  28. ShowSeconds(struct Gadget *SomeGadget,WORD Level)
  29. {
  30.     STATIC UBYTE Buffer[15];
  31.  
  32.     SPrintf(Buffer,LocaleString(MSG_GLOBAL_SHOW_MINUTES_TXT),Level / 60,Level % 60);
  33.  
  34.     return(Buffer);
  35. }
  36.  
  37. STATIC struct Gadget *
  38. CreateAllGadgets(struct Configuration *Config,struct Gadget **GadgetArray,struct Gadget **GadgetList,BYTE *Default)
  39. {
  40.     struct Gadget        *Gadget;
  41.     struct NewGadget     NewGadget;
  42.     UWORD             Counter = 0;
  43.  
  44.     SZ_SizeSetup(Window -> WScreen,&UserFont,TRUE);
  45.  
  46.     memset(&NewGadget,0,sizeof(struct NewGadget));
  47.  
  48.     if(Gadget = CreateContext(GadgetList))
  49.     {
  50.         SZ_AddLeftOffset(SZ_LeftOffsetDelta(MSG_MODEMPANEL_MODEM_INIT_STRING_GAD,MSG_MODEMPANEL_BUSY_STRING_GAD));
  51.  
  52.         SZ_ResetMaxWidth();
  53.  
  54.         SZ_UpdateMaxWidth(STRING_KIND,NULL,18,NULL);
  55.  
  56.         SZ_SetWidth(SZ_ResetMaxWidth());
  57.  
  58.         NewGadget . ng_GadgetText    = LocaleString(MSG_MODEMPANEL_MODEM_INIT_STRING_GAD);
  59.         NewGadget . ng_GadgetID        = Counter;
  60.  
  61.         GadgetArray[Counter++] = Gadget = CreateGadget(STRING_KIND,Gadget,&NewGadget,
  62.             SZ_Adjust,    TRUE,
  63.             SZ_AutoWidth,    TRUE,
  64.  
  65.             GTST_MaxChars,    79,
  66.             GTST_String,    Config -> ModemConfig -> ModemInit,
  67.         TAG_DONE);
  68.  
  69.         NewGadget . ng_GadgetText    = LocaleString(MSG_MODEMPANEL_MODEM_EXIT_STRING_GAD);
  70.         NewGadget . ng_GadgetID        = Counter;
  71.  
  72.         GadgetArray[Counter++] = Gadget = CreateGadget(STRING_KIND,Gadget,&NewGadget,
  73.             SZ_Adjust,    TRUE,
  74.             SZ_AutoWidth,    TRUE,
  75.  
  76.             GTST_MaxChars,    79,
  77.             GTST_String,    Config -> ModemConfig -> ModemExit,
  78.         TAG_DONE);
  79.  
  80.         NewGadget . ng_GadgetText    = LocaleString(MSG_MODEMPANEL_MODEM_HANGUP_STRING_GAD);
  81.         NewGadget . ng_GadgetID        = Counter;
  82.  
  83.         GadgetArray[Counter++] = Gadget = CreateGadget(STRING_KIND,Gadget,&NewGadget,
  84.             SZ_Adjust,    TRUE,
  85.             SZ_AutoWidth,    TRUE,
  86.  
  87.             GTST_MaxChars,    79,
  88.             GTST_String,    Config -> ModemConfig -> ModemHangup,
  89.         TAG_DONE);
  90.  
  91.         NewGadget . ng_GadgetText    = LocaleString(MSG_MODEMPANEL_DIAL_PREFIX_GAD);
  92.         NewGadget . ng_GadgetID        = Counter;
  93.  
  94.         GadgetArray[Counter++] = Gadget = CreateGadget(STRING_KIND,Gadget,&NewGadget,
  95.             SZ_Adjust,    TRUE,
  96.             SZ_AutoWidth,    TRUE,
  97.  
  98.             GTST_MaxChars,    79,
  99.             GTST_String,    Config -> ModemConfig -> DialPrefix,
  100.         TAG_DONE);
  101.  
  102.         NewGadget . ng_GadgetText    = LocaleString(MSG_MODEMPANEL_DIAL_SUFFIX_GAD);
  103.         NewGadget . ng_GadgetID        = Counter;
  104.  
  105.         GadgetArray[Counter++] = Gadget = CreateGadget(STRING_KIND,Gadget,&NewGadget,
  106.             SZ_Adjust,    TRUE,
  107.             SZ_AutoWidth,    TRUE,
  108.  
  109.             GTST_MaxChars,    79,
  110.             GTST_String,    Config -> ModemConfig -> DialSuffix,
  111.         TAG_DONE);
  112.  
  113.         NewGadget . ng_GadgetText    = LocaleString(MSG_MODEMPANEL_NO_CARRIER_STRING_GAD);
  114.         NewGadget . ng_GadgetID        = Counter;
  115.  
  116.         GadgetArray[Counter++] = Gadget = CreateGadget(STRING_KIND,Gadget,&NewGadget,
  117.             SZ_Adjust,    TRUE,
  118.             SZ_AutoWidth,    TRUE,
  119.  
  120.             GTST_MaxChars,    15,
  121.             GTST_String,    Config -> ModemConfig -> NoCarrier,
  122.         TAG_DONE);
  123.  
  124.         NewGadget . ng_GadgetText    = LocaleString(MSG_MODEMPANEL_NO_DIALTONE_STRING_GAD);
  125.         NewGadget . ng_GadgetID        = Counter;
  126.  
  127.         GadgetArray[Counter++] = Gadget = CreateGadget(STRING_KIND,Gadget,&NewGadget,
  128.             SZ_Adjust,    TRUE,
  129.             SZ_AutoWidth,    TRUE,
  130.  
  131.             GTST_MaxChars,    15,
  132.             GTST_String,    Config -> ModemConfig -> NoDialTone,
  133.         TAG_DONE);
  134.  
  135.         NewGadget . ng_GadgetText    = LocaleString(MSG_MODEMPANEL_CONNECT_STRING_GAD);
  136.         NewGadget . ng_GadgetID        = Counter;
  137.  
  138.         GadgetArray[Counter++] = Gadget = CreateGadget(STRING_KIND,Gadget,&NewGadget,
  139.             SZ_Adjust,    TRUE,
  140.             SZ_AutoWidth,    TRUE,
  141.  
  142.             GTST_MaxChars,    15,
  143.             GTST_String,    Config -> ModemConfig -> Connect,
  144.         TAG_DONE);
  145.  
  146.         NewGadget . ng_GadgetText    = LocaleString(MSG_MODEMPANEL_VOICE_STRING_GAD);
  147.         NewGadget . ng_GadgetID        = Counter;
  148.  
  149.         GadgetArray[Counter++] = Gadget = CreateGadget(STRING_KIND,Gadget,&NewGadget,
  150.             SZ_Adjust,    TRUE,
  151.             SZ_AutoWidth,    TRUE,
  152.  
  153.             GTST_MaxChars,    15,
  154.             GTST_String,    Config -> ModemConfig -> Voice,
  155.         TAG_DONE);
  156.  
  157.         NewGadget . ng_GadgetText    = LocaleString(MSG_MODEMPANEL_RING_STRING_GAD);
  158.         NewGadget . ng_GadgetID        = Counter;
  159.  
  160.         GadgetArray[Counter++] = Gadget = CreateGadget(STRING_KIND,Gadget,&NewGadget,
  161.             SZ_Adjust,    TRUE,
  162.             SZ_AutoWidth,    TRUE,
  163.  
  164.             GTST_MaxChars,    15,
  165.             GTST_String,    Config -> ModemConfig -> Ring,
  166.         TAG_DONE);
  167.  
  168.         NewGadget . ng_GadgetText    = LocaleString(MSG_MODEMPANEL_BUSY_STRING_GAD);
  169.         NewGadget . ng_GadgetID        = Counter;
  170.  
  171.         GadgetArray[Counter++] = Gadget = CreateGadget(STRING_KIND,Gadget,&NewGadget,
  172.             SZ_Adjust,    TRUE,
  173.             SZ_AutoWidth,    TRUE,
  174.  
  175.             GTST_MaxChars,    15,
  176.             GTST_String,    Config -> ModemConfig -> Busy,
  177.         TAG_DONE);
  178.  
  179.         SZ_SetWidth(90);
  180.  
  181.         SZ_AddLeftOffset(SZ_LeftOffsetDelta(MSG_MODEMPANEL_REDIAL_DELAY_GAD,MSG_MODEMPANEL_DROP_DTR_ON_HANGUP_GAD));
  182.  
  183.         NewGadget . ng_GadgetText    = LocaleString(MSG_MODEMPANEL_REDIAL_DELAY_GAD);
  184.         NewGadget . ng_GadgetID        = Counter;
  185.  
  186.         GadgetArray[Counter++] = Gadget = CreateGadget(SLIDER_KIND,Gadget,&NewGadget,
  187.             SZ_Adjust,        TRUE,
  188.             SZ_AutoWidth,        TRUE,
  189.             SZ_NewColumn,        TRUE,
  190.  
  191.             GTSL_Min,        0,
  192.             GTSL_Max,        360,
  193.             GTSL_Level,        Config -> ModemConfig -> RedialDelay,
  194.             GTSL_DispFunc,        ShowMinutes,
  195.             GTSL_LevelFormat,    "%s",
  196.             GTSL_MaxLevelLen,    11,
  197.         TAG_DONE);
  198.  
  199.         NewGadget . ng_GadgetText    = LocaleString(MSG_MODEMPANEL_DIAL_RETRIES_GAD);
  200.         NewGadget . ng_GadgetID        = Counter;
  201.  
  202.         GadgetArray[Counter++] = Gadget = CreateGadget(SLIDER_KIND,Gadget,&NewGadget,
  203.             SZ_Adjust,        TRUE,
  204.             SZ_AutoWidth,        TRUE,
  205.  
  206.             GTSL_Min,        0,
  207.             GTSL_Max,        100,
  208.             GTSL_Level,        Config -> ModemConfig -> DialRetries,
  209.             GTSL_LevelFormat,    "%3ld",
  210.             GTSL_MaxLevelLen,    3,
  211.         TAG_DONE);
  212.  
  213.         NewGadget . ng_GadgetText    = LocaleString(MSG_MODEMPANEL_DIAL_TIMEOUT_GAD);
  214.         NewGadget . ng_GadgetID        = Counter;
  215.  
  216.         GadgetArray[Counter++] = Gadget = CreateGadget(SLIDER_KIND,Gadget,&NewGadget,
  217.             SZ_Adjust,        TRUE,
  218.             SZ_AutoWidth,        TRUE,
  219.  
  220.             GTSL_Min,        0,
  221.             GTSL_Max,        1800,
  222.             GTSL_Level,        Config -> ModemConfig -> DialTimeout,
  223.             GTSL_DispFunc,        ShowSeconds,
  224.             GTSL_LevelFormat,    "%s",
  225.             GTSL_MaxLevelLen,    11,
  226.         TAG_DONE);
  227.  
  228.         NewGadget . ng_GadgetText    = LocaleString(MSG_MODEMPANEL_REDIAL_AFTER_HANGUP_GAD);
  229.         NewGadget . ng_GadgetID        = Counter;
  230.  
  231.         GadgetArray[Counter++] = Gadget = CreateGadget(CHECKBOX_KIND,Gadget,&NewGadget,
  232.             SZ_Adjust,    TRUE,
  233.             SZ_AutoWidth,    TRUE,
  234.  
  235.             GTCB_Checked,    Config -> ModemConfig -> RedialAfterHangup,
  236.         TAG_DONE);
  237.  
  238.         NewGadget . ng_GadgetText    = LocaleString(MSG_MODEMPANEL_CONNECT_AUTO_BAUD_GAD);
  239.         NewGadget . ng_GadgetID        = Counter;
  240.  
  241.         GadgetArray[Counter++] = Gadget = CreateGadget(CHECKBOX_KIND,Gadget,&NewGadget,
  242.             SZ_Adjust,    TRUE,
  243.             SZ_AutoWidth,    TRUE,
  244.  
  245.             GTCB_Checked,    Config -> ModemConfig -> ConnectAutoBaud,
  246.         TAG_DONE);
  247.  
  248.         NewGadget . ng_GadgetText    = LocaleString(MSG_MODEMPANEL_DROP_DTR_ON_HANGUP_GAD);
  249.         NewGadget . ng_GadgetID        = Counter;
  250.  
  251.         GadgetArray[Counter++] = Gadget = CreateGadget(CHECKBOX_KIND,Gadget,&NewGadget,
  252.             SZ_Adjust,    TRUE,
  253.             SZ_AutoWidth,    TRUE,
  254.  
  255.             GTCB_Checked,    Config -> ModemConfig -> DropDTR,
  256.         TAG_DONE);
  257.  
  258.         SZ_UpdateMaxWidth(BUTTON_KIND,LocaleString(MSG_GLOBAL_USE_GAD),0,NULL);
  259.         SZ_UpdateMaxWidth(BUTTON_KIND,LocaleString(MSG_GLOBAL_CANCEL_GAD),0,NULL);
  260.         SZ_UpdateMaxWidth(BUTTON_KIND,LocaleString(MSG_GLOBAL_DEFAULT_GAD),0,NULL);
  261.  
  262.         SZ_SetWidth(SZ_ResetMaxWidth());
  263.  
  264.         NewGadget . ng_GadgetText    = LocaleString(MSG_GLOBAL_USE_GAD);
  265.         NewGadget . ng_GadgetID        = Counter;
  266.         NewGadget . ng_Flags        = 0;
  267.  
  268.         GadgetArray[Counter++] = Gadget = CreateGadget(BUTTON_KIND,Gadget,&NewGadget,
  269.             SZ_Adjust,    TRUE,
  270.             SZ_AutoWidth,    TRUE,
  271.             SZ_AlignExtra,    TRUE,
  272.             SZ_AlignLeft,    TRUE,
  273.             SZ_AlignBottom,    TRUE,
  274.         TAG_DONE);
  275.  
  276.         NewGadget . ng_GadgetText    = LocaleString(MSG_GLOBAL_CANCEL_GAD);
  277.         NewGadget . ng_GadgetID        = Counter;
  278.  
  279.         GadgetArray[Counter++] = Gadget = CreateGadget(BUTTON_KIND,Gadget,&NewGadget,
  280.             SZ_Adjust,    TRUE,
  281.             SZ_AutoWidth,    TRUE,
  282.             SZ_AlignRight,    TRUE,
  283.         TAG_DONE);
  284.  
  285.         if(Default)
  286.         {
  287.             NewGadget . ng_GadgetText    = LocaleString(MSG_GLOBAL_DEFAULT_GAD);
  288.             NewGadget . ng_GadgetID        = Counter;
  289.  
  290.             GadgetArray[Counter] = Gadget = CreateGadget(BUTTON_KIND,Gadget,&NewGadget,
  291.                 SZ_Adjust,    TRUE,
  292.                 SZ_AutoWidth,    TRUE,
  293.                 SZ_AlignCentre,    TRUE,
  294.             TAG_DONE);
  295.         }
  296.     }
  297.  
  298.     return(Gadget);
  299. }
  300.  
  301. BYTE
  302. ModemPanel(struct Configuration *Config,BYTE *Default)
  303. {
  304.     struct Window    *PanelWindow;
  305.     struct Gadget    *GadgetList = NULL;
  306.     struct Gadget    *GadgetArray[GAD_DEFAULT + 1];
  307.  
  308.     SaveConfig(Config,PrivateConfig);
  309.  
  310.     if(CreateAllGadgets(Config,GadgetArray,&GadgetList,Default))
  311.     {
  312.         if(PanelWindow = OpenWindowTags(NULL,
  313.             WA_Left,    GetScreenLeft(Window) + (GetScreenWidth(Window) - SZ_GetWindowWidth()) / 2,
  314.             WA_Top,        GetScreenTop(Window) + (GetScreenHeight(Window) - SZ_GetWindowHeight())    / 2,
  315.             WA_Width,    SZ_GetWindowWidth(),
  316.             WA_Height,    SZ_GetWindowHeight(),
  317.  
  318.             WA_Activate,    TRUE,
  319.             WA_DragBar,    TRUE,
  320.             WA_DepthGadget,    TRUE,
  321.             WA_RMBTrap,    TRUE,
  322.             WA_DepthGadget,    TRUE,
  323.             WA_CloseGadget,    TRUE,
  324.             WA_CustomScreen,Window -> WScreen,
  325.  
  326.             WA_IDCMP,    IDCMP_GADGETDOWN | IDCMP_ACTIVEWINDOW | IDCMP_CLOSEWINDOW | IDCMP_RAWKEY | IDCMP_VANILLAKEY | SLIDERIDCMP | CHECKBOXIDCMP | STRINGIDCMP | BUTTONIDCMP,
  327.  
  328.             WA_Title,    LocaleString(MSG_MODEMPANEL_MODEM_PREFERENCES_TXT),
  329.         TAG_DONE))
  330.         {
  331.             struct IntuiMessage    *Massage;
  332.             ULONG             IClass,Code;
  333.             struct Gadget        *Gadget;
  334.             BYTE             Terminated = FALSE;
  335.  
  336.             GuideContext(CONTEXT_MODEM);
  337.  
  338.             PushWindow(PanelWindow);
  339.  
  340.             AddGList(PanelWindow,GadgetList,(UWORD)-1,(UWORD)-1,NULL);
  341.             RefreshGList(GadgetList,PanelWindow,NULL,(UWORD)-1);
  342.             GT_RefreshWindow(PanelWindow,NULL);
  343.  
  344.             ActiveGadget = NULL;
  345.  
  346.             SetSignal(0,SIG_BREAK);
  347.  
  348.             while(!Terminated)
  349.             {
  350.                 if(Wait(PORTMASK(PanelWindow -> UserPort) | SIG_BREAK) & SIG_BREAK)
  351.                 {
  352.                     SaveConfig(PrivateConfig,Config);
  353.  
  354.                     break;
  355.                 }
  356.  
  357.                 while(!Terminated && (Massage = (struct IntuiMessage *)GT_GetIMsg(PanelWindow -> UserPort)))
  358.                 {
  359.                     IClass    = Massage -> Class;
  360.                     Code    = Massage -> Code;
  361.                     Gadget    = (struct Gadget *)Massage -> IAddress;
  362.  
  363.                     GT_ReplyIMsg(Massage);
  364.  
  365.                     KeySelect(GadgetArray,GAD_CANCEL,Code,PanelWindow,&Gadget,&IClass,&Code);
  366.  
  367.                     if(IClass == IDCMP_ACTIVEWINDOW && ActiveGadget)
  368.                         ActivateGadget(ActiveGadget,PanelWindow,NULL);
  369.  
  370.                     if(IClass == IDCMP_GADGETDOWN)
  371.                     {
  372.                         if((Gadget -> GadgetType & GTYP_GTYPEMASK) == GTYP_STRGADGET)
  373.                             ActiveGadget = Gadget;
  374.                     }
  375.  
  376.                     if(IClass == IDCMP_CLOSEWINDOW)
  377.                     {
  378.                         SaveConfig(PrivateConfig,Config);
  379.  
  380.                         Terminated = TRUE;
  381.                     }
  382.  
  383.                     if(IClass == IDCMP_MOUSEMOVE)
  384.                     {
  385.                         switch(Gadget -> GadgetID)
  386.                         {
  387.                             case GAD_REDIALDELAY:
  388.  
  389.                                 Config -> ModemConfig -> RedialDelay = Code;
  390.                                 break;
  391.  
  392.                             case GAD_DIALRETRIES:
  393.  
  394.                                 Config -> ModemConfig -> DialRetries = Code;
  395.                                 break;
  396.  
  397.                             case GAD_DIALTIMEOUT:
  398.  
  399.                                 Config -> ModemConfig -> DialTimeout = Code;
  400.                                 break;
  401.                         }
  402.                     }
  403.  
  404.                     if(IClass == IDCMP_GADGETUP)
  405.                     {
  406.                         switch(Gadget -> GadgetID)
  407.                         {
  408.                             case GAD_USE:
  409.  
  410.                                 Terminated = TRUE;
  411.  
  412.                                 strcpy(Config -> ModemConfig -> ModemInit,    SZ_GetString(GadgetArray[GAD_MODEMINIT]));
  413.                                 strcpy(Config -> ModemConfig -> ModemExit,    SZ_GetString(GadgetArray[GAD_MODEMEXIT]));
  414.                                 strcpy(Config -> ModemConfig -> ModemHangup,    SZ_GetString(GadgetArray[GAD_MODEMHANGUP]));
  415.                                 strcpy(Config -> ModemConfig -> DialPrefix,    SZ_GetString(GadgetArray[GAD_DIALPREFIX]));
  416.                                 strcpy(Config -> ModemConfig -> DialSuffix,    SZ_GetString(GadgetArray[GAD_DIALSUFFIX]));
  417.                                 strcpy(Config -> ModemConfig -> NoCarrier,    SZ_GetString(GadgetArray[GAD_NOCARRIER]));
  418.                                 strcpy(Config -> ModemConfig -> NoDialTone,    SZ_GetString(GadgetArray[GAD_NODIALTONE]));
  419.                                 strcpy(Config -> ModemConfig -> Connect,    SZ_GetString(GadgetArray[GAD_CONNECT]));
  420.                                 strcpy(Config -> ModemConfig -> Voice,        SZ_GetString(GadgetArray[GAD_VOICE]));
  421.                                 strcpy(Config -> ModemConfig -> Ring,        SZ_GetString(GadgetArray[GAD_RING]));
  422.                                 strcpy(Config -> ModemConfig -> Busy,        SZ_GetString(GadgetArray[GAD_BUSY]));
  423.  
  424.                                 Config -> ModemConfig -> RedialAfterHangup    = SZ_GetChecked(GadgetArray[GAD_REDIAL]);
  425.                                 Config -> ModemConfig -> ConnectAutoBaud    = SZ_GetChecked(GadgetArray[GAD_AUTOBAUD]);
  426.                                 Config -> ModemConfig -> DropDTR        = SZ_GetChecked(GadgetArray[GAD_DROPDTR]);
  427.  
  428.                                 break;
  429.  
  430.                             case GAD_CANCEL:
  431.  
  432.                                 Terminated = TRUE;
  433.  
  434.                                 SaveConfig(PrivateConfig,Config);
  435.  
  436.                                 break;
  437.  
  438.                             case GAD_DEFAULT:
  439.  
  440.                                 *Default    = TRUE;
  441.  
  442.                                 Terminated    = TRUE;
  443.  
  444.                                 break;
  445.                         }
  446.                     }
  447.                 }
  448.             }
  449.  
  450.             RemoveGList(PanelWindow,GadgetList,(UWORD)-1);
  451.  
  452.             PopWindow();
  453.  
  454.             CloseWindow(PanelWindow);
  455.         }
  456.     }
  457.  
  458.     FreeGadgets(GadgetList);
  459.  
  460.     return((BYTE)memcmp(PrivateConfig -> ModemConfig,Config -> ModemConfig,sizeof(struct ModemSettings)));
  461. }
  462.