home *** CD-ROM | disk | FTP | other *** search
/ Network PC / Network PC.iso / amiga utilities / communication / bbs / termv4.6 / extras / source / term-source.lha / PatternPanel.c < prev    next >
Encoding:
C/C++ Source or Header  |  1996-03-18  |  29.5 KB  |  1,278 lines

  1. /*
  2. **    PatternPanel.c
  3. **
  4. **    Editing panel for phone number patterns
  5. **
  6. **    Copyright © 1990-1996 by Olaf `Olsen' Barthel
  7. **        All Rights Reserved
  8. **
  9. ** :ts=4
  10. */
  11.  
  12. #ifndef _GLOBAL_H
  13. #include "Global.h"
  14. #endif
  15.  
  16. enum    {    GAD_LIST,GAD_COMMENT,GAD_PATTERN,
  17.             GAD_TOP,GAD_UP,GAD_DOWN,GAD_END,
  18.             GAD_NEW,GAD_REMOVE,GAD_CLEAR,
  19.             GAD_EDIT,GAD_COPY,
  20.             GAD_LOAD,GAD_SAVE,GAD_USE,GAD_CLOSE,GAD_DISCARD
  21.         };
  22.  
  23. BOOL
  24. PatternPanelConfig(struct List *PatternList,STRPTR LastPattern,BOOLEAN *ChangedPtr)
  25. {
  26.     STATIC WORD ButtonID[] =
  27.     {
  28.         MSG_FASTMACROPANEL_NEW_GAD,
  29.         MSG_GLOBAL_REMOVE_GAD,
  30.         MSG_UPLOADQUEUE_CLEAR_TXT,
  31.         MSG_V36_0043,
  32.         MSG_COPY_GAD
  33.     };
  34.  
  35.     struct LayoutHandle *Handle;
  36.     struct PatternNode    *Node;
  37.     LONG                 ListCount;
  38.     struct List         *PhoneList;
  39.     LONG                 i,Max,Len;
  40.     LONG                 MaxWidth,MaxHeight;
  41.     BOOL                 Changed = FALSE;
  42.  
  43.     PhoneList = CreatePhoneList();
  44.  
  45.     ListCount = GetListSize(PatternList);
  46.  
  47.     if(Handle = LT_CreateHandleTags(Window -> WScreen,
  48.         LH_LocaleHook,    &LocaleHook,
  49.     TAG_DONE))
  50.     {
  51.         struct Window    *LocalWindow;
  52.         struct IBox     Bounds;
  53.  
  54.         for(i = Max = 0 ; i < NumElements(ButtonID) ; i++)
  55.         {
  56.             if((Len = LT_LabelChars(Handle,LocaleString(ButtonID[i]))) > Max)
  57.                 Max = Len;
  58.         }
  59.  
  60.         LT_New(Handle,
  61.             LA_Type,    VERTICAL_KIND,
  62.         TAG_DONE);
  63.         {
  64.             LT_New(Handle,
  65.                 LA_Type,        VERTICAL_KIND,
  66.                 LA_LabelID,     MSG_AREACODE_GROUPS_TXT,
  67.             TAG_DONE);
  68.             {
  69.                 MaxWidth = MaxHeight = 0;
  70.  
  71.                 if(PatternList)
  72.                 {
  73.                     struct Node *Node;
  74.                     LONG Len;
  75.  
  76.                     for(Node = PatternList -> lh_Head ; Node -> ln_Succ ; Node = Node -> ln_Succ)
  77.                     {
  78.                         Len = strlen(Node -> ln_Name);
  79.  
  80.                         if(Len > MaxWidth)
  81.                             MaxWidth = Len;
  82.  
  83.                         MaxHeight++;
  84.                     }
  85.                 }
  86.  
  87.                 if(MaxWidth < 30)
  88.                     MaxWidth = 30;
  89.  
  90.                 if(MaxHeight < 10)
  91.                     MaxHeight = 10;
  92.                 else
  93.                 {
  94.                     if(MaxHeight > 20)
  95.                         MaxHeight = 20;
  96.                 }
  97.  
  98.                 LT_New(Handle,
  99.                     LA_Type,        LISTVIEW_KIND,
  100.                     LA_LabelID,     MSG_AREACODE_GROUPS_GAD,
  101.                     LA_LabelPlace,    PLACE_LEFT,
  102.                     LA_Chars,        30,
  103.                     LA_Lines,        10,
  104.                     LA_ID,            GAD_LIST,
  105.                     LALV_CursorKey, TRUE,
  106.                     LALV_ResizeX,    TRUE,
  107.                     LALV_ResizeY,    TRUE,
  108.                     LALV_MaxGrowY,    MaxHeight,
  109.                     LALV_MaxGrowX,    MaxWidth,
  110.                     GTLV_Labels,    PatternList,
  111.  
  112.                     Kick30 ? LALV_Link : TAG_IGNORE, NIL_LINK,
  113.                 TAG_DONE);
  114.  
  115.                 LT_New(Handle,
  116.                     LA_Type,        STRING_KIND,
  117.                     LA_LabelID,     MSG_AREACODE_NAME_GAD,
  118.                     LA_ID,            GAD_COMMENT,
  119.                     GTST_MaxChars,    39,
  120.                     GA_Disabled,    TRUE,
  121.                 TAG_DONE);
  122.  
  123.                 LT_New(Handle,
  124.                     LA_Type,        STRING_KIND,
  125.                     LA_LabelID,     MSG_AREACODE_PATTERN_GAD,
  126.                     LA_ID,            GAD_PATTERN,
  127.                     GTST_MaxChars,    255,
  128.                     GA_Disabled,    TRUE,
  129.                 TAG_DONE);
  130.  
  131.                 LT_EndGroup(Handle);
  132.             }
  133.  
  134.             LT_New(Handle,
  135.                 LA_Type,        HORIZONTAL_KIND,
  136.                 LA_LabelID,     MSG_V36_0038,
  137.                 LAGR_SameSize,    TRUE,
  138.             TAG_DONE);
  139.             {
  140.                 LT_New(Handle,
  141.                     LA_Type,            TAPEDECK_KIND,
  142.                     LATD_ButtonType,    TDBT_PREVIOUS,
  143.                     LATD_Smaller,        TRUE,
  144.                     LA_ID,                GAD_TOP,
  145.                     LA_NoKey,            TRUE,
  146.                     GA_Disabled,        TRUE,
  147.                 TAG_DONE);
  148.  
  149.                 LT_New(Handle,
  150.                     LA_Type,            TAPEDECK_KIND,
  151.                     LATD_ButtonType,    TDBT_REWIND,
  152.                     LATD_Smaller,        TRUE,
  153.                     LA_ID,                GAD_UP,
  154.                     LA_NoKey,            TRUE,
  155.                     GA_Disabled,        TRUE,
  156.                 TAG_DONE);
  157.  
  158.                 LT_New(Handle,
  159.                     LA_Type,            TAPEDECK_KIND,
  160.                     LATD_ButtonType,    TDBT_PLAY,
  161.                     LATD_Smaller,        TRUE,
  162.                     LA_ID,                GAD_DOWN,
  163.                     LA_NoKey,            TRUE,
  164.                     GA_Disabled,        TRUE,
  165.                 TAG_DONE);
  166.  
  167.                 LT_New(Handle,
  168.                     LA_Type,            TAPEDECK_KIND,
  169.                     LATD_ButtonType,    TDBT_NEXT,
  170.                     LATD_Smaller,        TRUE,
  171.                     LA_ID,                GAD_END,
  172.                     LA_NoKey,            TRUE,
  173.                     GA_Disabled,        TRUE,
  174.                 TAG_DONE);
  175.  
  176.                 LT_EndGroup(Handle);
  177.             }
  178.  
  179.             LT_New(Handle,
  180.                 LA_Type,        HORIZONTAL_KIND,
  181.                 LA_LabelID,     MSG_V36_0043,
  182.                 LAGR_SameSize,    TRUE,
  183.             TAG_DONE);
  184.             {
  185.                 LT_New(Handle,
  186.                     LA_Type,        BUTTON_KIND,
  187.                     LA_LabelID,     MSG_FASTMACROPANEL_NEW_GAD,
  188.                     LA_ID,            GAD_NEW,
  189.                     LA_Chars,        Max,
  190.                 TAG_DONE);
  191.  
  192.                 LT_New(Handle,
  193.                     LA_Type,        BUTTON_KIND,
  194.                     LA_LabelID,     MSG_GLOBAL_REMOVE_GAD,
  195.                     LA_ID,            GAD_REMOVE,
  196.                     GA_Disabled,    TRUE,
  197.                     LA_Chars,        Max,
  198.                 TAG_DONE);
  199.  
  200.                 LT_New(Handle,
  201.                     LA_Type,        BUTTON_KIND,
  202.                     LA_LabelID,     MSG_COPY_GAD,
  203.                     LA_ID,            GAD_COPY,
  204.                     GA_Disabled,    TRUE,
  205.                     LA_Chars,        Max,
  206.                 TAG_DONE);
  207.  
  208.                 LT_New(Handle,
  209.                     LA_Type,        BUTTON_KIND,
  210.                     LA_LabelID,     MSG_UPLOADQUEUE_CLEAR_TXT,
  211.                     LA_ID,            GAD_CLEAR,
  212.                     GA_Disabled,    PatternList -> lh_Head -> ln_Succ == NULL,
  213.                     LA_Chars,        Max,
  214.                 TAG_DONE);
  215.  
  216.                 LT_New(Handle,
  217.                     LA_Type,        BUTTON_KIND,
  218.                     LA_LabelID,     MSG_V36_0043,
  219.                     LA_ID,            GAD_EDIT,
  220.                     GA_Disabled,    TRUE,
  221.                     LA_Chars,        Max,
  222.                 TAG_DONE);
  223.  
  224.                 LT_EndGroup(Handle);
  225.             }
  226.  
  227.             LT_New(Handle,
  228.                 LA_Type,    VERTICAL_KIND,
  229.             TAG_DONE);
  230.             {
  231.                 LT_New(Handle,LA_Type,XBAR_KIND,LAXB_FullSize,TRUE,TAG_DONE);
  232.  
  233.                 LT_EndGroup(Handle);
  234.             }
  235.  
  236.             LT_New(Handle,LA_Type,HORIZONTAL_KIND,
  237.                 LAGR_SameSize,    TRUE,
  238.                 LAGR_Spread,    TRUE,
  239.                 LA_ExtraSpace,    TRUE,
  240.             TAG_DONE);
  241.             {
  242.                 LT_New(Handle,
  243.                     LA_Type,        BUTTON_KIND,
  244.                     LA_LabelID,     MSG_GLOBAL_USE_GAD,
  245.                     LA_ID,            GAD_USE,
  246.                     LABT_ReturnKey, TRUE,
  247.                     LABT_ExtraFat,    TRUE,
  248.                 TAG_DONE);
  249.  
  250.                 LT_New(Handle,
  251.                     LA_Type,        BUTTON_KIND,
  252.                     LA_LabelID,     MSG_GLOBAL_LOAD_GAD,
  253.                     LA_ID,            GAD_LOAD,
  254.                     GA_Disabled,    ChosenPattern != NULL,
  255.                 TAG_DONE);
  256.  
  257.                 LT_New(Handle,
  258.                     LA_Type,        BUTTON_KIND,
  259.                     LA_LabelID,     MSG_GLOBAL_SAVE_GAD,
  260.                     LA_ID,            GAD_SAVE,
  261.                     GA_Disabled,    PatternList -> lh_Head -> ln_Succ == NULL,
  262.                 TAG_DONE);
  263.  
  264.                 LT_New(Handle,
  265.                     LA_Type,        BUTTON_KIND,
  266.                     LA_LabelID,     MSG_DISCARD_GAD,
  267.                     LA_ID,            GAD_DISCARD,
  268.                 TAG_DONE);
  269.  
  270.                 LT_New(Handle,
  271.                     LA_Type,        BUTTON_KIND,
  272.                     LA_LabelID,     MSG_GLOBAL_CLOSE_TXT,
  273.                     LA_ID,            GAD_CLOSE,
  274.                     LABT_EscKey,    TRUE,
  275.                 TAG_DONE);
  276.  
  277.                 LT_EndGroup(Handle);
  278.             }
  279.  
  280.             LT_EndGroup(Handle);
  281.         }
  282.  
  283.         if(Screen && Window)
  284.         {
  285.             Bounds . Left    = Window -> LeftEdge;
  286.             Bounds . Top    = Window -> TopEdge;
  287.             Bounds . Width    = Window -> Width;
  288.             Bounds . Height = Window -> Height;
  289.         }
  290.  
  291.         if(LocalWindow = LT_Build(Handle,
  292.             LAWN_TitleID,        MSG_AREACODE_GROUPS_TITLE,
  293.             LAWN_IDCMP,        IDCMP_CLOSEWINDOW,
  294.             LAWN_HelpHook,        &GuideHook,
  295.             LAWN_Parent,        Window,
  296.             WA_DepthGadget,     TRUE,
  297.             WA_CloseGadget,     TRUE,
  298.             WA_DragBar,         TRUE,
  299.             WA_RMBTrap,         TRUE,
  300.             WA_Activate,        TRUE,
  301.             WA_SimpleRefresh,    TRUE,
  302.  
  303.             Screen ? LAWN_Bounds : TAG_IGNORE, &Bounds,
  304.         TAG_DONE))
  305.         {
  306.             struct IntuiMessage     *Message;
  307.             BOOL                      Done = FALSE;
  308.             ULONG                     MsgClass;
  309.             UWORD                     MsgCode;
  310.             struct Gadget            *MsgGadget;
  311.  
  312.             struct PatternNode        *Selected = NULL;
  313.             ULONG                     Offset = 0;
  314.  
  315.             UBYTE                     DummyBuffer[MAX_FILENAME_LENGTH],
  316.                                     *DummyChar;
  317.             struct FileRequester    *FileRequest;
  318.             LONG                     Error;
  319.  
  320.             GuideContext(CONTEXT_AREA_CODES);
  321.  
  322.             PushWindow(LocalWindow);
  323.  
  324.             do
  325.             {
  326.                 if(Wait(PORTMASK(LocalWindow -> UserPort) | SIG_BREAK) & SIG_BREAK)
  327.                     break;
  328.  
  329.                 while(Message = (struct IntuiMessage *)LT_GetIMsg(Handle))
  330.                 {
  331.                     MsgClass        = Message -> Class;
  332.                     MsgCode         = Message -> Code;
  333.                     MsgGadget        = (struct Gadget *)Message -> IAddress;
  334.  
  335.                     LT_ReplyIMsg(Message);
  336.  
  337.                     if(MsgClass == IDCMP_CLOSEWINDOW)
  338.                         Done = TRUE;
  339.  
  340.                     if(MsgClass == IDCMP_IDCMPUPDATE)
  341.                     {
  342.                         if(MsgGadget -> GadgetID == GAD_LIST)
  343.                         {
  344.                             if(Selected)
  345.                             {
  346.                                 strcpy(Selected->Pattern,LT_GetString(Handle,GAD_PATTERN));
  347.                                 strcpy(Selected->Comment,LT_GetString(Handle,GAD_COMMENT));
  348.                             }
  349.  
  350.                             if(!Selected)
  351.                             {
  352.                                 if(Selected = (struct PatternNode *)GetListNode(MsgCode,(struct List *)PatternList))
  353.                                 {
  354.                                     Offset = MsgCode;
  355.  
  356.                                     LT_SetAttributes(Handle,GAD_COMMENT,
  357.                                         GTST_String,    Selected -> Comment,
  358.                                         GA_Disabled,    FALSE,
  359.                                     TAG_DONE);
  360.  
  361.                                     LT_SetAttributes(Handle,GAD_PATTERN,
  362.                                         GTST_String,    Selected -> Pattern,
  363.                                         GA_Disabled,    FALSE,
  364.                                     TAG_DONE);
  365.  
  366.                                     LT_SetAttributes(Handle,GAD_REMOVE,
  367.                                         GA_Disabled,    &Selected -> List == ChosenPattern,
  368.                                     TAG_DONE);
  369.  
  370.                                     LT_SetAttributes(Handle,GAD_EDIT,
  371.                                         GA_Disabled,    &Selected -> List == ChosenPattern,
  372.                                     TAG_DONE);
  373.  
  374.                                     LT_SetAttributes(Handle,GAD_COPY,
  375.                                         GA_Disabled,    &Selected -> List == ChosenPattern,
  376.                                     TAG_DONE);
  377.  
  378.                                     LT_SetAttributes(Handle,GAD_TOP,
  379.                                         GA_Disabled,    !Selected -> Node . ln_Pred -> ln_Pred,
  380.                                     TAG_DONE);
  381.  
  382.                                     LT_SetAttributes(Handle,GAD_UP,
  383.                                         GA_Disabled,    !Selected -> Node . ln_Pred -> ln_Pred,
  384.                                     TAG_DONE);
  385.  
  386.                                     LT_SetAttributes(Handle,GAD_DOWN,
  387.                                         GA_Disabled,    !Selected -> Node . ln_Succ -> ln_Succ,
  388.                                     TAG_DONE);
  389.  
  390.                                     LT_SetAttributes(Handle,GAD_END,
  391.                                         GA_Disabled,    !Selected -> Node . ln_Succ -> ln_Succ,
  392.                                     TAG_DONE);
  393.                                 }
  394.                             }
  395.  
  396.                             if(Selected && (&Selected -> List != ChosenPattern))
  397.                             {
  398.                                 LT_PressButton(Handle,GAD_EDIT);
  399.  
  400.                                 LT_LockWindow(LocalWindow);
  401.  
  402.                                 if(RatePanel(LocalWindow,PhoneList,NULL,&Selected -> List))
  403.                                 {
  404.                                     Changed = TRUE;
  405.  
  406.                                     if(ChangedPtr)
  407.                                         *ChangedPtr = TRUE;
  408.                                 }
  409.  
  410.                                 LT_UnlockWindow(LocalWindow);
  411.                             }
  412.                         }
  413.                     }
  414.  
  415.                     if(MsgClass == IDCMP_GADGETUP)
  416.                     {
  417.                         switch(MsgGadget -> GadgetID)
  418.                         {
  419.                             case GAD_CLOSE:
  420.                             case GAD_USE:
  421.  
  422.                                 if(Selected)
  423.                                 {
  424.                                     strcpy(Selected->Pattern,LT_GetString(Handle,GAD_PATTERN));
  425.                                     strcpy(Selected->Comment,LT_GetString(Handle,GAD_COMMENT));
  426.                                 }
  427.  
  428.                                 Done = TRUE;
  429.                                 break;
  430.  
  431.                             case GAD_TOP:
  432.  
  433.                                 LT_SetAttributes(Handle,GAD_LIST,
  434.                                     GTLV_Labels,    ~0,
  435.                                 TAG_DONE);
  436.  
  437.                                 Remove((struct Node *)Selected);
  438.  
  439.                                 AddHead((struct List *)PatternList,(struct Node *)Selected);
  440.  
  441.                                 Offset = 0;
  442.  
  443.                                 LT_SetAttributes(Handle,GAD_LIST,
  444.                                     GTLV_Labels,    PatternList,
  445.                                     GTLV_Selected,    Offset,
  446.                                     GTLV_Top,        Offset,
  447.                                 TAG_DONE);
  448.  
  449.                                 LT_SetAttributes(Handle,GAD_TOP,
  450.                                     GA_Disabled,    TRUE,
  451.                                 TAG_DONE);
  452.  
  453.                                 LT_SetAttributes(Handle,GAD_UP,
  454.                                     GA_Disabled,    TRUE,
  455.                                 TAG_DONE);
  456.  
  457.                                 LT_SetAttributes(Handle,GAD_DOWN,
  458.                                     GA_Disabled,    !Selected -> Node . ln_Succ -> ln_Succ,
  459.                                 TAG_DONE);
  460.  
  461.                                 LT_SetAttributes(Handle,GAD_END,
  462.                                     GA_Disabled,    !Selected -> Node . ln_Succ -> ln_Succ,
  463.                                 TAG_DONE);
  464.  
  465.                                 Changed = TRUE;
  466.  
  467.                                 if(ChangedPtr)
  468.                                     *ChangedPtr = TRUE;
  469.  
  470.                                 break;
  471.  
  472.                             case GAD_UP:
  473.  
  474.                                 LT_SetAttributes(Handle,GAD_LIST,
  475.                                     GTLV_Labels,    ~0,
  476.                                 TAG_DONE);
  477.  
  478.                                 Node = (struct PatternNode *)Selected -> Node . ln_Pred -> ln_Pred;
  479.  
  480.                                 Remove((struct Node *)Selected);
  481.  
  482.                                 Insert((struct List *)PatternList,(struct Node *)Selected,(struct Node *)Node);
  483.  
  484.                                 Offset--;
  485.  
  486.                                 LT_SetAttributes(Handle,GAD_LIST,
  487.                                     GTLV_Labels,    PatternList,
  488.                                     GTLV_Selected,    Offset,
  489.                                     GTLV_Top,        Offset,
  490.                                 TAG_DONE);
  491.  
  492.                                 LT_SetAttributes(Handle,GAD_TOP,
  493.                                     GA_Disabled,    !Selected -> Node . ln_Pred -> ln_Pred,
  494.                                 TAG_DONE);
  495.  
  496.                                 LT_SetAttributes(Handle,GAD_UP,
  497.                                     GA_Disabled,    !Selected -> Node . ln_Pred -> ln_Pred,
  498.                                 TAG_DONE);
  499.  
  500.                                 LT_SetAttributes(Handle,GAD_DOWN,
  501.                                     GA_Disabled,    !Selected -> Node . ln_Succ -> ln_Succ,
  502.                                 TAG_DONE);
  503.  
  504.                                 LT_SetAttributes(Handle,GAD_END,
  505.                                     GA_Disabled,    !Selected -> Node . ln_Succ -> ln_Succ,
  506.                                 TAG_DONE);
  507.  
  508.                                 Changed = TRUE;
  509.  
  510.                                 if(ChangedPtr)
  511.                                     *ChangedPtr = TRUE;
  512.  
  513.                                 break;
  514.  
  515.                             case GAD_DOWN:
  516.  
  517.                                 LT_SetAttributes(Handle,GAD_LIST,
  518.                                     GTLV_Labels,    ~0,
  519.                                 TAG_DONE);
  520.  
  521.                                 Node = (struct PatternNode *)Selected -> Node . ln_Succ;
  522.  
  523.                                 Remove((struct Node *)Selected);
  524.  
  525.                                 Insert((struct List *)PatternList,(struct Node *)Selected,(struct Node *)Node);
  526.  
  527.                                 Offset++;
  528.  
  529.                                 LT_SetAttributes(Handle,GAD_LIST,
  530.                                     GTLV_Labels,    PatternList,
  531.                                     GTLV_Selected,    Offset,
  532.                                     GTLV_Top,        Offset,
  533.                                 TAG_DONE);
  534.  
  535.                                 LT_SetAttributes(Handle,GAD_TOP,
  536.                                     GA_Disabled,    !Selected -> Node . ln_Pred -> ln_Pred,
  537.                                 TAG_DONE);
  538.  
  539.                                 LT_SetAttributes(Handle,GAD_UP,
  540.                                     GA_Disabled,    !Selected -> Node . ln_Pred -> ln_Pred,
  541.                                 TAG_DONE);
  542.  
  543.                                 LT_SetAttributes(Handle,GAD_DOWN,
  544.                                     GA_Disabled,    !Selected -> Node . ln_Succ -> ln_Succ,
  545.                                 TAG_DONE);
  546.  
  547.                                 LT_SetAttributes(Handle,GAD_END,
  548.                                     GA_Disabled,    !Selected -> Node . ln_Succ -> ln_Succ,
  549.                                 TAG_DONE);
  550.  
  551.                                 Changed = TRUE;
  552.  
  553.                                 if(ChangedPtr)
  554.                                     *ChangedPtr = TRUE;
  555.  
  556.                                 break;
  557.  
  558.                             case GAD_END:
  559.  
  560.                                 LT_SetAttributes(Handle,GAD_LIST,
  561.                                     GTLV_Labels,    ~0,
  562.                                 TAG_DONE);
  563.  
  564.                                 Remove((struct Node *)Selected);
  565.  
  566.                                 AddTail((struct List *)PatternList,(struct Node *)Selected);
  567.  
  568.                                 Offset = ListCount - 1;
  569.  
  570.                                 LT_SetAttributes(Handle,GAD_LIST,
  571.                                     GTLV_Labels,    PatternList,
  572.                                     GTLV_Selected,    Offset,
  573.                                     GTLV_Top,        Offset,
  574.                                 TAG_DONE);
  575.  
  576.                                 LT_SetAttributes(Handle,GAD_TOP,
  577.                                     GA_Disabled,    !Selected -> Node . ln_Pred -> ln_Pred,
  578.                                 TAG_DONE);
  579.  
  580.                                 LT_SetAttributes(Handle,GAD_UP,
  581.                                     GA_Disabled,    !Selected -> Node . ln_Pred -> ln_Pred,
  582.                                 TAG_DONE);
  583.  
  584.                                 LT_SetAttributes(Handle,GAD_DOWN,
  585.                                     GA_Disabled,    !Selected -> Node . ln_Succ -> ln_Succ,
  586.                                 TAG_DONE);
  587.  
  588.                                 LT_SetAttributes(Handle,GAD_END,
  589.                                     GA_Disabled,    !Selected -> Node . ln_Succ -> ln_Succ,
  590.                                 TAG_DONE);
  591.  
  592.                                 Changed = TRUE;
  593.  
  594.                                 if(ChangedPtr)
  595.                                     *ChangedPtr = TRUE;
  596.  
  597.                                 break;
  598.  
  599.                             case GAD_NEW:
  600.  
  601.                                 if(Selected)
  602.                                 {
  603.                                     strcpy(Selected->Pattern,LT_GetString(Handle,GAD_PATTERN));
  604.                                     strcpy(Selected->Comment,LT_GetString(Handle,GAD_COMMENT));
  605.                                 }
  606.  
  607.                                 if(Node = CreatePatternNode(""))
  608.                                 {
  609.                                     if(Selected)
  610.                                     {
  611.                                         strcpy(Selected->Pattern,LT_GetString(Handle,GAD_PATTERN));
  612.                                         strcpy(Selected->Comment,LT_GetString(Handle,GAD_COMMENT));
  613.                                     }
  614.  
  615.                                     LT_SetAttributes(Handle,GAD_LIST,
  616.                                         GTLV_Labels,    ~0,
  617.                                     TAG_DONE);
  618.  
  619.                                     AddTail((struct List *)PatternList,(struct Node *)Node);
  620.  
  621.                                     LT_SetAttributes(Handle,GAD_LIST,
  622.                                         GTLV_Labels,    PatternList,
  623.                                         GTLV_Selected,    ListCount++,
  624.                                     TAG_DONE);
  625.  
  626.                                     LT_SetAttributes(Handle,GAD_PATTERN,
  627.                                         GTST_String,    "",
  628.                                         GA_Disabled,    FALSE,
  629.                                     TAG_DONE);
  630.  
  631.                                     LT_SetAttributes(Handle,GAD_COMMENT,
  632.                                         GTST_String,    "",
  633.                                         GA_Disabled,    FALSE,
  634.                                     TAG_DONE);
  635.  
  636.                                     LT_SetAttributes(Handle,GAD_REMOVE,
  637.                                         GA_Disabled,    &Selected -> List == ChosenPattern,
  638.                                     TAG_DONE);
  639.  
  640.                                     LT_SetAttributes(Handle,GAD_EDIT,
  641.                                         GA_Disabled,    &Selected -> List == ChosenPattern,
  642.                                     TAG_DONE);
  643.  
  644.                                     LT_SetAttributes(Handle,GAD_COPY,
  645.                                         GA_Disabled,    &Selected -> List == ChosenPattern,
  646.                                     TAG_DONE);
  647.  
  648.                                     LT_SetAttributes(Handle,GAD_SAVE,
  649.                                         GA_Disabled,    FALSE,
  650.                                     TAG_DONE);
  651.  
  652.                                     LT_SetAttributes(Handle,GAD_CLEAR,
  653.                                         GA_Disabled,    FALSE,
  654.                                     TAG_DONE);
  655.  
  656.                                     Selected = Node;
  657.  
  658.                                     Offset = ListCount - 1;
  659.  
  660.                                     LT_SetAttributes(Handle,GAD_TOP,
  661.                                         GA_Disabled,    !Selected -> Node . ln_Pred -> ln_Pred,
  662.                                     TAG_DONE);
  663.  
  664.                                     LT_SetAttributes(Handle,GAD_UP,
  665.                                         GA_Disabled,    !Selected -> Node . ln_Pred -> ln_Pred,
  666.                                     TAG_DONE);
  667.  
  668.                                     LT_SetAttributes(Handle,GAD_DOWN,
  669.                                         GA_Disabled,    !Selected -> Node . ln_Succ -> ln_Succ,
  670.                                     TAG_DONE);
  671.  
  672.                                     LT_SetAttributes(Handle,GAD_END,
  673.                                         GA_Disabled,    !Selected -> Node . ln_Succ -> ln_Succ,
  674.                                     TAG_DONE);
  675.  
  676.                                     LT_Activate(Handle,GAD_COMMENT);
  677.  
  678.                                     Changed = TRUE;
  679.  
  680.                                     if(ChangedPtr)
  681.                                         *ChangedPtr = TRUE;
  682.                                 }
  683.                                 else
  684.                                     DisplayBeep(LocalWindow -> WScreen);
  685.  
  686.                                 break;
  687.  
  688.                             case GAD_COPY:
  689.  
  690.                                 if(Node = CreatePatternNode(Selected -> Comment))
  691.                                 {
  692.                                     struct TimeDateNode *OldNode,*NewNode;
  693.                                     BOOL AllFine;
  694.  
  695.                                     FreeList(&Node->List);
  696.  
  697.                                     AllFine = TRUE;
  698.  
  699.                                     for(OldNode = (struct TimeDateNode *)Selected->List.lh_Head ; OldNode->VanillaNode.ln_Succ ; OldNode = (struct TimeDateNode *)OldNode->VanillaNode.ln_Succ)
  700.                                     {
  701.                                         if(NewNode = CreateTimeDateNode(0,1,"",OldNode->Table[0].Count))
  702.                                         {
  703.                                             strcpy(NewNode->VanillaNode.ln_Name = NewNode->Buffer,OldNode->Buffer);
  704.  
  705.                                             NewNode->Header = OldNode->Header;
  706.  
  707.                                             CopyMem(OldNode->Table,NewNode->Table,sizeof(struct TimeDate) * OldNode->Table[0].Count);
  708.  
  709.                                             AdaptTimeDateNode(NewNode);
  710.  
  711.                                             AddTail(&Node->List,(struct Node *)NewNode);
  712.                                         }
  713.                                         else
  714.                                         {
  715.                                             AllFine = FALSE;
  716.                                             break;
  717.                                         }
  718.                                     }
  719.  
  720.                                     if(!AllFine)
  721.                                     {
  722.                                         FreeList(&Node->List);
  723.                                         FreeVecPooled(Node);
  724.                                         DisplayBeep(LocalWindow -> WScreen);
  725.                                     }
  726.                                     else
  727.                                     {
  728.                                         if(Selected)
  729.                                         {
  730.                                             strcpy(Selected->Pattern,LT_GetString(Handle,GAD_PATTERN));
  731.                                             strcpy(Selected->Comment,LT_GetString(Handle,GAD_COMMENT));
  732.                                         }
  733.  
  734.                                         LT_SetAttributes(Handle,GAD_LIST,
  735.                                             GTLV_Labels,    ~0,
  736.                                         TAG_DONE);
  737.  
  738.                                         AddTail((struct List *)PatternList,(struct Node *)Node);
  739.  
  740.                                         LT_SetAttributes(Handle,GAD_LIST,
  741.                                             GTLV_Labels,    PatternList,
  742.                                             GTLV_Selected,    ListCount++,
  743.                                         TAG_DONE);
  744.  
  745.                                         strcpy(Node -> Pattern,Selected -> Pattern);
  746.                                         strcpy(Node -> Comment,Selected -> Comment);
  747.  
  748.                                         Selected = Node;
  749.  
  750.                                         LT_SetAttributes(Handle,GAD_PATTERN,
  751.                                             GTST_String,    Selected -> Pattern,
  752.                                             GA_Disabled,    FALSE,
  753.                                         TAG_DONE);
  754.  
  755.                                         LT_SetAttributes(Handle,GAD_COMMENT,
  756.                                             GTST_String,    Selected -> Comment,
  757.                                             GA_Disabled,    FALSE,
  758.                                         TAG_DONE);
  759.  
  760.                                         LT_SetAttributes(Handle,GAD_REMOVE,
  761.                                             GA_Disabled,    &Selected -> List == ChosenPattern,
  762.                                         TAG_DONE);
  763.  
  764.                                         LT_SetAttributes(Handle,GAD_EDIT,
  765.                                             GA_Disabled,    &Selected -> List == ChosenPattern,
  766.                                         TAG_DONE);
  767.  
  768.                                         LT_SetAttributes(Handle,GAD_COPY,
  769.                                             GA_Disabled,    FALSE,
  770.                                         TAG_DONE);
  771.  
  772.                                         LT_SetAttributes(Handle,GAD_SAVE,
  773.                                             GA_Disabled,    FALSE,
  774.                                         TAG_DONE);
  775.  
  776.                                         LT_SetAttributes(Handle,GAD_CLEAR,
  777.                                             GA_Disabled,    FALSE,
  778.                                         TAG_DONE);
  779.  
  780.                                         Offset = ListCount - 1;
  781.  
  782.                                         LT_SetAttributes(Handle,GAD_TOP,
  783.                                             GA_Disabled,    !Selected -> Node . ln_Pred -> ln_Pred,
  784.                                         TAG_DONE);
  785.  
  786.                                         LT_SetAttributes(Handle,GAD_UP,
  787.                                             GA_Disabled,    !Selected -> Node . ln_Pred -> ln_Pred,
  788.                                         TAG_DONE);
  789.  
  790.                                         LT_SetAttributes(Handle,GAD_DOWN,
  791.                                             GA_Disabled,    !Selected -> Node . ln_Succ -> ln_Succ,
  792.                                         TAG_DONE);
  793.  
  794.                                         LT_SetAttributes(Handle,GAD_END,
  795.                                             GA_Disabled,    !Selected -> Node . ln_Succ -> ln_Succ,
  796.                                         TAG_DONE);
  797.  
  798.                                         LT_Activate(Handle,GAD_COMMENT);
  799.  
  800.                                         Changed = TRUE;
  801.  
  802.                                         if(ChangedPtr)
  803.                                             *ChangedPtr = TRUE;
  804.                                     }
  805.                                 }
  806.                                 else
  807.                                     DisplayBeep(LocalWindow -> WScreen);
  808.  
  809.                                 break;
  810.  
  811.                             case GAD_DISCARD:
  812.  
  813.                                 LT_SetAttributes(Handle,GAD_LIST,
  814.                                     GTLV_Labels,    ~0,
  815.                                 TAG_DONE);
  816.  
  817.                                 FreePatternList(PatternList);
  818.  
  819.                                 ListCount = 0;
  820.  
  821.                                 Done = Changed = TRUE;
  822.  
  823.                                 if(ChangedPtr)
  824.                                     *ChangedPtr = FALSE;
  825.  
  826.                                 LastPattern[0] = 0;
  827.                                 strcpy(Config->AreaCodeFileName,LastPattern);
  828.                                 break;
  829.  
  830.                             case GAD_CLEAR:
  831.  
  832.                                 LT_SetAttributes(Handle,GAD_LIST,
  833.                                     GTLV_Labels,    ~0,
  834.                                 TAG_DONE);
  835.  
  836.                                 FreePatternList(PatternList);
  837.  
  838.                                 ListCount = 0;
  839.  
  840.                                 LT_SetAttributes(Handle,GAD_LIST,
  841.                                     GTLV_Labels,    PatternList,
  842.                                     GTLV_Selected,    ~0,
  843.                                 TAG_DONE);
  844.  
  845.                                 Selected = NULL;
  846.  
  847.                                 LT_SetAttributes(Handle,GAD_TOP,
  848.                                     GA_Disabled,    TRUE,
  849.                                 TAG_DONE);
  850.  
  851.                                 LT_SetAttributes(Handle,GAD_UP,
  852.                                     GA_Disabled,    TRUE,
  853.                                 TAG_DONE);
  854.  
  855.                                 LT_SetAttributes(Handle,GAD_DOWN,
  856.                                     GA_Disabled,    TRUE,
  857.                                 TAG_DONE);
  858.  
  859.                                 LT_SetAttributes(Handle,GAD_END,
  860.                                     GA_Disabled,    TRUE,
  861.                                 TAG_DONE);
  862.  
  863.                                 LT_SetAttributes(Handle,GAD_REMOVE,
  864.                                     GA_Disabled,    TRUE,
  865.                                 TAG_DONE);
  866.  
  867.                                 LT_SetAttributes(Handle,GAD_EDIT,
  868.                                     GA_Disabled,    TRUE,
  869.                                 TAG_DONE);
  870.  
  871.                                 LT_SetAttributes(Handle,GAD_COPY,
  872.                                     GA_Disabled,    TRUE,
  873.                                 TAG_DONE);
  874.  
  875.                                 LT_SetAttributes(Handle,GAD_COMMENT,
  876.                                     GTST_String,    "",
  877.                                     GA_Disabled,    TRUE,
  878.                                 TAG_DONE);
  879.  
  880.                                 LT_SetAttributes(Handle,GAD_PATTERN,
  881.                                     GTST_String,    "",
  882.                                     GA_Disabled,    TRUE,
  883.                                 TAG_DONE);
  884.  
  885.                                 LT_SetAttributes(Handle,GAD_SAVE,
  886.                                     GA_Disabled,    TRUE,
  887.                                 TAG_DONE);
  888.  
  889.                                 LT_SetAttributes(Handle,GAD_CLEAR,
  890.                                     GA_Disabled,    TRUE,
  891.                                 TAG_DONE);
  892.  
  893.                                 Changed = TRUE;
  894.  
  895.                                 if(ChangedPtr)
  896.                                     *ChangedPtr = FALSE;
  897.  
  898.                                 break;
  899.  
  900.                             case GAD_EDIT:
  901.  
  902.                                 if(Selected)
  903.                                 {
  904.                                     LT_LockWindow(LocalWindow);
  905.  
  906.                                     if(RatePanel(LocalWindow,PhoneList,NULL,&Selected -> List))
  907.                                     {
  908.                                         Changed = TRUE;
  909.  
  910.                                         if(ChangedPtr)
  911.                                             *ChangedPtr = TRUE;
  912.                                     }
  913.  
  914.                                     LT_UnlockWindow(LocalWindow);
  915.                                 }
  916.  
  917.                                 break;
  918.  
  919.                             case GAD_REMOVE:
  920.  
  921.                                 if(Selected)
  922.                                 {
  923.                                     LT_SetAttributes(Handle,GAD_LIST,
  924.                                         GTLV_Labels,    ~0,
  925.                                     TAG_DONE);
  926.  
  927.                                     if(--ListCount)
  928.                                     {
  929.                                         if(Selected -> Node . ln_Succ -> ln_Succ)
  930.                                             Node = (struct PatternNode *)Selected -> Node . ln_Succ;
  931.                                         else
  932.                                         {
  933.                                             Node = (struct PatternNode *)Selected -> Node . ln_Pred;
  934.  
  935.                                             Offset = 0;
  936.                                         }
  937.                                     }
  938.  
  939.                                     Remove((struct Node *)Selected);
  940.  
  941.                                     DeletePatternNode(Selected);
  942.  
  943.                                     LT_SetAttributes(Handle,GAD_LIST,
  944.                                         GTLV_Labels,    PatternList,
  945.                                         GTLV_Selected,    ListCount > 0 ? GetNodeOffset((struct Node *)Node,(struct List *)PatternList) : ~0,
  946.                                     TAG_DONE);
  947.  
  948.                                     if(!ListCount)
  949.                                     {
  950.                                         Selected = NULL;
  951.  
  952.                                         LT_SetAttributes(Handle,GAD_TOP,
  953.                                             GA_Disabled,    TRUE,
  954.                                         TAG_DONE);
  955.  
  956.                                         LT_SetAttributes(Handle,GAD_UP,
  957.                                             GA_Disabled,    TRUE,
  958.                                         TAG_DONE);
  959.  
  960.                                         LT_SetAttributes(Handle,GAD_DOWN,
  961.                                             GA_Disabled,    TRUE,
  962.                                         TAG_DONE);
  963.  
  964.                                         LT_SetAttributes(Handle,GAD_END,
  965.                                             GA_Disabled,    TRUE,
  966.                                         TAG_DONE);
  967.  
  968.                                         LT_SetAttributes(Handle,GAD_REMOVE,
  969.                                             GA_Disabled,    TRUE,
  970.                                         TAG_DONE);
  971.  
  972.                                         LT_SetAttributes(Handle,GAD_EDIT,
  973.                                             GA_Disabled,    TRUE,
  974.                                         TAG_DONE);
  975.  
  976.                                         LT_SetAttributes(Handle,GAD_COPY,
  977.                                             GA_Disabled,    TRUE,
  978.                                         TAG_DONE);
  979.  
  980.                                         LT_SetAttributes(Handle,GAD_COMMENT,
  981.                                             GTST_String,    "",
  982.                                             GA_Disabled,    TRUE,
  983.                                         TAG_DONE);
  984.  
  985.                                         LT_SetAttributes(Handle,GAD_PATTERN,
  986.                                             GTST_String,    "",
  987.                                             GA_Disabled,    TRUE,
  988.                                         TAG_DONE);
  989.  
  990.                                         LT_SetAttributes(Handle,GAD_SAVE,
  991.                                             GA_Disabled,    TRUE,
  992.                                         TAG_DONE);
  993.  
  994.                                         LT_SetAttributes(Handle,GAD_CLEAR,
  995.                                             GA_Disabled,    TRUE,
  996.                                         TAG_DONE);
  997.                                     }
  998.                                     else
  999.                                     {
  1000.                                         Selected = Node;
  1001.  
  1002.                                         LT_SetAttributes(Handle,GAD_PATTERN,
  1003.                                             GTST_String,    Selected -> Pattern,
  1004.                                         TAG_DONE);
  1005.  
  1006.                                         LT_SetAttributes(Handle,GAD_COMMENT,
  1007.                                             GTST_String,    Selected -> Comment,
  1008.                                         TAG_DONE);
  1009.  
  1010.                                         LT_SetAttributes(Handle,GAD_TOP,
  1011.                                             GA_Disabled,    !Selected -> Node . ln_Pred -> ln_Pred,
  1012.                                         TAG_DONE);
  1013.  
  1014.                                         LT_SetAttributes(Handle,GAD_UP,
  1015.                                             GA_Disabled,    !Selected -> Node . ln_Pred -> ln_Pred,
  1016.                                         TAG_DONE);
  1017.  
  1018.                                         LT_SetAttributes(Handle,GAD_DOWN,
  1019.                                             GA_Disabled,    !Selected -> Node . ln_Succ -> ln_Succ,
  1020.                                         TAG_DONE);
  1021.  
  1022.                                         LT_SetAttributes(Handle,GAD_END,
  1023.                                             GA_Disabled,    !Selected -> Node . ln_Succ -> ln_Succ,
  1024.                                         TAG_DONE);
  1025.                                     }
  1026.  
  1027.                                     Changed = TRUE;
  1028.  
  1029.                                     if(ChangedPtr)
  1030.                                         *ChangedPtr = TRUE;
  1031.                                 }
  1032.  
  1033.                                 break;
  1034.  
  1035.                             case GAD_LIST:
  1036.  
  1037.                                 if(Selected)
  1038.                                 {
  1039.                                     strcpy(Selected->Pattern,LT_GetString(Handle,GAD_PATTERN));
  1040.                                     strcpy(Selected->Comment,LT_GetString(Handle,GAD_COMMENT));
  1041.                                 }
  1042.  
  1043.                                 if(Selected = (struct PatternNode *)GetListNode(MsgCode,(struct List *)PatternList))
  1044.                                 {
  1045.                                     Offset = MsgCode;
  1046.  
  1047.                                     LT_SetAttributes(Handle,GAD_COMMENT,
  1048.                                         GTST_String,    Selected -> Comment,
  1049.                                         GA_Disabled,    FALSE,
  1050.                                     TAG_DONE);
  1051.  
  1052.                                     LT_SetAttributes(Handle,GAD_PATTERN,
  1053.                                         GTST_String,    Selected -> Pattern,
  1054.                                         GA_Disabled,    FALSE,
  1055.                                     TAG_DONE);
  1056.  
  1057.                                     LT_SetAttributes(Handle,GAD_REMOVE,
  1058.                                         GA_Disabled,    &Selected -> List == ChosenPattern,
  1059.                                     TAG_DONE);
  1060.  
  1061.                                     LT_SetAttributes(Handle,GAD_EDIT,
  1062.                                         GA_Disabled,    &Selected -> List == ChosenPattern,
  1063.                                     TAG_DONE);
  1064.  
  1065.                                     LT_SetAttributes(Handle,GAD_COPY,
  1066.                                         GA_Disabled,    &Selected -> List == ChosenPattern,
  1067.                                     TAG_DONE);
  1068.  
  1069.                                     LT_SetAttributes(Handle,GAD_TOP,
  1070.                                         GA_Disabled,    !Selected -> Node . ln_Pred -> ln_Pred,
  1071.                                     TAG_DONE);
  1072.  
  1073.                                     LT_SetAttributes(Handle,GAD_UP,
  1074.                                         GA_Disabled,    !Selected -> Node . ln_Pred -> ln_Pred,
  1075.                                     TAG_DONE);
  1076.  
  1077.                                     LT_SetAttributes(Handle,GAD_DOWN,
  1078.                                         GA_Disabled,    !Selected -> Node . ln_Succ -> ln_Succ,
  1079.                                     TAG_DONE);
  1080.  
  1081.                                     LT_SetAttributes(Handle,GAD_END,
  1082.                                         GA_Disabled,    !Selected -> Node . ln_Succ -> ln_Succ,
  1083.                                     TAG_DONE);
  1084.                                 }
  1085.  
  1086.                                 break;
  1087.  
  1088.                             case GAD_COMMENT:
  1089.  
  1090.                                 if(Selected)
  1091.                                 {
  1092.                                     LT_SetAttributes(Handle,GAD_LIST,
  1093.                                         GTLV_Labels,    ~0,
  1094.                                     TAG_DONE);
  1095.  
  1096.                                     strcpy(Selected -> Comment,LT_GetString(Handle,GAD_COMMENT));
  1097.  
  1098.                                     LT_SetAttributes(Handle,GAD_LIST,
  1099.                                         GTLV_Labels,    PatternList,
  1100.                                         GTLV_Selected,    GetNodeOffset((struct Node *)Selected,(struct List *)PatternList),
  1101.                                     TAG_DONE);
  1102.  
  1103.                                     LT_SetAttributes(Handle,GAD_PATTERN,
  1104.                                         GTST_String,    Selected -> Pattern,
  1105.                                     TAG_DONE);
  1106.  
  1107.                                     LT_SetAttributes(Handle,GAD_COMMENT,
  1108.                                         GTST_String,    Selected -> Comment,
  1109.                                     TAG_DONE);
  1110.  
  1111.                                     Changed = TRUE;
  1112.  
  1113.                                     if(ChangedPtr)
  1114.                                         *ChangedPtr = TRUE;
  1115.  
  1116.                                     LT_Activate(Handle,GAD_PATTERN);
  1117.                                 }
  1118.  
  1119.                                 break;
  1120.  
  1121.                             case GAD_PATTERN:
  1122.  
  1123.                                 if(Selected)
  1124.                                 {
  1125.                                     strcpy(Selected -> Pattern,LT_GetString(Handle,GAD_PATTERN));
  1126.  
  1127.                                     Changed = TRUE;
  1128.  
  1129.                                     if(ChangedPtr)
  1130.                                         *ChangedPtr = TRUE;
  1131.                                 }
  1132.  
  1133.                                 break;
  1134.  
  1135.                             case GAD_LOAD:
  1136.  
  1137.                                 SplitFileName(LastPattern,&DummyChar,DummyBuffer);
  1138.  
  1139.                                 LT_LockWindow(LocalWindow);
  1140.  
  1141.                                 if(FileRequest = GetFile(LocalWindow,LocaleString(MSG_AREACODE_LOAD_GROUP_SETTINGS_TXT),DummyBuffer,FilePart(LastPattern),DummyBuffer,"#?.prefs",FALSE,FALSE,FALSE,LocaleString(MSG_GLOBAL_LOAD_TXT),TRUE))
  1142.                                 {
  1143.                                     struct List *SomeList;
  1144.  
  1145.                                     LT_SetAttributes(Handle,GAD_LIST,
  1146.                                         GTLV_Labels,    ~0,
  1147.                                     TAG_DONE);
  1148.  
  1149.                                     Selected = NULL;
  1150.  
  1151.                                     if(!(SomeList = LoadTimeDateList(DummyBuffer,&Error)))
  1152.                                         ShowError(LocalWindow,ERR_LOAD_ERROR,Error,DummyBuffer);
  1153.                                     else
  1154.                                     {
  1155.                                         FreePatternList(PatternList);
  1156.  
  1157.                                         MoveList(SomeList,PatternList);
  1158.                                         FreeVec(SomeList);
  1159.  
  1160.                                         strcpy(LastPattern,DummyBuffer);
  1161.                                         strcpy(Config->AreaCodeFileName,LastPattern);
  1162.  
  1163.                                         Changed = FALSE;
  1164.  
  1165.                                         if(ChangedPtr)
  1166.                                             *ChangedPtr = FALSE;
  1167.  
  1168.                                         ListCount = GetListSize(PatternList);
  1169.                                     }
  1170.  
  1171.                                     LT_SetAttributes(Handle,GAD_LIST,
  1172.                                         GTLV_Labels,    PatternList,
  1173.                                         GTLV_Selected,    ~0,
  1174.                                     TAG_DONE);
  1175.  
  1176.                                     LT_SetAttributes(Handle,GAD_PATTERN,
  1177.                                         GTST_String,    "",
  1178.                                         GA_Disabled,    TRUE,
  1179.                                     TAG_DONE);
  1180.  
  1181.                                     LT_SetAttributes(Handle,GAD_COMMENT,
  1182.                                         GTST_String,    "",
  1183.                                         GA_Disabled,    TRUE,
  1184.                                     TAG_DONE);
  1185.  
  1186.                                     LT_SetAttributes(Handle,GAD_REMOVE,
  1187.                                         GA_Disabled,    TRUE,
  1188.                                     TAG_DONE);
  1189.  
  1190.                                     LT_SetAttributes(Handle,GAD_EDIT,
  1191.                                         GA_Disabled,    TRUE,
  1192.                                     TAG_DONE);
  1193.  
  1194.                                     LT_SetAttributes(Handle,GAD_COPY,
  1195.                                         GA_Disabled,    TRUE,
  1196.                                     TAG_DONE);
  1197.  
  1198.                                     LT_SetAttributes(Handle,GAD_TOP,
  1199.                                         GA_Disabled,    TRUE,
  1200.                                     TAG_DONE);
  1201.  
  1202.                                     LT_SetAttributes(Handle,GAD_UP,
  1203.                                         GA_Disabled,    TRUE,
  1204.                                     TAG_DONE);
  1205.  
  1206.                                     LT_SetAttributes(Handle,GAD_DOWN,
  1207.                                         GA_Disabled,    TRUE,
  1208.                                     TAG_DONE);
  1209.  
  1210.                                     LT_SetAttributes(Handle,GAD_END,
  1211.                                         GA_Disabled,    TRUE,
  1212.                                     TAG_DONE);
  1213.  
  1214.                                     LT_SetAttributes(Handle,GAD_SAVE,
  1215.                                         GA_Disabled,    !ListCount,
  1216.                                     TAG_DONE);
  1217.  
  1218.                                     LT_SetAttributes(Handle,GAD_CLEAR,
  1219.                                         GA_Disabled,    !ListCount,
  1220.                                     TAG_DONE);
  1221.  
  1222.                                     FreeAslRequest(FileRequest);
  1223.                                 }
  1224.  
  1225.                                 LT_UnlockWindow(LocalWindow);
  1226.  
  1227.                                 break;
  1228.  
  1229.                             case GAD_SAVE:
  1230.  
  1231.                                 if(Selected)
  1232.                                 {
  1233.                                     strcpy(Selected->Pattern,LT_GetString(Handle,GAD_PATTERN));
  1234.                                     strcpy(Selected->Comment,LT_GetString(Handle,GAD_COMMENT));
  1235.                                 }
  1236.  
  1237.                                 SplitFileName(LastPattern,&DummyChar,DummyBuffer);
  1238.  
  1239.                                 LT_LockWindow(LocalWindow);
  1240.  
  1241.                                 if(FileRequest = GetFile(LocalWindow,LocaleString(MSG_AREACODE_SAVE_GROUP_SETTINGS_TXT),DummyBuffer,FilePart(LastPattern),DummyBuffer,"#?.prefs",TRUE,FALSE,FALSE,LocaleString(MSG_GLOBAL_SAVE_TXT),TRUE))
  1242.                                 {
  1243.                                     if(!SaveTimeDateList(DummyBuffer,PatternList,&Error))
  1244.                                         ShowError(LocalWindow,ERR_SAVE_ERROR,Error,DummyBuffer);
  1245.                                     else
  1246.                                     {
  1247.                                         strcpy(LastPattern,DummyBuffer);
  1248.  
  1249.                                         strcpy(Config->AreaCodeFileName,LastPattern);
  1250.  
  1251.                                         if(ChangedPtr)
  1252.                                             *ChangedPtr = FALSE;
  1253.                                     }
  1254.  
  1255.                                     FreeAslRequest(FileRequest);
  1256.                                 }
  1257.  
  1258.                                 LT_UnlockWindow(LocalWindow);
  1259.  
  1260.                                 break;
  1261.                         }
  1262.                     }
  1263.                 }
  1264.             }
  1265.             while(!Done);
  1266.  
  1267.             PopWindow();
  1268.         }
  1269.  
  1270.         LT_DeleteHandle(Handle);
  1271.     }
  1272.  
  1273.     if(PhoneList)
  1274.         DeletePhoneList(PhoneList);
  1275.  
  1276.     return(Changed);
  1277. }
  1278.