home *** CD-ROM | disk | FTP | other *** search
/ Amiga Elysian Archive / AmigaElysianArchive.iso / comm / term33so.lha / PhonePanel.c < prev    next >
C/C++ Source or Header  |  1993-04-30  |  53KB  |  2,064 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,    GAD_QUICKMENU,
  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.         if((Len = SZ_TextWidth(LocaleString(MSG_PHONEPANEL_QUICK_MENU_GAD))) > Max)
  237.             Max = Len;
  238.  
  239.         SZ_AddLeftOffset(Max + INTERWIDTH);
  240.  
  241.         LeftEdge = SZ_GetLeftEdge();
  242.  
  243.         ListWidth = SZ_Width(LISTVIEW_KIND,NULL,35,NULL);
  244.  
  245.         Width = 0;
  246.  
  247.         for(i = 0 ; i < 17 ; i++)
  248.         {
  249.             if((Len = strlen(EditName[i])) > Width)
  250.                 Width = Len;
  251.         }
  252.  
  253.         EditWidth = SZ_Width(LISTVIEW_KIND,NULL,Width,NULL);
  254.  
  255.         if(MaxWidth > ListWidth + InterWidth + EditWidth)
  256.         {
  257.             LONG Remainder = ListWidth + InterWidth + EditWidth;
  258.  
  259.             Width = (MaxWidth - Remainder) / 2;
  260.  
  261.             ListWidth += Width;
  262.             EditWidth += MaxWidth - (Remainder + Width);
  263.         }
  264.  
  265.         FOREVER
  266.         {
  267.             NewGadget . ng_Flags        = PLACETEXT_ABOVE|NG_HIGHLABEL;
  268.             NewGadget . ng_GadgetText    = LocaleString(MSG_GLOBAL_NAME_LIST_GAD);
  269.             NewGadget . ng_GadgetID        = Counter;
  270.  
  271.             ListViewHook . h_Entry    = (LONG (*)())ListViewRender;
  272.             ListViewHook . h_Data    = (APTR)SZ_GetNumericLen("1");
  273.  
  274.             GadgetArray[Counter++] = Gadget = CreateGadget(LISTVIEW_KIND,Gadget,&NewGadget,
  275.                 SZ_Adjust,        TRUE,
  276.                 SZ_UseWidth,        ListWidth,
  277.                 SZ_Lines,        Lines,
  278.                 SZ_InterHeight,        1,
  279.  
  280.                 GTLV_CallBack,        &ListViewHook,
  281.             TAG_DONE);
  282.  
  283.             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)
  284.             {
  285.                 if(*GadgetList)
  286.                 {
  287.                     FreeGadgets(*GadgetList);
  288.  
  289.                     *GadgetList = NULL;
  290.                 }
  291.  
  292.                 SZ_SizeSetup(Window -> WScreen,&UserFont,TRUE);
  293.  
  294.                 Counter = 0;
  295.  
  296.                 Lines--;
  297.  
  298.                 if(!(Gadget = CreateContext(GadgetList)))
  299.                     return(NULL);
  300.  
  301.                 SZ_AddLeftOffset(Max + INTERWIDTH);
  302.             }
  303.             else
  304.                 break;
  305.         }
  306.  
  307.         NewGadget . ng_GadgetText    = LocaleString(MSG_PHONEPANEL_SETTINGS_TXT);
  308.         NewGadget . ng_GadgetID        = Counter;
  309.  
  310.         GadgetArray[Counter++] = Gadget = CreateGadget(LISTVIEW_KIND,Gadget,&NewGadget,
  311.             SZ_Adjust,    TRUE,
  312.             SZ_NewColumn,    TRUE,
  313.             SZ_UseWidth,    EditWidth,
  314.             SZ_Lines,    Lines,
  315.             !Kick30 ? TAG_IGNORE : GA_Disabled,    TRUE,
  316.             GTLV_Labels,    &EditList,
  317.             SZ_InterHeight,    1,
  318.         TAG_DONE);
  319.  
  320.         NewGadget . ng_GadgetText    = LocaleString(MSG_PHONEPANEL_BBS_NAME_GAD);
  321.         NewGadget . ng_GadgetID        = Counter;
  322.         NewGadget . ng_Flags        = PLACETEXT_LEFT;
  323.  
  324.         GadgetArray[Counter++] = Gadget = CreateGadget(STRING_KIND,Gadget,&NewGadget,
  325.             SZ_Adjust,    TRUE,
  326.             SZ_FullWidth,    TRUE,
  327.             SZ_UseLeft,    LeftEdge,
  328.             SZ_AlignBottom,    TRUE,
  329.  
  330.             GTST_MaxChars,    39,
  331.             GA_Disabled,    TRUE,
  332.         TAG_DONE);
  333.  
  334.         NewGadget . ng_GadgetText    = LocaleString(MSG_PHONEPANEL_COMMENT_GAD);
  335.         NewGadget . ng_GadgetID        = Counter;
  336.  
  337.         GadgetArray[Counter++] = Gadget = CreateGadget(STRING_KIND,Gadget,&NewGadget,
  338.             SZ_Adjust,    TRUE,
  339.             SZ_AutoWidth,    TRUE,
  340.  
  341.             GTST_MaxChars,    99,
  342.             GA_Disabled,    TRUE,
  343.         TAG_DONE);
  344.  
  345.         NewGadget . ng_GadgetText    = LocaleString(MSG_PHONEPANEL_PHONE_NUMBER_GAD);
  346.         NewGadget . ng_GadgetID        = Counter;
  347.  
  348.         GadgetArray[Counter++] = Gadget = CreateGadget(STRING_KIND,Gadget,&NewGadget,
  349.             SZ_Adjust,    TRUE,
  350.             SZ_AutoWidth,    TRUE,
  351.  
  352.             GTST_MaxChars,    99,
  353.             GA_Disabled,    TRUE,
  354.         TAG_DONE);
  355.  
  356.         NewGadget . ng_GadgetText    = LocaleString(MSG_PHONEPANEL_QUICK_MENU_GAD);
  357.         NewGadget . ng_GadgetID        = Counter;
  358.  
  359.         GadgetArray[Counter++] = Gadget = CreateGadget(CHECKBOX_KIND,Gadget,&NewGadget,
  360.             SZ_Adjust,    TRUE,
  361.             SZ_AutoWidth,    TRUE,
  362.  
  363.             GA_Disabled,    TRUE,
  364.         TAG_DONE);
  365.  
  366.  
  367.         SZ_SetWidth(ButtonWidth);
  368.  
  369.         NewGadget . ng_GadgetText    = LocaleString(MSG_PHONEPANEL_NEW_ENTRY_GAD);
  370.         NewGadget . ng_GadgetID        = Counter;
  371.         NewGadget . ng_Flags        = PLACETEXT_IN;
  372.  
  373.         GadgetArray[Counter++] = Gadget = CreateGadget(BUTTON_KIND,Gadget,&NewGadget,
  374.             SZ_Adjust,    TRUE,
  375.             SZ_AutoWidth,    TRUE,
  376.             SZ_AlignBottom,    TRUE,
  377.             SZ_GroupCount,    4,
  378.             SZ_UseLeft,    LeftEdge,
  379.         TAG_DONE);
  380.  
  381.         NewGadget . ng_GadgetText    = LocaleString(MSG_PHONEPANEL_DIAL_LIST_GAD);
  382.         NewGadget . ng_GadgetID        = Counter;
  383.  
  384.         GadgetArray[Counter++] = Gadget = CreateGadget(BUTTON_KIND,Gadget,&NewGadget,
  385.             SZ_Adjust,    TRUE,
  386.             SZ_AutoWidth,    TRUE,
  387.             SZ_GroupNext,    TRUE,
  388.  
  389.             GA_Disabled,    TRUE,
  390.         TAG_DONE);
  391.  
  392.         NewGadget . ng_GadgetText    = LocaleString(MSG_PHONEPANEL_LOAD_LIST_GAD);
  393.         NewGadget . ng_GadgetID        = Counter;
  394.  
  395.         GadgetArray[Counter++] = Gadget = CreateGadget(BUTTON_KIND,Gadget,&NewGadget,
  396.             SZ_Adjust,    TRUE,
  397.             SZ_AutoWidth,    TRUE,
  398.             SZ_GroupNext,    TRUE,
  399.  
  400.             GA_Disabled,    (Online && ChosenEntry),
  401.         TAG_DONE);
  402.  
  403.         NewGadget . ng_GadgetText    = LocaleString(MSG_PHONEPANEL_COPY_CONFIG_GAD);
  404.         NewGadget . ng_GadgetID        = Counter;
  405.  
  406.         GadgetArray[Counter++] = Gadget = CreateGadget(BUTTON_KIND,Gadget,&NewGadget,
  407.             SZ_Adjust,    TRUE,
  408.             SZ_AutoWidth,    TRUE,
  409.             SZ_GroupNext,    TRUE,
  410.  
  411.             GA_Disabled,    TRUE,
  412.         TAG_DONE);
  413.  
  414.  
  415.         NewGadget . ng_GadgetText    = LocaleString(MSG_PHONEPANEL_CLONE_ENTRY_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_AlignBottom,    TRUE,
  422.             SZ_GroupCount,    4,
  423.             SZ_UseLeft,    LeftEdge,
  424.  
  425.             GA_Disabled,    TRUE,
  426.         TAG_DONE);
  427.  
  428.         NewGadget . ng_GadgetText    = LocaleString(MSG_PHONEPANEL_CLEAR_LIST_GAD);
  429.         NewGadget . ng_GadgetID        = Counter;
  430.  
  431.         GadgetArray[Counter++] = Gadget = CreateGadget(BUTTON_KIND,Gadget,&NewGadget,
  432.             SZ_Adjust,    TRUE,
  433.             SZ_AutoWidth,    TRUE,
  434.             SZ_GroupNext,    TRUE,
  435.  
  436.             GA_Disabled,    TRUE,
  437.         TAG_DONE);
  438.  
  439.         NewGadget . ng_GadgetText    = LocaleString(MSG_PHONEPANEL_SORT_LIST_GAD);
  440.         NewGadget . ng_GadgetID        = Counter;
  441.  
  442.         GadgetArray[Counter++] = Gadget = CreateGadget(BUTTON_KIND,Gadget,&NewGadget,
  443.             SZ_Adjust,    TRUE,
  444.             SZ_AutoWidth,    TRUE,
  445.             SZ_GroupNext,    TRUE,
  446.  
  447.             GA_Disabled,    TRUE,
  448.         TAG_DONE);
  449.  
  450.         NewGadget . ng_GadgetText    = LocaleString(MSG_PHONEPANEL_SET_PASSWORT_GAD);
  451.         NewGadget . ng_GadgetID        = Counter;
  452.  
  453.         GadgetArray[Counter++] = Gadget = CreateGadget(BUTTON_KIND,Gadget,&NewGadget,
  454.             SZ_Adjust,    TRUE,
  455.             SZ_AutoWidth,    TRUE,
  456.             SZ_GroupNext,    TRUE,
  457.  
  458.             GA_Disabled,    TRUE,
  459.         TAG_DONE);
  460.  
  461.  
  462.         NewGadget . ng_GadgetText    = LocaleString(MSG_PHONEPANEL_REMOVE_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_AlignBottom,    TRUE,
  469.             SZ_GroupCount,    4,
  470.             SZ_UseLeft,    LeftEdge,
  471.  
  472.             GA_Disabled,    TRUE,
  473.         TAG_DONE);
  474.  
  475.         NewGadget . ng_GadgetText    = LocaleString(MSG_PHONEPANEL_USE_ENTRY_GAD);
  476.         NewGadget . ng_GadgetID        = Counter;
  477.  
  478.         GadgetArray[Counter++] = Gadget = CreateGadget(BUTTON_KIND,Gadget,&NewGadget,
  479.             SZ_Adjust,    TRUE,
  480.             SZ_AutoWidth,    TRUE,
  481.             SZ_GroupNext,    TRUE,
  482.  
  483.             GA_Disabled,    TRUE,
  484.         TAG_DONE);
  485.  
  486.         NewGadget . ng_GadgetText    = LocaleString(MSG_PHONEPANEL_SAVE_LIST_GAD);
  487.         NewGadget . ng_GadgetID        = Counter;
  488.  
  489.         GadgetArray[Counter++] = Gadget = CreateGadget(BUTTON_KIND,Gadget,&NewGadget,
  490.             SZ_Adjust,    TRUE,
  491.             SZ_AutoWidth,    TRUE,
  492.             SZ_GroupNext,    TRUE,
  493.  
  494.             GA_Disabled,    TRUE,
  495.         TAG_DONE);
  496.  
  497.         NewGadget . ng_GadgetText    = LocaleString(MSG_PHONEPANEL_PRINT_GAD);
  498.         NewGadget . ng_GadgetID        = Counter;
  499.  
  500.         GadgetArray[Counter] = Gadget = CreateGadget(BUTTON_KIND,Gadget,&NewGadget,
  501.             SZ_Adjust,    TRUE,
  502.             SZ_AutoWidth,    TRUE,
  503.             SZ_GroupNext,    TRUE,
  504.  
  505.             GA_Disabled,    TRUE,
  506.         TAG_DONE);
  507.     }
  508.  
  509.     return(Gadget);
  510. }
  511.  
  512. STATIC BYTE
  513. EditConfig(struct Configuration *Config,UWORD Type,struct Window *PanelWindow)
  514. {
  515.     STATIC LONG TypeMappings[15][2] =
  516.     {
  517.         EDIT_SERIAL,        PREF_SERIAL,
  518.         EDIT_MODEM,        PREF_MODEM,
  519.         EDIT_SCREEN,        PREF_SCREEN,
  520.         EDIT_TERMINAL,        PREF_TERMINAL,
  521.         EDIT_EMULATION,        PREF_EMULATION,
  522.         EDIT_CLIPBOARD,        PREF_CLIP,
  523.         EDIT_CAPTURE,        PREF_CAPTURE,
  524.         EDIT_COMMANDS,        PREF_COMMAND,
  525.         EDIT_MISC,        PREF_MISC,
  526.         EDIT_PATHS,        PREF_PATH,
  527.         EDIT_TRANSFER,        PREF_FILE,
  528.         EDIT_TRANSLATION,    PREF_FILE,
  529.         EDIT_KEYMACROS,        PREF_FILE,
  530.         EDIT_CURSORKEYS,    PREF_FILE,
  531.         EDIT_FASTMACROS,    PREF_FILE
  532.     };
  533.  
  534.     struct FileRequester    *FileRequest;
  535.     UBYTE             DummyBuffer[MAX_FILENAME_LENGTH],
  536.                 *DummyChar;
  537.     BYTE             Changed    = FALSE,
  538.                  Default    = FALSE;
  539.     LONG             PrefType;
  540.     WORD             i;
  541.     APTR             Data;
  542.  
  543.     for(i = 0 ; i < 15 ; i++)
  544.     {
  545.         if(TypeMappings[i][0] == Type)
  546.         {
  547.             PrefType = TypeMappings[i][1];
  548.  
  549.             break;
  550.         }
  551.     }
  552.  
  553.     Data = GetConfigEntry(Config,PrefType);
  554.  
  555.     if(CreateConfigEntry(Config,PrefType))
  556.     {
  557.         if(!Data)
  558.             ResetConfigEntry(Config,PrefType,FALSE);
  559.  
  560.         switch(Type)
  561.         {
  562.             case EDIT_SERIAL:
  563.  
  564.                 Changed = SerialPanel(Config,&Default);
  565.                 break;
  566.  
  567.             case EDIT_MODEM:
  568.  
  569.                 Changed = ModemPanel(Config,&Default);
  570.                 break;
  571.  
  572.             case EDIT_SCREEN:
  573.  
  574.                 Changed = ScreenPanel(Config,&Default);
  575.                 break;
  576.  
  577.             case EDIT_TERMINAL:
  578.  
  579.                 Changed = TerminalPanel(Config,&Default);
  580.                 break;
  581.  
  582.             case EDIT_EMULATION:
  583.  
  584.                 Changed = EmulationPanel(Config,&Default);
  585.                 break;
  586.  
  587.             case EDIT_CLIPBOARD:
  588.  
  589.                 Changed = ClipPanel(Config,&Default);
  590.                 break;
  591.  
  592.             case EDIT_CAPTURE:
  593.  
  594.                 Changed = CapturePanel(Config,&Default);
  595.                 break;
  596.  
  597.             case EDIT_COMMANDS:
  598.  
  599.                 Changed = CommandPanel(Config,&Default);
  600.                 break;
  601.  
  602.             case EDIT_MISC:
  603.  
  604.                 Changed = MiscPanel(Config,&Default);
  605.                 break;
  606.  
  607.             case EDIT_PATHS:
  608.  
  609.                 Changed = PathPanel(Config,&Default);
  610.                 break;
  611.  
  612.             case EDIT_TRANSFER:
  613.  
  614.                 strcpy(DummyBuffer,LastXprLibrary);
  615.  
  616.                 if(SelectProtocol(Config -> FileConfig -> ProtocolFileName,PanelWindow))
  617.                 {
  618.                     strcpy(Config -> FileConfig -> ProtocolFileName,LastXprLibrary);
  619.  
  620.                     Changed = TRUE;
  621.                 }
  622.  
  623.                 strcpy(LastXprLibrary,DummyBuffer);
  624.  
  625.                 break;
  626.  
  627.             case EDIT_TRANSLATION:
  628.  
  629.                 strcpy(DummyBuffer,Config -> FileConfig -> TranslationFileName);
  630.  
  631.                 DummyChar = PathPart(DummyBuffer);
  632.  
  633.                 *DummyChar = 0;
  634.  
  635.                 if(FileRequest = GetFile(LocaleString(MSG_PHONEPANEL_SELECT_TRANSLATION_TXT),DummyBuffer,FilePart(Config -> FileConfig -> TranslationFileName),DummyBuffer,"#?.prefs",FALSE,FALSE,FALSE,LocaleString(MSG_GLOBAL_SELECT_TXT),TRUE))
  636.                 {
  637.                     strcpy(Config -> FileConfig -> TranslationFileName,DummyBuffer);
  638.  
  639.                     FreeAslRequest(FileRequest);
  640.  
  641.                     Changed = TRUE;
  642.                 }
  643.  
  644.                 break;
  645.  
  646.             case EDIT_KEYMACROS:
  647.  
  648.                 strcpy(DummyBuffer,Config -> FileConfig -> MacroFileName);
  649.  
  650.                 DummyChar = PathPart(DummyBuffer);
  651.  
  652.                 *DummyChar = 0;
  653.  
  654.                 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),TRUE))
  655.                 {
  656.                     strcpy(Config -> FileConfig -> MacroFileName,DummyBuffer);
  657.  
  658.                     FreeAslRequest(FileRequest);
  659.  
  660.                     Changed = TRUE;
  661.                 }
  662.  
  663.                 break;
  664.  
  665.             case EDIT_CURSORKEYS:
  666.  
  667.                 strcpy(DummyBuffer,Config -> FileConfig -> CursorFileName);
  668.  
  669.                 DummyChar = PathPart(DummyBuffer);
  670.  
  671.                 *DummyChar = 0;
  672.  
  673.                 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),TRUE))
  674.                 {
  675.                     strcpy(Config -> FileConfig -> CursorFileName,DummyBuffer);
  676.  
  677.                     FreeAslRequest(FileRequest);
  678.  
  679.                     Changed = TRUE;
  680.                 }
  681.  
  682.                 break;
  683.  
  684.             case EDIT_FASTMACROS:
  685.  
  686.                 strcpy(DummyBuffer,Config -> FileConfig -> FastMacroFileName);
  687.  
  688.                 DummyChar = PathPart(DummyBuffer);
  689.  
  690.                 *DummyChar = 0;
  691.  
  692.                 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),TRUE))
  693.                 {
  694.                     strcpy(Config -> FileConfig -> FastMacroFileName,DummyBuffer);
  695.  
  696.                     FreeAslRequest(FileRequest);
  697.  
  698.                     Changed = TRUE;
  699.                 }
  700.  
  701.                 break;
  702.         }
  703.  
  704.         if((!Changed && !Data) || Default)
  705.         {
  706.             DeleteConfigEntry(Config,PrefType);
  707.  
  708.             if(Default)
  709.                 Changed = TRUE;
  710.         }
  711.     }
  712.     else
  713.         DisplayBeep(Window -> WScreen);
  714.  
  715.     return(Changed);
  716. }
  717.  
  718. BYTE
  719. PhonePanel()
  720. {
  721.     STATIC WORD         OffsetX = -1,OffsetY = -1;
  722.  
  723.     struct Window        *PanelWindow;
  724.     struct Gadget        *GadgetList = NULL;
  725.     struct Gadget        *GadgetArray[GAD_PRINT + 1];
  726.  
  727.     ULONG             Sec1,Mic1,Sec2,Mic2;
  728.     LONG             HitItem = -1,Count = -1;
  729.     BYTE             DialTheList = FALSE;
  730.     struct PhoneNode    *TempNode;
  731.     struct List        *PhoneList = NULL;
  732.  
  733.     if(CreateAllGadgets(GadgetArray,&GadgetList))
  734.     {
  735.         if(PanelWindow = OpenWindowTags(NULL,
  736.             WA_Left,    GetScreenLeft(Window) + (GetScreenWidth(Window) - SZ_GetWindowWidth()) / 2,
  737.             WA_Top,        GetScreenTop(Window) + (GetScreenHeight(Window) - SZ_GetWindowHeight())    / 2,
  738.             WA_Width,    SZ_GetWindowWidth(),
  739.             WA_Height,    SZ_GetWindowHeight(),
  740.  
  741.             WA_Activate,    TRUE,
  742.             WA_DragBar,    TRUE,
  743.             WA_DepthGadget,    TRUE,
  744.             WA_RMBTrap,    TRUE,
  745.             WA_DepthGadget,    TRUE,
  746.             WA_CloseGadget,    TRUE,
  747.             WA_CustomScreen,Window -> WScreen,
  748.  
  749.             WA_IDCMP,    IDCMP_GADGETDOWN | IDCMP_ACTIVEWINDOW | IDCMP_CLOSEWINDOW | IDCMP_VANILLAKEY | STRINGIDCMP | BUTTONIDCMP | LISTVIEWIDCMP,
  750.  
  751.             WA_Title,    LocaleString(MSG_PHONEPANEL_PHONEBOOK_TXT),
  752.         TAG_DONE))
  753.         {
  754.             struct IntuiMessage    *Massage;
  755.             ULONG             IClass,Code,Qualifier;
  756.             struct Gadget        *Gadget;
  757.             BYTE             Terminated = FALSE,
  758.                          ClickAction;
  759.  
  760.             UBYTE             DummyBuffer[MAX_FILENAME_LENGTH],
  761.                         *DummyChar;
  762.  
  763.             LONG             Selected = ~0,i;
  764.  
  765.             struct FileRequester    *FileRequest;
  766.  
  767.             GuideContext(CONTEXT_PHONEBOOK);
  768.  
  769.             PushWindow(PanelWindow);
  770.  
  771.             AddGList(PanelWindow,GadgetList,(UWORD)-1,(UWORD)-1,NULL);
  772.             RefreshGList(GadgetList,PanelWindow,NULL,(UWORD)-1);
  773.             GT_RefreshWindow(PanelWindow,NULL);
  774.  
  775.             if(Phonebook && NumPhoneEntries)
  776.             {
  777.                 if(PhoneList = CreatePhoneList())
  778.                 {
  779.                     GT_SetGadgetAttrs(GadgetArray[GAD_NAMELIST],PanelWindow,NULL,
  780.                         GTLV_Labels,PhoneList,
  781.                     TAG_DONE);
  782.  
  783.                     if(PhoneList -> lh_Head -> ln_Succ)
  784.                     {
  785.                         GT_SetGadgetAttrs(GadgetArray[GAD_SAVELIST],PanelWindow,NULL,
  786.                             GA_Disabled,    FALSE,
  787.                         TAG_DONE);
  788.  
  789.                         GT_SetGadgetAttrs(GadgetArray[GAD_PRINT],PanelWindow,NULL,
  790.                             GA_Disabled,    FALSE,
  791.                         TAG_DONE);
  792.  
  793.                         GT_SetGadgetAttrs(GadgetArray[GAD_COPYCONFIG],PanelWindow,NULL,
  794.                             GA_Disabled,    FALSE,
  795.                         TAG_DONE);
  796.  
  797.                         GT_SetGadgetAttrs(GadgetArray[GAD_PASSWORD],PanelWindow,NULL,
  798.                             GA_Disabled,    FALSE,
  799.                         TAG_DONE);
  800.  
  801.                         if(PhoneList -> lh_Head -> ln_Succ -> ln_Succ)
  802.                         {
  803.                             GT_SetGadgetAttrs(GadgetArray[GAD_SORTLIST],PanelWindow,NULL,
  804.                                 GA_Disabled,    FALSE,
  805.                             TAG_DONE);
  806.                         }
  807.                     }
  808.                 }
  809.             }
  810.  
  811.             ActiveGadget = NULL;
  812.  
  813.             FreeDialList(TRUE);
  814.  
  815.             for(i = 0 ; i < NumPhoneEntries ; i++)
  816.             {
  817.                 if(Phonebook[i] -> Count > Count)
  818.                     Count = Phonebook[i] -> Count;
  819.             }
  820.  
  821.             Count++;
  822.  
  823.             if(Count)
  824.             {
  825.                 if(!Online)
  826.                 {
  827.                     GT_SetGadgetAttrs(GadgetArray[GAD_DIALLIST],PanelWindow,NULL,
  828.                         GA_Disabled,    FALSE,
  829.                     TAG_DONE);
  830.                 }
  831.  
  832.                 GT_SetGadgetAttrs(GadgetArray[GAD_CLEARLIST],PanelWindow,NULL,
  833.                     GA_Disabled,    FALSE,
  834.                 TAG_DONE);
  835.             }
  836.  
  837.             ClrSignal(SIG_BREAK);
  838.  
  839.             while(!Terminated)
  840.             {
  841.                 if(Wait(PORTMASK(PanelWindow -> UserPort) | SIG_BREAK) & SIG_BREAK)
  842.                 {
  843.                     FreeDialList(TRUE);
  844.  
  845.                     break;
  846.                 }
  847.  
  848.                 while(!Terminated && (Massage = (struct IntuiMessage *)GT_GetIMsg(PanelWindow -> UserPort)))
  849.                 {
  850.                     IClass        = Massage -> Class;
  851.                     Code        = Massage -> Code;
  852.                     Qualifier    = Massage -> Qualifier;
  853.                     Gadget        = (struct Gadget *)Massage -> IAddress;
  854.  
  855.                     GT_ReplyIMsg(Massage);
  856.  
  857.                     if(IClass == IDCMP_VANILLAKEY)
  858.                     {
  859.                         if(Code == ' ')
  860.                         {
  861.                             if(Selected != -1)
  862.                             {
  863.                                 HitItem = -1;
  864.  
  865.                                 GT_SetGadgetAttrs(GadgetArray[GAD_NAMELIST],PanelWindow,NULL,
  866.                                     GTLV_Labels,    ~0,
  867.                                 TAG_DONE);
  868.  
  869.                                 if(Phonebook[Selected] -> Count == -1)
  870.                                 {
  871.                                     if(!Count)
  872.                                     {
  873.                                         GT_SetGadgetAttrs(GadgetArray[GAD_CLEARLIST],PanelWindow,NULL,
  874.                                             GA_Disabled,    FALSE,
  875.                                         TAG_DONE);
  876.                                     }
  877.  
  878.                                     if(!Online && Phonebook[Selected] -> Header -> Number[0] && Phonebook[Selected] -> Header -> Name[0])
  879.                                     {
  880.                                         GT_SetGadgetAttrs(GadgetArray[GAD_DIALLIST],PanelWindow,NULL,
  881.                                             GA_Disabled,    FALSE,
  882.                                         TAG_DONE);
  883.                                     }
  884.  
  885.                                     Phonebook[Selected] -> Count = Count++;
  886.  
  887.                                     SPrintf(Phonebook[Selected] -> Node -> LocalName,"%3ld - %s",Count,Phonebook[Selected] -> Header -> Name);
  888.                                 }
  889.                                 else
  890.                                 {
  891.                                     RemoveDialEntry(Selected);
  892.  
  893.                                     if(!(--Count))
  894.                                     {
  895.                                         GT_SetGadgetAttrs(GadgetArray[GAD_CLEARLIST],PanelWindow,NULL,
  896.                                             GA_Disabled,    TRUE,
  897.                                         TAG_DONE);
  898.                                     }
  899.                                 }
  900.  
  901.                                 GT_SetGadgetAttrs(GadgetArray[GAD_NAMELIST],PanelWindow,NULL,
  902.                                     GTLV_Labels,    PhoneList,
  903.                                 TAG_DONE);
  904.                             }
  905.                         }
  906.                         else
  907.                         {
  908.                             KeySelect(GadgetArray,GAD_PRINT,Code,PanelWindow,&Gadget,&IClass,&Code);
  909.  
  910.                             if(IClass == IDCMP_GADGETUP)
  911.                                 Qualifier = NULL;
  912.                         }
  913.                     }
  914.  
  915.                     if(IClass == IDCMP_GADGETDOWN)
  916.                     {
  917.                         if((Gadget -> GadgetType & GTYP_GTYPEMASK) == GTYP_STRGADGET)
  918.                             ActiveGadget = Gadget;
  919.                     }
  920.  
  921.                     if(IClass == IDCMP_ACTIVEWINDOW && ActiveGadget)
  922.                         ActivateGadget(ActiveGadget,PanelWindow,NULL);
  923.  
  924.                     if(IClass == IDCMP_CLOSEWINDOW)
  925.                     {
  926.                         FreeDialList(TRUE);
  927.  
  928.                         Terminated = TRUE;
  929.                     }
  930.  
  931.                     if(IClass == IDCMP_GADGETUP)
  932.                     {
  933.                         switch(Gadget -> GadgetID)
  934.                         {
  935.                             case GAD_NAMELIST:
  936.  
  937.                                 if(HitItem != Code)
  938.                                 {
  939.                                     HitItem = Code;
  940.  
  941.                                     CurrentTime(&Sec1,&Mic1);
  942.  
  943.                                     if(Phonebook[Code] -> Header -> Number[0] && Phonebook[Code] -> Header -> Name[0])
  944.                                     {
  945.                                         if(Qualifier & (IEQUALIFIER_LSHIFT|IEQUALIFIER_RSHIFT))
  946.                                             ClickAction = CLICK_TOGGLE;
  947.                                         else
  948.                                             ClickAction = CLICK_SELECT;
  949.                                     }
  950.                                     else
  951.                                         ClickAction = CLICK_SELECT;
  952.                                 }
  953.                                 else
  954.                                 {
  955.                                     if(Phonebook[Code] -> Header -> Number[0] && Phonebook[Code] -> Header -> Name[0])
  956.                                     {
  957.                                         if(Qualifier & (IEQUALIFIER_LSHIFT|IEQUALIFIER_RSHIFT))
  958.                                         {
  959.                                             CurrentTime(&Sec1,&Mic1);
  960.  
  961.                                             ClickAction = CLICK_TOGGLE;
  962.                                         }
  963.                                         else
  964.                                         {
  965.                                             CurrentTime(&Sec2,&Mic2);
  966.  
  967.                                             if(DoubleClick(Sec1,Mic1,Sec2,Mic2))
  968.                                                 ClickAction = CLICK_DIAL;
  969.                                             else
  970.                                                 ClickAction = CLICK_NONE;
  971.  
  972.                                             Sec1 = Sec2;
  973.                                             Mic1 = Mic2;
  974.                                         }
  975.                                     }
  976.                                     else
  977.                                     {
  978.                                         CurrentTime(&Sec1,&Mic1);
  979.  
  980.                                         ClickAction = CLICK_NONE;
  981.                                     }
  982.                                 }
  983.  
  984.                                 if(ClickAction == CLICK_SELECT || ClickAction == CLICK_TOGGLE)
  985.                                 {
  986.                                     GT_SetGadgetAttrs(GadgetArray[GAD_NAME],PanelWindow,NULL,
  987.                                         GTST_String,    Phonebook[Code] -> Header -> Name,
  988.                                         GA_Disabled,    FALSE,
  989.                                     TAG_DONE);
  990.  
  991.                                     GT_SetGadgetAttrs(GadgetArray[GAD_COMMENT],PanelWindow,NULL,
  992.                                         GTST_String,    Phonebook[Code] -> Header -> Comment,
  993.                                         GA_Disabled,    FALSE,
  994.                                     TAG_DONE);
  995.  
  996.                                     GT_SetGadgetAttrs(GadgetArray[GAD_PHONENUMBER],PanelWindow,NULL,
  997.                                         GTST_String,    Phonebook[Code] -> Header -> Number,
  998.                                         GA_Disabled,    FALSE,
  999.                                     TAG_DONE);
  1000.  
  1001.                                     GT_SetGadgetAttrs(GadgetArray[GAD_QUICKMENU],PanelWindow,NULL,
  1002.                                         GTCB_Checked,    Phonebook[Code] -> Header -> QuickMenu,
  1003.                                         GA_Disabled,    FALSE,
  1004.                                     TAG_DONE);
  1005.  
  1006.                                     GT_SetGadgetAttrs(GadgetArray[GAD_USEIT],PanelWindow,NULL,
  1007.                                         GA_Disabled,    FALSE,
  1008.                                     TAG_DONE);
  1009.  
  1010.                                     GT_SetGadgetAttrs(GadgetArray[GAD_REMOVEENTRY],PanelWindow,NULL,
  1011.                                         GA_Disabled,    (Phonebook[Code] == ChosenEntry && Online),
  1012.                                     TAG_DONE);
  1013.  
  1014.                                     GT_SetGadgetAttrs(GadgetArray[GAD_CLONEENTRY],PanelWindow,NULL,
  1015.                                         GA_Disabled,    FALSE,
  1016.                                     TAG_DONE);
  1017.  
  1018.                                     GT_SetGadgetAttrs(GadgetArray[GAD_DIALLIST],PanelWindow,NULL,
  1019.                                         GA_Disabled,    Online || !(Count || Phonebook[Code] -> Header -> Number[0] && Phonebook[Code] -> Header -> Name[0]),
  1020.                                     TAG_DONE);
  1021.  
  1022.                                     if(Kick30)
  1023.                                     {
  1024.                                         GT_SetGadgetAttrs(GadgetArray[GAD_EDIT],PanelWindow,NULL,
  1025.                                             GA_Disabled,    FALSE,
  1026.                                         TAG_DONE);
  1027.                                     }
  1028.  
  1029.                                     Selected = Code;
  1030.                                 }
  1031.  
  1032.                                 if(ClickAction == CLICK_DIAL)
  1033.                                 {
  1034.                                     GT_SetGadgetAttrs(GadgetArray[GAD_NAMELIST],PanelWindow,NULL,
  1035.                                         GTLV_Labels,    ~0,
  1036.                                     TAG_DONE);
  1037.  
  1038.                                     Count = 0;
  1039.  
  1040.                                     for(i = 0 ; i < NumPhoneEntries ; i++)
  1041.                                     {
  1042.                                         SPrintf(Phonebook[i] -> Node -> LocalName,"      %s",Phonebook[i] -> Header -> Name);
  1043.  
  1044.                                         Phonebook[i] -> Count = -1;
  1045.                                     }
  1046.  
  1047.                                     GT_SetGadgetAttrs(GadgetArray[GAD_NAMELIST],PanelWindow,NULL,
  1048.                                         GTLV_Labels,    PhoneList,
  1049.                                     TAG_DONE);
  1050.  
  1051.                                     DialTheList    = TRUE;
  1052.                                     Terminated    = TRUE;
  1053.                                 }
  1054.  
  1055.                                 if(ClickAction == CLICK_TOGGLE || ClickAction == CLICK_DIAL)
  1056.                                 {
  1057.                                     HitItem = -1;
  1058.  
  1059.                                     GT_SetGadgetAttrs(GadgetArray[GAD_NAMELIST],PanelWindow,NULL,
  1060.                                         GTLV_Labels,    ~0,
  1061.                                     TAG_DONE);
  1062.  
  1063.                                     if(Phonebook[Selected] -> Count == -1)
  1064.                                     {
  1065.                                         if(!Count)
  1066.                                         {
  1067.                                             GT_SetGadgetAttrs(GadgetArray[GAD_CLEARLIST],PanelWindow,NULL,
  1068.                                                 GA_Disabled,    FALSE,
  1069.                                             TAG_DONE);
  1070.                                         }
  1071.  
  1072.                                         Phonebook[Selected] -> Count = Count++;
  1073.  
  1074.                                         SPrintf(Phonebook[Selected] -> Node -> LocalName,"%3ld - %s",Count,Phonebook[Selected] -> Header -> Name);
  1075.                                     }
  1076.                                     else
  1077.                                     {
  1078.                                         RemoveDialEntry(Selected);
  1079.  
  1080.                                         if(!(--Count))
  1081.                                         {
  1082.                                             GT_SetGadgetAttrs(GadgetArray[GAD_CLEARLIST],PanelWindow,NULL,
  1083.                                                 GA_Disabled,    TRUE,
  1084.                                             TAG_DONE);
  1085.                                         }
  1086.                                     }
  1087.  
  1088.                                     GT_SetGadgetAttrs(GadgetArray[GAD_NAMELIST],PanelWindow,NULL,
  1089.                                         GTLV_Labels,    PhoneList,
  1090.                                     TAG_DONE);
  1091.                                 }
  1092.  
  1093.                                 break;
  1094.  
  1095.                             case GAD_CLEARLIST:
  1096.  
  1097.                                 GT_SetGadgetAttrs(GadgetArray[GAD_NAMELIST],PanelWindow,NULL,
  1098.                                     GTLV_Labels,    ~0,
  1099.                                 TAG_DONE);
  1100.  
  1101.                                 Count = 0;
  1102.  
  1103.                                 for(i = 0 ; i < NumPhoneEntries ; i++)
  1104.                                 {
  1105.                                     SPrintf(Phonebook[i] -> Node -> LocalName,"      %s",Phonebook[i] -> Header -> Name);
  1106.  
  1107.                                     Phonebook[i] -> Count = -1;
  1108.                                 }
  1109.  
  1110.                                 GT_SetGadgetAttrs(GadgetArray[GAD_NAMELIST],PanelWindow,NULL,
  1111.                                     GTLV_Labels,    PhoneList,
  1112.                                 TAG_DONE);
  1113.  
  1114.                                 if(Selected == ~0)
  1115.                                 {
  1116.                                     GT_SetGadgetAttrs(GadgetArray[GAD_DIALLIST],PanelWindow,NULL,
  1117.                                         GA_Disabled,    TRUE,
  1118.                                     TAG_DONE);
  1119.                                 }
  1120.  
  1121.                                 GT_SetGadgetAttrs(GadgetArray[GAD_CLEARLIST],PanelWindow,NULL,
  1122.                                     GA_Disabled,    TRUE,
  1123.                                 TAG_DONE);
  1124.  
  1125.                                 break;
  1126.  
  1127.                             case GAD_PRINT:
  1128.  
  1129.                                 BlockWindow(PanelWindow);
  1130.  
  1131.                                 PrintPanel(PanelWindow,PhoneList,Count);
  1132.  
  1133.                                 ReleaseWindow(PanelWindow);
  1134.  
  1135.                                 break;
  1136.  
  1137.                             case GAD_USEIT:
  1138.  
  1139.                                 if(Selected != ~0)
  1140.                                 {
  1141.                                     SaveConfig(Config,PrivateConfig);
  1142.  
  1143.                                     SaveConfig(Phonebook[Selected] -> Config,Config);
  1144.  
  1145.                                     strcpy(Password,Phonebook[Selected] -> Header -> Password);
  1146.                                     strcpy(UserName,Phonebook[Selected] -> Header -> UserName);
  1147.  
  1148.                                     ConfigSetup();
  1149.  
  1150.                                     Terminated = TRUE;
  1151.  
  1152.                                     ConfigChanged = FALSE;
  1153.                                 }
  1154.  
  1155.                                 break;
  1156.  
  1157.                             case GAD_NEWENTRY:
  1158.  
  1159.                                 GT_SetGadgetAttrs(GadgetArray[GAD_NAMELIST],PanelWindow,NULL,
  1160.                                     GTLV_Labels,    ~0,
  1161.                                 TAG_DONE);
  1162.  
  1163.                                 if(PhoneList)
  1164.                                 {
  1165.                                     DeletePhoneList(PhoneList);
  1166.  
  1167.                                     PhoneList = NULL;
  1168.                                 }
  1169.  
  1170.                                 if(NewPhoneEntry())
  1171.                                 {
  1172.                                     if(PhoneList = CreatePhoneList())
  1173.                                     {
  1174.                                         Selected = NumPhoneEntries - 1;
  1175.  
  1176.                                         GT_SetGadgetAttrs(GadgetArray[GAD_NAMELIST],PanelWindow,NULL,
  1177.                                             GTLV_Labels,        PhoneList,
  1178.                                             GTLV_Selected,        Selected,
  1179.                                             GTLV_Top,        Selected,
  1180.                                             GTLV_MakeVisible,    Selected,
  1181.                                         TAG_DONE);
  1182.  
  1183.                                         GT_SetGadgetAttrs(GadgetArray[GAD_NAME],PanelWindow,NULL,
  1184.                                             GTST_String,        Phonebook[Selected] -> Header -> Name,
  1185.                                             GA_Disabled,        FALSE,
  1186.                                         TAG_DONE);
  1187.  
  1188.                                         GT_SetGadgetAttrs(GadgetArray[GAD_COMMENT],PanelWindow,NULL,
  1189.                                             GTST_String,    Phonebook[Selected] -> Header -> Comment,
  1190.                                             GA_Disabled,    FALSE,
  1191.                                         TAG_DONE);
  1192.  
  1193.                                         GT_SetGadgetAttrs(GadgetArray[GAD_PHONENUMBER],PanelWindow,NULL,
  1194.                                             GTST_String,    Phonebook[Selected] -> Header -> Number,
  1195.                                             GA_Disabled,    FALSE,
  1196.                                         TAG_DONE);
  1197.  
  1198.                                         GT_SetGadgetAttrs(GadgetArray[GAD_QUICKMENU],PanelWindow,NULL,
  1199.                                             GTCB_Checked,    Phonebook[Selected] -> Header -> QuickMenu,
  1200.                                             GA_Disabled,    FALSE,
  1201.                                         TAG_DONE);
  1202.  
  1203.                                         GT_SetGadgetAttrs(GadgetArray[GAD_USEIT],PanelWindow,NULL,
  1204.                                             GA_Disabled,    FALSE,
  1205.                                         TAG_DONE);
  1206.  
  1207.                                         GT_SetGadgetAttrs(GadgetArray[GAD_REMOVEENTRY],PanelWindow,NULL,
  1208.                                             GA_Disabled,    FALSE,
  1209.                                         TAG_DONE);
  1210.  
  1211.                                         GT_SetGadgetAttrs(GadgetArray[GAD_CLONEENTRY],PanelWindow,NULL,
  1212.                                             GA_Disabled,    FALSE,
  1213.                                         TAG_DONE);
  1214.  
  1215.                                         if(Kick30)
  1216.                                         {
  1217.                                             GT_SetGadgetAttrs(GadgetArray[GAD_EDIT],PanelWindow,NULL,
  1218.                                                 GA_Disabled,    FALSE,
  1219.                                             TAG_DONE);
  1220.                                         }
  1221.  
  1222.                                         if(NumPhoneEntries == 1)
  1223.                                         {
  1224.                                             GT_SetGadgetAttrs(GadgetArray[GAD_SAVELIST],PanelWindow,NULL,
  1225.                                                 GA_Disabled,    FALSE,
  1226.                                             TAG_DONE);
  1227.  
  1228.                                             GT_SetGadgetAttrs(GadgetArray[GAD_PRINT],PanelWindow,NULL,
  1229.                                                 GA_Disabled,    FALSE,
  1230.                                             TAG_DONE);
  1231.  
  1232.                                             GT_SetGadgetAttrs(GadgetArray[GAD_COPYCONFIG],PanelWindow,NULL,
  1233.                                                 GA_Disabled,    FALSE,
  1234.                                             TAG_DONE);
  1235.  
  1236.                                             GT_SetGadgetAttrs(GadgetArray[GAD_PASSWORD],PanelWindow,NULL,
  1237.                                                 GA_Disabled,    FALSE,
  1238.                                             TAG_DONE);
  1239.                                         }
  1240.  
  1241.                                         if(NumPhoneEntries > 1)
  1242.                                         {
  1243.                                             GT_SetGadgetAttrs(GadgetArray[GAD_SORTLIST],PanelWindow,NULL,
  1244.                                                 GA_Disabled,    FALSE,
  1245.                                             TAG_DONE);
  1246.                                         }
  1247.  
  1248.                                         ActivateGadget(GadgetArray[GAD_NAME],PanelWindow,NULL);
  1249.  
  1250.                                         ActiveGadget = GadgetArray[GAD_NAME];
  1251.  
  1252.                                         PhonebookChanged = TRUE;
  1253.                                     }
  1254.                                     else
  1255.                                         goto ClearList;
  1256.                                 }
  1257.                                 else
  1258.                                     goto ClearList;
  1259.  
  1260.                                 break;
  1261.  
  1262.                             case GAD_CLONEENTRY:
  1263.  
  1264.                                 if(Selected != ~0)
  1265.                                 {
  1266.                                     GT_SetGadgetAttrs(GadgetArray[GAD_NAMELIST],PanelWindow,NULL,
  1267.                                         GTLV_Labels,    ~0,
  1268.                                     TAG_DONE);
  1269.  
  1270.                                     if(PhoneList)
  1271.                                     {
  1272.                                         DeletePhoneList(PhoneList);
  1273.  
  1274.                                         PhoneList = NULL;
  1275.                                     }
  1276.  
  1277.                                     if(NewPhoneEntry())
  1278.                                     {
  1279.                                         if(PhoneList = CreatePhoneList())
  1280.                                         {
  1281.                                             LONG Tmp = Selected,i;
  1282.  
  1283.                                             Selected = NumPhoneEntries - 1;
  1284.  
  1285.                                             CopyMem(Phonebook[Tmp] -> Header,Phonebook[Selected] -> Header,sizeof(struct PhoneHeader));
  1286.  
  1287.                                             Phonebook[Selected] -> Header -> QuickMenu = FALSE;
  1288.  
  1289.                                             SPrintf(Phonebook[Selected] -> Node -> LocalName,"      %s",Phonebook[Selected] -> Header -> Name);
  1290.  
  1291.                                             GT_SetGadgetAttrs(GadgetArray[GAD_NAMELIST],PanelWindow,NULL,
  1292.                                                 GTLV_Labels,        PhoneList,
  1293.                                                 GTLV_Selected,        Selected,
  1294.                                                 GTLV_Top,        Selected,
  1295.                                                 GTLV_MakeVisible,    Selected,
  1296.                                             TAG_DONE);
  1297.  
  1298.                                             GT_SetGadgetAttrs(GadgetArray[GAD_NAME],PanelWindow,NULL,
  1299.                                                 GTST_String,    Phonebook[Selected] -> Header -> Name,
  1300.                                             TAG_DONE);
  1301.  
  1302.                                             GT_SetGadgetAttrs(GadgetArray[GAD_COMMENT],PanelWindow,NULL,
  1303.                                                 GTST_String,    Phonebook[Selected] -> Header -> Comment,
  1304.                                             TAG_DONE);
  1305.  
  1306.                                             GT_SetGadgetAttrs(GadgetArray[GAD_PHONENUMBER],PanelWindow,NULL,
  1307.                                                 GTST_String,    Phonebook[Selected] -> Header -> Number,
  1308.                                             TAG_DONE);
  1309.  
  1310.                                             GT_SetGadgetAttrs(GadgetArray[GAD_QUICKMENU],PanelWindow,NULL,
  1311.                                                 GTCB_Checked,    Phonebook[Selected] -> Header -> QuickMenu,
  1312.                                             TAG_DONE);
  1313.  
  1314.                                             if(NumPhoneEntries > 1)
  1315.                                             {
  1316.                                                 GT_SetGadgetAttrs(GadgetArray[GAD_SORTLIST],PanelWindow,NULL,
  1317.                                                     GA_Disabled,    FALSE,
  1318.                                                 TAG_DONE);
  1319.                                             }
  1320.  
  1321.                                                 /* Allocate space for the config data. */
  1322.  
  1323.                                             for(i = PREF_SERIAL ; i <= PREF_EMULATION ; i++)
  1324.                                             {
  1325.                                                 if(GetConfigEntry(Phonebook[Tmp] -> Config,i))
  1326.                                                     CreateConfigEntry(Phonebook[Selected] -> Config,i);
  1327.                                             }
  1328.  
  1329.                                                 /* Copy the data. */
  1330.  
  1331.                                             SaveConfig(Phonebook[Tmp] -> Config,Phonebook[Selected] -> Config);
  1332.  
  1333.                                             PhonebookChanged = TRUE;
  1334.                                         }
  1335.                                         else
  1336.                                             goto ClearList;
  1337.                                     }
  1338.                                     else
  1339.                                         goto ClearList;
  1340.                                 }
  1341.  
  1342.                                 break;
  1343.  
  1344.                             case GAD_REMOVEENTRY:
  1345.  
  1346.                                 if(Selected != ~0)
  1347.                                 {
  1348.                                     if(Phonebook[Selected] == ChosenEntry)
  1349.                                         MyEasyRequest(Window,LocaleString(MSG_PHONEPANEL_PHONE_ENTRY_IN_USE_TXT),LocaleString(MSG_GLOBAL_CONTINUE_TXT));
  1350.                                     else
  1351.                                     {
  1352.                                         PhonebookChanged = TRUE;
  1353.  
  1354.                                         GT_SetGadgetAttrs(GadgetArray[GAD_NAMELIST],PanelWindow,NULL,
  1355.                                             GTLV_Labels,~0,
  1356.                                         TAG_DONE);
  1357.  
  1358.                                         if(PhoneList)
  1359.                                         {
  1360.                                             DeletePhoneList(PhoneList);
  1361.  
  1362.                                             PhoneList = NULL;
  1363.                                         }
  1364.  
  1365.                                         if(Phonebook[Selected] -> Count != -1)
  1366.                                         {
  1367.                                             RemoveDialEntry(Selected);
  1368.  
  1369.                                             if(!(--Count))
  1370.                                             {
  1371.                                                 GT_SetGadgetAttrs(GadgetArray[GAD_CLEARLIST],PanelWindow,NULL,
  1372.                                                     GA_Disabled,    TRUE,
  1373.                                                 TAG_DONE);
  1374.                                             }
  1375.                                         }
  1376.  
  1377.                                         RemPhoneEntry(Selected);
  1378.  
  1379.                                         if(NumPhoneEntries > 0)
  1380.                                         {
  1381.                                             if(PhoneList = CreatePhoneList())
  1382.                                             {
  1383.                                                 if(Selected == NumPhoneEntries)
  1384.                                                     Selected--;
  1385.  
  1386.                                                 GT_SetGadgetAttrs(GadgetArray[GAD_NAMELIST],PanelWindow,NULL,
  1387.                                                     GTLV_Labels,    PhoneList,
  1388.                                                     GTLV_Selected,    Selected,
  1389.                                                 TAG_DONE);
  1390.  
  1391.                                                 GT_SetGadgetAttrs(GadgetArray[GAD_NAME],PanelWindow,NULL,
  1392.                                                     GTST_String,    Phonebook[Selected] -> Header -> Name,
  1393.                                                 TAG_DONE);
  1394.  
  1395.                                                 GT_SetGadgetAttrs(GadgetArray[GAD_COMMENT],PanelWindow,NULL,
  1396.                                                     GTST_String,    Phonebook[Selected] -> Header -> Comment,
  1397.                                                 TAG_DONE);
  1398.  
  1399.                                                 GT_SetGadgetAttrs(GadgetArray[GAD_PHONENUMBER],PanelWindow,NULL,
  1400.                                                     GTST_String,    Phonebook[Selected] -> Header -> Number,
  1401.                                                 TAG_DONE);
  1402.  
  1403.                                                 GT_SetGadgetAttrs(GadgetArray[GAD_QUICKMENU],PanelWindow,NULL,
  1404.                                                     GTCB_Checked,    Phonebook[Selected] -> Header -> QuickMenu,
  1405.                                                 TAG_DONE);
  1406.                                             }
  1407.                                             else
  1408.                                                 goto ClearList;
  1409.  
  1410.                                             if(NumPhoneEntries == 1)
  1411.                                             {
  1412.                                                 GT_SetGadgetAttrs(GadgetArray[GAD_SORTLIST],PanelWindow,NULL,
  1413.                                                     GA_Disabled,    TRUE,
  1414.                                                 TAG_DONE);
  1415.                                             }
  1416.                                         }
  1417.                                         else
  1418.                                         {
  1419. ClearList:                                        GT_SetGadgetAttrs(GadgetArray[GAD_NAMELIST],PanelWindow,NULL,
  1420.                                                 GTLV_Labels,    &EmptyList,
  1421.                                             TAG_DONE);
  1422.  
  1423.                                             GT_SetGadgetAttrs(GadgetArray[GAD_NAME],PanelWindow,NULL,
  1424.                                                 GTST_String,    "",
  1425.                                                 GA_Disabled,    TRUE,
  1426.                                             TAG_DONE);
  1427.  
  1428.                                             GT_SetGadgetAttrs(GadgetArray[GAD_COMMENT],PanelWindow,NULL,
  1429.                                                 GTST_String,    "",
  1430.                                                 GA_Disabled,    TRUE,
  1431.                                             TAG_DONE);
  1432.  
  1433.                                             GT_SetGadgetAttrs(GadgetArray[GAD_PHONENUMBER],PanelWindow,NULL,
  1434.                                                 GTST_String,    "",
  1435.                                                 GA_Disabled,    TRUE,
  1436.                                             TAG_DONE);
  1437.  
  1438.                                             GT_SetGadgetAttrs(GadgetArray[GAD_QUICKMENU],PanelWindow,NULL,
  1439.                                                 GA_Disabled,    TRUE,
  1440.                                             TAG_DONE);
  1441.  
  1442.                                             GT_SetGadgetAttrs(GadgetArray[GAD_USEIT],PanelWindow,NULL,
  1443.                                                 GA_Disabled,    TRUE,
  1444.                                             TAG_DONE);
  1445.  
  1446.                                             GT_SetGadgetAttrs(GadgetArray[GAD_REMOVEENTRY],PanelWindow,NULL,
  1447.                                                 GA_Disabled,    TRUE,
  1448.                                             TAG_DONE);
  1449.  
  1450.                                             GT_SetGadgetAttrs(GadgetArray[GAD_CLONEENTRY],PanelWindow,NULL,
  1451.                                                 GA_Disabled,    TRUE,
  1452.                                             TAG_DONE);
  1453.  
  1454.                                             GT_SetGadgetAttrs(GadgetArray[GAD_SAVELIST],PanelWindow,NULL,
  1455.                                                 GA_Disabled,    TRUE,
  1456.                                             TAG_DONE);
  1457.  
  1458.                                             GT_SetGadgetAttrs(GadgetArray[GAD_PRINT],PanelWindow,NULL,
  1459.                                                 GA_Disabled,    TRUE,
  1460.                                             TAG_DONE);
  1461.  
  1462.                                             GT_SetGadgetAttrs(GadgetArray[GAD_COPYCONFIG],PanelWindow,NULL,
  1463.                                                 GA_Disabled,    TRUE,
  1464.                                             TAG_DONE);
  1465.  
  1466.                                             GT_SetGadgetAttrs(GadgetArray[GAD_PASSWORD],PanelWindow,NULL,
  1467.                                                 GA_Disabled,    TRUE,
  1468.                                             TAG_DONE);
  1469.  
  1470.                                             GT_SetGadgetAttrs(GadgetArray[GAD_SORTLIST],PanelWindow,NULL,
  1471.                                                 GA_Disabled,    TRUE,
  1472.                                             TAG_DONE);
  1473.  
  1474.                                             GT_SetGadgetAttrs(GadgetArray[GAD_DIALLIST],PanelWindow,NULL,
  1475.                                                 GA_Disabled,    TRUE,
  1476.                                             TAG_DONE);
  1477.  
  1478.                                             if(Kick30)
  1479.                                             {
  1480.                                                 GT_SetGadgetAttrs(GadgetArray[GAD_EDIT],PanelWindow,NULL,
  1481.                                                     GA_Disabled,    TRUE,
  1482.                                                 TAG_DONE);
  1483.                                             }
  1484.  
  1485.                                             ActiveGadget = NULL;
  1486.  
  1487.                                             Selected    = ~0;
  1488.                                             HitItem        = -1;
  1489.                                         }
  1490.                                     }
  1491.                                 }
  1492.  
  1493.                                 break;
  1494.  
  1495.                             case GAD_NAME:
  1496.  
  1497.                                 if(Selected != ~0)
  1498.                                 {
  1499.                                     strcpy(Phonebook[Selected] -> Header -> Name,SZ_GetString(GadgetArray[GAD_NAME]));
  1500.  
  1501.                                     GT_SetGadgetAttrs(GadgetArray[GAD_NAMELIST],PanelWindow,NULL,
  1502.                                         GTLV_Labels,~0,
  1503.                                     TAG_DONE);
  1504.  
  1505.                                     if(PhoneList)
  1506.                                         DeletePhoneList(PhoneList);
  1507.  
  1508.                                     if(PhoneList = CreatePhoneList())
  1509.                                     {
  1510.                                         GT_SetGadgetAttrs(GadgetArray[GAD_NAMELIST],PanelWindow,NULL,
  1511.                                             GTLV_Labels,        PhoneList,
  1512.                                             GTLV_Selected,        Selected,
  1513.                                             GTLV_Top,        Selected,
  1514.                                             GTLV_MakeVisible,    Selected,
  1515.                                         TAG_DONE);
  1516.                                     }
  1517.  
  1518.                                     if(!Phonebook[Selected] -> Header -> Name[0])
  1519.                                     {
  1520.                                         GT_SetGadgetAttrs(GadgetArray[GAD_NAMELIST],PanelWindow,NULL,
  1521.                                             GTLV_Labels,    ~0,
  1522.                                         TAG_DONE);
  1523.  
  1524.                                         if(Phonebook[Selected] -> Count != -1)
  1525.                                         {
  1526.                                             RemoveDialEntry(Selected);
  1527.  
  1528.                                             if(!(--Count))
  1529.                                             {
  1530.                                                 GT_SetGadgetAttrs(GadgetArray[GAD_CLEARLIST],PanelWindow,NULL,
  1531.                                                     GA_Disabled,    TRUE,
  1532.                                                 TAG_DONE);
  1533.                                             }
  1534.                                         }
  1535.  
  1536.                                         GT_SetGadgetAttrs(GadgetArray[GAD_NAMELIST],PanelWindow,NULL,
  1537.                                             GTLV_Labels,        PhoneList,
  1538.                                             GTLV_Selected,        Selected,
  1539.                                             GTLV_Top,        Selected,
  1540.                                             GTLV_MakeVisible,    Selected,
  1541.                                         TAG_DONE);
  1542.                                     }
  1543.                                     else
  1544.                                     {
  1545.                                         GT_SetGadgetAttrs(GadgetArray[GAD_DIALLIST],PanelWindow,NULL,
  1546.                                             GA_Disabled,    Online || !Phonebook[Selected] -> Header -> Number[0] || !Phonebook[Selected] -> Header -> Name[0],
  1547.                                         TAG_DONE);
  1548.                                     }
  1549.  
  1550.                                     PhonebookChanged = TRUE;
  1551.                                 }
  1552.  
  1553.                                 ActivateGadget(ActiveGadget = GadgetArray[GAD_COMMENT],PanelWindow,NULL);
  1554.  
  1555.                                 break;
  1556.  
  1557.                             case GAD_COMMENT:
  1558.  
  1559.                                 if(Selected != ~0)
  1560.                                 {
  1561.                                     strcpy(Phonebook[Selected] -> Header -> Comment,SZ_GetString(GadgetArray[GAD_COMMENT]));
  1562.  
  1563.                                     PhonebookChanged = TRUE;
  1564.                                 }
  1565.  
  1566.                                 ActivateGadget(ActiveGadget = GadgetArray[GAD_PHONENUMBER],PanelWindow,NULL);
  1567.  
  1568.                                 break;
  1569.  
  1570.                             case GAD_QUICKMENU:
  1571.  
  1572.                                 if(Selected != ~0)
  1573.                                 {
  1574.                                     if(Phonebook[Selected] -> Header -> QuickMenu != SZ_GetChecked(Gadget))
  1575.                                     {
  1576.                                         Phonebook[Selected] -> Header -> QuickMenu = SZ_GetChecked(Gadget);
  1577.  
  1578.                                         PhonebookChanged = TRUE;
  1579.                                     }
  1580.                                 }
  1581.  
  1582.                                 break;
  1583.  
  1584.                             case GAD_PHONENUMBER:
  1585.  
  1586.                                 if(Selected != ~0)
  1587.                                 {
  1588.                                     strcpy(Phonebook[Selected] -> Header -> Number,SZ_GetString(GadgetArray[GAD_PHONENUMBER]));
  1589.  
  1590.                                     PhonebookChanged = TRUE;
  1591.  
  1592.                                     if(!Phonebook[Selected] -> Header -> Number[0])
  1593.                                     {
  1594.                                         GT_SetGadgetAttrs(GadgetArray[GAD_NAMELIST],PanelWindow,NULL,
  1595.                                             GTLV_Labels,    ~0,
  1596.                                         TAG_DONE);
  1597.  
  1598.                                         if(Phonebook[Selected] -> Count != -1)
  1599.                                         {
  1600.                                             RemoveDialEntry(Selected);
  1601.  
  1602.                                             if(!(--Count))
  1603.                                             {
  1604.                                                 GT_SetGadgetAttrs(GadgetArray[GAD_CLEARLIST],PanelWindow,NULL,
  1605.                                                     GA_Disabled,    TRUE,
  1606.                                                 TAG_DONE);
  1607.                                             }
  1608.                                         }
  1609.  
  1610.                                         GT_SetGadgetAttrs(GadgetArray[GAD_NAMELIST],PanelWindow,NULL,
  1611.                                             GTLV_Labels,        PhoneList,
  1612.                                             GTLV_Selected,        Selected,
  1613.                                             GTLV_Top,        Selected,
  1614.                                             GTLV_MakeVisible,    Selected,
  1615.                                         TAG_DONE);
  1616.                                     }
  1617.                                     else
  1618.                                     {
  1619.                                         GT_SetGadgetAttrs(GadgetArray[GAD_DIALLIST],PanelWindow,NULL,
  1620.                                             GA_Disabled,    Online || !Phonebook[Selected] -> Header -> Number[0] || !Phonebook[Selected] -> Header -> Name[0],
  1621.                                         TAG_DONE);
  1622.                                     }
  1623.                                 }
  1624.  
  1625.                                 break;
  1626.  
  1627.                             case GAD_LOADLIST:
  1628.  
  1629.                                 BlockWindow(PanelWindow);
  1630.  
  1631.                                 if(ChosenEntry)
  1632.                                     MyEasyRequest(Window,LocaleString(MSG_PHONEPANEL_PHONE_ENTRY_IN_USE_LOAD_TXT),LocaleString(MSG_GLOBAL_CONTINUE_TXT));
  1633.                                 else
  1634.                                 {
  1635.                                     strcpy(DummyBuffer,LastPhone);
  1636.  
  1637.                                     DummyChar = PathPart(DummyBuffer);
  1638.  
  1639.                                     *DummyChar = 0;
  1640.  
  1641.                                     if(FileRequest = GetFile(LocaleString(MSG_PHONEPANEL_LOAD_PHONEBOOK_TXT),DummyBuffer,FilePart(LastPhone),DummyBuffer,"#?.prefs",FALSE,FALSE,FALSE,LocaleString(MSG_GLOBAL_LOAD_TXT),TRUE))
  1642.                                     {
  1643.                                         if(PhoneList)
  1644.                                             DeletePhoneList(PhoneList);
  1645.  
  1646.                                         if(!LoadPhonebook(DummyBuffer))
  1647.                                             MyEasyRequest(Window,LocaleString(MSG_PHONEPANEL_COULD_NOT_LOAD_PHONEBOOK_TXT),LocaleString(MSG_GLOBAL_CONTINUE_TXT),DummyBuffer);
  1648.                                         else
  1649.                                         {
  1650.                                             strcpy(LastPhone,DummyBuffer);
  1651.  
  1652.                                             PhonebookChanged = FALSE;
  1653.  
  1654.                                             RebuildMenu = TRUE;
  1655.                                         }
  1656.  
  1657.                                         if(PhoneList = CreatePhoneList())
  1658.                                         {
  1659.                                             GT_SetGadgetAttrs(GadgetArray[GAD_NAMELIST],PanelWindow,NULL,
  1660.                                                 GTLV_Labels,    PhoneList,
  1661.                                             TAG_DONE);
  1662.  
  1663.                                             FreeDialList(TRUE);
  1664.                                         }
  1665.  
  1666.                                         Count = 0;
  1667.  
  1668.                                         GT_SetGadgetAttrs(GadgetArray[GAD_NAME],PanelWindow,NULL,
  1669.                                             GTST_String,    "",
  1670.                                             GA_Disabled,    TRUE,
  1671.                                         TAG_DONE);
  1672.  
  1673.                                         GT_SetGadgetAttrs(GadgetArray[GAD_COMMENT],PanelWindow,NULL,
  1674.                                             GTST_String,    "",
  1675.                                             GA_Disabled,    TRUE,
  1676.                                         TAG_DONE);
  1677.  
  1678.                                         GT_SetGadgetAttrs(GadgetArray[GAD_PHONENUMBER],PanelWindow,NULL,
  1679.                                             GTST_String,    "",
  1680.                                             GA_Disabled,    TRUE,
  1681.                                         TAG_DONE);
  1682.  
  1683.                                         GT_SetGadgetAttrs(GadgetArray[GAD_QUICKMENU],PanelWindow,NULL,
  1684.                                             GA_Disabled,    TRUE,
  1685.                                         TAG_DONE);
  1686.  
  1687.                                         GT_SetGadgetAttrs(GadgetArray[GAD_USEIT],PanelWindow,NULL,
  1688.                                             GA_Disabled,    TRUE,
  1689.                                         TAG_DONE);
  1690.  
  1691.                                         GT_SetGadgetAttrs(GadgetArray[GAD_REMOVEENTRY],PanelWindow,NULL,
  1692.                                             GA_Disabled,    TRUE,
  1693.                                         TAG_DONE);
  1694.  
  1695.                                         GT_SetGadgetAttrs(GadgetArray[GAD_CLONEENTRY],PanelWindow,NULL,
  1696.                                             GA_Disabled,    TRUE,
  1697.                                         TAG_DONE);
  1698.  
  1699.                                         GT_SetGadgetAttrs(GadgetArray[GAD_DIALLIST],PanelWindow,NULL,
  1700.                                             GA_Disabled,    TRUE,
  1701.                                         TAG_DONE);
  1702.  
  1703.                                         GT_SetGadgetAttrs(GadgetArray[GAD_CLEARLIST],PanelWindow,NULL,
  1704.                                             GA_Disabled,    TRUE,
  1705.                                         TAG_DONE);
  1706.  
  1707.                                         if(Kick30)
  1708.                                         {
  1709.                                             GT_SetGadgetAttrs(GadgetArray[GAD_EDIT],PanelWindow,NULL,
  1710.                                                 GA_Disabled,    TRUE,
  1711.                                             TAG_DONE);
  1712.                                         }
  1713.  
  1714.                                         ActiveGadget = NULL;
  1715.  
  1716.                                         if(PhoneList)
  1717.                                         {
  1718.                                             if(!PhoneList -> lh_Head -> ln_Succ)
  1719.                                             {
  1720.                                                 GT_SetGadgetAttrs(GadgetArray[GAD_SAVELIST],PanelWindow,NULL,
  1721.                                                     GA_Disabled,    TRUE,
  1722.                                                 TAG_DONE);
  1723.  
  1724.                                                 GT_SetGadgetAttrs(GadgetArray[GAD_PRINT],PanelWindow,NULL,
  1725.                                                     GA_Disabled,    TRUE,
  1726.                                                 TAG_DONE);
  1727.  
  1728.                                                 GT_SetGadgetAttrs(GadgetArray[GAD_COPYCONFIG],PanelWindow,NULL,
  1729.                                                     GA_Disabled,    TRUE,
  1730.                                                 TAG_DONE);
  1731.  
  1732.                                                 GT_SetGadgetAttrs(GadgetArray[GAD_PASSWORD],PanelWindow,NULL,
  1733.                                                     GA_Disabled,    TRUE,
  1734.                                                 TAG_DONE);
  1735.  
  1736.                                                 GT_SetGadgetAttrs(GadgetArray[GAD_SORTLIST],PanelWindow,NULL,
  1737.                                                     GA_Disabled,    TRUE,
  1738.                                                 TAG_DONE);
  1739.                                             }
  1740.                                             else
  1741.                                             {
  1742.                                                 GT_SetGadgetAttrs(GadgetArray[GAD_SAVELIST],PanelWindow,NULL,
  1743.                                                     GA_Disabled,    FALSE,
  1744.                                                 TAG_DONE);
  1745.  
  1746.                                                 GT_SetGadgetAttrs(GadgetArray[GAD_PRINT],PanelWindow,NULL,
  1747.                                                     GA_Disabled,    FALSE,
  1748.                                                 TAG_DONE);
  1749.  
  1750.                                                 GT_SetGadgetAttrs(GadgetArray[GAD_COPYCONFIG],PanelWindow,NULL,
  1751.                                                     GA_Disabled,    FALSE,
  1752.                                                 TAG_DONE);
  1753.  
  1754.                                                 GT_SetGadgetAttrs(GadgetArray[GAD_PASSWORD],PanelWindow,NULL,
  1755.                                                     GA_Disabled,    FALSE,
  1756.                                                 TAG_DONE);
  1757.  
  1758.                                                 if(PhoneList -> lh_Head -> ln_Succ -> ln_Succ)
  1759.                                                 {
  1760.                                                     GT_SetGadgetAttrs(GadgetArray[GAD_SORTLIST],PanelWindow,NULL,
  1761.                                                         GA_Disabled,    FALSE,
  1762.                                                     TAG_DONE);
  1763.                                                 }
  1764.                                                 else
  1765.                                                 {
  1766.                                                     GT_SetGadgetAttrs(GadgetArray[GAD_SORTLIST],PanelWindow,NULL,
  1767.                                                         GA_Disabled,    TRUE,
  1768.                                                     TAG_DONE);
  1769.                                                 }
  1770.                                             }
  1771.                                         }
  1772.  
  1773.                                         Selected    = ~0;
  1774.                                         HitItem        = -1;
  1775.  
  1776.                                         FreeAslRequest(FileRequest);
  1777.                                     }
  1778.                                 }
  1779.  
  1780.                                 ReleaseWindow(PanelWindow);
  1781.  
  1782.                                 break;
  1783.  
  1784.                             case GAD_SORTLIST:
  1785.  
  1786.                                 if(NumPhoneEntries > 1)
  1787.                                 {
  1788.                                     PhonebookChanged = TRUE;
  1789.  
  1790.                                     BlockWindow(PanelWindow);
  1791.  
  1792.                                     GT_SetGadgetAttrs(GadgetArray[GAD_NAMELIST],PanelWindow,NULL,
  1793.                                         GTLV_Labels,    ~0,
  1794.                                     TAG_DONE);
  1795.  
  1796.                                     GT_SetGadgetAttrs(GadgetArray[GAD_NAME],PanelWindow,NULL,
  1797.                                         GTST_String,    "",
  1798.                                         GA_Disabled,    TRUE,
  1799.                                     TAG_DONE);
  1800.  
  1801.                                     GT_SetGadgetAttrs(GadgetArray[GAD_COMMENT],PanelWindow,NULL,
  1802.                                         GTST_String,    "",
  1803.                                         GA_Disabled,    TRUE,
  1804.                                     TAG_DONE);
  1805.  
  1806.                                     GT_SetGadgetAttrs(GadgetArray[GAD_PHONENUMBER],PanelWindow,NULL,
  1807.                                         GTST_String,    "",
  1808.                                         GA_Disabled,    TRUE,
  1809.                                     TAG_DONE);
  1810.  
  1811.                                     GT_SetGadgetAttrs(GadgetArray[GAD_USEIT],PanelWindow,NULL,
  1812.                                         GA_Disabled,    TRUE,
  1813.                                     TAG_DONE);
  1814.  
  1815.                                     GT_SetGadgetAttrs(GadgetArray[GAD_REMOVEENTRY],PanelWindow,NULL,
  1816.                                         GA_Disabled,    TRUE,
  1817.                                     TAG_DONE);
  1818.  
  1819.                                     GT_SetGadgetAttrs(GadgetArray[GAD_CLONEENTRY],PanelWindow,NULL,
  1820.                                         GA_Disabled,    TRUE,
  1821.                                     TAG_DONE);
  1822.  
  1823.                                     GT_SetGadgetAttrs(GadgetArray[GAD_DIALLIST],PanelWindow,NULL,
  1824.                                         GA_Disabled,    TRUE,
  1825.                                     TAG_DONE);
  1826.  
  1827.                                     if(Kick30)
  1828.                                     {
  1829.                                         GT_SetGadgetAttrs(GadgetArray[GAD_EDIT],PanelWindow,NULL,
  1830.                                             GA_Disabled,    TRUE,
  1831.                                         TAG_DONE);
  1832.                                     }
  1833.  
  1834.                                     ActiveGadget = NULL;
  1835.  
  1836.                                     if(PhoneList)
  1837.                                         DeletePhoneList(PhoneList);
  1838.  
  1839.                                     SortPhoneEntries();
  1840.  
  1841.                                     if(PhoneList = CreatePhoneList())
  1842.                                     {
  1843.                                         GT_SetGadgetAttrs(GadgetArray[GAD_NAMELIST],PanelWindow,NULL,
  1844.                                             GTLV_Labels,    PhoneList,
  1845.                                             GTLV_Selected,    ~0,
  1846.                                         TAG_DONE);
  1847.                                     }
  1848.  
  1849.                                     Selected    = ~0;
  1850.                                     HitItem        = -1;
  1851.  
  1852.                                     ReleaseWindow(PanelWindow);
  1853.                                 }
  1854.  
  1855.                                 break;
  1856.  
  1857.                             case GAD_SAVELIST:
  1858.  
  1859.                                 if(NumPhoneEntries)
  1860.                                 {
  1861.                                     strcpy(DummyBuffer,LastPhone);
  1862.  
  1863.                                     DummyChar = PathPart(DummyBuffer);
  1864.  
  1865.                                     *DummyChar = 0;
  1866.  
  1867.                                     BlockWindow(PanelWindow);
  1868.  
  1869.                                     if(FileRequest = GetFile(LocaleString(MSG_PHONEPANEL_SAVE_PHONEBOOK_TXT),DummyBuffer,FilePart(LastPhone),DummyBuffer,"#?.prefs",TRUE,FALSE,FALSE,LocaleString(MSG_GLOBAL_SAVE_TXT),TRUE))
  1870.                                     {
  1871.                                         if(!SavePhonebook(DummyBuffer))
  1872.                                             MyEasyRequest(Window,LocaleString(MSG_PHONEPANEL_COULD_NOT_CREATE_TXT),LocaleString(MSG_GLOBAL_CONTINUE_TXT),DummyBuffer);
  1873.                                         else
  1874.                                         {
  1875.                                             strcpy(LastPhone,DummyBuffer);
  1876.  
  1877.                                             PhonebookChanged = FALSE;
  1878.                                         }
  1879.  
  1880.                                         FreeAslRequest(FileRequest);
  1881.                                     }
  1882.  
  1883.                                     ReleaseWindow(PanelWindow);
  1884.                                 }
  1885.  
  1886.                                 break;
  1887.  
  1888.                             case GAD_COPYCONFIG:
  1889.  
  1890.                                 BlockWindow(PanelWindow);
  1891.  
  1892.                                 if(Selected == ~0)
  1893.                                     PhonebookChanged |= CopyPanel(NULL,Count > 0);
  1894.                                 else
  1895.                                     PhonebookChanged |= CopyPanel(Phonebook[Selected] -> Config,Count > 0);
  1896.  
  1897.                                 ReleaseWindow(PanelWindow);
  1898.                                 break;
  1899.  
  1900.                             case GAD_PASSWORD:
  1901.  
  1902.                                 BlockWindow(PanelWindow);
  1903.  
  1904.                                 {
  1905.                                     struct Gadget *OldActiveGadget = ActiveGadget;
  1906.                                     UBYTE SomeBuffer[30];
  1907.  
  1908.                                     memset(SomeBuffer,0,21);
  1909.  
  1910.                                     PhonePasswordUsed = FALSE;
  1911.  
  1912.                                     if(GetString(FALSE,TRUE,21,LocaleString(MSG_PHONEPANEL_PLEASE_ENTER_PASSWORD_TXT),SomeBuffer))
  1913.                                     {
  1914.                                         SomeBuffer[20] = 0;
  1915.  
  1916.                                         PhonebookChanged = TRUE;
  1917.  
  1918.                                         if(SomeBuffer[0])
  1919.                                         {
  1920.                                             UBYTE OtherBuffer[30];
  1921.  
  1922.                                             memset(OtherBuffer,0,21);
  1923.  
  1924.                                             if(GetString(FALSE,TRUE,21,LocaleString(MSG_PHONEPANEL_PLEASE_REPEAT_PASSWORD_TXT),OtherBuffer))
  1925.                                             {
  1926.                                                 OtherBuffer[20] = 0;
  1927.  
  1928.                                                 if(!memcmp(OtherBuffer,SomeBuffer,20))
  1929.                                                 {
  1930.                                                     Encrypt(OtherBuffer,20,PhonePassword,OtherBuffer,strlen(OtherBuffer));
  1931.  
  1932.                                                     PhonePasswordUsed = TRUE;
  1933.                                                 }
  1934.                                                 else
  1935.                                                     MyEasyRequest(Window,LocaleString(MSG_PHONEPANEL_ERROR_ENTERING_PASSWORD_TXT),LocaleString(MSG_GLOBAL_CONTINUE_TXT));
  1936.                                             }
  1937.                                             else
  1938.                                                 MyEasyRequest(Window,LocaleString(MSG_PHONEPANEL_ERROR_ENTERING_PASSWORD_TXT),LocaleString(MSG_GLOBAL_CONTINUE_TXT));
  1939.                                         }
  1940.                                     }
  1941.  
  1942.                                     ActiveGadget = OldActiveGadget;
  1943.                                 }
  1944.  
  1945.                                 ReleaseWindow(PanelWindow);
  1946.                                 break;
  1947.  
  1948.                             case GAD_EDIT:
  1949.  
  1950.                                 if(Selected != ~0)
  1951.                                 {
  1952.                                     BlockWindow(PanelWindow);
  1953.  
  1954.                                     switch(Code)
  1955.                                     {
  1956.                                         case EDIT_RATES:
  1957.  
  1958.                                             if(Phonebook[Selected] == ChosenEntry)
  1959.                                                 MyEasyRequest(Window,LocaleString(MSG_PHONEPANEL_PHONE_ENTRY_IN_USE_EDIT_TXT),LocaleString(MSG_GLOBAL_CONTINUE_TXT),DummyBuffer);
  1960.                                             else
  1961.                                             {
  1962.                                                 GT_SetGadgetAttrs(GadgetArray[GAD_NAMELIST],PanelWindow,NULL,
  1963.                                                     GTLV_Labels,    ~0,
  1964.                                                 TAG_DONE);
  1965.  
  1966.                                                 PhonebookChanged |= RatePanel(PhoneList,Phonebook[Selected]);
  1967.  
  1968.                                                 GT_SetGadgetAttrs(GadgetArray[GAD_NAMELIST],PanelWindow,NULL,
  1969.                                                     GTLV_Labels,    PhoneList,
  1970.                                                     GTLV_Selected,    Selected,
  1971.                                                 TAG_DONE);
  1972.                                             }
  1973.  
  1974.                                             break;
  1975.  
  1976.                                         case EDIT_PASSWORD:
  1977.  
  1978.                                             PhonebookChanged |= PasswordUserPanel(Phonebook[Selected]);
  1979.                                             break;
  1980.  
  1981.                                         default:
  1982.  
  1983.                                             PhonebookChanged |= EditConfig(Phonebook[Selected] -> Config,Code,PanelWindow);
  1984.                                             break;
  1985.                                     }
  1986.  
  1987.                                     ActiveGadget = GadgetArray[GAD_NAME];
  1988.  
  1989.                                     ReleaseWindow(PanelWindow);
  1990.                                 }
  1991.  
  1992.                                 break;
  1993.  
  1994.                             case GAD_DIALLIST:
  1995.  
  1996.                                 if(!Count && Selected != ~0)
  1997.                                 {
  1998.                                     GT_SetGadgetAttrs(GadgetArray[GAD_NAMELIST],PanelWindow,NULL,
  1999.                                         GTLV_Labels,    ~0,
  2000.                                     TAG_DONE);
  2001.  
  2002.                                     SPrintf(Phonebook[Selected] -> Node -> LocalName,"      %s",Phonebook[Selected] -> Header -> Name);
  2003.  
  2004.                                     Phonebook[Selected] -> Count = Count++;
  2005.  
  2006.                                     GT_SetGadgetAttrs(GadgetArray[GAD_NAMELIST],PanelWindow,NULL,
  2007.                                         GTLV_Labels,    PhoneList,
  2008.                                     TAG_DONE);
  2009.                                 }
  2010.  
  2011.                                 if(Count > 0)
  2012.                                 {
  2013.                                     DialTheList    = TRUE;
  2014.                                     Terminated    = TRUE;
  2015.                                 }
  2016.  
  2017.                                 break;
  2018.                         }
  2019.                     }
  2020.                 }
  2021.             }
  2022.  
  2023.             RemoveGList(PanelWindow,GadgetList,(UWORD)-1);
  2024.  
  2025.             PopWindow();
  2026.  
  2027.             OffsetX = PanelWindow -> LeftEdge;
  2028.             OffsetY = PanelWindow -> TopEdge;
  2029.  
  2030.             CloseWindow(PanelWindow);
  2031.         }
  2032.     }
  2033.  
  2034.     if(PhonebookChanged)
  2035.         RebuildMenu = TRUE;
  2036.  
  2037.     FreeGadgets(GadgetList);
  2038.  
  2039.     FreeDialList(TRUE);
  2040.  
  2041.     if(PhoneList)
  2042.     {
  2043.         if(Count > 0)
  2044.         {
  2045.             TempNode = (struct PhoneNode *)PhoneList -> lh_Head;
  2046.  
  2047.             while(TempNode -> VanillaNode . ln_Succ)
  2048.             {
  2049.                 if(TempNode -> Entry -> Count != -1)
  2050.                     SortToList(TempNode);
  2051.  
  2052.                 TempNode = (struct PhoneNode *)TempNode -> VanillaNode . ln_Succ;
  2053.             }
  2054.  
  2055.             if(!DialList)
  2056.                 DialTheList = FALSE;
  2057.         }
  2058.  
  2059.         DeletePhoneList(PhoneList);
  2060.     }
  2061.  
  2062.     return(DialTheList);
  2063. }
  2064.