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 / PhonePanel.c < prev    next >
C/C++ Source or Header  |  1993-02-18  |  48KB  |  1,912 lines

  1. /*
  2. **    PhonePanel.c
  3. **
  4. **    The phonebook and support routines
  5. **
  6. **    Copyright © 1990-1993 by Olaf `Olsen' Barthel & MXM
  7. **        All Rights Reserved
  8. */
  9.  
  10. #include "termGlobal.h"
  11.  
  12.     /* Gadget IDs. */
  13.  
  14. enum    {    GAD_NAMELIST,        GAD_EDIT,
  15.         GAD_NAME,        GAD_COMMENT,        GAD_PHONENUMBER,
  16.         GAD_NEWENTRY,        GAD_DIALLIST,        GAD_LOADLIST,        GAD_COPYCONFIG,
  17.         GAD_CLONEENTRY,        GAD_CLEARLIST,        GAD_SORTLIST,        GAD_PASSWORD,
  18.         GAD_REMOVEENTRY,    GAD_USEIT,        GAD_SAVELIST,        GAD_PRINT };
  19.  
  20.     /* Editing IDs. */
  21.  
  22. enum    {    EDIT_SERIAL,        EDIT_MODEM,        EDIT_SCREEN,        EDIT_TERMINAL,
  23.         EDIT_EMULATION,        EDIT_CLIPBOARD,        EDIT_CAPTURE,        EDIT_COMMANDS,
  24.         EDIT_MISC,        EDIT_PATHS,        EDIT_TRANSFER,        EDIT_TRANSLATION,
  25.         EDIT_KEYMACROS,        EDIT_CURSORKEYS,
  26.         EDIT_FASTMACROS,    EDIT_PASSWORD,        EDIT_RATES };
  27.  
  28.     /* What action is to follow clicking into the listview. */
  29.  
  30. enum    {    CLICK_NONE,CLICK_SELECT,CLICK_TOGGLE,CLICK_DIAL };
  31.  
  32. STATIC struct List    EditList;
  33. STATIC struct Node    EditNode[17];
  34.  
  35. STATIC STRPTR        EditName[18];
  36. STATIC struct Hook    ListViewHook;
  37.  
  38.     /* ListViewRender():
  39.      *
  40.      *    This callback routine is responsible for rendering
  41.      *    the single listview entries.
  42.      */
  43.  
  44. STATIC ULONG __saveds __asm
  45. ListViewRender(register __a0 struct Hook *Hook,register __a1 struct LVDrawMsg *Msg,register __a2 struct PhoneNode *Node)
  46. {
  47.         /* We only know how to redraw lines. */
  48.  
  49.     if(Msg -> lvdm_MethodID == LV_DRAW)
  50.     {
  51.         struct RastPort    *RPort    = Msg -> lvdm_RastPort;
  52.         LONG         Count    = Node -> Entry -> Count + 1,
  53.                  Left    = Msg -> lvdm_Bounds . MinX,
  54.                  Top    = Msg -> lvdm_Bounds . MinY,
  55.                  Width    = Msg -> lvdm_Bounds . MaxX - Msg -> lvdm_Bounds . MinX + 1,
  56.                  Height    = Msg -> lvdm_Bounds . MaxY - Msg -> lvdm_Bounds . MinY + 1,
  57.                  FgPen,BgPen,
  58.                  Template,
  59.                  Len,LabelLen;
  60.         UBYTE         String[80],Num[8];
  61.  
  62.             /* Determine the rendering pens. */
  63.  
  64.         switch(Msg -> lvdm_State)
  65.         {
  66.             case LVR_SELECTEDDISABLED:
  67.             case LVR_NORMALDISABLED:
  68.             case LVR_NORMAL:
  69.  
  70.                 FgPen = Msg -> lvdm_DrawInfo -> dri_Pens[TEXTPEN];
  71.                 BgPen = Msg -> lvdm_DrawInfo -> dri_Pens[BACKGROUNDPEN];
  72.                 break;
  73.  
  74.             case LVR_SELECTED:
  75.  
  76.                 FgPen = Msg -> lvdm_DrawInfo -> dri_Pens[FILLTEXTPEN];
  77.                 BgPen = Msg -> lvdm_DrawInfo -> dri_Pens[FILLPEN];
  78.                 break;
  79.         }
  80.  
  81.         SetAPen(RPort,BgPen);
  82.         RectFill(RPort,Left,Top,Left + 1,Top + Height - 1);
  83.  
  84.         Left    += 2;
  85.         Width    -= 2;
  86.  
  87.             /* Determine maximum index text length. */
  88.  
  89.         Template = 3 * ((ULONG)Hook -> h_Data) + TextLength(RPort," - ",3);
  90.  
  91.             /* Get the vanilla name. */
  92.  
  93.         strcpy(String,&Node -> VanillaNode . ln_Name[6]);
  94.  
  95.             /* Set the rendering pens. */
  96.  
  97.         SetDrMd(RPort,JAM2);
  98.         SetBPen(RPort,BgPen);
  99.  
  100.             /* Has this entry been selected? */
  101.  
  102.         if(Count > 0)
  103.         {
  104.             LONG Delta;
  105.  
  106.                 /* Set up the header. */
  107.  
  108.             SPrintf(Num,"%3ld - ",Count);
  109.  
  110.                 /* Determine header length. */
  111.  
  112.             Len = TextLength(RPort,Num,6);
  113.  
  114.                 /* Fill the space to precede the header. */
  115.  
  116.             if((Delta = Template - Len) > 0)
  117.             {
  118.                 SetAPen(RPort,BgPen);
  119.                 RectFill(RPort,Left,Top,Left + Delta - 1,Top + Height - 1);
  120.             }
  121.  
  122.                 /* Render the header, right-justified. */
  123.  
  124.             SetAPen(RPort,FgPen);
  125.  
  126.             Move(RPort,Left + Delta,Top + RPort -> Font -> tf_Baseline);
  127.             Text(RPort,Num,6);
  128.         }
  129.         else
  130.         {
  131.                 /* Fill the blank space to precede the vanilla name. */
  132.  
  133.             SetAPen(RPort,BgPen);
  134.             RectFill(RPort,Left,Top,Left + Template - 1,Top + Height - 1);
  135.             SetAPen(RPort,FgPen);
  136.         }
  137.  
  138.             /* Adjust width and area left edge. */
  139.  
  140.         Left    += Template;
  141.         Width    -= Template;
  142.  
  143.             /* Determine length of vanilla name. */
  144.  
  145.         LabelLen = strlen(String);
  146.  
  147.             /* Try to make it fit. */
  148.  
  149.         while(LabelLen > 0 && (Len = TextLength(RPort,String,LabelLen)) > Width)
  150.             LabelLen--;
  151.  
  152.             /* Print the vanilla name if possible. */
  153.  
  154.         if(LabelLen)
  155.         {
  156.             Move(RPort,Left,Top + RPort -> Font -> tf_Baseline);
  157.             Text(RPort,String,LabelLen);
  158.  
  159.             Left    += Len;
  160.             Width    -= Len;
  161.         }
  162.  
  163.             /* Fill the area to follow the vanilla name. */
  164.  
  165.         if(Width > 0)
  166.         {
  167.             SetAPen(RPort,BgPen);
  168.             RectFill(RPort,Left,Top,Left + Width - 1,Top + Height - 1);
  169.         }
  170.  
  171.             /* If the item happens to be disabled, draw the cross-hatch
  172.              * pattern across it.
  173.              */
  174.  
  175.         if(Msg -> lvdm_State == LVR_SELECTEDDISABLED || Msg -> lvdm_State == LVR_NORMALDISABLED)
  176.         {
  177.             SetAPen(RPort,Msg -> lvdm_DrawInfo -> dri_Pens[BLOCKPEN]);
  178.  
  179.             SetAfPt(RPort,(UWORD *)&Crosshatch,1);
  180.  
  181.             RectFill(RPort,Msg -> lvdm_Bounds . MinX,Msg -> lvdm_Bounds . MinY,Msg -> lvdm_Bounds . MaxX,Msg -> lvdm_Bounds . MaxY);
  182.  
  183.             SetAfPt(RPort,NULL,0);
  184.         }
  185.  
  186.         return(LVCB_OK);
  187.     }
  188.     else
  189.         return(LVCB_UNKNOWN);
  190. }
  191.  
  192. STATIC struct Gadget *
  193. CreateAllGadgets(struct Gadget **GadgetArray,struct Gadget **GadgetList)
  194. {
  195.     struct Gadget        *Gadget;
  196.     struct NewGadget     NewGadget;
  197.     UWORD             Counter = 0;
  198.     WORD             Lines = EDIT_RATES + 1;
  199.  
  200.     LocalizeString(EditName,MSG_PHONEPANEL_SERIAL_TXT,MSG_PHONEPANEL_RATES_TXT);
  201.  
  202.     memset(&NewGadget,0,sizeof(struct NewGadget));
  203.  
  204.     SZ_SizeSetup(Window -> WScreen,&UserFont,TRUE);
  205.  
  206.     if(Gadget = CreateContext(GadgetList))
  207.     {
  208.         WORD i,Max,Len,Width,ButtonWidth,MaxWidth,LeftEdge,EditWidth,ListWidth;
  209.  
  210.         NewList(&EditList);
  211.  
  212.         for(i = 0 ; i < 17 ; i++)
  213.         {
  214.             EditNode[i] . ln_Name = EditName[i];
  215.  
  216.             AddTail(&EditList,&EditNode[i]);
  217.         }
  218.  
  219.         SZ_ResetMaxWidth();
  220.  
  221.         for(i = MSG_PHONEPANEL_PRINT_GAD ; i <= MSG_PHONEPANEL_SET_PASSWORT_GAD ; i++)
  222.             SZ_UpdateMaxWidth(BUTTON_KIND,LocaleString(i),0,NULL);
  223.  
  224.         ButtonWidth = SZ_ResetMaxWidth();
  225.  
  226.         MaxWidth = 4 * ButtonWidth + 3 * INTERWIDTH;
  227.  
  228.         Max = SZ_TextWidth(LocaleString(MSG_PHONEPANEL_PHONE_NUMBER_GAD));
  229.  
  230.         if((Len = SZ_TextWidth(LocaleString(MSG_PHONEPANEL_BBS_NAME_GAD))) > Max)
  231.             Max = Len;
  232.  
  233.         if((Len = SZ_TextWidth(LocaleString(MSG_PHONEPANEL_COMMENT_GAD))) > Max)
  234.             Max = Len;
  235.  
  236.         SZ_AddLeftOffset(Max + INTERWIDTH);
  237.  
  238.         LeftEdge = SZ_GetLeftEdge();
  239.  
  240.         ListWidth = SZ_Width(LISTVIEW_KIND,NULL,35,NULL);
  241.  
  242.         Width = 0;
  243.  
  244.         for(i = 0 ; i < 17 ; i++)
  245.         {
  246.             if((Len = strlen(EditName[i])) > Width)
  247.                 Width = Len;
  248.         }
  249.  
  250.         EditWidth = SZ_Width(LISTVIEW_KIND,NULL,Width,NULL);
  251.  
  252.         if(MaxWidth > ListWidth + InterWidth + EditWidth)
  253.         {
  254.             LONG Remainder = ListWidth + InterWidth + EditWidth;
  255.  
  256.             Width = (MaxWidth - Remainder) / 2;
  257.  
  258.             ListWidth += Width;
  259.             EditWidth += MaxWidth - (Remainder + Width);
  260.         }
  261.  
  262.         FOREVER
  263.         {
  264.             NewGadget . ng_Flags        = PLACETEXT_ABOVE|NG_HIGHLABEL;
  265.             NewGadget . ng_GadgetText    = LocaleString(MSG_GLOBAL_NAME_LIST_GAD);
  266.             NewGadget . ng_GadgetID        = Counter;
  267.  
  268.             ListViewHook . h_Entry    = (LONG (*)())ListViewRender;
  269.             ListViewHook . h_Data    = (APTR)SZ_GetNumericLen("1");
  270.  
  271.             GadgetArray[Counter++] = Gadget = CreateGadget(LISTVIEW_KIND,Gadget,&NewGadget,
  272.                 SZ_Adjust,        TRUE,
  273.                 SZ_UseWidth,        ListWidth,
  274.                 SZ_Lines,        Lines,
  275.                 SZ_InterHeight,        1,
  276.  
  277.                 GTLV_CallBack,        &ListViewHook,
  278.             TAG_DONE);
  279.  
  280.             if(SZ_GetWindowHeight() + 5 * InterHeight + 3 * (SZ_Height(BUTTON_KIND,0,0) + SZ_Height(STRING_KIND,0,0)) > Window -> Height - (Window -> BorderTop + Window -> BorderBottom) && Lines > 5)
  281.             {
  282.                 if(*GadgetList)
  283.                 {
  284.                     FreeGadgets(*GadgetList);
  285.  
  286.                     *GadgetList = NULL;
  287.                 }
  288.  
  289.                 SZ_SizeSetup(Window -> WScreen,&UserFont,TRUE);
  290.  
  291.                 Counter = 0;
  292.  
  293.                 Lines--;
  294.  
  295.                 if(!(Gadget = CreateContext(GadgetList)))
  296.                     return(NULL);
  297.  
  298.                 SZ_AddLeftOffset(Max + INTERWIDTH);
  299.             }
  300.             else
  301.                 break;
  302.         }
  303.  
  304.         NewGadget . ng_GadgetText    = LocaleString(MSG_PHONEPANEL_SETTINGS_TXT);
  305.         NewGadget . ng_GadgetID        = Counter;
  306.  
  307.         GadgetArray[Counter++] = Gadget = CreateGadget(LISTVIEW_KIND,Gadget,&NewGadget,
  308.             SZ_Adjust,    TRUE,
  309.             SZ_NewColumn,    TRUE,
  310.             SZ_UseWidth,    EditWidth,
  311.             SZ_Lines,    Lines,
  312.             GadToolsBase -> lib_Version < 39 ? TAG_IGNORE : GA_Disabled,    TRUE,
  313.             GTLV_Labels,    &EditList,
  314.             SZ_InterHeight,    1,
  315.         TAG_DONE);
  316.  
  317.         NewGadget . ng_GadgetText    = LocaleString(MSG_PHONEPANEL_BBS_NAME_GAD);
  318.         NewGadget . ng_GadgetID        = Counter;
  319.         NewGadget . ng_Flags        = PLACETEXT_LEFT;
  320.  
  321.         GadgetArray[Counter++] = Gadget = CreateGadget(STRING_KIND,Gadget,&NewGadget,
  322.             SZ_Adjust,    TRUE,
  323.             SZ_FullWidth,    TRUE,
  324.             SZ_UseLeft,    LeftEdge,
  325.             SZ_AlignBottom,    TRUE,
  326.  
  327.             GTST_MaxChars,    39,
  328.             GA_Disabled,    TRUE,
  329.         TAG_DONE);
  330.  
  331.         NewGadget . ng_GadgetText    = LocaleString(MSG_PHONEPANEL_COMMENT_GAD);
  332.         NewGadget . ng_GadgetID        = Counter;
  333.  
  334.         GadgetArray[Counter++] = Gadget = CreateGadget(STRING_KIND,Gadget,&NewGadget,
  335.             SZ_Adjust,    TRUE,
  336.             SZ_AutoWidth,    TRUE,
  337.  
  338.             GTST_MaxChars,    99,
  339.             GA_Disabled,    TRUE,
  340.         TAG_DONE);
  341.  
  342.         NewGadget . ng_GadgetText    = LocaleString(MSG_PHONEPANEL_PHONE_NUMBER_GAD);
  343.         NewGadget . ng_GadgetID        = Counter;
  344.  
  345.         GadgetArray[Counter++] = Gadget = CreateGadget(STRING_KIND,Gadget,&NewGadget,
  346.             SZ_Adjust,    TRUE,
  347.             SZ_AutoWidth,    TRUE,
  348.  
  349.             GTST_MaxChars,    99,
  350.             GA_Disabled,    TRUE,
  351.         TAG_DONE);
  352.  
  353.  
  354.         SZ_SetWidth(ButtonWidth);
  355.  
  356.         NewGadget . ng_GadgetText    = LocaleString(MSG_PHONEPANEL_NEW_ENTRY_GAD);
  357.         NewGadget . ng_GadgetID        = Counter;
  358.         NewGadget . ng_Flags        = PLACETEXT_IN;
  359.  
  360.         GadgetArray[Counter++] = Gadget = CreateGadget(BUTTON_KIND,Gadget,&NewGadget,
  361.             SZ_Adjust,    TRUE,
  362.             SZ_AutoWidth,    TRUE,
  363.             SZ_AlignBottom,    TRUE,
  364.             SZ_GroupCount,    4,
  365.             SZ_UseLeft,    LeftEdge,
  366.         TAG_DONE);
  367.  
  368.         NewGadget . ng_GadgetText    = LocaleString(MSG_PHONEPANEL_DIAL_LIST_GAD);
  369.         NewGadget . ng_GadgetID        = Counter;
  370.  
  371.         GadgetArray[Counter++] = Gadget = CreateGadget(BUTTON_KIND,Gadget,&NewGadget,
  372.             SZ_Adjust,    TRUE,
  373.             SZ_AutoWidth,    TRUE,
  374.             SZ_GroupNext,    TRUE,
  375.  
  376.             GA_Disabled,    TRUE,
  377.         TAG_DONE);
  378.  
  379.         NewGadget . ng_GadgetText    = LocaleString(MSG_PHONEPANEL_LOAD_LIST_GAD);
  380.         NewGadget . ng_GadgetID        = Counter;
  381.  
  382.         GadgetArray[Counter++] = Gadget = CreateGadget(BUTTON_KIND,Gadget,&NewGadget,
  383.             SZ_Adjust,    TRUE,
  384.             SZ_AutoWidth,    TRUE,
  385.             SZ_GroupNext,    TRUE,
  386.  
  387.             GA_Disabled,    (Online && ChosenEntry),
  388.         TAG_DONE);
  389.  
  390.         NewGadget . ng_GadgetText    = LocaleString(MSG_PHONEPANEL_COPY_CONFIG_GAD);
  391.         NewGadget . ng_GadgetID        = Counter;
  392.  
  393.         GadgetArray[Counter++] = Gadget = CreateGadget(BUTTON_KIND,Gadget,&NewGadget,
  394.             SZ_Adjust,    TRUE,
  395.             SZ_AutoWidth,    TRUE,
  396.             SZ_GroupNext,    TRUE,
  397.  
  398.             GA_Disabled,    TRUE,
  399.         TAG_DONE);
  400.  
  401.  
  402.         NewGadget . ng_GadgetText    = LocaleString(MSG_PHONEPANEL_CLONE_ENTRY_GAD);
  403.         NewGadget . ng_GadgetID        = Counter;
  404.  
  405.         GadgetArray[Counter++] = Gadget = CreateGadget(BUTTON_KIND,Gadget,&NewGadget,
  406.             SZ_Adjust,    TRUE,
  407.             SZ_AutoWidth,    TRUE,
  408.             SZ_AlignBottom,    TRUE,
  409.             SZ_GroupCount,    4,
  410.             SZ_UseLeft,    LeftEdge,
  411.  
  412.             GA_Disabled,    TRUE,
  413.         TAG_DONE);
  414.  
  415.         NewGadget . ng_GadgetText    = LocaleString(MSG_PHONEPANEL_CLEAR_LIST_GAD);
  416.         NewGadget . ng_GadgetID        = Counter;
  417.  
  418.         GadgetArray[Counter++] = Gadget = CreateGadget(BUTTON_KIND,Gadget,&NewGadget,
  419.             SZ_Adjust,    TRUE,
  420.             SZ_AutoWidth,    TRUE,
  421.             SZ_GroupNext,    TRUE,
  422.  
  423.             GA_Disabled,    TRUE,
  424.         TAG_DONE);
  425.  
  426.         NewGadget . ng_GadgetText    = LocaleString(MSG_PHONEPANEL_SORT_LIST_GAD);
  427.         NewGadget . ng_GadgetID        = Counter;
  428.  
  429.         GadgetArray[Counter++] = Gadget = CreateGadget(BUTTON_KIND,Gadget,&NewGadget,
  430.             SZ_Adjust,    TRUE,
  431.             SZ_AutoWidth,    TRUE,
  432.             SZ_GroupNext,    TRUE,
  433.  
  434.             GA_Disabled,    TRUE,
  435.         TAG_DONE);
  436.  
  437.         NewGadget . ng_GadgetText    = LocaleString(MSG_PHONEPANEL_SET_PASSWORT_GAD);
  438.         NewGadget . ng_GadgetID        = Counter;
  439.  
  440.         GadgetArray[Counter++] = Gadget = CreateGadget(BUTTON_KIND,Gadget,&NewGadget,
  441.             SZ_Adjust,    TRUE,
  442.             SZ_AutoWidth,    TRUE,
  443.             SZ_GroupNext,    TRUE,
  444.  
  445.             GA_Disabled,    TRUE,
  446.         TAG_DONE);
  447.  
  448.  
  449.         NewGadget . ng_GadgetText    = LocaleString(MSG_PHONEPANEL_REMOVE_ENTRY_GAD);
  450.         NewGadget . ng_GadgetID        = Counter;
  451.  
  452.         GadgetArray[Counter++] = Gadget = CreateGadget(BUTTON_KIND,Gadget,&NewGadget,
  453.             SZ_Adjust,    TRUE,
  454.             SZ_AutoWidth,    TRUE,
  455.             SZ_AlignBottom,    TRUE,
  456.             SZ_GroupCount,    4,
  457.             SZ_UseLeft,    LeftEdge,
  458.  
  459.             GA_Disabled,    TRUE,
  460.         TAG_DONE);
  461.  
  462.         NewGadget . ng_GadgetText    = LocaleString(MSG_PHONEPANEL_USE_ENTRY_GAD);
  463.         NewGadget . ng_GadgetID        = Counter;
  464.  
  465.         GadgetArray[Counter++] = Gadget = CreateGadget(BUTTON_KIND,Gadget,&NewGadget,
  466.             SZ_Adjust,    TRUE,
  467.             SZ_AutoWidth,    TRUE,
  468.             SZ_GroupNext,    TRUE,
  469.  
  470.             GA_Disabled,    TRUE,
  471.         TAG_DONE);
  472.  
  473.         NewGadget . ng_GadgetText    = LocaleString(MSG_PHONEPANEL_SAVE_LIST_GAD);
  474.         NewGadget . ng_GadgetID        = Counter;
  475.  
  476.         GadgetArray[Counter++] = Gadget = CreateGadget(BUTTON_KIND,Gadget,&NewGadget,
  477.             SZ_Adjust,    TRUE,
  478.             SZ_AutoWidth,    TRUE,
  479.             SZ_GroupNext,    TRUE,
  480.  
  481.             GA_Disabled,    TRUE,
  482.         TAG_DONE);
  483.  
  484.         NewGadget . ng_GadgetText    = LocaleString(MSG_PHONEPANEL_PRINT_GAD);
  485.         NewGadget . ng_GadgetID        = Counter;
  486.  
  487.         GadgetArray[Counter] = Gadget = CreateGadget(BUTTON_KIND,Gadget,&NewGadget,
  488.             SZ_Adjust,    TRUE,
  489.             SZ_AutoWidth,    TRUE,
  490.             SZ_GroupNext,    TRUE,
  491.  
  492.             GA_Disabled,    TRUE,
  493.         TAG_DONE);
  494.     }
  495.  
  496.     return(Gadget);
  497. }
  498.  
  499. STATIC BYTE
  500. EditConfig(struct Configuration *Config,UWORD Type,struct Window *PanelWindow)
  501. {
  502.     STATIC LONG TypeMappings[15][2] =
  503.     {
  504.         EDIT_SERIAL,        PREF_SERIAL,
  505.         EDIT_MODEM,        PREF_MODEM,
  506.         EDIT_SCREEN,        PREF_SCREEN,
  507.         EDIT_TERMINAL,        PREF_TERMINAL,
  508.         EDIT_EMULATION,        PREF_EMULATION,
  509.         EDIT_CLIPBOARD,        PREF_CLIP,
  510.         EDIT_CAPTURE,        PREF_CAPTURE,
  511.         EDIT_COMMANDS,        PREF_COMMAND,
  512.         EDIT_MISC,        PREF_MISC,
  513.         EDIT_PATHS,        PREF_PATH,
  514.         EDIT_TRANSFER,        PREF_FILE,
  515.         EDIT_TRANSLATION,    PREF_FILE,
  516.         EDIT_KEYMACROS,        PREF_FILE,
  517.         EDIT_CURSORKEYS,    PREF_FILE,
  518.         EDIT_FASTMACROS,    PREF_FILE
  519.     };
  520.  
  521.     struct FileRequester    *FileRequest;
  522.     UBYTE             DummyBuffer[MAX_FILENAME_LENGTH],
  523.                 *DummyChar;
  524.     BYTE             Changed    = FALSE,
  525.                  Default    = FALSE;
  526.     LONG             PrefType;
  527.     WORD             i;
  528.     APTR             Data;
  529.  
  530.     for(i = 0 ; i < 15 ; i++)
  531.     {
  532.         if(TypeMappings[i][0] == Type)
  533.         {
  534.             PrefType = TypeMappings[i][1];
  535.  
  536.             break;
  537.         }
  538.     }
  539.  
  540.     Data = GetConfigEntry(Config,PrefType);
  541.  
  542.     if(CreateConfigEntry(Config,PrefType))
  543.     {
  544.         if(!Data)
  545.             ResetConfigEntry(Config,PrefType,FALSE);
  546.  
  547.         switch(Type)
  548.         {
  549.             case EDIT_SERIAL:
  550.  
  551.                 Changed = SerialPanel(Config,&Default);
  552.                 break;
  553.  
  554.             case EDIT_MODEM:
  555.  
  556.                 Changed = ModemPanel(Config,&Default);
  557.                 break;
  558.  
  559.             case EDIT_SCREEN:
  560.  
  561.                 Changed = ScreenPanel(Config,&Default);
  562.                 break;
  563.  
  564.             case EDIT_TERMINAL:
  565.  
  566.                 Changed = TerminalPanel(Config,&Default);
  567.                 break;
  568.  
  569.             case EDIT_EMULATION:
  570.  
  571.                 Changed = EmulationPanel(Config,&Default);
  572.                 break;
  573.  
  574.             case EDIT_CLIPBOARD:
  575.  
  576.                 Changed = ClipPanel(Config,&Default);
  577.                 break;
  578.  
  579.             case EDIT_CAPTURE:
  580.  
  581.                 Changed = CapturePanel(Config,&Default);
  582.                 break;
  583.  
  584.             case EDIT_COMMANDS:
  585.  
  586.                 Changed = CommandPanel(Config,&Default);
  587.                 break;
  588.  
  589.             case EDIT_MISC:
  590.  
  591.                 Changed = MiscPanel(Config,&Default);
  592.                 break;
  593.  
  594.             case EDIT_PATHS:
  595.  
  596.                 Changed = PathPanel(Config,&Default);
  597.                 break;
  598.  
  599.             case EDIT_TRANSFER:
  600.  
  601.                 strcpy(DummyBuffer,LastXprLibrary);
  602.  
  603.                 if(SelectProtocol(Config -> FileConfig -> ProtocolFileName,PanelWindow))
  604.                 {
  605.                     strcpy(Config -> FileConfig -> ProtocolFileName,LastXprLibrary);
  606.  
  607.                     Changed = TRUE;
  608.                 }
  609.  
  610.                 strcpy(LastXprLibrary,DummyBuffer);
  611.  
  612.                 break;
  613.  
  614.             case EDIT_TRANSLATION:
  615.  
  616.                 strcpy(DummyBuffer,Config -> FileConfig -> TranslationFileName);
  617.  
  618.                 DummyChar = PathPart(DummyBuffer);
  619.  
  620.                 *DummyChar = 0;
  621.  
  622.                 if(FileRequest = GetFile(LocaleString(MSG_PHONEPANEL_SELECT_TRANSLATION_TXT),DummyBuffer,FilePart(Config -> FileConfig -> TranslationFileName),DummyBuffer,"#?.prefs",FALSE,FALSE,FALSE,LocaleString(MSG_GLOBAL_SELECT_TXT)))
  623.                 {
  624.                     strcpy(Config -> FileConfig -> TranslationFileName,DummyBuffer);
  625.  
  626.                     FreeAslRequest(FileRequest);
  627.  
  628.                     Changed = TRUE;
  629.                 }
  630.  
  631.                 break;
  632.  
  633.             case EDIT_KEYMACROS:
  634.  
  635.                 strcpy(DummyBuffer,Config -> FileConfig -> MacroFileName);
  636.  
  637.                 DummyChar = PathPart(DummyBuffer);
  638.  
  639.                 *DummyChar = 0;
  640.  
  641.                 if(FileRequest = GetFile(LocaleString(MSG_PHONEPANEL_SELECT_KEYBOARD_MACROS_TXT),DummyBuffer,FilePart(Config -> FileConfig -> MacroFileName),DummyBuffer,"#?.prefs",FALSE,FALSE,FALSE,LocaleString(MSG_GLOBAL_SELECT_TXT)))
  642.                 {
  643.                     strcpy(Config -> FileConfig -> MacroFileName,DummyBuffer);
  644.  
  645.                     FreeAslRequest(FileRequest);
  646.  
  647.                     Changed = TRUE;
  648.                 }
  649.  
  650.                 break;
  651.  
  652.             case EDIT_CURSORKEYS:
  653.  
  654.                 strcpy(DummyBuffer,Config -> FileConfig -> CursorFileName);
  655.  
  656.                 DummyChar = PathPart(DummyBuffer);
  657.  
  658.                 *DummyChar = 0;
  659.  
  660.                 if(FileRequest = GetFile(LocaleString(MSG_PHONEPANEL_SELECT_CURSOR_KEYS_TXT),DummyBuffer,FilePart(Config -> FileConfig -> CursorFileName),DummyBuffer,"#?.prefs",FALSE,FALSE,FALSE,LocaleString(MSG_GLOBAL_SELECT_TXT)))
  661.                 {
  662.                     strcpy(Config -> FileConfig -> CursorFileName,DummyBuffer);
  663.  
  664.                     FreeAslRequest(FileRequest);
  665.  
  666.                     Changed = TRUE;
  667.                 }
  668.  
  669.                 break;
  670.  
  671.             case EDIT_FASTMACROS:
  672.  
  673.                 strcpy(DummyBuffer,Config -> FileConfig -> FastMacroFileName);
  674.  
  675.                 DummyChar = PathPart(DummyBuffer);
  676.  
  677.                 *DummyChar = 0;
  678.  
  679.                 if(FileRequest = GetFile(LocaleString(MSG_PHONEPANEL_SELECT_FAST_MACROS_TXT),DummyBuffer,FilePart(Config -> FileConfig -> FastMacroFileName),DummyBuffer,"#?.prefs",FALSE,FALSE,FALSE,LocaleString(MSG_GLOBAL_SELECT_TXT)))
  680.                 {
  681.                     strcpy(Config -> FileConfig -> FastMacroFileName,DummyBuffer);
  682.  
  683.                     FreeAslRequest(FileRequest);
  684.  
  685.                     Changed = TRUE;
  686.                 }
  687.  
  688.                 break;
  689.         }
  690.  
  691.         if((!Changed && !Data) || Default)
  692.         {
  693.             DeleteConfigEntry(Config,PrefType);
  694.  
  695.             if(Default)
  696.                 Changed = TRUE;
  697.         }
  698.     }
  699.     else
  700.         DisplayBeep(Window -> WScreen);
  701.  
  702.     return(Changed);
  703. }
  704.  
  705. BYTE
  706. PhonePanel()
  707. {
  708.     STATIC WORD         OffsetX = -1,OffsetY = -1;
  709.  
  710.     struct Window        *PanelWindow;
  711.     struct Gadget        *GadgetList = NULL;
  712.     struct Gadget        *GadgetArray[GAD_PRINT + 1];
  713.  
  714.     ULONG             Sec1,Mic1,Sec2,Mic2;
  715.     LONG             HitItem = -1,Count = -1;
  716.     BYTE             DialTheList = FALSE;
  717.     struct PhoneNode    *TempNode;
  718.     struct List        *PhoneList = NULL;
  719.  
  720.     if(CreateAllGadgets(GadgetArray,&GadgetList))
  721.     {
  722.         if(PanelWindow = OpenWindowTags(NULL,
  723.             WA_Left,    GetScreenLeft(Window) + (GetScreenWidth(Window) - SZ_GetWindowWidth()) / 2,
  724.             WA_Top,        GetScreenTop(Window) + (GetScreenHeight(Window) - SZ_GetWindowHeight())    / 2,
  725.             WA_Width,    SZ_GetWindowWidth(),
  726.             WA_Height,    SZ_GetWindowHeight(),
  727.  
  728.             WA_Activate,    TRUE,
  729.             WA_DragBar,    TRUE,
  730.             WA_DepthGadget,    TRUE,
  731.             WA_RMBTrap,    TRUE,
  732.             WA_DepthGadget,    TRUE,
  733.             WA_CloseGadget,    TRUE,
  734.             WA_CustomScreen,Window -> WScreen,
  735.  
  736.             WA_IDCMP,    IDCMP_GADGETDOWN | IDCMP_ACTIVEWINDOW | IDCMP_CLOSEWINDOW | IDCMP_RAWKEY | IDCMP_VANILLAKEY | STRINGIDCMP | BUTTONIDCMP | LISTVIEWIDCMP,
  737.  
  738.             WA_Title,    LocaleString(MSG_PHONEPANEL_PHONEBOOK_TXT),
  739.         TAG_DONE))
  740.         {
  741.             struct IntuiMessage    *Massage;
  742.             ULONG             IClass,Code,Qualifier;
  743.             struct Gadget        *Gadget;
  744.             BYTE             Terminated = FALSE,
  745.                          ClickAction;
  746.  
  747.             UBYTE             DummyBuffer[MAX_FILENAME_LENGTH],
  748.                         *DummyChar;
  749.  
  750.             LONG             Selected = ~0,i;
  751.  
  752.             struct FileRequester    *FileRequest;
  753.  
  754.             GuideContext(CONTEXT_PHONEBOOK);
  755.  
  756.             PushWindow(PanelWindow);
  757.  
  758.             AddGList(PanelWindow,GadgetList,(UWORD)-1,(UWORD)-1,NULL);
  759.             RefreshGList(GadgetList,PanelWindow,NULL,(UWORD)-1);
  760.             GT_RefreshWindow(PanelWindow,NULL);
  761.  
  762.             if(Phonebook && NumPhoneEntries)
  763.             {
  764.                 if(PhoneList = CreatePhoneList())
  765.                 {
  766.                     GT_SetGadgetAttrs(GadgetArray[GAD_NAMELIST],PanelWindow,NULL,
  767.                         GTLV_Labels,PhoneList,
  768.                     TAG_DONE);
  769.  
  770.                     if(PhoneList -> lh_Head -> ln_Succ)
  771.                     {
  772.                         GT_SetGadgetAttrs(GadgetArray[GAD_SAVELIST],PanelWindow,NULL,
  773.                             GA_Disabled,    FALSE,
  774.                         TAG_DONE);
  775.  
  776.                         GT_SetGadgetAttrs(GadgetArray[GAD_PRINT],PanelWindow,NULL,
  777.                             GA_Disabled,    FALSE,
  778.                         TAG_DONE);
  779.  
  780.                         GT_SetGadgetAttrs(GadgetArray[GAD_COPYCONFIG],PanelWindow,NULL,
  781.                             GA_Disabled,    FALSE,
  782.                         TAG_DONE);
  783.  
  784.                         GT_SetGadgetAttrs(GadgetArray[GAD_PASSWORD],PanelWindow,NULL,
  785.                             GA_Disabled,    FALSE,
  786.                         TAG_DONE);
  787.  
  788.                         if(PhoneList -> lh_Head -> ln_Succ -> ln_Succ)
  789.                         {
  790.                             GT_SetGadgetAttrs(GadgetArray[GAD_SORTLIST],PanelWindow,NULL,
  791.                                 GA_Disabled,    FALSE,
  792.                             TAG_DONE);
  793.                         }
  794.                     }
  795.                 }
  796.             }
  797.  
  798.             ActiveGadget = NULL;
  799.  
  800.             FreeDialList(TRUE);
  801.  
  802.             for(i = 0 ; i < NumPhoneEntries ; i++)
  803.             {
  804.                 if(Phonebook[i] -> Count > Count)
  805.                     Count = Phonebook[i] -> Count;
  806.             }
  807.  
  808.             Count++;
  809.  
  810.             if(Count)
  811.             {
  812.                 if(!Online)
  813.                 {
  814.                     GT_SetGadgetAttrs(GadgetArray[GAD_DIALLIST],PanelWindow,NULL,
  815.                         GA_Disabled,    FALSE,
  816.                     TAG_DONE);
  817.                 }
  818.  
  819.                 GT_SetGadgetAttrs(GadgetArray[GAD_CLEARLIST],PanelWindow,NULL,
  820.                     GA_Disabled,    FALSE,
  821.                 TAG_DONE);
  822.             }
  823.  
  824.             SetSignal(0,SIG_BREAK);
  825.  
  826.             while(!Terminated)
  827.             {
  828.                 if(Wait(PORTMASK(PanelWindow -> UserPort) | SIG_BREAK) & SIG_BREAK)
  829.                 {
  830.                     FreeDialList(TRUE);
  831.  
  832.                     break;
  833.                 }
  834.  
  835.                 while(!Terminated && (Massage = (struct IntuiMessage *)GT_GetIMsg(PanelWindow -> UserPort)))
  836.                 {
  837.                     IClass        = Massage -> Class;
  838.                     Code        = Massage -> Code;
  839.                     Qualifier    = Massage -> Qualifier;
  840.                     Gadget        = (struct Gadget *)Massage -> IAddress;
  841.  
  842.                     GT_ReplyIMsg(Massage);
  843.  
  844.                     if(IClass == IDCMP_VANILLAKEY)
  845.                     {
  846.                         switch(Code)
  847.                         {
  848.                             case ' ':
  849.  
  850.                                 if(Selected != -1)
  851.                                 {
  852.                                     HitItem = -1;
  853.  
  854.                                     GT_SetGadgetAttrs(GadgetArray[GAD_NAMELIST],PanelWindow,NULL,
  855.                                         GTLV_Labels,    ~0,
  856.                                     TAG_DONE);
  857.  
  858.                                     if(Phonebook[Selected] -> Count == -1)
  859.                                     {
  860.                                         if(!Count)
  861.                                         {
  862.                                             GT_SetGadgetAttrs(GadgetArray[GAD_CLEARLIST],PanelWindow,NULL,
  863.                                                 GA_Disabled,    FALSE,
  864.                                             TAG_DONE);
  865.                                         }
  866.  
  867.                                         if(!Online)
  868.                                         {
  869.                                             GT_SetGadgetAttrs(GadgetArray[GAD_DIALLIST],PanelWindow,NULL,
  870.                                                 GA_Disabled,    FALSE,
  871.                                             TAG_DONE);
  872.                                         }
  873.  
  874.                                         Phonebook[Selected] -> Count = Count++;
  875.  
  876.                                         SPrintf(Phonebook[Selected] -> Node -> LocalName,"%3ld - %s",Count,Phonebook[Selected] -> Header -> Name);
  877.                                     }
  878.                                     else
  879.                                     {
  880.                                         RemoveDialEntry(Selected);
  881.  
  882.                                         if(!(--Count))
  883.                                         {
  884.                                             GT_SetGadgetAttrs(GadgetArray[GAD_CLEARLIST],PanelWindow,NULL,
  885.                                                 GA_Disabled,    TRUE,
  886.                                             TAG_DONE);
  887.                                         }
  888.                                     }
  889.  
  890.                                     GT_SetGadgetAttrs(GadgetArray[GAD_NAMELIST],PanelWindow,NULL,
  891.                                         GTLV_Labels,    PhoneList,
  892.                                     TAG_DONE);
  893.                                 }
  894.  
  895.                                 break;
  896.  
  897.                             default:
  898.  
  899.                                     KeySelect(GadgetArray,GAD_PRINT,Code,PanelWindow,&Gadget,&IClass,&Code);
  900.                                 break;
  901.                         }
  902.                     }
  903.  
  904.                     if(IClass == IDCMP_RAWKEY)
  905.                         KeySelect(GadgetArray,GAD_PRINT,Code,PanelWindow,&Gadget,&IClass,&Code);
  906.  
  907.                     if(IClass == IDCMP_GADGETDOWN)
  908.                     {
  909.                         if((Gadget -> GadgetType & GTYP_GTYPEMASK) == GTYP_STRGADGET)
  910.                             ActiveGadget = Gadget;
  911.                     }
  912.  
  913.                     if(IClass == IDCMP_ACTIVEWINDOW && ActiveGadget)
  914.                         ActivateGadget(ActiveGadget,PanelWindow,NULL);
  915.  
  916.                     if(IClass == IDCMP_CLOSEWINDOW)
  917.                     {
  918.                         FreeDialList(TRUE);
  919.  
  920.                         Terminated = TRUE;
  921.                     }
  922.  
  923.                     if(IClass == IDCMP_GADGETUP)
  924.                     {
  925.                         switch(Gadget -> GadgetID)
  926.                         {
  927.                             case GAD_NAMELIST:
  928.  
  929.                                 if(HitItem != Code)
  930.                                 {
  931.                                     HitItem = Code;
  932.  
  933.                                     CurrentTime(&Sec1,&Mic1);
  934.  
  935.                                     if(Qualifier & (IEQUALIFIER_LSHIFT|IEQUALIFIER_RSHIFT))
  936.                                         ClickAction = CLICK_TOGGLE;
  937.                                     else
  938.                                         ClickAction = CLICK_SELECT;
  939.                                 }
  940.                                 else
  941.                                 {
  942.                                     if(Qualifier & (IEQUALIFIER_LSHIFT|IEQUALIFIER_RSHIFT))
  943.                                     {
  944.                                         CurrentTime(&Sec1,&Mic1);
  945.  
  946.                                         ClickAction = CLICK_TOGGLE;
  947.                                     }
  948.                                     else
  949.                                     {
  950.                                         CurrentTime(&Sec2,&Mic2);
  951.  
  952.                                         if(DoubleClick(Sec1,Mic1,Sec2,Mic2))
  953.                                             ClickAction = CLICK_DIAL;
  954.                                         else
  955.                                             ClickAction = CLICK_NONE;
  956.  
  957.                                         Sec1 = Sec2;
  958.                                         Mic1 = Mic2;
  959.                                     }
  960.                                 }
  961.  
  962.                                 if(ClickAction == CLICK_SELECT || ClickAction == CLICK_TOGGLE)
  963.                                 {
  964.                                     GT_SetGadgetAttrs(GadgetArray[GAD_NAME],PanelWindow,NULL,
  965.                                         GTST_String,    Phonebook[Code] -> Header -> Name,
  966.                                         GA_Disabled,    FALSE,
  967.                                     TAG_DONE);
  968.  
  969.                                     GT_SetGadgetAttrs(GadgetArray[GAD_COMMENT],PanelWindow,NULL,
  970.                                         GTST_String,    Phonebook[Code] -> Header -> Comment,
  971.                                         GA_Disabled,    FALSE,
  972.                                     TAG_DONE);
  973.  
  974.                                     GT_SetGadgetAttrs(GadgetArray[GAD_PHONENUMBER],PanelWindow,NULL,
  975.                                         GTST_String,    Phonebook[Code] -> Header -> Number,
  976.                                         GA_Disabled,    FALSE,
  977.                                     TAG_DONE);
  978.  
  979.                                     GT_SetGadgetAttrs(GadgetArray[GAD_USEIT],PanelWindow,NULL,
  980.                                         GA_Disabled,    FALSE,
  981.                                     TAG_DONE);
  982.  
  983.                                     GT_SetGadgetAttrs(GadgetArray[GAD_REMOVEENTRY],PanelWindow,NULL,
  984.                                         GA_Disabled,    (Phonebook[Code] == ChosenEntry && Online),
  985.                                     TAG_DONE);
  986.  
  987.                                     GT_SetGadgetAttrs(GadgetArray[GAD_CLONEENTRY],PanelWindow,NULL,
  988.                                         GA_Disabled,    FALSE,
  989.                                     TAG_DONE);
  990.  
  991.                                     if(!Online)
  992.                                     {
  993.                                         GT_SetGadgetAttrs(GadgetArray[GAD_DIALLIST],PanelWindow,NULL,
  994.                                             GA_Disabled,    FALSE,
  995.                                         TAG_DONE);
  996.                                     }
  997.  
  998.                                     GT_SetGadgetAttrs(GadgetArray[GAD_EDIT],PanelWindow,NULL,
  999.                                         GadToolsBase -> lib_Version < 39 ? TAG_IGNORE : GA_Disabled,    FALSE,
  1000.                                     TAG_DONE);
  1001.  
  1002.                                     Selected = Code;
  1003.                                 }
  1004.  
  1005.                                 if(ClickAction == CLICK_DIAL)
  1006.                                 {
  1007.                                     GT_SetGadgetAttrs(GadgetArray[GAD_NAMELIST],PanelWindow,NULL,
  1008.                                         GTLV_Labels,    ~0,
  1009.                                     TAG_DONE);
  1010.  
  1011.                                     Count = 0;
  1012.  
  1013.                                     for(i = 0 ; i < NumPhoneEntries ; i++)
  1014.                                     {
  1015.                                         SPrintf(Phonebook[i] -> Node -> LocalName,"      %s",Phonebook[i] -> Header -> Name);
  1016.  
  1017.                                         Phonebook[i] -> Count = -1;
  1018.                                     }
  1019.  
  1020.                                     GT_SetGadgetAttrs(GadgetArray[GAD_NAMELIST],PanelWindow,NULL,
  1021.                                         GTLV_Labels,    PhoneList,
  1022.                                     TAG_DONE);
  1023.  
  1024.                                     DialTheList    = TRUE;
  1025.                                     Terminated    = TRUE;
  1026.                                 }
  1027.  
  1028.                                 if(ClickAction == CLICK_TOGGLE || ClickAction == CLICK_DIAL)
  1029.                                 {
  1030.                                     HitItem = -1;
  1031.  
  1032.                                     GT_SetGadgetAttrs(GadgetArray[GAD_NAMELIST],PanelWindow,NULL,
  1033.                                         GTLV_Labels,    ~0,
  1034.                                     TAG_DONE);
  1035.  
  1036.                                     if(Phonebook[Selected] -> Count == -1)
  1037.                                     {
  1038.                                         if(!Count)
  1039.                                         {
  1040.                                             GT_SetGadgetAttrs(GadgetArray[GAD_CLEARLIST],PanelWindow,NULL,
  1041.                                                 GA_Disabled,    FALSE,
  1042.                                             TAG_DONE);
  1043.                                         }
  1044.  
  1045.                                         Phonebook[Selected] -> Count = Count++;
  1046.  
  1047.                                         SPrintf(Phonebook[Selected] -> Node -> LocalName,"%3ld - %s",Count,Phonebook[Selected] -> Header -> Name);
  1048.                                     }
  1049.                                     else
  1050.                                     {
  1051.                                         RemoveDialEntry(Selected);
  1052.  
  1053.                                         if(!(--Count))
  1054.                                         {
  1055.                                             GT_SetGadgetAttrs(GadgetArray[GAD_CLEARLIST],PanelWindow,NULL,
  1056.                                                 GA_Disabled,    TRUE,
  1057.                                             TAG_DONE);
  1058.                                         }
  1059.                                     }
  1060.  
  1061.                                     GT_SetGadgetAttrs(GadgetArray[GAD_NAMELIST],PanelWindow,NULL,
  1062.                                         GTLV_Labels,    PhoneList,
  1063.                                     TAG_DONE);
  1064.                                 }
  1065.  
  1066.                                 break;
  1067.  
  1068.                             case GAD_CLEARLIST:
  1069.  
  1070.                                 GT_SetGadgetAttrs(GadgetArray[GAD_NAMELIST],PanelWindow,NULL,
  1071.                                     GTLV_Labels,    ~0,
  1072.                                 TAG_DONE);
  1073.  
  1074.                                 Count = 0;
  1075.  
  1076.                                 for(i = 0 ; i < NumPhoneEntries ; i++)
  1077.                                 {
  1078.                                     SPrintf(Phonebook[i] -> Node -> LocalName,"      %s",Phonebook[i] -> Header -> Name);
  1079.  
  1080.                                     Phonebook[i] -> Count = -1;
  1081.                                 }
  1082.  
  1083.                                 GT_SetGadgetAttrs(GadgetArray[GAD_NAMELIST],PanelWindow,NULL,
  1084.                                     GTLV_Labels,    PhoneList,
  1085.                                 TAG_DONE);
  1086.  
  1087.                                 if(Selected == ~0)
  1088.                                 {
  1089.                                     GT_SetGadgetAttrs(GadgetArray[GAD_DIALLIST],PanelWindow,NULL,
  1090.                                         GA_Disabled,    TRUE,
  1091.                                     TAG_DONE);
  1092.                                 }
  1093.  
  1094.                                 GT_SetGadgetAttrs(GadgetArray[GAD_CLEARLIST],PanelWindow,NULL,
  1095.                                     GA_Disabled,    TRUE,
  1096.                                 TAG_DONE);
  1097.  
  1098.                                 break;
  1099.  
  1100.                             case GAD_PRINT:
  1101.  
  1102.                                 BlockWindow(PanelWindow);
  1103.  
  1104.                                 PrintPanel(PanelWindow,PhoneList,Count);
  1105.  
  1106.                                 ReleaseWindow(PanelWindow);
  1107.  
  1108.                                 break;
  1109.  
  1110.                             case GAD_USEIT:
  1111.  
  1112.                                 if(Selected != ~0)
  1113.                                 {
  1114.                                     SaveConfig(Config,PrivateConfig);
  1115.  
  1116.                                     SaveConfig(Phonebook[Selected] -> Config,Config);
  1117.  
  1118.                                     strcpy(Password,Phonebook[Selected] -> Header -> Password);
  1119.                                     strcpy(UserName,Phonebook[Selected] -> Header -> UserName);
  1120.  
  1121.                                     ConfigSetup();
  1122.  
  1123.                                     Terminated = TRUE;
  1124.  
  1125.                                     ConfigChanged = FALSE;
  1126.                                 }
  1127.  
  1128.                                 break;
  1129.  
  1130.                             case GAD_NEWENTRY:
  1131.  
  1132.                                 GT_SetGadgetAttrs(GadgetArray[GAD_NAMELIST],PanelWindow,NULL,
  1133.                                     GTLV_Labels,    ~0,
  1134.                                 TAG_DONE);
  1135.  
  1136.                                 if(PhoneList)
  1137.                                 {
  1138.                                     DeletePhoneList(PhoneList);
  1139.  
  1140.                                     PhoneList = NULL;
  1141.                                 }
  1142.  
  1143.                                 if(NewPhoneEntry())
  1144.                                 {
  1145.                                     if(PhoneList = CreatePhoneList())
  1146.                                     {
  1147.                                         Selected = NumPhoneEntries - 1;
  1148.  
  1149.                                         GT_SetGadgetAttrs(GadgetArray[GAD_NAMELIST],PanelWindow,NULL,
  1150.                                             GTLV_Labels,    PhoneList,
  1151.                                             GTLV_Selected,    Selected,
  1152.                                         TAG_DONE);
  1153.  
  1154.                                         GT_SetGadgetAttrs(GadgetArray[GAD_NAME],PanelWindow,NULL,
  1155.                                             GTST_String,    Phonebook[Selected] -> Header -> Name,
  1156.                                             GA_Disabled,    FALSE,
  1157.                                         TAG_DONE);
  1158.  
  1159.                                         GT_SetGadgetAttrs(GadgetArray[GAD_COMMENT],PanelWindow,NULL,
  1160.                                             GTST_String,    Phonebook[Selected] -> Header -> Comment,
  1161.                                             GA_Disabled,    FALSE,
  1162.                                         TAG_DONE);
  1163.  
  1164.                                         GT_SetGadgetAttrs(GadgetArray[GAD_PHONENUMBER],PanelWindow,NULL,
  1165.                                             GTST_String,    Phonebook[Selected] -> Header -> Number,
  1166.                                             GA_Disabled,    FALSE,
  1167.                                         TAG_DONE);
  1168.  
  1169.                                         GT_SetGadgetAttrs(GadgetArray[GAD_USEIT],PanelWindow,NULL,
  1170.                                             GA_Disabled,    FALSE,
  1171.                                         TAG_DONE);
  1172.  
  1173.                                         GT_SetGadgetAttrs(GadgetArray[GAD_REMOVEENTRY],PanelWindow,NULL,
  1174.                                             GA_Disabled,    FALSE,
  1175.                                         TAG_DONE);
  1176.  
  1177.                                         GT_SetGadgetAttrs(GadgetArray[GAD_CLONEENTRY],PanelWindow,NULL,
  1178.                                             GA_Disabled,    FALSE,
  1179.                                         TAG_DONE);
  1180.  
  1181.                                         GT_SetGadgetAttrs(GadgetArray[GAD_EDIT],PanelWindow,NULL,
  1182.                                             GadToolsBase -> lib_Version < 39 ? TAG_IGNORE : GA_Disabled,    FALSE,
  1183.                                         TAG_DONE);
  1184.  
  1185.                                         if(NumPhoneEntries == 1)
  1186.                                         {
  1187.                                             GT_SetGadgetAttrs(GadgetArray[GAD_SAVELIST],PanelWindow,NULL,
  1188.                                                 GA_Disabled,    FALSE,
  1189.                                             TAG_DONE);
  1190.  
  1191.                                             GT_SetGadgetAttrs(GadgetArray[GAD_PRINT],PanelWindow,NULL,
  1192.                                                 GA_Disabled,    FALSE,
  1193.                                             TAG_DONE);
  1194.  
  1195.                                             GT_SetGadgetAttrs(GadgetArray[GAD_COPYCONFIG],PanelWindow,NULL,
  1196.                                                 GA_Disabled,    FALSE,
  1197.                                             TAG_DONE);
  1198.  
  1199.                                             GT_SetGadgetAttrs(GadgetArray[GAD_PASSWORD],PanelWindow,NULL,
  1200.                                                 GA_Disabled,    FALSE,
  1201.                                             TAG_DONE);
  1202.                                         }
  1203.  
  1204.                                         if(NumPhoneEntries > 1)
  1205.                                         {
  1206.                                             GT_SetGadgetAttrs(GadgetArray[GAD_SORTLIST],PanelWindow,NULL,
  1207.                                                 GA_Disabled,    FALSE,
  1208.                                             TAG_DONE);
  1209.                                         }
  1210.  
  1211.                                         ActivateGadget(GadgetArray[GAD_NAME],PanelWindow,NULL);
  1212.  
  1213.                                         ActiveGadget = GadgetArray[GAD_NAME];
  1214.  
  1215.                                         PhonebookChanged = TRUE;
  1216.                                     }
  1217.                                     else
  1218.                                         goto ClearList;
  1219.                                 }
  1220.                                 else
  1221.                                     goto ClearList;
  1222.  
  1223.                                 break;
  1224.  
  1225.                             case GAD_CLONEENTRY:
  1226.  
  1227.                                 if(Selected != ~0)
  1228.                                 {
  1229.                                     GT_SetGadgetAttrs(GadgetArray[GAD_NAMELIST],PanelWindow,NULL,
  1230.                                         GTLV_Labels,    ~0,
  1231.                                     TAG_DONE);
  1232.  
  1233.                                     if(PhoneList)
  1234.                                     {
  1235.                                         DeletePhoneList(PhoneList);
  1236.  
  1237.                                         PhoneList = NULL;
  1238.                                     }
  1239.  
  1240.                                     if(NewPhoneEntry())
  1241.                                     {
  1242.                                         if(PhoneList = CreatePhoneList())
  1243.                                         {
  1244.                                             LONG Tmp = Selected,i;
  1245.  
  1246.                                             Selected = NumPhoneEntries - 1;
  1247.  
  1248.                                             CopyMem(Phonebook[Tmp] -> Header,Phonebook[Selected] -> Header,sizeof(struct PhoneHeader));
  1249.  
  1250.                                             SPrintf(Phonebook[Selected] -> Node -> LocalName,"      %s",Phonebook[Selected] -> Header -> Name);
  1251.  
  1252.                                             GT_SetGadgetAttrs(GadgetArray[GAD_NAMELIST],PanelWindow,NULL,
  1253.                                                 GTLV_Labels,    PhoneList,
  1254.                                                 GTLV_Selected,    Selected,
  1255.                                             TAG_DONE);
  1256.  
  1257.                                             GT_SetGadgetAttrs(GadgetArray[GAD_NAME],PanelWindow,NULL,
  1258.                                                 GTST_String,    Phonebook[Selected] -> Header -> Name,
  1259.                                             TAG_DONE);
  1260.  
  1261.                                             GT_SetGadgetAttrs(GadgetArray[GAD_COMMENT],PanelWindow,NULL,
  1262.                                                 GTST_String,    Phonebook[Selected] -> Header -> Comment,
  1263.                                             TAG_DONE);
  1264.  
  1265.                                             GT_SetGadgetAttrs(GadgetArray[GAD_PHONENUMBER],PanelWindow,NULL,
  1266.                                                 GTST_String,    Phonebook[Selected] -> Header -> Number,
  1267.                                             TAG_DONE);
  1268.  
  1269.                                             if(NumPhoneEntries > 1)
  1270.                                             {
  1271.                                                 GT_SetGadgetAttrs(GadgetArray[GAD_SORTLIST],PanelWindow,NULL,
  1272.                                                     GA_Disabled,    FALSE,
  1273.                                                 TAG_DONE);
  1274.                                             }
  1275.  
  1276.                                                 /* Allocate space for the config data. */
  1277.  
  1278.                                             for(i = PREF_SERIAL ; i <= PREF_EMULATION ; i++)
  1279.                                             {
  1280.                                                 if(GetConfigEntry(Phonebook[Tmp] -> Config,i))
  1281.                                                     CreateConfigEntry(Phonebook[Selected] -> Config,i);
  1282.                                             }
  1283.  
  1284.                                                 /* Copy the data. */
  1285.  
  1286.                                             SaveConfig(Phonebook[Tmp] -> Config,Phonebook[Selected] -> Config);
  1287.  
  1288.                                             PhonebookChanged = TRUE;
  1289.                                         }
  1290.                                         else
  1291.                                             goto ClearList;
  1292.                                     }
  1293.                                     else
  1294.                                         goto ClearList;
  1295.                                 }
  1296.  
  1297.                                 break;
  1298.  
  1299.                             case GAD_REMOVEENTRY:
  1300.  
  1301.                                 if(Selected != ~0)
  1302.                                 {
  1303.                                     if(Phonebook[Selected] == ChosenEntry)
  1304.                                         MyEasyRequest(Window,LocaleString(MSG_PHONEPANEL_PHONE_ENTRY_IN_USE_TXT),LocaleString(MSG_GLOBAL_CONTINUE_TXT));
  1305.                                     else
  1306.                                     {
  1307.                                         PhonebookChanged = TRUE;
  1308.  
  1309.                                         GT_SetGadgetAttrs(GadgetArray[GAD_NAMELIST],PanelWindow,NULL,
  1310.                                             GTLV_Labels,~0,
  1311.                                         TAG_DONE);
  1312.  
  1313.                                         if(PhoneList)
  1314.                                         {
  1315.                                             DeletePhoneList(PhoneList);
  1316.  
  1317.                                             PhoneList = NULL;
  1318.                                         }
  1319.  
  1320.                                         if(Phonebook[Selected] -> Count != -1)
  1321.                                         {
  1322.                                             RemoveDialEntry(Selected);
  1323.  
  1324.                                             if(!(--Count))
  1325.                                             {
  1326.                                                 GT_SetGadgetAttrs(GadgetArray[GAD_CLEARLIST],PanelWindow,NULL,
  1327.                                                     GA_Disabled,    TRUE,
  1328.                                                 TAG_DONE);
  1329.                                             }
  1330.                                         }
  1331.  
  1332.                                         RemPhoneEntry(Selected);
  1333.  
  1334.                                         if(NumPhoneEntries > 0)
  1335.                                         {
  1336.                                             if(PhoneList = CreatePhoneList())
  1337.                                             {
  1338.                                                 if(Selected == NumPhoneEntries)
  1339.                                                     Selected--;
  1340.  
  1341.                                                 GT_SetGadgetAttrs(GadgetArray[GAD_NAMELIST],PanelWindow,NULL,
  1342.                                                     GTLV_Labels,    PhoneList,
  1343.                                                     GTLV_Selected,    Selected,
  1344.                                                 TAG_DONE);
  1345.  
  1346.                                                 GT_SetGadgetAttrs(GadgetArray[GAD_NAME],PanelWindow,NULL,
  1347.                                                     GTST_String,    Phonebook[Selected] -> Header -> Name,
  1348.                                                 TAG_DONE);
  1349.  
  1350.                                                 GT_SetGadgetAttrs(GadgetArray[GAD_COMMENT],PanelWindow,NULL,
  1351.                                                     GTST_String,    Phonebook[Selected] -> Header -> Comment,
  1352.                                                 TAG_DONE);
  1353.  
  1354.                                                 GT_SetGadgetAttrs(GadgetArray[GAD_PHONENUMBER],PanelWindow,NULL,
  1355.                                                     GTST_String,    Phonebook[Selected] -> Header -> Number,
  1356.                                                 TAG_DONE);
  1357.                                             }
  1358.                                             else
  1359.                                                 goto ClearList;
  1360.  
  1361.                                             if(NumPhoneEntries == 1)
  1362.                                             {
  1363.                                                 GT_SetGadgetAttrs(GadgetArray[GAD_SORTLIST],PanelWindow,NULL,
  1364.                                                     GA_Disabled,    TRUE,
  1365.                                                 TAG_DONE);
  1366.                                             }
  1367.                                         }
  1368.                                         else
  1369.                                         {
  1370. ClearList:                                        GT_SetGadgetAttrs(GadgetArray[GAD_NAMELIST],PanelWindow,NULL,
  1371.                                                 GTLV_Labels,    &EmptyList,
  1372.                                             TAG_DONE);
  1373.  
  1374.                                             GT_SetGadgetAttrs(GadgetArray[GAD_NAME],PanelWindow,NULL,
  1375.                                                 GTST_String,    "",
  1376.                                                 GA_Disabled,    TRUE,
  1377.                                             TAG_DONE);
  1378.  
  1379.                                             GT_SetGadgetAttrs(GadgetArray[GAD_COMMENT],PanelWindow,NULL,
  1380.                                                 GTST_String,    "",
  1381.                                                 GA_Disabled,    TRUE,
  1382.                                             TAG_DONE);
  1383.  
  1384.                                             GT_SetGadgetAttrs(GadgetArray[GAD_PHONENUMBER],PanelWindow,NULL,
  1385.                                                 GTST_String,    "",
  1386.                                                 GA_Disabled,    TRUE,
  1387.                                             TAG_DONE);
  1388.  
  1389.                                             GT_SetGadgetAttrs(GadgetArray[GAD_USEIT],PanelWindow,NULL,
  1390.                                                 GA_Disabled,    TRUE,
  1391.                                             TAG_DONE);
  1392.  
  1393.                                             GT_SetGadgetAttrs(GadgetArray[GAD_REMOVEENTRY],PanelWindow,NULL,
  1394.                                                 GA_Disabled,    TRUE,
  1395.                                             TAG_DONE);
  1396.  
  1397.                                             GT_SetGadgetAttrs(GadgetArray[GAD_CLONEENTRY],PanelWindow,NULL,
  1398.                                                 GA_Disabled,    TRUE,
  1399.                                             TAG_DONE);
  1400.  
  1401.                                             GT_SetGadgetAttrs(GadgetArray[GAD_SAVELIST],PanelWindow,NULL,
  1402.                                                 GA_Disabled,    TRUE,
  1403.                                             TAG_DONE);
  1404.  
  1405.                                             GT_SetGadgetAttrs(GadgetArray[GAD_PRINT],PanelWindow,NULL,
  1406.                                                 GA_Disabled,    TRUE,
  1407.                                             TAG_DONE);
  1408.  
  1409.                                             GT_SetGadgetAttrs(GadgetArray[GAD_COPYCONFIG],PanelWindow,NULL,
  1410.                                                 GA_Disabled,    TRUE,
  1411.                                             TAG_DONE);
  1412.  
  1413.                                             GT_SetGadgetAttrs(GadgetArray[GAD_PASSWORD],PanelWindow,NULL,
  1414.                                                 GA_Disabled,    TRUE,
  1415.                                             TAG_DONE);
  1416.  
  1417.                                             GT_SetGadgetAttrs(GadgetArray[GAD_SORTLIST],PanelWindow,NULL,
  1418.                                                 GA_Disabled,    TRUE,
  1419.                                             TAG_DONE);
  1420.  
  1421.                                             GT_SetGadgetAttrs(GadgetArray[GAD_DIALLIST],PanelWindow,NULL,
  1422.                                                 GA_Disabled,    TRUE,
  1423.                                             TAG_DONE);
  1424.  
  1425.                                             GT_SetGadgetAttrs(GadgetArray[GAD_EDIT],PanelWindow,NULL,
  1426.                                                 GadToolsBase -> lib_Version < 39 ? TAG_IGNORE : GA_Disabled,    TRUE,
  1427.                                             TAG_DONE);
  1428.  
  1429.                                             ActiveGadget = NULL;
  1430.  
  1431.                                             Selected    = ~0;
  1432.                                             HitItem        = -1;
  1433.                                         }
  1434.                                     }
  1435.                                 }
  1436.  
  1437.                                 break;
  1438.  
  1439.                             case GAD_NAME:
  1440.  
  1441.                                 if(Selected != ~0)
  1442.                                 {
  1443.                                     strcpy(Phonebook[Selected] -> Header -> Name,SZ_GetString(GadgetArray[GAD_NAME]));
  1444.  
  1445.                                     GT_SetGadgetAttrs(GadgetArray[GAD_NAMELIST],PanelWindow,NULL,
  1446.                                         GTLV_Labels,~0,
  1447.                                     TAG_DONE);
  1448.  
  1449.                                     if(PhoneList)
  1450.                                         DeletePhoneList(PhoneList);
  1451.  
  1452.                                     if(PhoneList = CreatePhoneList())
  1453.                                     {
  1454.                                         GT_SetGadgetAttrs(GadgetArray[GAD_NAMELIST],PanelWindow,NULL,
  1455.                                             GTLV_Labels,    PhoneList,
  1456.                                             GTLV_Selected,    Selected,
  1457.                                         TAG_DONE);
  1458.                                     }
  1459.  
  1460.                                     PhonebookChanged = TRUE;
  1461.                                 }
  1462.  
  1463.                                 ActivateGadget(ActiveGadget = GadgetArray[GAD_COMMENT],PanelWindow,NULL);
  1464.  
  1465.                                 break;
  1466.  
  1467.                             case GAD_COMMENT:
  1468.  
  1469.                                 if(Selected != ~0)
  1470.                                 {
  1471.                                     strcpy(Phonebook[Selected] -> Header -> Comment,SZ_GetString(GadgetArray[GAD_COMMENT]));
  1472.  
  1473.                                     PhonebookChanged = TRUE;
  1474.                                 }
  1475.  
  1476.                                 ActivateGadget(ActiveGadget = GadgetArray[GAD_PHONENUMBER],PanelWindow,NULL);
  1477.  
  1478.                                 break;
  1479.  
  1480.                             case GAD_PHONENUMBER:
  1481.  
  1482.                                 if(Selected != ~0)
  1483.                                 {
  1484.                                     strcpy(Phonebook[Selected] -> Header -> Number,SZ_GetString(GadgetArray[GAD_PHONENUMBER]));
  1485.  
  1486.                                     PhonebookChanged = TRUE;
  1487.                                 }
  1488.  
  1489.                                 break;
  1490.  
  1491.                             case GAD_LOADLIST:
  1492.  
  1493.                                 BlockWindow(PanelWindow);
  1494.  
  1495.                                 if(ChosenEntry)
  1496.                                     MyEasyRequest(Window,LocaleString(MSG_PHONEPANEL_PHONE_ENTRY_IN_USE_LOAD_TXT),LocaleString(MSG_GLOBAL_CONTINUE_TXT));
  1497.                                 else
  1498.                                 {
  1499.                                     strcpy(DummyBuffer,LastPhone);
  1500.  
  1501.                                     DummyChar = PathPart(DummyBuffer);
  1502.  
  1503.                                     *DummyChar = 0;
  1504.  
  1505.                                     if(FileRequest = GetFile(LocaleString(MSG_PHONEPANEL_LOAD_PHONEBOOK_TXT),DummyBuffer,FilePart(LastPhone),DummyBuffer,"#?.prefs",FALSE,FALSE,FALSE,LocaleString(MSG_GLOBAL_LOAD_TXT)))
  1506.                                     {
  1507.                                         if(PhoneList)
  1508.                                             DeletePhoneList(PhoneList);
  1509.  
  1510.                                         if(!LoadPhonebook(DummyBuffer))
  1511.                                             MyEasyRequest(Window,LocaleString(MSG_PHONEPANEL_COULD_NOT_LOAD_PHONEBOOK_TXT),LocaleString(MSG_GLOBAL_CONTINUE_TXT),DummyBuffer);
  1512.                                         else
  1513.                                         {
  1514.                                             strcpy(LastPhone,DummyBuffer);
  1515.  
  1516.                                             PhonebookChanged = FALSE;
  1517.                                         }
  1518.  
  1519.                                         if(PhoneList = CreatePhoneList())
  1520.                                         {
  1521.                                             GT_SetGadgetAttrs(GadgetArray[GAD_NAMELIST],PanelWindow,NULL,
  1522.                                                 GTLV_Labels,    PhoneList,
  1523.                                             TAG_DONE);
  1524.  
  1525.                                             FreeDialList(TRUE);
  1526.                                         }
  1527.  
  1528.                                         Count = 0;
  1529.  
  1530.                                         GT_SetGadgetAttrs(GadgetArray[GAD_NAME],PanelWindow,NULL,
  1531.                                             GTST_String,    "",
  1532.                                             GA_Disabled,    TRUE,
  1533.                                         TAG_DONE);
  1534.  
  1535.                                         GT_SetGadgetAttrs(GadgetArray[GAD_COMMENT],PanelWindow,NULL,
  1536.                                             GTST_String,    "",
  1537.                                             GA_Disabled,    TRUE,
  1538.                                         TAG_DONE);
  1539.  
  1540.                                         GT_SetGadgetAttrs(GadgetArray[GAD_PHONENUMBER],PanelWindow,NULL,
  1541.                                             GTST_String,    "",
  1542.                                             GA_Disabled,    TRUE,
  1543.                                         TAG_DONE);
  1544.  
  1545.                                         GT_SetGadgetAttrs(GadgetArray[GAD_USEIT],PanelWindow,NULL,
  1546.                                             GA_Disabled,    TRUE,
  1547.                                         TAG_DONE);
  1548.  
  1549.                                         GT_SetGadgetAttrs(GadgetArray[GAD_REMOVEENTRY],PanelWindow,NULL,
  1550.                                             GA_Disabled,    TRUE,
  1551.                                         TAG_DONE);
  1552.  
  1553.                                         GT_SetGadgetAttrs(GadgetArray[GAD_CLONEENTRY],PanelWindow,NULL,
  1554.                                             GA_Disabled,    TRUE,
  1555.                                         TAG_DONE);
  1556.  
  1557.                                         GT_SetGadgetAttrs(GadgetArray[GAD_DIALLIST],PanelWindow,NULL,
  1558.                                             GA_Disabled,    TRUE,
  1559.                                         TAG_DONE);
  1560.  
  1561.                                         GT_SetGadgetAttrs(GadgetArray[GAD_CLEARLIST],PanelWindow,NULL,
  1562.                                             GA_Disabled,    TRUE,
  1563.                                         TAG_DONE);
  1564.  
  1565.                                         GT_SetGadgetAttrs(GadgetArray[GAD_EDIT],PanelWindow,NULL,
  1566.                                             GadToolsBase -> lib_Version < 39 ? TAG_IGNORE : GA_Disabled,    TRUE,
  1567.                                         TAG_DONE);
  1568.  
  1569.                                         ActiveGadget = NULL;
  1570.  
  1571.                                         if(PhoneList)
  1572.                                         {
  1573.                                             if(!PhoneList -> lh_Head -> ln_Succ)
  1574.                                             {
  1575.                                                 GT_SetGadgetAttrs(GadgetArray[GAD_SAVELIST],PanelWindow,NULL,
  1576.                                                     GA_Disabled,    TRUE,
  1577.                                                 TAG_DONE);
  1578.  
  1579.                                                 GT_SetGadgetAttrs(GadgetArray[GAD_PRINT],PanelWindow,NULL,
  1580.                                                     GA_Disabled,    TRUE,
  1581.                                                 TAG_DONE);
  1582.  
  1583.                                                 GT_SetGadgetAttrs(GadgetArray[GAD_COPYCONFIG],PanelWindow,NULL,
  1584.                                                     GA_Disabled,    TRUE,
  1585.                                                 TAG_DONE);
  1586.  
  1587.                                                 GT_SetGadgetAttrs(GadgetArray[GAD_PASSWORD],PanelWindow,NULL,
  1588.                                                     GA_Disabled,    TRUE,
  1589.                                                 TAG_DONE);
  1590.  
  1591.                                                 GT_SetGadgetAttrs(GadgetArray[GAD_SORTLIST],PanelWindow,NULL,
  1592.                                                     GA_Disabled,    TRUE,
  1593.                                                 TAG_DONE);
  1594.                                             }
  1595.                                             else
  1596.                                             {
  1597.                                                 GT_SetGadgetAttrs(GadgetArray[GAD_SAVELIST],PanelWindow,NULL,
  1598.                                                     GA_Disabled,    FALSE,
  1599.                                                 TAG_DONE);
  1600.  
  1601.                                                 GT_SetGadgetAttrs(GadgetArray[GAD_PRINT],PanelWindow,NULL,
  1602.                                                     GA_Disabled,    FALSE,
  1603.                                                 TAG_DONE);
  1604.  
  1605.                                                 GT_SetGadgetAttrs(GadgetArray[GAD_COPYCONFIG],PanelWindow,NULL,
  1606.                                                     GA_Disabled,    FALSE,
  1607.                                                 TAG_DONE);
  1608.  
  1609.                                                 GT_SetGadgetAttrs(GadgetArray[GAD_PASSWORD],PanelWindow,NULL,
  1610.                                                     GA_Disabled,    FALSE,
  1611.                                                 TAG_DONE);
  1612.  
  1613.                                                 if(PhoneList -> lh_Head -> ln_Succ -> ln_Succ)
  1614.                                                 {
  1615.                                                     GT_SetGadgetAttrs(GadgetArray[GAD_SORTLIST],PanelWindow,NULL,
  1616.                                                         GA_Disabled,    FALSE,
  1617.                                                     TAG_DONE);
  1618.                                                 }
  1619.                                                 else
  1620.                                                 {
  1621.                                                     GT_SetGadgetAttrs(GadgetArray[GAD_SORTLIST],PanelWindow,NULL,
  1622.                                                         GA_Disabled,    TRUE,
  1623.                                                     TAG_DONE);
  1624.                                                 }
  1625.                                             }
  1626.                                         }
  1627.  
  1628.                                         Selected    = ~0;
  1629.                                         HitItem        = -1;
  1630.  
  1631.                                         FreeAslRequest(FileRequest);
  1632.                                     }
  1633.                                 }
  1634.  
  1635.                                 ReleaseWindow(PanelWindow);
  1636.  
  1637.                                 break;
  1638.  
  1639.                             case GAD_SORTLIST:
  1640.  
  1641.                                 if(NumPhoneEntries > 1)
  1642.                                 {
  1643.                                     PhonebookChanged = TRUE;
  1644.  
  1645.                                     BlockWindow(PanelWindow);
  1646.  
  1647.                                     GT_SetGadgetAttrs(GadgetArray[GAD_NAMELIST],PanelWindow,NULL,
  1648.                                         GTLV_Labels,    ~0,
  1649.                                     TAG_DONE);
  1650.  
  1651.                                     GT_SetGadgetAttrs(GadgetArray[GAD_NAME],PanelWindow,NULL,
  1652.                                         GTST_String,    "",
  1653.                                         GA_Disabled,    TRUE,
  1654.                                     TAG_DONE);
  1655.  
  1656.                                     GT_SetGadgetAttrs(GadgetArray[GAD_COMMENT],PanelWindow,NULL,
  1657.                                         GTST_String,    "",
  1658.                                         GA_Disabled,    TRUE,
  1659.                                     TAG_DONE);
  1660.  
  1661.                                     GT_SetGadgetAttrs(GadgetArray[GAD_PHONENUMBER],PanelWindow,NULL,
  1662.                                         GTST_String,    "",
  1663.                                         GA_Disabled,    TRUE,
  1664.                                     TAG_DONE);
  1665.  
  1666.                                     GT_SetGadgetAttrs(GadgetArray[GAD_USEIT],PanelWindow,NULL,
  1667.                                         GA_Disabled,    TRUE,
  1668.                                     TAG_DONE);
  1669.  
  1670.                                     GT_SetGadgetAttrs(GadgetArray[GAD_REMOVEENTRY],PanelWindow,NULL,
  1671.                                         GA_Disabled,    TRUE,
  1672.                                     TAG_DONE);
  1673.  
  1674.                                     GT_SetGadgetAttrs(GadgetArray[GAD_CLONEENTRY],PanelWindow,NULL,
  1675.                                         GA_Disabled,    TRUE,
  1676.                                     TAG_DONE);
  1677.  
  1678.                                     GT_SetGadgetAttrs(GadgetArray[GAD_DIALLIST],PanelWindow,NULL,
  1679.                                         GA_Disabled,    TRUE,
  1680.                                     TAG_DONE);
  1681.  
  1682.                                     GT_SetGadgetAttrs(GadgetArray[GAD_EDIT],PanelWindow,NULL,
  1683.                                         GadToolsBase -> lib_Version < 39 ? TAG_IGNORE : GA_Disabled,    TRUE,
  1684.                                     TAG_DONE);
  1685.  
  1686.                                     ActiveGadget = NULL;
  1687.  
  1688.                                     if(PhoneList)
  1689.                                         DeletePhoneList(PhoneList);
  1690.  
  1691.                                     SortPhoneEntries();
  1692.  
  1693.                                     if(PhoneList = CreatePhoneList())
  1694.                                     {
  1695.                                         GT_SetGadgetAttrs(GadgetArray[GAD_NAMELIST],PanelWindow,NULL,
  1696.                                             GTLV_Labels,    PhoneList,
  1697.                                             GTLV_Selected,    ~0,
  1698.                                         TAG_DONE);
  1699.                                     }
  1700.  
  1701.                                     Selected    = ~0;
  1702.                                     HitItem        = -1;
  1703.  
  1704.                                     ReleaseWindow(PanelWindow);
  1705.                                 }
  1706.  
  1707.                                 break;
  1708.  
  1709.                             case GAD_SAVELIST:
  1710.  
  1711.                                 if(NumPhoneEntries)
  1712.                                 {
  1713.                                     strcpy(DummyBuffer,LastPhone);
  1714.  
  1715.                                     DummyChar = PathPart(DummyBuffer);
  1716.  
  1717.                                     *DummyChar = 0;
  1718.  
  1719.                                     BlockWindow(PanelWindow);
  1720.  
  1721.                                     if(FileRequest = GetFile(LocaleString(MSG_PHONEPANEL_SAVE_PHONEBOOK_TXT),DummyBuffer,FilePart(LastPhone),DummyBuffer,"#?.prefs",TRUE,FALSE,FALSE,LocaleString(MSG_GLOBAL_SAVE_TXT)))
  1722.                                     {
  1723.                                         if(!SavePhonebook(DummyBuffer))
  1724.                                             MyEasyRequest(Window,LocaleString(MSG_PHONEPANEL_COULD_NOT_CREATE_TXT),LocaleString(MSG_GLOBAL_CONTINUE_TXT),DummyBuffer);
  1725.                                         else
  1726.                                         {
  1727.                                             strcpy(LastPhone,DummyBuffer);
  1728.  
  1729.                                             PhonebookChanged = FALSE;
  1730.                                         }
  1731.  
  1732.                                         FreeAslRequest(FileRequest);
  1733.                                     }
  1734.  
  1735.                                     ReleaseWindow(PanelWindow);
  1736.                                 }
  1737.  
  1738.                                 break;
  1739.  
  1740.                             case GAD_COPYCONFIG:
  1741.  
  1742.                                 BlockWindow(PanelWindow);
  1743.  
  1744.                                 if(Selected == ~0)
  1745.                                     PhonebookChanged |= CopyPanel(NULL,Count > 0);
  1746.                                 else
  1747.                                     PhonebookChanged |= CopyPanel(Phonebook[Selected] -> Config,Count > 0);
  1748.  
  1749.                                 ReleaseWindow(PanelWindow);
  1750.                                 break;
  1751.  
  1752.                             case GAD_PASSWORD:
  1753.  
  1754.                                 BlockWindow(PanelWindow);
  1755.  
  1756.                                 {
  1757.                                     struct Gadget *OldActiveGadget = ActiveGadget;
  1758.  
  1759.                                     memset(SharedBuffer,0,21);
  1760.  
  1761.                                     PhonePasswordUsed = FALSE;
  1762.  
  1763.                                     if(GetString(FALSE,TRUE,21,LocaleString(MSG_PHONEPANEL_PLEASE_ENTER_PASSWORD_TXT),SharedBuffer))
  1764.                                     {
  1765.                                         PhonebookChanged = TRUE;
  1766.  
  1767.                                         if(SharedBuffer[0])
  1768.                                         {
  1769.                                             UBYTE OtherBuffer[30];
  1770.  
  1771.                                             memset(OtherBuffer,0,21);
  1772.  
  1773.                                             SharedBuffer[20] = 0;
  1774.  
  1775.                                             if(GetString(FALSE,TRUE,21,LocaleString(MSG_PHONEPANEL_PLEASE_REPEAT_PASSWORD_TXT),OtherBuffer))
  1776.                                             {
  1777.                                                 OtherBuffer[20] = 0;
  1778.  
  1779.                                                 if(!memcmp(OtherBuffer,SharedBuffer,20))
  1780.                                                 {
  1781.                                                     Encrypt(SharedBuffer,20,PhonePassword,SharedBuffer,strlen(SharedBuffer));
  1782.  
  1783.                                                     PhonePasswordUsed = TRUE;
  1784.                                                 }
  1785.                                                 else
  1786.                                                     MyEasyRequest(Window,LocaleString(MSG_PHONEPANEL_ERROR_ENTERING_PASSWORD_TXT),LocaleString(MSG_GLOBAL_CONTINUE_TXT));
  1787.                                             }
  1788.                                             else
  1789.                                                 MyEasyRequest(Window,LocaleString(MSG_PHONEPANEL_ERROR_ENTERING_PASSWORD_TXT),LocaleString(MSG_GLOBAL_CONTINUE_TXT));
  1790.                                         }
  1791.                                     }
  1792.  
  1793.                                     ActiveGadget = OldActiveGadget;
  1794.                                 }
  1795.  
  1796.                                 ReleaseWindow(PanelWindow);
  1797.                                 break;
  1798.  
  1799.                             case GAD_EDIT:
  1800.  
  1801.                                 if(Selected != ~0)
  1802.                                 {
  1803.                                     BlockWindow(PanelWindow);
  1804.  
  1805.                                     switch(Code)
  1806.                                     {
  1807.                                         case EDIT_RATES:
  1808.  
  1809.                                             if(Phonebook[Selected] == ChosenEntry)
  1810.                                                 MyEasyRequest(Window,LocaleString(MSG_PHONEPANEL_PHONE_ENTRY_IN_USE_EDIT_TXT),LocaleString(MSG_GLOBAL_CONTINUE_TXT),DummyBuffer);
  1811.                                             else
  1812.                                             {
  1813.                                                 GT_SetGadgetAttrs(GadgetArray[GAD_NAMELIST],PanelWindow,NULL,
  1814.                                                     GTLV_Labels,    ~0,
  1815.                                                 TAG_DONE);
  1816.  
  1817.                                                 PhonebookChanged |= RatePanel(PhoneList,Phonebook[Selected]);
  1818.  
  1819.                                                 GT_SetGadgetAttrs(GadgetArray[GAD_NAMELIST],PanelWindow,NULL,
  1820.                                                     GTLV_Labels,    PhoneList,
  1821.                                                     GTLV_Selected,    Selected,
  1822.                                                 TAG_DONE);
  1823.                                             }
  1824.  
  1825.                                             break;
  1826.  
  1827.                                         case EDIT_PASSWORD:
  1828.  
  1829.                                             PhonebookChanged |= PasswordUserPanel(Phonebook[Selected]);
  1830.                                             break;
  1831.  
  1832.                                         default:
  1833.  
  1834.                                             PhonebookChanged |= EditConfig(Phonebook[Selected] -> Config,Code,PanelWindow);
  1835.                                             break;
  1836.                                     }
  1837.  
  1838.                                     ActiveGadget = GadgetArray[GAD_NAME];
  1839.  
  1840.                                     ReleaseWindow(PanelWindow);
  1841.                                 }
  1842.  
  1843.                                 break;
  1844.  
  1845.                             case GAD_DIALLIST:
  1846.  
  1847.                                 if(!Count && Selected != ~0)
  1848.                                 {
  1849.                                     GT_SetGadgetAttrs(GadgetArray[GAD_NAMELIST],PanelWindow,NULL,
  1850.                                         GTLV_Labels,    ~0,
  1851.                                     TAG_DONE);
  1852.  
  1853.                                     SPrintf(Phonebook[Selected] -> Node -> LocalName,"      %s",Phonebook[Selected] -> Header -> Name);
  1854.  
  1855.                                     Phonebook[Selected] -> Count = Count++;
  1856.  
  1857.                                     GT_SetGadgetAttrs(GadgetArray[GAD_NAMELIST],PanelWindow,NULL,
  1858.                                         GTLV_Labels,    PhoneList,
  1859.                                     TAG_DONE);
  1860.                                 }
  1861.  
  1862.                                 if(Count > 0)
  1863.                                 {
  1864.                                     DialTheList    = TRUE;
  1865.                                     Terminated    = TRUE;
  1866.                                 }
  1867.  
  1868.                                 break;
  1869.                         }
  1870.                     }
  1871.                 }
  1872.             }
  1873.  
  1874.             RemoveGList(PanelWindow,GadgetList,(UWORD)-1);
  1875.  
  1876.             PopWindow();
  1877.  
  1878.             OffsetX = PanelWindow -> LeftEdge;
  1879.             OffsetY = PanelWindow -> TopEdge;
  1880.  
  1881.             CloseWindow(PanelWindow);
  1882.         }
  1883.     }
  1884.  
  1885.     FreeGadgets(GadgetList);
  1886.  
  1887.     FreeDialList(TRUE);
  1888.  
  1889.     if(PhoneList)
  1890.     {
  1891.         if(Count > 0)
  1892.         {
  1893.             TempNode = (struct PhoneNode *)PhoneList -> lh_Head;
  1894.  
  1895.             while(TempNode -> VanillaNode . ln_Succ)
  1896.             {
  1897.                 if(TempNode -> Entry -> Count != -1)
  1898.                     SortToList(TempNode);
  1899.  
  1900.                 TempNode = (struct PhoneNode *)TempNode -> VanillaNode . ln_Succ;
  1901.             }
  1902.  
  1903.             if(!DialList)
  1904.                 DialTheList = FALSE;
  1905.         }
  1906.  
  1907.         DeletePhoneList(PhoneList);
  1908.     }
  1909.  
  1910.     return(DialTheList);
  1911. }
  1912.