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

  1. /*
  2. **    PhonePanel.c
  3. **
  4. **    The phonebook and support routines
  5. **
  6. **    Copyright © 1990-1995 by Olaf `Olsen' Barthel
  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.         GAD_TAG,        GAD_UNTAG,        GAD_TAG_ALL,        GAD_TOGGLE_ALL,
  20.         GAD_CANCEL
  21.     };
  22.  
  23.     /* Editing IDs. */
  24.  
  25. enum    {    EDIT_SERIAL,        EDIT_MODEM,        EDIT_SCREEN,        EDIT_TERMINAL,
  26.         EDIT_EMULATION,        EDIT_CLIPBOARD,        EDIT_CAPTURE,        EDIT_COMMANDS,
  27.         EDIT_MISC,        EDIT_PATHS,        EDIT_TRANSFER,        EDIT_TRANSLATION,
  28.         EDIT_KEYMACROS,        EDIT_CURSORKEYS,
  29.         EDIT_FASTMACROS,    EDIT_PASSWORD,        EDIT_RATES };
  30.  
  31.     /* What action is to follow clicking into the listview. */
  32.  
  33. enum    {    CLICK_NONE,CLICK_SELECT,CLICK_TOGGLE,CLICK_DIAL };
  34.  
  35.     /* Some hints. */
  36.  
  37. STATIC LONG LastSelected,LastNumPhoneEntries;
  38.  
  39.     /* ListViewRender():
  40.      *
  41.      *    This callback routine is responsible for rendering
  42.      *    the single listview entries.
  43.      */
  44.  
  45. STATIC ULONG __saveds __asm
  46. ListViewRender(register __a0 struct Hook *Hook,register __a1 struct LVDrawMsg *Msg,register __a2 struct PhoneNode *Node)
  47. {
  48.         /* We only know how to redraw lines. */
  49.  
  50.     if(Msg -> lvdm_MethodID == LV_DRAW)
  51.     {
  52.         struct RastPort    *RPort    = Msg -> lvdm_RastPort;
  53.         LONG         Count    = Node -> Entry -> Count + 1,
  54.                  Left    = Msg -> lvdm_Bounds . MinX,
  55.                  Top    = Msg -> lvdm_Bounds . MinY,
  56.                  Width    = Msg -> lvdm_Bounds . MaxX - Msg -> lvdm_Bounds . MinX + 1,
  57.                  Height    = Msg -> lvdm_Bounds . MaxY - Msg -> lvdm_Bounds . MinY + 1,
  58.                  FgPen,BgPen,
  59.                  Template,
  60.                  Len,LabelLen;
  61.         UBYTE         String[80],Num[8];
  62.  
  63.             /* Determine the rendering pens. */
  64.  
  65.         switch(Msg -> lvdm_State)
  66.         {
  67.             case LVR_SELECTEDDISABLED:
  68.             case LVR_NORMALDISABLED:
  69.             case LVR_NORMAL:
  70.  
  71.                 FgPen = Msg -> lvdm_DrawInfo -> dri_Pens[TEXTPEN];
  72.                 BgPen = Msg -> lvdm_DrawInfo -> dri_Pens[BACKGROUNDPEN];
  73.                 break;
  74.  
  75.             case LVR_SELECTED:
  76.  
  77.                 FgPen = Msg -> lvdm_DrawInfo -> dri_Pens[FILLTEXTPEN];
  78.                 BgPen = Msg -> lvdm_DrawInfo -> dri_Pens[FILLPEN];
  79.                 break;
  80.         }
  81.  
  82.         if(Count > 0)
  83.         {
  84.             if(Msg -> lvdm_DrawInfo -> dri_Pens[HIGHLIGHTTEXTPEN] != BgPen)
  85.                 FgPen = Msg -> lvdm_DrawInfo -> dri_Pens[HIGHLIGHTTEXTPEN];
  86.         }
  87.  
  88.         SetAPen(RPort,BgPen);
  89.         RectFill(RPort,Left,Top,Left + 1,Top + Height - 1);
  90.  
  91.         Left    += 2;
  92.         Width    -= 2;
  93.  
  94.             /* Determine maximum index text length. */
  95.  
  96.         Template = 3 * ((ULONG)Hook -> h_Data) + TextLength(RPort," - ",3);
  97.  
  98.             /* Get the vanilla name. */
  99.  
  100.         strcpy(String,&Node -> VanillaNode . ln_Name[6]);
  101.  
  102.             /* Set the rendering pens. */
  103.  
  104.         SetDrMd(RPort,JAM2);
  105.         SetBPen(RPort,BgPen);
  106.  
  107.             /* Has this entry been selected? */
  108.  
  109.         if(Count > 0)
  110.         {
  111.             LONG Delta;
  112.  
  113.                 /* Set up the header. */
  114.  
  115.             SPrintf(Num,"%3ld - ",Count);
  116.  
  117.                 /* Determine header length. */
  118.  
  119.             Len = TextLength(RPort,Num,6);
  120.  
  121.                 /* Fill the space to precede the header. */
  122.  
  123.             if((Delta = Template - Len) > 0)
  124.             {
  125.                 SetAPen(RPort,BgPen);
  126.                 RectFill(RPort,Left,Top,Left + Delta - 1,Top + Height - 1);
  127.             }
  128.  
  129.                 /* Render the header, right-justified. */
  130.  
  131.             SetAPen(RPort,FgPen);
  132.  
  133.             Move(RPort,Left + Delta,Top + RPort -> Font -> tf_Baseline);
  134.             Text(RPort,Num,6);
  135.         }
  136.         else
  137.         {
  138.                 /* Fill the blank space to precede the vanilla name. */
  139.  
  140.             SetAPen(RPort,BgPen);
  141.             RectFill(RPort,Left,Top,Left + Template - 1,Top + Height - 1);
  142.             SetAPen(RPort,FgPen);
  143.         }
  144.  
  145.             /* Adjust width and area left edge. */
  146.  
  147.         Left    += Template;
  148.         Width    -= Template;
  149.  
  150.             /* Determine length of vanilla name. */
  151.  
  152.         LabelLen = strlen(String);
  153.  
  154.             /* Try to make it fit. */
  155.  
  156.         while(LabelLen > 0 && (Len = TextLength(RPort,String,LabelLen)) > Width)
  157.             LabelLen--;
  158.  
  159.             /* Print the vanilla name if possible. */
  160.  
  161.         if(LabelLen)
  162.         {
  163.             Move(RPort,Left,Top + RPort -> Font -> tf_Baseline);
  164.             Text(RPort,String,LabelLen);
  165.  
  166.             Left    += Len;
  167.             Width    -= Len;
  168.         }
  169.  
  170.             /* Fill the area to follow the vanilla name. */
  171.  
  172.         if(Width > 0)
  173.         {
  174.             SetAPen(RPort,BgPen);
  175.             RectFill(RPort,Left,Top,Left + Width - 1,Top + Height - 1);
  176.         }
  177.  
  178.             /* If the item happens to be disabled, draw the cross-hatch
  179.              * pattern across it.
  180.              */
  181.  
  182.         if(Msg -> lvdm_State == LVR_SELECTEDDISABLED || Msg -> lvdm_State == LVR_NORMALDISABLED)
  183.         {
  184.             SetDrMd(RPort,JAM1);
  185.  
  186.             SetAPen(RPort,Msg -> lvdm_DrawInfo -> dri_Pens[BLOCKPEN]);
  187.  
  188.             SetAfPt(RPort,(UWORD *)&Ghosting,1);
  189.  
  190.             RectFill(RPort,Msg -> lvdm_Bounds . MinX,Msg -> lvdm_Bounds . MinY,Msg -> lvdm_Bounds . MaxX,Msg -> lvdm_Bounds . MaxY);
  191.  
  192.             SetAfPt(RPort,NULL,0);
  193.         }
  194.  
  195.         return(LVCB_OK);
  196.     }
  197.     else
  198.         return(LVCB_UNKNOWN);
  199. }
  200.  
  201. STATIC ULONG __saveds __asm
  202. EditViewRender(register __a0 struct Hook *Hook,register __a1 struct LVDrawMsg *Msg,register __a2 struct Node *Node)
  203. {
  204.         /* We only know how to redraw lines. */
  205.  
  206.     if(Msg -> lvdm_MethodID == LV_DRAW)
  207.     {
  208.         struct RastPort    *RPort    = Msg -> lvdm_RastPort;
  209.         LONG         Left    = Msg -> lvdm_Bounds . MinX,
  210.                  Top    = Msg -> lvdm_Bounds . MinY,
  211.                  Width    = Msg -> lvdm_Bounds . MaxX - Msg -> lvdm_Bounds . MinX + 1,
  212.                  Height    = Msg -> lvdm_Bounds . MaxY - Msg -> lvdm_Bounds . MinY + 1,
  213.                  FgPen,BgPen,
  214.                  Template,
  215.                  Len,LabelLen;
  216.         STRPTR         String = Node -> ln_Name;
  217.  
  218.             /* Determine the rendering pens. */
  219.  
  220.         switch(Msg -> lvdm_State)
  221.         {
  222.             case LVR_SELECTEDDISABLED:
  223.             case LVR_NORMALDISABLED:
  224.             case LVR_NORMAL:
  225.  
  226.                 FgPen = Msg -> lvdm_DrawInfo -> dri_Pens[TEXTPEN];
  227.                 BgPen = Msg -> lvdm_DrawInfo -> dri_Pens[BACKGROUNDPEN];
  228.                 break;
  229.  
  230.             case LVR_SELECTED:
  231.  
  232.                 FgPen = Msg -> lvdm_DrawInfo -> dri_Pens[FILLTEXTPEN];
  233.                 BgPen = Msg -> lvdm_DrawInfo -> dri_Pens[FILLPEN];
  234.                 break;
  235.         }
  236.  
  237.         SetAPen(RPort,BgPen);
  238.         RectFill(RPort,Left,Top,Left + 1,Top + Height - 1);
  239.  
  240.         Left    += 2;
  241.         Width    -= 2;
  242.  
  243.             /* Determine maximum index text length. */
  244.  
  245.         Template = TextLength(RPort,"*",1);
  246.  
  247.             /* Set the rendering pens. */
  248.  
  249.         SetDrMd(RPort,JAM2);
  250.         SetBPen(RPort,BgPen);
  251.  
  252.             /* Has this entry been selected? */
  253.  
  254.         if(*String == '*')
  255.         {
  256.                 /* Render the header, right-justified. */
  257.  
  258.             SetAPen(RPort,FgPen);
  259.  
  260.             Move(RPort,Left,Top + RPort -> Font -> tf_Baseline);
  261.             Text(RPort,"*",1);
  262.         }
  263.         else
  264.         {
  265.                 /* Fill the blank space to precede the vanilla name. */
  266.  
  267.             SetAPen(RPort,BgPen);
  268.             RectFill(RPort,Left,Top,Left + Template - 1,Top + Height - 1);
  269.             SetAPen(RPort,FgPen);
  270.         }
  271.  
  272.             /* Adjust width and area left edge. */
  273.  
  274.         Left    += Template;
  275.         Width    -= Template;
  276.  
  277.         String++;
  278.  
  279.             /* Determine length of vanilla name. */
  280.  
  281.         LabelLen = strlen(String);
  282.  
  283.             /* Try to make it fit. */
  284.  
  285.         while(LabelLen > 0 && (Len = TextLength(RPort,String,LabelLen)) > Width)
  286.             LabelLen--;
  287.  
  288.             /* Print the vanilla name if possible. */
  289.  
  290.         if(LabelLen)
  291.         {
  292.             Move(RPort,Left,Top + RPort -> Font -> tf_Baseline);
  293.             Text(RPort,String,LabelLen);
  294.  
  295.             Left    += Len;
  296.             Width    -= Len;
  297.         }
  298.  
  299.             /* Fill the area to follow the vanilla name. */
  300.  
  301.         if(Width > 0)
  302.         {
  303.             SetAPen(RPort,BgPen);
  304.             RectFill(RPort,Left,Top,Left + Width - 1,Top + Height - 1);
  305.         }
  306.  
  307.             /* If the item happens to be disabled, draw the cross-hatch
  308.              * pattern across it.
  309.              */
  310.  
  311.         if(Msg -> lvdm_State == LVR_SELECTEDDISABLED || Msg -> lvdm_State == LVR_NORMALDISABLED)
  312.         {
  313.             SetDrMd(RPort,JAM1);
  314.  
  315.             SetAPen(RPort,Msg -> lvdm_DrawInfo -> dri_Pens[BLOCKPEN]);
  316.  
  317.             SetAfPt(RPort,(UWORD *)&Ghosting,1);
  318.  
  319.             RectFill(RPort,Msg -> lvdm_Bounds . MinX,Msg -> lvdm_Bounds . MinY,Msg -> lvdm_Bounds . MaxX,Msg -> lvdm_Bounds . MaxY);
  320.  
  321.             SetAfPt(RPort,NULL,0);
  322.         }
  323.  
  324.         return(LVCB_OK);
  325.     }
  326.     else
  327.         return(LVCB_UNKNOWN);
  328. }
  329.  
  330. STATIC VOID __regargs
  331. UpdateEditList(struct Configuration *Config)
  332. {
  333.     ULONG    *Array;
  334.     WORD     i;
  335.  
  336.     Array = (ULONG *)Config;
  337.  
  338.     for(i = 0 ; i < 10 ; i++)
  339.     {
  340.         if(Array[i])
  341.             EditLabels[i][0] = (UBYTE)'*';
  342.         else
  343.             EditLabels[i][0] = ' ';
  344.     }
  345.  
  346.     if(Config -> TransferConfig)
  347.         EditLabels[10][0] = (UBYTE)'*';
  348.     else
  349.         EditLabels[10][0] = ' ';
  350.  
  351.     EditLabels[15][0] = (UBYTE)'*';
  352.     EditLabels[16][0] = (UBYTE)'*';
  353.  
  354.     if(Config -> FileConfig)
  355.     {
  356.         EditLabels[11][0] = (UBYTE)'*';
  357.         EditLabels[12][0] = (UBYTE)'*';
  358.         EditLabels[13][0] = (UBYTE)'*';
  359.         EditLabels[14][0] = (UBYTE)'*';
  360.     }
  361.     else
  362.     {
  363.         EditLabels[11][0] = ' ';
  364.         EditLabels[12][0] = ' ';
  365.         EditLabels[13][0] = ' ';
  366.         EditLabels[14][0] = ' ';
  367.     }
  368. }
  369.  
  370. STATIC BOOLEAN
  371. SaveChanges(struct Window *Parent)
  372. {
  373.     return((BOOLEAN)MyEasyRequest(Parent,LocaleString(MSG_SAVE_CHANGES),LocaleString(MSG_GLOBAL_YES_NO_TXT)));
  374. }
  375.  
  376. STATIC BYTE __regargs
  377. EditConfig(struct Configuration *Config,UWORD Type,ULONG Qualifier,struct Window *Window)
  378. {
  379.     STATIC LONG TypeMappings[15][2] =
  380.     {
  381.         EDIT_SERIAL,        PREF_SERIAL,
  382.         EDIT_MODEM,        PREF_MODEM,
  383.         EDIT_SCREEN,        PREF_SCREEN,
  384.         EDIT_TERMINAL,        PREF_TERMINAL,
  385.         EDIT_EMULATION,        PREF_EMULATION,
  386.         EDIT_CLIPBOARD,        PREF_CLIP,
  387.         EDIT_CAPTURE,        PREF_CAPTURE,
  388.         EDIT_COMMANDS,        PREF_COMMAND,
  389.         EDIT_MISC,        PREF_MISC,
  390.         EDIT_PATHS,        PREF_PATH,
  391.         EDIT_TRANSFER,        PREF_TRANSFER,
  392.         EDIT_TRANSLATION,    PREF_FILE,
  393.         EDIT_KEYMACROS,        PREF_FILE,
  394.         EDIT_CURSORKEYS,    PREF_FILE,
  395.         EDIT_FASTMACROS,    PREF_FILE
  396.     };
  397.  
  398.     struct FileRequester    *FileRequest;
  399.     UBYTE             DummyBuffer[MAX_FILENAME_LENGTH],
  400.                 *DummyChar;
  401.     BOOLEAN             Changed    = FALSE,
  402.                  Default    = FALSE,
  403.                  FallBack    = TRUE;
  404.     LONG             PrefType;
  405.     WORD             i;
  406.     APTR             Data;
  407.  
  408.     for(i = 0 ; i < 15 ; i++)
  409.     {
  410.         if(TypeMappings[i][0] == Type)
  411.         {
  412.             PrefType = TypeMappings[i][1];
  413.  
  414.             break;
  415.         }
  416.     }
  417.  
  418.     Data = GetConfigEntry(Config,PrefType);
  419.  
  420.     if(CreateConfigEntry(Config,PrefType))
  421.     {
  422.         if(!Data)
  423.             ResetConfigEntry(Config,PrefType,FALSE);
  424.  
  425.         switch(Type)
  426.         {
  427.             case EDIT_SERIAL:
  428.  
  429.                 Changed = SerialPanel(Config,&Default);
  430.                 break;
  431.  
  432.             case EDIT_MODEM:
  433.  
  434.                 Changed = ModemPanel(Config,&Default);
  435.                 break;
  436.  
  437.             case EDIT_SCREEN:
  438.  
  439.                 Changed = ScreenPanel(Config,&Default);
  440.                 break;
  441.  
  442.             case EDIT_TERMINAL:
  443.  
  444.                 Changed = TerminalPanel(Config,&Default);
  445.                 break;
  446.  
  447.             case EDIT_EMULATION:
  448.  
  449.                 Changed = EmulationPanel(Config,&Default);
  450.                 break;
  451.  
  452.             case EDIT_CLIPBOARD:
  453.  
  454.                 Changed = ClipPanel(Config,&Default);
  455.                 break;
  456.  
  457.             case EDIT_CAPTURE:
  458.  
  459.                 Changed = CapturePanel(Config,&Default);
  460.                 break;
  461.  
  462.             case EDIT_COMMANDS:
  463.  
  464.                 Changed = CommandPanel(Config,&Default);
  465.                 break;
  466.  
  467.             case EDIT_MISC:
  468.  
  469.                 Changed = MiscPanel(Config,&Default);
  470.                 break;
  471.  
  472.             case EDIT_PATHS:
  473.  
  474.                 Changed = PathPanel(Config,&Default);
  475.                 break;
  476.  
  477.             case EDIT_TRANSFER:
  478.  
  479.                 Changed = LibPanel(Config,&Default);
  480.                 break;
  481.  
  482.             case EDIT_TRANSLATION:
  483.  
  484.                 if(!(Qualifier & (IEQUALIFIER_LSHIFT | IEQUALIFIER_RSHIFT)))
  485.                 {
  486.                     struct TranslationEntry **Send,**Receive = NULL;
  487.                     BOOLEAN            Success = FALSE;
  488.  
  489.                     strcpy(DummyBuffer,Config -> FileConfig -> TranslationFileName);
  490.  
  491.                     if(Send = AllocTranslationTable())
  492.                     {
  493.                         if(Receive = AllocTranslationTable())
  494.                         {
  495.                             Success = TRUE;
  496.  
  497.                             if(!LoadTranslationTables(DummyBuffer,Send,Receive))
  498.                             {
  499.                                 ShowError(Window,ERR_LOAD_ERROR,IoErr(),DummyBuffer);
  500.  
  501.                                 FillTranslationTable(Send);
  502.                                 FillTranslationTable(Receive);
  503.                             }
  504.                         }
  505.                     }
  506.  
  507.                     if(Success)
  508.                     {
  509.                         if(TranslationPanel(&Send,&Receive,DummyBuffer,Window) && Send && Receive)
  510.                         {
  511.                             if(IsStandardTable(Send) && IsStandardTable(Receive))
  512.                                 DummyBuffer[0] = 0;
  513.  
  514.                             if(DummyBuffer[0])
  515.                             {
  516.                                 if(SaveChanges(Window))
  517.                                 {
  518.                                     if(!SaveTranslationTables(DummyBuffer,Send,Receive))
  519.                                         ShowError(Window,ERR_SAVE_ERROR,IoErr(),DummyBuffer);
  520.                                 }
  521.                             }
  522.                         }
  523.  
  524.                         if(strcmp(Config -> FileConfig -> TranslationFileName,DummyBuffer))
  525.                         {
  526.                             strcpy(Config -> FileConfig -> TranslationFileName,DummyBuffer);
  527.  
  528.                             Changed = TRUE;
  529.                         }
  530.  
  531.                         FallBack = FALSE;
  532.                     }
  533.  
  534.                     if(Send)
  535.                         FreeTranslationTable(Send);
  536.  
  537.                     if(Receive)
  538.                         FreeTranslationTable(Receive);
  539.                 }
  540.  
  541.                 if(FallBack)
  542.                 {
  543.                     SplitFileName(Config -> FileConfig -> TranslationFileName,&DummyChar,DummyBuffer);
  544.  
  545.                     if(FileRequest = GetFile(Window,LocaleString(MSG_PHONEPANEL_SELECT_TRANSLATION_TXT),DummyBuffer,DummyChar,DummyBuffer,"#?.prefs",FALSE,FALSE,FALSE,LocaleString(MSG_GLOBAL_SELECT_TXT),TRUE))
  546.                     {
  547.                         strcpy(Config -> FileConfig -> TranslationFileName,DummyBuffer);
  548.  
  549.                         FreeAslRequest(FileRequest);
  550.  
  551.                         Changed = TRUE;
  552.                     }
  553.                 }
  554.  
  555.                 break;
  556.  
  557.             case EDIT_KEYMACROS:
  558.  
  559.                 if(!(Qualifier & (IEQUALIFIER_LSHIFT | IEQUALIFIER_RSHIFT)))
  560.                 {
  561.                     struct MacroKeys *Keys;
  562.  
  563.                     if(Keys = (struct MacroKeys *)AllocVecPooled(sizeof(struct MacroKeys),MEMF_ANY | MEMF_CLEAR))
  564.                     {
  565.                         if(!LoadMacros(Config -> FileConfig -> MacroFileName,Keys))
  566.                             ShowError(Window,ERR_LOAD_ERROR,IoErr(),DummyBuffer);
  567.  
  568.                         strcpy(DummyBuffer,Config -> FileConfig -> MacroFileName);
  569.  
  570.                         if(MacroPanel(Keys,DummyBuffer,FALSE,Window))
  571.                         {
  572.                             if(SaveChanges(Window))
  573.                             {
  574.                                 if(!WriteIFFData(DummyBuffer,Keys,sizeof(struct MacroKeys),ID_KEYS))
  575.                                     ShowError(Window,ERR_SAVE_ERROR,IoErr(),DummyBuffer);
  576.                             }
  577.                         }
  578.  
  579.                         if(strcmp(Config -> FileConfig -> MacroFileName,DummyBuffer))
  580.                         {
  581.                             strcpy(Config -> FileConfig -> MacroFileName,DummyBuffer);
  582.  
  583.                             Changed = TRUE;
  584.                         }
  585.  
  586.                         FallBack = FALSE;
  587.  
  588.                         FreeVecPooled(Keys);
  589.                     }
  590.                 }
  591.  
  592.                 if(FallBack)
  593.                 {
  594.                     SplitFileName(Config -> FileConfig -> MacroFileName,&DummyChar,DummyBuffer);
  595.  
  596.                     if(FileRequest = GetFile(Window,LocaleString(MSG_PHONEPANEL_SELECT_KEYBOARD_MACROS_TXT),DummyBuffer,DummyChar,DummyBuffer,"#?.prefs",FALSE,FALSE,FALSE,LocaleString(MSG_GLOBAL_SELECT_TXT),TRUE))
  597.                     {
  598.                         strcpy(Config -> FileConfig -> MacroFileName,DummyBuffer);
  599.  
  600.                         FreeAslRequest(FileRequest);
  601.  
  602.                         Changed = TRUE;
  603.                     }
  604.                 }
  605.  
  606.                 break;
  607.  
  608.             case EDIT_CURSORKEYS:
  609.  
  610.                 if(!(Qualifier & (IEQUALIFIER_LSHIFT | IEQUALIFIER_RSHIFT)))
  611.                 {
  612.                     struct CursorKeys *Keys;
  613.  
  614.                     if(Keys = (struct CursorKeys *)AllocVecPooled(sizeof(struct CursorKeys),MEMF_ANY | MEMF_CLEAR))
  615.                     {
  616.                         strcpy(DummyBuffer,Config -> FileConfig -> CursorFileName);
  617.  
  618.                         if(!ReadIFFData(DummyBuffer,Keys,sizeof(struct CursorKeys),ID_KEYS))
  619.                         {
  620.                             ResetCursorKeys(Keys);
  621.  
  622.                             ShowError(Window,ERR_LOAD_ERROR,IoErr(),DummyBuffer);
  623.                         }
  624.  
  625.                         if(CursorPanel(Keys,DummyBuffer,Window))
  626.                         {
  627.                             if(SaveChanges(Window))
  628.                             {
  629.                                 if(!WriteIFFData(DummyBuffer,Keys,sizeof(struct CursorKeys),ID_KEYS))
  630.                                     ShowError(Window,ERR_SAVE_ERROR,IoErr(),DummyBuffer);
  631.                             }
  632.                         }
  633.  
  634.                         if(strcmp(Config -> FileConfig -> CursorFileName,DummyBuffer))
  635.                         {
  636.                             strcpy(Config -> FileConfig -> CursorFileName,DummyBuffer);
  637.  
  638.                             Changed = TRUE;
  639.                         }
  640.  
  641.                         FallBack = FALSE;
  642.  
  643.                         FreeVecPooled(Keys);
  644.                     }
  645.                 }
  646.  
  647.                 if(FallBack)
  648.                 {
  649.                     SplitFileName(Config -> FileConfig -> CursorFileName,&DummyChar,DummyBuffer);
  650.  
  651.                     if(FileRequest = GetFile(Window,LocaleString(MSG_PHONEPANEL_SELECT_CURSOR_KEYS_TXT),DummyBuffer,DummyChar,DummyBuffer,"#?.prefs",FALSE,FALSE,FALSE,LocaleString(MSG_GLOBAL_SELECT_TXT),TRUE))
  652.                     {
  653.                         strcpy(Config -> FileConfig -> CursorFileName,DummyBuffer);
  654.  
  655.                         FreeAslRequest(FileRequest);
  656.  
  657.                         Changed = TRUE;
  658.                     }
  659.                 }
  660.  
  661.                 break;
  662.  
  663.             case EDIT_FASTMACROS:
  664.  
  665.                 if(!(Qualifier & (IEQUALIFIER_LSHIFT | IEQUALIFIER_RSHIFT)))
  666.                 {
  667.                     struct List *List;
  668.  
  669.                     if(List = CreateList())
  670.                     {
  671.                         strcpy(DummyBuffer,Config -> FileConfig -> FastMacroFileName);
  672.  
  673.                         if(!LoadFastMacros(DummyBuffer,List))
  674.                             ShowError(Window,ERR_LOAD_ERROR,IoErr(),DummyBuffer);
  675.  
  676.                         if(FastMacroPanel(List,DummyBuffer,Window))
  677.                         {
  678.                             if(SaveChanges(Window))
  679.                             {
  680.                                 if(!SaveFastMacros(DummyBuffer,List))
  681.                                     ShowError(Window,ERR_SAVE_ERROR,IoErr(),DummyBuffer);
  682.                             }
  683.                         }
  684.  
  685.                         if(strcmp(Config -> FileConfig -> FastMacroFileName,DummyBuffer))
  686.                         {
  687.                             strcpy(Config -> FileConfig -> FastMacroFileName,DummyBuffer);
  688.  
  689.                             Changed = TRUE;
  690.                         }
  691.  
  692.                         FallBack = FALSE;
  693.  
  694.                         DeleteList(List);
  695.                     }
  696.                 }
  697.  
  698.                 if(FallBack)
  699.                 {
  700.                     SplitFileName(Config -> FileConfig -> FastMacroFileName,&DummyChar,DummyBuffer);
  701.  
  702.                     if(FileRequest = GetFile(Window,LocaleString(MSG_PHONEPANEL_SELECT_FAST_MACROS_TXT),DummyBuffer,DummyChar,DummyBuffer,"#?.prefs",FALSE,FALSE,FALSE,LocaleString(MSG_GLOBAL_SELECT_TXT),TRUE))
  703.                     {
  704.                         strcpy(Config -> FileConfig -> FastMacroFileName,DummyBuffer);
  705.  
  706.                         FreeAslRequest(FileRequest);
  707.  
  708.                         Changed = TRUE;
  709.                     }
  710.                 }
  711.  
  712.                 break;
  713.         }
  714.  
  715.         if((!Changed && !Data) || Default)
  716.         {
  717.             DeleteConfigEntry(Config,PrefType);
  718.  
  719.             if(Default)
  720.                 Changed = TRUE;
  721.         }
  722.     }
  723.     else
  724.         DisplayBeep(Window -> WScreen);
  725.  
  726.     return(Changed);
  727. }
  728.  
  729. STATIC VOID __regargs
  730. SetPanelState(struct LayoutHandle *Handle,struct List *PhoneList,LONG Count,LONG Selected,BOOLEAN Released)
  731. {
  732.     if(NumPhoneEntries)
  733.     {
  734.         LT_SetAttributes(Handle,GAD_SAVELIST,
  735.             GA_Disabled,    FALSE,
  736.         TAG_DONE);
  737.  
  738.         LT_SetAttributes(Handle,GAD_PRINT,
  739.             GA_Disabled,    FALSE,
  740.         TAG_DONE);
  741.  
  742.         LT_SetAttributes(Handle,GAD_SORTLIST,
  743.             GA_Disabled,    NumPhoneEntries < 2,
  744.         TAG_DONE);
  745.  
  746.         LT_SetAttributes(Handle,GAD_PASSWORD,
  747.             GA_Disabled,    FALSE,
  748.         TAG_DONE);
  749.  
  750.         LT_SetAttributes(Handle,GAD_CLONEENTRY,
  751.             GA_Disabled,    Selected == -1,
  752.         TAG_DONE);
  753.  
  754.         LT_SetAttributes(Handle,GAD_REMOVEENTRY,
  755.             GA_Disabled,    Selected == -1,
  756.         TAG_DONE);
  757.  
  758.         LT_SetAttributes(Handle,GAD_COPYCONFIG,
  759.             GA_Disabled,    FALSE,
  760.         TAG_DONE);
  761.  
  762.         LT_SetAttributes(Handle,GAD_USEIT,
  763.             GA_Disabled,    Selected == -1,
  764.         TAG_DONE);
  765.  
  766.         if(Selected == -1)
  767.         {
  768.             LT_SetAttributes(Handle,GAD_EDIT,
  769.                 GA_Disabled,    TRUE,
  770.             TAG_DONE);
  771.  
  772.             if(Selected != LastSelected)
  773.             {
  774.                 LT_SetAttributes(Handle,GAD_NAMELIST,
  775.                     GA_Disabled,    FALSE,
  776.                     GTLV_Selected,    ~0,
  777.                 TAG_DONE);
  778.  
  779.                 LT_SetAttributes(Handle,GAD_NAME,
  780.                     GTST_String,    "",
  781.                     GA_Disabled,    TRUE,
  782.                 TAG_DONE);
  783.  
  784.                 LT_SetAttributes(Handle,GAD_COMMENT,
  785.                     GTST_String,    "",
  786.                     GA_Disabled,    TRUE,
  787.                 TAG_DONE);
  788.  
  789.                 LT_SetAttributes(Handle,GAD_PHONENUMBER,
  790.                     GTST_String,    "",
  791.                     GA_Disabled,    TRUE,
  792.                 TAG_DONE);
  793.  
  794.                 LT_SetAttributes(Handle,GAD_QUICKMENU,
  795.                     GTCB_Checked,    FALSE,
  796.                     GA_Disabled,    TRUE,
  797.                 TAG_DONE);
  798.             }
  799.  
  800.             LT_SetAttributes(Handle,GAD_TAG,
  801.                 GA_Disabled,    TRUE,
  802.             TAG_DONE);
  803.  
  804.             LT_SetAttributes(Handle,GAD_UNTAG,
  805.                 GA_Disabled,    TRUE,
  806.             TAG_DONE);
  807.  
  808.             LT_SetAttributes(Handle,GAD_DIALLIST,
  809.                 GA_Disabled,    Online || !Count,
  810.             TAG_DONE);
  811.         }
  812.         else
  813.         {
  814.             LT_SetAttributes(Handle,GAD_NAMELIST,
  815.                 GA_Disabled,    FALSE,
  816.                 GTLV_Labels,    PhoneList,
  817.             TAG_DONE);
  818.  
  819.             if(Selected != LastSelected)
  820.             {
  821.                 LT_SetAttributes(Handle,GAD_NAME,
  822.                     GTST_String,    Phonebook[Selected] -> Header -> Name,
  823.                     GA_Disabled,    FALSE,
  824.                 TAG_DONE);
  825.  
  826.                 LT_SetAttributes(Handle,GAD_COMMENT,
  827.                     GTST_String,    Phonebook[Selected] -> Header -> Comment,
  828.                     GA_Disabled,    FALSE,
  829.                 TAG_DONE);
  830.  
  831.                 LT_SetAttributes(Handle,GAD_PHONENUMBER,
  832.                     GTST_String,    Phonebook[Selected] -> Header -> Number,
  833.                     GA_Disabled,    FALSE,
  834.                 TAG_DONE);
  835.  
  836.                 LT_SetAttributes(Handle,GAD_QUICKMENU,
  837.                     GTCB_Checked,    Phonebook[Selected] -> Header -> QuickMenu,
  838.                     GA_Disabled,    FALSE,
  839.                 TAG_DONE);
  840.  
  841.                 if(Released)
  842.                 {
  843.                     LT_SetAttributes(Handle,GAD_EDIT,
  844.                         GTLV_Labels,    ~0,
  845.                     TAG_DONE);
  846.  
  847.                     UpdateEditList(Phonebook[Selected] -> Config);
  848.  
  849.                     LT_SetAttributes(Handle,GAD_EDIT,
  850.                         GTLV_Labels,    EditList,
  851.                         GA_Disabled,    FALSE,
  852.                     TAG_DONE);
  853.                 }
  854.             }
  855.             else
  856.             {
  857.                 LT_SetAttributes(Handle,GAD_EDIT,
  858.                     GA_Disabled,    FALSE,
  859.                 TAG_DONE);
  860.             }
  861.  
  862.             LT_SetAttributes(Handle,GAD_TAG,
  863.                 GA_Disabled,    Phonebook[Selected] -> Count != -1,
  864.             TAG_DONE);
  865.  
  866.             LT_SetAttributes(Handle,GAD_UNTAG,
  867.                 GA_Disabled,    Phonebook[Selected] -> Count == -1,
  868.             TAG_DONE);
  869.  
  870.             LT_SetAttributes(Handle,GAD_DIALLIST,
  871.                 GA_Disabled,    Online || !Phonebook[Selected] -> Header -> Number[0],
  872.             TAG_DONE);
  873.         }
  874.  
  875.         LT_SetAttributes(Handle,GAD_TAG_ALL,
  876.             GA_Disabled,    Count == NumPhoneEntries,
  877.         TAG_DONE);
  878.  
  879.         LT_SetAttributes(Handle,GAD_TOGGLE_ALL,
  880.             GA_Disabled,    FALSE,
  881.         TAG_DONE);
  882.  
  883.         LT_SetAttributes(Handle,GAD_CLEARLIST,
  884.             GA_Disabled,    !Count,
  885.         TAG_DONE);
  886.     }
  887.     else
  888.     {
  889.         LONG i;
  890.  
  891.         for(i = GAD_NAMELIST ; i < GAD_CANCEL ; i++)
  892.         {
  893.             LT_SetAttributes(Handle,i,
  894.                 GA_Disabled,    i != GAD_LOADLIST && i != GAD_NEWENTRY,
  895.             TAG_DONE);
  896.         }
  897.     }
  898.  
  899.     LastSelected = Selected;
  900. }
  901.  
  902. BYTE
  903. PhonePanel()
  904. {
  905.     struct LayoutHandle    *Handle;
  906.     struct PhoneNode    *TempNode;
  907.     struct List        *PhoneList;
  908.     LONG             Count;
  909.     BYTE             DialTheList = FALSE;
  910.  
  911.     LastSelected = LastNumPhoneEntries = -17;
  912.  
  913.     if(Phonebook && NumPhoneEntries)
  914.     {
  915.         LONG i;
  916.  
  917.         if(!(PhoneList = CreatePhoneList()))
  918.         {
  919.             DisplayBeep(Window -> WScreen);
  920.  
  921.             return(FALSE);
  922.         }
  923.  
  924.         FreeDialList(TRUE);
  925.  
  926.         for(i = 0, Count = -1 ; i < NumPhoneEntries ; i++)
  927.         {
  928.             if(Phonebook[i] -> Count > Count)
  929.                 Count = Phonebook[i] -> Count;
  930.         }
  931.  
  932.         Count++;
  933.     }
  934.     else
  935.     {
  936.         PhoneList    = NULL;
  937.         Count        = 0;
  938.     }
  939.  
  940.     if(Handle = LT_CreateHandleTags(Window -> WScreen,
  941.         LH_LocaleHook,        &LocaleHook,
  942. /*        LH_AutoActivate,    TRUE,*/
  943.     TAG_DONE))
  944.     {
  945.         STATIC struct Hook ListViewHook =
  946.         {
  947.             {NULL},
  948.             (HOOKFUNC)ListViewRender
  949.         };
  950.  
  951.         STATIC struct Hook EditViewHook =
  952.         {
  953.             {NULL},
  954.             (HOOKFUNC)EditViewRender
  955.         };
  956.  
  957.         STATIC LONG LabelIDTable[] =
  958.         {
  959.             MSG_PHONEPANEL_LOAD_LIST_GAD,
  960.             MSG_PHONEPANEL_SAVE_LIST_GAD,
  961.             MSG_PHONEPANEL_PRINT_GAD,
  962.             MSG_PHONEPANEL_SORT_LIST_GAD,
  963.             MSG_PHONEPANEL_SET_PASSWORT_GAD,
  964.             MSG_PHONEPANEL_NEW_ENTRY_GAD,
  965.             MSG_PHONEPANEL_CLONE_ENTRY_GAD,
  966.             MSG_PHONEPANEL_REMOVE_ENTRY_GAD,
  967.             MSG_PHONEPANEL_COPY_CONFIG_GAD,
  968.             MSG_PHONEPANEL_USE_ENTRY_GAD,
  969.             MSG_PHONEPANEL_TAG_GAD,
  970.             MSG_PHONEPANEL_UNTAG_GAD,
  971.             MSG_PHONEPANEL_TAG_ALL_GAD,
  972.             MSG_PHONEPANEL_TOGGLE_ALL_GAD,
  973.             MSG_PHONEPANEL_UNTAG_ALL_GAD
  974.         };
  975.  
  976.         struct IBox     Bounds;
  977.         struct Window    *PhoneWindow;
  978.         LONG         i,Max,Size,MaxPen,MaxChars;
  979.         UBYTE         SmallString[2];
  980.  
  981.         for(i = MaxChars = 0 ; i < NumElements(LabelIDTable) ; i++)
  982.         {
  983.             if((Max = LT_LabelChars(Handle,LocaleString(LabelIDTable[i]))) > MaxChars)
  984.                 MaxChars = Max;
  985.         }
  986.  
  987.         MaxPen = MAX(Handle -> DrawInfo -> dri_Pens[BLOCKPEN],MAX(Handle -> DrawInfo -> dri_Pens[TEXTPEN],MAX(Handle -> DrawInfo -> dri_Pens[BACKGROUNDPEN],MAX(Handle -> DrawInfo -> dri_Pens[FILLTEXTPEN],MAX(Handle -> DrawInfo -> dri_Pens[FILLPEN],Handle -> DrawInfo -> dri_Pens[HIGHLIGHTTEXTPEN])))));
  988.  
  989.         SmallString[1] = 0;
  990.         Max = 0;
  991.  
  992.         for(i = MSG_PHONEPANEL_SERIAL_TXT ; i <= MSG_PHONEPANEL_RATES_TXT ; i++)
  993.             EditLabels[i - MSG_PHONEPANEL_SERIAL_TXT][0] = ' ';
  994.  
  995.         for(i = '0' ; i <= '9' ; i++)
  996.         {
  997.             SmallString[0] = i;
  998.  
  999.             if((Size = LT_LabelWidth(Handle,SmallString)) > Max)
  1000.                 Max = Size;
  1001.         }
  1002.  
  1003.         ListViewHook . h_Data = (APTR)Max;
  1004.  
  1005.         LT_New(Handle,
  1006.             LA_Type,    VERTICAL_KIND,
  1007.         TAG_DONE);
  1008.         {
  1009.             LT_New(Handle,
  1010.                 LA_Type,    VERTICAL_KIND,
  1011. /*                LA_LabelID,    MSG_V36_0132,*/
  1012.             TAG_DONE);
  1013.             {
  1014.                 LT_New(Handle,
  1015.                     LA_Type,    HORIZONTAL_KIND,
  1016.                 TAG_DONE);
  1017.                 {
  1018.                     LT_New(Handle,
  1019.                         LA_Type,    LISTVIEW_KIND,
  1020.                         LA_LabelID,    MSG_GLOBAL_NAME_LIST_GAD,
  1021.                         LA_ID,        GAD_NAMELIST,
  1022.                         LA_Chars,    40,
  1023.                         LA_Lines,    4,
  1024.                         GTLV_CallBack,    &ListViewHook,
  1025.                         GTLV_MaxPen,    MaxPen,
  1026.                         LALV_CursorKey,    TRUE,
  1027.                         LALV_MaxGrowX,    50,
  1028.                         LALV_MaxGrowY,    20,
  1029.                         LALV_ResizeX,    TRUE,
  1030.                         LALV_ResizeY,    TRUE,
  1031.  
  1032.                         Kick30 ? LALV_Link : TAG_IGNORE, NIL_LINK,
  1033.  
  1034.                         PhoneList ? GTLV_Labels : TAG_IGNORE, PhoneList,
  1035.                     TAG_DONE);
  1036.  
  1037.                     LT_New(Handle,
  1038.                         LA_Type,    LISTVIEW_KIND,
  1039.                         LA_LabelID,    MSG_PHONEPANEL_SETTINGS_TXT,
  1040.                         LA_Lines,    4,
  1041.                         LA_ID,        GAD_EDIT,
  1042.                         LA_NoKey,    TRUE,
  1043.                         GA_Disabled,    TRUE,
  1044.                         GTLV_Labels,    EditList,
  1045.                         GTLV_CallBack,    &EditViewHook,
  1046.                     TAG_DONE);
  1047.  
  1048.                     LT_EndGroup(Handle);
  1049.                 }
  1050.  
  1051.                 LT_New(Handle,
  1052.                     LA_Type,    HORIZONTAL_KIND,
  1053.                 TAG_DONE);
  1054.                 {
  1055.                     LT_New(Handle,
  1056.                         LA_Type,    VERTICAL_KIND,
  1057.                     TAG_DONE);
  1058.                     {
  1059.                         LT_New(Handle,
  1060.                             LA_Type,        STRING_KIND,
  1061.                             LA_LabelID,        MSG_PHONEPANEL_BBS_NAME_GAD,
  1062.                             LA_ID,            GAD_NAME,
  1063.                             GTST_MaxChars,        39,
  1064.                             LA_Chars,        40,
  1065.                             GA_Disabled,        TRUE,
  1066.                         TAG_DONE);
  1067.  
  1068.                         LT_New(Handle,
  1069.                             LA_Type,        STRING_KIND,
  1070.                             LA_LabelID,        MSG_PHONEPANEL_COMMENT_GAD,
  1071.                             LA_ID,            GAD_COMMENT,
  1072.                             GTST_MaxChars,        99,
  1073.                             GA_Disabled,        TRUE,
  1074.                         TAG_DONE);
  1075.  
  1076.                         LT_New(Handle,
  1077.                             LA_Type,        STRING_KIND,
  1078.                             LA_LabelID,        MSG_PHONEPANEL_PHONE_NUMBER_GAD,
  1079.                             LA_ID,            GAD_PHONENUMBER,
  1080.                             GTST_MaxChars,        99,
  1081.                             LAST_LastGadget,    TRUE,
  1082.                             GA_Disabled,        TRUE,
  1083.                         TAG_DONE);
  1084.  
  1085.                         LT_EndGroup(Handle);
  1086.                     }
  1087.  
  1088.                     LT_New(Handle,
  1089.                         LA_Type,    VERTICAL_KIND,
  1090.                     TAG_DONE);
  1091.                     {
  1092.                         LT_New(Handle,
  1093.                             LA_Type,    CHECKBOX_KIND,
  1094.                             LA_LabelID,    MSG_PHONEPANEL_QUICK_MENU_GAD,
  1095.                             LA_ID,        GAD_QUICKMENU,
  1096.                             GA_Disabled,    TRUE,
  1097.                         TAG_DONE);
  1098.  
  1099.                         LT_EndGroup(Handle);
  1100.                     }
  1101.  
  1102.                     LT_EndGroup(Handle);
  1103.                 }
  1104.  
  1105.                 LT_EndGroup(Handle);
  1106.             }
  1107.  
  1108.             LT_New(Handle,
  1109.                 LA_Type,VERTICAL_KIND,
  1110.             TAG_DONE);
  1111.             {
  1112.                 LT_New(Handle,
  1113.                     LA_Type,    XBAR_KIND,
  1114.                     LAXB_FullSize,    TRUE,
  1115.                 TAG_DONE);
  1116.  
  1117.                 LT_EndGroup(Handle);
  1118.             }
  1119.  
  1120.             LT_New(Handle,
  1121.                 LA_Type,    VERTICAL_KIND,
  1122.             TAG_DONE);
  1123.             {
  1124.                 LT_New(Handle,
  1125.                     LA_Type,    HORIZONTAL_KIND,
  1126.                     LAGR_SameSize,    TRUE,
  1127.                     LAGR_Spread,    TRUE,
  1128.                 TAG_DONE);
  1129.                 {
  1130.                     LT_New(Handle,
  1131.                         LA_Type,    BUTTON_KIND,
  1132.                         LA_LabelID,    MSG_PHONEPANEL_NEW_ENTRY_GAD,
  1133.                         LA_ID,        GAD_NEWENTRY,
  1134.                         LA_Chars,    MaxChars,
  1135.                     TAG_DONE);
  1136.  
  1137.                     LT_New(Handle,
  1138.                         LA_Type,    BUTTON_KIND,
  1139.                         LA_LabelID,    MSG_PHONEPANEL_CLONE_ENTRY_GAD,
  1140.                         LA_ID,        GAD_CLONEENTRY,
  1141.                         GA_Disabled,    TRUE,
  1142.                     TAG_DONE);
  1143.  
  1144.                     LT_New(Handle,
  1145.                         LA_Type,    BUTTON_KIND,
  1146.                         LA_LabelID,    MSG_PHONEPANEL_REMOVE_ENTRY_GAD,
  1147.                         LA_ID,        GAD_REMOVEENTRY,
  1148.                         GA_Disabled,    TRUE,
  1149.                     TAG_DONE);
  1150.  
  1151.                     LT_New(Handle,
  1152.                         LA_Type,    BUTTON_KIND,
  1153.                         LA_LabelID,    MSG_PHONEPANEL_COPY_CONFIG_GAD,
  1154.                         LA_ID,        GAD_COPYCONFIG,
  1155.                         GA_Disabled,    !NumPhoneEntries,
  1156.                     TAG_DONE);
  1157.  
  1158.                     LT_New(Handle,
  1159.                         LA_Type,    BUTTON_KIND,
  1160.                         LA_LabelID,    MSG_PHONEPANEL_USE_ENTRY_GAD,
  1161.                         LA_ID,        GAD_USEIT,
  1162.                         GA_Disabled,    TRUE,
  1163.                     TAG_DONE);
  1164.  
  1165.                     LT_EndGroup(Handle);
  1166.                 }
  1167.  
  1168.                 LT_New(Handle,
  1169.                     LA_Type,    HORIZONTAL_KIND,
  1170.                     LAGR_SameSize,    TRUE,
  1171.                     LAGR_Spread,    TRUE,
  1172.                 TAG_DONE);
  1173.                 {
  1174.                     LT_New(Handle,
  1175.                         LA_Type,    BUTTON_KIND,
  1176.                         LA_LabelID,    MSG_PHONEPANEL_TAG_GAD,
  1177.                         LA_Chars,    MaxChars,
  1178.                         LA_ID,        GAD_TAG,
  1179.                         GA_Disabled,    TRUE,
  1180.                     TAG_DONE);
  1181.  
  1182.                     LT_New(Handle,
  1183.                         LA_Type,    BUTTON_KIND,
  1184.                         LA_LabelID,    MSG_PHONEPANEL_UNTAG_GAD,
  1185.                         LA_ID,        GAD_UNTAG,
  1186.                         GA_Disabled,    !Count,
  1187.                     TAG_DONE);
  1188.  
  1189.                     LT_New(Handle,
  1190.                         LA_Type,    BUTTON_KIND,
  1191.                         LA_LabelID,    MSG_PHONEPANEL_TAG_ALL_GAD,
  1192.                         LA_ID,        GAD_TAG_ALL,
  1193.                         GA_Disabled,    !NumPhoneEntries,
  1194.                     TAG_DONE);
  1195.  
  1196.                     LT_New(Handle,
  1197.                         LA_Type,    BUTTON_KIND,
  1198.                         LA_LabelID,    MSG_PHONEPANEL_TOGGLE_ALL_GAD,
  1199.                         LA_ID,        GAD_TOGGLE_ALL,
  1200.                         GA_Disabled,    !NumPhoneEntries,
  1201.                     TAG_DONE);
  1202.  
  1203.                     LT_New(Handle,
  1204.                         LA_Type,    BUTTON_KIND,
  1205.                         LA_LabelID,    MSG_PHONEPANEL_UNTAG_ALL_GAD,
  1206.                         LA_ID,        GAD_CLEARLIST,
  1207.                         GA_Disabled,    !Count,
  1208.                     TAG_DONE);
  1209.  
  1210.                     LT_EndGroup(Handle);
  1211.                 }
  1212.  
  1213.                 LT_New(Handle,
  1214.                     LA_Type,VERTICAL_KIND,
  1215.                 TAG_DONE);
  1216.                 {
  1217.                     LT_New(Handle,
  1218.                         LA_Type,    XBAR_KIND,
  1219.                     TAG_DONE);
  1220.  
  1221.                     LT_EndGroup(Handle);
  1222.                 }
  1223.  
  1224.                 LT_New(Handle,
  1225.                     LA_Type,    HORIZONTAL_KIND,
  1226.                     LAGR_SameSize,    TRUE,
  1227.                     LAGR_Spread,    TRUE,
  1228.                 TAG_DONE);
  1229.                 {
  1230.                     LT_New(Handle,
  1231.                         LA_Type,    BUTTON_KIND,
  1232.                         LA_LabelID,    MSG_PHONEPANEL_LOAD_LIST_GAD,
  1233.                         LA_ID,        GAD_LOADLIST,
  1234.                         LA_Chars,    MaxChars,
  1235.                     TAG_DONE);
  1236.  
  1237.                     LT_New(Handle,
  1238.                         LA_Type,    BUTTON_KIND,
  1239.                         LA_LabelID,    MSG_PHONEPANEL_SAVE_LIST_GAD,
  1240.                         LA_ID,        GAD_SAVELIST,
  1241.                         GA_Disabled,    !NumPhoneEntries,
  1242.                     TAG_DONE);
  1243.  
  1244.                     LT_New(Handle,
  1245.                         LA_Type,    BUTTON_KIND,
  1246.                         LA_LabelID,    MSG_PHONEPANEL_PRINT_GAD,
  1247.                         LA_ID,        GAD_PRINT,
  1248.                         GA_Disabled,    !NumPhoneEntries,
  1249.                     TAG_DONE);
  1250.  
  1251.                     LT_New(Handle,
  1252.                         LA_Type,    BUTTON_KIND,
  1253.                         LA_LabelID,    MSG_PHONEPANEL_SORT_LIST_GAD,
  1254.                         LA_ID,        GAD_SORTLIST,
  1255.                         GA_Disabled,    NumPhoneEntries < 2,
  1256.                     TAG_DONE);
  1257.  
  1258.                     LT_New(Handle,
  1259.                         LA_Type,    BUTTON_KIND,
  1260.                         LA_LabelID,    MSG_PHONEPANEL_SET_PASSWORT_GAD,
  1261.                         LA_ID,        GAD_PASSWORD,
  1262.                         GA_Disabled,    !NumPhoneEntries,
  1263.                     TAG_DONE);
  1264.  
  1265.                     LT_EndGroup(Handle);
  1266.                 }
  1267.  
  1268.                 LT_New(Handle,
  1269.                     LA_Type,VERTICAL_KIND,
  1270.                 TAG_DONE);
  1271.                 {
  1272.                     LT_New(Handle,
  1273.                         LA_Type,    XBAR_KIND,
  1274.                         LAXB_FullSize,    TRUE,
  1275.                     TAG_DONE);
  1276.  
  1277.                     LT_EndGroup(Handle);
  1278.                 }
  1279.  
  1280.                 LT_New(Handle,
  1281.                     LA_Type,    HORIZONTAL_KIND,
  1282.                 TAG_DONE);
  1283.                 {
  1284.                     LT_New(Handle,
  1285.                         LA_Type,    BUTTON_KIND,
  1286.                         LA_LabelID,    MSG_PHONEPANEL_DIAL_LIST_GAD,
  1287.                         LA_ID,        GAD_DIALLIST,
  1288.                         LABT_ReturnKey,    TRUE,
  1289.                         LABT_ExtraFat,    TRUE,
  1290.                         GA_Disabled,    !Count || Online,
  1291.                     TAG_DONE);
  1292.  
  1293.                     LT_EndGroup(Handle);
  1294.                 }
  1295.  
  1296.                 LT_EndGroup(Handle);
  1297.             }
  1298.  
  1299.             LT_EndGroup(Handle);
  1300.         }
  1301.  
  1302.         Bounds . Left    = WindowLeft + Window -> LeftEdge;
  1303.         Bounds . Top    = WindowTop + Window -> TopEdge;
  1304.         Bounds . Width    = WindowWidth;
  1305.         Bounds . Height    = WindowHeight;
  1306.  
  1307.         if(PhoneWindow = LT_Layout(Handle,LocaleString(MSG_PHONEPANEL_PHONEBOOK_TXT),&Bounds,0,0,IDCMP_CLOSEWINDOW,0,
  1308.             LAWN_HelpHook,        &GuideHook,
  1309. //            LAWN_Parent,        Window,
  1310.             WA_DepthGadget,        TRUE,
  1311.             WA_CloseGadget,        TRUE,
  1312.             WA_DragBar,        TRUE,
  1313.             WA_RMBTrap,        TRUE,
  1314.             WA_Activate,        TRUE,
  1315.         TAG_DONE))
  1316.         {
  1317.             struct IntuiMessage    *Message;
  1318.             BOOLEAN             Done = FALSE,
  1319.                          Released;
  1320.             ULONG             MsgClass,
  1321.                          MsgQualifier;
  1322.             UWORD             MsgCode;
  1323.             struct Gadget        *MsgGadget;
  1324.  
  1325.             BYTE             ClickAction;
  1326.  
  1327.             UBYTE             DummyBuffer[MAX_FILENAME_LENGTH],
  1328.                         *DummyChar;
  1329.  
  1330.             LONG             Selected = ~0,i,
  1331.                          MsgGadgetID;
  1332.  
  1333.             struct FileRequester    *FileRequest;
  1334.             WORD             Vanilla;
  1335.  
  1336.             GuideContext(CONTEXT_PHONEBOOK);
  1337.  
  1338.             PushWindow(PhoneWindow);
  1339.  
  1340.             SetPanelState(Handle,PhoneList,Count,Selected,TRUE);
  1341.  
  1342.             do
  1343.             {
  1344.                 if(Wait(PORTMASK(PhoneWindow -> UserPort) | SIG_BREAK) & SIG_BREAK)
  1345.                 {
  1346.                     FreeDialList(TRUE);
  1347.  
  1348.                     break;
  1349.                 }
  1350.  
  1351.                 while(Message = (struct IntuiMessage *)LT_GetIMsg(Handle))
  1352.                 {
  1353.                     MsgClass    = Message -> Class;
  1354.                     MsgQualifier    = Message -> Qualifier;
  1355.                     MsgCode        = Message -> Code;
  1356.                     MsgGadget    = (struct Gadget *)Message -> IAddress;
  1357.  
  1358.                     LT_ReplyIMsg(Message);
  1359.  
  1360. /*                    if(MsgQualifier & IEQUALIFIER_REPEAT)*/
  1361. /*                        Released = FALSE;*/
  1362. /*                    else*/
  1363.                         Released = TRUE;
  1364.  
  1365.                     if(MsgClass == IDCMP_RAWKEY)
  1366.                     {
  1367.                         if(MsgClass == IDCMP_GADGETUP && MsgGadget -> GadgetID == GAD_NAMELIST)
  1368.                             MsgQualifier &= ~(IEQUALIFIER_LSHIFT | IEQUALIFIER_RSHIFT);
  1369.                     }
  1370.  
  1371.                     if(MsgClass == IDCMP_GADGETUP || MsgClass == IDCMP_IDCMPUPDATE)
  1372.                         MsgGadgetID = MsgGadget -> GadgetID;
  1373.                     else
  1374.                         MsgGadgetID = -1;
  1375.  
  1376.                     if(MsgClass == IDCMP_CLOSEWINDOW)
  1377.                     {
  1378.                         FreeDialList(TRUE);
  1379.  
  1380.                         Done = TRUE;
  1381.                     }
  1382.  
  1383.                     Vanilla = LT_GetCode(MsgQualifier,MsgClass,MsgCode,MsgGadget);
  1384.  
  1385.                     switch(Vanilla)
  1386.                     {
  1387.                         case ' ':
  1388.  
  1389.                             if(Selected != -1)
  1390.                             {
  1391.                                 LT_SetAttributes(Handle,GAD_NAMELIST,
  1392.                                     GTLV_Labels,    ~0,
  1393.                                 TAG_DONE);
  1394.  
  1395.                                 if(Phonebook[Selected] -> Count == -1)
  1396.                                 {
  1397.                                     Phonebook[Selected] -> Count = Count++;
  1398.  
  1399.                                     SPrintf(Phonebook[Selected] -> Node -> LocalName,"%3ld - %s",Count,Phonebook[Selected] -> Header -> Name);
  1400.  
  1401.                                     LT_PressButton(Handle,GAD_TAG);
  1402.                                 }
  1403.                                 else
  1404.                                 {
  1405.                                     RemoveDialEntry(Selected);
  1406.  
  1407.                                     Count--;
  1408.  
  1409.                                     LT_PressButton(Handle,GAD_UNTAG);
  1410.                                 }
  1411.  
  1412.                                 SetPanelState(Handle,PhoneList,Count,Selected,TRUE);
  1413.                             }
  1414.  
  1415.                             break;
  1416.  
  1417.                         case 127:
  1418.  
  1419.                             if(MsgQualifier & (IEQUALIFIER_LSHIFT | IEQUALIFIER_RSHIFT))
  1420.                             {
  1421.                                 if(Count > 0)
  1422.                                 {
  1423.                                     MsgClass    = IDCMP_GADGETUP;
  1424.                                     MsgGadgetID    = GAD_CLEARLIST;
  1425.                                 }
  1426.                             }
  1427.                             else
  1428.                             {
  1429.                                 if(Selected != -1 && Phonebook[Selected] -> Count != -1)
  1430.                                 {
  1431.                                     MsgClass    = IDCMP_GADGETUP;
  1432.                                     MsgGadgetID    = GAD_UNTAG;
  1433.                                 }
  1434.                             }
  1435.  
  1436.                             break;
  1437.                     }
  1438.  
  1439.                     if(MsgClass == IDCMP_GADGETUP)
  1440.                     {
  1441.                         switch(MsgGadgetID)
  1442.                         {
  1443.                             case GAD_TOGGLE_ALL:
  1444.                             {
  1445.                                 LONG LocalCount = 0;
  1446.  
  1447.                                 LT_SetAttributes(Handle,GAD_NAMELIST,
  1448.                                     GTLV_Labels,    ~0,
  1449.                                 TAG_DONE);
  1450.  
  1451.                                 for(i = 0 ; i < NumPhoneEntries ; i++)
  1452.                                 {
  1453.                                     if(Phonebook[i] -> Count == -1)
  1454.                                     {
  1455.                                         Phonebook[i] -> Count = LocalCount++;
  1456.  
  1457.                                         SPrintf(Phonebook[i] -> Node -> LocalName,"%3ld - %s",LocalCount,Phonebook[i] -> Header -> Name);
  1458.                                     }
  1459.                                     else
  1460.                                         RemoveDialEntry(i);
  1461.                                 }
  1462.  
  1463.                                 Count = LocalCount;
  1464.  
  1465.                                 LT_SetAttributes(Handle,GAD_NAMELIST,
  1466.                                     GTLV_Labels,    PhoneList,
  1467.                                 TAG_DONE);
  1468.  
  1469.                                 SetPanelState(Handle,PhoneList,Count,Selected,TRUE);
  1470.  
  1471.                                 break;
  1472.                             }
  1473.  
  1474.                             case GAD_TAG_ALL:
  1475.  
  1476.                                 LT_SetAttributes(Handle,GAD_NAMELIST,
  1477.                                     GTLV_Labels,    ~0,
  1478.                                 TAG_DONE);
  1479.  
  1480.                                 for(i = 0 ; i < NumPhoneEntries ; i++)
  1481.                                 {
  1482.                                     if(Phonebook[i] -> Count == -1)
  1483.                                     {
  1484.                                         Phonebook[i] -> Count = Count++;
  1485.  
  1486.                                         SPrintf(Phonebook[i] -> Node -> LocalName,"%3ld - %s",Count,Phonebook[i] -> Header -> Name);
  1487.                                     }
  1488.                                 }
  1489.  
  1490.                                 LT_SetAttributes(Handle,GAD_NAMELIST,
  1491.                                     GTLV_Labels,    PhoneList,
  1492.                                 TAG_DONE);
  1493.  
  1494.                                 SetPanelState(Handle,PhoneList,Count,Selected,TRUE);
  1495.  
  1496.                                 break;
  1497.  
  1498.                             case GAD_TAG:
  1499.  
  1500.                                 LT_SetAttributes(Handle,GAD_NAMELIST,
  1501.                                     GTLV_Labels,    ~0,
  1502.                                 TAG_DONE);
  1503.  
  1504.                                 Phonebook[Selected] -> Count = Count++;
  1505.  
  1506.                                 SPrintf(Phonebook[Selected] -> Node -> LocalName,"%3ld - %s",Count,Phonebook[Selected] -> Header -> Name);
  1507.  
  1508.                                 LT_SetAttributes(Handle,GAD_NAMELIST,
  1509.                                     GTLV_Labels,    PhoneList,
  1510.                                 TAG_DONE);
  1511.  
  1512.                                 SetPanelState(Handle,PhoneList,Count,Selected,TRUE);
  1513.  
  1514.                                 break;
  1515.  
  1516.                             case GAD_UNTAG:
  1517.  
  1518.                                 LT_SetAttributes(Handle,GAD_NAMELIST,
  1519.                                     GTLV_Labels,    ~0,
  1520.                                 TAG_DONE);
  1521.  
  1522.                                 RemoveDialEntry(Selected);
  1523.  
  1524.                                 Count--;
  1525.  
  1526.                                 LT_SetAttributes(Handle,GAD_NAMELIST,
  1527.                                     GTLV_Labels,    PhoneList,
  1528.                                 TAG_DONE);
  1529.  
  1530.                                 SetPanelState(Handle,PhoneList,Count,Selected,TRUE);
  1531.  
  1532.                                 break;
  1533.  
  1534.                             case GAD_NAMELIST:
  1535.  
  1536.                                 Selected = MsgCode;
  1537.  
  1538.                                 if(Phonebook[Selected] -> Header -> Number[0] && Phonebook[Selected] -> Header -> Name[0])
  1539.                                 {
  1540.                                     if(MsgQualifier & (IEQUALIFIER_LSHIFT | IEQUALIFIER_RSHIFT))
  1541.                                         ClickAction = CLICK_TOGGLE;
  1542.                                     else
  1543.                                         ClickAction = CLICK_SELECT;
  1544.                                 }
  1545.                                 else
  1546.                                     ClickAction = CLICK_SELECT;
  1547.  
  1548.                                 if(ClickAction == CLICK_TOGGLE)
  1549.                                 {
  1550.                                     LT_SetAttributes(Handle,GAD_NAMELIST,
  1551.                                         GTLV_Labels,    ~0,
  1552.                                     TAG_DONE);
  1553.  
  1554.                                     if(Phonebook[Selected] -> Count == -1)
  1555.                                     {
  1556.                                         Phonebook[Selected] -> Count = Count++;
  1557.  
  1558.                                         SPrintf(Phonebook[Selected] -> Node -> LocalName,"%3ld - %s",Count,Phonebook[Selected] -> Header -> Name);
  1559.                                     }
  1560.                                     else
  1561.                                     {
  1562.                                         RemoveDialEntry(Selected);
  1563.  
  1564.                                         Count--;
  1565.                                     }
  1566.  
  1567.                                     LT_SetAttributes(Handle,GAD_NAMELIST,
  1568.                                         GTLV_Labels,    PhoneList,
  1569.                                     TAG_DONE);
  1570.                                 }
  1571.  
  1572.                                 SetPanelState(Handle,PhoneList,Count,Selected,Released);
  1573.  
  1574.                                 break;
  1575.  
  1576.                             case GAD_CLEARLIST:
  1577.  
  1578.                                 LT_SetAttributes(Handle,GAD_NAMELIST,
  1579.                                     GTLV_Labels,    ~0,
  1580.                                 TAG_DONE);
  1581.  
  1582.                                 Count = 0;
  1583.  
  1584.                                 for(i = 0 ; i < NumPhoneEntries ; i++)
  1585.                                 {
  1586.                                     SPrintf(Phonebook[i] -> Node -> LocalName,"      %s",Phonebook[i] -> Header -> Name);
  1587.  
  1588.                                     Phonebook[i] -> Count = -1;
  1589.                                 }
  1590.  
  1591.                                 LT_SetAttributes(Handle,GAD_NAMELIST,
  1592.                                     GTLV_Labels,    PhoneList,
  1593.                                 TAG_DONE);
  1594.  
  1595.                                 SetPanelState(Handle,PhoneList,Count,Selected,TRUE);
  1596.  
  1597.                                 break;
  1598.  
  1599.                             case GAD_PRINT:
  1600.  
  1601.                                 LT_LockWindow(PhoneWindow);
  1602.  
  1603.                                 PrintPanel(PhoneWindow,PhoneList,Count);
  1604.  
  1605.                                 LT_UnlockWindow(PhoneWindow);
  1606.  
  1607.                                 LT_ShowWindow(Handle,TRUE);
  1608.  
  1609.                                 break;
  1610.  
  1611.                             case GAD_USEIT:
  1612.  
  1613.                                 if(Selected != ~0)
  1614.                                 {
  1615.                                     SaveConfig(Config,PrivateConfig);
  1616.  
  1617.                                     SaveConfig(Phonebook[Selected] -> Config,Config);
  1618.  
  1619.                                     strcpy(Password,Phonebook[Selected] -> Header -> Password);
  1620.                                     strcpy(UserName,Phonebook[Selected] -> Header -> UserName);
  1621.  
  1622.                                     ConfigSetup();
  1623.  
  1624.                                     Done = TRUE;
  1625.  
  1626.                                     ConfigChanged = FALSE;
  1627.                                 }
  1628.  
  1629.                                 break;
  1630.  
  1631.                             case GAD_NEWENTRY:
  1632.  
  1633.                                 LT_SetAttributes(Handle,GAD_NAMELIST,
  1634.                                     GTLV_Labels,    ~0,
  1635.                                 TAG_DONE);
  1636.  
  1637.                                 if(PhoneList)
  1638.                                 {
  1639.                                     DeletePhoneList(PhoneList);
  1640.  
  1641.                                     PhoneList = NULL;
  1642.                                 }
  1643.  
  1644.                                 if(NewPhoneEntry())
  1645.                                 {
  1646.                                     if(PhoneList = CreatePhoneList())
  1647.                                     {
  1648.                                         Selected = NumPhoneEntries - 1;
  1649.  
  1650.                                         LT_SetAttributes(Handle,GAD_NAMELIST,
  1651.                                             GTLV_Labels,        PhoneList,
  1652.                                             GTLV_Selected,        Selected,
  1653.                                             GTLV_Top,        Selected,
  1654.                                             GTLV_MakeVisible,    Selected,
  1655.                                         TAG_DONE);
  1656.  
  1657.                                         SetPanelState(Handle,PhoneList,Count,Selected,TRUE);
  1658.  
  1659.                                         LT_Activate(Handle,GAD_NAME);
  1660.  
  1661.                                         RebuildMenu = PhonebookChanged = TRUE;
  1662.                                     }
  1663.                                     else
  1664.                                         goto ClearList;
  1665.                                 }
  1666.                                 else
  1667.                                     goto ClearList;
  1668.  
  1669.                                 break;
  1670.  
  1671.                             case GAD_CLONEENTRY:
  1672.  
  1673.                                 if(Selected != ~0)
  1674.                                 {
  1675.                                     LT_SetAttributes(Handle,GAD_NAMELIST,
  1676.                                         GTLV_Labels,    ~0,
  1677.                                     TAG_DONE);
  1678.  
  1679.                                     if(PhoneList)
  1680.                                     {
  1681.                                         DeletePhoneList(PhoneList);
  1682.  
  1683.                                         PhoneList = NULL;
  1684.                                     }
  1685.  
  1686.                                     if(NewPhoneEntry())
  1687.                                     {
  1688.                                         if(PhoneList = CreatePhoneList())
  1689.                                         {
  1690.                                             LONG Tmp = Selected,i;
  1691.  
  1692.                                             Selected = NumPhoneEntries - 1;
  1693.  
  1694.                                             CopyMem(Phonebook[Tmp] -> Header,Phonebook[Selected] -> Header,sizeof(struct PhoneHeader));
  1695.  
  1696.                                             Phonebook[Selected] -> Header -> QuickMenu = FALSE;
  1697.  
  1698.                                             SPrintf(Phonebook[Selected] -> Node -> LocalName,"      %s",Phonebook[Selected] -> Header -> Name);
  1699.  
  1700.                                             FreeTimeDateList((struct List *)&Phonebook[Selected] -> TimeDateList);
  1701.  
  1702.                                             CopyTimeDateList((struct List *)&Phonebook[Tmp] -> TimeDateList,(struct List *)&Phonebook[Selected] -> TimeDateList,FALSE);
  1703.  
  1704.                                             LT_SetAttributes(Handle,GAD_NAMELIST,
  1705.                                                 GTLV_Labels,        PhoneList,
  1706.                                                 GTLV_Selected,        Selected,
  1707.                                                 GTLV_Top,        Selected,
  1708.                                                 GTLV_MakeVisible,    Selected,
  1709.                                             TAG_DONE);
  1710.  
  1711.                                             SetPanelState(Handle,PhoneList,Count,Selected,TRUE);
  1712.  
  1713.                                                 /* Allocate space for the config data. */
  1714.  
  1715.                                             for(i = PREF_SERIAL ; i <= PREF_TRANSFER ; i++)
  1716.                                             {
  1717.                                                 if(GetConfigEntry(Phonebook[Tmp] -> Config,i))
  1718.                                                     CreateConfigEntry(Phonebook[Selected] -> Config,i);
  1719.                                             }
  1720.  
  1721.                                                 /* Copy the data. */
  1722.  
  1723.                                             SaveConfig(Phonebook[Tmp] -> Config,Phonebook[Selected] -> Config);
  1724.  
  1725.                                             RebuildMenu = PhonebookChanged = TRUE;
  1726.  
  1727.                                             LT_SetAttributes(Handle,GAD_EDIT,
  1728.                                                 GTLV_Labels,    ~0,
  1729.                                             TAG_DONE);
  1730.  
  1731.                                             UpdateEditList(Phonebook[Selected] -> Config);
  1732.  
  1733.                                             LT_SetAttributes(Handle,GAD_EDIT,
  1734.                                                 GTLV_Labels,    EditList,
  1735.                                             TAG_DONE);
  1736.                                         }
  1737.                                         else
  1738.                                             goto ClearList;
  1739.                                     }
  1740.                                     else
  1741.                                         goto ClearList;
  1742.                                 }
  1743.  
  1744.                                 break;
  1745.  
  1746.                             case GAD_REMOVEENTRY:
  1747.  
  1748.                                 if(Selected != ~0)
  1749.                                 {
  1750.                                     if(Phonebook[Selected] == ChosenEntry)
  1751.                                         MyEasyRequest(PhoneWindow,LocaleString(MSG_PHONEPANEL_PHONE_ENTRY_IN_USE_TXT),LocaleString(MSG_GLOBAL_CONTINUE_TXT));
  1752.                                     else
  1753.                                     {
  1754.                                         RebuildMenu = PhonebookChanged = TRUE;
  1755.  
  1756.                                         LT_SetAttributes(Handle,GAD_NAMELIST,
  1757.                                             GTLV_Labels,~0,
  1758.                                         TAG_DONE);
  1759.  
  1760.                                         if(PhoneList)
  1761.                                         {
  1762.                                             DeletePhoneList(PhoneList);
  1763.  
  1764.                                             PhoneList = NULL;
  1765.                                         }
  1766.  
  1767.                                         if(Phonebook[Selected] -> Count != -1)
  1768.                                         {
  1769.                                             RemoveDialEntry(Selected);
  1770.  
  1771.                                             Count--;
  1772.                                         }
  1773.  
  1774.                                         RemPhoneEntry(Selected);
  1775.  
  1776.                                         if(NumPhoneEntries > 0)
  1777.                                         {
  1778.                                             if(PhoneList = CreatePhoneList())
  1779.                                             {
  1780.                                                 if(Selected == NumPhoneEntries)
  1781.                                                     Selected--;
  1782.  
  1783.                                                 LT_SetAttributes(Handle,GAD_NAMELIST,
  1784.                                                     GTLV_Labels,    PhoneList,
  1785.                                                     GTLV_Selected,    Selected,
  1786.                                                 TAG_DONE);
  1787.  
  1788.                                                 LT_SetAttributes(Handle,GAD_NAME,
  1789.                                                     GTST_String,    Phonebook[Selected] -> Header -> Name,
  1790.                                                     GA_Disabled,    FALSE,
  1791.                                                 TAG_DONE);
  1792.  
  1793.                                                 LT_SetAttributes(Handle,GAD_COMMENT,
  1794.                                                     GTST_String,    Phonebook[Selected] -> Header -> Comment,
  1795.                                                     GA_Disabled,    FALSE,
  1796.                                                 TAG_DONE);
  1797.  
  1798.                                                 LT_SetAttributes(Handle,GAD_PHONENUMBER,
  1799.                                                     GTST_String,    Phonebook[Selected] -> Header -> Number,
  1800.                                                     GA_Disabled,    FALSE,
  1801.                                                 TAG_DONE);
  1802.  
  1803.                                                 LT_SetAttributes(Handle,GAD_QUICKMENU,
  1804.                                                     GTCB_Checked,    Phonebook[Selected] -> Header -> QuickMenu,
  1805.                                                     GA_Disabled,    FALSE,
  1806.                                                 TAG_DONE);
  1807.  
  1808.                                                 LT_SetAttributes(Handle,GAD_EDIT,
  1809.                                                     GTLV_Labels,    ~0,
  1810.                                                 TAG_DONE);
  1811.  
  1812.                                                 UpdateEditList(Phonebook[Selected] -> Config);
  1813.  
  1814.                                                 LT_SetAttributes(Handle,GAD_EDIT,
  1815.                                                     GTLV_Labels,    EditList,
  1816.                                                     GA_Disabled,    FALSE,
  1817.                                                 TAG_DONE);
  1818.                                             }
  1819.                                             else
  1820.                                                 goto ClearList;
  1821.  
  1822.                                             SetPanelState(Handle,PhoneList,Count,Selected,TRUE);
  1823.                                         }
  1824.                                         else
  1825.                                         {
  1826. ClearList:                                        LT_SetAttributes(Handle,GAD_NAMELIST,
  1827.                                                 GTLV_Labels,    &EmptyList,
  1828.                                                 GTLV_Selected,    ~0,
  1829.                                             TAG_DONE);
  1830.  
  1831.                                             Selected = ~0;
  1832.  
  1833.                                             Count = 0;
  1834.  
  1835.                                             SetPanelState(Handle,PhoneList,Count,Selected,TRUE);
  1836.                                         }
  1837.                                     }
  1838.                                 }
  1839.  
  1840.                                 break;
  1841.  
  1842.                             case GAD_NAME:
  1843.  
  1844.                                 if(Selected != ~0)
  1845.                                 {
  1846.                                     strcpy(Phonebook[Selected] -> Header -> Name,(STRPTR)LT_GetAttributes(Handle,GAD_NAME,TAG_DONE));
  1847.  
  1848.                                     LT_SetAttributes(Handle,GAD_NAMELIST,
  1849.                                         GTLV_Labels,~0,
  1850.                                     TAG_DONE);
  1851.  
  1852.                                     if(PhoneList)
  1853.                                         DeletePhoneList(PhoneList);
  1854.  
  1855.                                     if(PhoneList = CreatePhoneList())
  1856.                                     {
  1857.                                         LT_SetAttributes(Handle,GAD_NAMELIST,
  1858.                                             GTLV_Labels,        PhoneList,
  1859.                                             GTLV_Selected,        Selected,
  1860.                                             GTLV_Top,        Selected,
  1861.                                             GTLV_MakeVisible,    Selected,
  1862.                                         TAG_DONE);
  1863.                                     }
  1864.  
  1865.                                     if(!Phonebook[Selected] -> Header -> Name[0])
  1866.                                     {
  1867.                                         LT_SetAttributes(Handle,GAD_NAMELIST,
  1868.                                             GTLV_Labels,    ~0,
  1869.                                         TAG_DONE);
  1870.  
  1871.                                         if(Phonebook[Selected] -> Count != -1)
  1872.                                         {
  1873.                                             RemoveDialEntry(Selected);
  1874.  
  1875.                                             Count--;
  1876.                                         }
  1877.  
  1878.                                         LT_SetAttributes(Handle,GAD_NAMELIST,
  1879.                                             GTLV_Labels,        PhoneList,
  1880.                                             GTLV_Selected,        Selected,
  1881.                                             GTLV_Top,        Selected,
  1882.                                             GTLV_MakeVisible,    Selected,
  1883.                                         TAG_DONE);
  1884.                                     }
  1885.  
  1886.                                     SetPanelState(Handle,PhoneList,Count,Selected,TRUE);
  1887.  
  1888.                                     RebuildMenu = PhonebookChanged = TRUE;
  1889.  
  1890.                                     if(MsgCode == '\r')
  1891.                                         LT_Activate(Handle,GAD_COMMENT);
  1892.                                 }
  1893.  
  1894.                                 break;
  1895.  
  1896.                             case GAD_COMMENT:
  1897.  
  1898.                                 if(Selected != ~0)
  1899.                                 {
  1900.                                     strcpy(Phonebook[Selected] -> Header -> Comment,(STRPTR)LT_GetAttributes(Handle,GAD_COMMENT,TAG_DONE));
  1901.  
  1902.                                     PhonebookChanged = TRUE;
  1903.  
  1904.                                     if(MsgCode == '\r')
  1905.                                         LT_Activate(Handle,GAD_PHONENUMBER);
  1906.                                 }
  1907.  
  1908.                                 break;
  1909.  
  1910.                             case GAD_QUICKMENU:
  1911.  
  1912.                                 if(Selected != ~0)
  1913.                                 {
  1914.                                     if(Phonebook[Selected] -> Header -> QuickMenu != MsgCode)
  1915.                                     {
  1916.                                         Phonebook[Selected] -> Header -> QuickMenu = MsgCode;
  1917.  
  1918.                                         RebuildMenu = PhonebookChanged = TRUE;
  1919.                                     }
  1920.                                 }
  1921.  
  1922.                                 break;
  1923.  
  1924.                             case GAD_PHONENUMBER:
  1925.  
  1926.                                 if(Selected != ~0)
  1927.                                 {
  1928.                                     strcpy(Phonebook[Selected] -> Header -> Number,(STRPTR)LT_GetAttributes(Handle,GAD_PHONENUMBER,TAG_DONE));
  1929.  
  1930.                                     PhonebookChanged = TRUE;
  1931.  
  1932.                                     if(!Phonebook[Selected] -> Header -> Number[0])
  1933.                                     {
  1934.                                         LT_SetAttributes(Handle,GAD_NAMELIST,
  1935.                                             GTLV_Labels,    ~0,
  1936.                                         TAG_DONE);
  1937.  
  1938.                                         if(Phonebook[Selected] -> Count != -1)
  1939.                                         {
  1940.                                             RemoveDialEntry(Selected);
  1941.  
  1942.                                             Count--;
  1943.                                         }
  1944.  
  1945.                                         LT_SetAttributes(Handle,GAD_NAMELIST,
  1946.                                             GTLV_Labels,        PhoneList,
  1947.                                         TAG_DONE);
  1948.                                     }
  1949.  
  1950.                                     SetPanelState(Handle,PhoneList,Count,Selected,TRUE);
  1951.                                 }
  1952.  
  1953.                                 break;
  1954.  
  1955.                             case GAD_LOADLIST:
  1956.  
  1957.                                 LT_LockWindow(PhoneWindow);
  1958.  
  1959.                                 if(ChosenEntry)
  1960.                                     MyEasyRequest(PhoneWindow,LocaleString(MSG_PHONEPANEL_PHONE_ENTRY_IN_USE_LOAD_TXT),LocaleString(MSG_GLOBAL_CONTINUE_TXT));
  1961.                                 else
  1962.                                 {
  1963.                                     SplitFileName(LastPhone,&DummyChar,DummyBuffer);
  1964.  
  1965.                                     if(FileRequest = GetFile(PhoneWindow,LocaleString(MSG_PHONEPANEL_LOAD_PHONEBOOK_TXT),DummyBuffer,DummyChar,DummyBuffer,"#?.prefs",FALSE,FALSE,FALSE,LocaleString(MSG_GLOBAL_LOAD_TXT),TRUE))
  1966.                                     {
  1967.                                         LT_SetAttributes(Handle,GAD_NAMELIST,
  1968.                                             GTLV_Labels,    ~0,
  1969.                                             GTLV_Selected,    ~0,
  1970.                                         TAG_DONE);
  1971.  
  1972.                                         if(PhoneList)
  1973.                                             DeletePhoneList(PhoneList);
  1974.  
  1975.                                         if(!LoadPhonebook(DummyBuffer))
  1976.                                             ShowError(PhoneWindow,ERR_LOAD_ERROR,IoErr(),DummyBuffer);
  1977.                                         else
  1978.                                         {
  1979.                                             strcpy(LastPhone,DummyBuffer);
  1980.  
  1981.                                             PhonebookChanged = FALSE;
  1982.  
  1983.                                             RebuildMenu = TRUE;
  1984.                                         }
  1985.  
  1986.                                         if(PhoneList = CreatePhoneList())
  1987.                                         {
  1988.                                             LT_SetAttributes(Handle,GAD_NAMELIST,
  1989.                                                 GTLV_Labels,    PhoneList,
  1990.                                                 GA_Disabled,    FALSE,
  1991.                                             TAG_DONE);
  1992.  
  1993.                                             FreeDialList(TRUE);
  1994.                                         }
  1995.                                         else
  1996.                                         {
  1997.                                             LT_SetAttributes(Handle,GAD_NAMELIST,
  1998.                                                 GTLV_Labels,    &EmptyList,
  1999.                                                 GA_Disabled,    TRUE,
  2000.                                             TAG_DONE);
  2001.                                         }
  2002.  
  2003.                                         Selected = ~0;
  2004.  
  2005.                                         Count = 0;
  2006.  
  2007.                                         SetPanelState(Handle,PhoneList,Count,Selected,TRUE);
  2008.  
  2009.                                         FreeAslRequest(FileRequest);
  2010.                                     }
  2011.                                 }
  2012.  
  2013.                                 LT_UnlockWindow(PhoneWindow);
  2014.  
  2015.                                 break;
  2016.  
  2017.                             case GAD_SORTLIST:
  2018.  
  2019.                                 if(NumPhoneEntries > 1)
  2020.                                 {
  2021.                                     RebuildMenu = PhonebookChanged = TRUE;
  2022.  
  2023.                                     LT_LockWindow(PhoneWindow);
  2024.  
  2025.                                     LT_SetAttributes(Handle,GAD_NAMELIST,
  2026.                                         GTLV_Labels,    ~0,
  2027.                                         GTLV_Selected,    ~0,
  2028.                                     TAG_DONE);
  2029.  
  2030.                                     Selected = ~0;
  2031.  
  2032.                                     SetPanelState(Handle,PhoneList,Count,Selected,TRUE);
  2033.  
  2034.                                     if(PhoneList)
  2035.                                         DeletePhoneList(PhoneList);
  2036.  
  2037.                                     SortPhoneEntries();
  2038.  
  2039.                                     if(PhoneList = CreatePhoneList())
  2040.                                     {
  2041.                                         LT_SetAttributes(Handle,GAD_NAMELIST,
  2042.                                             GTLV_Labels,    PhoneList,
  2043.                                             GTLV_Selected,    ~0,
  2044.                                         TAG_DONE);
  2045.                                     }
  2046.                                     else
  2047.                                         Count = 0;
  2048.  
  2049.                                     LT_UnlockWindow(PhoneWindow);
  2050.                                 }
  2051.  
  2052.                                 break;
  2053.  
  2054.                             case GAD_SAVELIST:
  2055.  
  2056.                                 if(NumPhoneEntries)
  2057.                                 {
  2058.                                     SplitFileName(LastPhone,&DummyChar,DummyBuffer);
  2059.  
  2060.                                     LT_LockWindow(PhoneWindow);
  2061.  
  2062.                                     if(FileRequest = GetFile(PhoneWindow,LocaleString(MSG_PHONEPANEL_SAVE_PHONEBOOK_TXT),DummyBuffer,DummyChar,DummyBuffer,"#?.prefs",TRUE,FALSE,FALSE,LocaleString(MSG_GLOBAL_SAVE_TXT),TRUE))
  2063.                                     {
  2064.                                         if(!SavePhonebook(DummyBuffer))
  2065.                                             ShowError(PhoneWindow,ERR_SAVE_ERROR,IoErr(),DummyBuffer);
  2066.                                         else
  2067.                                         {
  2068.                                             strcpy(LastPhone,DummyBuffer);
  2069.  
  2070.                                             PhonebookChanged = FALSE;
  2071.                                         }
  2072.  
  2073.                                         FreeAslRequest(FileRequest);
  2074.                                     }
  2075.  
  2076.                                     LT_UnlockWindow(PhoneWindow);
  2077.                                 }
  2078.  
  2079.                                 break;
  2080.  
  2081.                             case GAD_COPYCONFIG:
  2082.  
  2083.                                 LT_LockWindow(PhoneWindow);
  2084.  
  2085.                                 if(Selected == ~0)
  2086.                                     PhonebookChanged |= CopyPanel(NULL,Count > 0);
  2087.                                 else
  2088.                                 {
  2089.                                     PhonebookChanged |= CopyPanel(Phonebook[Selected] -> Config,Count > 0);
  2090.  
  2091.                                     LT_SetAttributes(Handle,GAD_EDIT,
  2092.                                         GTLV_Labels,    ~0,
  2093.                                     TAG_DONE);
  2094.  
  2095.                                     UpdateEditList(Phonebook[Selected] -> Config);
  2096.  
  2097.                                     LT_SetAttributes(Handle,GAD_EDIT,
  2098.                                         GTLV_Labels,    EditList,
  2099.                                     TAG_DONE);
  2100.                                 }
  2101.  
  2102.                                 LT_UnlockWindow(PhoneWindow);
  2103.  
  2104.                                 LT_ShowWindow(Handle,TRUE);
  2105.  
  2106.                                 break;
  2107.  
  2108.                             case GAD_PASSWORD:
  2109.  
  2110.                                 LT_LockWindow(PhoneWindow);
  2111.  
  2112.                                 {
  2113.                                     UBYTE SomeBuffer[30];
  2114.  
  2115.                                     memset(SomeBuffer,0,21);
  2116.  
  2117.                                     PhonePasswordUsed = FALSE;
  2118.  
  2119.                                     if(GetString(FALSE,TRUE,21,LocaleString(MSG_PHONEPANEL_PLEASE_ENTER_PASSWORD_TXT),SomeBuffer))
  2120.                                     {
  2121.                                         SomeBuffer[20] = 0;
  2122.  
  2123.                                         PhonebookChanged = TRUE;
  2124.  
  2125.                                         if(SomeBuffer[0])
  2126.                                         {
  2127.                                             UBYTE OtherBuffer[30];
  2128.  
  2129.                                             memset(OtherBuffer,0,21);
  2130.  
  2131.                                             if(GetString(FALSE,TRUE,21,LocaleString(MSG_PHONEPANEL_PLEASE_REPEAT_PASSWORD_TXT),OtherBuffer))
  2132.                                             {
  2133.                                                 OtherBuffer[20] = 0;
  2134.  
  2135.                                                 if(!memcmp(OtherBuffer,SomeBuffer,20))
  2136.                                                 {
  2137.                                                     Encrypt(OtherBuffer,20,PhonePassword,OtherBuffer,strlen(OtherBuffer));
  2138.  
  2139.                                                     PhonePasswordUsed = TRUE;
  2140.                                                 }
  2141.                                                 else
  2142.                                                     MyEasyRequest(PhoneWindow,LocaleString(MSG_PHONEPANEL_ERROR_ENTERING_PASSWORD_TXT),LocaleString(MSG_GLOBAL_CONTINUE_TXT));
  2143.                                             }
  2144.                                             else
  2145.                                                 MyEasyRequest(PhoneWindow,LocaleString(MSG_PHONEPANEL_ERROR_ENTERING_PASSWORD_TXT),LocaleString(MSG_GLOBAL_CONTINUE_TXT));
  2146.                                         }
  2147.                                     }
  2148.                                 }
  2149.  
  2150.                                 LT_ShowWindow(Handle,TRUE);
  2151.  
  2152.                                 LT_UnlockWindow(PhoneWindow);
  2153.                                 break;
  2154.  
  2155.                             case GAD_EDIT:
  2156.  
  2157.                                 if(Selected != ~0)
  2158.                                 {
  2159.                                     LT_LockWindow(PhoneWindow);
  2160.  
  2161.                                     switch(MsgCode)
  2162.                                     {
  2163.                                         case EDIT_RATES:
  2164.  
  2165.                                             if(Phonebook[Selected] == ChosenEntry)
  2166.                                                 MyEasyRequest(PhoneWindow,LocaleString(MSG_PHONEPANEL_PHONE_ENTRY_IN_USE_EDIT_TXT),LocaleString(MSG_GLOBAL_CONTINUE_TXT),DummyBuffer);
  2167.                                             else
  2168.                                             {
  2169.                                                 LT_SetAttributes(Handle,GAD_NAMELIST,
  2170.                                                     GTLV_Labels,    ~0,
  2171.                                                 TAG_DONE);
  2172.  
  2173.                                                 PhonebookChanged |= RatePanel(PhoneWindow,PhoneList,Phonebook[Selected],NULL);
  2174.  
  2175.                                                 LT_SetAttributes(Handle,GAD_NAMELIST,
  2176.                                                     GTLV_Labels,    PhoneList,
  2177.                                                 TAG_DONE);
  2178.                                             }
  2179.  
  2180.                                             break;
  2181.  
  2182.                                         case EDIT_PASSWORD:
  2183.  
  2184.                                             PhonebookChanged |= PasswordUserPanel(Phonebook[Selected]);
  2185.                                             break;
  2186.  
  2187.                                         default:
  2188.  
  2189.                                             PhonebookChanged |= EditConfig(Phonebook[Selected] -> Config,MsgCode,MsgQualifier,PhoneWindow);
  2190.                                             break;
  2191.                                     }
  2192.  
  2193.                                     LT_SetAttributes(Handle,GAD_EDIT,
  2194.                                         GTLV_Labels,    ~0,
  2195.                                     TAG_DONE);
  2196.  
  2197.                                     UpdateEditList(Phonebook[Selected] -> Config);
  2198.  
  2199.                                     LT_SetAttributes(Handle,GAD_EDIT,
  2200.                                         GTLV_Labels,    EditList,
  2201.                                     TAG_DONE);
  2202.  
  2203.                                     LT_UnlockWindow(PhoneWindow);
  2204.  
  2205.                                     LT_ShowWindow(Handle,TRUE);
  2206.                                 }
  2207.  
  2208.                                 break;
  2209.  
  2210.                             case GAD_DIALLIST:
  2211.  
  2212.                                 if(!Count && Selected != ~0)
  2213.                                 {
  2214.                                     LT_SetAttributes(Handle,GAD_NAMELIST,
  2215.                                         GTLV_Labels,    ~0,
  2216.                                     TAG_DONE);
  2217.  
  2218.                                     SPrintf(Phonebook[Selected] -> Node -> LocalName,"      %s",Phonebook[Selected] -> Header -> Name);
  2219.  
  2220.                                     Phonebook[Selected] -> Count = Count++;
  2221.  
  2222.                                     LT_SetAttributes(Handle,GAD_NAMELIST,
  2223.                                         GTLV_Labels,    PhoneList,
  2224.                                     TAG_DONE);
  2225.                                 }
  2226.  
  2227.                                 if(Count > 0)
  2228.                                 {
  2229.                                     DialTheList    = TRUE;
  2230.                                     Done        = TRUE;
  2231.                                 }
  2232.  
  2233.                                 break;
  2234.                         }
  2235.                     }
  2236.  
  2237.                     if(MsgClass == IDCMP_IDCMPUPDATE && MsgGadgetID == GAD_NAMELIST)
  2238.                     {
  2239.                         if(!(MsgQualifier & (IEQUALIFIER_LSHIFT | IEQUALIFIER_RSHIFT)) && !Online && Phonebook[MsgCode] -> Header -> Number[0])
  2240.                         {
  2241.                             Selected = MsgCode;
  2242.  
  2243.                             LT_SetAttributes(Handle,GAD_NAMELIST,
  2244.                                 GTLV_Labels,    ~0,
  2245.                             TAG_DONE);
  2246.  
  2247.                             Count = 1;
  2248.  
  2249.                             for(i = 0 ; i < NumPhoneEntries ; i++)
  2250.                             {
  2251.                                 if(i != Selected)
  2252.                                 {
  2253.                                     SPrintf(Phonebook[i] -> Node -> LocalName,"      %s",Phonebook[i] -> Header -> Name);
  2254.  
  2255.                                     Phonebook[i] -> Count = -1;
  2256.                                 }
  2257.                                 else
  2258.                                 {
  2259.                                     SPrintf(Phonebook[i] -> Node -> LocalName,"  1 - %s",Phonebook[i] -> Header -> Name);
  2260.  
  2261.                                     Phonebook[i] -> Count = 0;
  2262.                                 }
  2263.                             }
  2264.  
  2265.                             DialTheList    = TRUE;
  2266.                             Done        = TRUE;
  2267.  
  2268.                             LT_PressButton(Handle,GAD_DIALLIST);
  2269.                         }
  2270.                     }
  2271.                 }
  2272.             }
  2273.             while(!Done);
  2274.  
  2275.             PopWindow();
  2276.         }
  2277.  
  2278.         LT_DeleteHandle(Handle);
  2279.     }
  2280.  
  2281.     if(PhonebookChanged)
  2282.         RebuildMenu = TRUE;
  2283.  
  2284.     FreeDialList(TRUE);
  2285.  
  2286.     if(PhoneList)
  2287.     {
  2288.         if(Count > 0)
  2289.         {
  2290.             TempNode = (struct PhoneNode *)PhoneList -> lh_Head;
  2291.  
  2292.             while(TempNode -> VanillaNode . ln_Succ)
  2293.             {
  2294.                 if(TempNode -> Entry -> Count != -1 && TempNode -> Entry -> Header -> Number[0])
  2295.                     SortToList(TempNode);
  2296.  
  2297.                 TempNode = (struct PhoneNode *)TempNode -> VanillaNode . ln_Succ;
  2298.             }
  2299.  
  2300.             if(!DialList)
  2301.                 DialTheList = FALSE;
  2302.         }
  2303.  
  2304.         DeletePhoneList(PhoneList);
  2305.     }
  2306.  
  2307.     return(DialTheList);
  2308. }
  2309.