home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
Amiga Format CD 18
/
amigaformatcd18.iso
/
-readerstuff-
/
steve_boxall
/
contact97gui_handle.c
< prev
next >
Wrap
C/C++ Source or Header
|
1997-07-18
|
38KB
|
1,687 lines
/***********************************************
IDCMP Handler For Contact97
************************************************/
void ShowAboutContact97(void);
void ShowEditContact97(char *name);
void ShowFindContact97(void);
void WriteDataFile(void);
void updateStrGad(struct Window *win, struct Gadget *gad, UBYTE *newstr);
void AddName(struct List *, struct List *, UBYTE *);
void FreeNameNodes(struct List * list, int type);
void UpdateLVList(struct Window *win,struct Gadget *gad,struct List *list,int num);
struct List *FindAddrName(struct List *list, UBYTE *name);
void AddAddr(struct List *list, struct AddressAddress *addrnode);
void DeleteAddressLine(struct List *list,long number, int DelMode);
void DeleteAddressName(struct List *list, UBYTE *name, int type);
void NewAddrName(struct List *list, UBYTE *name);
void LoadContactData(struct List *list1, struct List *list2);
int ReadLine(char *s, int sdblim, FILE *input);
char *substr(char *from, long start,long cnt);
long ScanField(char *line,long start);
void SaveDataFile(FILE *output,struct List *list, long DelMode);
void DummyProjectIDCMP(struct Window *wnd);
void AddTempName(struct List *list, struct NameNode *addrnode);
void CheckName(struct List *list, UBYTE *name, struct Node *node);
void CheckString(struct List *list, UBYTE *item, UBYTE *name, struct Node *node);
struct List *FindItThen(UBYTE *name);
void FindItWhen(struct List *list,UBYTE *name);
void CheckAddress(struct List *list, UBYTE *name, struct Node *node);
char *LocateFoundNode(struct List *list,long item);
void PrintAddrNodes(struct List *list, char type[]);
int WaitForPrinter(void);
int PrintItNow(char *title,char *text);
int PrintNameTitles(void);
int PrintAddrNodes2(char *name, char type[]);
int PrintItLine(char *title,char *text);
/***********************************************
Check for DblClick on Main Listview
************************************************/
int NameList01Clicked( void )
{
/* routine when gadget "" is clicked. */
long result=0;
long selected=-1;
result=GT_GetGadgetAttrs(Project0Gadgets[4],Project0Wnd,NULL,GTLV_Selected,&selected,TAG_END);
if(result==1 && selected_g==selected)
{
Name01Clicked();
selected =-1;
}
selected_g=selected;
ActivateGadget(Project0Gadgets[3],Project0Wnd,NULL);
}
/***********************************************
Add New Name Record Clicked
************************************************/
int Add01Clicked( void )
{
/* routine when gadget "Add" is clicked. */
if(Contact97Request(Project0Wnd,"Ok To Add New Name??\0","Ok|Cancel\0")==100)
{
if (FindName(NameList010List,GetString(Project0Gadgets[3]))==0)
{
AddName(NameList010List,AddrList010List,GetString(Project0Gadgets[3]));
Edit01Clicked();
UpdateLVList(Project0Wnd,Project0Gadgets[4],NameList010List,1);
}
else
{
Contact97Request(Project0Wnd,"Duplicate Name - Unable To Add\0","Ok\0");
}
}
}
/***********************************************
Edit Record Clicked
************************************************/
int Edit01Clicked( void )
{
/* routine when gadget "Edit" is clicked. */
ShowEditContact97(GetString(Project0Gadgets[3]));
}
/***********************************************
Quit Contact97 Clicked
************************************************/
int Quit01Clicked( void )
{
/* routine when gadget "Quit" is clicked. */
return Project0CloseWindow();
}
/***********************************************
Main LView entry box selected
************************************************/
int Name01Clicked( void )
{
/* routine when gadget "" is clicked. */
if(Project0RawKey()!=95)
{
if(FindName(NameList010List,GetString(Project0Gadgets[3]))==0)
{
Add01Clicked();
}
else
{
Edit01Clicked();
}
}
}
/***********************************************
Find Button Clicked
************************************************/
int Find01Clicked( void )
{
/* routine when gadget "Find" is clicked. */
ShowFindContact97();
}
/***********************************************
Address LView Clicked
************************************************/
int Address01Clicked( void )
{
/* routine when gadget "" is clicked. */
ActivateGadget(Project1Gadgets[12],Project1Wnd,NULL);
}
/***********************************************
Add New Address Line Clicked
************************************************/
int AddAddress01Clicked( void )
{
struct AddressAddress *addrnode=AllocMem(sizeof(struct AddressAddress),MEMF_CLEAR);
AddAddr(addrlist_g, addrnode);
UpdateLVList(Project1Wnd,Project1Gadgets[13],addrlist_g,1);
GT_SetGadgetAttrs(Project1Gadgets[13],Project1Wnd,NULL,GTLV_Selected,999,GTLV_Top,999,TAG_END);
ActivateGadget(Project1Gadgets[12],Project1Wnd,NULL);
}
/***********************************************
Delete Selected Address Line
************************************************/
int DelAddress01Clicked( void )
{
/* routine when gadget "-" is clicked. */
long result=0;
long selected=0;
result=GT_GetGadgetAttrs(Project1Gadgets[13],Project1Wnd,NULL,GTLV_Selected,&selected,TAG_END);
if(result==1)
{
DeleteAddressLine(addrlist_g,selected,0);
UpdateLVList(Project1Wnd,Project1Gadgets[13],addrlist_g,1);
}
}
/***********************************************
Keep Changes to Name / Address
************************************************/
int OkNew01Clicked( void )
{
/* routine when gadget "Ok" is clicked on Edit Window. */
struct NameNode *namenode;
if((namenode=(struct NameNode *)FindName(NameList010List,GetString(Project1Gadgets[10])))!=0)
{
strcpy(namenode->nn_Address.AddrComp, GetString(Project1Gadgets[11]));
strcpy(namenode->nn_Address.AddrEmail, GetString(Project1Gadgets[14]));
strcpy(namenode->nn_Address.AddrTel, GetString(Project1Gadgets[15]));
strcpy(namenode->nn_Address.AddrFax, GetString(Project1Gadgets[16]));
DeleteAddressName(AddrList010List,GetString(Project1Gadgets[10]),0);
NewAddrName(addrlist_g, GetString(Project1Gadgets[10]));
}
return 100;
}
/***********************************************
Cancel Changes to name /address
************************************************/
int AddCancel01Clicked( void )
{
/* routine when gadget "Cancel" is clicked. */
return 100;
}
/***********************************************
Ignore Next 2 routines
************************************************/
int ContactName01Clicked( void )
{
/* routine when gadget "" is clicked. */
Project1RawKey();
}
int CompanyName01Clicked( void )
{
/* routine when gadget "" is clicked. */
Project1RawKey();
}
/***********************************************
Update Address Item
************************************************/
int AddressText01Clicked( void )
{
/* routine when gadget "" is clicked. */
long result=0;
long selected=0;
result=GT_GetGadgetAttrs(Project1Gadgets[13],Project1Wnd,NULL,GTLV_Selected,&selected,TAG_END);
if(result==1 && Project1RawKey()!=95)
{
DeleteAddressLine(addrlist_g,selected,1);
UpdateLVList(Project1Wnd,Project1Gadgets[13],addrlist_g,1);
}
}
/***********************************************
Ignore next 3 routines
************************************************/
int EmailEntry01Clicked( void )
{
/* routine when gadget "" is clicked. */
Project1RawKey();
}
int PhoneEntry01Clicked( void )
{
/* routine when gadget "" is clicked. */
Project1RawKey();
}
int FaxEntry01Clicked( void )
{
/* routine when gadget "" is clicked. */
Project1RawKey();
}
int AboutOk1Clicked( void )
{
/* routine when gadget "Continue" is clicked. */
return 100;
}
int Project0Item0( void )
{
/* routine when (sub)item "Add" is selected. */
Add01Clicked();
}
int Project0Edit01( void )
{
/* routine when (sub)item "Edit" is selected. */
Edit01Clicked();
}
int Project0Find01( void )
{
/* routine when (sub)item "Find" is selected. */
ShowFindContact97();
}
int Project0About01( void )
{
/* routine when (sub)item "About" is selected. */
ShowAboutContact97();
return 0;
}
int Project0Quit01( void )
{
/* routine when (sub)item "Quit" is selected. */
return Project0CloseWindow();
}
int Project0CloseWindow( void )
{
/* routine for "IDCMP_CLOSEWINDOW". */
int reply=0;
reply=Contact97Request(Project0Wnd,"Save Contact97 Data Changes??\0","Yes|No\0");
if(reply !=0)
{
WriteDataFile();
}
return Contact97Request(Project0Wnd,"Quit Contact97??\0","Ok|Cancel\0");
}
int Project1CloseWindow( void )
{
/* routine for "IDCMP_CLOSEWINDOW". */
return 100;
}
int Project2CloseWindow( void )
{
/* routine for "IDCMP_CLOSEWINDOW". */
return 100;
}
int Project3CloseWindow( void )
{
/* routine for "IDCMP_CLOSEWINDOW". */
return 100;
}
/***********************************************
Show Contact97 AboutBox
************************************************/
void ShowAboutContact97(void)
{
int runninga=0;
OpenProject3Window();
while(runninga!=100)
{
runninga=HandleProject3IDCMP();
DummyProjectIDCMP(Project0Wnd);
}
CloseProject3Window();
}
/***********************************************
Kill Contact97 (Ok|Cancel)
************************************************/
int Contact97Request(struct Window *Win, char *MessageRequest, char *ReplyGadget)
{
struct EasyStruct Contact97ES = {
sizeof (struct EasyStruct),
0,
"Contact97 Request",
MessageRequest,
ReplyGadget
};
int reply =0;
reply=EasyRequest( Win, &Contact97ES, NULL, NULL);
if(reply ==1)
{
reply =100;
}
return reply;
}
/***********************************************
Show Contact97 Edit Window
************************************************/
void ShowEditContact97(char *name)
{
int runninga=0;
struct NameNode *namenode;
struct List *addrnode;
if((namenode=(struct NameNode *)FindName(NameList010List,name))!=0)
{
addrnode=FindAddrName(AddrList010List,name);
addrlist_g=addrnode;
OpenProject1Window();
updateStrGad(Project1Wnd,Project1Gadgets[10],name);
updateStrGad(Project1Wnd,Project1Gadgets[11],namenode->nn_Address.AddrComp);
updateStrGad(Project1Wnd,Project1Gadgets[14],namenode->nn_Address.AddrEmail);
updateStrGad(Project1Wnd,Project1Gadgets[15],namenode->nn_Address.AddrTel);
updateStrGad(Project1Wnd,Project1Gadgets[16],namenode->nn_Address.AddrFax);
UpdateLVList(Project1Wnd,Project1Gadgets[13],addrnode,1);
while(runninga!=100)
{
runninga=HandleProject1IDCMP();
if(Project0Wnd!=NULL)
{
DummyProjectIDCMP(Project0Wnd);
}
if(Project2Wnd!=NULL)
{
DummyProjectIDCMP(Project2Wnd);
}
}
CloseProject1Window();
addrlist_g=NULL;
}
}
/***********************************************
Show Contact97 Find Window
************************************************/
void ShowFindContact97(void)
{
int runninga=0;
OpenProject2Window();
ActivateGadget(Project2Gadgets[4],Project2Wnd,NULL);
while(runninga!=100)
{
runninga=HandleProject2IDCMP();
DummyProjectIDCMP(Project0Wnd);
}
CloseProject2Window();
}
/***********************************************
Open Contact97.dat for Write Access
************************************************/
void WriteDataFile(void)
{
FILE *output;
output=fopen("s:contact97.dat","w");
if(output >0)
{
SaveDataFile(output,NameList010List,0);
SaveDataFile(output,AddrList010List,1);
fclose(output);
}
else
{
Contact97Request(Project0Wnd,"Unable to Save Contact97 Data\0","Ok\0");
}
}
/************************************************
Load Contact97 Data File (contact97.dat)
*************************************************/
void LoadContactData(struct List *list1, struct List *list2)
{
char *arg;
char line[141];
long start=0;
long end=0;
struct NameNode *namenode;
struct AddressAddress *addrnode;
int i=0;
FILE *input=fopen("s:contact97.dat","r");
if(input >0)
{
while(!feof(input))
{
ReadLine(line,140,input);
start=ScanField(line,0);
arg=substr(line,0,start);
if(strcmp("01",arg)==0 || strcmp("02",arg)==0)
{
start++;
if(strcmp("01",arg)==0)
{
free(arg);
namenode=AllocMem(sizeof(struct NameNode),MEMF_CLEAR);
if(!(namenode))
{
}
else
{
/************************************************
Data field 1
*************************************************/
end=ScanField(line,start);
arg=substr(line,start,end);
strcpy(namenode->nn_Address.AddrName,arg);
start=start+end+1;
free(arg);
/************************************************
Data field 2
*************************************************/
end=ScanField(line,start);
arg=substr(line,start,end);
strcpy(namenode->nn_Address.AddrComp,arg);
start=start+end+1;
free(arg);
/************************************************
Data field 3
*************************************************/
end=ScanField(line,start);
arg=substr(line,start,end);
strcpy(namenode->nn_Address.AddrEmail,arg);
start=start+end+1;
free(arg);
/************************************************
Data field 4
*************************************************/
end=ScanField(line,start);
arg=substr(line,start,end);
strcpy(namenode->nn_Address.AddrTel,arg);
start=start+end+1;
free(arg);
/************************************************
Data field 5
*************************************************/
end=ScanField(line,start);
arg=substr(line,start,end);
strcpy(namenode->nn_Address.AddrFax,arg);
start=start+end+1;
free(arg);
namenode->nn_Node.ln_Name = namenode->nn_Address.AddrName;
namenode->nn_Node.ln_Type = NAMENODE_ID;
namenode->nn_Node.ln_Pri = 0;
AddTail((struct List *)list1,(struct Node *)namenode);
}
}
if(strcmp("02",arg)==0)
{
free(arg);
addrnode=AllocMem(sizeof(struct AddressAddress),MEMF_CLEAR);
if(!(addrnode))
{
}
else
{
/************************************************
Data field 1
*************************************************/
end=ScanField(line,start);
arg=substr(line,start,end);
addrnode->nn_Node.ln_Name=((struct NameNode *)FindName(list1,arg))->nn_Address.AddrName;
start=start+end+1;
free(arg);
/************************************************
Data field 2
*************************************************/
end=ScanField(line,start);
arg=substr(line,start,end);
strcpy(addrnode->nn_Data,arg);
start=start+end+1;
free(arg);
addrnode->nn_Node.ln_Type = ADDRNODE_ID;
addrnode->nn_Node.ln_Pri = 0;
AddTail((struct List *)list2,(struct Node *)addrnode);
}
}
}
else
{
free(arg);
}
}
fclose(input);
}
}
/************************************************
Read a line from the Contact Data file
*************************************************/
int ReadLine(char *s, int sdblim, FILE *input)
{
int c,i;
for(i=0;i<sdblim-1 && (c=getc(input))!=EOF && c!='\n';i++)
{
s[i]=c;
}
s[i]='\0';
return i;
}
/************************************************
Obtain a sub string from string
*************************************************/
char *substr(char *from,long start,long cnt)
{
char *arg;
arg=calloc(sizeof(char),cnt+1);
strncpy(arg,&from[start],cnt);
arg[cnt]='\0';
return arg;
}
/************************************************
Find Length of Data Field
*************************************************/
long ScanField(char *line,long start)
{
return strcspn(&line[start],",\n");
}
/************************************************
Update string gadget to show new entry
*************************************************/
void updateStrGad(struct Window *win, struct Gadget *gad, UBYTE *newstr)
{
/************************************************
remove gadget from display before changing contents
*************************************************/
RemoveGList(win,gad,1);
/************************************************
Change contents and reset current cursor positions in string
*************************************************/
strcpy(((struct StringInfo *) (gad->SpecialInfo))->Buffer,newstr);
((struct StringInfo *)(gad->SpecialInfo))->BufferPos =0;
((struct StringInfo *)(gad->SpecialInfo))->DispPos =0;
/************************************************
Add Gadget back to display and refresh
*************************************************/
AddGList(win,gad,~0,1,NULL);
RefreshGList(gad,win,NULL,1);
/************************************************
Finally re-activate string gadget
*************************************************/
ActivateGadget(gad,win,NULL);
}
/***********************************************
Add New Record to List(s)
************************************************/
void AddName(struct List *list, struct *list2, UBYTE *name)
{
struct NameNode *namenode;
struct AddressAddress *addrnode;
namenode = AllocMem(sizeof(struct NameNode),MEMF_CLEAR);
addrnode = AllocMem(sizeof(struct AddressAddress),MEMF_CLEAR);
if (!(namenode) || !(addrnode))
{
}
else
{
strcpy(namenode->nn_Address.AddrName,name);
namenode->nn_Node.ln_Name = namenode->nn_Address.AddrName;
namenode->nn_Node.ln_Type = NAMENODE_ID;
namenode->nn_Node.ln_Pri = 0;
AddHead((struct List *)list,(struct Node *)namenode);
addrnode->nn_Node.ln_Name = namenode->nn_Address.AddrName;
addrnode->nn_Node.ln_Type = ADDRNODE_ID;
addrnode->nn_Node.ln_Pri = 0;
AddTail((struct List *)list2,(struct Node *)addrnode);
}
}
void UpdateLVList(struct Window *win,struct Gadget *gad,struct List *list,int num)
{
/************************************************
Remove Gadget prior to update
*************************************************/
RemoveGList(win,gad,num);
/************************************************
Update ListView Display
*************************************************/
GT_SetGadgetAttrs(gad,win,NULL,GTLV_Labels,~0,TAG_DONE);
GT_SetGadgetAttrs(gad,win,NULL,GTLV_Labels,list,TAG_DONE);
/************************************************
Gadget updated now add back to window
*************************************************/
AddGList(win,gad,~0,num,NULL);
RefreshGList(gad,win,NULL,num);
/*
Done???
*/
}
/***********************************************
Find Name in Address Master and create temp list of Address
************************************************/
struct List *FindAddrName(struct List *list, UBYTE *name)
{
struct AddrAddress *node2;
struct List *list2;
list2=AllocMem(sizeof(struct List),MEMF_CLEAR);
NewList(list2);
if (node2 =(struct AddressAddress *) FindName(list,name))
{
while(node2>0)
{
AddAddr(list2,node2);
node2 = (struct AddressAddress *)FindName(node2,name);
}
}
return list2;
}
/***********************************************
Allocate a AddrNode structure, copy the given name into the structure,
then add it the specified list.
************************************************/
void AddAddr(struct List *list, struct AddressAddress *addrnode)
{
struct AddressAddress *namenode=AllocMem(sizeof(struct AddressAddress),MEMF_CLEAR);
if(!(namenode))
{
}
else
{
namenode->nn_Node.ln_Name = addrnode->nn_Data;
namenode->nn_Node.ln_Type = NAMENODE_ID;
namenode->nn_Node.ln_Pri = 0;
AddTail((struct List *)list,(struct Node *)namenode);
}
}
/***********************************************
Delete / Update the Address Line Selected in a list.
************************************************/
void DeleteAddressLine(struct List *list,long number, int DelMode)
{
struct Node *node;
long count=0;
if (list->lh_TailPred == (struct Node *)list)
{
}
else
{
for (node = list->lh_Head ; node->ln_Succ ; node = node->ln_Succ)
{
if(count==number && count >=0)
{
if(DelMode ==0)
{
Remove(node);
FreeMem(node,sizeof(struct AddressAddress));
}
else
{
strcpy(node->ln_Name,GetString(Project1Gadgets[12]));
}
}
count++;
}
}
}
/***********************************************
Delete ALL Address Nodes with a specified name.
************************************************/
void DeleteAddressName(struct List *list, UBYTE *name, int type)
{
struct Node *node;
if (node = FindName(list,name))
{
while(node>0)
{
Remove(node);
if(type==0)
{
FreeMem(node,sizeof(struct AddressAddress));
}
else
{
FreeMem(node,sizeof(struct NameNode));
}
node = FindName(list,name);
}
}
}
/***********************************************
Add Back changes to Address list for Name
************************************************/
void NewAddrName(struct List *list, UBYTE *name)
{
struct NameNode *namenode;
struct Node *node;
struct AddressAddress *addrname;
namenode=(struct NameNode *)FindName(NameList010List,name);
while (list->lh_TailPred!=(struct List *)list)
{
node=(struct node *)list->lh_Head;
Remove(node);
addrname=(struct AddressAddress *)node;
strcpy(addrname->nn_Data,addrname->nn_Node.ln_Name);
addrname->nn_Node.ln_Name = namenode->nn_Address.AddrName;
AddTail((struct List *)AddrList010List,(struct Node *)addrname);
}
}
/***********************************************
Save Data File to Contact97.dat
************************************************/
void SaveDataFile(FILE *output,struct List *list, long DelMode)
{
struct Node *node;
struct NameNode *namenode;
struct AddressAddress *addrnode;
if (list->lh_TailPred == (struct Node *)list)
{
}
else
{
for (node = list->lh_Head ; node->ln_Succ ; node = node->ln_Succ)
{
if(DelMode ==0)
{
namenode=(struct NameNode *)node;
fprintf(output,"01,%s,%s,%s,%s,%s\n",namenode->nn_Address.AddrName,namenode->nn_Address.AddrComp,namenode->nn_Address.AddrEmail,namenode->nn_Address.AddrTel,namenode->nn_Address.AddrFax);
}
else
{
addrnode=(struct AddressAddress *)node;
fprintf(output,"02,%s,%s\n",addrnode->nn_Node.ln_Name,addrnode->nn_Data);
}
}
}
}
/***********************************************
Delete Selected Name from Names/Address
************************************************/
int Delete01Clicked( void )
{
/* routine when gadget "Delete" is clicked. */
int reply=0;
reply=Contact97Request(Project0Wnd,"*** Delete Selected Name?? ***\0","Ok|Cancel\0");
if(reply !=0)
{
if (FindName(NameList010List,GetString(Project0Gadgets[3]))!=0)
{
DeleteAddressName(AddrList010List,GetString(Project0Gadgets[3]),0);
DeleteAddressName(NameList010List,GetString(Project0Gadgets[3]),1);
UpdateLVList(Project0Wnd,Project0Gadgets[4],NameList010List,1);
}
}
}
/***********************************************
Delete Name selected (menu)
************************************************/
int Project0Delete01( void )
{
/* routine when (sub)item "Delete Name" is selected. */
return Delete01Clicked();
}
/***********************************************
Disable Project Window Gadgets
************************************************/
void DummyProjectIDCMP(struct Window *wnd )
{
struct IntuiMessage *m;
while( m = GT_GetIMsg( wnd->UserPort ))
{
GT_ReplyIMsg( m );
}
}
/***********************************************
Free List Nodes of type Name / Address
************************************************/
void FreeNameNodes(struct List *list,int type)
{
struct Node *node;
while(list->lh_TailPred!=(struct Node *)list)
{
node=(struct Node *)list->lh_Head;
Remove(node);
if(type==0)
{
FreeMem(node,sizeof(struct AddressAddress));
}
else
{
FreeMem(node,sizeof(struct NameNode));
}
}
}
/***********************************************
Find sub-string entered
************************************************/
int FindContact01Clicked( void )
{
/* routine when gadget "Find" is clicked. */
if(Project2RawKey()!=95)
{
GT_SetGadgetAttrs(Project2Gadgets[2],Project2Wnd,NULL,GTLV_Labels,~0,TAG_DONE);
namelist_g=FindItThen(GetString(Project2Gadgets[4]));
UpdateLVList(Project2Wnd,Project2Gadgets[2],namelist_g,1);
ActivateGadget(Project2Gadgets[4],Project2Wnd,NULL);
}
}
/***********************************************
Cancel Find window
************************************************/
int CancelFind01Clicked( void )
{
/* routine when gadget "Cancel" is clicked. */
return 100;
}
/***********************************************
Find Item Found Selection
************************************************/
int FindResult01Clicked( void )
{
/* routine when gadget "Result" is clicked. */
char *name=NULL;
long result=0;
long selected=-1;
result=GT_GetGadgetAttrs(Project2Gadgets[2],Project2Wnd,NULL,GTLV_Selected,&selected,TAG_END);
if(result==1 && selected_g==selected)
{
name=LocateFoundNode(namelist_g,selected);
if(name!=NULL) ShowEditContact97(name);
selected =-1;
}
selected_g=selected;
ActivateGadget(Project2Gadgets[4],Project2Wnd,NULL);
}
/***********************************************
Find sub-string entered
************************************************/
int FindEdit01Clicked( void )
{
/* routine when gadget "" is clicked. */
return FindContact01Clicked();
}
/***********************************************
Allocate a AddrNode structure, copy the given name into the structure,
then add it the specified list.
************************************************/
void AddTempName(struct List *list, struct NameNode *addrnode)
{
struct Node *namenode=AllocMem(sizeof(struct Node),MEMF_CLEAR);
if(!(namenode))
{
}
else
{
namenode->ln_Name = addrnode->nn_Address.AddrName;
namenode->ln_Type = NAMENODE_ID;
namenode->ln_Pri = 0;
AddTail((struct List *)list,(struct Node *)namenode);
}
}
struct List *FindItThen(UBYTE *name)
{
struct Node *node;
struct List *list2;
long selected;
long result;
list2=AllocMem(sizeof(struct List),MEMF_CLEAR);
NewList(list2);
namelist_g=list2;
if(node=FindName(NameList010List,name))
{
result=GT_GetGadgetAttrs(Project2Gadgets[12],Project2Wnd,NULL,GTCB_Checked,&selected,TAG_END);
if(result==1 && selected==TRUE)
{
CheckName(list2,name,node);
}
}
else
{
FindItWhen(list2,name);
}
return list2;
}
void FindItWhen(struct List *list,UBYTE *name)
{
struct Node *node;
long selected;
long result;
for(node=NameList010List->lh_Head;node->ln_Succ;node=node->ln_Succ)
{
result=GT_GetGadgetAttrs(Project2Gadgets[12],Project2Wnd,NULL,GTCB_Checked,&selected,TAG_END);
if(result==1 && selected==TRUE)
{
CheckString(list,((struct NameNode *)node)->nn_Address.AddrName,name,node);
}
result=GT_GetGadgetAttrs(Project2Gadgets[6],Project2Wnd,NULL,GTCB_Checked,&selected,TAG_END);
if(result==1 && selected==TRUE)
{
CheckString(list,((struct NameNode *)node)->nn_Address.AddrComp,name,node);
}
result=GT_GetGadgetAttrs(Project2Gadgets[8],Project2Wnd,NULL,GTCB_Checked,&selected,TAG_END);
if(result==1 && selected==TRUE)
{
CheckString(list,((struct NameNode *)node)->nn_Address.AddrEmail,name,node);
}
result=GT_GetGadgetAttrs(Project2Gadgets[9],Project2Wnd,NULL,GTCB_Checked,&selected,TAG_END);
if(result==1 && selected==TRUE)
{
CheckString(list,((struct NameNode *)node)->nn_Address.AddrTel,name,node);
}
result=GT_GetGadgetAttrs(Project2Gadgets[10],Project2Wnd,NULL,GTCB_Checked,&selected,TAG_END);
if(result==1 && selected==TRUE)
{
CheckString(list,((struct NameNode *)node)->nn_Address.AddrFax,name,node);
}
result=GT_GetGadgetAttrs(Project2Gadgets[7],Project2Wnd,NULL,GTCB_Checked,&selected,TAG_END);
if(result==1 && selected==TRUE)
{
CheckAddress(list,name,node);
}
}
}
void CheckString(struct List *list, UBYTE *item, UBYTE *name, struct Node *node)
{
char *item1;
char *name1;
int i;
item1=calloc(strlen(item)+1,sizeof(char));
name1=calloc(strlen(name)+1,sizeof(char));
for(i=0;i<=strlen(item);i++)
{
item1[i]=ToUpper(item[i]);
}
for(i=0;i<=strlen(name);i++)
{
name1[i]=ToUpper(name[i]);
}
if(strstr(item1,name1)!=NULL)
{
CheckName(list,node->ln_Name,node);
}
if(item1!=NULL) free(item1);
if(name1!=NULL) free(name1);
}
void CheckName(struct List *list, UBYTE *name, struct Node *node)
{
if(FindName(namelist_g,name)!=0)
{
}
else
{
AddTempName(namelist_g,(struct NameNode *)FindName(NameList010List,name));
}
}
/***********************************************
Find sub-string in Address Master
************************************************/
void CheckAddress(struct List *list, UBYTE *name, struct Node *node)
{
struct Node *node2;
if (node2 =FindName(AddrList010List,((struct NameNode *)node)->nn_Node.ln_Name))
{
while(node2>0)
{
CheckString(list,((struct AddressAddress *)node2)->nn_Data,name,node);
node2 = FindName(node2,((struct NameNode *)node)->nn_Node.ln_Name);
}
}
}
int fndchk01Clicked( void )
{
/* routine when gadget "Company" is clicked. */
ActivateGadget(Project2Gadgets[4],Project2Wnd,NULL);
}
int fndchk02Clicked( void )
{
/* routine when gadget "Address" is clicked. */
return fndchk01Clicked();
}
int fndchk03Clicked( void )
{
/* routine when gadget "Email" is clicked. */
return fndchk01Clicked();
}
int fndchk04Clicked( void )
{
/* routine when gadget "Phone" is clicked. */
return fndchk01Clicked();
}
int fndchk05Clicked( void )
{
/* routine when gadget "Fax" is clicked. */
return fndchk01Clicked();
}
int fndchk06Clicked( void )
{
/* routine when gadget "Name" is clicked. */
return fndchk01Clicked();
}
char *LocateFoundNode(struct List *list,long item)
{
struct Node *node;
char *name=NULL;
long count=0;
if (list->lh_TailPred == (struct Node *)list)
{
}
else
{
for (node = list->lh_Head ; node->ln_Succ ; node = node->ln_Succ)
{
if(count==item && count >=0)
{
name=node->ln_Name;
}
count++;
}
}
return name;
}
int Project0RawKey( void )
{
/* routine for "IDCMP_RAWKEY". */
if(Project0Msg.Code ==95)
{
SendAmigaGuideCmd(Contact97Guide,"Main",AGA_Context,NULL,TAG_DONE);
}
return Project0Msg.Code;
}
int Project1RawKey( void )
{
/* routine for "IDCMP_RAWKEY". */
if(Project1Msg.Code ==95)
{
SendAmigaGuideCmd(Contact97Guide,"Main",AGA_Context,NULL,TAG_DONE);
}
return Project1Msg.Code;
}
int Project2RawKey( void )
{
/* routine for "IDCMP_RAWKEY". */
if(Project2Msg.Code ==95)
{
SendAmigaGuideCmd(Contact97Guide,"Main",AGA_Context,NULL,TAG_DONE);
}
return Project2Msg.Code;
}
int Project3RawKey( void )
{
/* routine for "IDCMP_RAWKEY". */
if(Project3Msg.Code ==95)
{
SendAmigaGuideCmd(Contact97Guide,"Main",AGA_Context,NULL,TAG_DONE);
}
return Project3Msg.Code;
}
/***********************************************
Print Button on Edit Screen
************************************************/
int PrintIt01Clicked( void )
{
/* routine when gadget "Print" is clicked. */
struct NameNode *namenode;
int reply=0;
if(!(open_printer()))
{
if((namenode=(struct NameNode *)FindName(NameList010List,GetString(Project1Gadgets[10])))!=0)
{
init_printer();
prt_ok_g=0;
prt_ok_g=PrintItNow("Contact Name :", namenode->nn_Address.AddrName);
if(prt_ok_g==0) prt_ok_g=PrintItNow("Company Name :", namenode->nn_Address.AddrComp);
if(prt_ok_g==0) prt_ok_g=PrintItNow("Address :",NULL);
if(prt_ok_g==0) PrintAddrNodes(addrlist_g," ");
if(prt_ok_g==0) prt_ok_g=PrintItNow("\nEmail :", namenode->nn_Address.AddrEmail);
if(prt_ok_g==0) prt_ok_g=PrintItNow("Telephone :", namenode->nn_Address.AddrTel);
if(prt_ok_g==0) prt_ok_g=PrintItNow("Fax :", namenode->nn_Address.AddrFax);
if(prt_ok_g==0) prt_ok_g=PrintItNow("--------------------------------------------------\n",NULL);
if(prt_ok_g==0)
{
reply=Contact97Request(Project0Wnd,"FormFeed Printer??\0","Yes|No\0");
if(reply !=0)
{
PrintItNow("\x0c",NULL);
}
}
}
}
close_printer();
}
/***********************************************
Print Names + Numbers Menu item
************************************************/
int Project0Item1( void )
{
/* routine when (sub)item "Names + Numbers" is selected. */
struct PrinterData *PD;
struct Preferences *prefs;
struct Node *node;
int cnt =3;
prt_ok_g=0;
int reply=0;
reply=Contact97Request(Project0Wnd,"Print Names + Numbers??\0","Yes|No\0");
if(reply !=0)
{
if(!(open_printer()))
{
init_printer();
PD = (struct PrinterData *) pio->ios.io_Device;
prefs = &PD->pd_Preferences;
prt_ok_g=PrintNameTitles();
for (node=NameList010List->lh_Head; node->ln_Succ ; node = node->ln_Succ)
{
if(prt_ok_g==0) prt_ok_g=PrintItLine(((struct NameNode *)node)->nn_Address.AddrName, ((struct NameNode *)node)->nn_Address.AddrTel);
if(prt_ok_g==0) prt_ok_g=PrintItNow("----------------------------------------------------\n",NULL);
cnt+=2;
if(prt_ok_g==0 && cnt >(prefs->PaperLength-2))
{
prt_ok_g=PrintItNow("\x0c",NULL);
prt_ok_g=PrintNameTitles();
cnt=3;
}
}
if(prt_ok_g==0)
{
reply=Contact97Request(Project0Wnd,"FormFeed Printer??\0","Yes|No\0");
if(reply !=0)
{
PrintItNow("\x0c",NULL);
}
}
}
close_printer();
}
}
/***********************************************
Print Names + Addresses Menu Item
************************************************/
int Project0Item2( void )
{
/* routine when (sub)item "Names + Addresses" is selected. */
struct PrinterData *PD;
struct Preferences *prefs;
struct Node *node;
int cnt =0;
prt_ok_g=0;
int reply=0;
reply=Contact97Request(Project0Wnd,"Print Names + Addresses??\0","Yes|No\0");
if(reply !=0)
{
if(!(open_printer()))
{
init_printer();
PD = (struct PrinterData *) pio->ios.io_Device;
prefs = &PD->pd_Preferences;
for (node=NameList010List->lh_Head; node->ln_Succ ; node = node->ln_Succ)
{
PrintItNow("Contact Name :",((struct NameNode *) node)->nn_Address.AddrName);
if(prt_ok_g==0) prt_ok_g=PrintItNow("Company Name :",((struct NameNode *) node)->nn_Address.AddrComp);
if(prt_ok_g==0) prt_ok_g=PrintItNow("Address :",NULL);
if(prt_ok_g==0) cnt +=PrintAddrNodes2(((struct NameNode *) node)->nn_Address.AddrName," ");
if(prt_ok_g==0) prt_ok_g=PrintItNow("\nEmail :", ((struct NameNode *) node)->nn_Address.AddrEmail);
if(prt_ok_g==0) prt_ok_g=PrintItNow("Telephone :", ((struct NameNode *) node)->nn_Address.AddrTel);
if(prt_ok_g==0) prt_ok_g=PrintItNow("Fax :", ((struct NameNode *) node)->nn_Address.AddrFax);
if(prt_ok_g==0) prt_ok_g=PrintItNow("--------------------------------------------------\n",NULL);
cnt+=9;
if(prt_ok_g==0 && cnt >=(prefs->PaperLength -9))
{
prt_ok_g=PrintItNow("\x0c",NULL);
cnt=0;
}
}
if(prt_ok_g==0)
{
reply=Contact97Request(Project0Wnd,"FormFeed Printer??\0","Yes|No\0");
if(reply !=0)
{
PrintItNow("\x0c",NULL);
}
}
}
close_printer();
}
}
/***********************************************
Print Address Nodes for name
************************************************/
void PrintAddrNodes(struct List *list, char type[])
{
struct Node *node;
int cnt =0;
for (node = list->lh_Head ; node->ln_Succ ; node = node->ln_Succ)
{
if(cnt!=0)
{
if(prt_ok_g==0) prt_ok_g=PrintItNow(type,((struct AddressAddress *)node)->nn_Node.ln_Name);
}
else
{
if(prt_ok_g==0) prt_ok_g=PrintItNow(NULL,((struct AddressAddress *)node)->nn_Node.ln_Name);
}
cnt++;
}
}
/***********************************************
Wait for Printer Messages
************************************************/
int WaitForPrinter(void)
{
long signal=0;
signal=Wait(1 << printMsgPort->mp_SigBit | SIGBREAKF_CTRL_C);
if(signal & (1 << SIGBREAKF_CTRL_C))
{
AbortIO((struct IORequest *)pio);
WaitIO((struct IORequest *)pio);
}
if(signal & (1 << printMsgPort->mp_SigBit))
{
while(GetMsg(printMsgPort));
}
return pio->iodrp.io_Error;
}
/***********************************************
Print Text to Printer
************************************************/
int PrintItNow(char *title,char *text)
{
char buffer[100];
if(title!=NULL && text!=NULL)
{
sprintf(buffer,"%s\t%s\n",title, text);
}
if(title==NULL && text!=NULL)
{
sprintf(buffer,"\t%s\n", text);
}
if(title!=NULL && text==NULL)
{
sprintf(buffer,"%s", title);
}
queue_write(buffer);
return WaitForPrinter();
}
/***********************************************
Print Text to Printer
************************************************/
int PrintItLine(char *title,char *text)
{
char buffer[100];
if(title!=NULL && text!=NULL)
{
sprintf(buffer,"%-30s\t%20s\n",title, text);
}
queue_write(buffer);
return WaitForPrinter();
}
/***********************************************
Print Titles for Names + Numbers
************************************************/
int PrintNameTitles(void)
{
if(prt_ok_g==0) prt_ok_g=PrintItLine("Name", "Telephone");
if(prt_ok_g==0) prt_ok_g=PrintItLine("====", "=========");
if(prt_ok_g==0) prt_ok_g=PrintItNow("\n\n",NULL);
return prt_ok_g;
}
/***********************************************
Print Address Nodes for name 2
************************************************/
int PrintAddrNodes2(char *name, char type[])
{
struct Node *node;
int cnt =0;
for (node =FindName(AddrList010List,name) ; node!=0 ; node = FindName((struct List *)node,name))
{
if(cnt!=0)
{
if(prt_ok_g==0) prt_ok_g=PrintItNow(type,((struct AddressAddress *)node)->nn_Data);
}
else
{
if(prt_ok_g==0) prt_ok_g=PrintItNow(NULL,((struct AddressAddress *)node)->nn_Data);
}
cnt++;
}
return cnt-1;
}