home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
Amiga Elysian Archive
/
AmigaElysianArchive.iso
/
comm
/
term23_2.lha
/
Source_Code
/
termSource
/
PhonePanel.c
< prev
next >
Wrap
C/C++ Source or Header
|
1992-08-19
|
37KB
|
1,387 lines
/*
** $Id: PhonePanel.c,v 1.12 92/08/15 20:13:04 olsen Sta Locker: olsen $
** $Revision: 1.12 $
** $Date: 92/08/15 20:13:04 $
**
** The phonebook and support routines
**
** Copyright © 1990-1992 by Olaf `Olsen' Barthel & MXM
** All Rights Reserved
*/
#include "termGlobal.h"
enum { GAD_NAMELIST,GAD_NAME,GAD_PHONENUMBER,
GAD_NEWENTRY,GAD_DIALLIST,GAD_LOADLIST,
GAD_CLONEENTRY,GAD_CLEARLIST,GAD_SORTLIST,
GAD_REMOVEENTRY,GAD_PLAYNUMBER,GAD_SAVELIST,
GAD_COPYCONFIG,GAD_USEIT,GAD_PASSWORD,GAD_EDIT };
enum { EDIT_SERIAL,EDIT_MODEM,EDIT_TRANSFER,EDIT_SCREEN,EDIT_TERMINAL,
EDIT_COMMANDS,EDIT_UNITS,EDIT_MISC,EDIT_PATHS,EDIT_KEYMACROS,
EDIT_FASTMACROS,EDIT_PASSWORD,EDIT_COPY };
STATIC struct List EditList;
STATIC struct Node EditNode[13];
STATIC UBYTE *EditName[13] =
{
NULL,
NULL,
NULL,
NULL,
NULL,
NULL,
NULL,
NULL,
NULL,
NULL,
NULL,
NULL,
NULL
};
STATIC struct Gadget *
CreateAllGadgets(struct Gadget **GadgetArray,struct Gadget **GadgetList,APTR VisualInfo,UWORD TopEdge)
{
struct Gadget *Gadget;
struct NewGadget NewGadget;
UWORD Counter = 0;
LocalizeString(EditName,MSG_PHONEPANEL_SERIAL_TXT,MSG_PHONEPANEL_PASSWORD_USER_TXT);
memset(&NewGadget,0,sizeof(struct NewGadget));
SZ_SizeSetup(Screen,&UserFont,TRUE);
if(Gadget = CreateContext(GadgetList))
{
WORD i,Max,Len,ButtonWidth,MaxWidth,LeftEdge;
NewList(&EditList);
for(i = 0 ; i < 12 ; i++)
{
EditNode[i] . ln_Name = EditName[i];
AddTail(&EditList,&EditNode[i]);
}
SZ_ResetMaxWidth();
for(i = MSG_PHONEPANEL_PLAY_NUMBER_GAD ; i <= MSG_PHONEPANEL_SET_PASSWORT_GAD ; i++)
SZ_UpdateMaxWidth(BUTTON_KIND,LocaleString(i),0,NULL);
ButtonWidth = SZ_ResetMaxWidth();
MaxWidth = 3 * ButtonWidth + 2 * INTERWIDTH;
Max = SZ_TextWidth(LocaleString(MSG_PHONEPANEL_PHONE_NUMBER_GAD));
if((Len = SZ_TextWidth(LocaleString(MSG_PHONEPANEL_BBS_NAME_GAD))) > Max)
Max = Len;
if((Len = SZ_TextWidth(LocaleString(MSG_GLOBAL_NAME_LIST_GAD))) > Max)
Max = Len;
SZ_AddLeftOffset(Max + INTERWIDTH);
LeftEdge = SZ_GetLeftEdge();
if(SZ_Width(LISTVIEW_KIND,NULL,35,NULL) > MaxWidth)
MaxWidth = SZ_Width(LISTVIEW_KIND,NULL,35,NULL);
SZ_SetWidth(MaxWidth);
NewGadget . ng_TextAttr = &UserFont;
NewGadget . ng_VisualInfo = VisualInfo;
NewGadget . ng_Flags = PLACETEXT_LEFT;
NewGadget . ng_GadgetText = LocaleString(MSG_GLOBAL_NAME_LIST_GAD);
NewGadget . ng_GadgetID = Counter;
GadgetArray[Counter++] = Gadget = CreateGadget(LISTVIEW_KIND,Gadget,&NewGadget,
SZ_Adjust, TRUE,
SZ_AutoWidth, TRUE,
SZ_Lines, 10,
GT_Underscore, '_',
TAG_DONE);
SZ_SetTopEdge(SZ_GetTopEdge() - 2 * InterHeight);
NewGadget . ng_GadgetText = LocaleString(MSG_PHONEPANEL_BBS_NAME_GAD);
NewGadget . ng_GadgetID = Counter;
GadgetArray[Counter++] = Gadget = CreateGadget(STRING_KIND,Gadget,&NewGadget,
SZ_Adjust, TRUE,
SZ_AutoWidth, TRUE,
GTST_MaxChars, 29,
GTST_EditHook, &CommandHook,
GA_Disabled, TRUE,
GA_Immediate, TRUE,
GT_Underscore, '_',
TAG_DONE);
NewGadget . ng_GadgetText = LocaleString(MSG_PHONEPANEL_PHONE_NUMBER_GAD);
NewGadget . ng_GadgetID = Counter;
GadgetArray[Counter++] = Gadget = CreateGadget(STRING_KIND,Gadget,&NewGadget,
SZ_Adjust, TRUE,
SZ_AutoWidth, TRUE,
GTST_MaxChars, 49,
GTST_EditHook, &CommandHook,
GA_Disabled, TRUE,
GA_Immediate, TRUE,
GT_Underscore, '_',
TAG_DONE);
SZ_SetWidth(ButtonWidth);
NewGadget . ng_GadgetText = LocaleString(MSG_PHONEPANEL_NEW_ENTRY_GAD);
NewGadget . ng_GadgetID = Counter;
NewGadget . ng_Flags = PLACETEXT_IN;
GadgetArray[Counter++] = Gadget = CreateGadget(BUTTON_KIND,Gadget,&NewGadget,
SZ_Adjust, TRUE,
SZ_AutoWidth, TRUE,
SZ_AlignBottom, TRUE,
SZ_GroupCount, 3,
SZ_UseLeft, LeftEdge,
GT_Underscore, '_',
TAG_DONE);
NewGadget . ng_GadgetText = LocaleString(MSG_PHONEPANEL_DIAL_LIST_GAD);
NewGadget . ng_GadgetID = Counter;
GadgetArray[Counter++] = Gadget = CreateGadget(BUTTON_KIND,Gadget,&NewGadget,
SZ_Adjust, TRUE,
SZ_AutoWidth, TRUE,
SZ_GroupNext, TRUE,
GT_Underscore, '_',
GA_Disabled, TRUE,
TAG_DONE);
NewGadget . ng_GadgetText = LocaleString(MSG_PHONEPANEL_LOAD_LIST_GAD);
NewGadget . ng_GadgetID = Counter;
GadgetArray[Counter++] = Gadget = CreateGadget(BUTTON_KIND,Gadget,&NewGadget,
SZ_Adjust, TRUE,
SZ_AutoWidth, TRUE,
SZ_GroupNext, TRUE,
GT_Underscore, '_',
GA_Disabled, (Online && ChosenEntry),
TAG_DONE);
NewGadget . ng_GadgetText = LocaleString(MSG_PHONEPANEL_CLONE_ENTRY_GAD);
NewGadget . ng_GadgetID = Counter;
GadgetArray[Counter++] = Gadget = CreateGadget(BUTTON_KIND,Gadget,&NewGadget,
SZ_Adjust, TRUE,
SZ_AutoWidth, TRUE,
SZ_AlignBottom, TRUE,
SZ_GroupCount, 3,
SZ_UseLeft, LeftEdge,
GT_Underscore, '_',
GA_Disabled, TRUE,
TAG_DONE);
NewGadget . ng_GadgetText = LocaleString(MSG_PHONEPANEL_CLEAR_LIST_GAD);
NewGadget . ng_GadgetID = Counter;
GadgetArray[Counter++] = Gadget = CreateGadget(BUTTON_KIND,Gadget,&NewGadget,
SZ_Adjust, TRUE,
SZ_AutoWidth, TRUE,
SZ_GroupNext, TRUE,
GT_Underscore, '_',
GA_Disabled, TRUE,
TAG_DONE);
NewGadget . ng_GadgetText = LocaleString(MSG_PHONEPANEL_SORT_LIST_GAD);
NewGadget . ng_GadgetID = Counter;
GadgetArray[Counter++] = Gadget = CreateGadget(BUTTON_KIND,Gadget,&NewGadget,
SZ_Adjust, TRUE,
SZ_AutoWidth, TRUE,
SZ_GroupNext, TRUE,
GT_Underscore, '_',
GA_Disabled, TRUE,
TAG_DONE);
NewGadget . ng_GadgetText = LocaleString(MSG_PHONEPANEL_REMOVE_ENTRY_GAD);
NewGadget . ng_GadgetID = Counter;
GadgetArray[Counter++] = Gadget = CreateGadget(BUTTON_KIND,Gadget,&NewGadget,
SZ_Adjust, TRUE,
SZ_AutoWidth, TRUE,
SZ_AlignBottom, TRUE,
SZ_GroupCount, 3,
SZ_UseLeft, LeftEdge,
GT_Underscore, '_',
GA_Disabled, TRUE,
TAG_DONE);
NewGadget . ng_GadgetText = LocaleString(MSG_PHONEPANEL_PLAY_NUMBER_GAD);
NewGadget . ng_GadgetID = Counter;
GadgetArray[Counter++] = Gadget = CreateGadget(BUTTON_KIND,Gadget,&NewGadget,
SZ_Adjust, TRUE,
SZ_AutoWidth, TRUE,
SZ_GroupNext, TRUE,
GT_Underscore, '_',
GA_Disabled, TRUE,
TAG_DONE);
NewGadget . ng_GadgetText = LocaleString(MSG_PHONEPANEL_SAVE_LIST_GAD);
NewGadget . ng_GadgetID = Counter;
GadgetArray[Counter++] = Gadget = CreateGadget(BUTTON_KIND,Gadget,&NewGadget,
SZ_Adjust, TRUE,
SZ_AutoWidth, TRUE,
SZ_GroupNext, TRUE,
GT_Underscore, '_',
GA_Disabled, TRUE,
TAG_DONE);
NewGadget . ng_GadgetText = LocaleString(MSG_PHONEPANEL_COPY_CONFIG_GAD);
NewGadget . ng_GadgetID = Counter;
GadgetArray[Counter++] = Gadget = CreateGadget(BUTTON_KIND,Gadget,&NewGadget,
SZ_Adjust, TRUE,
SZ_AutoWidth, TRUE,
SZ_AlignBottom, TRUE,
SZ_GroupCount, 3,
SZ_UseLeft, LeftEdge,
GT_Underscore, '_',
TAG_DONE);
NewGadget . ng_GadgetText = LocaleString(MSG_PHONEPANEL_USE_ENTRY_GAD);
NewGadget . ng_GadgetID = Counter;
GadgetArray[Counter++] = Gadget = CreateGadget(BUTTON_KIND,Gadget,&NewGadget,
SZ_Adjust, TRUE,
SZ_AutoWidth, TRUE,
SZ_GroupNext, TRUE,
GT_Underscore, '_',
GA_Disabled, TRUE,
TAG_DONE);
NewGadget . ng_GadgetText = LocaleString(MSG_PHONEPANEL_SET_PASSWORT_GAD);
NewGadget . ng_GadgetID = Counter;
GadgetArray[Counter++] = Gadget = CreateGadget(BUTTON_KIND,Gadget,&NewGadget,
SZ_Adjust, TRUE,
SZ_AutoWidth, TRUE,
SZ_GroupNext, TRUE,
GT_Underscore, '_',
GA_Disabled, TRUE,
TAG_DONE);
NewGadget . ng_GadgetText = "";
NewGadget . ng_GadgetID = Counter;
NewGadget . ng_Flags = 0;
GadgetArray[Counter++] = Gadget = CreateGadget(LISTVIEW_KIND,Gadget,&NewGadget,
SZ_Adjust, TRUE,
SZ_NewColumn, TRUE,
SZ_FullHeight, TRUE,
/* GA_Disabled, TRUE,*/
GTLV_Labels, &EditList,
TAG_DONE);
}
return(Gadget);
}
BYTE
PhonePanel()
{
STATIC WORD OffsetX = -1,OffsetY = -1;
struct Window *PanelWindow;
struct Gadget *GadgetList = NULL;
struct Gadget *GadgetArray[GAD_EDIT + 1];
ULONG Sec1,Mic1,Sec2,Mic2;
LONG HitItem = -1;
if(CreateAllGadgets(&GadgetArray[0],&GadgetList,VisualInfo,Screen -> WBorTop + Screen -> Font -> ta_YSize + 1))
{
if(PanelWindow = OpenWindowTags(NULL,
WA_Left, (Screen -> Width - SZ_GetWindowWidth()) / 2,
WA_Top, (Screen -> Height - SZ_GetWindowHeight()) / 2,
WA_Width, SZ_GetWindowWidth(),
WA_Height, SZ_GetWindowHeight(),
WA_Activate, TRUE,
WA_DragBar, TRUE,
WA_DepthGadget, TRUE,
WA_RMBTrap, TRUE,
WA_DepthGadget, TRUE,
WA_CloseGadget, TRUE,
WA_CustomScreen,Screen,
WA_IDCMP, IDCMP_GADGETDOWN | IDCMP_ACTIVEWINDOW | IDCMP_CLOSEWINDOW | IDCMP_VANILLAKEY | STRINGIDCMP | BUTTONIDCMP | LISTVIEWIDCMP,
WA_Title, LocaleString(MSG_PHONEPANEL_PHONEBOOK_TXT),
TAG_DONE))
{
struct IntuiMessage *Massage;
ULONG Class,Code;
struct Gadget *Gadget;
BYTE Terminated = FALSE;
UBYTE DummyBuffer[256],*DummyChar;
LONG Selected = ~0,
Count = -1,i;
struct List *PhoneList = NULL;
struct PhoneNode *TempNode;
struct FileRequest *FileRequest;
PushWindow(PanelWindow);
AddGList(PanelWindow,GadgetList,(UWORD)-1,(UWORD)-1,NULL);
RefreshGList(GadgetList,PanelWindow,NULL,(UWORD)-1);
GT_RefreshWindow(PanelWindow,NULL);
if(Phonebook && NumPhoneEntries)
{
if(PhoneList = CreatePhoneList())
{
GT_SetGadgetAttrs(GadgetArray[GAD_NAMELIST],PanelWindow,NULL,
GTLV_Labels,PhoneList,
TAG_DONE);
if(PhoneList -> lh_Head -> ln_Succ)
{
GT_SetGadgetAttrs(GadgetArray[GAD_SAVELIST],PanelWindow,NULL,
GA_Disabled, FALSE,
TAG_DONE);
GT_SetGadgetAttrs(GadgetArray[GAD_PASSWORD],PanelWindow,NULL,
GA_Disabled, FALSE,
TAG_DONE);
if(PhoneList -> lh_Head -> ln_Succ -> ln_Succ)
{
GT_SetGadgetAttrs(GadgetArray[GAD_SORTLIST],PanelWindow,NULL,
GA_Disabled, FALSE,
TAG_DONE);
}
}
}
}
ActiveGadget = NULL;
FreeDialList();
for(i = 0 ; i < NumPhoneEntries ; i++)
{
if(Phonebook[i] -> Count > Count)
Count = Phonebook[i] -> Count;
}
Count++;
if(Count)
{
if(!Online)
{
GT_SetGadgetAttrs(GadgetArray[GAD_DIALLIST],PanelWindow,NULL,
GA_Disabled, FALSE,
TAG_DONE);
}
GT_SetGadgetAttrs(GadgetArray[GAD_CLEARLIST],PanelWindow,NULL,
GA_Disabled, FALSE,
TAG_DONE);
}
while(!Terminated)
{
WaitPort(PanelWindow -> UserPort);
while(!Terminated && (Massage = (struct IntuiMessage *)GT_GetIMsg(PanelWindow -> UserPort)))
{
Class = Massage -> Class;
Code = Massage -> Code;
Gadget = (struct Gadget *)Massage -> IAddress;
GT_ReplyIMsg(Massage);
if(Class == IDCMP_VANILLAKEY)
{
switch(Code)
{
case ' ': if(Selected != -1)
{
HitItem = -1;
GT_SetGadgetAttrs(GadgetArray[GAD_NAMELIST],PanelWindow,NULL,
GTLV_Labels, ~0,
TAG_DONE);
if(Phonebook[Selected] -> Count == -1)
{
if(!Count)
{
if(!Online)
{
GT_SetGadgetAttrs(GadgetArray[GAD_DIALLIST],PanelWindow,NULL,
GA_Disabled, FALSE,
TAG_DONE);
}
GT_SetGadgetAttrs(GadgetArray[GAD_CLEARLIST],PanelWindow,NULL,
GA_Disabled, FALSE,
TAG_DONE);
}
Phonebook[Selected] -> Count = Count++;
SPrintf(Phonebook[Selected] -> Node -> LocalName,"%3ld - %s",Count,Phonebook[Selected] -> Name);
}
else
{
RemoveDialEntry(Selected);
if(!(--Count))
{
GT_SetGadgetAttrs(GadgetArray[GAD_DIALLIST],PanelWindow,NULL,
GA_Disabled, TRUE,
TAG_DONE);
GT_SetGadgetAttrs(GadgetArray[GAD_CLEARLIST],PanelWindow,NULL,
GA_Disabled, TRUE,
TAG_DONE);
}
}
GT_SetGadgetAttrs(GadgetArray[GAD_NAMELIST],PanelWindow,NULL,
GTLV_Labels, PhoneList,
TAG_DONE);
}
break;
default: KeySelect(GadgetArray,GAD_PASSWORD,Code,PanelWindow,&Gadget,&Class,&Code);
break;
}
}
if(Class == IDCMP_GADGETDOWN)
{
if((Gadget -> GadgetType & GTYP_GTYPEMASK) == GTYP_STRGADGET)
ActiveGadget = Gadget;
}
if(Class == IDCMP_ACTIVEWINDOW && ActiveGadget)
ActivateGadget(ActiveGadget,PanelWindow,NULL);
if(Class == IDCMP_CLOSEWINDOW)
{
FreeDialList();
Terminated = TRUE;
}
if(Class == IDCMP_GADGETUP)
{
switch(Gadget -> GadgetID)
{
case GAD_NAMELIST:
if(HitItem != Code)
{
HitItem = Code;
CurrentTime(&Sec1,&Mic1);
GT_SetGadgetAttrs(GadgetArray[GAD_NAME],PanelWindow,NULL,
GTST_String, Phonebook[Code] -> Name,
GA_Disabled, FALSE,
TAG_DONE);
GT_SetGadgetAttrs(GadgetArray[GAD_PHONENUMBER],PanelWindow,NULL,
GTST_String, Phonebook[Code] -> Number,
GA_Disabled, FALSE,
TAG_DONE);
GT_SetGadgetAttrs(GadgetArray[GAD_PLAYNUMBER],PanelWindow,NULL,
GA_Disabled, FALSE,
TAG_DONE);
GT_SetGadgetAttrs(GadgetArray[GAD_USEIT],PanelWindow,NULL,
GA_Disabled, FALSE,
TAG_DONE);
GT_SetGadgetAttrs(GadgetArray[GAD_REMOVEENTRY],PanelWindow,NULL,
GA_Disabled, (Phonebook[Code] == ChosenEntry && Online),
TAG_DONE);
GT_SetGadgetAttrs(GadgetArray[GAD_CLONEENTRY],PanelWindow,NULL,
GA_Disabled, FALSE,
TAG_DONE);
/* GT_SetGadgetAttrs(GadgetArray[GAD_EDIT],PanelWindow,NULL,
GA_Disabled, FALSE,
TAG_DONE);*/
Selected = Code;
}
else
{
CurrentTime(&Sec2,&Mic2);
if(DoubleClick(Sec1,Mic1,Sec2,Mic2))
{
HitItem = -1;
GT_SetGadgetAttrs(GadgetArray[GAD_NAMELIST],PanelWindow,NULL,
GTLV_Labels, ~0,
TAG_DONE);
if(Phonebook[Selected] -> Count == -1)
{
if(!Count)
{
if(!Online)
{
GT_SetGadgetAttrs(GadgetArray[GAD_DIALLIST],PanelWindow,NULL,
GA_Disabled, FALSE,
TAG_DONE);
}
GT_SetGadgetAttrs(GadgetArray[GAD_CLEARLIST],PanelWindow,NULL,
GA_Disabled, FALSE,
TAG_DONE);
}
Phonebook[Selected] -> Count = Count++;
SPrintf(Phonebook[Selected] -> Node -> LocalName,"%3ld - %s",Count,Phonebook[Selected] -> Name);
}
else
{
RemoveDialEntry(Selected);
if(!(--Count))
{
GT_SetGadgetAttrs(GadgetArray[GAD_DIALLIST],PanelWindow,NULL,
GA_Disabled, TRUE,
TAG_DONE);
GT_SetGadgetAttrs(GadgetArray[GAD_CLEARLIST],PanelWindow,NULL,
GA_Disabled, TRUE,
TAG_DONE);
}
}
GT_SetGadgetAttrs(GadgetArray[GAD_NAMELIST],PanelWindow,NULL,
GTLV_Labels, PhoneList,
TAG_DONE);
}
Sec1 = Sec2;
Mic1 = Mic2;
}
break;
case GAD_CLEARLIST:
GT_SetGadgetAttrs(GadgetArray[GAD_NAMELIST],PanelWindow,NULL,
GTLV_Labels, ~0,
TAG_DONE);
Count = 0;
for(i = 0 ; i < NumPhoneEntries ; i++)
{
SPrintf(Phonebook[i] -> Node -> LocalName," %s",Phonebook[i] -> Name);
Phonebook[i] -> Count = -1;
}
GT_SetGadgetAttrs(GadgetArray[GAD_NAMELIST],PanelWindow,NULL,
GTLV_Labels, PhoneList,
TAG_DONE);
GT_SetGadgetAttrs(GadgetArray[GAD_DIALLIST],PanelWindow,NULL,
GA_Disabled, TRUE,
TAG_DONE);
GT_SetGadgetAttrs(GadgetArray[GAD_CLEARLIST],PanelWindow,NULL,
GA_Disabled, TRUE,
TAG_DONE);
break;
case GAD_PLAYNUMBER:
if(Selected != ~0)
{
UBYTE *String = Phonebook[Selected] -> Number;
ExtractString(String,DummyBuffer,FALSE);
BlockWindow(PanelWindow);
if(!ToneDial(DummyBuffer))
MyEasyRequest(NULL,LocaleString(MSG_GLOBAL_TERM_HAS_A_PROBLEM_TXT),LocaleString(MSG_GLOBAL_CONTINUE_TXT),LocaleString(MSG_GLOBAL_FAILED_TO_ALLOCATE_RESOURCES_FOR_PLAYING_TXT));
ReleaseWindow(PanelWindow);
}
break;
case GAD_USEIT:
if(Selected != ~0)
{
CopyMem(&Config,&PrivateConfig,sizeof(struct Configuration));
CopyMem(&Phonebook[Selected] -> Config,&Config,sizeof(struct Configuration));
ConfigSetup();
Terminated = TRUE;
}
break;
case GAD_NEWENTRY:
GT_SetGadgetAttrs(GadgetArray[GAD_NAMELIST],PanelWindow,NULL,
GTLV_Labels, ~0,
TAG_DONE);
if(PhoneList)
{
DeletePhoneList(PhoneList);
PhoneList = NULL;
}
if(NewPhoneEntry())
{
if(PhoneList = CreatePhoneList())
{
Selected = NumPhoneEntries - 1;
GT_SetGadgetAttrs(GadgetArray[GAD_NAMELIST],PanelWindow,NULL,
GTLV_Labels, PhoneList,
GTLV_Selected, Selected,
TAG_DONE);
GT_SetGadgetAttrs(GadgetArray[GAD_NAME],PanelWindow,NULL,
GTST_String, Phonebook[Selected] -> Name,
GA_Disabled, FALSE,
TAG_DONE);
GT_SetGadgetAttrs(GadgetArray[GAD_PHONENUMBER],PanelWindow,NULL,
GTST_String, Phonebook[Selected] -> Number,
GA_Disabled, FALSE,
TAG_DONE);
GT_SetGadgetAttrs(GadgetArray[GAD_PLAYNUMBER],PanelWindow,NULL,
GA_Disabled, FALSE,
TAG_DONE);
GT_SetGadgetAttrs(GadgetArray[GAD_USEIT],PanelWindow,NULL,
GA_Disabled, FALSE,
TAG_DONE);
GT_SetGadgetAttrs(GadgetArray[GAD_REMOVEENTRY],PanelWindow,NULL,
GA_Disabled, FALSE,
TAG_DONE);
GT_SetGadgetAttrs(GadgetArray[GAD_CLONEENTRY],PanelWindow,NULL,
GA_Disabled, FALSE,
TAG_DONE);
/* GT_SetGadgetAttrs(GadgetArray[GAD_EDIT],PanelWindow,NULL,
GA_Disabled, FALSE,
TAG_DONE);*/
if(NumPhoneEntries == 1)
{
GT_SetGadgetAttrs(GadgetArray[GAD_SAVELIST],PanelWindow,NULL,
GA_Disabled, FALSE,
TAG_DONE);
GT_SetGadgetAttrs(GadgetArray[GAD_PASSWORD],PanelWindow,NULL,
GA_Disabled, FALSE,
TAG_DONE);
}
if(NumPhoneEntries == 2)
{
GT_SetGadgetAttrs(GadgetArray[GAD_SORTLIST],PanelWindow,NULL,
GA_Disabled, FALSE,
TAG_DONE);
}
ActivateGadget(GadgetArray[GAD_NAME],PanelWindow,NULL);
ActiveGadget = GadgetArray[GAD_NAME];
}
else
goto ClearList;
}
else
goto ClearList;
break;
case GAD_CLONEENTRY:
if(Selected != ~0)
{
GT_SetGadgetAttrs(GadgetArray[GAD_NAMELIST],PanelWindow,NULL,
GTLV_Labels, ~0,
TAG_DONE);
if(PhoneList)
{
DeletePhoneList(PhoneList);
PhoneList = NULL;
}
if(NewPhoneEntry())
{
if(PhoneList = CreatePhoneList())
{
LONG Tmp = Selected;
Selected = NumPhoneEntries - 1;
CopyMem(Phonebook[Tmp] -> Name,Phonebook[Selected] -> Name,sizeof(struct PhoneEntry) - (sizeof(struct PhoneNode) + sizeof(LONG)));
SPrintf(Phonebook[Selected] -> Node -> LocalName," %s",Phonebook[Selected] -> Name);
GT_SetGadgetAttrs(GadgetArray[GAD_NAMELIST],PanelWindow,NULL,
GTLV_Labels, PhoneList,
GTLV_Selected, Selected,
TAG_DONE);
GT_SetGadgetAttrs(GadgetArray[GAD_NAME],PanelWindow,NULL,
GTST_String, Phonebook[Selected] -> Name,
TAG_DONE);
GT_SetGadgetAttrs(GadgetArray[GAD_PHONENUMBER],PanelWindow,NULL,
GTST_String, Phonebook[Selected] -> Number,
TAG_DONE);
}
else
goto ClearList;
}
else
goto ClearList;
}
break;
case GAD_REMOVEENTRY:
if(Selected != ~0)
{
if(Phonebook[Selected] == ChosenEntry)
MyEasyRequest(Window,LocaleString(MSG_PHONEPANEL_PHONE_ENTRY_IN_USE_TXT),LocaleString(MSG_GLOBAL_CONTINUE_TXT));
else
{
GT_SetGadgetAttrs(GadgetArray[GAD_NAMELIST],PanelWindow,NULL,
GTLV_Labels,~0,
TAG_DONE);
if(PhoneList)
{
DeletePhoneList(PhoneList);
PhoneList = NULL;
}
if(Phonebook[Selected] -> Count != -1)
{
RemoveDialEntry(Selected);
if(!(--Count))
{
GT_SetGadgetAttrs(GadgetArray[GAD_DIALLIST],PanelWindow,NULL,
GA_Disabled, TRUE,
TAG_DONE);
GT_SetGadgetAttrs(GadgetArray[GAD_CLEARLIST],PanelWindow,NULL,
GA_Disabled, TRUE,
TAG_DONE);
}
}
RemPhoneEntry(Selected);
if(NumPhoneEntries > 0)
{
if(PhoneList = CreatePhoneList())
{
if(Selected == NumPhoneEntries)
Selected--;
GT_SetGadgetAttrs(GadgetArray[GAD_NAMELIST],PanelWindow,NULL,
GTLV_Labels, PhoneList,
GTLV_Selected, Selected,
TAG_DONE);
GT_SetGadgetAttrs(GadgetArray[GAD_NAME],PanelWindow,NULL,
GTST_String, Phonebook[Selected] -> Name,
TAG_DONE);
GT_SetGadgetAttrs(GadgetArray[GAD_PHONENUMBER],PanelWindow,NULL,
GTST_String, Phonebook[Selected] -> Number,
TAG_DONE);
}
else
goto ClearList;
if(NumPhoneEntries == 1)
{
GT_SetGadgetAttrs(GadgetArray[GAD_SORTLIST],PanelWindow,NULL,
GA_Disabled, TRUE,
TAG_DONE);
}
}
else
{
ClearList: GT_SetGadgetAttrs(GadgetArray[GAD_NAMELIST],PanelWindow,NULL,
GTLV_Labels, &EmptyList,
TAG_DONE);
GT_SetGadgetAttrs(GadgetArray[GAD_NAME],PanelWindow,NULL,
GTST_String, "",
GA_Disabled, TRUE,
TAG_DONE);
GT_SetGadgetAttrs(GadgetArray[GAD_PHONENUMBER],PanelWindow,NULL,
GTST_String, "",
GA_Disabled, TRUE,
TAG_DONE);
GT_SetGadgetAttrs(GadgetArray[GAD_PLAYNUMBER],PanelWindow,NULL,
GA_Disabled, TRUE,
TAG_DONE);
GT_SetGadgetAttrs(GadgetArray[GAD_USEIT],PanelWindow,NULL,
GA_Disabled, TRUE,
TAG_DONE);
GT_SetGadgetAttrs(GadgetArray[GAD_REMOVEENTRY],PanelWindow,NULL,
GA_Disabled, TRUE,
TAG_DONE);
GT_SetGadgetAttrs(GadgetArray[GAD_CLONEENTRY],PanelWindow,NULL,
GA_Disabled, TRUE,
TAG_DONE);
GT_SetGadgetAttrs(GadgetArray[GAD_SAVELIST],PanelWindow,NULL,
GA_Disabled, TRUE,
TAG_DONE);
GT_SetGadgetAttrs(GadgetArray[GAD_PASSWORD],PanelWindow,NULL,
GA_Disabled, TRUE,
TAG_DONE);
GT_SetGadgetAttrs(GadgetArray[GAD_SORTLIST],PanelWindow,NULL,
GA_Disabled, TRUE,
TAG_DONE);
/* GT_SetGadgetAttrs(GadgetArray[GAD_EDIT],PanelWindow,NULL,
GA_Disabled, TRUE,
TAG_DONE);*/
ActiveGadget = NULL;
Selected = ~0;
HitItem = -1;
}
}
}
break;
case GAD_NAME:
if(Selected != ~0)
{
strcpy(Phonebook[Selected] -> Name,GT_STRING(GadgetArray[GAD_NAME]));
GT_SetGadgetAttrs(GadgetArray[GAD_NAMELIST],PanelWindow,NULL,
GTLV_Labels,~0,
TAG_DONE);
if(PhoneList)
DeletePhoneList(PhoneList);
if(PhoneList = CreatePhoneList())
{
GT_SetGadgetAttrs(GadgetArray[GAD_NAMELIST],PanelWindow,NULL,
GTLV_Labels, PhoneList,
GTLV_Selected, Selected,
TAG_DONE);
}
}
break;
case GAD_PHONENUMBER:
if(Selected != ~0)
strcpy(Phonebook[Selected] -> Number,GT_STRING(GadgetArray[GAD_PHONENUMBER]));
break;
case GAD_LOADLIST:
BlockWindow(PanelWindow);
if(ChosenEntry)
MyEasyRequest(Window,LocaleString(MSG_PHONEPANEL_PHONE_ENTRY_IN_USE_LOAD_TXT),LocaleString(MSG_GLOBAL_CONTINUE_TXT));
else
{
strcpy(DummyBuffer,LastPhone);
DummyChar = PathPart(DummyBuffer);
*DummyChar = 0;
if(FileRequest = GetFile(LocaleString(MSG_PHONEPANEL_LOAD_PHONEBOOK_TXT),DummyBuffer,FilePart(LastPhone),DummyBuffer,"#?.prefs",FALSE,FALSE,FALSE,LocaleString(MSG_GLOBAL_LOAD_TXT)))
{
if(PhoneList)
DeletePhoneList(PhoneList);
PhoneList = NULL;
if(!LoadPhonebook(DummyBuffer))
MyEasyRequest(Window,LocaleString(MSG_PHONEPANEL_COULD_NOT_LOAD_PHONEBOOK_TXT),LocaleString(MSG_GLOBAL_CONTINUE_TXT),DummyBuffer);
else
strcpy(LastPhone,DummyBuffer);
if(PhoneList = CreatePhoneList())
{
GT_SetGadgetAttrs(GadgetArray[GAD_NAMELIST],PanelWindow,NULL,
GTLV_Labels, PhoneList,
TAG_DONE);
FreeDialList();
}
Count = 0;
GT_SetGadgetAttrs(GadgetArray[GAD_NAME],PanelWindow,NULL,
GTST_String, "",
GA_Disabled, TRUE,
TAG_DONE);
GT_SetGadgetAttrs(GadgetArray[GAD_PHONENUMBER],PanelWindow,NULL,
GTST_String, "",
GA_Disabled, TRUE,
TAG_DONE);
GT_SetGadgetAttrs(GadgetArray[GAD_PLAYNUMBER],PanelWindow,NULL,
GA_Disabled, TRUE,
TAG_DONE);
GT_SetGadgetAttrs(GadgetArray[GAD_USEIT],PanelWindow,NULL,
GA_Disabled, TRUE,
TAG_DONE);
GT_SetGadgetAttrs(GadgetArray[GAD_REMOVEENTRY],PanelWindow,NULL,
GA_Disabled, TRUE,
TAG_DONE);
GT_SetGadgetAttrs(GadgetArray[GAD_CLONEENTRY],PanelWindow,NULL,
GA_Disabled, TRUE,
TAG_DONE);
GT_SetGadgetAttrs(GadgetArray[GAD_DIALLIST],PanelWindow,NULL,
GA_Disabled, TRUE,
TAG_DONE);
GT_SetGadgetAttrs(GadgetArray[GAD_CLEARLIST],PanelWindow,NULL,
GA_Disabled, TRUE,
TAG_DONE);
/* GT_SetGadgetAttrs(GadgetArray[GAD_EDIT],PanelWindow,NULL,
GA_Disabled, TRUE,
TAG_DONE);*/
ActiveGadget = NULL;
if(PhoneList)
{
if(!PhoneList -> lh_Head -> ln_Succ)
{
GT_SetGadgetAttrs(GadgetArray[GAD_SAVELIST],PanelWindow,NULL,
GA_Disabled, TRUE,
TAG_DONE);
GT_SetGadgetAttrs(GadgetArray[GAD_PASSWORD],PanelWindow,NULL,
GA_Disabled, TRUE,
TAG_DONE);
GT_SetGadgetAttrs(GadgetArray[GAD_SORTLIST],PanelWindow,NULL,
GA_Disabled, TRUE,
TAG_DONE);
}
else
{
GT_SetGadgetAttrs(GadgetArray[GAD_SAVELIST],PanelWindow,NULL,
GA_Disabled, FALSE,
TAG_DONE);
GT_SetGadgetAttrs(GadgetArray[GAD_PASSWORD],PanelWindow,NULL,
GA_Disabled, FALSE,
TAG_DONE);
if(PhoneList -> lh_Head -> ln_Succ -> ln_Succ)
{
GT_SetGadgetAttrs(GadgetArray[GAD_SORTLIST],PanelWindow,NULL,
GA_Disabled, FALSE,
TAG_DONE);
}
else
{
GT_SetGadgetAttrs(GadgetArray[GAD_SORTLIST],PanelWindow,NULL,
GA_Disabled, TRUE,
TAG_DONE);
}
}
}
Selected = ~0;
HitItem = -1;
FreeAslRequest(FileRequest);
}
}
ReleaseWindow(PanelWindow);
break;
case GAD_SORTLIST:
if(NumPhoneEntries > 1)
{
BlockWindow(PanelWindow);
GT_SetGadgetAttrs(GadgetArray[GAD_NAMELIST],PanelWindow,NULL,
GTLV_Labels, ~0,
TAG_DONE);
GT_SetGadgetAttrs(GadgetArray[GAD_NAME],PanelWindow,NULL,
GTST_String, "",
GA_Disabled, TRUE,
TAG_DONE);
GT_SetGadgetAttrs(GadgetArray[GAD_PHONENUMBER],PanelWindow,NULL,
GTST_String, "",
GA_Disabled, TRUE,
TAG_DONE);
GT_SetGadgetAttrs(GadgetArray[GAD_PLAYNUMBER],PanelWindow,NULL,
GA_Disabled, TRUE,
TAG_DONE);
GT_SetGadgetAttrs(GadgetArray[GAD_USEIT],PanelWindow,NULL,
GA_Disabled, TRUE,
TAG_DONE);
GT_SetGadgetAttrs(GadgetArray[GAD_REMOVEENTRY],PanelWindow,NULL,
GA_Disabled, TRUE,
TAG_DONE);
GT_SetGadgetAttrs(GadgetArray[GAD_CLONEENTRY],PanelWindow,NULL,
GA_Disabled, TRUE,
TAG_DONE);
/*
GT_SetGadgetAttrs(GadgetArray[GAD_EDIT],PanelWindow,NULL,
GA_Disabled, TRUE,
TAG_DONE);*/
ActiveGadget = NULL;
if(PhoneList)
DeletePhoneList(PhoneList);
SortPhoneEntries();
if(PhoneList = CreatePhoneList())
{
GT_SetGadgetAttrs(GadgetArray[GAD_NAMELIST],PanelWindow,NULL,
GTLV_Labels, PhoneList,
GTLV_Selected, ~0,
TAG_DONE);
}
Selected = ~0;
HitItem = -1;
ReleaseWindow(PanelWindow);
}
break;
case GAD_SAVELIST:
if(NumPhoneEntries)
{
strcpy(DummyBuffer,LastPhone);
DummyChar = PathPart(DummyBuffer);
*DummyChar = 0;
BlockWindow(PanelWindow);
if(FileRequest = GetFile(LocaleString(MSG_PHONEPANEL_SAVE_PHONEBOOK_TXT),DummyBuffer,FilePart(LastPhone),DummyBuffer,"#?.prefs",TRUE,FALSE,FALSE,LocaleString(MSG_GLOBAL_SAVE_TXT)))
{
if(!SavePhonebook(DummyBuffer))
MyEasyRequest(Window,LocaleString(MSG_PHONEPANEL_COULD_NOT_CREATE_TXT),LocaleString(MSG_GLOBAL_CONTINUE_TXT),DummyBuffer);
else
strcpy(LastPhone,DummyBuffer);
FreeAslRequest(FileRequest);
}
ReleaseWindow(PanelWindow);
}
break;
case GAD_COPYCONFIG:
BlockWindow(PanelWindow);
if(Selected == ~0)
CopyPanel(NULL);
else
CopyPanel(&Phonebook[Selected] -> Config);
ReleaseWindow(PanelWindow);
break;
case GAD_PASSWORD:
BlockWindow(PanelWindow);
{
struct Gadget *OldActiveGadget = ActiveGadget;
memset(SharedBuffer,0,20);
PhonePasswordUsed = FALSE;
if(xpr_gets(LocaleString(MSG_PHONEPANEL_PLEASE_ENTER_PASSWORD_TXT),SharedBuffer))
{
if(SharedBuffer[0])
{
SharedBuffer[20] = 0;
Encrypt(SharedBuffer,20,PhonePassword,SharedBuffer,strlen(SharedBuffer),TRUE);
PhonePasswordUsed = TRUE;
}
}
ActiveGadget = OldActiveGadget;
}
ReleaseWindow(PanelWindow);
break;
case GAD_EDIT:
if(Selected != ~0)
{
BlockWindow(PanelWindow);
switch(Code)
{
case EDIT_SERIAL: SerialPanel(&Phonebook[Selected] -> Config);
break;
case EDIT_MODEM: ModemPanel(&Phonebook[Selected] -> Config);
break;
case EDIT_TRANSFER: strcpy(DummyBuffer,LastXprLibrary);
if(SelectProtocol(Phonebook[Selected] -> Config . Protocol,PanelWindow))
strcpy(Phonebook[Selected] -> Config . Protocol,LastXprLibrary);
strcpy(LastXprLibrary,DummyBuffer);
break;
case EDIT_SCREEN: ScreenPanel(&Phonebook[Selected] -> Config);
break;
case EDIT_TERMINAL: TerminalPanel(&Phonebook[Selected] -> Config);
break;
case EDIT_COMMANDS: CommandPanel(&Phonebook[Selected] -> Config);
break;
case EDIT_MISC: MiscPanel(&Phonebook[Selected] -> Config);
break;
case EDIT_PATHS: PathPanel(&Phonebook[Selected] -> Config);
break;
case EDIT_UNITS: if(Phonebook[Selected] == ChosenEntry)
MyEasyRequest(Window,LocaleString(MSG_PHONEPANEL_PHONE_ENTRY_IN_USE_EDIT_TXT),LocaleString(MSG_GLOBAL_CONTINUE_TXT),DummyBuffer);
else
{
GT_SetGadgetAttrs(GadgetArray[GAD_NAMELIST],PanelWindow,NULL,
GTLV_Labels, ~0,
TAG_DONE);
RatePanel(PhoneList,Phonebook[Selected]);
GT_SetGadgetAttrs(GadgetArray[GAD_NAMELIST],PanelWindow,NULL,
GTLV_Labels, PhoneList,
GTLV_Selected, Selected,
TAG_DONE);
}
break;
case EDIT_KEYMACROS: strcpy(DummyBuffer,Phonebook[Selected] -> Config . MacroFile);
DummyChar = PathPart(DummyBuffer);
*DummyChar = 0;
if(FileRequest = GetFile(LocaleString(MSG_PHONEPANEL_SELECT_KEYBOARD_MACROS_TXT),DummyBuffer,FilePart(Phonebook[Selected] -> Config . MacroFile),DummyBuffer,"#?.prefs",FALSE,FALSE,FALSE,LocaleString(MSG_GLOBAL_SELECT_TXT)))
{
strcpy(Phonebook[Selected] -> Config . MacroFile,DummyBuffer);
FreeAslRequest(FileRequest);
}
break;
case EDIT_FASTMACROS: strcpy(DummyBuffer,Phonebook[Selected] -> Config . FastMacroFile);
DummyChar = PathPart(DummyBuffer);
*DummyChar = 0;
if(FileRequest = GetFile(LocaleString(MSG_PHONEPANEL_SELECT_FAST_MACROS_TXT),DummyBuffer,FilePart(Phonebook[Selected] -> Config . FastMacroFile),DummyBuffer,"#?.prefs",FALSE,FALSE,FALSE,LocaleString(MSG_GLOBAL_SELECT_TXT)))
{
strcpy(Phonebook[Selected] -> Config . FastMacroFile,DummyBuffer);
FreeAslRequest(FileRequest);
}
break;
case EDIT_PASSWORD: PasswordUserPanel(Phonebook[Selected]);
break;
}
ActiveGadget = GadgetArray[GAD_NAME];
ReleaseWindow(PanelWindow);
}
else
{
if(Code == EDIT_COPY)
{
BlockWindow(PanelWindow);
CopyPanel(NULL);
if(!GT_DISABLED(GadgetArray[GAD_NAME]))
ActiveGadget = GadgetArray[GAD_NAME];
else
ActiveGadget = NULL;
ReleaseWindow(PanelWindow);
}
}
break;
case GAD_DIALLIST:
if(Count)
{
FreeDialList();
TempNode = (struct PhoneNode *)PhoneList -> lh_Head;
while(TempNode -> VanillaNode . ln_Succ)
{
if(TempNode -> Entry -> Count != -1)
SortToList(TempNode);
TempNode = (struct PhoneNode *)TempNode -> VanillaNode . ln_Succ;
}
Terminated = TRUE;
}
break;
default: break;
}
}
}
}
DeleteTone();
if(PhoneList)
DeletePhoneList(PhoneList);
RemoveGList(PanelWindow,GadgetList,(UWORD)-1);
PopWindow();
OffsetX = PanelWindow -> LeftEdge;
OffsetY = PanelWindow -> TopEdge;
CloseWindow(PanelWindow);
}
}
FreeGadgets(GadgetList);
if(DialList)
return(TRUE);
else
return(FALSE);
}